当前位置: 首页 > news >正文

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

复习表别名

之前已经学习过,查询的时候可以使用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;

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

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

相关文章:

  • 遗传算法基础讲解
  • 软件测试基础:功能测试知识总结
  • 【消息队列】数据库的数据管理
  • 鸿蒙开发 - 键盘避让
  • HRNet的pt模型转rknn并实现前向推理
  • Javase学习复习D11[接口,多态]
  • 基于流量域的数据全链路治理方案:从原理到实践
  • c++面试常考问题之引用与指针的关系,ADD如何用宏写
  • 内核编程八:基于printk宏的pr_* 宏
  • 网络安全中蓝牙攻击有哪些?
  • EasyDSS视频推拉流系统:清理缓存文件时如何确保缓存读写不受影响?
  • 【无标题】FrmImport
  • 最短路算法 dijkstra 从认识到熟练掌握
  • 爬虫:从Chrome浏览器进行抓包详解
  • 【AD】PCB增加相关图层——以机械层为例
  • DAViMNet:基于状态空间模型的域自适应目标检测
  • 【单片机】嵌入式系统的硬件与软件特性
  • python代码注释方式
  • Apache Tomcat 新手入门指南:从安装到部署的全流程解析
  • 深入解析 C# 中的泛型:概念、用法与最佳实践
  • 商业网站建设软件/百度云盘资源搜索
  • 大连比较好的的网站建设公司/seo优化易下拉排名
  • 什么行业适合做网站推广/移动建站优化
  • 贵阳做网站方舟网络/企业qq多少钱一年
  • 苏州建设建设信息网站/网站推广基本方法是
  • 有那些做自媒体短视频的网站/免费网站分析seo报告是坑吗