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

INNER JOIN、LEFT JOIN 和 RIGHT JOIN有什么区别?什么是自连接?

INNER JOINLEFT JOINRIGHT JOIN 都是多表连接的不同方式,它们的主要区别在于它们如何处理表之间不匹配的数据。下面分别介绍它们的区别。


目录

一.多表连接查询

INNER JOIN(内连接)

LEFT JOIN(左连接)

RIGHT JOIN(右连接)

二.区别

三.自连接


一.多表连接查询

▐ INNER JOIN(内连接)

当你在使用 JOIN 时不明确指定是 LEFT JOIN 还是 RIGHT JOIN,SQL 默认会执行 INNER JOIN,即内连接。

  • 工作原理:只返回在两个表中都有匹配记录的行。如果某一行在其中一个表中没有匹配的记录,它将不会出现在结果集中。
  • 特点:只返回匹配的记录

例子:

  • Product表

    product_idproduct_name
    1Laptop
    2Smartphone
    3Tablet
  • Sales表

    sale_idproduct_idyearprice
    1120231000
    222023800
  • INNER JOIN查询SQL语句

    SELECT Product.product_name, Sales.year, Sales.price 
    FROM Product 
    INNER JOIN Sales 
    ON Product.product_id = Sales.product_id;
  • 结果

    product_nameyearprice
    Laptop20231000
    Smartphone2023800

注意Tablet 没有出现在结果中,因为它在 Sales 表中没有匹配的销售记录。


▐ LEFT JOIN(左连接)

  • 工作原理:返回左表的所有记录,即使右表中没有匹配的记录。如果右表中没有对应的行,结果中的右表字段将会是 NULL
  • 特点:返回左表的所有记录,以及右表中匹配的数据。

例子:

  • LEFT JOIN查询SQL语句

    SELECT Product.product_name, Sales.year, Sales.price 
    FROM Product 
    LEFT JOIN Sales 
    ON Product.product_id = Sales.product_id;
  • 结果

    product_nameyearprice
    Laptop20231000
    Smartphone2023800
    TabletNULLNULL

注意Tablet 出现在结果中,但它在 Sales 表中没有对应的销售记录,因此 yearprice 显示为 NULL


▐ RIGHT JOIN(右连接)

  • 工作原理:返回右表的所有记录,即使左表中没有匹配的记录。如果左表中没有对应的行,结果中的左表字段将会是 NULL
  • 特点:返回右表的所有记录,以及左表中匹配的数据。

例子:

  • RIGHT JOIN查询SQL语句

    SELECT Product.product_name, Sales.year, Sales.price 
    FROM Product 
    RIGHT JOIN Sales 
    ON Product.product_id = Sales.product_id;
  • 结果

    product_nameyearprice
    Laptop20231000
    Smartphone2023800

注意:这个例子中的 RIGHT JOININNER JOIN 的结果相同,因为 Sales 表中的所有 product_idProduct 表中都有匹配项。如果 Sales 表中有多余的记录,RIGHT JOIN 会包含它们,且 Product 表的字段为 NULL


二.区别

JOIN 类型描述结果返回的数据
INNER JOIN只返回两个表中都存在匹配数据的记录。仅匹配的行
LEFT JOIN返回左表的所有数据,即使右表中没有匹配的记录,右表的列会为 NULL左表的所有行
RIGHT JOIN返回右表的所有数据,即使左表中没有匹配的记录,左表的列会为 NULL右表的所有行
  • INNER JOIN:左表和右表中都匹配的部分。
  • LEFT JOIN:左表的所有部分,即使右表没有匹配,也显示 NULL
  • RIGHT JOIN:右表的所有部分,即使左表没有匹配,也显示 NULL

选择哪种 JOIN 方式取决于希望在查询中保留哪些表的数据。如果想要保留所有的左表数据,使用 LEFT JOIN;如果想要保留所有右表数据,使用 RIGHT JOIN;如果只想要两者都有匹配的数据,使用 INNER JOIN


三.自连接

平常可能还会用到自连接,就像下题这样,我们需要在这个表中对比不同行的数据,就需要使用自连接

就像这里,为这个表使用俩个别名,通过 join 来完成

SELECTW1.id
FROM Weather W1
JOINWeather W2
ONDATEDIFF(W1.recordDate, W2.recordDate) = 1
WHEREW1.Temperature > W2.Temperature



 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

相关文章:

INNER JOIN、LEFT JOIN 和 RIGHT JOIN有什么区别?什么是自连接?

INNER JOIN、LEFT JOIN 和 RIGHT JOIN 都是多表连接的不同方式,它们的主要区别在于它们如何处理表之间不匹配的数据。下面分别介绍它们的区别。 目录 一.多表连接查询 INNER JOIN(内连接) LEFT JOIN(左连接) RIGHT…...

原型模式具体和直接调用构造函数创建实例的区别

原型模式与直接调用构造函数创建实例的区别主要在于创建对象的方式和使用场景。让我们一步一步来理解。 直接调用构造函数创建实例 这是我们通常使用的创建对象的方法。通过调用类的构造函数,传入必要的参数来初始化对象。每次都要通过构造函数为对象设置所有初始值…...

MySQL 数据备份与恢复指南

本文将介绍如何通过命令行对 MySQL 数据库进行备份与恢复操作,适用于日常开发和生产环境中的数据管理需求。 1. MySQL 数据备份 MySQL 提供了 mysqldump 工具来执行数据库的备份操作,可以备份单个数据库、多个数据库或整个数据库实例。 1.1 备份单个数…...

