zoukankan      html  css  js  c++  java
  • Oracle 子查询

    子查询:在一个查询的内部还包括另外一个查询,则此查询称为子查询,子查询的格式:

    SELECT {DISTINCT} * | 查询列 1 别名 1,查询列 2 别名 2,…
    FROM 表名称 1 别名 1 , 表名称 2 别名 2 ,
    (
    SELECT {DISTINCT} * | 查询列 1 别名 1,查询列 2 别名 2,…
    FROM 表名称 1 别名 1 , 表名称 2 别名 2 ,…
    {WHERE 条件(s)}
    {GROUP BY 分组条件 {HAVING 分组条件}}
    {ORDER BY 排序字段 ASC|DESC , 排序字段 ACS | DESC ,…}
    ) 别名,
    …
    {WHERE 条件(s)
        (
            SELECT {DISTINCT} * | 查询列 1 别名 1,查询列 2 别名 2,…
            FROM 表名称 1 别名 1 , 表名称 2 别名 2 ,…
            {WHERE 条件(s)}
            {GROUP BY 分组条件 {HAVING 分组条件}}
            {ORDER BY 排序字段 ASC|DESC , 排序字段 ACS | DESC ,…}
        )
    }
    {GROUP BY 分组条件 {HAVING 分组条件}}
    {ORDER BY 排序字段 ASC|DESC , 排序字段 ACS | DESC ,…}            

    范例:要求查询出比 7654 工资要高的全部雇员的信息

    • · 要首先清楚的知道 7654 雇员的工资是多少
    SELECT sal FROM emp WHERE empno=7654 ;

    • · 之后要以以上的结果最为后续查询的依据,只要是其他的工资大于 sal,则表示符合条件。
    SELECT * FROM emp
    WHERE sal>(SELECT sal FROM emp WHERE empno=7654) ;

    所有的子查询必须在“()”中编写代码。
    子查询在操作中有分为以下三类:

    • · 单列子查询:返回的结果是一列的一个内容,出现几率最高
    • · 单行子查询:返回多个列,有可能是一条完整的记录
    • · 多行子查询:返回多条记录

    在子查询中,存在以下三种查询的操作符号:

    • · IN
    • · ANY
    • · ALL

    IN 操作符,指定一个查询的范围
    范例:求出每个部门的最低工资的雇员信息

    • · 每个部门的最低工资,返回的值肯定是多个,所以此时可以使用 IN 指定一个操作的范围。
    SELECT * FROM emp
    WHERE sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno) ;

    ANY 操作:

    • · =ANY:与 IN 的操作符功能完全一样
    SELECT * FROM emp
    WHERE sal =ANY (SELECT MIN(sal) FROM emp GROUP BY deptno) ;

    • · >ANY:比里面最小的值要大
    SELECT * FROM emp
    WHERE sal >ANY (SELECT MIN(sal) FROM emp GROUP BY deptno) ;

    • · <ANY:比最大的值要小
    SELECT * FROM emp
    WHERE sal <ANY (SELECT MIN(sal) FROM emp GROUP BY deptno) ;

    ALL 操作:

    • · >ALL:比最大的值要大
    SELECT * FROM emp
    WHERE sal >ALL (SELECT MIN(sal) FROM emp GROUP BY deptno) ;

    • · <ALL:比最小的值要小
    SELECT * FROM emp
    WHERE sal <ALL (SELECT MIN(sal) FROM emp GROUP BY deptno) ;

    对于子查询来讲,还可以进行多列子查询,一个子查询中同时返回多个查询的列。

    SELECT *
    FROM emp
    WHERE (sal,NVL(comm,-1)) IN (
        SELECT sal,NVL(comm,-1) FROM emp WHERE deptno=20) ;


     

    • · 在一个查询中继续包含另外一个查询,称为子查询
    • · 子查询可以出现在任意的位置:SELECT、FROM 、WHERE
    • · 子查询可以结合分组统计、多表关联完成复杂的查询功能
  • 相关阅读:
    Mybatis3.2和Spring3.x整合----Myb…
    Mybatis3.2和Spring3.x整合----Myb…
    支持向量分类方法
    KKT了解
    机器学习实战笔记 logistic回归
    朴素贝叶斯进行分类
    决策树算法实现
    KNN算法
    Spring AOP中增强知识
    Java动态代理知识
  • 原文地址:https://www.cnblogs.com/aaron911/p/7764724.html
Copyright © 2011-2022 走看看