【重学 MySQL】二十六、内连接和外连接

news2024/11/15 21:55:00

【重学 MySQL】二十六、内连接和外连接

  • 内连接(INNER JOIN)
  • 外连接(OUTER JOIN)
  • 总结

在这里插入图片描述

在MySQL中,内连接和外连接是两种常见的表连接方式,它们在处理多个表之间的关系时发挥着重要作用。

内连接(INNER JOIN)

概念

内连接是连接操作中最常用的一种,它通过将两个表中满足连接条件的记录进行合并,返回匹配的结果。内连接只返回两个表中有匹配的行,并且只返回满足连接条件的列。

特点

  • 返回两个表中满足连接条件的记录集合。
  • 只包含在两个表中都存在的数据。
  • 如果两个表中有未匹配的行,则这些行将不会包含在结果中。

语法

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

或者使用隐式内连接(不使用INNER JOIN关键字):

SELECT columns
FROM table1, table2
WHERE table1.common_field = table2.common_field;

示例

假设有两个表,一个是employees(员工表),另一个是departments(部门表),它们通过department_id字段关联。要查询所有员工及其所在部门的名称,可以使用内连接:

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;

外连接(OUTER JOIN)

外连接是连接操作中的另一种方式,它可以返回左表或右表中有未匹配的记录。外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN,但需要注意的是,MySQL原生并不直接支持FULL JOIN,但可以通过UNION操作模拟)。

1. 左外连接(LEFT JOIN)

概念

左外连接返回左表中所有的记录和满足连接条件的右表记录。如果右表中没有匹配的记录,则返回NULL值。

语法

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

示例

继续使用employeesdepartments表作为例子,要查询所有员工及其所在部门的名称,即使某些员工没有分配到部门(即部门表中没有对应的记录),也可以使用左外连接:

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

2. 右外连接(RIGHT JOIN)

概念

右外连接与左外连接相反,它返回右表中的所有记录和满足连接条件的左表记录。如果左表中没有匹配的记录,则返回NULL值。

语法

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

示例

要查询所有部门及其对应的员工名称(即使某些部门没有员工分配),可以使用右外连接:

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

3. 全外连接(FULL JOIN,通过UNION模拟)

由于MySQL原生不支持全外连接,但可以通过结合左外连接和右外连接,并使用UNION操作来模拟全外连接的效果。

模拟语法

(SELECT columns FROM table1 LEFT JOIN table2 ON table1.common_field = table2.common_field)
UNION
(SELECT columns FROM table1 RIGHT JOIN table2 ON table1.common_field = table2.common_field);

需要注意的是,使用UNION时,应确保两个SELECT语句中的列数和数据类型相匹配,并且通常还需要使用UNION DISTINCT来去除重复的行(如果不需要去重,则可以使用UNION ALL)。

总结

内连接和外连接在MySQL中都是处理表之间关系的重要工具。内连接只返回匹配的记录,而外连接则返回匹配的记录以及未匹配的记录(通过NULL值表示)。通过合理使用这些连接方式,可以灵活地查询和处理多个表中的数据。

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

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

相关文章

光器件 -- 拉曼放大器(原理、分类和应用)

拉曼工作原理 拉曼放大器基于受激拉曼散射效应(SRS,Stimulated Raman Scattering),以传输光纤作为增益介质,将拉曼泵浦功率转移到C波段信号上进行放大。受激拉曼散射基本原理为:如果一个弱信号光与一个强泵…

流动性质押协议 Drop:DeFi 新一轮革新

近年来,去中心化金融(DeFi)领域经历了迅猛的增长和创新,而其中一项重要的发展便是流动性质押协议的兴起。在传统的区块链网络中,用户为了参与网络的验证过程和维护网络安全,通常需要将加密资产锁定在区块链…

Java集合(八股)

这里写目录标题 Collection 接口List 接口ArrayList 简述 1. ArrayList 和 LinkedList 区别?⭐️⭐️⭐️⭐️2. ArrayList 和 Array 的区别?⭐️⭐️⭐️ArrayList 和 Vector 区别?⭐️⭐️ArrayList 的扩容机制?⭐️⭐️⭐️ Qu…

Lesson08---string类(3)

1.find_first_of string里面的find成员函数就是找一个字符串然后返回第一个字符 find_first_of函数看个例子就很快就能明白 它返回的下标是参数的其中任意一个字符的下标通过以上操作就可以把原来的那一整个字符串替换成自己想要的字符 第二个参数其实就是一个缺省参数默认从0…

多种传感器输出的模拟量转换

目录 内部温度传感器与参照电压 传感器 光敏电阻 热敏电阻 反射式红外 对射式红外 驱动代码 Sensor.h Sensor.c AD.h AD.c main.c 内部温度传感器与参照电压 STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度。 该温度传感器在内部和ADCx_I…

