一:表的加法
表1+表2,用union
例如
course33
course22
union
也可理解为“或”“并”的关系。当需要保留重复行的时候用 union all.
union all
二:表的联结
联结:数据库能够对应的匹配(join)
表和表通过列产生对应关系,联结是通过表之间的对应关系,联结在一起的操作。
- 交叉联结(cross join)笛卡尔积
如表一为3行,表二为2行,得到的交叉联结表为6行。(类似排列组合)较少单独使用交叉联结.
2.內联结(inner join)
两个表取交集,取出符合条件的行,再进行交叉联结。
studentinner1
scoreinner1
inner join
3.左联结
以左边的表为参考系,将左边全部的行在右边的表中找到对应。
先取出符合条件的行——再进行交叉联结,若在右边的表中无对应,显示为NULL。
left join
若要去除公共部分,最后一行再加语句 where b.学号=NULL.
4.右联结
以右边的表为参考系,将右边全部的行在左边的表中找到对应。
先取出符合条件的行——再进行交叉联结,若在左边的表中无对应,显示为NULL
right join
若要去除公共部分,最后一行再加语句 where a.学号=NULL.
- 全联结
返回左表和右表中的所有行,(mysql不支持全联结,理解即可)。
三:联结应用案例
案例表
例1 查询所有学生的学号、姓名、选课数、总成绩。
例2 查询平均成绩大于85的所有学生的学号、姓名和平均成绩
例3 查询学生的选课情况:学号,姓名,课程号,课程名称
四:case表达式
有多种情况需要条件判断时,使用case表达式。
例1
例2 查询出每门课程的优秀人数和良好人数
例3 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称。
case表达式注意事项:
1. else不写时,默认为空值,但是尽量写全。
2.end不可省略。
3.case表达式可以写在select子句的任意位置。
SQLZOO题库练习
13题注意every match用left join.