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编码等。这些编码将字符映射到特定的二进制值,使得字符可以…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
