• 数据库常用SQL语句(二):多表连接查询


    前面主要介绍了单表操作时的相关查询语句,接下来介绍一下多表之间的关系,这里主要是多表数据记录的查询,也就是如何在一个查询语句中显示多张表的数据,这也叫多表数据记录的连接查询。

    在实现连接查询时,首先是将两个或两个以上的表按照某种关系连接起来(连接后形成一个新的关系表),然后再查询到所要求的的数据记录。连接查询分为外连接查询和内连接查询。

    一、表和表之间的关系

    并(UNION):并操作是把具有相同字段数目和字段类型的两个或多个表合并到一起。

    2.笛卡尔积:两个表之间进行笛卡尔积后形成新的关系中字段两个表中的会合并在一起,数据记录会进行组合,比如第一个表中有3条记录,第二个表中有5条记录,两个表经过笛卡尔积操作后将一共会产生3*5=15 种数据记录。

    3.连接操作(JOIN):在表关系的笛卡尔积数据记录中,按照两个表中相应字段值的比较条件进行选择生成一个新的关系。其实就是将笛卡尔积后的数据记录进行筛选得到相应的数据,根据筛选方式不同,分为内连接(INNER JOIN),外连接 (OUTER JOIN),交叉连接(CROSS JOIN)。这些连接的基础都是笛卡尔积。

    二、查询操作

    1. 内连接查询:保留表关系中所有匹配的数据记录,舍弃不匹配的记录,注意,是只会保留符合匹配条件的记录,根据匹配条件分为:自然连接(NATURAL JOIN)、等值连接、不等连接。

    自然连接:在笛卡尔积的数据记录中,首先自动根据表关系中相同名称的字段进行记录匹配(即只保留两个同名的字段下值相同的这条记录),然后去除重复字段(重复的字段保留一个),使用关键字 NATURAL JOIN来进行自连接查询操作,自连接自动完成,无法指定连接条件。查询举例:

    等值连接:内连接查询中的等值连接,使用INNER JOIN...ON...的方式来实现,就是在关键字ON后面使用关系运算符“=”来指定等值条件,顾名思义,就是两个字段的值相等的条件,举例如下:

    如图中结果,等值连接相比自然连接,只是没有去掉重复的字段deptno。

    不等连接:使用INNER JOIN...ON...的方式来实现,就是在关键字ON后面可以使用>、<、>=、<=、!=这些运算符来指定不等值的条件,所以叫不等连接,举例说明:

    2. 外连接查询(OUTER JOIN):在表关系的笛卡尔数据记录中,不仅保留所有匹配的数据记录,而且还会保留部分不匹配的数据记录,按照保留不匹配条件数据记录的来源可分为:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN),外连接查询会返回操作表中至少一个表的所有数据记录。

    左外连接(LEFT JOIN):外连接查询中的左外连接,使用关键字 LEFT JOIN....ON....来实现,就是在笛卡尔积新关系中执行匹配条件时,除了保留满足ON关键字后条件的记录外,还会以关键字 LEFT JOIN左边的表为参考表,保留左边表中未匹配的所有记录。举例说明:

    右外连接(RIGHT JOIN):外连接查询中的右外连接,使用关键字 RIGHT JOIN....ON....来实现,就是在笛卡尔积新关系中执行匹配条件时,除了保留满足ON关键字后条件的记录外,还会以关键字 RIGHT JOIN右边的表为参考表,保留右边表中未匹配的所有记录。举例说明:

    全外连接(FULL JOIN):在表关系的笛卡尔积中,除了选择相匹配的数据记录,还会包含左右两边表中不匹配的所有数据记录,举例说明:

    3.交叉连接(CROSS JOIN):交叉连接,实际上就是表关系笛卡尔积后的没有经过条件筛选后所有数据记录,不需要任何匹配条件。

    以上为表的连接查询操作,主要分为内连接和外连接,用来进行多表查询。

  • 相关阅读:
    .net core入门
    编码之Base64编码
    C++ 实现十大排序算法
    C++11 智能指针
    Object Pool 对象池的C++11使用(转)
    mac pro 1.5T内存是如何实现的
    Linux C/C++开发
    mac Chrome 快捷键
    C++11多线程
    Java项目压力测试(待补)
  • 原文地址:https://www.cnblogs.com/hanszhao/p/9508855.html
Copyright © 2020-2023  润新知