【MySQL】多表查询

上一篇介绍了外键约束,外键约束是用于连接两张数据表的,所以在此基础上就有了多表查询
之前的查询都是单表查询,这里我们会将多个数据表的数据结果返回在一张表上

文章目录

  • 1.多表关系
  • 2.多表查询
    • 2.1 多表查询分类
    • 2.2 内连接
    • 2.3 外连接
    • 2.4 自连接
    • 2.5 联合查询
    • 2.6子查询

1.多表关系

即表和表之间的关系,主要分为一对一,一对多和多对多

  • 一对多 : 比如教室和学生,一个教室里面有多个学生,实现一对多的关系一般是多的一方建立外键,一的一方建立主键
  • 多对多 : 比如学生和课程,一个学生可以选择多门课程,一门课程也可以有多名学生选择,实现多对多关系需要一张中间表,中间表至少要有两个外键来分别关联两张表的主键
  • 一对一 : 比如学生和学号,一个学生就对应一个学号,实现一对一在任意一方加入外键然后关联另一方的主键即可,外键需要设置约束为unique

2.多表查询

在单表查询中我们所使用的关键字为select,在多表查询中同样是这个关键字
单表查询的语句如下:

select 字段1,字段2...... from 表名;

最基础的多表查询就是在from后面添加多个表名,表名之间同样是使用逗号隔开,但直接这样查询的结果是表里面会有很多重复且无效的数据,因为查询结果是按照笛卡尔积进行操作的
这里简单介绍下笛卡尔积:

假设两个集合A和B,AB两个集合的所有组合情况就是笛卡尔积,如下图

在这里插入图片描述
换到数据表就是两张数据表的所有组合情况,这显然不是我们想要的结果,所以在此基础上我们需要加上条件消除掉无效的笛卡尔积

2.1 多表查询分类

主要分为连接查询和子查询两大类,查询连接又可分为内连接,左/右外连接和自连接
其中自连接是自己和自己进行连接查询,是需要使用别名的,其它的连接查询主要是查询的数据范围不同,如下图:
在这里插入图片描述
子查询则是SQL语句中嵌套select语句进行查询

2.2 内连接

内连接查询的部分是两张表的交集,其语法分为隐式内连接和显式内连接两种

隐式:
  select 字段列表 from1,2 where 条件;
显式:
  select 字段列表 from1 inner join2 on 连接条件;  inner可以省略

2.3 外连接

外连接分为左外连接和右外连接

左外连接:
  select 字段列表 from1 left join2 on 连接条件;
右外连接:
  select 字段列表 from1 right join2 on 连接条件;

2.4 自连接

自连接是自己和自己进行连接查询,需要给表取两个不同的别名

select 字段列表 from1 别名1 join1 别名2 on 连接条件;

自连接查询可以使用内连接查询语法,也可以使用外连接查询语法,主要是看实际情况来决定

2.5 联合查询

将多次查询的结果进行合并,形成一个新的查询结果集,这里有新的关键字union和union all

select 字段列表 from1......    
union (all)
select 字段列表 from2......;

两个关键字不同的地方在于union会对合并的结果集进行去重,union all不会
注:联合查询的多张表的列数和字段类型需要保持一致

2.6子查询

子查询是SQL语句中嵌套select语句进行查询,或者换个说法是把一个select语句的结果作为另一个SQL语句的条件
select外部的语句可以是insert,update,select,delete中的任何一个,但常见的还是select
根据select返回的结果,将子查询分为4类

  • 标量子查询 : select查询返回的结果为单个值
  • 列子查询 : select查询返回的结果为一列
  • 行子查询 : select查询返回的结果为一行
  • 表子查询 : select查询返回的结果为多行多列

下面的子查询的语法以外部语句为select为例

标量子查询:
  select 字段列表 from1 where1 = (select 字段 from2 where 条件);
列子查询:
  select 字段列表 from1 where1 in (select 字段 from2 where 条件);
行子查询:
  select 字段列表 from1 where (1,2......) = (select 字段1,字段2...... from2 where 条件) 
表子查询:
  select 字段列表 from1 where (1,2......) in (select 字段1,字段2......from2 where 条件);

上面的运算符和语法不是固定的,要根据实际情况来选择
多表查询到这就结束了,下一篇是事务,完

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序nodejs+vue+uniapp超市网上购物商城系统

超市购物系统用户端要求在系统的安卓手机上可以运行,主要实现了管理端;首页、个人中心、用户管理、商品分类管理、商品信息管理、商品入库管理、订单信息管理、订单配送管理、订单评价管理、退货申请管理、换货申请管理、系统管理,用户端&…

【大数据学习篇7】小试牛刀统计并且分析天猫数据

本项目基于搭建大数据环境,通过将数据存放在HDFS上,从HDFS中获取数据,然后根据实际需求通过Spark或Spark SQL对数据进行读取分析,将分析结果存储到HBase表中,最终通过 ECharts数据可视化工具基于Python Web平台实现数据…

docker-compose 实现Seata Server高可用部署 | Spring Cloud 51

一、前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事…

看模型、做技术交底、做项目汇报,图新说数字化汇报平台引领交互式汇报新模式

现场汇报效果不好,导致丢了一个项目! 项目汇报平淡无奇,方案屡次被毙! 面对专家质疑,回答苍白无力! 估计大家都有过这种经历和感受。 详细分析一下,基本上有以下几个方面的原因: …

