![d3eddf0aae2f32a735e3117aac45a3d7.png](https://i-blog.csdnimg.cn/blog_migrate/a10f65c6c68746dc48ace83c327e59bd.jpeg)
现在意识到融会贯通是必要的,到了这节课,感觉理论内容可以接受,但是实际操作还是很难融会贯通。有时间,还是需要再听几次之前的课程。
老规矩,这次的学习笔记分为以下几个部分:
1,表的加法
1)加法:union
Union是将两个表的数据按行合并在一起。
.用union将两个表中联结在一起,会将重复数据删除,只保留一个。
.union all可以将两个表中的重复数据保留下来。
2,表的联结
关系就是数据库能够对应的匹配,在关系型数据库中名字叫做联结(join)
联结是将通过表和表之间的关系将两个表合并在一起的操作。
1)联结的类型:
.交叉联结(cross join)
也叫笛卡尔积,结果的行数,是两张表行数的乘积。
扑克牌张数就是交叉联结,但是因为结果行数太多,需要花费大量的运算成本和设备的支持,所以在实际运用中很少。行数太多,没有实际的价值,但是交叉联结是所有联结的基础。
.内联结(inner join)
查找出同时存在于两张表中的数据
.左联结(left join)
会将左侧表中的数据全部取出来
.右联结(right join)
会将右侧表中的数据全部取出来
.全联结(full join) MySQL不支持全联结
返回左右表中的所有行,当某行和另一个表中有匹配的时候,两个某行进行合并。如果某行和另一个表中数据没有匹配的时候,另一个表中对应的值用空值来进行填充。
实际业务时,想要生成固定行数的表单,或者特别说明了想要哪张表单中的全部数据的时候使用左联结或者右联结,其他时候都用内联结,来获取两个表的公共部分。
3,联结应用案例
1)翻译成大白话
2)写出分析思路
3)写出对应的SQL语句
以上的应用步骤多次出现在我的学习笔记中,也就是说这是一种常用的解决问题方法。
4,case表达式
可以解决复杂的查询问题,相当于条件判断函数,判断每一行是不是满足某个条件,每次只会返回一个结果。
Case when<判断表达式> then<表达式>
when<判断表达式> then<表达式>
when<判断表达式> then<表达式>
….
Else<>
End
注意事项:
1)else子句可以不写,这时候默认else是空值。但是最好要写。
2)end不可以省略
3)case表达式可以写在SQL语句的任意位置。
4)select的列名称,只能是groupby子句里的列名称,当用多个列来分组时,这几个列的值全部相同才算一组
练习题:
-- 查询所有学生的学号,姓名,选课号,总成绩
SQLZOO练习题:
![6bf5e7b36ea80255252fc49053625cd0.png](https://i-blog.csdnimg.cn/blog_migrate/af0ded134f2bbd6e27cd40d16b062c90.jpeg)