SQL 交叉连接

SQL 交叉连接

  • SQL中的连接操作用于将多个表合并到一个表中。
  • 如果我们使用交叉连接来合并两个不同的表,则会获得连接表中行的笛卡尔乘积。当将第一个表的每一行与第二个表的每一行组合时,这被称为笛卡尔连接或交叉连接。
  • 在执行交叉连接操作后,最终表中的行数将等于表1中行数与表2中行数的乘积。
  • 例如: 如果表1中有两条记录,表2中有三条记录,则执行交叉连接操作后,最终表中将有六条记录。
  • 让我们看一下在SQL中编写执行交叉连接操作的查询的语法。
SELECT TableName1.columnName1, TableName2.columnName2 FROM TableName1 CROSS JOIN TableName2 ON TableName1.ColumnName = TableName2.ColumnName;  

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

考虑我们有以下具有给定数据的表格:

表格1: MatchScore

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

表格2:部门

Department_id Department_name
1 IT
2 HR
3 Marketing

表3:员工

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

表格4:部门

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

表5:贷款

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

表格 6: 借款人

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

表格7:客户

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

表8:订单

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表作为右表执行交叉连接操作。

查询语句:

SELECT * FROM MatchScore CROSS JOIN Departments;

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

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

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中有四条记录,Departments表中有三条记录,在执行交叉连接操作后,最终表中有12行。

示例2:

编写一个查询,将员工表作为左表,部门表作为右表,执行交叉连接操作。

查询:

mysql> SELECT *FROM employee CROSS JOIN department;

我们使用SELECT命令和星号来检索employee和department表中的所有列。然后我们使用CROSS JOIN关键字对employee和department表执行了交叉连接操作。由于employee表中有五条记录,department表中有四条记录,所以在执行交叉连接操作后,我们会得到20行结果。

执行该查询后,您将得到以下结果:

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

每个员工表的行与部门表的每个行相结合。由于员工表中有五个记录,部门表中有四个记录,所以在执行交叉连接操作后,最终表中有20行。

示例3:

编写一个查询,将贷款表视为左表,将借款人表视为右表,执行交叉连接操作。

查询:

mysql> SELECT *FROM loan CROSS JOIN borrower;

我们使用带有星号的SELECT命令检索贷款表和借款人表中的所有列。然后,我们使用CROSS JOIN关键字在贷款表和借款人表上执行交叉连接操作。由于贷款表中有四条记录,借款人表中也有四条记录,在执行交叉连接操作后,我们将得到16行。

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

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

每一行来自贷款表和借款人表的组合。由于贷款表有四条记录,借款人表也有四条记录,在执行交叉连接操作后,我们获得了16行。

示例4:

编写一条查询语句,将客户表作为左表,将订单表作为右表进行交叉连接操作。

查询语句:

mysql> SELECT *FROM customer CROSS JOIN orders;

我们使用带有星号的SELECT命令来检索顾客表和订单表中的所有列。然后我们使用CROSS JOIN关键字在顾客表和订单表上执行交叉连接操作。由于贷款表中有三条记录,订单表中也有三条记录,执行交叉连接操作后,我们将得到9行。

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

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

每个客户表的行与每个订单表的行相结合。由于贷款表中有三条记录和订单表中有三条记录,执行交叉连接操作后,我们将获得9行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程