• Oracle 高级查询2 子查询


    子查询:

    定义,就是指查询中嵌套查询。
    子查询可以出现在很多位置,比如: 当列、当表、当条件等

    语法:
    SELECT (子查询)
    FROM (子查询)
    WHERE (子查询)
    GROUP BY 子句
    HAVING (子查询)
    ORDER BY 子句

    注:子查询要用括号括起来。

    如:
    -- 找出与Ben同一个部门的员工
    --第一步:先找出Ben所在的部门
    select dept_id from s_emp where first_name = 'Ben';
    --第二步:找出该部门的所有员工
    select first_name from s_emp where dept_id = 数值
    --第三步:
    select first_name from s_emp where dept_id =(select dept_id from s_emp where first_name = 'Ben') and first_name != 'Ben';

    子查询分类
    1. 无关子查询
    是指子查询中没有使用外部查询所定义的变量/别名。

    2. 相关子查询
    是指子查询中要使用外部查询所定义的变量/别名。

    rownum

    它总是从1开始,依次递增,绝不会产生GAP【间隔】

    如:
    select d.*,rownum from s_dept d where rownum = 1;
    select d.*,rownum from s_dept d where rownum = 5;
    select d.*,rownum from s_dept d where rownum > 5;
    select d.*,rownum from s_dept d where rownum < 5;

    -- rownum 的作用

    2. 分页查询问题


    -- 查询出员工表中第2页[第7行至第12行]数据。
    //错误
    select * from s_emp where rownum between 7 and 12;
    select * from s_emp where rownum >=7 and rownum<= 12;
    //正确:方法一
    select * from (
    --中间层,负责把上限行给取出来
    select v1_.*,rownum rw_ from (
    -- 业务的核心语句
    select id,first_name,salary from s_emp
    ) v1_
    where rownum <= 12
    ) v2_
    where v2_.rw_ >= 7;

    方法二:
    select * from
    (select * from s_emp where rownum <=12)
    where id not in (select id from s_emp where rownum <7);

    有关 exists 与 not exists 运算符
    exists用来判断子查询是否有结果,如果有,则返回TRUE,否则,返回FALSE

    关于子查询的集合操作
    UNION 返回两个子查询的并集,不含重复记录
    UNION ALL 返回两个子查询的并集,包含复复记录

    如:
    select id,first_name from s_emp where salary > 1200
    union
    select id,first_name from s_emp where salary between 850 and 1400;

    INTERSECT 返回交集
    MINUS 两个子查询相减

  • 相关阅读:
    Codeforces Round #285 (Div. 2) A, B , C 水, map ,拓扑
    hdu 5147 Sequence II 树状数组
    hdu 5900 QSC and Master 区间dp
    Codeforces Round #372 (Div. 2) A ,B ,C 水,水,公式
    51nod 1009 数字1的数量 数位dp
    hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂
    hdu 5890 Eighty seven 暴力+bitset优化背包
    hdu 5884 Sort 队列+多叉哈夫曼树
    Codeforces Round #301 (Div. 2) D. Bad Luck Island 概率DP
    Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 线段树模拟
  • 原文地址:https://www.cnblogs.com/ty-v/p/7880583.html
Copyright © 2020-2023  润新知