摘要:在本教程中,您將學習如何使用 SQL CROSS JOIN 子句將第一個表中的每一行與第二個表中的每一行進行組合。
SQL CROSS JOIN 子句簡介 #
CROSS JOIN 子句是 SELECT 語句的一個可選子句。CROSS JOIN 子句允許您建立來自兩個表的所有行的組合。
以下是 CROSS JOIN 子句的語法:
SELECT
select_list
FROM
table1
CROSS JOIN table2;Code language: SQL (Structured Query Language) (sql)在此語法中:
- 首先,在
FROM子句中提供第一個表。 - 其次,在
CROSS JOIN子句中指定您想要與第一個表合併行的第二個表。
與 left join、right join、inner join 和 full join 不同,cross join 沒有條件。
CROSS JOIN 子句將第一個表 (table1) 中的每一行與第二個表 (table2) 中的每一行合併。它返回一個包含兩個表中所有行的可能組合的結果集。
CROSS JOIN 的結果集通常被稱為兩個表的笛卡爾積。
如果 table1 有 n 行,table2 有 m 行,那麼 CROSS JOIN 將返回一個包含 n * m 行的結果集。
例如,如果 table1 有兩行,table2 有三行,那麼這兩個表的交叉連線結果將有 6 行 (2 * 3)。
或者,您也可以透過在 SELECT 語句的 FROM 子句中列出表來執行交叉連線,如下所示:
SELECT
select_list
FROM
table1,
table2;Code language: SQL (Structured Query Language) (sql)理解交叉連線 #
假設您有兩個表:
X表有兩個列:id(鍵) 和x。Y表也有兩個列:id(鍵) 和y。
交叉連線將左表 (X) 的每一行與右表 (Y) 的每一行組合起來,以建立最終的結果集:
下圖是說明交叉連線的另一種方式:
SQL CROSS JOIN 子句示例 #
首先,建立一個名為 trainings 的新表來儲存培訓專案:
CREATE TABLE trainings (
id INT PRIMARY KEY,
program_name VARCHAR(255) NOT NULL,
duration INT NOT NULL
);Code language: SQL (Structured Query Language) (sql)其次,向 trainings 表中插入一些行:
INSERT INTO
trainings (id, program_name, duration)
VALUES
(1, 'Leadership Skills', 1),
(2, 'Communication Skills', 2);Code language: SQL (Structured Query Language) (sql)第三,使用 CROSS JOIN 子句生成員工和培訓專案的所有可能組合:
SELECT
first_name,
program_name
FROM
employees
CROSS JOIN trainings
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)輸出
first_name | program_name
-------------+----------------------
Adam | Communication Skills
Adam | Leadership Skills
Alexander | Leadership Skills
Alexander | Communication Skills
Alexander | Communication Skills
Alexander | Leadership Skills
Britney | Communication Skills
Britney | Leadership Skills
...Code language: plaintext (plaintext)以下查詢執行與上例相同的 CROSS JOIN 子句,但使用了替代語法:
SELECT
first_name,
program_name
FROM
employees,
trainings
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)摘要 #
- 使用 SQL
CROSS JOIN子句將第一個表中的每一行與第二個表中的每一行進行組合。
測驗 #
<iframe
name="quiz"
src="/quiz/?quiz=cross-join"
height="700"
width="600"
class="iframe"
></iframe>
Code language: HTML, XML (xml)資料庫 #
- PostgreSQL CROSS JOIN
- MySQL CROSS JOIN
- SQLite CROSS JOIN
- Db2 CROSS JOIN
- Oracle CROSS JOIN
- SQL Server CROSS JOIN
本教程是否有幫助?