Skip to content

连接查询分类

根据语法出现年代划分:

SQL92(DBA,数据库管理)、 SQL99

根据表的连接方式来划分:

  • 内连接:
    • 等值连接
    • 非等值连接
    • 直连接
  • 外连接:
    • 左外连接(左连接)
    • 右外连接(右连接)
  • 全连接

笛卡尔积现象

笛卡尔乘积现象:

案例:找出每一个员工的部门名,要求显示员工名和部门名 找出每一个员工对应的部门:【EMP】

img.png

找出编号对应部门:【dept】

img_1.png

当两个表进行联合查询时,在 EMP 表取 enamel,在 dept 取 dname:

img_2.png

因为没有添加筛选条件,所以查询时,ename 会和每个 dname 进行组合并进行输出,输出的条数时 14*4 为 56 条。

TIP

两张表联合查询没有任何条件限制的话,最终查询结果条数是两个表的记录的成绩乘积,这种现象被称为笛卡尔积现象

如何避免:

加条件进行限制。

增加限制条件也不能避免笛卡尔积现象,不会减少记录的匹配次数,次数不会变。 只不过显示的记录是有效记录

增加限制条件:【SQL92写法】

img_3.png

匹配时还是逐条进行匹配,但是只有当两个表中的DEPTNO相同时才会进行显示,反之进行过滤。

内连接

等值连接

最大的特点是:条件是等量关系。 SQL99:

sql
    Jion ... on:
        。。。
        表A
    (inner) Join
        表B
    On
        连接条件
    Where
        。。。

inner可省略,带inner可读性更好 SQL99语法结构更清晰,表的连接条件和后来的where条件进行了分离

案例:查询每个员工部门名称,要求显示员工名和部门名

img_4.png

非等值连接

特点:来连接条件中的关系是非等量关系的。

案例:找出每个员工的工资等级,要求显示员工名、工资、工资等级。

img_5.png

自连接

特点:一张表看作两张表,自己连自己

案例:找出每个员工的上级领导,要求显示员工名和对应的领导名

img_6.png

外连接

什么外连接,和内连接有什么区别。

内连接:

假设A和B表进行连接,使用内连接连接,凡是A表和B表能匹配上的记录都查询出来,这是内连接,两张表是平等的,两张表没有主副之分。

外连接:

假设A和B表进行连接,使用外连接连接,AB两个表有一个是主表,另一个是副表,主要查询主表中的数据,捎带查询副表中的数据,当副表中的数据没有和主表中的数据匹配上时,副表自动模拟出NULL与之匹配。

左外连接:左边的表是主表 右外连接:右边的表是主表

右连接有左连接写法,左连接也有对应的左连接的写法。

TIP

外连接最主要的特点是:主表中的数据全部无条件地显示出来

案例:找出每个员工的上级领导,没有的也要找出来。 左连接:

img_7.png

sql
Select
    字段。。。
From
    表1
Left / right (outer) join
    表2
On
    条件
outer (可以省略)

找出哪个部门没有员工;

逻辑:查找两个表中所有的元素,将部门(DEPT)作为主表,并进行筛选,将表中为NULL的元素全部删除,得出结果

img_8.png

三表联查

案例:找出每一个员工的部门名称以及工资等级

img_9.png

emp先和dept进行连接;再和salgrade连接

案例:找出每一个员工的部门名称以及工资等级,以及上级领导

img_10.png

多表查询注意事项

多表查询原理:

在第一张表中拿到第一个字段,和第二张表中的所有指定字段进行匹配

当多表查询时,最好为每个表取一个别名 好处:

执行效率高(不用取每张表中找指定的字段名) 可读性好

img_11.png

本站除转载文章或特殊说明外,均遵循 CC BY-SA 4.0 协议发布。