postgresql中left join和right join和inner join的区别
时间: 2023-07-17 08:08:56 浏览: 263
SQL之left join、right join、inner join的区别浅析
在 PostgreSQL 中,LEFT JOIN、RIGHT JOIN 和 INNER JOIN 是不同类型的表连接操作,它们之间的区别如下:
1. INNER JOIN:内连接是最常见的表连接类型。它返回两个表中满足连接条件的行。只有在连接条件成立时,两个表中的行才会被合并到结果集中。如果没有匹配的行,则不会包含在结果中。
2. LEFT JOIN:左连接返回左边表中的所有行,以及与右边表匹配的行,如果没有匹配的行,则右边表的列将包含 NULL 值。左连接关键字是 `LEFT JOIN` 或 `LEFT OUTER JOIN`。
3. RIGHT JOIN:右连接返回右边表中的所有行,以及与左边表匹配的行,如果没有匹配的行,则左边表的列将包含 NULL 值。右连接关键字是 `RIGHT JOIN` 或 `RIGHT OUTER JOIN`。
简而言之,INNER JOIN 仅返回两个表中匹配的行,LEFT JOIN 返回左表中的所有行以及与右表匹配的行,RIGHT JOIN 返回右表中的所有行以及与左表匹配的行。
以下是一个示例,展示了这三种连接类型之间的区别。假设你有两个表:`orders` 和 `customers`。
orders 表:
| order_id | customer_id |
|----------|-------------|
| 1 | 101 |
| 2 | 102 |
| 3 | 103 |
customers 表:
| customer_id | customer_name |
|-------------|---------------|
| 101 | John |
| 103 | Sarah |
| 104 | Emma |
使用以下查询来进行不同类型的连接操作:
1. INNER JOIN:
```sql
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
```
结果:
| order_id | customer_name |
|----------|---------------|
| 1 | John |
| 3 | Sarah |
2. LEFT JOIN:
```sql
SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;
```
结果:
| order_id | customer_name |
|----------|---------------|
| 1 | John |
| 2 | NULL |
| 3 | Sarah |
3. RIGHT JOIN:
```sql
SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;
```
结果:
| order_id | customer_name |
|----------|---------------|
| 1 | John |
| 3 | Sarah |
| NULL | Emma |
希望这个示例能够帮助你理解 LEFT JOIN、RIGHT JOIN 和 INNER JOIN 之间的区别。
阅读全文