NGINX 保护 Web 应用安全之基于 IP 地址的访问

根据客户端的 IP 地址控制访问 使用 HTTP 或 stream 访问模块控制对受保护资源的访问: location /admin/ { deny 10.0.0.1; allow 10.0.0.0/20; allow 2001:0db8::/32; deny all; } } 给定的 location 代码块允许来自 10.0.0.0/20 中的任何 IPv4 地址访问&#xf…...

数据结构——顺序表的基本操作

前言 介绍 🍃数据结构专区:数据结构 参考 该部分知识参考于《数据结构(C语言版 第2版)》24~28页 补充 此处的顺序表创建是课本中采用了定义方法为SqList Q来创建,并没有使用顺序表指针的方法,具体两个…...

智能去毛刺:2D视觉引导机器人如何重塑制造业未来

机器人技术已经深入到各个工业领域中,为制造业带来了前所未有的变革。其中,2D视觉引导机器人技术以其精准、高效的特点,在去毛刺工艺中发挥着越来越重要的作用。本文将为您介绍2D视觉引导机器人技术的基本原理及其在去毛刺工艺中的应用&#…...

计算机系统的层次

目录 计算机系统的层次ISA(指令集体系结构) 计算机系统的层次 计算机硬件是基础指令集体系结构:将硬件的功能封装从指令供软件使用操作系统:提供人机交互界面、提供服务功能的内核例程语言处理系统: 语言处理程序&…...

一起搭WPF架构之LiveCharts.Wpf的简单了解与安装

一起搭WPF架构之LiveCharts.Wpf的简单了解与安装 前言LiveCharts.Wpf介绍LiveCharts.Wpf的安装总结 前言 根据项目需求,我单独留了一个界面用于进行数据分析。数据分析的内容考虑是采用图表的形式将SQLite数据库中存储的数据进行绘制成图,以便数据分析。…...

深度学习杂乱知识

阿达玛乘积(Hadamard Product)详解 1. 定义: 阿达玛乘积(Hadamard Product),又称为元素乘积或逐元素乘积,是指对两个维度相同的矩阵进行逐元素相乘的操作。 假设我们有两个维度相同的矩阵 ( …...

本地编译运行Thingsboard-gateway之python版本——modbus数据采集

1、ideal 我用的是2020版本,这个关系不大,随便 Thingsboard-gateway之python版本源码拉取(老版本是java写的,新版都是python写的) 地址:git clone https://github.com/thingsboard/thingsboard-gateway.git…...

京东笔试题

和谐敏感词 🔗 题目地址 🎉 模拟 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String s scanner.next();String[] words new String[…...

URP学习(一)

URP是unity出的比较简单的可供改造引擎渲染管线的流程。能实现用较低的代价消耗实现较好的效果。 现记录学习: 一.如何设置URP关键 这步结束后材质会被替换 加package Create/Rendering/URP Universal Rendering Setting设置为urp 材质也需要urp目录下的 几种…...

Linux中修改和查看Redis的内存大小

目录 一:修改redis内存大小1. 编辑配置文件2. 在命令行修改 二:查看redis内存大小1. get maxmemory2. info memory 一:修改redis内存大小 1. 编辑配置文件 sudo vim /etc/redis/redis.conf maxmemory 300MB1、Redis可用内存大小只能是整数&…...

uniapp中的页面跳转

1. uni.navigateTo用于跳转到应用内的某个非tabBar页面,并且会保留当前页面,将其推入页面栈中。 uni.navigateTo({url: path/to/page // 替换为你要跳转的页面路径 }); 2. uni.redirectTo 用于关闭当前页面,重定向到应用内的某个非tabBar页面…...

Redis|延迟双删策略的优点和缺点是什么?

延迟双删策略是什么? 延迟双删策略是一种保证缓存与数据库数据一致性的方法,特别适用于高并发场景下的缓存更新。其核心思想是:在更新数据库时,不仅删除一次缓存,还在短时间后再进行一次延迟删除,以避免并…...

【计算机网络 - 基础问题】每日 3 题(五十二)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...

LogStash架构分析

一、什么是LogStash LogStash 是一个类似实时流水线的开源数据传输引擎,它像一个两头连接不同数据源的数据传输管道,将数据实时地从一个数据源传输到另一个数据源中。在数据传输的过程中,LogStash 还可以对数据进行清洗、加工和整理&#xf…...

2024最新最全【大模型学习路线规划】零基础入门到精通!,大模型学习干货分享,总结的太详细了

第一阶段:基础理论入门 目标:了解大模型的基本概念和背景。 内容: 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段:核心技术解析 目标:深入学习大模型的关键技术和工…...

QT界面开发:图形化设计、资源文件添加

设计界面介绍 此时我们创建项目时就可以选择添加UI选项了。 添加完之后,我们可以看到,文件中多出了一个存放界面文件的目录,下面有个.ui的界面文件。甚至pro的项目文件中也会添加一项内容。 我们点击界面文件中的.ui文件,我们可以…...

科大讯飞:成本降低 60%,性能提升 10 倍,从 ES Loki 到 Apache Doris 可观测性存储底座升级

导读:科大讯飞星际日志中心经历了从 Elasticsearch 到 Loki,再到 Apache Doris 的可观测性存储分析底座升级,支持可观测三大支柱 Log Trace Metrics 的存储与分析,有效解决 Elasticsearch 成本高、Loki 查询慢的问题。Doris 能够在…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

快刀集(1): 一刀斩断视频片头广告

一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...