子查询一(WHERE中的子查询)
子查询
子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念。
子查询返回结果
子查询可以返回的数据类型一共分为四种:
- 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;
- 单行多列:返回一行数据中多个列的内容;
- 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;
- 多行多列:查询返回的结果是一张临时表;
在WHERE子句中使用子查询
单行单列子查询
--查询公司之中工资最低的雇员的完整信息
SELECT *
FROM emp e
WHERE e.sal=(
SELECT MIN(sal)
FROM emp);
示例二、查询出基本工资比ALLEN低的全部雇员信息
-- 查询出基本工资比ALLEN低的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal<(
SELECT sal
FROM emp
WHERE ename='ALLEN'
);
示例三、查询基本工资高于公司平均薪金的全部雇员信息
--查询基本工资高于公司平均薪金的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal>(
SELECT AVG(sal)
FROM emp);
单行多列子查询。
示例四、查找出与ALLEN从事同一工作,并且基本工资高于雇员编号为7521的全部雇员信息,
--查找出与ALLEN从事同一工作,并且基本工资高于雇员编号为7521的全部雇员信息,
SELECT *
FROM emp e
WHERE e.job=(
SELECT job
FROM emp
WHERE ename='ALLEN')
AND e.sal>(
SELECT sal
FROM emp
WHERE empno=7521);
示例五、查询与SCOTT从事同一工作且工资相同的雇员信息
SELECT *
FROM emp e
WHERE (e.job,e.sal) = (
SELECT job,sal
FROM emp
WHERE ename='SCOTT')
AND ename<>'SCOTT';
示例六、查询与雇员7566从事同一工作且领导相同的全部雇员信息
--查询与雇员7566从事同一工作且领导相同的全部雇员信息
SELECT *
FROM emp e
WHERE (e.job,e.mgr) =(
SELECT job,mgr
FROM emp
WHERE empno=7566
);
示例七、查询与ALLEN从事同一工作且在同一年雇佣的全部雇员信息(包括ALLEN)
--查询与ALLEN从事同一工作且在同一年雇佣的全部雇员信息(包括ALLEN)
SELECT *
FROM emp e
WHERE (e.job,to_char(e.hiredate,'yyyy'))=(
SELECT job,to_char(hiredate,'YYYY')
FROM emp
WHERE ename='ALLEN'
);
多行单列子查询
示例八、查询出与每个部门中最低工资相同的全部雇员信息
--查询出与每个部门中最低工资相同的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal IN(
SELECT MIN(sal)
FROM emp
GROUP BY deptno
);
示例九、查询出不与每个部门中最低工资相同的全部雇员信息
--查询出不与每个部门中最低工资相同的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal NOT IN(
SELECT MIN(sal)
FROM emp
GROUP BY deptno
);
ANY在使用中有如下三种使用形式:
=ANY:表示与子查询中的每个元素进行比较,功能与IN类似(然而<>ANY不等价于NOT IN)
>ANY:比子查询中返回结果的最小的要大(还包含了>=ANY)
<ANY:比子查询中返回结果的最大的要小(还包含了<=ANY)
示例十、查询出每个部门经理的工资
--查询出每个部门经理的工资 SELECT *
FROM emp
WHERE sal = ANY (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
示例十一、查询出每个部门大于经理的工资
--查询出每个部门大于经理的工资
SELECT *
FROM emp
WHERE sal > ANY (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
示例十二、查询出每个部门小于经理的工资
--查询出每个部门小于经理的工资
SELECT *
FROM emp
WHERE sal < ANY (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
ALL操作符有以下三种用法:
<>ALL:等价于NOT IN(但是=ALL并不等价于IN)
>ALL:比子查询中最大的值还要大(还包含了>=ALL)
<ALL:比子查询中最小的值还要小(还包含了<=ALL)
示例十三、查询出每个部门不等于经理的工资
--查询出每个部门不等于经理的工资
SELECT *
FROM emp
WHERE sal <> ALL (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
示例十四、
SELECT *
FROM emp
WHERE sal < ALL (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
示例十五、
SELECT *
FROM emp
WHERE sal >ALL (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
示例十五、验证exists结构
--验证exists结构
SELECT * FROM emp
WHERE EXISTS( --返回空值,没有内容输出
SELECT * FROM emp WHERE empno=9999); --没有这个编号的员工
示例十六、
SELECT * FROM emp
WHERE EXISTS(SELECT * FROM emp);--有内容将返回数据
示例十七、
SELECT * FROM emp
WHERE NOT EXISTS(SELECT * FROM emp);--有数据,但取返,没有内容输出
子查询一(WHERE中的子查询)的更多相关文章
- 子查询。ANY三种用法。ALL两种用法。HAVING中使用子查询。SELECT中使用子查询。
子查询存在的意义是解决多表查询带来的性能问题. 子查询返回单行多列: ANY三种用法: ALL两种用法: HAVING中的子查询返回单行单列: SELECT中使用子查询:(了解就好,避免使用这种方法! ...
- 使用resultMap实现ibatis复合数据结构查询(1.多重属性查询;2.属性中含有列表查询)
以订单为例(订单详情包括了订单的基本信息,配送物流信息,商品信息),直接上代码: 1.多重属性查询 java实体 public class OrderDetail { @XmlElement(requ ...
- 在MySQL中使用子查询
子查询作为数据源 子查询生成的结果集包含行.列数据,因而非常适合将它与表一起包含在from子句的子查询里.例: SELECT d.dept_id, d.name, e_cnt.how_many num ...
- 详细讲述MySQL中的子查询操作 (来自脚本之家)
继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 1 ...
- 在update语句中使用子查询
在update 中的 where 子句中使用子查询: UPDATE mg_page_log as a SET page_num=1 WHERE id in( SELECT id from mg_ ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
- 浅谈T-SQL中的子查询
引言 这篇文章我们来简单的谈一下子查询的相关知识.子查询可以分为独立子查询和相关子查询.独立子查询不依赖于它所属的外部查询,而相关子查询则依赖于它所属的外部查询.子查询返回的值可以是标量(单值).多值 ...
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...
- SQL-在Update中进行子查询和左联查询
以下总结源自后边的三个参考思索和测试而来: 我们有一张行政区划表,为了查询速度的优化,我们需要在这张表中,将每个乡镇的记录中写入其所属的省.市.县, 表如下: 当然,我们可以使用游标或在存储过程中使用 ...
随机推荐
- Hihocoder #1082 : 然而沼跃鱼早就看穿了一切 暴力
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...
- Hibernate-数据库更新操作
/* Session接口下操作存在以下问题: 数据更新操作: 1.更新的时候必须要有主键; 2.若只更新部分字段内容,则未设置的字段将被设置为Null(全表更新) 3.update()没有返回值,即不 ...
- Asky极简教程:零基础1小时学编程,已更新前8节
Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...
- IDC门外汉-单线、双线、智能多线、BGP的区别
一.单线在此不多说,不是电信,就是网通机房,是,2005年前的机房情况: 二.双线:上般是从2004年到2008年用此方法较多,此今还有不少在用此法如下: 双线主机 有单IP和单网卡双IP地址,双网卡 ...
- StringBuilder和StringBuffer解析(百度面试题优化须要用到的)
StringBuilder是java5及以后提供的API,它不是线程安全的,而StringBuffer是java1.4曾经的API,它是线程安全的,所以说StringBuilder的效率更高一些,今天 ...
- Tomcat与Gzip与缓存
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- python笔记1-用python解决小学生数学题
前几天有人在群里给小编出了个数学题: 假设你有无限数量的邮票,面值分别为6角,7角,8角,请问你最大的不可支付邮资是多少元? 小编掰着手指头和脚趾头算了下,答案是:1.7元 那么问题来了?为啥是1.7 ...
- LaTeX中的数学公式
因为想在过年之前把论文写出来(虽然现在看来似乎痴人说梦),用word写PDE的公式简直是自己找虐,就想说自己研究一下LaTex,用起来发现这东西写格式性的文档真心甩word几个陈景润啊,出来的公式不仅 ...
- Robots协议(爬虫协议、机器人协议)
Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓 ...
- mini-parser
https://leetcode.com/problems/mini-parser/ /** * // This is the interface that allows for creating n ...