图解SQL里的各种 JOIN,看完不懂来找我!(二)

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

4、FULL OUTER JOIN

FULL OUTER JOIN 一般被译作外连接、全连接,实际查询语句中可以写作 FULL OUTER JOIN 或 FULL JOIN。外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。

文氏图:

63.jpg

FULL OUTER JOIN示例查询:SELECT A.PK AS A_PK, B.PK AS B_PK,
      A.Value AS A_Value, B.Value AS B_Value
FROM Table_A A
FULLOUTERJOIN Table_B B
ON A.PK = B.PK;

查询结果:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL OUTER JOIN Table_B B
ON A.PK = B.PK'
at line 4
注:我当前示例使用的 MySQL 不支持 FULL OUTER JOIN。应当返回的结果(使用 UNION 模拟):mysql> SELECT *
   -> FROM Table_A
   -> LEFT JOIN Table_B
   -> ON Table_A.PK = Table_B.PK
   -> UNION ALL
   -> SELECT *
   -> FROM Table_A
   -> RIGHT JOIN Table_B
   -> ON Table_A.PK = Table_B.PK
   -> WHERE Table_A.PK IS NULL;
+------+---------+------+---------+
| PK   | Value   | PK   | Value   |
+------+---------+------+---------+
|    1 | both ab |    1 | both ba |
|    2 | only a  | NULL | NULL    |
| NULL | NULL    |    3 | only b  |
+------+---------+------+---------+
3 rows inset (0.00 sec)


小结

以上四种,就是 SQL 里常见 JOIN 的种类和概念了,看一下它们的合影:

64.jpg

有没有感觉少了些什么,学数学集合时完全不止这几种情况?确实如此,继续看。


延伸用法

1、LEFT JOIN EXCLUDING INNER JOIN

返回左表有但右表没有关联数据的记录集。

文氏图:

65.jpg

LEFT JOIN EXCLUDING INNER JOIN

示例查询:

SELECT A.PK AS A_PK, B.PK AS B_PK,
      A.Value AS A_Value, B.Value AS B_Value
FROM Table_A A
LEFTJOIN Table_B B
ON A.PK = B.PK
WHERE B.PK ISNULL;
查询结果:

+------+------+---------+---------+
| A_PK | B_PK | A_Value | B_Value |
+------+------+---------+---------+
|    2 | NULL | only a  | NULL    |
+------+------+---------+---------+
1 row inset (0.01 sec)


2、RIGHT JOIN EXCLUDING INNER JOIN

返回右表有但左表没有关联数据的记录集。

文氏图:

66.jpg

RIGHT JOIN EXCLUDING INNER JOIN

示例查询:

SELECT A.PK AS A_PK, B.PK AS B_PK,
      A.Value AS A_Value, B.Value AS B_Value
FROM Table_A A
RIGHTJOIN Table_B B
ON A.PK = B.PK
WHERE A.PK ISNULL;

查询结果:

+------+------+---------+---------+
| A_PK | B_PK | A_Value | B_Value |
+------+------+---------+---------+
| NULL |    3 | NULL    | only b  |
+------+------+---------+---------+
1 row inset (0.00 sec)


相关文章
|
4月前
|
SQL 关系型数据库 MySQL
SQL FULL OUTER JOIN 关键字
SQL FULL OUTER JOIN 关键字
48 2
|
14天前
|
SQL 分布式计算 Java
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
29 3
|
2月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `<rest>` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
48 0
|
2月前
|
SQL 存储 数据挖掘
"SQL JOIN大揭秘:解锁多表联合查询的终极奥义,从内到外,左至右,全连接让你数据世界畅通无阻!"
【8月更文挑战第31天】在数据库领域,数据常分散在多个表中,而SQL JOIN操作如同桥梁,连接这些孤岛,使数据自由流动,编织成复杂的信息网络。本文通过对比内连接、左连接、右连接和全连接的不同类型,并结合示例代码,展示SQL JOIN的强大功能。掌握JOIN技术不仅能高效查询数据,更是数据分析和数据库管理的关键技能。
73 0
|
3月前
|
JSON 数据格式 SQL
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
|
3月前
|
SQL
SQL FULL OUTER JOIN 关键字
【7月更文挑战第17天】SQL FULL OUTER JOIN 关键字。
37 6
|
3月前
|
SQL
SQL INNER JOIN 关键字
【7月更文挑战第17天】SQL INNER JOIN 关键字。
38 5
|
3月前
|
SQL 数据库
SQL LEFT JOIN 关键字
【7月更文挑战第17天】SQL LEFT JOIN 关键字。
31 4
|
3月前
|
SQL
SQL JOIN
【7月更文挑战第17天】SQL JOIN。
31 3
|
3月前
|
SQL 数据库
SQL RIGHT JOIN 关键字
【7月更文挑战第17天】SQL RIGHT JOIN 关键字。
36 2