inner join 和left join和right join 区别
时间: 2023-12-14 16:34:48 浏览: 128
INNER JOIN、LEFT JOIN和RIGHT JOIN是SQL中的三种常见的表连接方式,它们之间的区别如下:
1. INNER JOIN(内连接):只返回两个表中匹配的行,即只返回连接条件为真的行。如果一个表中的行没有匹配,那么这些行不会出现在结果中。
2. LEFT JOIN(左连接):返回左边表的所有行以及与右边表匹配的行。如果右边表中没有匹配的行,则在结果中将显示NULL值。
3. RIGHT JOIN(右连接):返回右边表的所有行以及与左边表匹配的行。如果左边表中没有匹配的行,则在结果中将显示NULL值。
下面是一个使用INNER JOIN和LEFT JOIN的例子:
```sql
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id;
SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;
```
相关问题
inner join和left join和full join和right join
### 不同类型的SQL连接操作的区别和用法
#### Inner Join
`INNER JOIN` 返回两个表中满足连接条件的记录。这意味着只有当左表和右表都存在匹配的数据时,才会返回这些数据。
```sql
SELECT *
FROM TableA AS A
INNER JOIN TableB AS B ON A.id = B.id;
```
此查询仅会显示那些在 `TableA` 和 `TableB` 中都有对应 `id` 值的行[^1]。
#### Left Join
`LEFT JOIN` (也称为 `LEFT OUTER JOIN`)返回左表中的所有记录,即使右表中不存在匹配项。对于没有找到匹配的情况,在结果集右边会出现 NULL 值。
```sql
SELECT *
FROM TableA AS A
LEFT JOIN TableB AS B ON A.id = B.id;
```
这段代码将展示来自 `TableA` 的每一行;如果 `TableB` 中有相应的匹配,则一起呈现;如果没有,则填充 NULL[^4]。
#### Right Join
`RIGHT JOIN` 是 `LEFT JOIN` 的镜像版本——它保留右侧表格的所有条目,并补充左侧可能存在的任何关联数据。同样地,缺少的部分会被标记为 NULL。
```sql
SELECT *
FROM TableA AS A
RIGHT JOIN TableB AS B ON A.id = B.id;
```
这里的结果将是基于 `TableB` 完整性的集合,加上从 `TableA` 获取的相关信息。
#### Full Join
`FULL JOIN` 或者说是 `FULL OUTER JOIN` 将两者的特性结合起来,即无论哪一侧是否有匹配,都会列出所有的组合情况。因此,最终得到的是两张原始表各自独立以及交叉部分的整体视图。未配对的地方则由 NULL 补充完整。
```sql
SELECT *
FROM TableA AS A
FULL JOIN TableB AS B ON A.id = B.id;
```
上述语句能够提供最全面的信息覆盖度,因为它不仅包含了共同拥有的项目,还包括了单独存在于任一表内的实体[^5]。
inner join, left join, right join
### 不同类型的SQL表连接方式及其用法
#### Inner Join(内连接)
内连接返回两个表中都满足连接条件的行。这意味着只有当左表和右表都有匹配的数据时,才会出现在最终的结果集中。如果某个行在一个表中存在而在另一个表中不存在,则该行不会出现在结果集中。
```sql
SELECT *
FROM student s
INNER JOIN class c
ON s.c_num = c.id;
```
此查询会返回学生表 `student` 和班级表 `class` 中具有相同 `c_num` 和 `id` 值的所有记录[^2]。
#### Left Join(左外连接)
左外连接返回左表中的所有数据,即使在右表中没有找到相应的匹配项也会显示出来;而对于那些找不到对应关系的情况,在右边部分会出现空值(NULL)来填充缺失的信息。
```sql
SELECT A.*, B.*
FROM A
LEFT JOIN B
ON A.id = B.id;
```
这段代码表示从表A获取全部条目,并尝试基于ID字段关联到表B上的相应项目。如果有任何表A内的元素无法映射至表B,则其来自表B的部分会被置为空(null)[^4]。
#### Right Join(右外连接)
右外连接正好与左外连接相反——它优先考虑右侧表格的内容并尽可能多地保留下来。具体来说就是说无论左侧是否有相配的对象都会被纳入输出之中;而一旦遇到左边缺少伙伴的情形下则会在那一侧补上null作为占位符。
```sql
SELECT A.*, B.*
FROM A
RIGHT JOIN B
ON A.id = B.id;
```
上述语句将展示表B里的每一个实例,同时寻找它们能在表A里对应的实体。假如某一行仅存在于表B而不属于表A的一部分,那么这部分就会由null代替呈现给用户[^3]。
阅读全文
相关推荐















