多表查询子查询概述和子查询的不同情况

多表查询-子查询概述

概念:查询中嵌套查询,称嵌套查询为子查询

-- 查询工资最高的员工信息
-- 1.查询最高工资
SELECT MAX(salary) FROM emp1;
-- 2.查询员工信息,并且工资等于9000的
SELECT * FROM emp1 WHERE emp1.salary = 9000;
-- 一条sql语句写出来最高工资的员工信息 子查询
SELECT * FROM emp1 WHERE emp1.salary = (SELECT MAX(salary) FROM emp1);

 

多表查询-子查询的不同情况

1.子查询的结果是单行单列的:

  子查询可以作为条件,使用运算符去判断,运算符: >  >=  <=  <   = 

-- 查询员工工资小于平均工资的人
SELECT * FROM emp1 WHERE emp1.salary < (SELECT AVG(salary) FROM emp1);

2.子查询的结果是多行多列的:

   子查询可以作为条件,使用运算符in来判断

-- 查询'财务部'和市场部所有员工的信息
SELECT id FROM dept WHERE `NAME` = '财务部' OR `NAME` = '市场部';
SELECT * FROM emp1 WHERE dept_id IN(3,2);-- IN:集合 dept_id中满足in中的一条数据直接执行 
-- 子查询(多行多列)
SELECT * FROM emp1 WHERE dept_id IN(SELECT id FROM dept WHERE `NAME` = '财务部' OR `NAME` = '市场部');
SELECT * FROM emp1 WHERE dept_id IN(3,2);

3.子查询的结果是多行多列的:

  如果他是多行多列的那么子查询可以作为一张虚拟表,进行一个表的查询

-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
-- 子查询(多行多列)
SELECT * FROM dept t1,(SELECT * FROM emp1 WHERE emp1.join_date > '2011-11-11') t2 WHERE t1.id = t2.dept_id;
-- 普通的内连接
SELECT * FROM emp1 t1, dept t2 WHERE t1.dept_id = t2.id; AND t1.join_date > '2011-11-11';

 

posted @ 2022-10-18 14:02  monkey大佬  阅读(77)  评论(0)    收藏  举报