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 行。
热门文章
优秀文章