在 PostgreSQL 中,JOIN 用于从多个表格中联合检索数据,以便在一个查询中使用来自不同表格的列。通过使用 JOIN 操作,你可以将表格之间的关联关系合并起来,以便在一个查询中获取更完整的信息。以下是一些常见的 JOIN 类型:

1. 内连接(INNER JOIN):

内连接返回两个表格之间匹配的行,忽略不匹配的行。
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

2. 左外连接(LEFT JOIN 或 LEFT OUTER JOIN):

左外连接返回左表格中的所有行,以及右表格中匹配的行。如果右表格中没有匹配的行,将填充 NULL 值。
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

3. 右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN):

右外连接返回右表格中的所有行,以及左表格中匹配的行。如果左表格中没有匹配的行,将填充 NULL 值。
SELECT customers.customer_name, orders.order_id
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

4. 全外连接(FULL JOIN 或 FULL OUTER JOIN):

全外连接返回两个表格中的所有行,如果没有匹配的行,则将填充 NULL 值。
SELECT customers.customer_name, orders.order_id
FROM customers
FULL JOIN orders ON customers.customer_id = orders.customer_id;

5. 交叉连接(CROSS JOIN):

交叉连接返回两个表格中的所有可能的组合,它没有使用任何条件来匹配行。
SELECT customers.customer_name, products.product_name
FROM customers
CROSS JOIN products;

6. 自连接(Self Join):

自连接是指将表格与其自身连接,常用于处理包含层次关系的数据。
SELECT e1.employee_id, e1.first_name, e1.manager_id, e2.first_name AS manager_name
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id;

上述查询使用 LEFT JOIN 自连接来获取每个员工及其经理的信息。

这些是一些基本的 JOIN 类型的示例。你可以根据实际情况选择不同的连接类型,以满足你的查询需求。


转载请注明出处:http://www.zyzy.cn/article/detail/14141/PostgreSQL