四、多表关联查询
4.1联合查询–等于链接–示例
员工表(员工id, 员工姓名,部门id)
部门表(部门id, 部门名称)
要查询员工id、姓名、部门名称:
select 员工表.员工id, 员工表.员工姓名, 部门表.部门姓名
from 员工表,部门表
where 员工表.部门id = 部门表.部门id;
4.2 联合查询–不等链接–示例
员工表(员工id, 员工姓名, 员工薪水)
薪水表(薪水等级,最低薪水,最高薪水)
要查询员工姓名、员工薪水、薪水等级:
select 员工表.员工姓名,员工表.员工薪水,
薪水表.薪水等级
from 员工表,薪水表
whree 员工表.员工薪水 between 薪水表.最低薪水 and 薪水表.最高薪水;
4.3 联合查询–外链接(左、右连接)–示例
看4.1,当员工表中有一个员工的部门id是空,那么4.1查询出来的结果就没有该员工的信息,因为部门id(null)在部门表中找不到相对应的部门信息,所以他就不显示。
外连接解决了这一问题,使用外连接之后,可以显示所有员工的信息:–右链接
select 员工表.员工id, 员工表.员工姓名, 部门表.部门姓名
from 员工表,部门表
where 员工表.部门id = 部门表.部门id(+);
我们要显示所有的员工信息,那么就在另一张表后加(+)
这样一旦某个员工没有部门,就会显示:
-------------------------------
| 员工姓名 | 部门id | 部门名称 |
-------------------------------
| zhao | 10 | IT |
-------------------------------
| tai | | |
-------------------------------
那我们要显示所有的部门信息呢?万一这个部门下没有员工呢?–左连接
select 员工表.员工id, 员工表.员工姓名, 部门表.部门姓名
from 员工表,部门表
where 员工表.部门id(+) = 部门表.部门id;
-------------------------------
| 员工姓名 | 部门id | 部门名称 |
-------------------------------
| zhao | 10 | IT |
-------------------------------
| | 11 | HR |
-------------------------------
4.4 联合查询–自链接–示例
员工表(员工id, 员工姓名,员工上级id)
这里需要注意,员工上级也在员工表中!
要查询员工id, 员工姓名,员工上级姓名:
select 员工表.员工id,员工表.员工姓名,上级.员工姓名
from 员工表,员工表 上级
where 员工表.员工上级id = 上级.员工id;