SQL Cross Join

2025 年 7 月 15 日 | 阅读 7 分钟
  • SQL 中的 JOIN 操作用于将多个表合并成一个表。
  • 如果我们使用交叉连接将两个不同的表合并,我们将得到连接表中行集的笛卡尔积。当第一个表的每一行都与第二个表的每一行组合时,这被称为笛卡尔连接交叉连接
  • 执行交叉连接操作后,最终表中存在的总行数将等于表 1 中存在的行数乘以表 2 中存在的行数。
  • 例如
    如果表 1 中有两条记录,表 2 中有三条记录,那么在执行交叉连接操作后,我们将在最终表中得到六条记录。
  • 让我们通过示例来深入了解 SQL 中的交叉连接。
SQL Cross Join

下面我们通过示例来深入了解 SQL 中的交叉连接。示例中的所有查询都将使用 MySQL 数据库编写。

假设我们有以下表格和给定数据

表 1: MatchScore

玩家Department_id目标
Franklin12
Alan13
Priyanka22
Rajesh35

表 2: Departments

Department_idDepartment_name
1IT
2HR
3营销

表 3: employee

EmployeeIDEmployee_NameEmployee_Salary
1Arun Tiwari50000
2Sachin Rathi64000
3Harshal Pathak48000
4Arjun Kuwar46000
5Sarthak Gada62000

表 4: department

DepartmentIDDepartment_NameEmployee_ID
1生产1
2销售3
3营销4
4帐户5

表 5: loan

LoanIDBranch总额
1B115000
2B210000
3B320000
4B4100000

表 6: borrower

CustIDCustNameLoanID
1Sonakshi Dixit3
2Shital Garg4
3Swara Joshi1
4Isha Deshmukh2

表 7: customer

客户 ID名称年龄薪金
1Aryan Jain5156000
2Arohi Dixit2125000
3Vineet Garg2431000

表 8: orders

Order_IDOrder_DateCutomer_ID总额
12025-01-2023000
22025-05-1822000
32025-06-2834000

示例 1

编写一个查询来执行交叉连接操作,将 MatchScore 表作为左表,将 Departments 表作为右表。

查询

我们使用了带星号的 SELECT 命令来检索 MatchScoreDepartments 表中存在的所有列。然后,我们使用 CROSS JOIN 关键字在 MatchScoreDepartments 表上执行交叉连接操作。由于 MatchScore 表中有 4 条记录,Departments 表中有 3 条记录,在执行交叉连接操作后,我们将得到 (3 x 4 = 12) 行。

执行此查询后,您将看到以下结果

玩家Department_id目标Depatment_idDepartment_name
Franklin123营销
Franklin122HR
Franklin121IT
Alan133营销
Alan132HR
Alan131IT
Priyanka223营销
Priyanka222HR
Priyanka221IT
Rajesh353营销
Rajesh352HR
Rajesh351IT

MatchScore 表中的每一行都与 Departments 表中的每一行组合。由于 MatchScore 表中有四条记录,Departments 表中有三条记录,我们在执行交叉连接操作后,在最终表中得到了 12 行。

示例 2

编写一个查询来执行交叉连接操作,将 employee 表作为左表,将 department 表作为右表。

查询

我们使用了带星号的 SELECT 命令来检索 employeedepartment 表中存在的所有列。然后,我们使用 CROSS JOIN 关键字在 employeedepartment 表上执行交叉连接操作。由于 employee 表中有五条记录,department 表中有四条记录,在执行交叉连接操作后,我们将得到 (5 x 4 = 20) 行。

执行此查询后,您将看到以下结果

EmployeeIDEmployee_NameEmployee_SalaryDepartmentIDDepartment_NameEmployee_ID
1Arun Tiwari500001生产1
1Arun Tiwari500002销售3
1Arun Tiwari500003营销4
1Arun Tiwari500004帐户5
2Sachin Rathi640001生产1
2Sachin Rathi640002销售3
2Sachin Rathi640003营销4
2Sachin Rathi640004帐户5
3Harshal Pathak480001生产1
3Harshal Pathak480002销售3
3Harshal Pathak480003营销4
3Harshal Pathak480004帐户5
4Arjun Kuwar460001生产1
4Arjun Kuwar460002销售3
4Arjun Kuwar460003营销4
4Arjun Kuwar460004帐户5
5Sarthak Gada620001生产1
5Sarthak Gada620002销售3
5Sarthak Gada620003营销4
5Sarthak Gada620004帐户5

