Oracle 子查询
一.子查询的语法
a) 子查询(内查询)在主查询之前一次执行完成。
b) 子查询的结果被主查询使用(外查询)。
二.注意事项
a) 子查询要包含在括号内。
b) 将子查询放在比较条件的右侧。
c) 单行操作符对应单行子查询,多行操作符对用多行子查询。
三.单行子查询
a) 只返回一行。
b) 使用单行比较操作符。
操作符 | 含义 |
= | Equal to |
> | Greather than |
>= | Greather than or equal to |
< | Less than |
<= | Less than or equal to |
<> | Not equal to |
c) 子查询中的having子句
i. 首先执行查询。
ii. 向主查询中的having子句返回结果。
四.多行子查询
a) 返回多行。
b) 使用多行比较操作符。
操作符 | 含义 |
In | 等于列表中的任何一个 |
Any | 和子查询返回的任意一个值比较 |
All | 和子查询返回的所有值比较 |
五.测试
a) 查询和Zlotkey相同部门的员工姓名和雇用日期
select last_name,hire_date
from employees
where department_id = (
select department_id
from employees
where last_name = 'Zlotkey'
)
b) 查询工资比公司平均工资高的员工的员工号,姓名和工资。
select employee_id,last_name,salary
from employees
where salary >(
select avg(salary)
from employees
)
c) 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
select employee_id,last_name,salary
from employees e
where salary >(
select avg(salary)
from employees
where department_id = e.department_id
)
d) 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
select employee_id,last_name
from employees
where department_id in (
select department_id
from employees
where last_name like '%u%'
)
e) 查询在部门的location_id为1700的部门工作的员工的员工号
select employee_id
from employees
where department_id in (
select department_id
from departments
where location_id = 1700
)
f) 查询管理者是king的员工姓名和工资
select last_name,salary
from employees
where manager_id in (
select employee_id
from employees
where last_name = 'King'
)