当前位置:网站首页>零基础自学SQL课程 | 子查询
零基础自学SQL课程 | 子查询
2022-06-24 07:58:00 【喵宁一】
大家好,我是宁一。
今天讲解SQL教程第18课:子查询。
SQL语句可以嵌套,最常见的就是查询语句的嵌套。
基本语法:
SELECT <字段名>
FROM <表名>
WHERE(
SELECT <字段名>
FROM <表名>
);我们一般称外面嵌套的语句为主查询,里面被嵌套的语句为子查询,有时也会叫外查询、内查询,大家知道意思就好。
子查询要用括号括起来。子查询不仅可以放在WHERE的后面,还可以放在SELECT、FROM的后面,我们一个个来讲解。
1、子查询+WHERE子句
SQL执行时,会先执行括号内的子查询,子查询最常与WHERE子句结合使用。子查询的结果作为WHERE子句的筛选条件,完成更复杂的数据检索。
实例:在Students表中,找出所有在"宁一"后面出生的学生。

实例解析:需要先确定"宁一"的生日,再将生日作为WHERE筛选条件,得到最终数据。
第一步:找到"宁一"的生日
SELECT Sage
FROM Students
WHERE Sname = "宁一"
第二步:将生日作为WHERE筛选条件,得到最终数据,子查询语句要用括号括起来。
SELECT *
FROM Students
WHERE Sage > (
SELECT Sage
FROM Students
WHERE Sname = "宁一"
)
2、子查询 + SELECT 语句
子查询还可以与 SELECT 语句结合使用,子查询返回的结果,会作为列显示在结果集中。
SELECT语句的子查询经常与聚合函数结合使用。因为我们使用聚合函数的时候,记录会合成一条,其它数据细节就不能显示了。
比如:我们想要查看学生表中所有的学生姓名、学生生日、学生的最大生日。
示例结果:

错误写法:
SELECT Sname,Sage,Max(Sage)
FROM Students像上面这样写是会报错的,因为聚合函数与其他表中的列(Sname,Sage),同时放在SELECT的后面。需要用GROUP BY语句将这些表中的列(Sname,Sage)分组。
上面的语句后面加上 GROUP BY Sname,Sage 就可以了。
但是这样写,会将每组的数据聚合成1条数据,比如每组有3条数据,使用聚合函数MAX()+GROUP BY,最终每组只会显示1条最大值的数据。
我们需要展现Students表中所有的学生,这样写不能满足我们的需求。
正确写法:结合子查询来实现。
SELECT
Sname,
Sage,
(SELECT Max(Sage) FROM Students) AS Maxage
FROM Students3、子查询+FROM子句
子查询与FROM子句结合使用,子查询结果被当成了一个“表”,可以用SELECT语句做进一步的筛查。
比如:我们先写一个SELECT查询语句
SELECT
Sid,
'student' AS status
FROM Students
WHERE Sid <= 5
将上面的查询语句放在FROM的后面,则上面查询到的结果,就会被当成一个“表”。
SELECT Sid,status
FROM (
SELECT
Sid,
'student' AS status
FROM Students
WHERE Sid <= 5
) AS s -- 必须加别名
WHERE Sid > 2这里有一个特别要注意的地方,放在FROM后面的子查询,必须要加别名。

复杂的子查询再嵌套进 FROM 里会让整个查询看起来过于复杂,我们一般会将子查询结果储存为视图,然后再直接使用视图作为来源表,视图会SQL高阶课程中详细讲解。
其实子查询就是查询语句嵌套,没有什么新的东西,只是多了一个层级,由内向外地一层层梳理就会很清楚了。
作业:结合Students表,从Teachers表中找出当班主任的老师(通过子查询实现)。

作业解析:先从Students表中,找出所有班主任的Tid并去重,将查询结果作为筛选条件,放在WHERE语句中。
SELECT *
FROM Teachers
WHERE Tid IN (
SELECT
DISTINCT Tid
FROM Students
)点击关注,更新课程第一时间通知哦~
边栏推荐
- Lu Qi: I am most optimistic about these four major technology trends
- SLAM14讲中Sophus包的安装问题
- 活动报名|Apache Pulsar x KubeSphere 在线 Meetup 火热报名中
- 2138. splitting a string into groups of length k
- The list of open source summer winners has been publicized, and the field of basic software has become a hot application this year
- 关于 GIN 的路由树
- 1528. rearrange strings
- Code written by mysql, data addition, deletion, query and modification, etc
- 常用表情符号
- 【LeetCode】415. String addition
猜你喜欢

Ordinary people have no education background. Can they earn more than 10000 yuan a month by Self-taught programming?

深入解析 Apache BookKeeper 系列:第三篇——读取原理
Depens:*** but it is not going to be installed

浮点数表示法(总结自CS61C和CMU CSAPP)

4275. Dijkstra sequence
![[noi Simulation Competition] geiguo and time chicken (structure)](/img/4c/ed1b5bc2bed653c49b8b7922ce1674.png)
[noi Simulation Competition] geiguo and time chicken (structure)

110. balanced binary tree recursive method

关于 GIN 的路由树

leetcode——错误的集合
![[redis realize Secondary killing Business ①] Overview of Secondary killing Process | Basic Business Realization](/img/a3/9a50e83ece43904a3a622dcdb05b3c.png)
[redis realize Secondary killing Business ①] Overview of Secondary killing Process | Basic Business Realization
随机推荐
金仓KFS replicator安装(Oracle-KES)
【gdb调试工具】| 如何在多线程、多进程以及正在运行的程序下调试
2022-06-23:给定一个非负数组,任意选择数字,使累加和最大且为7的倍数,返回最大累加和。 n比较大,10的5次方。 来自美团。3.26笔试。
4275. Dijkstra sequence
"Unusual proxy initial value setting is not supported", causes and Solutions
Solution: the word of jmeter5.5 on the win11 lower interface is very small
嵌入式 | 硬件转软件的几条建议
Applet wx show
[quantitative investment] discrete Fourier transform to calculate array period
From the Huawei weautomate digital robot forum, we can see the "new wisdom of government affairs" in the field of government and enterprises
Qingcloud based R & D cloud solution for geographic information enterprises
Remote connection of raspberry pie without display by VNC viewer
Data middle office: a collection of middle office construction architectures of large domestic factories
Essay - Reflection
MySQL | store notes of Master Kong MySQL from introduction to advanced
Chapter 7 operation bit and bit string (III)
怎么把mdf和ldf文件导入MySQL workbench中
[use picgo+ Tencent cloud object to store cos as a map bed]
tcpdump抓包实现过程
【LeetCode】541. 反转字符串 II