SQL自联接
示例
一个表可以连接到自身,而不同的行在某种条件下彼此匹配。在这种情况下,必须使用别名以区分表的两次出现。
在下面的示例中,对于示例数据库“雇员”表中的每个“雇员”,将返回一条记录,其中包含该雇员的名字以及该雇员的经理的相应名字。由于经理也是员工,因此该表将自身结合在一起:
SELECT e.FNameAS "Employee", m.FNameAS "Manager" FROM Employees e JOIN Employees m ONe.ManagerId= m.Id
该查询将返回以下数据:
那么这是如何工作的呢?
原始表包含以下记录:
第一步是为FROM子句中使用的表中的所有记录创建笛卡尔乘积。在这种情况下,它是雇员表两次,因此中间表将如下所示(我删除了此示例中未使用的任何字段):
下一步是仅保留满足JOIN条件的记录,因此任何别e名表ManagerId等于别m名表的记录Id:
然后,对SELECT子句中使用的每个表达式求值以返回该表:
最后,用AS运算符分配的列名e.FName和m.FName被其别名列名替换: