通过本章学习,您将可以:
- 描述子查询可以解决的问题
- 定义子查询
- 列出子查询的类型
- 书写单行子查询和多行子查询
注意事项:
- 子查询要包含在括号内
- 将子查询放在比较条件的右侧
- 单行操作符对应单行子查询,多行操作符对应多行子查询
SELECT select_list
FROM table
WHERE expr operator(
SELECT select_list
FROM table
);
- 子查询(内查询)在主查询之前一次执行完成
- 子查询的结果被主查询(外查询)使用
#查询job_id与141员工相同,salary比143号员工多的员工姓名和工资
SELECT first_name,salary
FROM employees
WHERE job_id=(
SELECT job_id
FROM employees
WHERE employee_id=141
)
AND salary >(
SELECT salary
FROM employees
WHERE employee_id=143
);
#查询最低工资大于50号部门最低工资的部门id和其最低工资(分组)
SELECT department_id,min(salary)
FROM employees
GROUP BY department_id
HAVING min(salary)>(
SELECT min(salary)
FROM employees
WHERE depatment_id=50
);
#返回location_id时1400或1700的部门中的所有员工姓名
SELECT first_name
FROM employees
WHERE department_id IN(
SELECT deparment_id
FROM departments
WHERE location_id = 1400
OR location_id = 1700
);
#查询每个部门的平均工资的工资等级
SELECT grade_level,a,d
FROM(
SELECT AVG(salary) AS a,department_id AS d
FROM employees
GROUP BY department_id) AS m
INNER JOIN job_grades AS j
ON m.a BETWEEN j.lowest_sal AND j.highest_sal;
#引入案例:查询部门编号>90或邮箱包含a的员工信息
SELECT *
FROM employees
WHERE department_id>90
AND email LIKE '%A%' or department_id>90;
/*****************************************/
SELECT *
FROM employees
WHERE department_id>90
UNION
SELECT *
FROM employees
WHERE email LIKE '%A%';