MYSQL 什么是内连接 外连接 左连接 右连接?及适用场景

在 SQL 中,连接(JOIN)是用于组合来自两个或更多表的行的一种方法。根据连接的方式不同,可以分为几种类型的连接:内连接(INNER JOIN)、外连接(OUTER JOIN)、左连接(LEFT JOIN)和右连接(RIGHT JOIN)。下面分别对这些连接类型进行详细解释:

  1. 内连接(INNER JOIN)
    内连接返回两个表中满足连接条件的所有行。只有当连接条件成立时,才会返回相应的行。

语法:

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

示例:
假设有两个表 employees 和 departments,我们想找出所有有部门的员工。

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
  1. 外连接(OUTER JOIN)
    外连接返回两个表中所有满足连接条件的行,同时还可以返回那些在一个表中存在但在另一个表中不存在的行。外连接分为左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。

左外连接(LEFT JOIN 或 LEFT OUTER JOIN)
左外连接返回左表中的所有行,即使在右表中没有匹配的行也会返回。对于右表中没有匹配的行,结果集中会显示 NULL。

语法:

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

示例:
假设我们想找出所有员工及其对应的部门,即使有些员工没有分配部门。

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;

右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN)
右外连接返回右表中的所有行,即使在左表中没有匹配的行也会返回。对于左表中没有匹配的行,结果集中会显示 NULL。

语法:

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

示例:
假设我们想找出所有部门及其对应的员工,即使有些部门没有任何员工。

SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;

全外连接(FULL OUTER JOIN)
全外连接返回两个表中的所有行,无论是否满足连接条件。如果某一行在另一个表中没有匹配的行,结果集中会显示 NULL。

语法:

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

示例:
假设我们想找出所有员工和部门的组合,包括没有员工的部门和没有部门的员工。

SELECT employees.name, departments.name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.id;

总结
内连接(INNER JOIN):返回两个表中满足连接条件的所有行。
左外连接(LEFT JOIN):返回左表中的所有行,即使在右表中没有匹配的行也会返回。
右外连接(RIGHT JOIN):返回右表中的所有行,即使在左表中没有匹配的行也会返回。
全外连接(FULL OUTER JOIN):返回两个表中的所有行,无论是否满足连接条件。

适用场景
  1. 内连接(INNER JOIN)
    用途:

当你需要获取两个表中都存在的记录时。
当你只关心那些在两个表中都有对应记录的数据时。
场景示例:

查询所有有部门的员工。
查找两个表中共同存在的记录。
示例 SQL:

-- 查询所有有部门的员工
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
  1. 左外连接(LEFT JOIN 或 LEFT OUTER JOIN)
    用途:

当你需要获取左表中的所有记录,即使右表中没有匹配的记录。
当你希望保留左表中的所有记录,并且显示右表中匹配的记录,如果没有匹配则显示 NULL。
场景示例:

查询所有员工及其对应的部门,即使有些员工没有分配部门。
获取所有订单及其对应的客户信息,即使有些订单没有关联的客户。
示例 SQL:

-- 查询所有员工及其对应的部门
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
  1. 右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN)
    用途:

当你需要获取右表中的所有记录,即使左表中没有匹配的记录。
当你希望保留右表中的所有记录,并且显示左表中匹配的记录,如果没有匹配则显示 NULL。
场景示例:

查询所有部门及其对应的员工,即使有些部门没有任何员工。
获取所有客户及其对应的订单信息,即使有些客户没有下单。
示例 SQL:

-- 查询所有部门及其对应的员工
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
  1. 全外连接(FULL OUTER JOIN)
    用途:

当你需要获取两个表中的所有记录,无论是否满足连接条件。
当你希望保留两个表中的所有记录,并且显示匹配的记录,如果没有匹配则显示 NULL。
场景示例:

查询所有员工和部门的组合,包括没有员工的部门和没有部门的员工。
获取所有客户和订单的组合,包括没有订单的客户和没有客户的订单。
示例 SQL:

-- 查询所有员工和部门的组合
SELECT employees.name, departments.name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.id;

总结
内连接(INNER JOIN):适用于需要获取两个表中都存在的记录的场景。
左外连接(LEFT JOIN):适用于需要保留左表中所有记录的场景。
右外连接(RIGHT JOIN):适用于需要保留右表中所有记录的场景。
全外连接(FULL OUTER JOIN):适用于需要保留两个表中所有记录的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61646.shtml

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

相关文章

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)

通过网盘分享的文件:如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…

速盾:高防cdn支持自定义缓存KEY前缀吗?

速盾是一家专业的高防CDN(Content Delivery Network)服务提供商,为客户提供安全可靠的内容分发服务。在讨论高防CDN支持自定义缓存KEY前缀之前,我们先来了解一下CDN和缓存的概念。 CDN是一种通过将内容分布到全球多个节点上&…

使用flex布局实现一行固定展示n个元素

前言: 最近在公司中完成小程序的UI设计稿时,遇到了布局一个问题:UI设计稿想实现的布局是这样的: 笔者第一反应就是使用flex中的justify-content: space-between;属性,但是使用之后发现,justify-content: …

