SQL 完全外连接
本文将通过简单且合适的示例向您清楚地解释FULL OUTER JOIN运算符。在进入主题之前,让我们简要了解一下FULL OUTER JOIN运算符。
什么是FULL OUTER JOIN运算符?
全外连接是一种连接操作,它合并了两个表的结果集,包括来自两个表的匹配和非匹配行。当两个表都满足请求的连接条件时,返回两个表中的所有行,并且如果表之间没有匹配的行,则用NULL值填充非匹配表的列。全外连接操作的功能如下所示:
语法:
完全外连接操作的基本语法如下所示,并对其中每个术语进行了解释
SELECT * FROM table1
FULL OUTER JOIN table2
ON table1.column = table2.column;
这里table 1和table 2是两个需要基于特定条件连接的表。
匹配的行: 当table1的一行与table2的一行根据连接条件匹配时,结果集中包含来自两个表的列。
table 1中的非匹配行: 如果在table 1中的一行没有匹配,使用NULL值填充来自table 2的列。
table 2中的非匹配行: 如果在table 2中的一行没有匹配,使用NULL值填充来自table 1的列。
让我们来看一些例子,更清楚地理解全外连接操作的工作原理。
例子 1:
考虑两个表Student和Department,用于演示Full Outer Join运算符的运行。首先让我们创建这两个表并插入值。
CREATE TABLE Student(ID VARCHAR(20), Name VARCHAR(50), Total_marks INT(20), Contact_no INT(20));
现在,我们将要将值插入到这个表中。
INSERT INTO Student values("1", "Ram", 500, 9127563212);
INSERT INTO Student values("2", "Joseph", 476, 8123456782);
INSERT INTO Student values("3", "Rehman", 389, 9814569871);
INSERT INTO Student values("4", "Priyanka", 450, 7891234561);
INSERT INTO Student values("5", "Saleem", 534, 7765123456);
INSERT INTO Student values("6", "Dhanush", 550, 8877123590);
学生表将如下所示:
SELECT * FROM Student;
ID | Name | Total_marks | Contact_no |
---|---|---|---|
1 | Ram | 500 | 9127563212 |
2 | Joseph | 476 | 8123456782 |
3 | Rehman | 389 | 9814569871 |
4 | Priyanka | 450 | 7891234561 |
5 | Saleem | 534 | 7765123456 |
6 | Dhanush | 550 | 8877123590 |
现在,我们将创建一个Department表。
CREATE TABLE Department(ID VARCHAR(20), department_name VARCHAR(20), department_id INT(10));
现在,我们将要向其中插入值。
INSERT INTO Department values("2", "CSE", 122);
INSERT INTO Department values("3", "ECE", 123);
INSERT INTO Department values("9", "IT", 126);
部门表将如下所示:
SELECT * FROM Department;
ID | department_name | department_id |
---|---|---|
2 | CSE | 122 |
3 | ECE | 123 |
4 | IT | 126 |
使用全外连接操作符将这两个表连接起来。
SELECT Student.ID, Student.Name, Student.Total_marks, Department. department_name FROM Student FULL OUTER JOIN Department ON Student.ID = department.ID;
输出:
ID | Name | Total_marks | department_name |
---|---|---|---|
1 | Ram | 500 | NULL |
2 | Joseph | 476 | CSE |
3 | Rehman | 389 | ECE |
4 | Priyanka | 450 | IT |
5 | Priyanka | 450 | NULL |
6 | Saleem | 534 | NULL |
示例2:
考虑下面的两个表Student和Student Joining。
Roll_no | name | department |
---|---|---|
134 | Anish | CSE |
135 | Rahul | ECE |
136 | Smitha | IT |
137 | Ganesh | Mechanical |
138 | Arun | EEE |
表格:学生
Roll_no | Admission_no | joining_date |
---|---|---|
134 | AS123 | 23-11-2020 |
136 | AS126 | 21-08-2021 |
137 | AS127 | 21-08-2021 |
表:Student_joining
现在,我们将使用全外连接运算符将这两个表进行连接。
SELECT Student.Roll_no, Student.name, Student_joining.Admission_no, Student_joining.joining_date FROM Student FULL OUTER JOIN Student_joining ON Student.Roll_no = Student_joining.Roll_no;
输出:
Roll_no | name | Admission_no | Joining_date |
---|---|---|---|
134 | Anish | AS123 | 23-11-2020 |
135 | Rahul | NULL | NULL |
136 | Smitha | AS126 | 21-08-2021 |
137 | Ganesh | AS127 | 21-08-2021 |
138 | Arun | NULL | NULL |
示例3:
假设有2个表,一个是product,另一个是product_category。
product_id | product_name | category_id |
---|---|---|
1 | Laptop | 22 |
2 | Shirt | 24 |
3 | Jeans | 24 |
4 | Mobile | 22 |
5 | Book | 25 |
表:product
product_id | category |
---|---|
2 | Clothing |
5 | Stationary |
表:product_category
让我们使用FULL OUTER JOIN运算符基于product_id将这两个表合并。
SELECT product.product.id, product. product_name, product_category.category FROM product FULL OUTER JOIN product_category ON product. product_id = product_category.product_id;
结果集将是
输出:
product_id | product_name | category |
---|---|---|
1 | Laptop | NULL |
2 | Shirt | Clothing |
3 | Jeans | NULL |
4 | Mobile | NULL |
5 | Book | Stationary |
全外连接与WHERE子句
在上面的示例中,我们只使用了ON子句将两个表连接起来,但是可以使用WHERE子句过滤记录表,即可以使用全外连接与WHERE子句根据特定条件连接数据。
全外连接操作符与WHERE子句的语法如下所示:
SELECT column_name
FROM table_name1
FULL OUTER JOIN table_name2
ON table_name1.column_name = table_name2.column_name
WHERE condition;
观察下面的示例以清楚地了解如何使用WHERE子句和FULL OUTER JOIN运算符在特定条件下连接表。
示例4:
考虑以下两个表employee和department,以了解如何基于特定条件连接两个表。
emp_id | emp_name | salary |
---|---|---|
45 | Ramesh | 22000 |
46 | Rahim | 20000 |
47 | Sruthi | 30000 |
48 | Swetha | 35000 |
50 | Priyanka | 50000 |
51 | Anjali | 40000 |
表格:employee
emp_id | department_name | department_id |
---|---|---|
45 | HR | 33 |
47 | Development | 35 |
48 | marketing | 36 |
51 | R&D | 39 |
表:部门
现在,我们打算执行以下命令,根据条件加入上述两个表,条件是员工的薪水应大于25000。
SELECT employee.emp_id, employee.emp_name, employee.salary, department.department_name FROM employee FULL OUTER JOIN department ON employee.emp_id = department.emp_id WHERE employee.salary > 25000;
结果集将会是这样的
输出:
emp_id | emp_name | salary | department_name |
---|---|---|---|
47 | Sruthi | 30000 | Development |
48 | Swetha | 35000 | marketing |
51 | Anjali | 40000 | R&D |
所以,这就是关于FULL OUTER JOIN操作的工作原理。本文提供了关于FULL OUTER JOIN运算符的清晰解释,并附有有效且合适的示例。