LEFT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ;
此查询将检索EMPLOYEES表(它是左表)中的所有行,即使DEPARTMENTS表中没有匹配项也是如此。
RIGHT OUTER JOIN SELECT e.last_name, d.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);
此查询将检索DEPARTMENTS表(它是右表)中的所有行,即使EMPLOYEES表中没有匹配项也是如此。
FULL OUTER JOIN SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ;
笛卡尔积 出现以下情况时将形成笛卡尔积: 联接条件被忽略 联接条件无效 第一个表中的所有行被联接到第二个表中的所有行 如果要避免生成笛卡尔积,请始终包括有效的联接条件。
当一个联接条件无效或被完全忽略时,就会生成笛卡尔积。此时会显示行的所有组合。第一个表中的所有行会被联接到第二个表中的所有行。 笛卡尔积往往会生成大量的行,这种结果几乎没有任何用处。因此,应始终包括有效的联接条件,除非有特定需求需要组合所有表中的所有行。 如果某些测试需要生成大量的行来模拟合理的数据量,则笛卡尔积非常有用。
生成笛卡尔积 如果某个联接条件被忽略,则会生成笛卡尔积。由于没有指定联接条件,EMPLOYEES表中的所有行(20 行)与DEPARTMENTS表中的所有行(8 行)联接在一起,因此在输出中生成了160 行。
创建交叉联接 CROSS JOIN子句可生成两个表的叉积。 这也称为两个表间的笛卡尔积。 SELECT last_name, department_name FROM employees CROSS JOIN departments ;
示例生成EMPLOYEES表和DEPARTMENTS表的笛卡尔积。 CROSS JOIN方法非常有用,可以应用于许多情况。例如,要按月按办公室返回总人工成本,即使X 月没有人工成本,也可以执行所有月的表与办公室表的交叉联接。 如果要创建笛卡尔积,最佳做法是在SELECT中显式说明CROSS JOIN。因此,可以非常清楚表明要生成笛卡尔积,而不是缺少联接的结果。