PostgreSQL – 子查询
在本文中,我们将讨论使用PostgreSQL 子查询构建复杂查询的过程。子查询在最简单的术语中可以定义为伪装在单个 PostgreSQL 命令中的多个查询。
在本文中,我们将使用示例 DVD 租赁数据库,此处进行了说明,可以通过单击示例中的此链接进行下载。
现在,让我们看几个 PostgreSQL 子查询的例子。
示例 1:
在这里,我们将从样本数据库的“电影”表中查询所有租金高于平均租金的电影。为此,我们需要使用 SELECT 语句和平均函数(AVG) 找到平均租金。然后在第二个 SELECT 语句中使用第一个查询的结果来查找租金高于平均水平的电影。
SELECT
AVG (rental_rate)
FROM
film;
输出:
现在我们将查询租金高于平均租金的电影。
SELECT
film_id,
title,
rental_rate
FROM
film
WHERE
rental_rate > 2.98;
输出:
如您所见,上面的查询不太优雅,并且需要不必要的多次查询。这可以通过使用 PostgreSQL 子查询来避免,如下所示。
SELECT
film_id,
title,
rental_rate
FROM
film
WHERE
rental_rate > (
SELECT
AVG (rental_rate)
FROM
film
);
输出:
要注意上述查询的执行顺序,请注意以下几点:
- 首先,执行子查询。
- 其次,获取结果并将其传递给外部查询。
- 第三,执行外部查询。
示例 2:
在这里,我们将使用示例数据库的“租赁”表中的 IN运算符查询返回日期在 2005-05-29 和 2005-05-30 之间的所有电影。
SELECT
film_id,
title
FROM
film
WHERE
film_id IN (
SELECT
inventory.film_id
FROM
rental
INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
WHERE
return_date BETWEEN '2005-05-29'
AND '2005-05-30'
);
输出: