MySQL查询——joininunion

news2024/11/22 11:21:04

MySql多表查询的几种方法

      • 连接查询——join
      • 自连接查询
      • 子查询——🛠in
      • 合并查询——Union

认识MySQL数据库的多表查询,在对大量数据进行查询时仅仅使用一些基本的SQL语句已经无法满足我们日益增长的需求,如果要对多表进行查询就不得不认识以下几种方法,常见的查询方法是使用笛卡尔积,相信学过数据库的小伙伴肯定听过这个专业名词,那么数据库中的笛卡尔积是什么?

笛卡尔积:对于一个或多个表进行排列组合得到的一张新的表。

意思就是如果有两张表:

tb_1

idnameclass_id
1张三1
2李四2

tb_2

class_idclass
12023班
22022班

两个表的笛卡尔积:

idnameclass_ididclass
1张三112023班
1张三122022班
2李四212023班
2李四222022班

根据上面的例子可以看出其实两个表的笛卡尔积就是tb_1xtb_2,两个表相乘得到的结果。

SQL语法也比较简单:

#上面例子的语句
SELECT * FROM tb_1,tb_2;
#笛卡尔积语句格式
SELECT column1, column2, ... FROM  table1(1),table2(表2;

查询数据时的步骤:

① 提取出题目中关键信息并找到对应的表

② 对表进行计算笛卡尔积

③ 对表中数据进行筛选

连接查询——join

  1. 内连接join语法格式如下:
SELECT column1, column2, ... FROM table1 join table2
#添加条件时使用on连接
SELECT column1, column2, ... FROM table1 join table2 on (条件1) 

选择你需要查询的列名,当然也可以是*(全部数据),后面使用on连接表示两个表之间数据关联的条件。

例如上面的两个表,查询学生的姓名和班级:

select name,class from tb_1 join tb_2 on tb_1.class_id=tb_2.id;

解读:将需要查询的条件从两个表之间获取,然后使用连接查询,将两个表连接然后使用id这个筛选条件将属于张三的班级id和每个班级对应的id进行匹配。

在这里插入图片描述

  1. 外连接left joinright join语法格式和内连接一样:
SELECT column1, column2, ... FROM table1 [left | right] join table2
#添加条件时使用on连接
SELECT column1, column2, ... FROM table1 [left | right]join table2 on (条件1) 

使用left join时只会针对左表进行查询。如果右表有一个数据,左表并没有,就不会显示在结果中。反之。使用right join也是如此。

比如将上面的tb_1修改一下(将李四的班级id修改为3):

idnameclass_id
1张三1
2李四3

此时使用查询学生的班级和姓名其结果:

select name,class from tb_1 left join tb_2 on tb_1.class_id=tb_2.id;
#只针对tb_1(左边的表)所存在的列,对其他连接的数据是否存在无关

在这里插入图片描述

select name,class from tb_1 right join tb_2 on tb_1.class_id=tb_2.id;
#只针对tb_2(右边的表)所存在的列,对其他连接的数据是否存在无关

在这里插入图片描述

自连接查询

自连接是指在同一个表中进行连接查询,连接的主键和外键都是来自同一个表,自身进行连接。

MySQL自连接查询可以用于解决一些特定的需求,例如查询一个表中和张三同一个班的同学、查询商品的相似商品信息等。

自连接查询的一般语法如下:

SELECT t1.column_name1, t1.column_name2, ..., t2.column_name 
FROM table_name t1, table_name t2 
WHERE condition(条件);

其中,t1t2是同一张表,它们之间的连接条件通过WHERE子句指定。

下面举一个部门表的例子,在班级表中,一个班级有一个班主任,一个班级有多名学生,一个班主任可以管理多个班级,SQL语句如下:

SELECT 学生姓名,学生班级 FROM 班级表  t1,班级表 t2
WHERE t1.班主任id = t2.班级所属班主任Id 
AND t1.班主任姓名 = "张三";

自连接查询能够提高查询效率减少数据库的访问次数,但是也容易出现查询错误,因此,在实际应用时需要仔细考虑连接条件和查询语句的编写。

子查询——🛠in

子查询是通过多个查询语句而后得到的查询结果,由最外层的查询语句返回最终结果,里面的查询语句是将数据范围缩小,可以对单表使用,也可以对多表使用。

MySQL自连接查询可以用于解决一些特定的需求,例如查询一个表中和张三同一个班的同学、查询商品的相似商品信息等。

子查询的一般语法如下:

SELECT t1.column_name1, t1.column_name2, ..., t2.column_name 
FROM table_name 
WHERE column_name 
[NOT] inSELECT column_name1 FROM table_name WHERE condition)#后面也可以再接in语句

