前文给大家介绍过简单的增删改查了,今天介绍一个比较复杂的查询方式—子查询。
子查询
子查询语法:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
- 子查询(内查询)在主查询之前执行完成。
- 子查询的结果被主查询(外查询)使用。
- 出现在其他语句内部的select语句,称为子查询或内查询。内部嵌套其他select语句的查询,称为外查询或主查询。示例代码:
select first_name from users where
department_id in(
select department_id from departments
where location_id=1700
)
注意事项:
- 子查询要包含在括号内
- 将子查询放在比较条件的右侧
- 单行操作符对应单行子查询,多行操作符对应多行子查询
单行子查询
- 只返回一行
- 使用单行比较操作符
- =
- >
- >=
- <
- <=
- <>
SELECT last_name
FROM users
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = 'xiaoming');
#查询工资比xiaoming高德员工的名字
在子查询中使用组函数
子查询中的HAVING子句
- 首先执行子查询
- 向主查询中的HAVING子句返回结果
多行子查询
- 返回多行
- 使用多行比较操作符
- IN/NOT IN
- ANY|SOME
- ALL
SELECT employee_id, last_name, job_id, salary
FROM users
WHERE salary < ANY
(SELECT salary
FROM users
WHERE job_id = 'IT')
AND job_id <> 'IT';
#查询除IT外其他部门中比IT任一员工工资低的员工信息
SELECT employee_id, last_name, job_id, salary
FROM users
WHERE salary < ALL
(SELECT salary
FROM users
WHERE job_id = 'IT')
AND job_id <> 'IT';
#查询除IT外其他部门中比IT所有员工工资都低的员工信息
子查询就给大家介绍到这里,欢迎大家指正补充!