SQL 语言提供了各种连接类型,使开发人员能够混合和分析来自不同表的数据。在这些连接类型中,右连接和左连接占据着独特的地位。右连接和左连接也称为右外连接和左外连接。
事实上,“外连接”是一个类别,包括左外连接、右外连接和完全外连接。
PostgreSQL **左外连接**返回左表中的所有行以及右表中的匹配行。如果未找到匹配项,则右侧结果为 NULL
。
PostgreSQL **右外连接**返回右表中的所有行以及左表中的匹配行。如果未找到匹配项,则左侧结果为 NULL
。
PostgreSQL **完全外连接**结合了左外连接和右外连接的结果。它返回两个表中的所有行,并在任一侧缺少匹配项时填充 NULL
。
PostgreSQL 中外连接的基本语法如下:
SELECT column_name(s)
FROM table1
[LEFT | RIGHT | FULL] OUTER JOIN table2
ON table1.column_name = table2.column_name;
其中,table1
和 table2
是您要连接的表,column_name
是它们之间的公共字段。
让我们看一个示例,说明左连接在 PostgreSQL 中是如何工作的。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATE);
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(255));
INSERT INTO orders VALUES
(1, 101, 1, '2021-01-01'),
(2, 102, 2, '2021-02-01'),
(3, 103, 3, '2021-03-01')
INSERT INTO customers VALUES
(101, 'John Doe'),
(102, 'Jane Smith');
SELECT customers.customer_name, orders.order_date
FROM customers
LEFT OUTER JOIN orders
ON customers.customer_id = orders.customer_id;
此查询将返回所有客户及其订单日期的列表,包括那些没有下过订单的客户。
seo=# SELECT customers.customer_name, orders.order_date
seo-# FROM customers
seo-# LEFT OUTER JOIN orders
seo-# ON customers.customer_id = orders.customer_id;
customer_name | order_date
---------------+------------
John Doe | 2021-01-01
Jane Smith | 2021-02-01
(2 rows)
左连接和右连接在实际编程场景中非常有用。
**电子商务平台**:将客户信息与采购订单相结合,以跟踪购买行为,包括没有进行任何购买的客户。
**项目管理工具**:将任务分配与员工详细信息合并以管理项目时间表,包括没有分配任何任务的员工。
**医疗保健系统**:将患者记录与其病史相关联,以便更好地诊断和治疗,包括没有既往病史的患者。
在维恩图中可视化两个圆圈,每个圆圈代表一个表。在左外连接中,结果集包括整个左圆圈(表)和右圆圈(表)的相交部分。右外连接则相反,完全外连接包括两个圆圈的所有部分。
掌握 PostgreSQL 中的外部联接允许开发人员更有效地处理和提取数据中的宝贵见解。理解和使用左外联接和右外联接可以显著增强您的数据分析能力。
了解 PostgreSQL 解析器如何选择联接方法对于定义联接策略以增强数据库性能非常有价值。要了解更多关于此主题的信息并将您的联接知识提升到另一个层次,请查看这篇关于PostgreSQL 联接类型理论的文章。