SQL Cross Join 交叉连接

一、SQL Cross Join 交叉连接 语法

SQL中的join操作用于将多个表组合成一个表。

如果我们使用交叉连接来组合两个不同的表,那么我们将从连接的表中获得行集的笛卡尔积。当第一个表的每一行与第二个表的每一行组合时,称为笛卡尔连接交叉连接

执行交叉连接操作后,最终表中存在的总行数将等于表 1 中存在的行数和表 2 中存在的行数的乘积。

例如:
如果表1有2条记录,表2有3条记录,那么在进行交叉连接操作后,我们将在最终表中得到6条记录。

让我们看一下编写查询以在 SQL 中执行交叉连接操作的语法。

SELECT TableName1.columnName1, TableName2.columnName2 FROM TableName1 CROSS JOIN TableName2 ON TableName1.ColumnName = TableName2.ColumnName;   

二、SQL Cross Join 交叉连接 示例

现在让我们借助示例更深入地了解 SQL 中的交叉连接。示例中的所有查询都将使用 MySQL 数据库编写。

考虑我们有以下表格,其中包含给定的数据:

MatchScore表:

Player Department_id Goals
Franklin 1 2
Alan 1 3
Priyanka 2 2
Rajesh 3 5

Departments表:

Department_id Department_name
1 IT
2 HR
3 Marketing

employee表:

EmployeeID Employee_Name Employee_Salary
1 Arun Tiwari 50000
2 Sachin Rathi 64000
3 Harshal Pathak 48000
4 Arjun Kuwar 46000
5 Sarthak Gada 62000

department表:

DepartmentID Department_Name Employee_ID
1 Production 1
2 Sales 3
3 Marketing 4
4 Accounts 5

loan表:

LoanID Branch Amount
1 B1 15000
2 B2 10000
3 B3 20000
4 B4 100000

borrower表:

CustID CustName LoanID
1 Sonakshi Dixit 1
2 Shital Garg 4
3 Swara Joshi 5
4 Isha Deshmukh 2

customer表:

Customer_ID Name Age Salary
1 Aryan Jain 51 56000
2 Arohi Dixit 21 25000
3 Vineet Garg 24 31000

orders表:

Order_ID Order_Date Cutomer_ID Amount
1 2012-01-20 2 3000
2 2012-05-18 2 2000
3 2012-06-28 3 4000

示例1

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

SQL:

SELECT * FROM MatchScore CROSS JOIN Departments;

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

执行此SQL后,您会发现以下结果:

Player Department_id Goals Depatment_id Department_name
Franklin 1 2 1 IT
Alan 1 3 1 IT
Priyanka 2 2 1 IT
Rajesh 3 5 1 IT
Franklin 1 2 2 HR
Alan 1 3 2 HR
Priyanka 2 2 2 HR
Rajesh 3 5 2 HR
Franklin 1 2 3 Marketing
Alan 1 3 3 Marketing
Priyanka 2 2 3 Marketing
Rajesh 3 5 3 Marketing

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

示例2

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

SQL:

mysql> SELECT *FROM employee CROSS JOIN department;  

我们使用带有*星号的 SELECT 命令来检索雇员和部门表中存在的所有列。然后我们使用了 CROSS JOIN 关键字对employee 和department 表进行了cross join 操作。由于employee表有5条记录,department表有4条记录,执行交叉连接操作后,我们将得到20行。

执行此SQL后,您会发现以下结果:

EmployeeID Employee_Name Employee_Salary DepartmentID Department_Name Employee_ID
1 Arun Tiwari 50000 1 Production 1
1 Arun Tiwari 50000 2 Sales 3
1 Arun Tiwari 50000 3 Marketing 4
1 Arun Tiwari 50000 4 Accounts 5
2 Sachin Rathi 64000 1 Production 1
2 Sachin Rathi 64000 2 Sales 3
2 Sachin Rathi 64000 3 Marketing 4
2 Sachin Rathi 64000 4 Accounts 5
3 Harshal Pathak 48000 1 Production 1
3 Harshal Pathak 48000 2 Sales 3
3 Harshal Pathak 48000 3 Marketing 4
3 Harshal Pathak 48000 4 Accounts 5
4 Arjun Kuwar 46000 1 Production 1
4 Arjun Kuwar 46000 2 Sales 3
4 Arjun Kuwar 46000 3 Marketing 4
4 Arjun Kuwar 46000 4 Accounts 5
5 Sarthak Gada 62000 1 Production 1
5 Sarthak Gada 62000 2 Sales 3
5 Sarthak Gada 62000 3 Marketing 4
5 Sarthak Gada 62000 4 Accounts 5

employee表中的每一行都与deptment表的每一行相结合。由于employee表有5条记录,department表有4条记录,所以我们在执行交叉连接操作后,最终表中有20行。 

示例3

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

SQL:

mysql> SELECT *FROM loan CROSS JOIN borrower;  

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

执行此SQL后,您会发现以下结果:

LoanID Branch Amount CustID CustName LoanID
1 B1 15000 1 Sonakshi Dixit 1
2 B2 10000 1 Sonakshi Dixit 1
3 B3 20000 1 Sonakshi Dixit 1
4 B4 100000 1 Sonakshi Dixit 1
1 B1 15000 2 Shital Garg 4
2 B2 10000 2 Shital Garg 4
3 B3 20000 2 Shital Garg 4
4 B4 100000 2 Shital Garg 4
1 B1 15000 3 Swara Joshi 5
2 B2 10000 3 Swara Joshi 5
3 B3 20000 3 Swara Joshi 5
4 B4 100000 3 Swara Joshi 5
1 B1 15000 4 Isha Deshmukh 2
2 B2 10000 4 Isha Deshmukh 2
3 B3 20000 4 Isha Deshmukh 2
4 B4 100000 4 Isha Deshmukh 2

loan表的每一行都与borrower表的每一行相结合。由于loan 表有4 条记录,borrower 表有4 条记录,执行交叉连接操作后,我们得到16 行。 

示例4

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

SQL:

mysql> SELECT *FROM customer CROSS JOIN orders;  

我们使用带*星号的 SELECT 命令来检索客户和订单表中存在的所有列。然后我们使用了 CROSS JOIN 关键字对 customer 表和 orders 表进行了交叉连接操作。由于loan 表有3 条记录,orders 表有3 条记录,执行交叉连接操作后,我们会得到9 行。

执行此SQL后,您会发现以下结果:

Customer_ID Name Age Salary Order_ID Order_Date Customer_ID Amount
1 Aryan Jain 51 56000 1 2012-01-20 2 3000
2 Arohi Dixit 21 25000 1 2012-01-20 2 3000
3 Vineet Garg 24 31000 1 2012-01-20 2 3000
1 Aryan Jain 51 56000 2 2012-05-18 2 2000
2 Arohi Dixit 21 25000 2 2012-05-18 2 2000
3 Vineet Garg 24 31000 2 2012-05-18 2 2000
1 Aryan Jain 51 56000 3 2012-06-28 3 4000
2 Arohi Dixit 21 25000 3 2012-06-28 3 4000
3 Vineet Garg 24 31000 3 2012-06-28 3 4000

customer表中的每一行都与order表的每一行相结合。由于loan 表有3 条记录,orders 表有3 条记录,执行交叉连接操作后,我们会得到9 行。 

热门文章

优秀文章