多表联合查询:
- 条件:连接到一起的两张表,必须存在公共字段(主外键关系的字段就是公共字段)。名字可以不同,但是数据的含义、字段的类型、长度必须一致。(学生表和商品表就没有公共字段,两张表不适合做连接查询)。
- 类型:不同的连接类型,连接后的查询结果不同
- (1)内连接:返回两张表记录的交集
(2)外连接:返回任意一张表的全部记录
(3)自连接:一张表自己和自己连接,特殊的表结构
(4)交叉连接:一张表的所有记录分别与另外一张表的所有记录匹配(不会管两张表是否有公共字段,交集。第一张表有4条记录,第二张表有3条记录,交叉连接最后的结果是4*3=12条记录),又称笛卡尔积 - 内连接:将两张表在公共字段上有相同值的记录连接在一起成为查询结果。
返回两张表记录的交集
select 两张表的字段
from 表1 inner join
on 表1.公共字段 = 表2.公共字段
where……
order by……
- 外连接:左外连接、右外连接、全外连接
- 左外连接:返回内连接的查询结果+左表的剩余记录
返回左表的全部记录以及右表的相关记录
select 两张表的字段
from 表1 left [outer] join
on 表1.公共字段 = 表2.公共字段
where……
order by…… - 右外连接
返回内连接的查询结果+右表的剩余记录
返回右表的全部记录以及左表的相关记录
select 两张表的字段
from 表1 right [outer] join
on 表1.公共字段 = 表2.公共字段
where……
order by……
- 全外连接
- 返回内连接的查询结果+左右表的剩余记录
返回两张表的全部记录以及另外一张表的相关记录 嵌套查询:
- union:可以连接两个查询,要求,字段的个数必须一样。如果两个查询对应的字段的含义相同,类型一样union还可以合并相同的记录,否则重复呈现
- 格式:左连接 union 右连接
- 注:MySQL数据库中不支持使用full join实现全外连接,通过左外连接的查询结果和右外连接的查询结果的组合(union)间接实现全外连接的效果.
- 一个查询中嵌入另外一个查询
- 外层查询的where条件字段和内层查询的查询字段匹配。
- 执行效率很低的查询:外层查询从表中每筛选一条记录,内层查询都要重新执行一次
- 外层查询的where条件如果使用的是比较运算符,内层的查询结果只有一个值;如果内层的查询结果有多个值,外层的条件可以使用in
- 外层查询和内层查询可以是不同的表,但仍属于单表查询,能查出来的字段只能是外层查询表中的字段