上海百度做网站,做消费金融网站,我想建网站做推广,泉州网站设计哪家公司好数据表#xff08;4张#xff09;及数据情况#xff1a;搭建数据表数据参考#xff1a;空杯希望#xff1a;转行数据分析师专栏#xff08;SQL篇#xff09;-01SQL入门zhuanlan.zhihu.com一、表的加法1、先新建一个表course1#xff08;和course表数据结构一致#…数据表4张及数据情况搭建数据表数据参考空杯希望转行数据分析师专栏SQL篇-01SQL入门zhuanlan.zhihu.com一、表的加法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 NULL3、右联结right join返回包括右表中的所有记录和左表中联结字段相等的记录案例查询考过课程的学生信息列名包括学号、姓名和课程号、分数跟左联结的案例2结果一直SELECT a.学号,a.姓名,b.课程号,b.成绩
FROM student AS a
RIGHT JOIN score AS b
ON a.学号 b.学号4、全联结full join存在匹配匹配显示同时将各个表中不匹配的数据与空数据行匹配进行显示。可以看成是左外连接与右外连接的并集。注意Mysql不支持full join5、一张图总结SQL联结三、联结应用综合案例1、查询所有学生的学号、姓名、选课数、总成绩-- 1学号、姓名学生表student
-- 2选课数每个学生的选课数目成绩表score按学号分组对课程号计数count
-- 3总成绩每个学生的总成绩成绩表score按学号分组对成绩求和sum
SELECT st.学号,st.姓名,count(课程号),sum(成绩)
FROM student as st LEFT JOIN score as sc on st.学号sc.学号
GROUP BY 学号2、查询平均成绩大于85的所有学生的学号、姓名和平均成绩-- 1查询出所有学生的学号成名平均成绩学号姓名在学生表student
-- 平均成绩每个学生的平均成绩在成绩表score按学号分组平均成绩avg(成绩)
-- 2) 平均成绩85
SELECT st.学号,st.姓名,avg(成绩)
FROM student AS st
RIGHT JOIN score AS sc ON st.学号 sc.学号
GROUP BY 学号
HAVING AVG(成绩) 85;四、case表达式案例1查询出每门课程的及格人数和不及格人数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 课程号案例2使用分段[100-85],[85-70],[70-60],[60]来统计各科成绩分别统计各分段人数课程号和课程名称。SELECT SUM(CASE WHEN sc.成绩100 AND sc.成绩85 THEN 1 ELSE 0 END)AS [100-85],
SUM(CASE WHEN sc.成绩70 AND sc.成绩85 THEN 1 ELSE 0 END)AS [85-70],
SUM(CASE WHEN sc.成绩70 AND sc.成绩60 THEN 1 ELSE 0 END)AS [70-60],
SUM(CASE WHEN sc.成绩60 THEN 1 ELSE 0 END)AS [60]
,sc.课程号,co.课程名称
FROM course as co RIGHT JOIN score as sc ON co.课程号sc.课程号
GROUP BY sc.课程号,co.课程名称五、练习题链接:The JOIN operation/zhsqlzoo.net往期数据分析专栏转行数据分析师专栏Excel篇zhuanlan.zhihu.com