33
1.表的加法(union)
表的加法是将两个表的数据,按照行合并到一起。合并时会把重复的数据删除。
如果想保留重复的行,应在union后加all
练习一:如何合并两个表?
方法一:新建course1表后合并
![90b101fe71e1ac42a4b4aee7852d3871.png](https://i-blog.csdnimg.cn/blog_migrate/d79ee9e6c20ee0111df848d945fca8b3.png)
![d5dbfd3af01cdb7e12b70d3e73177133.png](https://i-blog.csdnimg.cn/blog_migrate/d2fbfd2b5e3cc137ac7c880860dfd237.png)
![aa3615144e4eeae0bb18e24333646715.png](https://i-blog.csdnimg.cn/blog_migrate/0fa9b20ddc247d02c79cce24aac9ba3c.png)
方法二:course-复制表-数据与结构-重命名-打开表-修改数据-写下两表合并的sql语句
![0538b69a0cf07123403b9b20a0680fff.png](https://i-blog.csdnimg.cn/blog_migrate/47154cf03d08a98c12d7cf78137201b9.png)
![7f4eb1295b598e8b21fedb8f577ad796.png](https://i-blog.csdnimg.cn/blog_migrate/aaaba4136fbccd1897d29de033807df9.jpeg)
2.表的联结
使用as关键字方便使用,列名前要加表的别名,innerjoin 选出同时存在两个表中的数据。
内联结的sql语句:
select a.学号,a.姓名,b.课程号
from student as a inner join score as b
on a.学号=b.学号
左联结的sql语句:
select.a.学号,a.姓名,b.课程号
from student as a inner join score as b
on a.学号=b.学号
SELECT a.学号,a.姓名,b.课程号
from student as a LEFT JOIN score as b
on a.学号=b.学号
WHERE b.学号=NULL
右联结的aql语句:
SELECT a.学号,a.姓名,b.课程号
from student as a RIGHT JOIN score as b
on a.学号=b.学号
WHERE a.学号=NULL、
全联结
联结应用案例:
练习二:查询所有学生的学号,姓名,选课数,总成绩
分析思路:因为涉及到两张表所以要用到联结-如何联结?-通过学号-用哪种联结?因为查找每个学生的信息,要保留学生表里的所有学号-左联结-where 查询条件无-group by分组,每个学生的选课数-按学号分组对课程数计数count-按学号分组,对学生成绩进行求和sum-having无-order by 对结果排序无-limit无
![5d23e387f577defbe90e62d5afbe0d17.png](https://i-blog.csdnimg.cn/blog_migrate/910bb139e71257739efaba13c1b883f7.jpeg)
练习三:查询平均成绩大于85分的所有学生的学号,姓名,平均成绩。
仍然涉及学生表student与score成绩表;因为是联结查询,要在select子句中的各个列名加上表的别名。
因为平均成绩是分组后得到的。分组结果加上条件---。用Having子句。
![d062b1fcf486018bc4ccfddf926cd250.png](https://i-blog.csdnimg.cn/blog_migrate/0ac50231c0934d5da90bc9abe7d1f68c.jpeg)
练习四:查询学生的选课情况:学号,姓名,课程号,课程名称(此题涉及三表联结)
![5c57c8c951197663ec8e8eb766e5ab87.png](https://i-blog.csdnimg.cn/blog_migrate/2bffb2928f8160867159cc08390fadd3.jpeg)
CASE 表达式
练习五:查询成绩是否及格
select 学号,成绩,课程号,
(case when 成绩>=60 then'及格'
when 成绩<60 then'不及格'
else null
end)as 是否及格
from score;
查询出每门课程的及格人数和不及格人数
当有多种情况需要条件判断时候,使用case 表达式
![70c2359a257152c875f9a42232f63912.png](https://i-blog.csdnimg.cn/blog_migrate/63ea537f0bc622e87c6e8a21b55e2511.jpeg)
使用分段【100-85】,【85-70】,【70-60】,【<60】来统计各科成绩,来统计各科成绩,分别统计各分数段人数,课程号和课程名称。
这道题遇到了很多问题,在社群会员的帮助下,终于得到了正确答案。
错误答案:错误原因是第一行select b.课程名称后面要加逗号,
from行中 a.课程号应该等于b.课程名称
![6ebfac1cfd2464755b72122db8e64c09.png](https://i-blog.csdnimg.cn/blog_migrate/a06af48cd2ca1bbbbff045bc1808a323.jpeg)
![43a902546e10ab01d309879c2e6161f4.png](https://i-blog.csdnimg.cn/blog_migrate/664458f7d17eea3787febbe06d03eaec.jpeg)
SQLZOO 练习:Join Operation
![4a83b7ec6a5775a8f5e9b555850af8d1.png](https://i-blog.csdnimg.cn/blog_migrate/d240091df72a7fbac6fc72dc066c8004.jpeg)
![ea2e3b4b6d683f41d384e72649a793f1.png](https://i-blog.csdnimg.cn/blog_migrate/6ba34375b0bb6cf5e0b69d666c64e3c0.jpeg)
![11b580a0e7e17c86b333d5e84ff337db.png](https://i-blog.csdnimg.cn/blog_migrate/f1e083feec2e85395dede2c4b9b12e92.jpeg)
![0fa147d8848a0fa12029dabf6625dccb.png](https://i-blog.csdnimg.cn/blog_migrate/fd060f26d6dd57d447fe29ce17ff0b63.jpeg)
![36786948f7ccb87691dd740de441fb98.png](https://i-blog.csdnimg.cn/blog_migrate/c16fe37d77100b35e7b6e39224f8fa88.jpeg)
![ed5a9eeca34e800cc30056dcf6a4f666.png](https://i-blog.csdnimg.cn/blog_migrate/68f9d6d97054b57ce22fed9d24789d0d.jpeg)
![52e228db4aa2213a889356a7fa9e4767.png](https://i-blog.csdnimg.cn/blog_migrate/a4d01e7ea8d31cb7c9e0c8c65effbdf1.jpeg)
![88fb548209d9d233c0741b950440fffb.png](https://i-blog.csdnimg.cn/blog_migrate/5facbba232c0b35c6f8efa90793cf944.jpeg)
分析思路:
首先分析问题,求对德国的比赛中得分的球员姓名。
要用到哪张表?球员姓名在goal表,对战德国的比赛,说明主场team1或者客场team2有一方应是德国,用到game表。
两表关系:两表内联结,但有重复值,用distinct去掉
条件:用teamid!='GER'防止列出德国球员;主客场有一方是德国,所以a.team1='GER' or a.team2='GER
code:
SELECT distinct(b.player)
FROM game as a inner join goal as b ON a.id = b.matchid
WHERE b.teamid!='GER'and (a.team1='GER' or a.team2='GER')
![db3b7ed0cae08627505671f3e862110a.png](https://i-blog.csdnimg.cn/blog_migrate/5bba698104403518fbbea4a18c996244.jpeg)
![4db9b06f69673566c79ea572ad06ab4c.png](https://i-blog.csdnimg.cn/blog_migrate/e76539631a95164a98af9ad3ee042a69.jpeg)
![68af3ee197cf29275d96e37463e3d3fb.png](https://i-blog.csdnimg.cn/blog_migrate/906e1da38a6f4fbf4611ca37f0311a03.jpeg)
![5e5da9130548171a6f0b9cef2f6c53fb.png](https://i-blog.csdnimg.cn/blog_migrate/8decd1214c82dd668ff76c2f7fe80297.jpeg)
![534e9ec8eead86122a4500eea6c4720c.png](https://i-blog.csdnimg.cn/blog_migrate/f1c016731ebb7634db27189879625c55.jpeg)
![22196cfe6e48f904ee55cb7b496b6e8e.png](https://i-blog.csdnimg.cn/blog_migrate/41f68602948ffcf67f2fa482dabf3e80.jpeg)
![6443e5f669975ec2d8f00022c7409275.png](https://i-blog.csdnimg.cn/blog_migrate/7c7157a6151b8c840d0bd6069e708aef.jpeg)