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

27.自连接

自连接是指在同一张表的连接查询【将同一张表看作两张表】。

1.案例

先看一下以前创建过的一张雇员表:

可以看到smith的mgr字段是7902,也就是ford的empno,其中的含义就是:员工smith的领导是ford。

现在我们有这样一个需求:显示员工名字和其领导的名字。

但是,员工名字和其领导的员工号都在一张表里面,该如何显示二者呢?

于是自连接的概念就诞生了:一张表当作两张表查。

SELECT * from emp,emp;

显然这样直接查会直接报错,其提示我们用别名(alias)。

SELECT * from emp worker,emp boss;

像这种直接写在要查的表名之后的就是别名了。

但是,这时依然会有问题。

我们得到了196条记录,也就是14*14=196条,毋庸置疑,通过别名的方式把一个表当两张表来查,出现了笛卡尔集。

为了解决此问题,我们需要进行过滤。

明确一下过滤的条件:只有worker的mgr和boss的empno相等时才是有意义的记录。

SELECT worker.ename as '员工名子',boss.ename as '领导名字'from emp worker,emp bossWHERE worker.mgr = boss.empno;

可以看到我们成功的得到了13条记录,少的一条记录就是king,其是最大的boss,其mgr是null。

2.总结

自连接的特点

  1. 把同一张表当做两张表使用
  2. 需要给表取别名
  3. 列名不明确,可以指定列的别名 别名 as 列的别名

相关文章:

  • 【面试题001】生产环境中如何排查MySQL CPU占用率高达100%?
  • 详细讲解Redis为什么被设计成单线程
  • C与C++中的可变参数
  • 使用@SpringJUnitConfig注解开发遇到的空指针问题
  • 工信部发布《中国工业软件产业发展研究报告(2025)》:PLM垄断加剧,Ai为国产PLM软件发展契机
  • 基于大模型的胆囊结石全周期诊疗方案研究报告
  • voronoi图,凸壳,和早已遗忘的定不定积分
  • Flutter TCP通信
  • vscode连接不上服务器问题修复
  • golang--数据类型与存储
  • D包和模块.go
  • Spring Boot + AOP + Jasypt,3 步实现敏感数据脱敏
  • Java 实现后端调用 Chromium 浏览器无头模式截图的方案
  • Java web非Maven项目中引入EasyExcel踩坑记录
  • 批量创建tmux tmux批量
  • 深入解析 Java List 实现类的底层原理
  • 腾讯云TCCA认证考试报名 - TDSQL数据库交付运维工程师(PostgreSQL版)
  • 12.9 定时任务
  • SkyWalking 部署与应用(Windows)
  • 3DS 转换为 STP 全攻略:迪威模型网在线转换详解
  • 训做网站的心得体会范文/广告联盟怎么做
  • 广告营销手段有哪些方式/黄山seo公司
  • 做效果图的网站有哪些/合肥百度搜索优化
  • 网站主页面布局怎么做/百度推广客户端官方下载
  • 网站建设方案确认表/软件开发培训机构
  • 网站要精细是什么意思/seo和sem