交叉加入

CROSS JOIN 在两个不使用显式连接子句的表之间执行连接,并产生两个表的笛卡尔乘积。笛卡尔积表示一个表的每一行与连接中第二个表的每一行组合。例如,如果 TABLEA 有 20 行而 TABLEB 有 20 行,那么结果将是 20*20 = 400 输出行。

例:

SELECT * 
FROM TABLEA CROSS JOIN TABLEB;

这也可以写成:

SELECT *
FROM TABLEA, TABLEB;

以下是两个表之间 SQL 交叉连接的示例:

样品表: TABLEA

+-------+---------+
| `VALUE` |   NAME  |
+-------+---------+
|   1   |   ONE   |
|   2   |   TWO   |
+-------+---------+

样本表: TABLEB

+-------+--------+
| `VALUE` |  NAME  |
+-------+--------+
|   3   |  THREE |
|   4   |  FOUR  |
+-------+--------+

现在,如果执行查询:

SELECT *
FROM TABLEA CROSS JOIN TABLEB;

输出:

+-------+--------+-------+--------+
| `VALUE` |  NAME  | VALUE |  NAME  |
+-------+--------+-------+--------+
|   1   |   ONE  |   3   |  THREE |
|   1   |   ONE  |   4   |  FOUR  |
|   2   |   TWO  |   3   |  THREE |
|   2   |   TWO  |   4   |  FOUR  |
+-------+--------+-------+--------+

这是两个表之间交叉连接的方式: http://i.stack.imgur.com/fMjRr.jpg

有关 Cross Join 的更多信息: Oracle 文档