Code前端首页关于Code前端联系我们

最全的SQL JOIN图解,读完本文后,您再也不用担心向左或向右

terry 2年前 (2023-09-26) 阅读数 56 #数据库

除了交叉推杆和自推杆情况之外,我将讨论从两个相关表中获取数据的七种方法。七个 JOIN 的示例如下:

  • INNER JOIN(内)
  • LEFT JOIN(左连接)
  • RIGHT JOIN(右连接)
  • OUTER JOIN OUTER JOIN CLUDIN INNER JOIN(左连接不包括内连接)连接结果)
  • RIGHT JOIN EXCLUDING INNER JOIN(右连接排除内连接结果)
  • OUTER JOIN EXCLUDING INNER JOIN(外连接排除内连接结果) item 在描述中我认为 5、6 和 7 为 LEFT EXCLUDING INNER JOIN,RIGHT EXCLUDING INNER JOIN,OUTER EXCLUDING INNER JOIN 解释一下

    有些人可能有不同的看法:5、6、7 并不是真正的两张表。但为了方便理解,我还是把这些当作JOINs,因为你可以在任何查询中使用这些JOINs(不包括一些带有WHERE条件的记录)

    INNER JOIN(内连接)

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    这是最简单的,最容易懂了,而且最常用的是JOIN法。内部查询返回表 A 和表 B 中所有匹配行的结果。 SQL示例如下:

    SELECT <select_list> FROM Table_A AINNER JOIN Table_B BON A.Key = B.Key

    LEFT JOIN(左连接)

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    LFET JOIN 查询返回表A中的所有记录,无论表B中是否有匹配的记录。它返回所有匹配的记录和表B返回(没有匹配的当然被标记为空)。 SQL示例如下:

    SELECT <select_list>FROM Table_A ALEFT JOIN Table_B BON A.Key = B.Key

    RIGHT JOIN(右连接)

    与LEFT JOIN相反。 RIGHT JOIN 查询将返回表 B 中的所有记录,无论表 A 中是否有匹配的记录。它返回表A中所有匹配的记录(那些没有匹配的记录当然被标记为空)。 SQL 示例如下:

    SELECT <select_list>FROM Table_A ARIGHT JOIN Table_B BON A.Key = B.Key

    OUTER JOIN(外连接)

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    OUTER JOIN 也可以认为是 FULL OUTER JOIN 或 FULL JOIN。它返回两个表中的所有行。左表A匹配右表B,右表B也匹配左表A(不匹配则显示0)。OUTER JOIN 一般写法如下:

    SELECT <select_list>FROM Table_A AFULL OUTER JOIN Table_B BON A.Key = B.Key

    LEFT 排除 JOIN

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    它返回表 A 中不在表 B 中的所有行。如上所述,它将返回表 B 中不在表 A 中的所有行。 SQL 示例如下:

    SELECT <select_list>FROM Table_A ARIGHT JOIN Table_B BON A.Key = B.KeyWHERE A.Key IS NULL

    OUTER Exclude JOIN

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    Outer Exclude JOIN 将返回表 A 和表 B 中所有不匹配的行。 。我没有遇到必须使用它的情况,但其他JOIN使用它的频率更高。 SQL示例如下:

    SELECT <select_list>FROM Table_A AFULL OUTER JOIN Table_B BON A.Key = B.KeyWHERE A.Key IS NULL OR B.Key IS NULL
    示例

    以MySQL为例。准备的数据如下。为了更容易理解,数据是比较规律的数据,7、8、9是teacher_card表特有的数据

    INNER JOIN

    SELECT t.tid, t.name, tc.tid AS tcid, tc.descriptionFROM teacher tINNER JOIN teacher_card tcON t.tid = tc.tid

    INNER关键字可以省略

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    lEFT JOIN

    SELECT t.tid, t.name, tc.tid AS tcid, tc.descriptionFROM teacher tLEFT OUTER JOIN teacher_card tcON t.tid = tc.tid

    OUTER 关键字不能写成 RIGHT JOIN

    SELECT t.tid, t.name, tc.tid AS tcid, tc.descriptionFROM teacher tRIGHT OUTER JOIN teacher_card tcON t.tid = tc.tid

    OUTER 关键字不能写成

    SQL JOIN最全图解,看完了不再纠结向左还是向右

    OUTER JOIN

    SELECT t.tid, t.name, tc.tid AS tcid, tc.descriptionFROM teacher tFULL OUTER JOIN teacher_card tcON t.tid = tc.tid

    这样写是不可能的。 MySQL 不完全支持 OUTER JOIN。可以重写为以下形式:

  • 版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门