分组查询(重要)
分组查询的语句: groupby和having
Having必须搭配group by 使用 不能单独使用,不能代替where使用。Where和having优先选择where;
需要对数据进行分组,再进行操作;
语法:
Select………From………where………Group by………having………order by…… |
语句执行顺序:
第一步:from
第二步:where
第三步:group by
第三步:select
第四步:order by
当语句中有group by 字段;select后面的字段只能跟参与分组的字段名或分组函数。
Where和having优先选择where;where完成不了在选择having;
Where : 先筛选再分组;
Having : 先分组再筛选;
连接查询(重点)
- 去除重复记录:distinct
Distinct 只能出现在所有字段的最前方;表示所有字段联合起来去除重复记录;
连接查询:也可以叫做跨表查询,需要关联多个表进行查询;
从一张表中查询数据叫单表查询;
连接查询分类:
- 根据语法年代分类:SQL92 和SQL99
- 根据表连接的方式:内连接,外连接,全连接。(外连接查询条数>=内连接查询条数)
内连接(inner):所有表平等
等值连接:条件是一个某个值相等的关系;
内连接和外连接可以混合使用 |
非等值连接:条件不是一个等量关系;
自连接:一张表看成两张表
外连接(outer):表产生了主次关系
左外连接(左连接):left
右外连接(右链接):right,表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询显示出来,捎带查询左边的表。
内连接:等值连接:
连接两个表关键字:“ inner join”,inner可以省略,即:“join“;
A表 join B表 on 连接条件; SQL99优点:连接时独立的;
三张表,四张表怎么连接?
语法:
Select…from…a表…join…b表…on(a和b连接条件)…join…c表…on(a和c的连接条件)…join…d表…on(a和d的连接条件)
子查询
什么是子查询:select语句中嵌套select语句,被嵌套的select语句称为子查询。
子查询可以出现再那里呢?
Select
(select):select后面的子查询,只能返回1条结果,多余1条,就报错;
From
(select):(from后的子查询,可以将子查询的结果当作临时的一张表。)
Where
(select)
Where子句中出现子查询: