1、group by 根据某个字段进行分组,分组后使用having语句做筛选
-- 查询名下有多个有效合同的学生列表
select sid,count(*) as count from stu_contract where c_status = 4 group by sid having count > 1
2、Having与Where的区别
where 子句:分组前过滤数据,where条件中不能包含聚合函数(sum,count,avg,max,min)
having 子句:分组后过滤数据,条件中可包含聚合函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
3、联合查询
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- INNER JOIN: 只返回两个表中联结字段相等的行
eg场景:
①、 一个表存储所有开通JD会员的用户信息 jdvip
jd.png②、一个表存储所有的开通QQ会员的用户信息 qqvip
qqvip.png③、查询所有开通会员的用户均可使使用左右联合查询与内查询
result.pngimage.png说明:
左查询就是说满足查询条件的前提下,即使右表数据为空,填充NULL ,从左表返回所有数据(18736775937开通了qqvip, 未开通jdvip)。
右查询就是说满足查询条件的前提下,即使左表数据为空,填充NULL ,从右表返回所有数据(13311907404开通了jdvip, 未开通qqvip)。
左右查询易于比较数据差异
内查询就是严格匹配连接字段。即俩表的交集(即开通jdvip又开通了qqvip的用户)
网友评论