①. 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入
②. 子查询(内查询)在主查询(外查询)之前一次执行完成
③. 子查询的结果被主查询(外查询)使用
④. 子查询注意事项:
# 谁的工资比Abel高
#方式一:
SELECT salary FROM employees WHERE last_name = 'Abel';
SELECT last_name,salary FROM employees WHERE salary > 11000;
#方式二:自连接
SELECT e2.last_name,e2.salary FROM employees e1,employees e2
WHERE
e1.last_name = 'Abel' AND e1.`salary` < e2.`salary`
#方式三:子查询
SELECT last_name,salary FROM employees
WHERE
salary > ( SELECT salary FROM employees WHERE last_name = 'Abel' );

①. 单行比较操作符

②. 子查询题目 - sql展示
# (1).返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资
SELECT
last_name,
job_id,
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 );
# (2).返回公司工资最少的员工的last_name,job_id和salary
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
salary = ( SELECT MIN( salary ) FROM employees );
# (3).查询与141号或174号员工的manager_id和department_id相同的其他员工的employee_id, manager_id,department_id
SELECT
employee_id,
manager_id,
department_id
FROM
employees
WHERE
manager_id IN ( SELECT manager_id FROM employees WHERE employee_id IN ( 174, 141 ) )
AND department_id IN ( SELECT department_id FROM employees WHERE employee_id IN ( 174, 141 ) )
AND employee_id NOT IN ( 174, 141 )
# (4).查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT
department_id,
MIN( salary )
FROM
employees
GROUP BY
department_id
HAVING
MIN( salary ) > ( SELECT MIN( salary ) FROM employees WHERE department_id = 50 );
# (5).显式员工的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;