加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

图解MySQL里的各种 JOIN,看完不懂来找我!

发布时间:2019-08-27 19:23:07 所属栏目:MySql教程 来源:码志
导读:副标题#e# 从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付。现在偶尔需要到后台的 SQL Server 里追查一些数据问题,就显得有点捉襟见肘了,特别是各种 JOIN,有时候傻傻分不清楚,于是索性
副标题[/!--empirenews.page--]

从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付。现在偶尔需要到后台的 SQL Server 里追查一些数据问题,就显得有点捉襟见肘了,特别是各种 JOIN,有时候傻傻分不清楚,于是索性弄明白并做个记录。

图解MySQL里的各种 JOIN,看完不懂来找我!

前言

在各种问答社区里谈及 SQL 里的各种 JOIN 之间的区别时,最被广为引用的是 CodeProject 上 C.L. Moffatt 的文章 Visual Representation of SQL Joins,他确实讲得简单明了,使用文氏图来帮助理解,效果明显。本文将沿用他的讲解方式,稍有演绎,可以视为该文较为粗糙的中译版。

约定

下文将使用两个数据库表 Table_A 和 Table_B 来进行示例讲解,其结构与数据分别如下:

  1. mysql> SELECT * FROM Table_A ORDER BY PK ASC; 
  2. +----+---------+ 
  3. | PK | Value   | 
  4. +----+---------+ 
  5. |  1 | both ab | 
  6. |  2 | only a  | 
  7. +----+---------+ 
  8. 2 rows in set (0.00 sec) 
  9.  
  10. mysql> SELECT * from Table_B ORDER BY PK ASC; 
  11. +----+---------+ 
  12. | PK | Value   | 
  13. +----+---------+ 
  14. |  1 | both ab | 
  15. |  3 | only b  | 
  16. +----+---------+ 
  17. 2 rows in set (0.00 sec) 

其中 PK 为 1 的记录在 Table_A 和 Table_B 中都有,2 为 Table_A 特有,3 为 Table_B 特有。

常用的 JOIN

1、INNER JOIN

INNER JOIN 一般被译作内连接。内连接查询能将左表(表 A)和右表(表 B)中能关联起来的数据连接后返回。

文氏图:

图解MySQL里的各种 JOIN,看完不懂来找我!

INNER JOIN

示例查询:

  1. SELECT A.PK AS A_PK, B.PK AS B_PK, 
  2.        A.Value AS A_Value, B.Value AS B_Value 
  3. FROM Table_A A 
  4. INNER JOIN Table_B B 
  5. ON A.PK = B.PK; 

查询结果:

  1. +------+------+---------+---------+ 
  2. | A_PK | B_PK | A_Value | B_Value | 
  3. +------+------+---------+---------+ 
  4. |    1 |    1 | both ab | both ab | 
  5. +------+------+---------+---------+ 
  6. 1 row in set (0.00 sec) 

注:其中 A 为 Table_A 的别名,B 为 Table_B 的别名,下同。

2、LEFT JOIN

LEFT JOIN 一般被译作左连接,也写作 LEFT OUTER JOIN。左连接查询会返回左表(表 A)中所有记录,不管右表(表 B)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。

文氏图:

图解MySQL里的各种 JOIN,看完不懂来找我!


LEFT JOIN

示例查询:

  1. SELECT A.PK AS A_PK, B.PK AS B_PK, 
  2.        A.Value AS A_Value, B.Value AS B_Value 
  3. FROM Table_A A 
  4. LEFT JOIN Table_B B 
  5. ON A.PK = B.PK; 

查询结果:

  1. +------+------+---------+---------+ 
  2. | A_PK | B_PK | A_Value | B_Value | 
  3. +------+------+---------+---------+ 
  4. |    1 |    1 | both ab | both ba | 
  5. |    2 | NULL | only a  | NULL    | 
  6. +------+------+---------+---------+ 
  7. 2 rows in set (0.00 sec) 

3、RIGHT JOIN

RIGHT JOIN 一般被译作右连接,也写作 RIGHT OUTER JOIN。右连接查询会返回右表(表 B)中所有记录,不管左表(表 A)中有没有关联的数据。在左表中找到的关联数据列也会被一起返回。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读