说明 LEFT JION 、RIGHT JOIN 、INNER JOIN 、FULL JOIN 的区别
时间: 2023-12-28 20:18:43 浏览: 79
LEFT JOIN, RIGHT JOIN, INNER JOIN,和FULL JOIN是SQL中用于合并表格数据的不同类型的连接操作。它们的区别如下:
- LEFT JOIN: 以左表为基础,查询左表的全部数据,并展示与左表相关联的右表数据,如果右表没有匹配的数据,则显示NULL值。
- RIGHT JOIN: 以右表为基础,查询右表的全部数据,并展示与右表相关联的左表数据,如果左表没有匹配的数据,则显示NULL值。
- INNER JOIN: 仅查询两个表中有匹配的数据,并展示匹配的数据,如果没有匹配的数据,则不显示结果。
- FULL JOIN: 查询两个表中的全部数据,并展示匹配的数据,如果没有匹配的数据,则显示NULL值。
在Oracle中,FULL JOIN是可用的,而在MySQL中并不直接支持FULL JOIN。但是可以通过使用UNION操作符将左连接和右连接的结果集合并起来,从而实现FULL JOIN的效果。
相关问题
full join,left join, right join, inner join 之间的区别
以下是四种不同类型的SQL连接及其区别的解释和示例:
1. Inner Join(内连接):返回两个表中匹配的行。只有当两个表中都存在匹配时,才会返回结果。
```sql
SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
```
2. Left Join(左连接):返回左表中所有的行,以及右表中匹配的行。如果右表中没有匹配的行,则返回 NULL 值。
```sql
SELECT *
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
```
3. Right Join(右连接):返回右表中所有的行,以及左表中匹配的行。如果左表中没有匹配的行,则返回 NULL 值。
```sql
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
```
4. Full Join(全连接):返回左表和右表中所有的行。如果某个表中没有匹配的行,则返回 NULL 值。
```sql
SELECT *
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
```
left join , right join , inner join , full join区别,自己建表演示下
好的,我来为您介绍一下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操作在处理多表查询时非常有用,可以根据需要选择合适的连接方式来获取所需的数据。
阅读全文