📜  PostgreSQL – 子查询

📅  最后修改于: 2022-05-13 01:57:14.842000             🧑  作者: Mango

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'
    );

输出: