数据库左连接、右连接、内连接、全连接笔记

数据库左连接、右连接、内连接、全连接笔记原英文文章链接 https www codeproject com Articles 33052 Visual Representati of SQL Joins 准备表 A auto generateddef a PKINT 10 NOTNULLPRIMA Va

-- auto-generated definition CREATE TABLE table_a ( PK INT(10) NOT NULL PRIMARY KEY, Value VARCHAR(25) NULL ) COMMENT '表A'; 

表B:

-- auto-generated definition CREATE TABLE table_b ( PK INT(10) NOT NULL PRIMARY KEY, Value VARCHAR(50) NULL ) COMMENT '表B'; 
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value FROM table_a A INNER JOIN table_b B ON A.PK = B.PK;
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value FROM table_a A LEFT JOIN table_b B ON A.PK = B.PK;
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value FROM table_a A RIGHT JOIN table_b B ON A.PK = B.PK;
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value FROM table_a A FULL JOIN table_b B ON A.PK = B.PK;

上面代码在mysql执行是报错的,因为mysql不支持全连接,只能用以下代码实现效果,含义是左连接+右连接+去重=全连接:

SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value FROM table_a A LEFT JOIN table_b B ON A.PK = B.PK UNION SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value FROM table_a A RIGHT JOIN table_b B ON A.PK = B.PK;
SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A LEFT JOIN Table_B B ON A.PK = B.PK WHERE B.PK IS NULL
SELECT A.PK AS A_PK, A.Value AS A_Value, B.PK AS B_PK, B.Value AS B_Value FROM Table_A A RIGHT JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL
SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A FULL OUTER JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL OR B.PK IS NULL

由于mysql不支持full join,只能通过下面代码模拟实现:

SELECT A.PK AS A_PK, A.Value AS A_Value, B.PK AS B_PK, B.Value AS B_Value FROM table_a A LEFT JOIN table_b B ON A.PK = B.PK WHERE B.PK IS NULL UNION ALL SELECT * FROM table_a A RIGHT JOIN table_b B ON A.PK = B.PK WHERE A.PK IS NULL;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225228.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:47
下一篇 2026年3月17日 上午9:48


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号