MySQL子查询定义
MySQL子查询指的是:一个查询语句嵌套在另一个查询语句内部的查询,又叫内部查询。
子查询是指嵌套在其他 SQL 语句,比如: SELECT、INSERT、UPDATE、DELETE 等中的查询语句。
比如:
select emp_name, salary from employee where salary > ( select avg(salary) from employee );
其中嵌套了一个SELECT查询语句。
where型子查询
where型子查询即把内层sql语句查询的结果,作为外层sql查询的条件。
语法格式:
select 列1,列2,...,列n from 表名 where 列i =/in (select 列1,列2,...,列n from 表名 where ...);
示例,查询比“mikechen”的工资高的员工编号:
SELECT * FROM t_salary WHERE basic_salary > (SELECT basic_salary FROM t_employee INNER JOIN t_salary ON t_employee.eid=t_salary.eid WHERE t_employee.ename='mikechen');
from型子查询
from型子查询,即把内层sql语句查询的结果,作为临时表供外层sql语句再次查询。
语法格式:
select 列1,列2,...,列n from (select 列1,列2,...,列n from 表名 where ...) as 表别名 where ....;
示例:
#找出比部门平均工资高的员工编号,基本工资 SELECT t_employee.eid,basic_salary FROM t_salary INNER JOIN t_employee INNER JOIN ( SELECT emp.dept_id AS did,AVG(s.basic_salary) AS avg_salary FROM t_employee AS emp,t_salary AS s WHERE emp.eid = s.eid GROUP BY emp.dept_id) AS temp ON t_salary.eid = t_employee.eid AND t_employee.dept_id = temp.did WHERE t_salary.basic_salary > temp.avg_salary;
exists型子查询
exists子查询把外层sql的结果,拿到内层sql去测试,如果内层的sql成立,则该行取出。
语法格式:
select 列1,列2,...,列n from 表名 where exists (select 列1,列2,...,列n from 表名 where ...);
示例:
#exists型 #查询部门信息,该部门必须有员工 SELECT * FROM t_department WHERE EXISTS (SELECT * FROM t_employee WHERE t_employee.dept_id = t_department.did);
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》