链接:https://www.zhihu.com/question/553273234/answer/3020007951
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
从今天开始,
健哥就带各位小伙伴学习
数据库技术
。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程
由浅入深
, 全面讲解
数据库体系
,非常适合零基础的小伙伴来学习。
------------------------------前戏已做完,精彩即开始----------------------------
全文大约【1258】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图视频,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......
一. 子查询
什么是
子查询
呢?健哥来为各位小伙伴细细道来。所谓子查询就是将一个查询结果作为判断条件或者作为一张虚拟表在这个结果的基础上进行另一个查询。
1.子查询(作为条件判断)
下面就是将查询结果作为另一个查询的判断条件。
语法 : SELECT 列名 FROM 表名 Where 条件 (子查询结果)
举个栗子:查询和健哥同岁的其他同学。
#
1
.
先查询到健哥的年龄
select
Sage
from
student
where
Sname
=
'
健哥
'
;
#
年龄是12
#
2
.
查询年龄等于健哥年龄的同学
select
*
from
student
where
Sage
=
12
;
#
3
.
将
1
、
2
两条语句整合
select
*
from
student
where
Sage
=(
select
Sage
from
student
where
Sname
=
'
健哥
'
);
注意 :将子查询
”一行一列“的结果作为外部查询的条件,做第二次查询子查询得到一行一列的结果才能作为外部查询的等值判断条件或
不等值条件
判断。
2.子查询(作为枚举查询条件)
子查询作为枚举查询条件使用是将一个查询结果(单列多行)的
结果集
作为枚举查询条件进行二次查询。
语法 :SELECT 列名 FROM 表名 Where 列名
in(子查询结果);
举个栗子:查询和健哥,旭哥同龄的学生信息。
#
1
.
先查询健哥和旭哥的年龄
(
多行单列
)
select
Sage
from
student
where
Sname
in
(
'
健哥
'
,
'
旭哥
'
);
#
年龄是12和23
#
2
.
再查询年龄为12和23的学员信息
select
*
from
student
where
Sage
in
(
12
,
23
);
#
3
.
SQL
:
合并
select
*
from
student
where
Sage
in
(
select
Sage
from
student
where
Sname
in
(
'
健哥
'
,
'
旭哥
'
));
将子查询 ”多行一列“的结果作为外部查询的枚举查询条件,做第二次查询。
3.子查询(作为一张表)
此处健哥敲黑板啦!非常重要,
使用频率
很高!
下面的子查询是将一个查询的结果当做一张
虚拟表
,然后在这个表的结果基础上再进行查询。
语法 :SELECT 列名 FROM (子查询的结果集) WHERE 条件;
举个栗子:查询最老的5名学生信息。
#
思路
:
#
1
.
先对学生年龄排序查询
(
排序后的临时表
)
select
*
from
student
order
by
Sage
desc
;
#
2
.
再查询临时表中前5行学生信息
select
*
from
(
临时表
)
limit
0
,
5
;
#
SQL
:
合并
select
*
from
(
select
*
from
student
order
by
Sage
desc
)
as
temp
limit
0
,
4
;
将子查询 ”
多行多列
“的结果作为外部查询的一张表,做第二次查询。
注意:子查询作为临时表,为其赋予一个临时表名。
------------------------------正片已结束,来根事后烟----------------------------
二. 结语
健哥在这里对本文核心要点进行总结:
子查询有三种使用场景分别是:
子查询结果作为判断条件
子查询结果作为枚举条件
子查询结果作为一个虚拟表进行二次查询
以上三种使用方式各位小伙伴要熟练掌握哦。 如果有其他问题可以在下面留言,
健哥看到后会及时答复,谢谢大家。
新浪简介
|
About Sina
|
广告服务
|
联系我们
|
招聘信息
|
网站律师
|
SINA English
|
产品答疑