SQL Left Join
- SQL中的Join操作用于将多个表合并成一个表。
- 如果我们使用左连接来合并两个不同的表,则将得到左表中的所有记录。但我们只会得到那些在左表中具有对应键的右表记录。右表中对于左表的通用列值与左表的通用列值不匹配的其余记录将显示为NULL。
- 让我们来看一下在SQL中执行左连接操作的查询语法。
SELECT TableName1.columnName1, TableName2.columnName2 FROM TableName1 LEFT JOIN TableName2 ON TableName1.ColumnName = TableName2.ColumnName;
现在让我们通过示例来深入了解SQL中的左连接。所有示例中的查询将使用MySQL数据库编写。
考虑到我们有以下具有给定数据的表:
表1: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 |
6 | Saurabh Sheik | 53000 |
7 | Shubham Singh | 29000 |
8 | Shivam Dixit | 54000 |
9 | Vicky Gujral | 39000 |
10 | Vijay Bose | 28000 |
表2:部门
DepartmentID | Department_Name | Employee_ID |
---|---|---|
1 | Production | 1 |
2 | Sales | 3 |
3 | Marketing | 4 |
4 | Accounts | 5 |
5 | Development | 7 |
6 | HR | 9 |
7 | Sales | 10 |
表格3:贷款
LoanID | Branch | Amount |
---|---|---|
1 | B1 | 15000 |
2 | B2 | 10000 |
3 | B3 | 20000 |
4 | B4 | 100000 |
5 | B5 | 150000 |
6 | B6 | 50000 |
7 | B7 | 35000 |
8 | B8 | 85000 |
表格4:借款人
CustID | CustName | LoanID |
---|---|---|
1 | Sonakshi Dixit | 1 |
2 | Shital Garg | 4 |
3 | Swara Joshi | 5 |
4 | Isha Deshmukh | 2 |
5 | Swati Bose | 7 |
6 | Asha Kapoor | 10 |
7 | Nandini Shah | 9 |
表格5:客户
Customer_ID | Name | Age | Salary |
---|---|---|---|
1 | Aryan Jain | 51 | 56000 |
2 | Arohi Dixit | 21 | 25000 |
3 | Vineet Garg | 24 | 31000 |
4 | Ajeet Singh | 23 | 32000 |
5 | Ravi Rathod | 23 | 42000 |
6 | Paras Aggrawal | 22 | 50000 |
7 | Sonakshi Kapadiya | 24 | 28000 |
8 | Sonali Kapoor | 28 | 82000 |
表格6:订单
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 |
4 | 2012-04-11 | 4 | 5000 |
5 | 2012-05-04 | 8 | 8000 |
示例 1:
编写一个查询,将员工表作为左表,部门表作为右表进行左连接操作。
查询:
mysql> SELECT e.EmployeeID, e.Employee_Name, e.Employee_Salary, d.DepartmentID, d.Department_Name FROM employee e LEFT JOIN department d ON e.EmployeeID = d.Employee_ID;
我们使用SELECT命令检索了employee和department表中的EmployeeID、Employee_Name、Employee_Salary、DepartmentID和Department_Name。然后我们使用LEFT JOIN关键字在employee和department表上执行左连接操作,其中’e’和’d’是别名。这两个表根据两个表中都存在的列EmployeeID进行连接。
您将获得以下输出:
EmployeeID | Employee_Name | Employee_Salary | DepartmentID | Department_Name |
---|---|---|---|---|
1 | Arun Tiwari | 50000 | 1 | Production |
2 | Sachin Rathi | 64000 | NULL | NULL |
3 | Harshal Pathak | 48000 | 2 | Sales |
4 | Arjun Kuwar | 46000 | 3 | Marketing |
5 | Sarthak Gada | 62000 | 4 | Accounts |
6 | Saurabh Sheik | 53000 | NULL | NULL |
7 | Shubham Singh | 29000 | 5 | Development |
8 | Shivam Dixit | 54000 | NULL | NULL |
9 | Vicky Gujral | 39000 | 6 | HR |
10 | Vijay Bose | 28000 | 7 | Sales |
EmployeeID、Employee_Name、Employee_Salary、DepartmentID、Department_Name 是从员工表和部门表中检索出来的。检索出员工表中的所有记录。只检索出在员工表中有相应EmployeeID的记录在部门表中。部门表中的其他记录,如果EmployeeID与员工表中的EmployeeID不匹配,则显示为NULL。
Example 2:
编写一个查询以执行左连接操作,将贷款表作为左表,借款人表作为右表。
查询:
mysql> SELECT l.LoanID, l.Branch, l.Amount, b.CustID, b.CustName FROM Loan l LEFT JOIN Borrower b ON l.LoanID = b.LoanID;
我们使用SELECT命令检索在贷款和借款人表中出现的LoanID、Branch、Amount、CustID、CustName。然后我们使用LEFT JOIN关键字在贷款和借款人表上执行左连接操作,其中’l’和’b’是别名。这两个表通过在两个表中都存在的LoanID列进行连接。
您将获得以下输出:
LoanID | Branch | Amount | CustID | CustName |
---|---|---|---|---|
1 | B1 | 15000 | 1 | Sonakshi Dixit |
2 | B2 | 10000 | 4 | Isha Deshmukh |
3 | B3 | 20000 | NULL | NULL |
4 | B4 | 100000 | 2 | Shital Garg |
5 | B5 | 150000 | 3 | Swara Joshi |
6 | B6 | 50000 | NULL | NULL |
7 | B7 | 35000 | 5 | Swati Bose |
8 | B8 | 85000 | NULL | NULL |
LoanID,Branch,Amount,CustID,CustName 是从贷款和借款人表中检索出来的。从贷款表中检索出所有记录。仅从借款人表中检索出那些借款表中有对应LoanID的记录。借款人表中没有与贷款表的LoanID匹配的LoanID的其他记录则显示为NULL。
示例3:
编写一个查询来执行左连接操作,将客户表作为左表,将订单表作为右表。
查询:
mysql> SELECT c.Customer_ID, c.Name, c.Age, c.Salary, o.Order_ID, o.Order_Date, o.Amount FROM customer c LEFT JOIN orders o ON c.Customer_ID = o.Customer_ID;
我们使用SELECT命令从customer和orders表中检索Customer_ID、Name、Age、Salary、Order_ID、Order_Date、Amount。然后我们使用LEFT JOIN关键字在customer和orders表上执行左连接操作,其中’c’和’o’是别名。这两个表根据在两个表中都存在的列Customer_ID进行连接。
您将获得以下输出:
Customer_ID | Name | Age | Salary | Order_ID | Order_Date | Amount |
---|---|---|---|---|---|---|
1 | Aryan Jain | 51 | 56000 | NULL | NULL | NULL |
2 | Arohi Dixit | 21 | 25000 | 1 | 2012-01-20 | 3000 |
2 | Arohi Dixit | 21 | 25000 | 2 | 2012-05-18 | 2000 |
3 | Vineet Garg | 24 | 31000 | 3 | 2012-06-28 | 4000 |
4 | Ajeet Singh | 23 | 32000 | 4 | 2012-04-11 | 5000 |
5 | Ravi Rathod | 23 | 42000 | NULL | NULL | NULL |
6 | Paras Aggrawal | 22 | 50000 | NULL | NULL | NULL |
7 | Sonakshi Kapadiya | 24 | 28000 | NULL | NULL | NULL |
8 | Sonali Kapoor | 28 | 82000 | 5 | 2012-05-04 | 8000 |
从顾客和订单表中检索得到Customer_ID、Name、Age、Salary、Order_ID、Order_Date、Amount。从顾客表中检索得到所有记录。从订单表中只检索那些在顾客表中有对应的Customer_ID的记录。