MySQL学习(9):多表查询

news2025/2/25 12:59:25

1.多表关系

1.1一对多

1.2多对多

1.3一对一

设置外键唯一,是为了让两张表的数据一一对应

2.多表查询

2.1多表查询案例

现有父表(dept)如下:

子表(emp)如下:

让子表的dept_id作为外键与主表的id产生联系。

*如果同时查询2个表的信息:

select * from emp,dept;

则数据库并不会报错,而是会给出2个表每行数据排列组合出的结果:下图中截取了产生的102行数据的一部分。

显然这种结果是没有意义的。

要去除冗余结果,需要使用下面的语句:

select * from emp,dept where emp.dept_id = dept.id;

这条语句产生了16行结果,因为子表中第17行数据的dept_id是null

2.2内连接

内连接查询指的是查询2张表的交集部分

内连接查询有2种语句:隐式内连接、显式内连接

select 字段列表 from 表1,表2 where 条件...;
#隐式内连接

select 字段列表 from 表1 join 表2 [inner] on 连接条件...;
#显式内连接。inner可以忽略
#二者除了语法不同,并没有本质区别

以前面的例子为例,其2种内连接查询写法如下:

显式内连接语句中给2张表起了别名

得到结果一部分如下:

2.3外连接

外连接有2种:左外连接、右外连接

select 字段列表 from 表1 left [outer] join 表2 on 连接条件...;
#左外连接,查询表1的所有数据以及2张表的交集部分

select 字段列表 from 表1 right [outer] join 表2 on 连接条件...;
#右外连接,查询表2的所有数据以及2张表的交集部分

继续以2.1的例子为例,其左外连接查询写法如下:

左连接结果如下:

其右外连接查询写法如下:

上图第2条语句是以左外连接代替右外连接的写法

右连接结果如下:

2.4自连接

以下图的表为例,managerid字段的数据填的是id字段的数据,自身的字段之间产生了联系。可以理解为managerid字段是外键与主键id产生了联系。

因此,自连接可以使用内连接与外连接的语句,只需要对自身起2个不同的别名

*内连接案例语句如下:

*连接案例语句如下:

外连接可以把外键处数据值为null的数据也查询出来

*2.5联合查询

联合查询(union查询)就是把多次查询的结果合并

select 字段列表 from 表A...
union [all]
select 字段列表 from 表B...;
#2条select语句后的字段列表要保持列数相同,也就是字段个数相同

以下图为例:

其结果为:

从上图可以看出,数据可以产生重复,如果想避免重复,可以使用下面的语句:

结果为:

union all会将所有结果合并在一起,union会对合并后的结果去重

3子查询

sql语句(select、update、delete)中嵌套select语句,称为嵌套查询,又称子查询

3.1标量子查询

子查询返回的结果为单个值,则称为标量子查询

以下图为例:

a语句先查询出东方白的入职日期为2009-02-12。再由b语句进行条件筛选查询。那么就可以通过子查询将2者合并为1条语句:

3.2列子查询

子查询返回的结果为一列,则称为列子查询。

重用操作符:in、not in、any、some、any

in在指定的集合范围内多选一
not in不在指定的集合范围内
any子查询返回列表中,有任意一个满足即可
some同any
all子查询返回列表中所有值都必须满足

in案例:

all案例:

any案例:

3.3行子查询

子查询返回的结果为一行,则称为行子查询。

重用操作符:in、not in、=、!=

使用案例如下:

*上图中出现了(salary,managerid)这样的(字段1,字段2)形式的条件判断方法

3.4表子查询

子查询返回的结果为多行多列,则称为表子查询。

常用操作符为in

in使用案例如下:

结合外连接使用案例如下:

4.多表查询总分类

