<MySQL> 查询数据进阶操作 -- 联合查询

目录

一、什么是笛卡尔积?

二、什么是联合查询?

三、内连接

3.1 简介

3.2 语法

3.3 更多的表

3.4 操作演示

四、外连接

4.1 简介

4.2 语法

4.3 操作演示

五、自连接

5.1 简介

5.2 自连接非必要不使用

六、子查询(嵌套查询)

6.1 简介

6.2 in 和 exists 关键字

6.3 子查询可能让简单的语句变复杂

七、合并查询

7.1 简介

7.2 合并查询可能让简单的语句变复杂

八、MySQL 中各个关键字的执行顺序


一、什么是笛卡尔积?

        笛卡尔积(Cartesian product)是一种数学概念,用于描述两个或多个集合之间的组合。它表示为两个或多个集合的乘积,其中每个元素都来自不同的集合。

        在编程中,笛卡尔积通常用于描述两个或多个数据集合之间的组合。

编程中使用笛卡尔积,需要注意以下两点:

实际开发中,使用笛卡尔积需要慎重,需要预估笛卡尔积后的结果集的规模,避免规模过大。
通常表与表之间存在关联关系,才可以进行笛卡尔积。没有关联关系的数据得出的笛卡尔积,通常也没有意义。

二、什么是联合查询?

        在MySQL中,联合查询是一种查询多个表的多个列的查询,通过取笛卡尔积,这些表和列被组合成一个结果集。联合查询通常用于查询多个表之间的关联数据。

联合查询的常见方式包括:内连接、外连接、自连接、子查询(嵌套查询)、合并查询


三、内连接

3.1 简介

        内连接是查询两个表或多个表之间的关联数据,返回两个表之间的交集数据。内连接是默认的连接类型,如果不指定连接类型,那么查询默认为内连接

3.2 语法

基本语法:select * from 表1 join 表2 on 关联条件;
基本语法:select * from 表1,表2 where 关联条件;
释义:

根据关联条件,全列查询指定表的笛卡尔积。

以上两种写法效果一致。

可以指定别名。

以上语法只进行了基本的查询,后续往往需要根据需要根据需求对表的内容进行精简

查询和精简步骤:

1、进行笛卡尔积

2、指定表之间的关联条件

3、指定结果集的筛选条件
4、指定需要打印的列(对需要打印的列进行精简或聚合运算)

join on

语法:

select 需要打印的列名... from 表1 join 表2 on 关联条件 and 结果集的其他筛选条件;

where语法:

select 需要打印的列名... from 表1,表2 where 关联条件 and 结果集的其他筛选条件;

3.3 更多的表

在超过两个表做笛卡尔积时,两种语法分别是怎样添加对应语句的?

假设此时有三个表做笛卡尔积:

join on 语法:

select 需要打印的列名...

from 表1 join 表2 on 关联条件 join 表3 on 关联条件

and 结果集的其他筛选条件;

where 语法:

select 需要打印的列名...

from 表1,表2,表3 where 关联条件,关联条件 

and 结果集的其他筛选条件;

        第一种写法清晰地表达了表之间是什么关联条件;而第二种写法则更为简洁,但表之间的关联条件却写成一团;两种写法各有各的优点。

3.4 操作演示


四、外连接

4.1 简介

        外连接也是查询两个表之间的关联数据,但有所不同的是,内连接查询的是两个表的交集,而外连接则会以一侧的表为主,显示所有列

4.2 语法

        外连接需要使用 left join 或 right join 子句指定连接方向。使用 left join 表示完全显示左侧表,称为左外连接;使用 right join 表示完全显示右侧表,称为右外连接。

语法:

select 需要打印的列名...

from 表1 left join 表2 on 关联条件 

and 结果集的其他筛选条件;

释义:根据关联条件和结果集的其他筛选条件,以指定的左侧表为主,查询指定表中指定的列数据。

4.3 操作演示


五、自连接

5.1 简介

        自连接是指一个表和自己进行笛卡尔积,这种查询方式应用场景不多,在需要将行关系转化成列关系时可以使用

语法:

select * from 表名 as 别名1,表名 as 别名2;
释义:

指定一个表和自己进行笛卡尔积,并打印结果集。

由于在同一个语句中表名相同,因此自连接需要使用别名。

没有使用别名将报错:

5.2 自连接非必要不使用

假设有以下场景:

        从上图可知,除了行列关系不同,使用其他方法可以和自连接获得一样的数据,但是自连接还需要对数据进行笛卡尔积,查询开销大因此,自连接的查询方式并不常用。如果出现一定要使用自连接进行查询才能获得正确数据的情况,此时则应考虑表的设计是否存在缺陷。


