- 视图
- 表中存放的是实际数据
- 视图中存放的是sql查询语句,不存放数据
* 使用视图时,会运行视图里的sql查询语句,创建出一张临时表,当sql关闭之后,临时表就会自动删除
1.1 如何创建视图
1.2 如何使用视图
在From子句中使用视图名称代替表名称;
1.3 视图有什么用
如果在工作中需要频繁地xxx(e.g. 对性别进行汇总),那就不需要每次都写一遍,定义好视图,直接来使用。视图也会随着原表数据的修改,而更新导出最新的数据。
如果只是偶尔使用,用子查询就可以了。
1.4. 注意事项
- 不要一个视图套一个视图
- 视图里面不要插入数据,否则会报错
2. 子查询
2.1 什么是子查询
成绩大于平均成绩(一环套一环
在一个select查询语句当中嵌套了另一个select查询语句
“一次性的视图”
运行顺序:先运行子查询
搭配使用:….from / …in / …any / …all
案例:找出每个课程里成绩最低的学号
此类是面试中常见的Top N问题,比如如何找到每个类别下用户点击最多的5个商品是什么?=> 分组取每组最大值、最小值,每组最大的N条记录
2.2. …any … some / … all
select 列名 1
from 表名 1
where 列名1 > any (子查询)
案例: 哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
案例: 哪些学生的成绩比课程0002的全部成绩里的全部都要高呢?
2.3 注意事项
- all得到的是一个集合,不能够再做运算,如果要有运算关系,那么就需要施加在符号左边:
a/3 > all (b)
- 不要嵌套太多层
- 子查询 + as 子查询名称,最好不要省略
3. 标量子查询
- where 子句当中不能使用汇总函数(count, sum, avg, max, min)
需要用到单一值的时候,就可以用到标量子查询;
- 除了where,其实任何需要单一值的地方都可以用到标量子查询
4. 关联子查询 (当在每个组里进行比较的时候,使用xxx)
案例:查找出每个课程中大于对应课程平均成绩的学生
/因为关联条件的存在,子查询只返回与s1是同一组的平均成绩,每次只返回一行结果,然后就将成绩进行比较,以此类推;子查询内部的s2可以看到外面的s1,反之则不然*/
5. 如何用SQL 解决业务问题
5.1 哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
5.2 如何看懂报错
可以选择某一部分运行,排查错误;
6. SQLZoo
新知:
- between查找范围包括了边界值,可以用+1 / -1 去掉边界值'
- Concat 可以用来把字符连着显示在一起; 字符的话记得加单引号;
- >0 可以写在查询条件中用于去掉空值(Null);
错题集:
- in 后面跟一个集合,元素之间