接着上次的内容,我们继续学习MySQL的查询。上次主要是介绍单表查询,即对一张表格进行筛选查询,下面我们介绍多表查询,简单来说当我们需要查询的内容分布在不同的多张表格时,我们就需要采用多表连接的方法查询所需的字段。
一、连接查询
1、含义
连接查询是我们多表查询最简单的一种方法,当然在查询的过程给予适当的条件,若没有添加有效的条件,则会实现完全连接(笛卡尔乘积),语法如下:
select 字段1,字段2,.... from 表1,表2,....
【筛选条件】
2、分类
连接查询在SQL中按语法版本分成了2个版本,SQL92和SQL99,具体分类如下:
3、SQL92下的语法
(1).等值连接
语法:select 查询列表
from 表1 别名,表2 别名
where 表1.字段 = 表2.字段 #使用表之间的主键作为连接条件
【and 额外筛选条件】
【gruop by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:1、一般为表起别名
2、多表的顺序可以调换
3、n表连接至少需要n-1个连接条件
4、等值连接的结果是多表的交集部分
(2).非等值连接:与等值连接一致,区别在于连接条件改为 where 表1.字段 != 表2.字段
(3).自连接:与等值连接一致,区别在于连接的表格为自身
4、SQL99的语法
(1).内连接
语法:select 查询列表
from 表1 别名
inner join 表2 别名 on 连接条件 # 自连接设置
where 筛选条件 # 筛选条件决定等值连接、非等值连接
【group by 分组列表】
【having 分组后的筛选条件】
【order by 排序列表】
特点:1、表的顺序可以调换
2、内连接的结果实则是多表的交集
3、n表连接至少需要n-1个连接条件
(2).外连接
语法:select 查询列表
from 表1 别名
left|right|full join 表2 别名 on 连接条件
# join前的关键字设置外连接 (左连接、右连接、全连接)
# on 设置连接的条件(等值连接、非等值连接)
【where 筛选条件】
【group by 分组列表】
【having 分组后的筛选】
【order by 排序列表】
特点:1、查询的结果为主表中所有行,如果从表和它匹配的将显示匹配行,如果从表没有匹
配的则显示null。
2、left join 表1为主表 , right join 表2为主表,full join 两边都是主表
(3).交叉连接
语法:select 查询列表
from 表1 别名
cross join 表2 别名
特点:类似于笛卡尔乘积,实现完全连接。
二、子查询
1、含义
嵌套在其他查询语句内部的select语句称为子查询,且子查询的结果通常是使用()括住。
2、分类
三、分页查询
1、含义
当我们需要查询的结果集规模太大时,我们需要选取结果集中的某些记录输出,我们就可以使用分页查询,分页查询的关键字为 limit 。
2、语法
select 查询列表
from 表1
【...各类语句】
limit 【offset】size; #offset 代表的是起始的条目索引,默认从0开始;size代表显示的条目数
四、连接查询
1、含义
将多次查询的结果合并成一个结果,使用关键字 union。
2、语法
查询语句1
union【all】
查询语句2
union【all】
......
3、特点
1、将一条比较复杂的查询语句拆分成多语句
2、要求查询语句查询的各列类型、顺序最好一致
3、union 若不添加 all 关键字,会去掉重复的记录