六、子查询(嵌套查询)

6.1 简介

        子查询是嵌套在主查询内部的SQL查询,它返回一个结果集,然后被用作主查询的条件。子查询需要使用where子句,并将其放在主查询的括号内。

语法:

主查询语句 where 包含(子查询语句)的条件表达式;
释义:

使用子查询语句返回的结果集作为主查询语句的条件。

6.2 in 和 exists 关键字

子查询语句可以配合 in 和 exists 关键字使用。

关键字释义
in / exists包含在(子查询语句返回的结果集中)
not in / not exists不包含在(子查询语句返回的结果集中)

6.3 子查询可能让简单的语句变复杂


七、合并查询

7.1 简介

        合并查询用于查询多个表的多个列的查询,这些表和列将被组合成一个结果集。在前后查询的结果集中,列的类型和数量需要一致,列名则不需要一致。

        合并查询需要使用 union 或 union all 关键字。

关键字说明
union取得两个结果集的并集,去重
union all取得两个结果集的并集,不去重
语法:查询语句1 union 查询语句2;
释义:将两个查询的结果集合并,去重,打印。

7.2 合并查询可能让简单的语句变复杂


八、MySQL 中各个关键字的执行顺序

fromonjoinwheregroup bywithhavingselectdistinctorder bylimit
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        关键字从左到右,优先级依次从高到低。优先级高的关键字先执行。


阅读指针 -> 《数据库中的索引是什么?》

链接生成中...........

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Compose详细教程(从入门到放弃)

对于现代应用来说,大多都是通过很多的微服务互相协同组成的一个完整应用。例如, 订单管理、用户管理、品类管理、缓存服务、数据库服务等,它们构成了一个电商平台的应 用。而部署和管理大量的服务容器是一件非常繁琐的事情。而 Docker Compos…

arcgis--填充面域空洞

方法一:使用【编辑器】-【合并工具】进行填充。首选需要在相同图层中构造一个填充空洞的面域,然后利用【合并】工具进行最后填充。 打开一幅含有空洞的矢量数据,如下: 打开【开始编辑】-【构造工具】-【面】进行覆盖空洞的面域的…

RabbitMQ之交换机

文章目录 一、Exchanges1、Exchanges 概念2、Exchanges 的类型3、无名 exchange 二、临时队列三、绑定(bindings)四、Fanout(扇出)1、Fanout 介绍2、Fanout 实战 五、Direct exchange(直连交换机)1、Direct exchange 介绍2、多重绑…

相对强弱指标 RSI

SMA(A,B,1)MA AA ,一天前的收盘价; BB,如果时涨的,把涨幅返回; CC,12天的涨幅占12天全部涨跌幅的多少; 画一条50 的线条。

一道 python 数据分析的题目

python 数据分析的题目。 做题方法:使用 pandas 读取数据,然后分析。 知识点:pandas,正则表达式,py知识。 过程:不断使用 GPT,遇到有问题的地方自己分析,把分析的结果告诉 GPT&am…

vagrant+virtualbox的踩坑记录

vagrant virtualbox 文章目录 vagrant virtualbox一、导入虚拟机ova文件失败二、修改虚拟机的保存位置三、无法使用xshell等软件用密码进行连接四、vagrant up失败 一、导入虚拟机ova文件失败 背景:手动删除了虚拟机文件导致无法重新导入相同名称虚拟机的ova文件…

HTML5响应式网页设计(考试题:旅游项目)

效果图 .html代码 <!DOCTYPE html> <html><head><meta name"viewport"content"widthdevice-width,initial-scale1,minimum-scale1,maximum-scale1,user-scalableno" /><meta charset"utf-8" /><title></…

【Phoenix】请求的生命周期

本文的目的是讨论Phoenix请求的生命周期。我们实战添加两个新的页面&#xff0c;并讨论整个过程是如何串起来的。 让我们从添加第一个新页面开始。 添加一个新页面 web应用通常通过将HTTP方法和路径映射到应用的某个函数来处理请求。Phoenix通过路由器来实现这个匹配。例如将…

Debian/Ubuntu 安装 NodeJS【详细步骤】

文章目录 NodeSource 简介Debian/Ubuntu 安装 NodeJS第 1 步:进入 jenkins 容器第 2 步:下载和导入 NodeSource第 3 步:创建 deb 仓库第 4 步:安装 NodeJS第 5 步:卸载NodeJS参考👉 背景:在 Docker 中安装了 Jenkins,Jenkins 镜像为 Debian 11 bullseye。 👉 目标:…

