sql in里面可以放多少参数_sql复杂查询

一、视图

创建视图步骤:

create view 视图名称(<视图列名1>,<视图列名2>)

as <select 查询语句>

注意视图中列的顺序与select语句中显示列的数据是一一对应的,视图里放的不是数据,是sql查询语句

(一)创建视图

使用场景:在频繁使用某一sql语句时

如何使用视图:直接在from子句中使用视图名称代替表名称

优点:提高效率;视图数据会随着原表的变化更新;不需要保存数据,节省空间

使用注意事项:

1、避免在使用视图的基础上再使用视图

2、不能往视图里插入数据

练习题1:

创建视图:

c9d864cf5a1e5e65ca30b202fb857dbd.png

直接使用视图

a1bd00ec8539c6a7a6ac2e846f2f4ab5.png

二、子查询

(一)什么是子查询:子查询可以作为一个临时表,在语句运行结束后临时表消失;一次性的视图,在from子句中直接写定义视图的sql查询语句,当sql里有子查询时会先运行子查询

例如:

select性别,人数

from(

select 性别,count(*) as 人数

from student

group by 性别

) as 按性别汇总;

from子句中为sql查询语句,“as 按性别汇总”就是子查询的名称

随堂练习:

3afa061d0e3c088faa9af0cd91c96f5d.png

(二)如何使用子查询

子查询也可以用在where子句里面,与in /any/all一起使用,在in /any/all后面放入子查询

随堂练习:

在练习中注意如果直接筛选课程和成绩,显示的学号为随机生成,因为在实际运行过程中,第二步算最低成绩时,只有课程号与成绩两列数据保留。

eb323c18456edf43fa65bd17e768c7fe.png

any、all的使用:

1、必须与比较运算符(大小)一起使用

2、any 与some使用方法相同

示例:

select 列名1

from 表名1

where列名1>any(子查询);

表示:查询结果只需大于子查询中的任意一个数字即可。

随堂练习:

any子查询:

6e67c61941195d96460a97747e368cfc.png

all子查询:

62fa8b38cd621c281c1b0f8af9e74a22.png

(三)使用子查询的场景:偶尔使用某个查询语句用子查询,频繁查询使用视图

(四)使用子查询注意的事项:

(1)all后面跟的是集合范围不是单独的数字,因此不能表示成a>3*all(b),而是a/3>all(b)

(2)避免使用多层嵌套子查询

(3)select from 子查询 as 子查询名称,其中“as 子查询名称”可以省略

(五)sql运行顺序:子查询——from、where、group by、having——select 子句——order by、limit

三、标量子查询

注意:在where子句中不能使用汇总函数

标量子查询:只能返回一行一列的查询结果,因为标量子查询结果是一个单一的值,因此可以与比较运算符一起使用。

随堂练习:

e54f03315ce595ed31cdefdf8ed20835.png

任何使用单一值都可以用标量子查询。

因为标量子查询返回的是单一的值,所以可以和比较运算符、in、any、all、between使用,一定要注意标量子查询不会返回多行结果

四、关联子查询

随堂练习:

b62c8f0e192a9074776fcd3cfaef33c5.png

select 学号,课程号,成绩

from score as S1

where 成绩> ( select avg(成绩) from score as S2

where S1.课程号= S2.课程号

group by 课程号);

(一)注意:关联条件一定要写在子查询里面,S2仅在子查询里有效。所以S2能在子查询里看到S1,S1在子查询外看不到S2。

(二)使用子查询的场景:在每个组里进行比较,关联子查询起作用是因为有一个关联条件。

五、如何使用sql解决业务问题

随堂练习:

3261c3149f7aec6341b1f67a1a569b4b.png

如何查找错误:可以注意检查问题,例如先检验子查询的问题再查询是否为子查询外面的问题。

六、各种函数

函数的3个功能:具备功能、有输入端(参数)、有输出端(返回值)

常用的函数:

汇总——count/sum/avg/max/min(求和与平均值只能对数值类型计算)

算术函数

字符串函数

日期函数

七、课后练习

3c903fca1a59f5683b92d4acbb4e4005.png

c69f97c0792ba9aeed53cfbed8e9d49b.png

79436c9b87c1cdde2c24073a6d51d704.png

299ca6c5dd7954189ce79cc9d0ce8398.png

51efcf786a6b351f318ad92692fca9b9.png

此题求出结果与网站结果不一,练习结果按照四舍五入后数据显示,网站显示比例不按四舍五入取值。

3a2337c5e59cd2c926cd05ded4a24628.png

b5e21547e1b940199b4724a286a88772.png

0747c4313776c0cc4e1276ea110a373c.png

911aa8f6dac4c9ec4a59c3c98e3a5f98.png

4085d8b98d581fade910ce8ae9acfd3a.png

本题经检查,应注意 x中的名称不等于y中的名称。

修改为:

select name,continent from world as x where population/3 >=

all(select population from world as y

where x.continent=y.continent and x.name <> y.name

group by continent);

本节学习心得:复杂查询相比较与简单查询困难很多,想快速掌握感觉是不太可能的,还是要多做题多理解,读懂题目意思,用老师的方法一步步分解题目逐步解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值