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编码等。这些编码将字符映射到特定的二进制值,使得字符可以…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
