三个表查询sql语句_SQL语句的多表查询

1.练习如何合并连个表,注意使用union all语句表示保留重复项

6db86a056e1bd3cfca8caa7567f9e5bc.png

2.内联结:

在from子句中同时使用了两张表,并对每张表起了别名a和b, student as a;在列名中用" a.列名"表示某一句;from子句中用inner join表达内联结,选取出同时存在于两张表中的数据;on子句中表达两个表中用学号,产生了关系。on的作用就好像桥梁一样。

e375d6e97f728a6abd13c047ac885634.png

3.左联结:以left join表示左连接,加入where子句,表示去掉表a和表b的两者交集的公共之处。注意是:is null表示在表格B中,学号一列为空值

a447507396fa1f80692db1e37be5d725.png

4.右联结:使用right join语句来表示右联结。若只取右边一侧,则where子句左边为空。

a7c351fc6cb69241791b58eb45f9878d.png

5.查询所有学生的学号、姓名、选课数、总成绩:用sql解决业务问题的三步走:翻译成大白话+写出分析思路+写出对应的sql子句

select a.学号,a.姓名,count(b.课程号) as 选课数, sum(b.成绩) as 总成绩
from student as a left join score as b
on a.学号=b.学号
group by a.学号;

e4f7d15abed6e72eb661ededc0002b7a.png

6.查询平均成绩大于85的所有学生的学号、姓名、平均成绩

select a.学号,a.姓名,avg(b.成绩) as 平均成绩
from student as a left join score as b
on a.学号=b.学号
group by a.学号
having avg(b.成绩)>85

cfee70c078df876f4cb0c897b6c52ba6.png

7.查询学生的选课情况:学号,姓名,课程号,课程名

select a.学号,a.姓名,c.课程号,c.课程名称
from student as a inner join score as b
on a.学号=b.学号
Inner join course as c
on b.课程号=c.课程号

4fd93b3f4a326ef208e4ae9397cd78a1.png

8.查询出每门课程的及格人数和不及格人数:case表达式的注意事项:1.else可以表达不写,则表示空值,但不建议省略 2.end不可以省略不写 3.case表达式也可以写在子句中

select 课程号,
sum(case when 成绩>=60 then 1
else 0
end) as 及格人数,
sum(case when 成绩<60 then 1
else 0
end) as 不及格人数
from score
group by 课程号;

79876e4238435ec462c7d9f1819c542a.png

9.使用分段【100-85】,【85-70】,【70-60】,【<60】来统计各科成绩,分别统计各分数段人数;课程号和课程名称。注意,用group by分组时,加入b.课程名称实际上并不影响分组结果。

select a.课程号, b.课程名称,
sum(case when 成绩 between 85 and 100 then 1 else 0 end) as'[100-85]',
sum(case when 成绩 >=70 and 成绩<85 then 1 else 0 end) as'[85-70]',
sum(case when 成绩>=60 and 成绩<70 then 1 else 0 end) as'[70-60]',
sum(case when 成绩<60 then 1 else 0 end) as '[<60]'
from score as a right join course as b
on a.课程号=b.课程号
group by a.课程号,b.课程名称;

e146a60e31f9acb40ee5d7511c4e402e.png

SQLZOO:The JOIN operation

1.

6022d207cf0c0a3a536776e9c3be93dc.png

2.

e46c37f5a098504c66a303db04732ae5.png

3.利用join子句

0adc79c007bda86e9449693ec7e9adcc.png

4.

e37a2474a97ca4bdc35a7d3f0a092e44.png

5.

951a975c5d02bff4106362a223a4c85c.png

6.

331cefb2feb793f1e9711da68cda41a0.png

7.

26c8f0d96b4d426a67cc69d2bee3b5f0.png

8.注意顺序勿要写错

d04febf17e28e7cb7e9ccb36b1474e51.png

9.可count player和teamname都可以~

9061664e78e13608ad6b97b276e97efc.png

10.依然运用group by语句

37e350b2e772baadaaaf8744d57c3c67.png

11.

0bf3e1aa199678a269eec1eb80e161dd.png

12.已经指明德国有入球,则可在goal表中选择即可

d1c8265a41bf4ea172edee1cd8e920c5.png

13.注意此处使用left join

db33db20bfa2c6b9370aecacd1548cb3.png
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值