1.2 多表查询 1.2.1 内连接 规则:返回两个表的公共记录 语法: -- 语法一 select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 -- 语法二 select * from 表1,表2 where 表1.公共字段=表2.公共字段 例题 -- inner join mysql> select * from stuinfo inner join stumarks on stuinfo.stuno=stumarks.stuno; +--------+----------+--------+--------+---------+------ 在数据库管理中,多表查询是SQL语言中的一个重要概念,特别是在复杂的数据库系统中,往往需要对多个相关的表进行数据检索。MySQL,作为广泛使用的开源关系型数据库管理系统,提供了丰富的查询功能,包括对多表的查询操作。本篇将详细介绍如何在MySQL中执行多表查询,特别是内连接(INNER JOIN)的使用。 内连接是一种查询方式,它返回的是两个表中具有相同匹配值的记录。换句话说,内连接会查找两个表中公共字段相等的行,并将这些行合并成一个结果集。内连接有两种基本的语法形式: 1. **语法一**: ```sql SELECT * FROM 表1 INNER JOIN 表2 ON 表1.公共字段 = 表2.公共字段; ``` 在这个语法中,`INNER JOIN`关键字用于指定我们要进行内连接,`ON`后面的条件则是匹配两个表中公共字段的表达式。 2. **语法二**: ```sql SELECT * FROM 表1,表2 WHERE 表1.公共字段 = 表2.公共字段; ``` 这种语法是早期SQL的写法,同样能够实现内连接,但使用`WHERE`子句来指定匹配条件。 例如,假设我们有两个表,一个是`stuinfo`,存储学生的基本信息,如学号(stuno)、姓名(stuname)、性别(stusex)等;另一个是`stumarks`,存储学生的考试成绩,如学号(stuno)、笔试成绩(writtenExam)、实验成绩(labExam)等。如果我们想获取学生基本信息和其对应的考试成绩,可以使用以下查询语句: ```sql mysql> SELECT * FROM stuinfo INNER JOIN stumarks ON stuinfo.stuno = stumarks.stuno; ``` 执行这个查询,我们将得到一个包含`stuinfo`和`stumarks`表中匹配记录的结果集,每个记录都是学生的基本信息和对应的成绩。例如,学生`s25303`李斯文的学号、姓名、性别与他在`s271811`号考试中的笔试和实验成绩都会被展示出来。 为了优化查询结果,有时我们可能希望避免重复显示相同的字段。在这种情况下,我们可以选择性地列出需要的字段,如下所示: ```sql mysql> SELECT s.stuno, stuname, stusex, writtenexam, labexam FROM stuinfo s INNER JOIN stumarks m ON s.stuno = m.stuno; ``` 这将只显示`stuinfo`表中的学号、姓名和性别,以及`stumarks`表中的笔试和实验成绩,而不会重复显示公共字段。 另外,也可以用`WHERE`子句达到相同的效果,如下: ```sql mysql> SELECT * FROM stuinfo, stumarks WHERE stuinfo.stuno = stumarks.stuno; ``` 这种写法虽然直观,但在处理大型数据时可能会导致性能问题,因为它会创建两个表的笛卡尔积,然后根据`WHERE`条件过滤结果,效率较低。 总结来说,MySQL中的多表查询,特别是内连接,是数据检索的核心工具。它使得我们可以从多个相关表中有效地组合和筛选数据,满足各种复杂的数据分析需求。在实际应用中,根据具体场景选择合适的查询语法和优化策略,可以显著提高查询效率和数据处理能力。
- 粉丝: 5
- 资源: 943
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0