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'
在这里记录下来,以加深理解