IBM中国研发中心撤出:挑战与机遇并存

IBM中国研发中心撤出:挑战与机遇并存 引言 近日,IBM宣布撤出在中国的两大研发中心的消息,引起了广泛关注。这一举动不仅对IBM自身的全球布局产生了影响,也在一定程度上反映了跨国公司在中国市场策略的调整。本文将探讨这一事件背…

5.9 使用LBA 的模式来读取磁盘

注意: 如果再 cmake 中想要 make clean 的话, 直接 删除 build 目录就可以了。 1 也是说 是 MBR还是 LBA 硬盘是可以控制的。 LBA 没有 磁盘, 柱面的概念。 2 对于寄存器的说明。 什么是 CHS呢? 就是机械磁盘。 这里只找到了 LB…

【计算机组成原理】详细解读带符号整数在计算机中的运算

有符号整数的运算 导读一、补码的优势二、补码的加法运算三、补码的减法运算四、原码、反码、补码的特性结语 导读 大家好,很高兴又和大家见面啦!!! 经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式&…

使用ShardingSphere实现MySql的分库分表

目录 一 什么是ShardingSphere分库分表 二 代码实现 1.导入相关依赖 2.配置相关参数 3.创建学生类以及mapper接口 4.实现 StandardShardingAlgorithm接口自定义分片算法 唐洋洋我知道你在看!!!嘿嘿 一 什么是ShardingSphere分库分表 我们平时在设计数据库的时候&#xf…

Servlet入门学习笔记-Servlet技术

为什么需要Servlet ? 使用JSP技术如何编写服务器动态网页? 流程图:JSP使用Java生成动态内容 在JSP技术出现之前如何编写服务器动态网页? 流程图:Java代码就是Servlet程序 什么是Servlet ? Servlet 是一个…

sqli-labs靶场自动化利用工具——第10关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生,或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢?可能有些人会说不是有sqlmap&#…

YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)

文章目录 摘要代码详解如何在自己的论文中描述摘要 本文使用PromptIR框架中的PGM模块来改进YoloV10。PGM(Prompt Generation Module)模块是PromptIR框架中的一个重要组成部分,主要负责生成输入条件化的提示(prompts)。这些提示是一组可学习的参数,它们与输入特征相互作用…

【Java】方法的重载

文章目录 前言一、方法重载是什么?二、方法重载的注意事项 1、一个类中,只要一些方法的名称相同,形参列表不同,那么它们就是方法重载了,其他的不管(如:修饰符,返回值类型是否一样都无…

彻底学会防抖和节流

目录 防抖(Debounce) 节流(Throttle) 如何选择使用防抖和节流? 总结 Vue 3 中使用防抖(Debounce)和节流(Throttle) 防抖(Debounce)示例 节…

普发Pfeiffer TCP600TCP5000手侧

普发Pfeiffer TCP600TCP5000手侧

unity3d入门教程三

unity3d入门教程三 8.1游戏脚本8.2脚本的使用8.3认识脚本组件8.4帧率9.1游戏脚本9.2获取节点和组件9.3MonoBehaviour9.4父节点与子节点9.5组件的属性9.6脚本的单步调试 8.1游戏脚本 通过程序控制对象属性(如运动,修改transform的位置属性) …

【STM32】VOFA+上位机 PID调参

【STM32】VOFA上位机 PID调参 前言VOFA简介 VOFA配置VOFA动态调节PID参数VOFA控件STM32解析数据包 PID参数整定一般调节法临界比例法试凑法 前言 参考文章如下:VOFA使用说明 使用VOFA上位机进行PID调参 PID参数整定 VOFA VOFA是一款简单易上手的上位机调试软件&a…

vue之我不会

计算属性 例子&#xff1a; 注意&#xff1a;调用计算属性时&#xff0c;不可以带括号&#xff0c;那样调用的就是方法&#xff0c;如&#xff1a;以下调用fullName时不可funnName() <div id"root">姓&#xff1a;<input type"text" v-model"…

Go语言练习——语法实践

目录 一、数组 1.多维数组的声明和使用 2.数组与切片的转换 3.数组在函数中的使用 二、切片 1.切片的动态扩容机制 2.切片的复制与修改 3.切片在排序算法中的应用 三、结构体 1.结构体的嵌套与方法 2.结构体与JSON的序列化 3.结构体的工厂模式 四、映射 1.映射的并发访问 2.映射…

erlang学习: Mnesia Erlang数据库4

表的类型和位置 内存表 它们的速度非常快&#xff0c;但是里面的数据是易失的&#xff0c;所以如果机器崩溃或者你停止了DBMS&#xff0c;数据就会丢失。 磁盘表 磁盘表应该不会受到系统崩溃的影响&#xff08;前提是磁盘没有物理损坏&#xff09;。 当Mnesia事务写入一个表并…