加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle-高级子查询

发布时间:2020-12-12 15:51:27 所属栏目:百科 来源:网络整理
导读:1.多列子查询 --查询与 141 号或 174 号员工的manager_id department_id--相同的其他员工的employee_id manager_id department_id【old】/* select employee_id,manager_id,department_id from employees where manager_id in ( select manager_id from empl

1.多列子查询

--查询与141号或174号员工的manager_id department_id
--相同的其他员工的employee_id  manager_id department_id

【old】
/*
select employee_id,manager_id,department_id from employees
where manager_id in (
select manager_id from employees where employee_id in (141,174)
)
and department_id in (
select department_id from employees where employee_id in (141,174)
)
and employee_id not in (141,174)
*/

【newselect employee_id,department_id from employees
where (manager_id,department_id) in (
select manager_id,department_id from employees where employee_id in (141,174)
)

and employee_id not in (141,174)

2.from字句中使用子查询

--在from字句中使用子查询
--返回比本部门平均工资高的员工的last_name,department_id,salary及平均工资

--【old】
/*
select last_name,salary,(select avg(salary) from employees e3
where e3.department_id = e1.department_id group by department_id) as "avg(salary)"
from employees e1
where salary > (
 select avg(salary) from employees e2
 where e2.department_id  = e1.department_id group by department_id
)*/

--【new1】
select e1.last_name,e1.department_id,e1.salary,e2."avg_sal"
from employees e1,(select department_id,avg(salary) as "avg_sal"
from employees  group by department_id) e2
where e2.department_id = e1.department_id
and e1.salary > e2."avg_sal"

--【new2】--e2.avg_sal 没有添加双引号
select e1.last_name,e2.avg_sal
from employees e1,avg(salary) avg_sal
from employees  group by department_id) e2
where e2.department_id = e1.department_id
and e1.salary > e2."avg_sal"

3.条件表达式中使用子查询

case..when..then..else..end

--显示员工的employee_id,last_name location.
--其中,若员工department_id与location_id为1800的department_id相同,则location为"Canada",其余为"USA".
select employee_id,last_name,(case department_id when (select department_id from departments where location_id = 1800) then 'Canada' else 'USA' end)location from employees 

4.order by中使用子查询

--查询员工的employee_id,要求按照员工的department_name 排序
select employee_id,last_name from employees e1 order by( select department_name from departments d where e1.department)id = d.department_id )

5.where字句中使用子查询

--若employees表中employee_id与job_history表中employee_id
--相同的数目不小于2,则输出这些相同id的员工的employee_id,last_name和job_id
select employee_id,job_id from employees e1 where 2 <= ( select count(*) from job_history where employee_id = e1.employee_id ) 

6.exists操作符

--查询公司管理者的employee_id,job_id,department_id的信息
/* select employee_id,department_id from employees e1 where exists( select 'a' from employees e2 where e1.employee_id = e2.manager_id ) */

--查询departments表中,不存在与employees表中的部门的department_id和department_name

select department_id,department_name from departments d where not exists ( select 'c' from employees where department_id = d.department_id )

7.with字句

--查询公司中各部门的总工资大于公司中各部门的平均工资的部门信息
with dept_sumsal as (
select department_name,sum(salary) sum_sal1 from departments d,employees e where d.department_id = e.department_id group by department_name ),dept_avgsal as( select sum(sum_sal1)/count(*) avg_sum_sal2 from dept_sumsal ) select * from dept_sumsal where sum_sal1 > ( select avg_sum_sal2 from dept_avgsal )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读