连接查询内连接(查询A、B交集)隐式内连接
显式内连接
外连接左外连接(查询左表数据以及2表的交集数据)
右外连接(查询右表数据以及2表的交集数据)
自连接(当前表与自身的连接查询)
子查询标量子查询返回的结果为单个值
列子查询返回的结果为一列
行子查询返回的结果为一行
表子查询返回的结果为多行多列

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

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

相关文章

重要文件放u盘还是硬盘?硬盘和u盘哪个适合长期存储

在数字时代,我们每天都会处理大量的文件。其中,不乏一些对我们而言至关重要的文件,如家庭照片、工作文档、财务记录等。面对这些重要文件的存储问题,我们通常会面临:“重要文件放U盘还是硬盘”、“硬盘和U盘哪个适合长…

辐射神经场算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting

辐射神经场算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting 1. Instant-NGP1. MultiResolution Hash Encoding1.2 Accelerated Ray Marching1.3 实验结果 2. Mip-NeRF 3602.1 场景参数化2.2 在线蒸馏2.3 失真正则化2.4 实验结果 3. 3D Gaussian Splatting3.1 Dif…

盲人出行好帮手:蝙蝠避障让走路变简单

在一片无光的世界里,每一步都承载着探索与勇气。我是众多盲人中的一员,每天的出行不仅是从A点到B点的物理移动,更是一场心灵的征程。我的世界,虽然被剥夺了视觉的馈赠,却因科技的力量而变得宽广…

kibana连接elasticsearch(版本8.11.3)

前言 elasticsearch在8版本之后就出现了很大变化,由于kibana版本需要需elasticsearch进行版本对象,kibana连接方式也出现了很大变化。我在这里记录下自己的踩坑记录。 服务部署 本文中的服务都是在docker环境中部署的。其中elasticsearch版本和kibana版…

手机被删除的短信怎么恢复?3个专家级恢复指南,拯救你的短信

想象一下,你正在翻阅一本尘封已久的日记,突然,几页重要的篇章不见了。那种失落和焦虑,想必与失去手机短信的感觉不相上下。 手机短信作为一种传统的通讯方式,仍然承载着我们的许多重要回忆和关键信息。被删除的短信怎…

