• oracle中子查询


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

    语法:
    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';


    如:

    -- 查询出顾客名及他拥有的订单数
    --第一步:
    select c.name,订单数 from s_customer c;
    --第二步:订单数
    select c.name,count(o.id) from s_ord o right join s_customer c on o.customer_id = c.id group by c.name;
    --第三步:合并
    select c.name,(select count(*) from s_ord o where o.customer_id = c.id) from s_customer c;

    select c.name,count(o.id) from s_ord o
    right join s_customer c on o.customer_id = c.id
    group by c.name;

    -- 查询出部门名及此部门的员工数。 [使用子查询]
    select c.name,(select count(*) from s_emp e where e.dept_id = c.id) from s_dept c;

    -- 查询出工资超过公司平均工资 的员工.
    --第一步
    select avg(salary ) from s_emp
    --第二步
    select first_name from s_emp where salary >第一步
    --3合并
    select salary,(select avg(salary) from s_emp),first_name from s_emp where salary > (select avg(salary) from s_emp) ;


    -- 查询部门平均工资超过公司平均工资的部门

    select e.dept_id,avg(salary) 部门平均工资,d.name
    from s_emp e join s_dept d on e.dept_id=d.id
    group by e.dept_id,d.name
    having avg(salary)>(select avg(salary) from s_emp);

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

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

  • 相关阅读:
    解决“google快照无法打开”的简单而有效的方法~
    在Struts2里面嵌入Spring
    HDU
    设计模式大总结(二)
    Node.js入门笔记
    草图检索和识别[开源]
    2019-10-31-VisualStudio-断点调试详解
    2019-10-31-VisualStudio-断点调试详解
    2019-9-2-C#-设计模式-责任链
    2019-9-2-C#-设计模式-责任链
  • 原文地址:https://www.cnblogs.com/qianqian528/p/7818845.html
Copyright © 2020-2023  润新知