当前位置: 首页 > news >正文

【Java 开发日记】SQL 语句左连接右连接内连接如何使用,区别是什么?

目录

核心概念

内连接 (INNER JOIN)

左外连接 (LEFT JOIN / LEFT OUTER JOIN)

右外连接 (RIGHT JOIN / RIGHT OUTER JOIN)

全外连接 (FULL OUTER JOIN)

总结与区别

记忆技巧


核心概念

连接(JOIN)用于根据两个或多个表中的列之间的关系,从这些表中查询数据。为了更直观地理解,我们假设有两个表:

员工表 (Employees)

employee_id

name

department_id

1

张三

101

2

李四

102

3

王五

NULL

部门表 (Departments)

department_id

department_name

101

技术部

102

销售部

103

市场部

内连接 (INNER JOIN)

定义:只返回两个表中连接条件匹配的记录。

结果:两个表的交集部分。

使用场景:当你只想查看在两边表中都有对应信息的记录时。例如,查询所有有部门的员工及其部门信息。

SQL语句

SELECT e.name,d.department_name
FROM Employees e
INNER JOIN Departments d ON e.department_id = d.department_id;

查询结果

name

department_name

张三

技术部

李四

销售部

注意:员工“王五”的department_id为NULL,在部门表中找不到匹配项,所以没有出现。部门“市场部”在员工表中没有对应的员工,所以也没有出现。

左外连接 (LEFT JOIN / LEFT OUTER JOIN)

定义:返回左表 (FROM子句中的表) 的所有记录,以及右表中连接条件匹配的记录。如果右表没有匹配的记录,则结果集中右表的部分返回NULL。

结果:左表的全集 + 右表的匹配部分。

使用场景:当你需要左表的所有记录,无论它们在右表中是否有对应项。例如,列出所有员工,并显示他们所在的部门(即使某些员工没有部门)。

SQL语句

SELECT e.name,d.department_name
FROM Employees e
LEFT JOIN Departments d ON e.department_id = d.department_id;

查询结果

name

department_name

张三

技术部

李四

销售部

王五

NULL

注意:员工“王五”被包含在结果中,但因为他不属于任何部门,所以department_name为NULL。

右外连接 (RIGHT JOIN / RIGHT OUTER JOIN)

定义:与左连接相反。返回右表 (JOIN子句中的表) 的所有记录,以及左表中连接条件匹配的记录。如果左表没有匹配的记录,则结果集中左表的部分返回NULL。

结果:右表的全集 + 左表的匹配部分。

使用场景:当你需要右表的所有记录,无论它们在左表中是否有对应项。例如,列出所有部门,并显示部门里的员工(即使某些部门没有员工)。

SQL语句

SELECT e.name,d.department_name
FROM Employees e
RIGHT JOIN Departments d ON e.department_id = d.department_id;

查询结果

name

department_name

张三

技术部

李四

销售部

NULL

市场部

注意:部门“市场部”被包含在结果中,但因为该部门没有员工,所以name为NULL。

全外连接 (FULL OUTER JOIN)

定义:返回左表和右表中的所有记录。当某一行在另一个表中没有匹配行时,另一个表的部分将返回NULL。如果表之间有匹配的行,则返回匹配行。

结果:两个表的并集

使用场景:当你需要看到两个表的所有数据,无论它们是否匹配。例如,生成一个包含所有员工和所有部门的完整列表。

SQL语句

-- 注意:MySQL不支持FULL OUTER JOIN,但可用LEFT JOIN和RIGHT JOIN的UNION来实现
SELECT e.name,d.department_name
FROM Employees e
LEFT JOIN Departments d ON e.department_id = d.department_idUNIONSELECT e.name,d.department_name
FROM Employees e
RIGHT JOIN Departments d ON e.department_id = d.department_id;

查询结果

name

department_name

张三

技术部

李四

销售部

王五

NULL

NULL

市场部

注意:这个结果包含了左连接和右连接的所有记录。

总结与区别

连接类型

关键字

描述

结果集(基于示例)

内连接

INNER JOIN

只返回两个表匹配的记录。

张三(技术部), 李四(销售部)

左连接

LEFT JOIN

返回左表全部记录 + 右表匹配的记录。

张三(技术部), 李四(销售部), 王五(NULL)

右连接

RIGHT JOIN

返回右表全部记录 + 左表匹配的记录。

张三(技术部), 李四(销售部), NULL(市场部)

全外连接

FULL OUTER JOIN

返回左右两表全部记录。

张三(技术部), 李四(销售部), 王五(NULL), NULL(市场部)

记忆技巧

可以借助韦恩图 (Venn Diagram) 来记忆:

如果小假的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!

http://www.dtcms.com/a/615111.html

相关文章:

  • 深圳做自适应网站公司网站开发销售怎么做
  • 微电影网站源码xiazai网站购买外链
  • 盐城做网站需要多少钱2023年新开市场动态
  • 投融网站建设方案网站建设要考虑哪些内容
  • 怎么做网站vs2015网站开发实例
  • 数字波束赋型及其数学原理介绍
  • 站长网站模板百度导航地图下载
  • 操作系统?进程(下)!!!
  • “忆境构建师”智能记忆辅助平台 - 产品介绍【具身记忆的软体】
  • 万网 填写网站备案信息西安网站排名推广
  • flash同视频做网站重庆网站搜索引擎seo
  • 网站会员管理一鸣东莞网站建设公司
  • Labview实用03:Labview中事件回调注册与使用
  • 智能制造——解读112页汽车制造业大数据项目之产品主数据蓝图方案【附全文阅读】
  • 如何做优化网站的原创性文章群晖nas做网站性能
  • 龙岗做网站wordpress 4.3.1 下载
  • 关于时间戳
  • 分享一个操作系统一键优化脚本
  • 网站专属定制高端网站建设个人网站建设方案
  • 广东省省考备考(第一百五十一天11.15)——言语、判断推理(强化训练)
  • Android开发-java版:Material Design
  • Python求解随机矩阵的特征值和特征向量
  • 做珠宝商城网站做网站流程 优帮云
  • 定制类做网站多少钱wordpress修改关键字
  • 免费资料网站网址下载锦州建设信息网站
  • 驻马店网站开发公司单页网站程序
  • 个人博客网站设计钢筋网片价格
  • C语言编译计算器 | 基于C语言的计算器编程与优化实现
  • 为什么用Vue做网站的很少网站开发重点难点
  • 现在还有做系统的网站吗怎么才能免费建网站