MySQL零基础教程16—表连接进阶

embedded/2025/3/6 8:12:18/

复习表别名

之前已经学习过,查询的时候可以使用as来对检索的列进行重命名,这样可以让sql更加简介,增强易读性(as可以省略)

此外,使用表别名还可以支持在一条select语句中,一个表是被多次使用

自连接

我们来构建一个需求:

我知道有一位教师名字叫做王小强,我想知道王小强是什么级别的教师,并且全校跟他一个级别的教师都有谁:

selectt1.teacher_name,t1.title
fromteachers as t1,teachers as t2
wheret1.title = t2.titleand t2.teacher_name = '王小强';

在这里插入图片描述
这里边引申一下, 我们如果把上边的sql改成这样子:

selectt1.teacher_name,t1.title
fromteachers as t1,teachers as t2
wheret1.title = t2.titleand t1.teacher_name = '王小强';

在这里插入图片描述
t1和t2不是都是同一个teachers的别名吗,为什么第二条sql执行的结果是这样的呢?

首先因为teachers表建立了自连接,所以就会形成教师表自身的笛卡尔积

对于第一条sql,where过滤条件执行:

  • t2.teacher_name = '王小强':只保留 t2 中姓名为“王小强”的记录
  • t1.title = t2.title:筛选 t1 中与 t2(即王小强)职称相同的记录

解释:找到所有职称与“王小强”相同的教师(包括王小强自己)

对于第二条sql执行逻辑:

  • t1.teacher_name = '王小强':只保留 t1 中姓名为“王小强”的记录
  • t1.title = t2.title:筛选 t2 中与 t1(即王小强)职称相同的记录

解释:

t1 中固定为“王小强”的记录(1行)。

t2 中所有职称与“王小强”相同的记录(共2行:王小强和张伟)。

最终结果会 重复显示“王小强”,次数等于 t2 中满足条件的行数。

为什么第二条SQL出现重复?

其实本质是笛卡尔积的副作用:当 t1 固定为“王小强”时,t2 中每一条职称相同的记录都会与 t1 组合,导致重复。

结果行数公式:
结果行数 = t1 中匹配 teacher_name=‘王小强’ 的行数 × t2 中匹配相同职称的行数。

外部连接

左连接:left join

假如我们要查询下边的数据:

找出来所有教师的工号,以及教师担任班主任的班级名称

这里边可能包含一种情况,就是有的教师可能不是班主任,没有关系,也要一起查询出来:

selectteachers.teacher_id,classes.class_name
fromteachersleft join classes on teachers.teacher_id = classes.head_teacher_id;

在这里插入图片描述
这里边我们使用的是left join,左连接,这样会指向join左边表的所有记录,包括没有在右边表关联起来的行

右连接:right join

同样对应的,右连接就是righjt join,我们直接使用上一条sql举例:

selectteachers.teacher_id,classes.class_name
fromteachersright join classes on teachers.teacher_id = classes.head_teacher_id;

在这里插入图片描述
这样就是把右边表的所有记录查询出来

以上就是关于连接相关的内容了,下期不讲理论,直接找几个实际的例子,实战演练!


http://www.ppmy.cn/embedded/170434.html

相关文章

解决最长无重复子串问题

在编程面试中,字符串处理常常是考察算法能力的重要部分。今天,我们将探讨一个经典问题——最长无重复子串问题,并给出 Python 代码实现。 问题描述 给定一个字符串 s,你需要找到其中最长的无重复字符的子串,并返回它…

PyTorch :梯度详解

PyTorch 中的 torch.Tensor 梯度详解 PyTorch 是一个广泛使用的深度学习框架,它以其动态计算图和强大的自动微分(Autograd)机制而闻名。在训练神经网络时,梯度计算是反向传播算法的核心。 目录 Tensor 与 requires_grad 属性动态…

office或者word排版中,复制/黏贴进来文字不会自动换行,如何处理?

李升伟 整理 一、思考与分析 在Office或Word中复制粘贴文字时,文字不会自动换行,需要处理这个问题。首先,我得回想一下常见的原因和解决方法。可能的情况有很多,比如文本带有硬回车、段落格式设置问题,或者文本框的自…

鸿蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏,内容栏和公工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示&am…

在Windows实现将Docker Desktop安装至非系统盘(2025年3月测试有效)

前提条件: 需要提前安装好WSL2。 一、下载 下载链接:Docker Desktop: The #1 Containerization Tool for Developers | Dockerhttps://www.docker.com/products/docker-desktop/二、安装 默认安装会安装到C盘(C:\你的用户名\AppData\Loca…

IDS入侵检测系统和IPS入侵防御系统什么区别

1. IDS(Intrusion Detection System):侦察兵 入侵检测系统(Intrusion Detection System,简称IDS)是一种网络安全设备或软件应用,旨在监控网络流量,检测潜在的恶意活动或违规行为。IDS通过分析网络数据包、日志文件等信息,识别出异常流量并发出警报,提醒管理员采取相应的…

【Gaussian Model】高斯分布模型

目录 高斯分布模型用于异常检测(Gaussian Model for Anomaly Detection)1. 高斯分布简介2. 高斯分布模型用于异常检测(1) 训练阶段:估计数据分布(2) 检测阶段:计算概率判断异常点3. 示例代码4. 高斯分布异常检测的优缺点优点缺点5. 适用场景6. 结论高斯分布模型用于异常检测…

在华为设备上,VRRP与BFD结合使用可以快速检测链路故障并触发主备切换

在华为设备上,VRRP与BFD结合使用可以快速检测链路故障并触发主备切换。以下是VLAN接口下配置VRRP与BFD的步骤: 目录 1. 配置BFD会话 2. 配置VLAN接口 3. 配置VRRP 4. 验证配置 5. 保存配置 1. 配置BFD会话 在两台设备之间配置BFD会话,…