SQL RIGHT JOIN
- SQL中的连接操作用于将多个表合并为单个表。
- 如果我们使用右连接来合并两个不同的表,则将从右表中获取所有记录。 但我们只会从左表中获取那些在右表中具有相应键的记录。左表中的其余其他记录,其公共列值与右表的公共列值不匹配; 显示为NULL。
- 让我们看一下在SQL中执行右连接操作的查询语法。
SELECT TableName1.columnName1, TableName2.columnName2 FROM TableName1
RIGHT JOIN TableName2 ON TableName1.ColumnName = TableName2.ColumnName;
现在让我们通过例子来深入了解SQL中的右连接。所有例子中的查询都将使用MySQL数据库进行编写。
考虑我们有以下带有给定数据的表:
表1:员工
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 RIGHT JOIN department d ON e.EmployeeID = d.Employee_ID;
我们使用SELECT命令检索了在员工和部门表中存在的EmployeeID,Employee_Name,Employee_Salary,DepartmentID,Department_Name。然后我们使用RIGHT JOIN关键字在员工和部门表上执行右连接操作,其中’e’和’d’是别名。这两个表是根据两个表中都存在的列EmployeeID进行连接。
您将获得以下输出:
EmployeeID | Employee_Name | Employee_Salary | DepartmentID | Department_Name |
---|---|---|---|---|
1 | Arun Tiwari | 50000 | 1 | Production |
3 | Harshal Pathak | 48000 | 2 | Sales |
4 | Arjun Kuwar | 46000 | 3 | Marketing |
5 | Sarthak Gada | 62000 | 4 | Accounts |
7 | Shubham Singh | 29000 | 5 | Development |
9 | Vicky Gujral | 39000 | 6 | HR |
10 | Vijay Bose | 28000 | 7 | Sales |
EmployeeID, Employee_Name, Employee_Salary, DepartmentID, Department_Name是从employee和department表中检索出来的。检索出department表中的所有记录。只检索出在department表中具有相应EmployeeID的记录从employee表中。
例2:
编写查询以执行右连接操作,将loan表作为左表,将borrower表作为右表。
查询:
mysql> SELECT l.LoanID, l.Branch, l.Amount, b.CustID, b.CustName FROM Loan l RIGHT JOIN Borrower b ON l.LoanID = b.LoanID;
我们使用SELECT命令从贷款和借款人表中检索LoanID、Branch、Amount、CustID、CustName。然后,我们使用RIGHT JOIN关键字在贷款和借款人表上执行右连接操作,其中’l’和’b’是别名。这两个表通过同时在两个表中都存在的列LoanID进行连接。
您将获得以下输出:
LoanID | Branch | Amount | CustID | CustName |
---|---|---|---|---|
1 | B1 | 15000 | 1 | Sonakshi Dixit |
4 | B4 | 100000 | 2 | Shital Garg |
5 | B5 | 150000 | 3 | Swara Joshi |
2 | B2 | 10000 | 4 | Isha Deshmukh |
7 | B7 | 35000 | 5 | Swati Bose |
NULL | NULL | NULL | 6 | Asha Kapoor |
NULL | NULL | NULL | 7 | Nandini Shah |
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 RIGHT JOIN orders o ON c.Customer_ID = o.Customer_ID;
我们使用SELECT命令检索客户和订单表中的Customer_ID,Name,Age,Salary,Order_ID,Order_Date,Amount。然后我们使用RIGHT JOIN关键字在客户和订单表上执行右联接操作,其中“c”和“o”是别名。这两个表根据Customer_ID列进行连接,该列存在于两个表中。
您将获得以下输出:
Customer_
ID | Name | Age | Salary | Order_ID | Order_Date | Amount |
---|---|---|---|---|---|---|
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 |
8 | Sonali Kapoor | 28 | 82000 | 5 | 2012-05-04 | 8000 |
从customer和orders表中检索到了Customer_ID,Name,Age,Salary,Order_ID,Order_Date和Amount字段。从orders表中检索到了所有记录。从customer表中只检索到了在orders表中有对应Customer_ID的记录。