join语句有inner join、left join、right join和full outer join,默认是哪种
时间: 2023-11-26 19:48:56 浏览: 424
JOIN语句默认是INNER JOIN。INNER JOIN是指只返回两个表中匹配的行,而LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN则会返回不匹配的行。LEFT JOIN返回左表中所有的行和右表中匹配的行,右表中不匹配的行则用NULL填充;RIGHT JOIN则返回右表中所有的行和左表中匹配的行,左表中不匹配的行则用NULL填充;FULL OUTER JOIN则返回两个表中所有的行,不匹配的行用NULL填充。
相关问题
②联接查询中,INNER JOIN、 LEFT OUTER JOIN 、RIGHT OUTER JOIN、 FULL OUTER JOIN 的结果各有什么不同?
### 不同类型的 JOIN 查询结果区别
#### 1. INNER JOIN
`INNER JOIN` 返回两张表中满足连接条件的记录。这意味着只有那些在两张表中都存在的匹配数据才会被返回。
```sql
SELECT table1.column_name, table2.column_name
FROM table1
INNER JOIN table2 ON table1.common_field = table2.common_field;
```
在这种情况下,如果 `common_field` 的值在任一表中不存在,则对应的行不会出现在结果集中[^1]。
#### 2. LEFT OUTER JOIN (LEFT JOIN)
`LEFT OUTER JOIN` 或简称 `LEFT JOIN` 将返回左表中的所有记录以及右表中与之匹配的记录。如果没有找到匹配项,那么对应的位置将以 `NULL` 值填充。
```sql
SELECT table1.column_name, table2.column_name
FROM table1
LEFT JOIN table2 ON table1.common_field = table2.common_field;
```
此查询会确保无论是否有匹配项,都会显示左侧表的所有行[^4]。
#### 3. RIGHT OUTER JOIN (RIGHT JOIN)
类似于 `LEFT JOIN`,但是这里是保留右侧表的所有记录,并补充左侧表的相关信息或者以 `NULL` 替代缺失部分。
```sql
SELECT table1.column_name, table2.column_name
FROM table1
RIGHT JOIN table2 ON table1.common_field = table2.common_field;
```
这种形式通常较少见,因为可以通过交换两侧表位置实现同样的功能[^4]。
#### 4. FULL OUTER JOIN
理论上讲,`FULL OUTER JOIN` 是将 `LEFT JOIN` 和 `RIGHT JOIN` 的结果结合起来展示所有的不重复组合。但实际上并非所有数据库引擎原生支持这一特性;例如 MySQL 并无直接提供这样的关键字[^2]。
一种替代方案是在标准 SQL 中使用如下方法模拟:
```sql
SELECT *
FROM table1
LEFT JOIN table2 ON table1.common_field = table2.common_field
UNION ALL
SELECT *
FROM table1
RIGHT JOIN table2 ON table1.common_field = table2.common_field
WHERE table1.common_field IS NULL;
```
这里利用了 `UNION ALL` 来合并两个独立的部分,同时排除掉重复的内容[^3]。
---
### 联接查询中列名使用表名的规则
正如之前讨论过的那样,在进行多表联合检索的时候,为了避免名称冲突或者是提升语句可读性,应该遵循一定的命名约定原则:
- 当同一个字段名字仅仅在一个单独的表格里出现时,可以选择不用加前缀说明它来自于哪个特定的对象;
- 对于跨多个资源文件共享的名字而言,则强烈建议采用完全限定的形式书写出来以便清楚表明意图所在之处[^1][^2]。
此外还需注意一点就是当涉及到复杂的子询问结构或者其他高级技巧应用场合下也可能需要更加细致入微地对待这个问题以免造成不必要的麻烦或混乱局面发生。
---
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]。
阅读全文
相关推荐















