一对多关系是单向的,也就是说,当你查询一对多关系时,可以使用“一”方来选取“多”方表中的多行,但不能使用一个“多”方行来选取多于一个的“一”方行。

第 60.1 节:示例公司表

考虑一个公司,每个管理人员(经理)管理一名或多名员工,而每个员工只有一名经理。

这会产生两个表:

员工表(EMPLOYEES)

EMP_ID FIRST_NAME LAST_NAME MGR_ID
E01 Johnny Appleseed M02
E02 Erin Macklemore M01
E03 Colby Paperwork M03
E04 Ron Sonswan M01

经理表(MANAGERS)

MGR_ID FIRST_NAME LAST_NAME
M01 Loud McQueen
M02 Bossy Pants
M03 Barrel Jones

第 60.2 节:获取单个经理管理的员工

SELECT e.emp_id, e.first_name, e.last_name
FROM employees e
INNER JOIN managers m ON m.mgr_id = e.mgr_id
WHERE m.mgr_id = 'M01';

结果:

EMP_ID FIRST_NAME LAST_NAME
E02 Erin Macklemore
E04 Ron Sonswan

最终,对于每个查询的经理,会看到一名或多名员工。

第 60.3 节:获取单个员工的经理

参考上述示例表。

SELECT m.mgr_id, m.first_name, m.last_name
FROM managers m
INNER JOIN employees e ON e.mgr_id = m.mgr_id
WHERE e.emp_id = 'E03';

结果:

MGR_ID FIRST_NAME LAST_NAME
M03 Barrel Jones

作为上述示例的反向操作,我们知道对于查询的每个员工,只会看到对应的一名经理。