什么是自连接?(超级详细,看不懂你找我)

什么是自连接?(超级详细,看不懂你找我)自连接 self join 是指在一个 SQL 表中 使用自身表格中的实例进行联接并查询的操作 自连接通常使用别名来标识一个表格 在自连接中 表格被视为两个不同的表格 并分别用不同的别名来标识 然后 在 WHERE 子句中使用这些别名 将它们连接起来 以创建一种与自身关联的视图

大家好,我是讯享网,很高兴认识大家。

自连接(self-join)是指在一个SQL表中,使用自身表格中的实例进行联接并查询的操作。自连接通常使用别名来标识一个表格。

在自连接中,表格被视为两个不同的表格,并分别用不同的别名来标识。然后,在WHERE子句中使用这些别名,将它们连接起来,以创建一种与自身关联的视图。

自连接通常用于处理具有层次结构的数据,例如组织结构、树形结构等。例如,可以使用自连接来查询员工领导的名称。

以下是一个示例:

CREATE TABLE emp (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/ job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/ mgr MEDIUMINT UNSIGNED ,/*上级编号*/ hiredate DATE NOT NULL,/*入职时间*/ sal DECIMAL(7,2) NOT NULL,/*薪水*/ comm DECIMAL(7,2) ,/*红利 奖金*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/ );-- 添加测试数据 INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, '1990-12-17', 800.00,NULL , 20), (7499, 'ALLEN', 'SALESMAN', 7698, '1991-2-20', 1600.00, 300.00, 30), (7521, 'WARD', 'SALESMAN', 7698, '1991-2-22', 1250.00, 500.00, 30), (7566, 'JONES', 'MANAGER', 7839, '1991-4-2', 2975.00,NULL,20), (7654, 'MARTIN', 'SALESMAN', 7698, '1991-9-28',1250.00,1400.00,30),(7698, 'BLAKE','MANAGER', 7839,'1991-5-1', 2850.00,NULL,30), (7782, 'CLARK','MANAGER', 7839, '1991-6-9',2450.00,NULL,10), (7788, 'SCOTT','ANALYST',7566, '1997-4-19',3000.00,NULL,20), (7839, 'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10), (7844, 'TURNER', 'SALESMAN',7698, '1991-9-8', 1500.00, NULL,30), (7900, 'JAMES','CLERK',7698, '1991-12-3',950.00,NULL,30), (7902, 'FORD', 'ANALYST',7566,'1991-12-3',3000.00, NULL,20), (7934,'MILLER','CLERK',7782,'1992-1-23', 1300.00, NULL,10); SELECT * FROM emp; -- 工资级别

讯享网

上图创建了一张员工信息表,如下图所示


讯享网

 通过观察这张表我们可以看到,员工id(empno)和员工老板id(mgr)有相同,说明有的员工是其他员工的老板。

这里我们想要显示员工名字何他的老板名字,这里通过观察可以发现emp的员工id和mgr有相同部分,因此可以判断出来这里就是员工和上级的对应关系通过对表名取别名,将emp变成员工和上级表,,再通过员工表的mgr=上级id即可判断出来。

分析好了,下面是sql语句

讯享网select worker.ename,boss.ename from emp as worker ,emp as boss where worker.mgr = boss.empno 

 

查询结果如下图:

以上就是自连接的例子。

小讯
上一篇 2025-02-28 22:38
下一篇 2025-03-31 22:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43517.html