select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp left join department as dep
on emp.dep_id=dep.id
union
select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp right join department as dep
on emp.dep_id=dep.id;
子查询
子查询是将一个查询语句嵌套再另一个查询语句中的查询方式:
子查询的内层查询结果,可以作为外层查询语句提供查询条件。
子查询中可以包含IN、NOT IN、AND、ALL、EXISTS、NOT EXISTS等关键字。
子查询中还可以包含比较运算符,如=、!=、>、<等。
-- 查询平均年龄在20以上的部门名称
select name
from department
where id in (
select dep_id
from employee
group by dep_id
having avg(age) > 20);
-- 查询财务部员工姓名
select name
from employee
where dep_id in (
select id
from department
where name="财务部");
-- 查询所有大于平均年龄的员工的年龄和姓名
select name,age
from employee
where age > (
select avg(age) from employee);