mysql-子查询
/*
含义:
出现在其他语句中的 select 语句,称为子查询或内查询
外边的查询语句,称为主查询或外查询
分类:
按子查询出现的位置:
select 后面(仅仅支持标量子查询)
from 后面(支持表子查询)
where 或 having 后面(支持标量子查询【单行】、列子查询【多行】、行子查询)
exists 后面(相关子查询)(支持表子查询)
按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
特点:
a.子查询放在小括号内
b.子查询一般放在条件的右侧
c.标量子查询,一般搭配着单行操作符使用(> < >= = <>)
d.子查询执行优先于主查询
*/
1.where 或 having 后面
1.1、标量子查询(单行子查询)
案例1:谁的工资比 Abel 高?
#1.查询 Abel 的工资 SELECT salary FROM employees WHERE last_name = ‘Abel‘; #2.查询员工的信息,满足 salary>1结果 SELECT * FROM employees WHERE salary>( SELECT salary FROM employees WHERE last_name = ‘Abel‘
);
案例2:返回 job_id 与141号员工相同,salary 比143号员工姓名、job_id 和工资
#1.查询141号员工的 job_id SELECT job_id FROM employees WHERE employee_id = 141; #2.查询143号员工的 salary SELECT salary FROM employees WHERE employee_id = 143; #3.查询员工的姓名、job_id和工资,要求 job_id=1 并且 salary>2 SELECT lact_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 );
案例3:返回公司工资最少的员工的 last_name,job_id 和 salary
#1.查询公司的最低工资 SELECT MIN(salary) FROM employees; #2.查询 last_name,job_id 和 salary,要求 salary=1 SELECT last_name,job_id 和 salary,salary FROM employees WHERE salary=( SELECT MIN(salary) FROM employees );
案例4:查询最低工资大于50号部门最低工资的部门 id 和其最低工资
#1.查询50号部门的最低工资 SELECT MIN(salary) FROM employees WHERE departmengt_id = 50; #2.查询每个部门的最低工资 SELECT MIN(salary),department_id FROM employees GROUP BY department_id; #3.在2基础上筛选,满足 min(salary)>1 SELECT MIN(salary),department_id FROM employees GROUP BY department_id HAVING MIN(salary)>( SELECT MIN(salary) FROM employees WHERE departmengt_id = 50 );
1.2、列子查询(多行子查询)
列子查询,一般搭配着多行操作符使用(in 、any/ some、all )
1.3、行子查询(多行多列)
原文:https://www.cnblogs.com/xiao-yuge/p/12584733.html
如果您也喜欢它,动动您的小指点个赞吧