语句查询每个⼈每个科⽬的最⾼分_转⾏数据分析师专栏
(SQL篇)-05多表查询...
数据表(4张)及数据情况:
搭建数据表数据参考:
空杯希望:转⾏数据分析师专栏(SQL篇)-01SQL⼊门z huanlan.zhihu
⼀、表的加法
sql中union多表合并
1、先新建⼀个表course1(和course表数据结构⼀致,但数据不⼀样)
course1表
2、union:将course和course1表数据合并
UNION 操作符⽤于合并两个或多个 SELECT 语句的结果集。
注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
-- 对重复的数据(0001,语⽂,教师号)只保留⼀⾏
SELECT 课程号,课程名称
FROM course
UNION
SELECT 课程号,课程名称
FROM course1
-- 保留重复的数据
SELECT 课程号,课程名称
FROM course
UNION ALL
SELECT 课程号,课程名称
FROM course1
⼆、表的联结
1、内联结(inner join,默认为join)
只返回两个表中联结字段相等的⾏
案例:查询有考试记录的每个学⽣考过哪些课程,列名包括学号,姓名,课程号
-- 1、0002学号在score表⾥没有0001课程号的数据,所以查询结果不存在这⾏数据-- 2、0004学号在score表⾥没有任何课程号的数据,所以查询结果没有这位学⽣数据SELECT a.学号,a.姓名,b.课程号
FROM student AS a
INNER JOIN score AS b
ON a.学号 = b.学号
2、左联结(left join)
返回包括左表中的所有记录和右表中联结字段相等的记录
案例1:查询全部学⽣的学号,姓名及考试科⽬(课程号)
-- 0004学号在score表虽然没有记录,但因为是左表的数据,所以会保留在查询结果SELECT a.学号,a.姓名,b.课程号
FROM student AS a
LEFT JOIN score AS b
ON a.学号 = b.学号
案例2:不显⽰案例1王思聪的数据
SELECT a.学号,a.姓名,b.课程号,b.成绩
FROM student AS a
LEFT JOIN score AS b
ON a.学号 = b.学号
WHERE b.学号 IS NOT NULL
3、右联结(right join)
返回包括右表中的所有记录和左表中联结字段相等的记录
案例:查询考过课程的学⽣信息,列名包括学号、姓名和课程号、分数(跟左联结的案例2结果⼀直)
SELECT a.学号,a.姓名,b.课程号,b.成绩
FROM student AS a
RIGHT JOIN score AS b
ON a.学号 = b.学号
存在匹配,匹配显⽰;同时,将各个表中不匹配的数据与空数据⾏匹配进⾏显⽰。可以看成是左外连接与右外连接的并集。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论