MYSQL查询小结(三)
一.分组查询
1,语法:
select 表查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;
2,特点
(1)和分组函数一同查询的字段必须是group by后出现的字段;
(2)筛选分为两类:分组前筛选和分组后筛选
分组前筛选:针对原始表,位置在group by前,连接的关键字为where;
分组后筛选:针对的表为group by后的结果表,位置在group by后面,连接的关键字为having。
(3)分组可以按单个字段也可以按多个字段;
(4)可以搭配着排序使用。
二.连接查询
1.含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
2.语法:
select 字段1,字段2
from 表1,表2,...;
3.分类:
(1)按年代分类:
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外连接(左外右外)+交叉连接
(2)按功能分类:
内连接:等值连接、非等值连接、自连接;
外连接:左外连接、右外连接、全外连接;
交叉连接。
4.SQL92语法
(1)等值连接
语法:
select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:
① 一般为表起别名
②多表的顺序可以调换
③n表连接至少需要n-1个连接条件
④等值连接的结果是多表的交集部分
(2)非等值连接
语法:
select 查询列表
from 表1 别名,表2 别名
where 非等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
(3)自连接
语法:
select 查询列表
from 表 别名1,表 别名2
where 等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
5.SQL99语法
(1)内连接
语法:
select 查询列表
from 表1 别名
【inner】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
特点:
①表的顺序可以调换
②内连接的结果=多表的交集
③n表连接至少需要n-1个连接条件
分类:等值连接、非等值连接、自连接
(2)外连接
语法:
select 查询列表
from 表1 别名
left|right|full【outer】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
特点:
①查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
②left join 左边的就是主表,right join 右边的就是主表
full join 两边都是主表
③一般用于查询除了交集部分的剩余的不匹配的行
(3)交叉连接
语法:
select 查询列表
from 表1 别名
cross join 表2 别名;
特点:类似以笛卡尔乘积。
还可以查看:
MYSQL查询小结(1)
MYSQL查询小结(2)