其中,查询结果的返回值由另一个查询语句进行返回,相对于一个套娃🎎过程。

一般on是与join一起使用,而且on返回是单行结果查询,意思是只能返回一个结果。而in可以返回一个或多个结果。

比如说,查询张三这个班级中其他的所有成员:(ps:我们先在表中添加几条数据)

select name from tb_1 where class in (select class from tb_1 where name='张三')

在这里插入图片描述

当然,多行子查询不仅有in还有exist,意思是存在,也是一个套娃的过程……

语法格式如下:

SELECT t1.column_name1, t1.column_name2, ..., t2.column_name 
FROM table_name 
WHERE column_name 
[NOT] EXISTSSELECT column_name1 FROM table_name WHERE condition)#后面也可以再接exist语句

合并查询——Union

在实际应用中,对同一个数据如果有多个条件只需要满足其中一个,可以使用Union(联合体)来对数据进行查询操作。单独使用union可以针对相同的结果进行去重操作

语法格式如下:

#注意在查询结果时需要注意结果的字段名一致(如果不同表一般需要指定字段名)
SELECT t1.column_name1 FROM table_name where condition
union[ALL]#union all 取消去重操作
SELECT t1.column_name1 FROM table_name where condition
#使用 or 来实现
SELECT t1.column_name1 FROM table_name where condition or condition

虽然看起来可以使用or来替换,这两个查询语句的区别在union可以联合多个表,or一般是对同一个表进行操作。

查询姓名为李四或者ID号为1的学生信息:

select * from tb_1 where name='李四'
union
select * from tb_1 where id = 1;

在这里插入图片描述

以上就是一些常用的Mysql联合查询语句,希望可以帮助到小伙伴们!(o゚v゚)ノ

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络基础】测试2 物理层

文章目录 判断题选择题辨析题应用题 判断题 现在的无线局域网常用的频段是2.8GHz和5.4GHz。 多模光纤只适合于近距离传输。√ 数据在计算机内部多采用串行传输方式,但在通信线路上多采用并行传输方式。 统计时分复用可以按需动态分配时隙。√ 相对于同步时分复用…

安装Ubuntu系统

## ubuntu 22.04 环境处理(按顺序安装) 1. 搜索并打开“windows 功能”窗口 勾上图示的2项,点确定安装,可能要求重启电脑 2. windows store 中 安装ubuntu 22.04 wsl 一定要登录Microsoft Store 账号再操作 3.在ubuntu安装node.j…

以SpringMVC入门案例分析服务器初始化过程、单次请求流程

文章目录 1,SpringMVC概述2,SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器…

RabbitMQ --- 死信交换机(一)

