select子查询返回 值_从零学会SQL:复杂查询,D4
2020年3月29日 星期日
大纲:
- 视图;
- 子查询;
- 标量子查询;
- 关联子查询;
- 如何用sql解决业务问题;
- 各种函数。
1 视图
视图,用于存放sql查询语句,不是存放数据。
创建视图如下:
create view 视图名称(视图列名1,视图列名2,……)
as
select查询语句;
![7972bdf8c37516bc1af97c3cfaad11bb.png](https://img-blog.csdnimg.cn/img_convert/7972bdf8c37516bc1af97c3cfaad11bb.png)
视图create view和select的列的顺序一一对应
![ecfcc053397f621aa7f04b07e8550c32.png](https://img-blog.csdnimg.cn/img_convert/ecfcc053397f621aa7f04b07e8550c32.png)
![b3ec2067033a3d48836dfc9bfdf192c2.png](https://img-blog.csdnimg.cn/img_convert/b3ec2067033a3d48836dfc9bfdf192c2.png)
![28d69edb0c1adb73974020ea622bedc3.png](https://img-blog.csdnimg.cn/img_convert/28d69edb0c1adb73974020ea622bedc3.png)
使用视图好处:
1、频繁使用查询语句尤其复杂语句时,使用视图提高效率;
2、视图数据随原始表数据变化,随时更新;
3、不需要保存数据,节省设备空间。
注意事项:1、避免在使用视图的基础上再使用视图,降低sql 性能和效率;2、不能往视图里插入数据,会报错。
2 子查询——放在from子句或者where子句
子查询:实际是一次性视图,在select中嵌套另一个select。
sql运行顺序:先运行子查询。
select 列名 from(select子查询)
![0a5e112e52d8bdaf483a2061a6c6eec3.png](https://img-blog.csdnimg.cn/img_convert/0a5e112e52d8bdaf483a2061a6c6eec3.png)
select 列名
from 表名
where 列名 ……in/any/all (select子查询)
in子查询:
![bd2db251fbb6b6cbc08ed8c3ceeb3e48.png](https://img-blog.csdnimg.cn/img_convert/bd2db251fbb6b6cbc08ed8c3ceeb3e48.png)
![8a6a5cdf9c35bafa34fbde9103fac557.png](https://img-blog.csdnimg.cn/img_convert/8a6a5cdf9c35bafa34fbde9103fac557.png)
……any/some/all子查询,与比较运算符一起使用
![01548e10b3b48c9a34338207d0ad5d54.png](https://img-blog.csdnimg.cn/img_convert/01548e10b3b48c9a34338207d0ad5d54.png)
any/some子查询:表示大于/小于/等于all中的任一数据
select 列名 from 表名 where 列名 > any/some (select子查询)
![b7d890e2cbd8bac7b1f263047fd67291.png](https://img-blog.csdnimg.cn/img_convert/b7d890e2cbd8bac7b1f263047fd67291.png)
all子查询:表示大于/小于/等于all中的所有数据
select 列名 from 表名 where 列名 > all (select子查询)
![90c0903d95e6e5b4308a75a6b9f23d54.png](https://img-blog.csdnimg.cn/img_convert/90c0903d95e6e5b4308a75a6b9f23d54.png)
子查询使用注意事项:
A:子查询any 和all得到的是一个集合(多行数据),不是数字,不能进行算数运算。
B:避免使用多层嵌套子查询,子查询嵌套越多,难以理解;
C:select……from……子查询 as 子查询名称,其中as 子查询名称可以省略,但是尽量不要省略,方便理解。
![02c017eccd42e6d983f37c9390f7768e.png](https://img-blog.csdnimg.cn/img_convert/02c017eccd42e6d983f37c9390f7768e.png)
![a4ced8f0581a521b7acd07a911281a3e.png](https://img-blog.csdnimg.cn/img_convert/a4ced8f0581a521b7acd07a911281a3e.png)
3 标量子查询
子查询语句只能返回单一的值(与in,any,all子查询返回多行数据不同),因此可以应用算数运算。
书写的位置并不只限于where子语,任何使用单一值的地方,都可以使用标量子查询。和in,any,all,between和比较运算符一起使用,实现复杂条件。
![7f90989cdfdb3a8753a2829b4330835f.png](https://img-blog.csdnimg.cn/img_convert/7f90989cdfdb3a8753a2829b4330835f.png)
注意事项:该子查询不能返回多行结果,只能返回单一值。
![3ab0d11cb115a180a67793e028decc99.png](https://img-blog.csdnimg.cn/img_convert/3ab0d11cb115a180a67793e028decc99.png)
练习:
![0826f53e56a177ed46ff5e3a99bca8ff.png](https://img-blog.csdnimg.cn/img_convert/0826f53e56a177ed46ff5e3a99bca8ff.png)
![c73b7844112616beaf42b39f90c5634f.png](https://img-blog.csdnimg.cn/img_convert/c73b7844112616beaf42b39f90c5634f.png)
![a5f0ca229842842b6c2ae3ee97e3ad1a.png](https://img-blog.csdnimg.cn/img_convert/a5f0ca229842842b6c2ae3ee97e3ad1a.png)
4 关联子查询
使用关联条件,让每个分组里进行比较,就可以用关联子查询。
注意:关联条件,一定要写在子查询里。
![2d93df3e08184053e008c2822ddfa140.png](https://img-blog.csdnimg.cn/img_convert/2d93df3e08184053e008c2822ddfa140.png)
别名S2只在子查询里有效,S2能看到子查询外面的别名S1,而S1看不到S2。
![76971e4858accbaa82200c328f1025bc.png](https://img-blog.csdnimg.cn/img_convert/76971e4858accbaa82200c328f1025bc.png)
练习:
![ad10c0f7291c25b0b85a7ea345a34ce6.png](https://img-blog.csdnimg.cn/img_convert/ad10c0f7291c25b0b85a7ea345a34ce6.png)
5 如何用SQL解决业务问题
步骤:翻译成自己看明白的大白话——写出分析思路——写对应的sql子句
![494684af045d6b600f1e98418a85202b.png](https://img-blog.csdnimg.cn/img_convert/494684af045d6b600f1e98418a85202b.png)
6 各种函数——汇总函数,算数函数,字符串函数,日期函数
汇总函数:count(列名),sum(列名),avg(列名),max(列名),min(列名)
![1db6cd5432520812b6efdb42bae728e2.png](https://img-blog.csdnimg.cn/img_convert/1db6cd5432520812b6efdb42bae728e2.png)
算数函数:round(数值,保留小数的位数),abs(数值),mod(被除数,除数)
![463e6aed06bce18cf8ee24ea78ec1ad0.png](https://img-blog.csdnimg.cn/img_convert/463e6aed06bce18cf8ee24ea78ec1ad0.png)
字符串函数:length(字符串),lower(字符串),upper,concat,replace,substring
![e6b57ca2248ea7d6ace5573a38d5a0f3.png](https://img-blog.csdnimg.cn/img_convert/e6b57ca2248ea7d6ace5573a38d5a0f3.png)
日期函数:
![d3cf8d69eaf6eb51e28ce5a1effb77d6.png](https://img-blog.csdnimg.cn/img_convert/d3cf8d69eaf6eb51e28ce5a1effb77d6.png)
本结课程总结一张图:
![55ea61362d5a59aad5f13326e36ddacc.png](https://img-blog.csdnimg.cn/img_convert/55ea61362d5a59aad5f13326e36ddacc.png)
练习:sqlzoo
![8353f04f40b163ca4fbf590fedb480b1.png](https://img-blog.csdnimg.cn/img_convert/8353f04f40b163ca4fbf590fedb480b1.png)
省略
![400879dcc1c3e46f6ec513120e72dc58.png](https://img-blog.csdnimg.cn/img_convert/400879dcc1c3e46f6ec513120e72dc58.png)
![b1fb8a63b1cd82b7fd5cdceb30256f2e.png](https://img-blog.csdnimg.cn/img_convert/b1fb8a63b1cd82b7fd5cdceb30256f2e.png)