两个sql交集_sql的高级命令运用

依旧准备好三张有关联的表格:学生表t_student,班级表t_class,成绩表t_grade

d83cf8fce3832ff734ca13ee6415385c.png

c7a0db5cfbea94a7a6d70019572c8cc2.png

50a06657355a0171b3d133b0a7ac7040.png

回顾:多表联查,select a.id,a.sname,b.cname,c.chinese,c.math,c.english from tstudent a a join t_class b on a.cid=b.id join t_grade c on c.sid = a.id where c.chinese>100

28515a60e4ecaf86c58dd1da2b62afe0.png

一,sql分组group by的运用

问:假设统计以班级为分组,两个班级的平均分

输入命令:select b.cname,avg(c.chinese+c.math+c.english) a from tstudent a a join t_class b on a.cid=b.id join t_grade c on c.sid group by b.cname;

777eceb5f0b94248a65b85c0413ca7ea.png

注意:分组group by 必须和聚合函数配合使用,不能单独用

问:查询出男女的人数和男女中最大的年龄

89bdb8c734b1c200d14960d19611f2d2.png

问:查询出同名的人

d0c509289afe37b8a1596f2747583b3a.png

注意:添加条件时,筛选分组后的数据用having,筛选分组前的用where

问:统计出每个班的语文成绩大于100分的同学的语文平均分,并只显示平均分高于110的班级

6ce681677e48404aa5129f16186724a6.png

二,数据排序order by的运用

正序:asc(可省略) 倒序:desc

问:将学生表的学生按照年龄倒序排序

ea430025bc2951f460c07f2b082a631e.png

三,限制数据显示limit的运用

如:select * from t_student limit 0,5

0,代表从哪条开始显示,5,表示显示多少条(0可省略)

e37aee27a790e94d45716cee9f7c4b00.png

问:统计出每个班语文平均分成绩大于100的同学的班级语文平均分,然后显示出平均分最高的班级

c350a953d54f7e2902297ad98a7024af.png

四,条件语句case when ...then... end 的运用

问:30岁以内显示青年,30-60显示壮年,60以上显示老年

剩余可以用else

d3014b9e65a579d0429824273112fa98.png

五,多表联查的方式

1,内连接(join): 显示的数据是取自两表的交集(只显示两表关联的上的字段)

2,外连接:取自两表的并集

左连接(left join):显示左表的所有数据和两表关联上的数据

右连接(right join):显示右表的所有数据和两表关联上的数据

68ee626e26cccab024c30dac79506186.png

六,嵌套查询

通过 把查询结果作为表/条件/列 进行查询

如:

2ca02f6496599710e6b82cb65a6f453c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值