📅  最后修改于: 2023-12-03 15:33:45.840000             🧑  作者: Mango
在 PostgreSQL 中,子查询是指将一个 SQL 查询嵌套在另一个 SQL 查询中的查询。子查询在编写 SQL 查询时非常有用,因为它允许您在查询中使用动态生成的数据,这些数据在运行时动态生成。
子查询的语法如下:
SELECT column1, column2, ...
FROM table1
WHERE column1 OPERATOR (SELECT column1 FROM table2 WHERE condition);
关键字 SELECT
后面的括号中包含第二个查询。该查询是在主查询中嵌套的查询,对于每个主查询的行,都会使用该查询来计算值。括号中的子查询称为嵌套查询。
让我们看一个使用子查询的例子。
假设我们有两个表格:customers
和 orders
。customers
表格包含客户信息,orders
表格包含订单信息。
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INTEGER NOT NULL,
order_date DATE NOT NULL
);
INSERT INTO customers (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
INSERT INTO orders (customer_id, order_date) VALUES
(1, '2020-01-01'),
(2, '2020-02-01'),
(1, '2020-03-01'),
(3, '2020-04-01'),
(1, '2020-05-01');
我们想要列出每个客户的姓名和他们最近一次下订单的日期。我们可以使用子查询来完成这个任务。
SELECT name, (
SELECT MAX(order_date)
FROM orders
WHERE customer_id = customers.id
) AS latest_order
FROM customers;
输出:
name | latest_order
---------+-------------
Alice | 2020-05-01
Bob | 2020-02-01
Charlie | 2020-04-01
在这个示例中,我们在主查询中选择了 customers
表格的 name
列,并在主查询中使用子查询来选择每个客户的最近一次订单的日期。