虚幻or现实?堆区、栈区真实存在吗?是操作系统在骗你罢了...

文章目录 💐专栏导读💐文章导读🐧引例 🐦进程地址空间🐦虚拟地址与物理内存的联系🔔回答引例中的问题🔓写时拷贝 🐦虚拟地址存在的意义🔓malloc的本质 💐专栏…

装饰者设计模式解读

问题引进 星巴克咖啡订单项目(咖啡馆): 1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 2) 调料:Milk、Soy(豆浆)、Chocolate 3) 要求在扩展新的咖啡种类时&#x…

接口测试全流程扫盲,让我看看有哪些漏网之鱼

目录 扫盲内容: 1.什么是接口? 2.接口都有哪些类型? 3.接口的本质及其工作原理是什么? 4.什么是接口测试? 5.问什么要做接口测试? 6.怎样做接口测试? 7.接口测测试点是什么?…

一些云原生开源安全工具介绍

本博客地址:https://security.blog.csdn.net/article/details/130789465 一、Kubernetes安全监测工具kube-bench kube-bench是一个用Golang开发的、由Aqua Security发布的自动化Kubernetes基准测试工具,它运行CIS Kubernetes基准中的测试项目。这些测试…

MySQL高级篇第一天

目录 一、索引 二、索引结构 三、索引分类 四、索引语法 五、索引设计原则 六、视图 七、存储过程与概述 八、触发器 九、总结 一、索引 (一)索引概述 索引是一种能够帮组Mysql高效的从磁盘上查询数据的一种数据结构,这些数据结构以某…

用WaveNet预测(Adapted Google WaveNet-Time Series Forecasting)

目录 剧情简介: 数据来源 加载数据 分割数据和可视化 时间序列的多元波网模型:实现(多步预测) 创建模型 创建数据集 数据准备 1- Training dataset preparation 2- Validation dataset preparation Train the Model with TPU: 使用经过训练的适应Google WaveNet预测…

YOLO NAS note 1

Git Hub: https://github.com/Deci-AI/super-gradients Yolo-Nas 的代码比YOLO v8 还恐怖。之前的YOLO数据可以通过: coco_detection_yolo_format_train, 和 coco_detection_yolo_format_val 自动转。 这里写目录标题 Train数据获取数据增强训练criteri…

ChatGPT 提问,软件杂项部分

堆内存与栈内存一般分别 有多少 ChatGPT 堆内存和栈内存的大小取决于操作系统和编译器的限制以及程序的运行环境。以下是一些常见的默认大小范围,但请注意这些值可以因环境而异: 栈内存大小: Windows平台:默认情况下&#xff…

CNN实现手写数字识别(Pytorch)

CNN结构 CNN(卷积神经网络)主要包括卷积层、池化层和全连接层。输入数据经过多个卷积层和池化层提取图片信息后,最后经过若干个全连接层获得最终的输出。 CNN的实现主要包括以下步骤: 数据加载与预处理模型搭建定义损失函数、优…

应用现代化中的弹性伸缩

作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes、KubeSphere、KubeKey 等。 2019 年,我在给很多企业部署虚拟化,介绍虚拟网络和虚拟存储。 2…

微服务架构初探

大家好,我是易安!我们今天来谈一谈微服务架构的前世今生。 我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的…

建立在Safe生态的—GameFi SocialFi双赛道项目No.1头号玩家

最近大家关注的重点在BRC-20和MEME项目,人们似乎更在意短期的投机回报。而在这之外,一个web3的游戏——No.1头号玩家却得到了大量的玩家支持。 据了解,No.1是一个GameFi & SocialFi的双赛道web3游戏,中文名称为头号玩家。它是…

光纤衰减器作用及使用说明

在光纤通信中,光信号的强度过大或过小都会对信号的传输和接收产生不良的影响,因此光衰减器在光通信系统中起到了重要的作用。那什么是光衰减器呢?它又有什么作用呢?下面跟着小易一起来了解一下吧! 一、什么是光纤衰减…

HUSTOJ中添加初赛练习系统

文章目录 0. 基于hustoj二开的初赛练习系统,QQ4705852261. 主界面2. 练习界面3. 模拟考试界面4. 查看试卷回放5. 后台操作界面6. 后台试题分类-列表7.后台试题-列表8. 后台试题-添加9. 后台试卷结构-设置 0. 基于hustoj二开的初赛练习系统,QQ470585226 …

[笔记]渗透测试工具Burpsuit《一》Burpsuit介绍

文章目录 前言一、安装配置1.1 环境1.2 安装过程1.3 科技过程 二、常用功能2.1 Manual penetration testing features2.2 Advanced/custom automated attacks2.3 Automated scanning for vulnerabilities2.4 Productivity tools2.5 Extensions 三、拓展功能 前言 Burp Suite(b…

一、预约挂号微服务模块搭建

文章目录 一、预约挂号微服务模块搭建1、项目模块构建2、sql资源3、构建父工程(yygh-parent)3.1、添加配置pom.xml 4、搭建common父模块4.1、搭建common4.2、修改配置pom.xml 5、搭建common-util模块5.1、搭建common-util5.2、修改配置pom.xml5.3、添加公…