子查询用in运算符与用=any的效果是一样的。_从零学会SQL:复杂查询

本文介绍了SQL中的视图、子查询及其在业务问题解决中的应用。视图提供了一种简化复杂SQL查询的方法,且随着原始数据的更新而更新。子查询可以在WHERE子句中配合IN、ANY操作符使用,实现复杂的查询条件。同时,文章强调了使用子查询的注意事项,并提供了多个练习题以加深理解。
摘要由CSDN通过智能技术生成

视图

b720eac238272daff5e270986096f38d.png
当客户端与数据库断开连接时,这个表(临时表)就会自动删除,视图本身不存放数据

ddab37e6a4b62aa55db7c9cf0c14431a.png
create view 表示创建视图的查询语句,SQL查询语句要写在 as 关键字后面,SQL查找语句中的排列顺序要与视图名称列的排列顺序要一致,一一对应,列的名称可以不一样,但是对应关系一一对应

c5e25a997e209eaf4020ee6499614d9f.png

ee7e06811b31c909ded41306b89cf993.png

视图如何使用:在from字句中使用视图名称代替表的名称,当学生表里面的数据更新之后,视图也会随着更新

视图的日常使用:

1、如果有的SQL查询语句频繁使用,可以保存成视图,不用每次重复写SQL,特别是在汇总以及复杂的查询条件导致SQL非常庞大的时候,视图可以帮助我们提高效率

2、视图中的数据会随着原表之间的变化自动更新,能保证数据的最新状态,视图中存放的是SQL查询语句,每次查询会从原表中取数

3、视图不需要保存数据,节省设备空间

视图使用注意事项

b0591e1d59b280ac77e6992b990093ae.png

1、避免在视图的基础上再创建视图,多重视图会降低SQL的效率

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

子查询

一次性的视图,在SQL查询子句中直接写定义视图的SQL查询语句,就是在select查询语句中嵌套了另一个select查询语句

7d57b445703196cd799786c2910673c4.png
图片中的as按性别汇总就是子查询的名称,由于该名称是一次性的不会像视图一样保存在数据库中,在SQL查询语句运行结束之后消失,可以看成临时表

b08d79864d23efd0711362abce93ca23.png

子查询可以放到where子句里面与运算符in、any、all一起使用,构建出复杂的查询条件

使用方法: in(子查询)、any(子查询)、all(子查询),在in、any、all括号里面放入子查询

6f0f30b4eaecb3c101d007500042f103.png

eb4dddf165a4bbcbbbeb1741b493191d.png

e5f8f47642005180f86cec63e026f727.png

1f1e46faaeee407aa243fdc66e6e2f1c.png

any、all必须跟比较运算符一起使用,any(子查询)与some(子查询)相同,>any(子查询)表示大于子查询任一条件,>all(子查询)表示大于子查询里面的所有条件

c969e4c1cf127e5b8766270993561a2d.png
where 字句中列名1里面的数据大于any里面的任何一个数据就可以了

c0263293f35f8147aa5ccdb3c5e95a29.png

b953225b696d1c33fd501bdefc1265f4.png

73e4b2fc09da62199cb519acaa968be2.png

02bcd1cfbda61b884bbb398454b56bb6.png

使用子查询的注意事项:

1、若两个数据比较,a>3*b 等价于 a/3>b 但是在数据库 mysql里all得到的不是一个数值而是一个集合,也就是得到的是N行的数据,不能写成a>3*all(b) 只能写成a/3>all(b)

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

3、子查询的as关键字和子查询的名称都是可以省略的,自己写最好不省略

876fd4b77fd0fe572e7ecc0bfe40a235.png

01a50f8e3b279e7bf397ae130c202185.png

练习部分:

2849de15a2335540db0ab4be36ce059c.png

找出每个课程里成绩最低的学号:

9a74c159383fcaa1b1e5f5a1b2f71ecd.png

哪些学生的成绩比课程0002的全部成绩里的任意一个高呢:

2755521ab4cd5adc38fc8e090dedbec4.png

哪些学生的成绩比课程0002的全部成绩里的都高呢:

b69589341b9dac687312d6098461026e.png

标量子查询

6099f2b53032445fd6521ff42fb58619.png
where语句中不能书写汇总函数

标量子查询在子查询上面做了一个特殊的限制:必须只能返回一行一列的查询结果,返回的是一个单一的值

aec26e2d22a458de81663bedc7e035a2.png

由于标量子查询返回的结果是单一的值,标量子查询他的返回值可以和比较运算符(例如'='等一起去使用)

差生:成绩<=60 ,优等生>80 求介于差生平均成绩和优等生平均成绩之间的学生有哪些

86d9df19f0a5a6876ebd25ea2599d35e.png

43c954e286101901612191b7e93beac3.png

通常任何使用单一值的地方都可以使用单一子查询

0b49ce2716b6b2aba9e9567c0113aa2b.png

842ee649eecd98193f6c1e5c41273638.png

使用标量子查询不返回多行结果,如果返回多行就是普通子查询不能使用在比较运算符一起使用

练习部分:

大于平均成绩学生的学号和成绩

29ef9459c07d9e6655969f75bb7f7581.png

差生(成绩<=60) 优等生(成绩>80)有多少学生的成绩介于优等生平均成绩和差生平均成绩之间

c72ddc297b7c932cc60f14f61a46abf7.png

db2746e8ffce51abf5bc18895b7d252e.png

关联子查询

在每个组里进行比较的时候使用关联子查询

9b6006e7de94c015765a22ace2ca25ab.png

10ac64138330fe4d5b4424396bc702bc.png

af27d51ddb1cb8bf6f928b62e75c372a.png

206806049e2d4063cced0ef76084f9e1.png

ff21926fa4f0c74f032cad6bb80f27bd.png

如何用SQL解决业务问题

各种函数

5068f2c5c5904c3c79ed899c44791227.png

5b24ea26b235c47498540fef93729e89.png

6722d548c7f1dd35684b6d2351d1025b.png

练习部分

9181ca1bd283b7f7e6e61d5bb936a68d.png

76bdcf0bb614109ef5b6d96dc1a00378.png

b0c24860bb531fbff2937e7c24f4bee0.png

4、是错误的

cffbeece9295d7ff5d3c979563789d2c.png
本SQL包含了加拿大和波兰的数值,是因为between是包含边界值的部分

b8c90b3deb9517627c5ea62faa728082.png

7fb0290a1ca5ae000df9c6f196c8c8d4.png

41aedcd846039996d06edd7c24843abc.png

cf5eb76de68f7b9694e4972237b22202.png

57dc2f4d5d9a01e5880786acab242110.png

f596b402b382aa3daaae4095373e286f.png

58480a52139074a09125655e272f30e2.png

c47471c4c75de895248eecebd560a20a.png

127e394b543d48352be38d76acf17c39.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值