子函数

本文深入探讨了SQL中的子查询概念,通过实例解析了单行单列、单行多列、多行单列和多行多列四种类型的子查询,并介绍了在WHERE、FROM、HAVING子句中的应用。讲解了IN、ANY、ALL操作符的用法,以及如何利用EXISTS进行空数据判断。子查询在SQL查询中的强大功能和灵活性得到了充分展示。

子查询
子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的 小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚 子查询的概念。
范例
查询公司之中工资最低的雇员的完整信息
SELECT * FROM emp WHERE sal=( SELECT MIN(sal) FROM emp) ;
在这里插入图片描述
在这里插入图片描述
子查询返回结果
子查询可以返回的数据类型一共分为四种:
单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;
单行多列:返回一行数据中多个列的内容;
多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;
多行多列:查询返回的结果是一张临时表;
子查询的常见操作
考虑到读者初次接触到子查询的操作,所以下面为了读者学习方便,对于 在何处使用子查询给读者以下几点个人的参考建议:
WHERE子句:此时子查询返回的结果一般都是单行单列、单行多列、多行 单列;
HAVING子句:此时子查询返回的都是单行单列数据,同时为了使用统计函 数操作;
FROM子句:此时子查询返回的结果一般都是多行多列,可以按照一张数据 表(临时表)的形式操作。
一个查询语句内部可以定义多个子查询; 子查询一般在WHERE、FROM、HAVING子句之中出现较多。

单行单列
范例:查询出基本工资比ALLEN低的全部雇员信息
在这里插入图片描述
在这里插入图片描述

范例:查询基本工资高于公司平均薪金的全部雇员信息
在这里插入图片描述
在这里插入图片描述
范例:查找出与ALLEN从事同一工作,并且基本工资高于雇员编号为7521的全部雇员信息
在这里插入图片描述 在这里插入图片描述

单行多列
范例:查询与SCOTT从事同一工作且工资相同的雇员信息
在这里插入图片描述
在这里插入图片描述
也可以这样操作
在这里插入图片描述

范例:查询与ALLEN从事同一工作且在同一年雇佣的全部雇员信息(不包括ALLEN)
在这里插入图片描述
在这里插入图片描述
多行单列
在使用多行子查询时,主要使用三种操作符:IN、ANY、ALL
IN是包含,不多说了
ANY在使用中有如下三种使用形式:
1、=ANY:表示与子查询中的每个元素进行比较,功能与IN类似(然而<>ANY不等价于NOT IN);
2、 >ANY:比子查询中返回结果的最小的要大(还包含了>=ANY);
3、<ANY:比子查询中返回结果的最大的要小(还包含了<=ANY)。
ALL操作符有以下三种用法:
1、<>ALL:等价于NOT IN(但是=ALL并不等价于IN);
2、>ALL:比子查询中最大的值还要大(还包含了>=ALL);
3、<ALL:比子查询中最小的值还要小(还包含了<=ALL)。

范例:查询出与每个部门中最低工资相同的全部雇员信息
在这里插入图片描述
在这里插入图片描述
范例:分别用= < > 演示any的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分别用!= < > 演示all的作用
在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多行多列
范例:查询出所有薪金高于公司平均薪金的员工编号、姓名、基本工资、职位、雇佣日期,所在部门名 称、位置,上级领导姓名,公司的工资等级,部门人数、平均工资、平均服务年限。
在这里插入图片描述
在这里插入图片描述

范例:列出薪金比“ALLEN”或“CLARK”多的所有员工的编号、姓名、基本工资、部门名称、其 领导姓名,部门人数。
在这里插入图片描述
在这里插入图片描述
范例:列出公司各个部门的经理(假设每个部门只有一个经理,job为 “MANAGER”)的姓名、薪金、部门名称、部门人数、部门平均工资。
在这里插入图片描述
在这里插入图片描述
空数据判断
在SQL之中提供了一个exists结构用于判断子查询是否有数据返回。 如果子查询中有数据返回,则exists结构返回true,反之返回false。
验证exists结构
SELECT * FROM emp WHERE EXISTS( SELECT * FROM emp WHERE empno=9999) ;
SELECT * FROM emp WHERE EXISTS( SELECT * FROM emp) ;
当括号里是真值时,前面的语句输出,假值就不输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值