后端-内连接(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.mzph.cn/diannao/59474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Orange Pi 设备】window11主机下使用VNC可视化控制RK3566

【Orange Pi 设备】window11主机下使用VNC可视化控制RK3566 前言VNC连接搭建(WiFi模式)Orange Pi 3B操作本地主机操作 总结 XFCE桌面VNC连接后灰屏问题,可以优先尝试本文的方式 前言 Orange Pi 3B 是一款基于瑞芯微 RK3566 处理器的单板计算机,旨在为开…

Go 语言的函数调用

1. 引言 Go 语言的函数调用是其核心特性之一,Go 的函数调用方式既简洁又强大。理解 Go 语言中的函数调用机制不仅有助于编写更高效的代码,也能帮助开发者深入了解 Go 的并发模型和内存管理。 在这篇博客中,我们将详细探讨 Go 语言的函数调用机制,了解函数的声明、调用、参…

【VUE+DRF】案例升级

1、功能完善(简易版) 1.1 后端API校验 基于drf的认证组件实现只有登录之后才能查看 utils/auth.py from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import APIException, AuthenticationFailed from…

背靠背MOS管-锂电池充放电控制详解

目录: 1、概述 2、外接适配器 3、使用锂电池 4、电池检测回路 1、概述 本锂电池充放电控制电路采用 TP4055 作为电池 BAT 的充电控制,如下图1.1绿色框所示。 TP4055 引脚功能描述: 1CHRG开漏输出的充电状态指示引脚,需要上…

嵌入式软件八股文

1.指针的大小是固定的,和指针的类型没有关系 只与编译器有关,32位系统指针大小为8个字节,x64一般为64位系统,指针大小一般为4个字节。 2.sizeof()和strlen() sizeof()计算所占内存的大小,可以计算int float大小 strlen()计算的…

美畅物联丨物联网通信新纪元:Cat.1与5G RedCap的差异化应用

​ 在物联网(IoT)迅猛发展的时代,通信标准对物联网设备的连接性、性能和适用性有着极为关键的作用。小编在《美畅物联丨Cat.1与NB-IoT:物联网设备的通信标准对比》中提到Cat.1与NB-IoT的对比区别,后来就有小伙伴问&…

单表查询题库

1. 查看course表结构的SQL命令是什么? A. SELECT * FROM exam.course; B. \d exam.course; C. \d exam.course; D. DESCRIBE exam.course; 答案:C 2. 使用哪个SQL命令可以查看exam.course表中的所有数据? A. SELECT * FROM e…

vue用jenkins 打包项目项目关闭eslint检查

问题描述:创建vue脚手架项目后,使用jenkins 打包项目,出现如下图所示错误,显示错误来源于eslint检测。 解决方法:在根目录下找到vue.config.js文件,添加lintOnSave: false以关闭eslint检测,项目…

序列中删除指定数字【四种解法】

文章目录 解法1:另辟空间法解法2:覆盖法解法3:覆盖法(进阶版)解法4:异或取巧法 题目:有一个整数序列(可能存在重复的整数),编写程序删除序列中指定的某一个整…

【p2p、分布式,区块链笔记 Torrent】WebTorrent的add和seed函数

在【p2p、分布式,区块链笔记 Torrent】WebTorrent的上传和下载界面的示例中,主要通过WebTorrent类的add和seed函数实现相关功能。这两个函数都返回一个Torrent类对象的实例。 seed函数 import createTorrent, { parseInput } from create-torrent // &…

【07】Maven项目多环境打包配置

(1)Web项目使用Maven进行多模块划分开发之后,面临一个问题,即如何加载不同环境的配置文件打包发布到不同的环境中? (2)不同的环境有开发环境、测试环境、线上生产环境等。 (3&#x…

机器学习—前向传播的一般实现

可以写一个函数来实现一个密集的层,那是神经网络的单层,所以定义稠密函数,它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子,把所有这些权重向量堆叠成一个矩阵,wnp.array([[1,-3,5][2,4,…

濮良贵《机械设计》第十版课后习题答案全解PDF电子版

《机械设计》(第十版)是“十二五”普通高等教育本科国家级规划教材, 是在《机械设计》(第九版)的基础上修订而成的。本次修订主要做了以下几项工作: 1. 内容的适当更新——自本书第九版出版以来, 机械工程及相关领域的新理论、新技术和新标准…

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式,如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码,而 Excel 默认使用的是 ANSI 编码打开,就可能出现乱码。例如,许多从网络应用程序或非 Windows 系统生成的 …

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》,杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行:科技驱动共享出行未来 曹操…

解析 MySQL 数据库容量统计、存储限制与优化技巧

管理 MySQL 数据库时,了解数据库中的数据量和存储占用情况是非常重要的,尤其是在面对大规模数据时。无论是为了优化数据库性能,还是为了进行容量规划,准确地统计数据库的容量可以帮助我们做出更好的决策。mysql的客户端工具是Navi…

【研究生必备】如何利用AI论文生成器免费提升效率?

在研究生阶段,写论文往往是学业中最具挑战性的部分之一。 面对繁重的文献阅读、复杂的分析和紧迫的时间限制,很多同学都感到压力倍增。不过,随着科技的发展,AI论文生成器的出现为我们提供了一种全新的解决方案。今天,…

Android无限层扩展多级recyclerview列表+实时搜索弹窗

业务逻辑: 点击选择,弹出弹窗,列表数据由后台提供,不限层级,可叠加无限层子级; 点击item展开收起,点击尾部icon单选选中,点击[确定]为最终选中,收起弹窗; 搜索…

位运算的使用与计算机组成的底层计算(java版)

目录 1. 求int类型数字的二进制2. 特殊值展示3. 心得 1. 求int类型数字的二进制 我们可以用位运算的与和左移去求 public class Lesson01 {public static void print(int num){for(int i 31; i >0; i--){System.out.print((num & (1 << i)) 0 ? "0&quo…

写作 | 人工智能在师生教学场景中的应用前景

正文 本文讨论人工智能在师生教学场景中的应用前景。在开展论述前&#xff0c;首先需要明确一些概念。 第一&#xff0c;什么是人工智能&#xff1f;人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c; 字面意义&#xff0c;即人工制作的智慧能力。这种智慧…