Sql联合查询的理解

Sql联合查询的理解

无意中看到一篇SQL联合查询的博客,

[https://blog.csdn.net/weixin_43093501/article/details/96732667?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control]

因很久没有使用复杂的查询,对于一些sql语句已经很生疏了,花了点时间,自己动手尝试,终于理解了联合查询。数据如下表:

id  type score
'1', '1', '80'
'1', '2', '90'
'1', '3', '99'
'2', '2', '60'
'2', '3', '80'
'3', '1', '80'
'3', '2', '80'
'3', '3', '80'

id可理解为学号,type可理解为课程,score即成绩,要求查出每科课程的最高分的学生信息,

使用分组查询,SELECT type,max(score) from concurrent_test.new_table group by type;
查询结果如下:

type score
'1', '80'
'2', '90'
'3', '99'

由此可知type有三种,但是假如我们不知道有哪些具体课程,或者课程是变量,如何优雅的写sql?
这篇博客给出的语句是:

select * 
from test as a 
where score = (
select min(score) 
from score as b 
where b.type = a.type);

我的理解如下,先查出

SELECT  type,max(score) from concurrent_test.new_table group by type;

作为一张子表,再依次从全表找出子表的第一行,第二行,第三行…,也即从全表当中查type=1且成绩=80的学生信息,有两个结果…
最终结果如下:

id  type   score
'1', '1', '80'
'1', '2', '90'
'1', '3', '99'
'3', '1', '80'

在这里记录下来,以加深理解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值