我注意到Oracle 11中出现了一个奇怪的FULL OUTER JOIN行为.我正在从HR模式加入表,特别是EMPLOYEES和DEPARTMENTS.
例如,以下查询返回123行:
SELECT * FROM employees e
FULL JOIN departments d ON e.department_id = d.department_id
Run Code Online (Sandbox Code Playgroud)
但是,要理解的是什么 - 当我在select子句中放入一组特定的列时,查询将返回122行(缺少的行是针对没有分配部门的员工 - 另一个是使用左连接返回的行)与内连接相比):
SELECT first_name, last_name, department_name FROM employees e
FULL JOIN departments d on e.department_id = d.department_id
Run Code Online (Sandbox Code Playgroud)
即使我计算行数它返回122(COUNT(*))!到底是怎么回事?SELECT *和之间有什么区别SELECT COUNT(*)?
解释计划SELECT * ...:
SELECT STATEMENT 122
VIEW VW_FOJ_0 122
HASH JOIN FULL OUTER 122
Access Predicates
E.DEPARTMENT_ID = D.DEPARTMENT_ID
TABLE ACCESS DEPARTMENTS FULL 27
TABLE ACCESS EMPLOYEES FULL 107
Run Code Online (Sandbox Code Playgroud)
并为SELECT …