数据库的左右连接和内连接_数据库各种连接的区别
大家好,又见面了,我是你们的朋友全栈君。
原英文文章链接:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 准备 表A:
-- 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';
表A数据:
表B数据:
下面是各种连接的韦恩图:
详细分析 1.INNER 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 INNER JOIN table_b B ON A.PK = B.PK;
查询结果:
2.LEFT JOIN (左连接) 左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,所谓的左边表其实就是指放在left 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;
查询结果:
3.RIGHT JOIN(右连接) 右连接正好是和左连接相反的,这里的右边也是相对right 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 RIGHT JOIN table_b B ON A.PK = B.PK;
查询结果:
4.OUTER 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 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;
查询结果:
5.LEFT JOIN EXCLUDING INNER JOIN(左连接不包含内连接) 这个查询是只查询左边表有的数据,共同有的也不查出来 韦恩图表示如下:
实现代码:
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
查询结果:
6.RIGHT JOIN EXCLUDING INNER 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 RIGHT JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL
查询结果:
7.OUTER JOIN EXCLUDING INNER JOIN(外连接不包含内连接) 意思就是查询左右表各自拥有的那部分数据 韦恩图表示如下:
实现代码:
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.cn/191698.html原文链接:https://javaforall.cn
相关文章
- 犀牛鸟硬核丨北大-腾讯联合实验室团队获数据库国际顶会VLDB最佳论文奖
- 【R语言】clusterProfilerf富集分析,物种注释数据库
- 内连接与外连接的区别是什么?_数据库外连接和内连接的区别
- java 连接sql server2008数据库配置
- 使用OCCI API连接Oracle数据库(occi连接oracle)
- MySQL存储过程:简化数据库操作(mysql存储过程)
- 指南:连接MySQL数据库的五步法(如何打开mysql数据库)
- MySQL数据库连接URL配置指南(mysqlurl配置)
- 数据库MySQL数据库:实现快速、高效的数据管理(使用mysql)
- 使用LINUX远程连接MYSQL数据库的方法(linux远程连接mysql)
- 数据库使用Oracle命令快速连接数据库(oracle命令连接)
- MySQL 5.5.8:提升数据库性能的利器(mysql5.5.8)
- MySQL数据库ID自增:实现自动追踪(mysql数据库id自增)
- MySQL数据库中的交叉连接技术(mysql交叉连接)
- 如何在Oracle数据库中创建服务名?(oracle创建服务名)
- 使用MSSQL连接MySQL数据库的步骤(mssql连接mysql)
- 修改修改Oracle数据库属主的注意事项(oracle属主)
- 学习如何使用Django连接MySQL数据库(django连接mysql)
- 深入MySQL数据库:解答你的疑问(mysql数据问号)
- Oracle数据库:系统资源占用分析(oracle占用资源)
- 如何使用MySQL查询指定时间段的数据?(mysql数据库时间查询)
- Connecting to MySQL: A StepbyStep Guide for Database Connection(mysql数据库连接)
- 网页连接sqlserver数据库实现丰富多样的功能(网页连sqlserver)
- 记录成功:使用MSSQL数据库登录的全过程(登录mssql数据库)
- Windows下的命令行连接MSSQL数据库指南(命令行连接mssql)
- 构建MySQL镜像网站:实现数据库一键部署(mysql 镜像网站)
- MSSQL数据库连接记录分析实践(mssql连接记录)
- C语言实现Oracle数据库连接技术(c oracle连接类)
- 使用JDBC简单调用Oracle数据库(jdbc调用oracle)
- 为数据库表列赋值Oracle篇(oracle为列赋值)
- 数据库Oracle跃居世界领先构建可靠的中标数据库(oracle 中标)
- 行Oracle数据库下使用Pipe行操作探索(oracle 中pipe)
- 探秘MySQL巨型数据挖掘一亿的数据库奥秘(mysql一亿的数据库)
- 用Java连接sqlserver数据库时候几个jar包的区别分析