zoukankan      html  css  js  c++  java
  • 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. 相关子查询
    是指子查询中要使用外部查询所定义的变量/别名。

  • 相关阅读:
    【转载】$.ajax()方法详解
    【转载】"从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总
    jQuery获取select的选中项value和text
    AIDL
    SAX
    AsyncTask
    Handler
    ViewSwitch
    TabActivity
    AlarmManager
  • 原文地址:https://www.cnblogs.com/qianqian528/p/7818845.html
Copyright © 2011-2022 走看看