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

后端-内连接(INNER JOIN),左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)的区别

SQL 语句中的 内连接外连接左连接右连接 是常见的用于联合多张表的数据查询方式。它们的区别主要体现在如何处理在连接的表中没有匹配数据的记录。

1. 内连接(INNER JOIN)

内连接是最常见的一种连接方式,它返回两个表中满足连接条件的记录。如果某个表中的记录在另一个表中没有匹配项,那么这条记录不会出现在结果中。

语法:

SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;

示例:

假设有两个表:employees(员工表)和 departments(部门表),我们希望查询员工和他们所在部门的信息。

employees 表:

emp_idemp_namedept_id
1John10
2Jane20
3Alice10
4BobNULL

departments 表:

dept_iddept_name
10HR
20IT

查询所有有部门的员工及其部门信息:

SELECT e.emp_name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
JohnHR
JaneIT
AliceHR
  • 解释:内连接只返回两个表中 dept_id 匹配的记录,Bob 由于没有部门(dept_id 为 NULL)没有出现在结果中。

2. 外连接(OUTER JOIN)

外连接是一种包括左表和右表所有记录的连接方式。外连接分为 左外连接(LEFT OUTER JOIN)右外连接(RIGHT OUTER JOIN),两者主要区别在于返回的记录集不同。

语法:

SELECT columns FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column;

SELECT columns FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column;


3. 左外连接(LEFT JOIN 或 LEFT OUTER JOIN)

左外连接会返回左表(table1)中的所有记录,以及右表(table2)中与左表匹配的记录。如果右表中没有匹配项,左表的记录仍然会被返回,但右表的字段会显示为 NULL

示例:

继续使用 employeesdepartments 表,查询所有员工及其所在的部门(包括没有部门的员工)。

SELECT e.emp_name, d.dept_name FROM employees e LEFT JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
JohnHR
JaneIT
AliceHR
BobNULL
  • 解释:左外连接返回了所有员工的信息,包括 Bob。由于 Bob 没有部门信息,dept_name 返回了 NULL

4. 右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN)

右外连接与左外连接相似,但返回的是右表(table2)中的所有记录,以及左表(table1)中与右表匹配的记录。如果左表中没有匹配项,右表的记录仍然会被返回,左表的字段会显示为 NULL

示例:

同样查询所有部门及其员工的信息(包括没有员工的部门)。

SELECT e.emp_name, d.dept_name FROM employees e RIGHT JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
JohnHR
AliceHR
JaneIT
NULLIT
  • 解释:右外连接返回了所有部门的信息。IT 部门没有员工(虽然有 Jane),但由于 LEFT JOIN 结果中没有未匹配的记录,所以返回了 NULL

5. 总结和区别

  • 内连接(INNER JOIN):只返回两个表中匹配的记录,没有匹配的记录会被丢弃。

  • 外连接(OUTER JOIN)

    • 左外连接(LEFT JOIN):返回左表所有记录和右表中匹配的记录,如果右表没有匹配,右表字段为 NULL
    • 右外连接(RIGHT JOIN):返回右表所有记录和左表中匹配的记录,如果左表没有匹配,左表字段为 NULL
  • 内连接 只返回两个表中有交集的部分,而 外连接 返回一个表的所有记录,另一个表的匹配记录,未匹配的地方会用 NULL 填充。


http://www.kler.cn/a/389173.html

相关文章:

  • [运维][Nginx]Nginx学习(1/5)--Nginx基础
  • 【vue2.0入门】vue基本语法
  • python: postgreSQL using psycopg2 or psycopg
  • 5G时代的关键元件:射频微波MLCCs市场前景广阔
  • RS®SZM 倍频器
  • ubuntu cmake CPack将第三方库进行打包
  • 【Vue】-组件开发-一个树组件
  • jpeg2000dataset.cpp:40:10: fatal error:
  • 【网络安全】Java线程安全及非线程安全
  • 使用GPT-SoVITS训练语音模型
  • 浅谈C++ MFC
  • iview图片放大缩小旋转预览功能
  • 【eNSP】企业网络架构实验——vlan间的路由通信(三)
  • 【万字详解】如何在微信小程序的 Taro 框架中设置静态图片 assets/image 的 Base64 转换上限值
  • IntelliJ IDEA超详细下载安装教程(附安装包)
  • 计算机网络(3)
  • 【北京迅为】itop-3588开发板摄像头使用手册Android12 双摄方案
  • Day42 | 动态规划 :选或不选 打家劫舍打家劫舍II
  • java基础面试题六集合框架
  • VisionPro —— CogSobelEdgeTool边缘提取工具
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.5-4.6
  • 阿里云centos7.9服务器磁盘挂载,切换服务路径
  • flutter 发版的时候设置版本号
  • Linux -- 进程初印象
  • iOS 18.2 六大新功能外媒實測|ChatGPT進化版SIRI、自製Genmoji
  • 紫光展锐携手上赞随身Wi-Fi,让5G触手可及