当前位置:网站首页>零基础自学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
)点击关注,更新课程第一时间通知哦~
边栏推荐
- A tip to read on Medium for free
- 【输入法】迄今为止,居然有这么多汉字输入法!
- "Unusual proxy initial value setting is not supported", causes and Solutions
- Leetcode -- wrong set
- 开源之夏中选名单已公示,基础软件领域成为今年的热门申请
- [redis realize Secondary killing Business ①] Overview of Secondary killing Process | Basic Business Realization
- Depens:*** but it is not going to be installed
- Transplantation of xuantie e906 -- fanwai 0: Construction of xuantie c906 simulation environment
- Numpy numpy中的np.c_和np.r_详解
- 荐书丨《好奇心的秘密》:一个针尖上可以站多少跳舞的小天使?
猜你喜欢

Huawei Router: IPSec Technology

陆奇:我现在最看好这四大技术趋势

【LeetCode】415. String addition

KaFormer个人笔记整理

小白学习MySQL - 增量统计SQL的需求

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

Spark - the number of leftouterjoin results is inconsistent with that of the left table

Kaformer personal notes

MySQL | view notes on Master Kong MySQL from introduction to advanced

Huawei Router: GRE Technology
随机推荐
Remote connection of raspberry pie without display by VNC viewer
From the Huawei weautomate digital robot forum, we can see the "new wisdom of government affairs" in the field of government and enterprises
1528. rearrange strings
Sword finger offer 55 - I. depth DFS method of binary tree
Target detection series fast r-cnn
Cmake命令之target_compile_options
Project deployment related
Epidemic situation, unemployment, 2022, we shouted to lie down!
2021-05-20computed and watch applications and differences
520. detect capital letters
[ES6 breakthrough] promise is comparable to native custom encapsulation (10000 words)
【LeetCode】541. Reverse string II
eBanb B1手环刷固件异常中断处理
2138. splitting a string into groups of length k
Threejs glow channel 01 (unrealbroompass & layers)
【gdb调试工具】| 如何在多线程、多进程以及正在运行的程序下调试
开源之夏中选名单已公示,基础软件领域成为今年的热门申请
Huawei Router: IPSec Technology
Idea another line shortcut
jupyter入门常见的几个坑: