连接查询
多表连接查询就是从多个表中获取数据,若两张表进行连接查询的时候没有任何条件限制,最终的查询结果总数是两张表记录的乘积,该现象称为笛卡儿积现象。
内连接
根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的行,组合成新的记录。
分类:
- 等值连接:连接条件为相等判断的
- 非等值连接:连接条件不为相等判断的
- 自连接:在一个连接查询中,涉及的两个表都是同一张表的查询,自连接是一种特殊的连接查询,它指相互连接的表在物理上为同一张表,在逻辑上分为两张表
外连接
A 表和 B 表能够完全匹配的记录查询出来之外,将其中一张表的记录无条件的完全查询出来,对方表没有匹配的记录时,会自动模拟出 null 值与之匹配。
注:外连接的查询结果条数 >= 内连接的查询结果条数
分类:
- 左外连接 left [outer] join:显示左表全部记录,右表满足连接条件的记录
- 右外连接 right [outer] join:显示右表全部记录,左表满足连接条件的记录
练习
子查询
子查询:嵌套在其他 SQL 语句内的查询语句,且必须出现在圆括号内(查询一般指 select 语句)。
子查询的结果可以作为外层查询的过滤条件或计算字段。
使用子查询过滤
select 字段1[,字段2 ... ]
from 表1
where 字段1 [not] in(select 字段1 from 表2 where 条件);
子查询一般与 [not] in 结合使用,也可使用其他运算符:>< = !=
all、any、some 是用于条件比较的关键字,用于比较一个值与子查询结果集中的多个值
- all:表示与子查询结果集中的所有值进行比较,需要满足条件的是所有值
- any、some:any 和 some 含义相同,与子查询结果集中的值比较,有任意一个满足条
- 件即可
子查询作为计算字段
select 字段1,字段2,...,(select 聚合函数 from 表2 [where 表2.字段1=表1.字段1])
from 表1 [where 条件];
练习
注:子查询也可以作为表