5. HTML中常用标签

5. html常用标签 5.1 标签语义 学习标签是有技巧的&#xff0c;重点是记住每个标签的语义。简单理解就是指标签的含义。即这个标签是用来干嘛的。 根据标签的语义&#xff0c;在合适的地方给一个最为合理的标签。可以让页面结构给清晰。 5.2 标题标签 <h1>-<h6>…

openssl+sha256开发实例(C++)

文章目录 一、 sha256介绍二、sha256原理三、openssl sha256实现 一、 sha256介绍 SHA-256&#xff08;Secure Hash Algorithm 256-bit&#xff09;是一种哈希算法&#xff0c;属于 SHA-2&#xff08;Secure Hash Algorithm 2&#xff09;家族的一员。SHA-256 产生的哈希值是一…

HTTP1.1协议详解

目录 协议介绍协议的特点存在的问题协议优化方案与HTTP 1.0协议的区别 协议介绍 HTTP 1.1是一种基于文本的互联网实体信息交互协议&#xff0c;是Web上任何数据交换和客户端-服务器交互的基础。它允许获取各种类型的资源&#xff0c;如HTML文档&#xff0c;并支持在互联网上交…

嵌入式养成计划-53----ARM--串口通信

一百三十四、串口通信 134.1 串口的概念 串口&#xff08;UART&#xff09;&#xff1a;Universal asynchronous receiver transmitter (USART/UART)&#xff0c;通用异步接收发送器通过串口可以实现两个不同机器之间的信息交互串口通信属于总线通信的一种 134.2 总线的概念…

2023.11.16-hive sql高阶函数lateral view,与行转列,列转行

目录 0.lateral view简介 1.行转列 需求1: 需求2: 2.列转行 解题思路: 0.lateral view简介 hive函数 lateral view 主要功能是将原本汇总在一条&#xff08;行&#xff09;的数据拆分成多条&#xff08;行&#xff09;成虚拟表&#xff0c;再与原表进行笛卡尔积&#xff0c…

基于 Redis 实现的分布式锁

获取锁 互斥&#xff1a;确保只有一个线程获得锁 # 添加锁 利用setnx的互斥性 127.0.0.1:6379> setnx lock thread1释放锁 手动释放锁 超时释放&#xff1a;获取锁时设置一个超时时间 #释放锁 删除即可 127.0.0.1:6379> del lock两步合成一步 help setSET key value …

人工智能基础_机器学习037_多项式回归升维实战4_使用随机梯度下降模型_对天猫双十一销量数据进行预测_拟合---人工智能工作笔记0077

上一节我们使用线性回归模型最终拟合了双十一天猫销量数据,升维后的数据. 我们使用SGDRegressor的时候,随机梯度下降的时候,发现有问题, 对吧,怎么都不能拟合我们看看怎么回事现在 可以看到上面是之前的代码 上面是对数据的准备 这里我们还是修改,使用 poly=PolynomialFeatur…

Python数据容器之(元组)

我们前面所了解的列表是可以修改的&#xff0c;但如果想要传递的信息&#xff0c;不被篡改&#xff0c;列表就不合适了。 元组同列表一样&#xff0c;都是可以封装多个、不同类型的元素在内。 但最大的不同点在于&#xff1a; 元组一旦定义完成&#xff0c;就不可修改 所以…

通过Python设置及读取PDF属性,轻松管理PDF文档

PDF文档属性是嵌入在PDF文档中的一些与文档有关的信息&#xff0c;如作者、制作软件、标题、主题等。PDF属性分为默认属性和自定义属性两种&#xff0c;其中默认属性是一些固定的文档信息&#xff0c;部分信息自动生成&#xff08;如文件大小、页数、页面大小等信息&#xff09…

【ASP.NET】Hello World

文章目录 1. 几个概念2. 搭建开发环境2.1 .NET SDK2.2 IDE & Editor 3 First Project3.1 步骤3.2 模板3.3 项目结构3.4 请求的处理流程 Reference Link 1. 几个概念 .NET 是一个平台&#xff0c;包括 .NET Framework、.NET Core、ASP.NET、C#等&#xff0c;可以构建桌面、W…

requests库验证错误解决方法

用户在使用requests库进行http请求时&#xff0c;遇到了一个AuthenticationRequired&#xff08;身份验证必须&#xff09;的错误。但是&#xff0c;当使用urllib.request.urlopen进行相同的操作时&#xff0c;却能够成功。同时&#xff0c;用户提供了自己的系统信息&#xff0…