zoukankan      html  css  js  c++  java
  • ORACLE学习-5.子查询

    1、子查询简介

    1.1 子查询语法:

    SELECT	select_list
    FROM	table
    WHERE	expr operator
    		 	(SELECT	select_list
    		        FROM		table);
    

    1.2 注意:

    a.子查询要包含在括号内;

    b.将子查询放在比较条件的右侧;

    c.单行操作对应单行子查询,多行操作对应多行子查询;

    2、单行子查询

    单行子查询只返回一行,单行比较操作符有:

    单行子查询操作符
    操作符 含义
    = 等于
    > 大于
    >= 大于等于
    < 小于
    <= 小于等于
    <> 不等于

    例如:

    返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资

    SELECT last_name, job_id, salary
    FROM   employees
    WHERE  job_id =  
                    (SELECT job_id
                     FROM   employees
                     WHERE  employee_id = 141)
    AND    salary >
                    (SELECT salary
                     FROM   employees
                     WHERE  employee_id = 143);

    2.1 在子查询中使用子函数

    例如:返回公司工资最少的员工的last_name,job_id和salary

    SELECT last_name, job_id, salary
    FROM   employees
    WHERE  salary = 
                    (SELECT MIN(salary)
                     FROM   employees);
    #多行子查询使用单行比较符
    SELECT employee_id, last_name
    FROM   employees
    WHERE  salary =
                    (SELECT   MIN(salary)
                     FROM     employees
                     GROUP BY department_id);
    
    ERROR at line 4:
    ORA-01427: single-row subquery returns more thanone row

    子查询中的空值问题:

    SELECT last_name, job_id
    FROM   employees
    WHERE  job_id =
                    (SELECT job_id
                     FROM   employees
                     WHERE  last_name = 'Haas');

    3.多行子查询

    多行子查询返回多行,应该使用多行比较操作符

    操作符 含义
    in 等于列表中的任意一个
    any 和子查询返回的某一个值比较
    all 和子查询返回的所有值比较

    3.1在子查询中使用any操作符

    --返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
    
    SELECT employee_id, last_name, job_id, salary
    FROM   employees
    WHERE  salary < ANY
                        (SELECT salary
                         FROM   employees
                         WHERE  job_id = 'IT_PROG')
    AND    job_id <> 'IT_PROG';

    3.2在子查询中使用all操作符

    --返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
    SELECT employee_id, last_name, job_id, salary
    FROM   employees
    WHERE  salary < ALL
                        (SELECT salary
                         FROM   employees
                         WHERE  job_id = 'IT_PROG')
    AND    job_id <> 'IT_PROG';

    3.3子查询中的控制问题

    SELECT emp.last_name
    FROM   employees emp
    WHERE  emp.employee_id NOT IN
                                 (SELECT mgr.manager_id
                                  FROM   employees mgr);
    
    --no rows selected

     参考资料:尚硅谷数据库学习

  • 相关阅读:
    P3391 文艺平衡树
    隔离村庄(树形dp[01背包])
    cmd指令集
    vs的使用
    博客园第一天
    蓝桥杯 小生物的逃逸 模拟
    蓝桥杯 自行车停放 双向链表
    c++字符数组函数总结
    蓝桥杯 石子游戏 贪心
    蓝桥杯 最大获利 模拟
  • 原文地址:https://www.cnblogs.com/hjwq/p/9506179.html
Copyright © 2011-2022 走看看