一、视图
1、视图中存放的是SQL查询语句,不存放实际数据,运行视图时,会创建一张临时表。
2、创建视图的语句
Create view 视图名称(视图列名1,视图列名2,……)as select 查询语句
select 语句中列的排列顺序和视图中列的顺序是相同的。
如何使用:在from子句中使用视图名称代替表名称
3、练习
创建视图:

使用视图:

4、视图的优点和注意事项
优点:①将经常使用的select语句保存为视图,不用每次重复书写了
②视图中的数据会随着原表的变化而自动更新
③视图无需保存数据,因此节省存储设备的容量
注意事项:①避免在视图基础上创建视图,多重视图会降低sql性能
②不能往视图中插入数据。
二、子查询
1、子查询就是一次性视图(一次性select语句),运行后就会消失。
子查询是将用来定义视图的select语句直接用于from子句中,实际上就是在select语句中嵌套另外一个select子句。

2、如何使用:在where子句中跟in,any,all一起使用
in(子查询):查找in里面的数据
any(子查询):表示子查询里面的任意一个数据
all(子查询):表示子查询里的所有数据
any和all 可以跟比较运算符搭配使用
3、练习
any(子查询),与some(子查询)相同

all(子查询)

4、注意事项
①all可以与=、>、>=、<、<=、<>结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于all里面的所有数据。
如果是两个数字比较,a > 3b 等价于 a/3 > b 。但是,在mysql里all得到的不是一个数字,是一个集合,也就是得到的是n行数据,所以不能写a > 3all(b),语法只能是 a/3 > all(b)。
all与子查询的语法如下:
select 列名1
from 表名1
where 列名1 > all (子查询);
②避免使用多层嵌套
③子查询名称可以省略不写,但是为了方便理解,建议根据处理内容来指定恰当的子查询名称
④运行顺序:先运行子查询,再运行外部查询
三、标量子查询
1、标量子查询就是返回一行一列的单一值的子查询,可以与比较运算符一起使用。
2、练习


3、标量子查询的书写位置,可以用于任何使用单一值的地方,如where,select,group by,having,order by子句中

4、注意事项:不能返回多行结果
四、关联子查询
1、关联子查询在细分的组内进行比较时使用,关联条件一定要写在子查询中,其中起到关键作用的就是在子查询中添加的where子句的关联条件
2、练习

五、如何排查SQL报错信息
先单独运行子查询,看看是否报错,再排查外部查询
六、各种函数
1.汇总函数

2.算术函数

3.字符串函数

4.日期函数

七、总结
子查询:返回多行结果
标量子查询:返回单一值,跟比较运算符,in,any,all,between一起使用
关联子查询:用于每个组内比较,关联条件必须在子查询里
八、SQLzoo练习



第4题:在运算符between里使用标量子查询,这里用between查找出的范围边界值包括了边界值,所以要+1,和-1去掉边界值,比如范围是 1=<x<=10,(其中1是加拿大人口,10是波兰人口),为了不包括边界值,需要去掉两个边界值,变成 1+1=<x<= (10-1)。
第5题:字符串连接函数concat,round函数用于将数值四舍五入为指定的小数位数,round(数值,返回的小数位数)







x.name<>y.name表示排除自身,因为要跟all里面所有的值进行比较,不排除自身的话那么查询出来是空的。
















