四、sql基础:多表关联查询--【Oracle数据库】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29668759/article/details/79965375

四、多表关联查询

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;
阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页