1.1 实验内容
SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句多表查询。
1.2 实验知识点
- 交叉连接(cross join)
- 内连接(inner join)
- 外连接(left join ,right join)
- 联合查询(union ,union all)
- 全连接(full join )
1.3 示例表
1.4 多表连接查询
-
交叉查询:cross join
上图中只是单纯的将两张表使用同一条select语句查询出来,并没有添加任何额外的过滤条件,得出的为两张表的“笛卡尔积”
下图为交叉连接的官方建议的标准写法:
由上图可知两种查询结果相同。
-
内连接: inner join
上图中第一种方式为标准的内连接查询方式
-
外连接:left join,right join
“外连接”分为两种,“左外连接”和“右外连接”,我们只需要弄明白其中任何一个,就能明白另外一个是什么意思。
左外连接(left outer join )简称左连接(left join)
对比内连接查询
通过对比,发现在同样的连接条件下“左外连接”查询出的数据多一些,多出的一行由a表中a_id为1的记录和一条“空记录”组成。
可是在b表中并不存在b_id为2的记录啊,为什么不符合连接查询条件的记录也会出现在查询结果中呢?这就是左连接的特性。
左外连接“左侧的表”中所有的记录都会被展示出来,左侧表中符合条件的记录将会与由表中符合条件的记录相互组合连接,左侧中不符合的记录将会与右侧表中的“空记录”进行连接
简而言之: a表所有显示,如果b中无对应关系,则值为null.
右连接与左连接同理
b表所有显示,如果a中无对应关系,则值为null.
-
联合查询(union ,union all)
简单理解成把多个查询语句的查询结果集中在一起显示,语法示例如下:
从图中可以看出,默认情况下,结果集以关键字union前的a表为准,若需以b表为准,更换相应语句顺序即可。
注:
- 当使用union 连接两个查询语句时,两个语句查询出的字段数量必须相同,否则无法使用union进行联合查询
- 使用union时,重复的数据会被合并为一条
我们能不能让重复的数据展示出来?答案是肯定的,使用 union all
解决该问题。
网友评论