当前位置: 代码网 > it编程>数据库>Mysql > MySQL之多表查询自连接方式

MySQL之多表查询自连接方式

2024年09月05日 Mysql 我要评论
一、引言自连接,顾名思义就是自己连接自己。自连接的语法结构:表 a 别名 a join 表 a 别名 b on 条件 ...;注意:1、这种语法有一个关键字:join2、自连接查询可以是内连接的语法,

一、引言

自连接,顾名思义就是自己连接自己。

自连接的语法结构:

表 a 别名 a join 表 a 别名 b on 条件 ...;

注意:

  • 1、这种语法有一个关键字:join
  • 2、自连接查询可以是内连接的语法,可以是外连接的语法(当然包括左外连接和右外连接)

接下来去工具 datagrip 通过两个需求去演示一下 自连接查询 的语法。

二、实操

(0)两张表的结构以及数据展示

  • 员工表 emp

  • 部门表 dept

(1)查询员工及其所属领导的名字

1、分析

在表 emp 中没有直接的表示出某某的直属领导是谁,只有一个所属领导id号(managerid)

而对于一个企业的领导,它也是企业的员工。

表结构:emp。

单靠单表查询是不可能完成所要的需求的。所以要对自己进行子连接查询。

把emp看成两张表:员工表和领导表(仔细深思一下)

这就是它们之间的编写思路

2、编写sql语句

/*类似于内连接,有null 的值时没有显示*/
select a.name,b.name from emp as a join emp as b where a.managerid=b.id;

(2)直询所有员工emp及其领导的名字emp ,如果员工没有领导,也需要查询出来。

1、分析

如果这个员工的字段 managerid = null ,也需要把这个员工查询出来。

这时只能用到外连接

因为内连接只能查询到交集的数据,外连接才会包含左表或者右表的数据

表结构:emp a , emp b

2、编写sql语句

/*查出直属领导为 null 也要显示*/
select a.name as '员工',b.name as '领导' from emp as a left outer join emp as b on a.managerid=b.id;

这样就通过两个自连接查询完成两个需求。

在自连接查询的时候,一定注意要给表名起别名。

要不然我们会不清楚条件,以及返回的字段到底是哪一张表当中的字段。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • MySQL关键字IN与EXISTS的使用与区别详解

    MySQL关键字IN与EXISTS的使用与区别详解

    1. in & not inin:in用于判断某个字段的值是否存在于给定的值列表中,常用于简单的列表匹配。可以使用单个值,也可以使用一个由多个值组成的列... [阅读全文]
  • 深入理解MySQL公共表表达式

    公共表表达式(common table expressions, cte)是mysql在单一语句中执行过程中,预先定义的临时结果集。有时我们需要在一个sql中重复执行同一个子查询,…

    2024年09月04日 数据库
  • MySQL命令行连接方式

    MySQL命令行连接方式

    1.本地连接前期准备:mysql加入环境变量(根据自己安装的路径修改)mysql_home c:\program files\mysql\mysql serve... [阅读全文]
  • MySQL 半同步复制的实现

    一、半同步复制介绍mysql基础复制有三种模式:异步复制/同步复制/半同步复制,3种模式各有利弊,下面对各种复制模式的优缺点做个简要的介绍:异步复制(asynchronous re…

    2024年09月04日 数据库
  • mysql中的自连接与join关联

    mysql中的自连接与join关联

    mysql自连接mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的... [阅读全文]
  • MySQL实现异步复制的示例

    一、复制概述mysql的复制就是将来自一个mysql数据库服务器(主库)的数据复制到一个或多个mysql数据库服务器(从库)。其工作原理是通过binlog(二进制日志)记录事务变更…

    2024年09月04日 数据库

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com