加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2019-08-28 14:22:54 所属栏目:编程 来源:码志
导读:从业以来首要在做客户端,用到的数据库都是表布局较量简朴的 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)中有没有关联的数据。在左表中找到的关联数据列也会被一路返回。

(编辑:河北网)

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

热点阅读