Java | Leetcode Java题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack {Queue<Integer> queue;/** Initialize your data structure here. */public MyStack() {queue new LinkedList<Integer>();}/** Push element x onto stack. */public void push(int x) {int n queue.size();…

企业如何选择平滑替代传统的FTP系统呢?

面对现在数据量的激增和网络安全威胁的不断演变&#xff0c;许多传统企业在用传统的FTP系统都面对着许多的安全和传输问题&#xff0c;原系统已经逐步无法满足现代企业的需求&#xff0c;今天小编将深入细讨企业为什么需要替代FTP系统的原因&#xff0c;以及如何选择合适企业的…

昇思MindSpore学习笔记6-06计算机视觉--Vision Transormer图像分类

摘要&#xff1a; 记录MindSpore AI框架使用ViT模型在ImageNet图像数据分类上进行训练、验证、推理的过程和方法。包括环境准备、下载数据集、数据集加载、模型解析与构建、模型训练与推理等。 一、概念 1. ViT模型 Vision Transformer 自注意结构模型 Self-Attention Tran…

CSS3实现彩色变形爱心动画【附源码】

随着前端技术的发展&#xff0c;CSS3 为我们提供了丰富的动画效果&#xff0c;使得网页设计更加生动和有趣。今天&#xff0c;我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观&#xff0c;而且可以应用于各种网页元素&#xff0c;比如加载指示器或…

【数据结构】线性表----队列详解

1. 队列的基本概念 话不多说&#xff0c;直接开始&#xff01; 队列是一种线性数据结构&#xff0c;同栈类似但又不同&#xff0c;遵循先进先出&#xff08;FIFO, First In First Out&#xff09;的原则。换句话说&#xff0c;最先进入队列的元素会最先被移除。这样的特点使得…

MyBatis拦截器在实际项目中的应用

MyBatis 是一个流行的 Java 持久层框架&#xff0c;它简化了数据库访问的复杂性&#xff0c;为开发者提供了强大的功能。其中&#xff0c;MyBatis 拦截器是一个非常有用的特性&#xff0c;可以帮助开发者灵活地解决各种问题。 一、MyBatis 拦截器 1.1 从执行 SQL 语句的核心流…

力扣爆刷第163天之TOP100五连刷81-85(回文链表、路径和、最长重复子数组)

力扣爆刷第163天之TOP100五连刷81-85&#xff08;回文链表、路径和、最长重复子数组&#xff09; 文章目录 力扣爆刷第163天之TOP100五连刷81-85&#xff08;回文链表、路径和、最长重复子数组&#xff09;一、234. 回文链表二、112. 路径总和三、169. 多数元素四、662. 二叉树…

sort命令

简介 sort是在Linux里非常常用的一个排序命令。将文件的每一行作为一个单位&#xff0c;从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;默认将他们按升序输出。 常用参数 -u &#xff1a;去除重复行 -r &#xff1a;降序排列&#xff0c;默认是升序 …

华为HCIP Datacom H12-821 卷36

1.单选题 在PIM- SM中&#xff0c;以下关于RP 的描述&#xff0c;错误的是哪一选项? A、在PIM-SM中&#xff0c;组播数据流量不一定必须经过RP的转发。 B、对于一个组播组来说&#xff0c;可以同时有多个RP地址&#xff0c;提升网络可靠性。 C、组播网络中&#xff0c;可以…

一篇文章带你解密最近爆火的消费增值模型!

今天&#xff0c;我非常激动地向您介绍一个令人振奋的成功故事。我们的合作伙伴在短短一个月内实现了业绩的飞跃&#xff0c;达到了百万级别的销售额&#xff0c;同时他们的用户活跃度也保持在极高的水平&#xff0c;平均每天有8万至10万的在线用户。这一成就的取得&#xff0c…

ARMV8安全特性:Pointer Authentication

文章目录 前言一、Introduction二、Problem Definition三、Pointer Authentication3.1 Instructions3.2 Cryptography3.3 Key Management 四、Sample Use Cases4.1 Software Stack Protection4.2 Control Flow Integrity (CFI)4.3 Binding Pointers to Addresses 五、Security …

十大优秀AI人工智能作词软件有哪些?

1、妙笔生词&#xff1a;国内专业智能作词工具&#xff0c;是一款非常优秀的国内作词软件&#xff0c;它可以选择语言&#xff0c;风格&#xff0c;韵脚一键生成歌词&#xff0c;也可以仿写歌词&#xff0c;可以续写歌词&#xff0c;可以智能取歌名&#xff0c;找优秀词句&…

华宇携TAS应用中间件亮相2024年山东江信智能信创产品推介会

信创产业是数据、网络安全的基础&#xff0c;也是“新基建”的重要内容&#xff0c;将成为拉动经济发展的重要抓手之一。 7月5日&#xff0c;以“信守时代机遇&#xff0c;创造辉煌未来”为主题的山东江信智能信创产品推介会在济南举办。本次产品推介会汇聚了国内众多信息技术…

windows sshkeygen 多平台添加配置

文章目录 .ssh目录生成新的ssh配置添加公钥到仓库验证 .ssh目录 windows下一般为&#xff1a;C:\Users\15237\.ssh &#xff0c;其中“15237”为当前登录用户 生成新的ssh .ssh目录下打开“Git Bash Here”&#xff08;如果没有&#xff0c;先安装 Git 软件&#xff09; 执…

阿一课代表今日分享之使用dnscat2 进行dns隧道反弹shell(直连模式linux对linux)

DNS介绍 DNS是域名系统(Domain Name System)的缩写&#xff0c;是因特网的一项核心服务&#xff0c;它作为可以将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。 DNS的记录类型有很多&a…