node.js基础学习-querystring模块-查询字符串处理(三)

一、前言 querystring是 Node.js 中的一个内置模块,主要用于处理 URL 查询字符串。它提供了一些实用的方法来解析和格式化查询字符串,使得在处理 HTTP 请求中的查询参数等场景时非常方便。 还可以防止sql注入 二、解析查询字符串(parse方法&a…

AntFlow 0.20.0版发布,增加多数据源多租户支持,进一步助力企业信息化,SAAS化

传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大,也被企业广泛采用,然后也存着在诸如学习曲线陡峭,上手难度大,流程设计操作需要专业人员,普通人无从下手等问题。。。引入工作流引擎往往需要企业储…

IDL学习笔记(一)数据类型、基础运算、控制语句

近期,需要用到modis数据批量预处理,于是重新学习idl,感谢郭师兄推荐,以及张洋老师的详细教导。特以此为学习笔记,望学有所成。 IDL学习笔记(一) 数据类型数据类型创建数组类型转换函数代码输出print往文件…

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

vue3 基本使用

Vue 3 提供了多种方式来构建用户界面,包括选项式 API 和 Composition API。下面我将详细介绍 Vue 3 的基本使用和语法,主要集中在选项式 API 上,因为这对于初学者来说更容易上手。 1. 创建 Vue 项目 如果你还没有一个 Vue 项目,…

使用 Pytorch 构建 Vanilla GAN

文章目录 一、说明二、什么是 GAN?三、使用 PyTorch 的简单 GAN(完整解释的代码示例)3.1 配置变量3.2 、PyTorch 加速3.3 构建生成器3.4 构建鉴别器 四、准备数据集五、初始化函数六、前向和后向传递七、执行训练步骤八、结果 一、说明 使用…

Python酷库之旅-第三方库Pandas(251)

目录 一、用法精讲 1186、pandas.tseries.offsets.BusinessMonthEnd.is_year_start方法 1186-1、语法 1186-2、参数 1186-3、功能 1186-4、返回值 1186-5、说明 1186-6、用法 1186-6-1、数据准备 1186-6-2、代码示例 1186-6-3、结果输出 1187、pandas.tseries.offs…

Gazebo插件相机传感器(可订阅/camera/image_raw话题)

在仿真环境中使用相机传感器,通常需要结合Gazebo插件来实现。Gazebo是一个功能强大的机器人仿真工具,支持多种传感器模型,包括相机。下面是如何在Gazebo中使用相机传感器的详细步骤。 1. 修改Xacro文件以包含Gazebo插件 首先,修…

numpy快速入门

文章目录 前言导入numpy创建多维数组提取数组中的元素乘法求平均值求最大值最后 前言 你好,我是醉墨居士,好久没发布新博客了,今天给大家带来的是numpy的快速入门,帮助大家用最短的时间快速学习使用numpy talk is cheap, show y…

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介:本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点,随后深入讲解 GET 请求,以百度页面为例,展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索,以及正确设置 encoding 避…

猎板 PCB特殊工艺:铸就电子行业核心竞争力新高度

在当今竞争激烈且技术驱动的电子制造领域,印制电路板(PCB)作为电子产品的关键基石,其特殊工艺的发展水平直接影响着整个行业的创新步伐与产品品质。猎板 PCB 凭借在厚铜板、孔口铺铜、HDI 板、大尺寸板以及高频高速板等特殊工艺方…

基于K-NN + GCN的轴承故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

【Gitlab】CICD使用minio作为分布式缓存

1、安装minio 下载适合自己系统版本的安装文件https://dl.min.io/server/minio/release/windows-amd64/ yum install xxx.rpm 2、配置/etc/profile export MINIO_ACCESS_KEYroot [ui登录账号] export MINIO_SECRET_KEYminioDev001 [ui登录密码] export MINIO_OPTS"…

手机卡限速丨中国移动5G变3G,网速500kb

以下猜测错误,又有新的猜测:河南移动的卡出省限速。可能是因为流量结算。 “2024年7月1日起,中国移动集团内部将开启跨省流量结算” 在深圳四五年了,之前没有过,就从上个月开始。11月底解除限速,12月刚开…

JavaScript根据数据生成柱形图

分析需求 // 定义一个数组来存储四个季度的数据 dataArray = []// 循环4次,获取用户输入的数据并存储到数组中 for i from 0 to 3// 获取用户输入的数据inputData = 获取用户输入的第(i + 1)季度的数据// 将数据存入数组dataArray[i] = inputData// 遍历数组,根据数据生成柱…

No module named ‘huggingface_hub‘

问题描述 from huggingface_hub import PyTorchModelHubMixin ModuleNotFoundError: No module named huggingface_hub解决方法 pip install huggingface_hub

Redis实现限量优惠券的秒杀

核心&#xff1a;避免超卖问题&#xff0c;保证一人一单 业务逻辑 代码步骤分析 全部代码 Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {Resourceprivate ISeckillVoucher…