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

news2025/3/6 23:47:19

复习表别名

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

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

自连接

我们来构建一个需求:

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

select
    t1.teacher_name,
    t1.title
from
    teachers as t1,
    teachers as t2
where
    t1.title = t2.title
    and t2.teacher_name = '王小强';

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

select
    t1.teacher_name,
    t1.title
from
    teachers as t1,
    teachers as t2
where
    t1.title = t2.title
    and 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

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

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

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

select
    teachers.teacher_id,
    classes.class_name
from
    teachers
    left join classes on teachers.teacher_id = classes.head_teacher_id;

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

右连接:right join

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

select
    teachers.teacher_id,
    classes.class_name
from
    teachers
    right join classes on teachers.teacher_id = classes.head_teacher_id;

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

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

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

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

相关文章

【JavaSE-3】运算符

1、什么是运算符 就是对常量或者变量进行操作的符号,如:,-,*,/ 表达式: 用运算符把常量或者变量连接起来的,符合java语法的式子就是表达式。 2、 算术运算符 2.1、基本四则运算符 - * / % 都…

直接法估计相机位姿

引入 在前面的文章:运动跟踪——Lucas-Kanade光流中,我们了解到特征点法存在一些缺陷,并且用光流法追踪像素点的运动来替代特征点法进行特征点匹配的过程来解决这些缺陷。而这篇文章要介绍的直接法则是通过计算特征点在下一时刻图像中的位置…

VS2022C#windows窗体应用程序调用DeepSeek API

目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局‌‌ 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…

kettle插件-高性能插入更新插件Upsert

场景:假如T日需要将a表中T-1日的数据同步到b表。由于某种业务需求a表中已经同步到b表中的数据发生了变化需要重新同步,这个时候就会用到插入更新插件,也就是 说a表中数据重新同步b表,若b表中存在此数据(根据唯一id&am…

本地部署Qwen2.5-VL-7B-Instruct模型

本地部署Qwen2.5-VL-7B-Instruct模型 本地部署Permalink **创建环境** conda create -n qwenvl python3.11 -y# 报错: Solving environment: failedPackagesNotFoundError: The following packages are not available from current channels:# 处理: c…

【C++学习篇】智能指针

目录 1. 智能指针的使用场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使用 4.shared_ptr和weak_ptr 4.1shared_ptr的循环引用问题 4.2 weak_ptr 1. 智能指针的使用场景分析 下⾯程序中我们可以看到,new了以后,我们也delete了&#xff0c…

决策树(Decision Tree)基础知识

目录 一、回忆1、*机器学习的三要素:1)*函数族2)*目标函数2.1)*模型的其他复杂度参数 3)*优化算法 2、*前处理/后处理1)前处理:特征工程2)后处理:模型选择和模型评估 3、…

Excel基础(详细篇):总结易忽视的知识点,有用的细节操作

目录 写在前面基础篇Excel主要功能必会快捷键快捷键整理表LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式…

Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本章是MySQL篇中,非常实用性的篇章,相信在实际工作中对于表的查询,很多时候会涉及多表的查询,在多表查询的…

非平稳时间序列分析(三)——季节模型(SARIMA、STL、Holt-Winters)

此前篇章(平稳序列): 时间序列分析(一)——基础概念篇 时间序列分析(二)——平稳性检验 时间序列分析(三)——白噪声检验 时间序列分析(四)—…

【web前端开发】CSS--CSS简介及其编写位置(上)

1、CSS简介 (1)CSS的全称为:层叠式样式表(Cascading Style Sheets) (2)CSS也是一种标记语言,用于给HTML结构设置样式,例如:文字大小、颜色、元素宽度等等…

云原生时代的技术桥梁

在数字化转型的大潮中,企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享,也影响了企业对外部市场变化的响应速度。当前,这一转型过程从IT角度来看,已然迈入云原生时…

【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分

文章目录 🥧栈的初步理解:🥧易错:如何判断栈满🥧栈满理解🥧栈的基本运算📚栈操作的伪代码逻辑(顺序和链栈)📕顺序栈运算实现:顺序栈的表示&#x…

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台,可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点: 容器:Docker 使用容器来封装应用程序及其依赖项,使其能够在任何环境中都能…

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装(七):Anaconda3 打开Anaconda官网,在右侧处填写邮箱(要真实有效!),然后Submit。会出现如图示的Success界面。 进入填写的邮箱,有一封Ana…

文件上传漏洞:upload-labs靶场11-20

目录 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-11 分析源代码 ,发现上传文件的存放路径可控 if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],st…

HTTP协议(20250305)

1. 万维网 WWW(World Wide Web)世界范围内的,联机式的信息储藏所,万维网解决了获取互联网上的数据时需要解决的以下问题: 怎样标识分布在整个互联网上的文档 URL用什么样的协议实现万维网上的各种链接 HTTP怎么使用户能够方便的查看文档数…

Qt中txt文件输出为PDF格式

main.cpp PdfReportGenerator pdfReportGenerator;// 加载中文字体if (QFontDatabase::addApplicationFont(":/new/prefix1/simsun.ttf") -1) {QMessageBox::warning(nullptr, "警告", "无法加载中文字体");}// 解析日志文件QVector<LogEntr…

FPGA 高速接口Aurora8B/10B 协议详解与仿真

FPGA 高速接口Aurora8B/10B 协议详解与IP仿真 1 摘要 Aurora 8B/10B 是一种用于高速串行通信的协议&#xff0c;通常用于 FPGA 设计和其他数字通信应用。即一种编码方案&#xff0c;旨在在传输数据时提供可靠性、时钟恢复和错误检测。主要用于在点对点串行链路间移动数据的可…

【手撕算法】支持向量机(SVM)从入门到实战:数学推导与核技巧揭秘

摘要 支持向量机&#xff08;SVM&#xff09;是机器学习中的经典算法&#xff01;本文将深入解析最大间隔分类原理&#xff0c;手撕对偶问题推导过程&#xff0c;并实战实现非线性分类与图像识别。文中附《统计学习公式手册》及SVM调参指南&#xff0c;助力你掌握这一核心算法…