1。
视图相当于一张临时表,链接了数据库,原表数据跟新时也会随之更新,当数据库没了,这个视图也不存在了。
CREATE VIEW后面的要和SELECT一一对应
2、视图的作用:
1)当你要频繁使用某些查询语句,那么就可以保存成视图。特别是在进行汇总或复杂当查询条件时,导致这个sql语句非常庞大的时候,可以保存为视图提高效率。
2)视图会随着原表更新:因为它存放的不是数据而是sql语言。
3)不需要保存数据,所以节省了保存数据的空间。
3、注意事项
1)避免在视图的基础上再创建视图,因为多重视图会降低sql运行的效率
2)不能往视图里插入数据,不然会报错。
二、子查询(在一个select嵌套里另一个select查询)1、
当sql语句中有子查询时总是先运行子查询。sql子查询可以放在
FROM子句里,也可以放在
WHERE子句里和
in,any,all一起使用。
1)用于
WHERE的
IN子句中
2)用于
WHERE的
any子句中【any(子查询)和some(子查询)相同】
3)WHERE子句里的 ALL子查询
注:any的意思是只要比其中的一个高就行了。ALL的意思是要比所有的每一个都高。
2、注意事项:
1)all(子查询)里得到的是一个集合,所有3*all(子查询)没有意义,只能是前面那个数a/3>all(子查询);
2)避免使用多重嵌套,不然降低会降低效率,也很难读懂。
3)一般来说,as后面的子查询名称可以省略。但是我们一开始可以不省略,以便后面查询时能够读懂自己写的语句。
三、标量子查询
1、标量子查询定义:
必须而且只能返回一行一列的结果,也就是只返回一个唯一的值(不能返回多行的值)。任何使用单一值的地方都可以使用标量子查询。如图所示,汇总函数avg不能用在WHERE子句中。
那么如何能写出大于平均成绩的学号和成绩呢?答案如下图:
AVG(成绩)返回的是一个唯一的单行单列的值,所以可以直接用于比较运算符。
例如:找出介于差等生平均成绩和优等生平均成绩之间的学号和成绩。可以用between and,因AVG得到的是一个唯一值,把标量子查询AVG放在between and之间,就相当于把两个数放在了between and 之间。如图所示。
标量子查询还可以用在SELECT中。
2、标量子查询有什么用:
标量子查询表示只返回单一的值,不能返回多行结果。因此可以使用比较运算符,可以和in, any,all,between一起使用。
3、注意事项:
如下图所示,用了group by之后的avg(成绩)返回的是多个值,就不是标量子查询。注意看报错信息。
四、关联子查询:在每个组里进行比较。
例如:查找出每个课程中大于对应课程平均成绩的学生。
s1是父查询的score表的别名;s2是子查询的score表的别名。其实际两个表是同一个表。
1、关联子查询的执行逻辑完全不同于正常的SELECT语句。 2、关联子查询执行逻辑如下: (1)先从主查询的score表中“课程号”列取出第一个值,进入子查询中,得到子查询结果,然后返回父查询,判断父查询的where子句条件,则返回整个语句的第1条结果。 (2)重复上述操作,直到所有主查询中的score表中课程号列取完为止。得出整个语句的结果集,就是最后的答案。 (详细解释可参考https://zhuanlan.zhihu.com/p/41844742)
五、如果运行报错,也看不出哪里出错了,可以先运行子查询,再运行父查询来排除错误。
六、各种函数
七、总结