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编码等。这些编码将字符映射到特定的二进制值,使得字符可以…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
