
-- 联合查询 union(单独用可以去重复) union all(将结果合并之后不会去重复)-- 将薪资低于5000的员工,和年龄大于50岁的员工全部查询出来select * from emp where salary<5000 -- union用于两张表的结果合并 (这里用or也可以实现,但是效率低) -- or和and用于结果判断unionselect * from emp where age>50; -- 使用union 的时候,select查询后的字段一定要一样,否则会报错
————————————-子查询———————————————————-
1.标量子查询



-- ----------------------------------------标量子查询-------------------------------------------------------- 1.查询“销售部"的所有员工信息-- 首先要查询”销售部“部门ID,select id from dept where name = '销售部';-- 其次根据部门id,查询员工信息 -- 因为emp表的dept_id绑定了dept表的idselect * from emp where dept_id = (select id from dept where name = '销售部'); -- 子查询要用括号括起来-- 2.查询在”金庸“入职之后的员工信息-- 首先先查询”金庸的入职日期“select entrydate from emp where name = '金庸';-- 然后再查询入职之后的员工信息 -- 子查询的操作符可以是><=select * from emp where entrydate>(select entrydate from emp where name = '金庸');
————————————————-列子查询——————————————

-- 列子查询 (查询的结果是一列多行)-- 查询”销售部“和”市场部“的所有员工信息-- 首先查询”销售部“和市场部的员工idselect id from dept where name= '销售部' or name = '市场部';-- 然后根据查询的id来坐条件查询员工 -- 用in包含select * from emp where dept_id in (select id from dept where name= '销售部' or name = '市场部'); -- 查询比财务部所有人工资都高的员工信息 -- 首先先查询财务部的人员的工资select id from dept where name = '财务部'; -- 先查财务部,然后合并select salary from emp where dept_id = (select id from dept where name = '财务部'); -- 查询财务部的工资-- 然后查询比财务部所有人员工资都高的员工信息 -- all 关键字,要满足括号里面所有的条件(一列多行)都要满足select * from emp where salary>all (select salary from emp where dept_id = (select id from dept where name = '财务部'));-- 3.查询比研发部其中任意一人工资的员工信息-- 首先先查询研发部的员工工资信息select id from dept where name = '研发部';select salary from emp where dept_id = (select id from dept where name = '研发部');-- 然后查询比研发部其中任意一人工资的员工信息 -- 关键字any >any表示比括号里面查询到的工资都要高 any和some一样的效果,只要满足括号中的任意一种条件就行select * from emp where salary> any (select salary from emp where dept_id = (select id from dept where name = '研发部'));
————————————行子查询———————————————————————

-- 行子查询-- 1.查询与”金庸33“的薪资及直属领导相同的员工信息-- 首先查询与”金庸33“的新资和直属领导select salary,managerid from emp where name = '金庸33';-- 然后查询与金庸33的薪资及其直属领导相同的员工信息# select * from emp where salary= 20000 and managerid = 1;-- salary= 20000 and managerid = 1 可写成 ( salary ,managerid) = (20000,1) select * from emp where (salary,managerid) = (select salary,managerid from emp where name = '金庸33');
—————————————————表子查询——————————————————-

-- 表子查询-- 查询与”金庸33“,“金庸44”的职位和薪资相同的员工信息-- 首先先查询”金庸33“,“金庸44”的职位和薪资select job,salary from emp where name= '金庸33' or name = '金庸44';-- 然后查询与”金庸33“,“金庸44”的职位和薪资相同的员工信息select * from emp where (salary,job) in (select job,salary from emp where name= '金庸33' or name = '金庸44');-- 2.查询入职日期是“2006-01-01”之后的员工信息,及其部门信息-- a.先查询入职日期是“2006-01-01”之后的员工信息select * from emp where entrydate>'2006-01-01'; -- 表子查询一般接from后面,因为是往生成的新表后面继续查-- b.查询这部分员工的部门信息 -- 再表子查询后面 添加一个别名,然后用左外连接,显示表1的所有信息select * from (select * from emp where entrydate>'2006-01-01') e left join dept d on e.dept_id= d.id;