前言 当我们在使用消息队列时,难免会遇到一些消息被拒绝,重复投递或者超时等异常情况。这些异常消息如果不被正确处理,将会阻碍整个消息系统的正常运行。而此时,死信交换机(Dead Letter Exchange,简称DLX&…

【遇到dfs问题,点进来看看思路】【dfs本质之一 全排列思想解决大部分dfs】例题1.全排列 例题2.单词接龙

总之就是 在已知格线上,填充可用数据, 如果回退到A,那么把A之前所用数据,换一个,并且A之后的数据都重新填写 这就是全排列(截取的最关键部分,往下看) 这样的话,就是dfs的…

【节点边际电价】机组运行约束对机组节点边际电价的影响分析(Matlab代码实现)​

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2023年美国大学生数学建模竞赛F题绿色GDP解题全过程文档及程序

2023年美国大学生数学建模竞赛 F题 绿色GDP 原题再现: 背景   国内生产总值(GDP)可以说是衡量-一个国家经济健康状况的最知名和最常用的指标之一。它通常被用于确定一个国家的购买力和获得贷款的机会,为国家提出促进其gdp的政策和项目提供动力。GDP衡…

Springboot +Flowable,流程表单应用之外置表单(HTML形式)(一)

一.简介 整体上来说,我们可以将Flowable 的表单分为三种不同的类型: 动态表单 这种表单定义方式我们可以配置表单中每一个字段的可读性、可写性、是否必填等信息,不过不能定义完整的表单页面。外置表单 外置表单我们只需要定义一下表单的 k…

国考省考行测:求基期量,去年的量,增长率r小于6%化除为乘,否则直接相除

国考省考行测:求基期量,去年的量 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和…

AIGC产业研究报告2023——三维生成篇

定义 人工智能三维生成是指利用深度神经网络学习并生成物体或场景的三维模型,并在三维模型的基础上将色彩与光影赋予物体或场景使生成结果更加逼真。在应用中,生成物体或场景的三维模型称为三维建模,生成三维模型的色彩与光影称为三维渲染。…

在博客逮到一个阿里8年测试开发,聊过之后我悟了....

老话说的好,这人呐,一旦在某个领域鲜有敌手了,就会闲得疋虫疼。前几天我在上班摸鱼刷社区的时候认识了一位腾讯测试开发大佬,在阿里工作了8年,因为本人天赋比较高,平时工作也兢兢业业,现在企业内…

异常检测相关论文记录

1、Unsupervised anomaly detection algorithms on real-world data: how many do we need?真实世界数据的无监督异常检测算法:我们需要多少? Abstract: 将所考虑的算法在所有数据集上的相对性能进行可视化和聚类,我们确定了两个…

10分钟轻松实现三菱FX3UPLC连接阿里云平台

MQTT协议网关串口连接三菱FX3UPLC操作说明v1.3 目录 一. 使用流程 二. 准备工作 2.1 需要准备如下物品 2.2 LF220网关准备工作 2.3 PLC准备工作 2.4 电脑的准备工作 2.5 MQTT服务器准备工作 三. 阿里云IoT平台配置步骤 3.1 创建产品 3.2 添加设备 3.3 配…

pip下载包报错ERROR: No matching distribution found for xxx时的解决方案

前言 当我们使用python自带的pip安装一些包时,可能会报以下错误: 出现这种情况有三种可能: 第一种可能: pip的版本过低,需要升级一下,可以执行以下命令进行尝试 python -m pip install --upgrade pip第…

MySQL---存储函数、触发器

1. 存储函数 MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算 或功能写成一个函数。 存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。 存储函数与存储过程的区…

如何裁剪图片,裁剪图片的几个方法

如何裁剪图片,裁剪图片的几个方法你知道吗?在日常生活中,当浏览图片时,常会想要对某些图片进行裁剪,或从生活照片中裁剪自己的部分。如何处理这种情况?裁剪图片可去除图像不必要的部分,让其更美…

[日记]LeetCode算法·二十六——二叉树⑥ 红黑树(插入与删除,附图)

承接上一篇AVL树AVL树,红黑树相较于AVL树,就相当于完全二叉树相当于AVL树,如何在性能退化和维护成本之间做出CS中经典的trade-off 文章目录 红黑树的概念红黑树查询效率红黑树的插入1 插入节点N为根节点2 插入节点N的父节点P为黑色3 N的父节…

雷鸟Air Plus体验:视觉大幅升级,影视/办公/游戏全能胜任

雷鸟BirdBath系列XR眼镜一直保持着较快的迭代频率,如今迎来该系列第三款产品:雷鸟Air Plus,新品在视觉体验上得到大幅升级,不仅FOV达到49,边缘成像质量更高,搭配索尼旗舰级Micro OLED屏实现最高120Hz刷新率…

LoRa温振变送器的类型特点及技术参数

自电器文明开始,短短一个世纪,我们对科学探索已经从工业到达了智能化的程度。传感器的应用,不断为时代带来惊喜,各行各业都在争相抓紧契机,利用科技不断创新,推动着整个传感器行业的发展。在工业自动化系统…

redis单机版本Java代码实践

pom依赖 引入redis的starter以及commons-pool2的依赖&#xff0c;commons-pool2是配置连接池需要使用的&#xff0c;不引入&#xff0c;只有连接池配置是不会创建连接池的 <!-- redis --><dependency><groupId>org.springframework.boot</groupId><…