employee 表中的每一行都与 department 表中的每一行组合。由于 employee 表中有五条记录,department 表中有四条记录,我们在执行交叉连接操作后,在最终表中得到了 20 行。

示例 3

编写一个查询来执行交叉连接操作,将 loan 表作为左表,将 borrower 表作为右表。

查询

我们使用了带星号的 SELECT 命令来检索 loanborrower 表中存在的所有列。然后,我们使用 CROSS JOIN 关键字在 loanborrower 表上执行交叉连接操作。由于 loan 表中有四条记录,borrower 表中有四条记录,在执行交叉连接操作后,我们将得到 16 行。

执行此查询后,您将看到以下结果

LoanIDBranch总额CustIDCustNameLoanID
1B1150001Sonakshi Dixit1
2B2100001Sonakshi Dixit1
3B3200001Sonakshi Dixit1
4B41000001Sonakshi Dixit1
1B1150002Shital Garg4
2B2100002Shital Garg4
3B3200002Shital Garg4
4B41000002Shital Garg4
1B1150003Swara Joshi5
2B2100003Swara Joshi5
3B3200003Swara Joshi5
4B41000003Swara Joshi5
1B1150004Isha Deshmukh2
2B2100004Isha Deshmukh2
3B3200004Isha Deshmukh2
4B41000004Isha Deshmukh2

loan 表中的每一行都与 borrower 表中的每一行组合。由于 loan 表中有四条记录,borrower 表中有四条记录,我们在执行交叉连接操作后,得到了 16 行。

示例 4

编写一个查询来执行交叉连接操作,将 customer 表作为左表,将 orders 表作为右表。

查询

我们使用了带星号的 SELECT 命令来检索 customerorders 表中存在的所有列。然后,我们使用 CROSS JOIN 关键字在 customer 表和 orders 表上执行交叉连接操作。由于 loan 表中有三条记录,orders 表中有三条记录,在执行交叉连接操作后,我们将得到 9 行。

执行此查询后,您将看到以下结果

客户 ID名称年龄薪金Order_IDOrder_Date客户 ID总额
1Aryan Jain515600012025-01-2023000
2Arohi Dixit212500012025-01-2023000
3Vineet Garg243100012025-01-2023000
1Aryan Jain515600022025-05-1822000
2Arohi Dixit212500022025-05-1822000
3Vineet Garg243100022025-05-1822000
1Aryan Jain515600032025-06-2834000
2Arohi Dixit212500032025-06-2834000
3Vineet Garg243100032025-06-2834000

customer 表中的每一行都与 orders 表中的每一行组合。由于 loan 表中有三条记录,orders 表中有三条记录,我们在执行交叉连接操作后,将得到 9 行。

常见问题解答 (FAQs)

1. SQL CROSS JOIN 的概念是什么?

SQL 中的 CROSS JOIN 会生成两个表的笛卡尔积,它将第一个表的每一行与第二个表的每一行连接起来。

2. 我们应该何时在 SQL 中使用 CROSS JOIN?

我们使用交叉连接来比较两个表的所有组合,返回所有可能的数据输出。我们还使用交叉连接来创建日历或时间表等组合。

3. CROSS JOIN 的语法是什么?

下面提到了 CROSS JOIN 中使用的语法

4. CROSS JOIN 和 INNER JOIN 有什么区别?

CROSS JOIN:它用于返回所有可能的组合,无需任何条件。

INNER JOIN:它用于根据条件返回匹配的行。

5. 我们可以在 CROSS JOIN 中应用 WHERE 子句吗?

是的,您可以在 CROSS JOIN 之后应用 WHERE 子句来过滤组合。

语法

注意:上述代码在逻辑上等同于 INNER JOIN。

6. CROSS JOIN 返回多少行?

让我们考虑有两个表,分别名为 Table ATable B

如果 Table A 包含 m 行Table B 包含 n 行,那么 CROSS JOIN 后的新表将返回 m 行n 行的乘积。

示例: 6 行 x 2 行 = 12 行。

7. 我们可以对两个以上的表进行 CROSS JOIN 吗?

是的,我们可以使用下面给出的语法对两个以上的表进行 CROSS JOIN。

上面的语法将返回三个表的所有可能组合。


下一主题Self-join-in-sql