SQL子查询
分类
使用 比较运算符连接的子查询
#一、where或having后 面
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)
特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
< > = >= <= <> !=
列子查询,-般搭配着多行操作符使用in any/some all
④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
#例子 查询员工的工资大于abel的员工信息
SELECT salary
FROM employees
WHERE last_name = 'abel';
将上列查询当作子查询
SELECT *
FROM employees
WHERE salary > (SELECT salary
FROM employees
WHERE last_name = 'abel');
#案例2 查询 job—id = 141 且工资 > 143员工的员工信息
SELECT job_id
FROM employees
WHERE employee_id = 141;
SELECT salary
FROM employees
WHERE employee_id = 143;
#单表查询 作为子查询写在下面
SELECT first_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);
#查询公司的最低工资 返回工资最少的员工信息
SELECT MIN(salary)
FROM employees;
#引入子查询
SELECT *
FROM employees
WHERE salary = (
SELECT MIN(salary)
FROM employees);
列子查询(多行子查询)
操作符 : in 列表中任意一个 <> =any not in <> <>all
any : 返回列表的某一个值
all : 返回所有值
#返回location——id 是1400 或 1700 的员工部门中所有员工的姓名
SELECT department_id
FROM departments
WHERE location_id IN (1400,1700);
SELECT last_name
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id IN (1400,1700));
SELECT后面的子查询
#查询每个部门的员工个数
SELECT d.*,(
SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.`department_id`
)
FROM departments d;
子查询只能是一列 仅仅支持标量子查询。
from后面的子查询
将查询结果作为一张表 必须起别名。
相关子查询
语法:
exists(完整的查询语句)
只关心查询结果存不存在。
放在where 后面可以过滤。
能用exists 绝对可以用in 实现。
2323

被折叠的 条评论
为什么被折叠?



