MySQL:JOIN 多表查询
多表查询
在关系型数据库中,表与表之间是有联系的,它们通过 外键 联系在一起,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。
MySQL多表查询是数据库操作中非常重要的一部分,它允许你从多个相关联的表中检索信息。这种查询通常通过 JOIN 语句来实现,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN(MySQL中通过 UNION JOIN 模拟。全连接,返回左右两个表中的所有记录,无论是否满足连接条件)等。
ON
在 SQL 查询中,ON 是用来指定连接条件的子句。它用于在连接两个表时,明确指定参与连接的列或表达式之间的关系,以确定哪些记录应该被匹配和返回。
连接通常需要基于某些共享的列或条件来进行,而ON子句则用于指定这些连接条件
INNER JOIN table_2
ON join_condition;
join_condition 可以是以下类型之一:
- 使用相等运算符
=:表1.连接列 = 表2.连接列 - 使用其他比较运算符:如
表1.连接列 < 表2.连接列
连接列可以是两个表中的任何列,它们应该具有相似的数据类型。
USING
在 SQL 查询中,USING 是一种指定连接条件的简洁方式,特别适用于连接具有相同列名的两个表。它可以明确指定连接列,而无需在连接条件中重复列出表名。
INNER JOIN table_2
USING column_name;
连接列应该在两个表中都存在,并且具有相同的名称和数据类型。使用 USING 的主要优点是省略了重复的列名,并且使连接条件更加简洁和清晰。
但是需要注意的是,USING 只能用于内连接和自然连接,并且它不支持其他类型的连接(如左连接、右连接或完全外连接)。
JOIN
JOIN 是在 SQL 查询中用于连接两个或多个表的操作。通过 JOIN 操作,我们可以将多个表中的数据按照指定的连接条件进行关联,并获取到相关联的数据。
SELECT column_list
FROM table_1
JOIN table_2 ON join_condition;
通过 JOIN 操作,我们可以根据需要将多个表中的数据进行组合或筛选,实现复杂的数据查询和分析。
内连接 INNER JOIN
INNER JOIN 是一种连接两个表的方式,用于将两个表的数据进行关联查询,它返回两个表中满足连接条件的匹配记录。
SELECT column_list FROM table_1
INNER JOIN table_2 ON join_condition;
-
内连接主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接简单来说,就是利用条件表达式来消除交叉连接的某些数据行。
-
如果没有连接条件,
INNER JOIN和CROSS JOIN在语法上是等同的,两者可以互换 -
当对多个表进行查询时,要在
SELECT语句后面指定字段是来源于哪一张表,可以为表指定别名,alias.column访问目标字段。 -
INNER JOIN也可以使用WHERE子句指定连接条件,但在某些时候会影响查询性能。
![**![[INNER JOIN diagram.png]]**](https://i-blog.csdnimg.cn/direct/7c0f87e88b784613b5323c33e4e3be1a.png)
内连接的结果是两个表中连接列值匹配的记录组合。这样的组合形成一个新的临时表,结果集中包含了两个表中符合连接条件的记录。
内连接的优点是只返回匹配的记录,可以有效地过滤不需要的数据。
然而,需要注意的是,如果连接条件不正确或者连接列中有 NULL 值,可能会导致结果集不完整。
外连接 OUTER JOIN
外连接是 SQL 中的一种表连接操作,它能够返回连接条件匹配的记录,同时还可以返回未匹配到的记录。
外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。
外连接分为左外连接 LEFT OUTER JOIN、右外连接 RIGHT OUTER JOIN 和全外连接 FULL OUTER JOIN (MySQL不支持)
LEFT JOIN
LEFT JOIN(左外连接)是 SQL 中的一种表连接操作,是一种单向连接,它返回左表中的所有记录,以及满足连接条件的右表中的匹配记录。如果右表中没有匹配记录,则返回 NULL 值补足。
SELECT column_list
FROM left_table
LEFT [OUTER] JOIN right_table ON join_condition;
左外连接是以左表为基准,右表为参考表,保留左表中的所有记录,包括与右表匹配的记录。
LEFT JOIN 常用于 需要获取左表中所有记录以及与之相关联的右表数据 的情况。
RIGHT JOIN
RIGHT JOIN(右外连接)是 SQL 中的一种表连接操作,是一种单向连接,是 LEFT JOIN 的反向连接,它返回右表中的所有记录,以及满足连接条件的左表中的匹配记录。如果左表中没有匹配记录,则返回 NULL 值补足。
SELECT column_list
FROM left_table
RIGHT [OUTER] JOIN right_table ON join_condition;
右外连接是以右表为基准,以左表为参考表,保留右表中的所有记录,包括与左表匹配的记录。
RIGHT JOIN 常用于 需要获取右表中所有记录以及与之相关联的左表数据 的情况
交叉连接 CROSS JOIN
CROSS JOIN(交叉连接)是 SQL 中的一种表连接操作,它返回两个表的笛卡尔积,即将左表的每一行与右表的每一行进行组合,返回的结果集将包含左表和右表中所有记录之间的所有可能的组合。
若 table_1 有 N 行,table_2 有 M 行,则交叉连接返回的结果为 N*M 行,当表中的数据较多时,得到的运行结果会非常长,而且得到的运行结果也没太大的意义。所以,通过交叉连接的方式进行多表查询的这种方法并不常用。
不同于内连接和外连接 CROSS JOIN 操作不需要指定任何连接条件,它会返回所有可能的组合。
SELECT column_list
FROM table_1
CROSS JOIN table_2 [WHERE ];
多个表交叉连接时,在 FROM 后连续使用 CROSS JOIN 或 , 即可
SELECT column_list
FROM table_1, table_2, ..., table_n'''官方建议语法'''
SELECT column_list
FROM table_1
CROSS JOIN table_2
...
CROSS JOIN table_n
Self Join
自连接(Self Join)是指在同一表中使用表与自身进行连接操作。它是一种常见的数据库查询技术,用于解决需要比较同一表中不同行的情况。自连接通常涉及使用别名来引用同一表的不同实例。
若不使用别名来指代同一个字段,可能会引起错误。
自连接可用于处理具有层次结构、网络结构、关联关系的数据,可以有不同的用途和复杂度,取决于具体的业务需求和数据结构。
相关文章:
MySQL:JOIN 多表查询
多表查询 在关系型数据库中,表与表之间是有联系的,它们通过 外键 联系在一起,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 MySQL多表查询是数据库操作中非常重要的一部分,它允许你…...
【机器学习】必会算法模型之:一文掌握 密度聚类,建议收藏。
密度聚类 1、引言2、密度聚类2.1 定义2.2 核心原理2.3 实现步骤2.4 算法公式2.5 代码示例 3、总结 1、引言 在机器学习的无监督学习领域,聚类是一项基础而重要的任务。 聚类算法通过将数据点分组,使同一组内的数据点具有更大的相似性,而组间…...
代码:前端与数据库交互的登陆界面
<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>登录</title> </head> <body>…...
发电机基础知识:负载组
什么是发电机负载组? 简单地说,负载组是一种可以产生人工电力负载的设备,用于测试发电机并验证发电机组的性能,包括相关组件,以确保通过使发电机发动机达到适当的工作温度和压力来满足适当的负载。 它是如何工作的&a…...
内网安全:各类密码的抓取
Mimikatz在线读取SAM文件 离线读取SAM文件 在线读取lsass进程 离线读取lsass进程 BrowserGhost浏览器密码抓取 Sharp-HackBrowserData浏览器密码抓取 SharpDecryptPwd数据库密码抓取 LaZagne各类密码的抓取 Windows其他类型抓NTLM Hash工具 sam文件和lsass进程就是Wind…...
前端面试题汇总2
1. CSS 中两个 .class1 .class2 从哪个开始解析 在 CSS 中,选择器 .class1 .class2 表示所有 class 为 class1 的元素中的 class 为 class2 的子元素。浏览器解析这个选择器时,从右向左解析。也就是说,浏览器首先找到所有 class 为 class2 的…...
分布式服务框架zookeeper+消息队列kafka
一、zookeeper概述 zookeeper是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务,状态同步,配置中心,集群管理等。 在分布式环境下,经常需要对应用/服…...
服务攻防-应用协议cve
Cve-2015-3306 背景: ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行,…...
Springcloud之gateway的使用详解
官网地址:https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom: <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…...
中望CAD 建筑 v2024 解锁版下载、安装教程 (超强的CAD三维制图)
前言 中望CAD建筑版是一款国产CAD制图软件,专注于建筑设计领域。中望CAD建筑版拥有丰富多样的建筑图块和图案,完美兼容各类建筑图纸。同时,它提供了绘图标准规范,使绘图更加规范和专业。更值得一提的是,该软件还具备智…...
windows edge自带的pdf分割工具(功能)
WPS分割pdf得会员,要充值!网上一顿乱找,发现最简单,最好用,免费的还是回到Windows。 Windows上直接在edge浏览器打开PDF,点击 打印 按钮,页面下选择对应页数 打印机 选择 另存为PDF,然后保存就…...
HTML5实现好看的天气预报网站源码
文章目录 1.设计来源1.1 获取天气接口1.2 PC端页面设计1.3 手机端页面设计 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4…...
比较(八)利用python绘制指示器
比较(八)利用python绘制指示器 指示器(Indicators)简介 指示器是一系列相关图的统称,主要用于突出展示某一变量的实际值与目标值的差异,例如常见的数据delta、仪表盘、子弹图、水滴图等。 快速绘制 基于p…...
【体外诊断】ARM/X86+FPGA嵌入式计算机在医疗CT机中的应用
体外诊断 信迈科技提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强&…...
力扣 28找到字符串中第一个匹配项的下标 KMP算法
思路: 朴素匹配有很多步骤是多余的 KMP算法能够避免重复匹配 KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 这里讲一下为什么用模式串的最大公共前后缀…...
JavaScript(10)——匿名函数
匿名函数 没有名字的函数,无法直接使用。 使用方式: 函数表达式立即执行函数 函数表达式 将匿名函数赋值给一个变量,并且通过变量名称进行调用 let fn function(){ 函数体 } 调用: fn() 立即执行函数 语法: (function () {…...
图片上传成功却无法显示:静态资源路径配置问题解析
1、故事的背景 最近,有个学弟做了一个简单的后台管理页面。于是他开始巴拉巴拉撘框架,写代码,一顿操作猛如虎,终于将一个简单的壳子搭建完毕。但是在实现功能:点击头像弹出上传图片进行头像替换的时候,卡壳…...
【转盘案例-弹框-修改Bug-完成 Objective-C语言】
一、我们来看示例程序啊 1.旋转完了以后,它会弹一个框,这个框,是啥, Alert 啊,AlertView 也行, AlertView,跟大家说过,是吧,演示过的啊,然后,我们就用iOS9来做了啊,完成了以后,我们要去弹一个框, // 弹框 UIAlertController *alertController = [UIAlertContr…...
Perl 基础语法
Perl 基础语法 Perl 是一种高级、解释型、动态编程语言,广泛用于CGI脚本、系统管理、网络编程、以及其他领域。Perl 以其强大的文本处理能力和简洁的语法而闻名。本文将详细介绍 Perl 的基础语法,帮助读者快速入门。 1. Perl 变量和数据类型 1.1 变量…...
【嵌入式开发之标准I/O】二进制文件的读写及实验
文本文件和二进制的区别 文本文件和二进制文件的区别主要在于它们的编码方式和数据组织方式。 编码方式:文本文件是基于字符编码的文件,常见的编码有ASCII编码、UNICODE编码等。这些编码将字符映射到特定的二进制值,使得字符可以…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...
