子查询

子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念。

子查询返回结果
子查询可以返回的数据类型一共分为四种:

    1. 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;
    2. 单行多列:返回一行数据中多个列的内容;
    3. 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;
    4. 多行多列:查询返回的结果是一张临时表;

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'
);

多行单列子查询

主要使用三种操作符:IN、ANY、ALL
 IN操作

示例八、查询出与每个部门中最低工资相同的全部雇员信息

--查询出与每个部门中最低工资相同的全部雇员信息
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
);
空数据判断
在SQL之中提供了一个exists结构用于判断子查询是否有数据返回。如果子查询中有数据返回,则exists结构返回true,反之返回false。

示例十五、验证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中的子查询)的更多相关文章

  1. 子查询。ANY三种用法。ALL两种用法。HAVING中使用子查询。SELECT中使用子查询。

    子查询存在的意义是解决多表查询带来的性能问题. 子查询返回单行多列: ANY三种用法: ALL两种用法: HAVING中的子查询返回单行单列: SELECT中使用子查询:(了解就好,避免使用这种方法! ...

  2. 使用resultMap实现ibatis复合数据结构查询(1.多重属性查询;2.属性中含有列表查询)

    以订单为例(订单详情包括了订单的基本信息,配送物流信息,商品信息),直接上代码: 1.多重属性查询 java实体 public class OrderDetail { @XmlElement(requ ...

  3. 在MySQL中使用子查询

    子查询作为数据源 子查询生成的结果集包含行.列数据,因而非常适合将它与表一起包含在from子句的子查询里.例: SELECT d.dept_id, d.name, e_cnt.how_many num ...

  4. 详细讲述MySQL中的子查询操作 (来自脚本之家)

    继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 1 ...

  5. 在update语句中使用子查询

    在update 中的 where 子句中使用子查询: UPDATE mg_page_log as a  SET  page_num=1 WHERE id in( SELECT id  from mg_ ...

  6. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  7. 浅谈T-SQL中的子查询

    引言 这篇文章我们来简单的谈一下子查询的相关知识.子查询可以分为独立子查询和相关子查询.独立子查询不依赖于它所属的外部查询,而相关子查询则依赖于它所属的外部查询.子查询返回的值可以是标量(单值).多值 ...

  8. 在 SQL Server 数据库的 WHERE 语句中使用子查询

    这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...

  9. SQL-在Update中进行子查询和左联查询

    以下总结源自后边的三个参考思索和测试而来: 我们有一张行政区划表,为了查询速度的优化,我们需要在这张表中,将每个乡镇的记录中写入其所属的省.市.县, 表如下: 当然,我们可以使用游标或在存储过程中使用 ...

随机推荐

  1. redis的搜索组件 redis-search4j

    redis-search4j是一款基于redis的搜索组件. 特点 1.基于redis,性能高效 2.实时更新索引 3.支持Suggest前缀.拼音查找(AutoComplete功能) 4.支持单个或 ...

  2. tomcat部署应用仅需ip和port访问

    一.使用ip和port访问应用项目: 打开tomcat安装根目录,打开conf目录下server.xml,找到<Host>节点,并且在该节点下新增: <Context   docBa ...

  3. poj3322 Bloxorz I

    Home Problems       Logout -11:24:01     Overview Problem Status Rank A B C D E F G H I J K L M N O ...

  4. as 汇编器

    [root@localhost ~]# cat .s .file "write.s" .section .rodata hello: .string "hello, wo ...

  5. 在EntityFramework6中管理DbContext的正确方式——3环境上下文DbContext vs 显式DbContext vs 注入DbContext(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  6. Unity3d Http Get请求

    新浪微博的OpenAPI登录 public static IEnumerator LoginRequest(string userid, string passwd, Action<string ...

  7. debian添加中文支持

    转载:http://www.shunix.com/debian-chinese-support-472/   debian与ubuntu有很大的相似性,但是debian相对更原始,比如在语言支持这一块 ...

  8. MVC无限级分类02,增删改查

    继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github. 显示和查询 使用datagrid显 ...

  9. UIView 精要概览(持续更新)

    --1-- 知识点:为UIView 设置圆角 前提:layer 属性需要 <QuartzCore/QuartzCore.h> 静态库的支持,所以需要提前导入到项目中,并在你的文件中包含#i ...

  10. Pycharm配置autopep8让Python代码更符合pep8规范

    一.何为pep8? PEP 8官方文档 -- Style Guide for Python Code PEP8中文翻译(转) 二.Pycharm中配置pep8 Pycharm本身是有pep8风格检测的 ...