left join , right join , inner join , full join区别,自己建表演示下
时间: 2024-12-12 10:14:42 浏览: 31
好的,我来为您介绍一下SQL中的LEFT JOIN、RIGHT JOIN、INNER JOIN和FULL JOIN的区别,并通过示例表来演示它们的不同之处。
首先,我们需要创建两个示例表:
```sql
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY,
department_name VARCHAR(50)
);
```
然后,我们插入一些示例数据:
```sql
INSERT INTO employees (id, name, department_id) VALUES
(1, '张三', 1),
(2, '李四', 2),
(3, '王五', 3),
(4, '赵六', NULL);
INSERT INTO departments (id, department_name) VALUES
(1, '人事部'),
(2, '财务部'),
(3, '技术部'),
(4, '市场部');
```
现在,我们来看看不同的JOIN操作的结果:
1. INNER JOIN (内连接):
```sql
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
```
结果:
```
name department_name
----
张三 人事部
李四 财务部
王五 技术部
```
INNER JOIN 只返回两个表中匹配的记录。
2. LEFT JOIN (左外连接):
```sql
SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
```
结果:
```
name department_name
------ --------------
张三 人事部
李四 财务部
王五 技术部
赵六 NULL
```
LEFT JOIN 返回左表(employees)的所有记录,以及右表中匹配的记录。如果没有匹配,则结果中的右表列值为NULL。
3. RIGHT JOIN (右外连接):
```sql
SELECT e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;
```
结果:
```
name department_name
------ --------------
张三 人事部
李四 财务部
王五 技术部
NULL 市场部
```
RIGHT JOIN 返回右表(departments)的所有记录,以及左表中匹配的记录。如果没有匹配,则结果中的左表列值为NULL。
4. FULL JOIN (全外连接):
```sql
SELECT e.name, d.department_name
FROM employees e
FULL JOIN departments d ON e.department_id = d.id;
```
结果:
```
name department_name
------ --------------
张三 人事部
李四 财务部
王五 技术部
赵六 NULL
NULL 市场部
```
FULL JOIN 返回左右表中的所有记录。如果在另一个表中没有匹配,则结果中的相应列值为NULL。
这些JOIN操作在处理多表查询时非常有用,可以根据需要选择合适的连接方式来获取所需的数据。
阅读全文
相关推荐


















