小白终是踏上了这条不归路----小文的mysql学习笔记(7)----子查询

**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)

小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询

小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查

小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数

小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询


小白终是踏上了这条不归路----小文的mysql学习笔记(目录)
**
        昨天我们怀着悲痛的心情对那些逝去的人表示哀悼,所有的网页都成了灰白色,所有的游戏也都停服,不知道各位是怎么度过昨天那个沉痛的日子呢,小文可是睡了好久,哈哈哈哈也不知道为啥就是困,今天学习的是子查询,如果对你有所帮助,还请点赞关注,小文的mysql学习笔记正在连载当中…
**
概念:出现在其他语句内部的select语句,称为子查询或内查询;
         内部嵌套其他select语句的查询即外部的查询语句,称为外查询或主.查询。
分类:
    按子查询出现的位置:
                            select后面: 仅仅支持标量子查询
                            from后面: 支持表子查询
                            where或having后面:★    标量子查询(单行查询) ★
                                                                   列子查询(多行多行查询) ★
                                                                   行子查询
                           exists后面(相关子查询)   表子查询

    按结果集的行列数不同:
                            标量子查询 (结果集只有一行一列)
                            列子查询 (结果集只有一列多行)
                            行子查询 (结果集有一行多列也可是多行多列)
                            表子查询 (结果集一般为多行多列)

注:不论是一行一列还是一列多行,只要是查询都可以叫做表子查询,但我们通常所说的表子查询一般指多行多列。

#一、where或having后面

1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(一行多列或多列多行)

特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用 >、<、>=、<=、=、<>
    列子查询,一般搭配着多行操作符使用 in、any/some、 all
④子查询的执行优先于主查询的执行,因为主查询的条件用到了子查询的结果。

#1、标量子查询

例(1):查询最低工资大于50号部门最低工资的部门id和其最低工资。
在这里插入图片描述
例(2):返回job_ id与141号员工相同,salary比143号员工多的员工姓名,job_ id和工资。
在这里插入图片描述

#2、列子查询(多行子查询)

多行子查询一般搭配多行比较操作符一起使用,

扫描二维码关注公众号,回复: 10510645 查看本文章
多行比较操作符 含义
IN/NOT IN 等于(不等于)列表中的任意一个
ANY/SOME 和子查询返回的某一个值比较
ALL 和子查询返回的所有值进行比较

例(1): 查询其它工种中比job_ id为’IT_ PROG’ 工种中的任一员工工资低的员工的员工号、姓名、job_ _id以及salary
在这里插入图片描述
一般遇到这种题先审题,一步一步来,先将子查询找到
第一步:先查询“IT_PROG”工种中所有员工的工资
在这里插入图片描述
第二步:查询salary<第一步中的任意一个员工工资 的员工号、姓名、job_id和salary即可
在这里插入图片描述

#3、行子查询(结果集一行多列或多行多列)

例:查询员工编号最小并且工资最高的员工信息
在这里插入图片描述

#二、select后面

Select后面仅仅支持标量子查询

例:查询每个部门的员工个数
在这里插入图片描述

#三、from后面

将子查询结果充当一张表,要求必须起别名

举个栗子:查询每个部门的平均工资的工资等级。
第一步:先查询每个部门的平均工资。
在这里插入图片描述
第二步:再将第一步查询出来的结果集作为一张表用于与第二张表连接,并添加筛选条件以查询出平均工资的工资等级。
在这里插入图片描述
查询结果:
在这里插入图片描述

#四、exists后面(相关子查询)

     这里的exists是个补充知识,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或者逻辑假值“false”,即布尔值“true”就返回“1”,“false”就返回“0”.

举个栗子:
因为表中能查询出last_name的信息所以查询结果是“true”,返回值为“1”
在这里插入图片描述
再举个栗子:因为表中没有叫“xiaohong”的人所以查询结果为“false”返回值为“0”
在这里插入图片描述
案例:查询有员工的部门名
在这里插入图片描述
一般情况下,可以用exists的相关子查询可以用in来代替,但是二者还是有一定的区别。
在这里插入图片描述

发布了9 篇原创文章 · 获赞 38 · 访问量 3732

猜你喜欢

转载自blog.csdn.net/qq_45948983/article/details/105331105
今日推荐