添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

请注意,如果您不知道如何使用 psql 命令行工具或 pgAdmin GUI 工具对 PostgreSQL 数据库执行查询,可以查看 连接到 PostgreSQL 数据库教程

PostgreSQL SELECT 语句简介

使用数据库时最常见的任务之一是使用 SELECT 语句从表中查询数据。

SELECT 语句是 PostgreSQL 中最复杂的语句之一。它有许多子句,您可以使用它们来形成灵活的查询。

由于其复杂性,我们将其分解为许多简短且易于理解的教程,以便您可以更快地了解每个子句。

SELECT 语句有以下子句:

  • 使用 DISTINCT 运算符选择不同的行。
  • 使用 ORDER BY 子句对行进行排序。
  • 使用 WHERE 子句过滤行。
  • 使用 LIMIT FETCH 子句从表中选择行的子集。
  • 使用 GROUP BY 子句将行分组。
  • 使用 HAVING 子句过滤分组。
  • 使用 INNER JOIN , LEFT JOIN , FULL OUTER JOIN , CROSS JOIN 连接 子句与其他表连接。
  • 使用 UNION INTERSECT EXCEPT 执行集合运算。
  • 在本教程中,您将重点关注 SELECT 列表和 FROM 子句。

    PostgreSQL SELECT 语句语法

    让我们从从单个表中检索数据的 SELECT 语句的基本形式开始。

    下面说明了 SELECT 语句的语法:

    SELECT
       select_list
       table_name;
    

    让我们更详细地观察该 SELECT 语句:

  • 首先,指定一个选择列表,该列表可以是要从中检索数据的表中的一列或多列的列表。如果指定多列列表,则需要在两列之间放置逗号 ( , ) 来分隔它们。如果要从表的所有列中检索数据,可以使用星号 ( * ) 简写,而不用指定所有列名。选择列表还可以包含表达式或文字值。
  • 其次,在 FROM 关键字后指定要从中查询数据的表的名称。
  • 其中 FROM 子句是可选的。如果不从任何表查询数据,则可以在 SELECT 语句中省略 FROM 子句。

    PostgreSQL 在 SELECT 语句中 SELECT 列表子句之前计算 FROM 子句:

    请注意,SQL 关键字不区分大小写。这意味着 SELECT 等价于 select Select 。按照惯例,我们将以大写方式使用所有 SQL 关键字,以使查询更易于阅读。

    PostgreSQL SELECT 示例

    让我们看一下使用 PostgreSQL 的 SELECT 语句的一些示例。

    我们将使用 示例数据库 中的 customer 表进行演示,如下。

    1) 使用 SELECT 语句查询一列数据的示例

    此示例使用以下 SELECT 语句从 customer 表中查找所有客户的名字:

    SELECT first_name FROM customer;
    

    这是部分输出:

    请注意,我们在 SELECT 语句末尾添加了一个分号 ( ; )。分号不是 SQL 语句的一部分。它用于向 PostgreSQL 发出 SQL 语句结束的标记。分号还用于分隔两个 SQL 语句。

    2) 使用 SELECT 语句查询多列数据的示例

    假设您只想知道客户的名字、姓氏和电子邮件,您可以在 SELECT 列表子句中指定这些列名称,如以下查询所示:

    SELECT
       first_name,
       last_name,
       email
       customer;
    

    3) 使用 SELECT 语句查询表所有列数据的示例

    以下查询使用SELECT语句从customer表的所有列中检索数据:

    SELECT * FROM customer;
    

    在此示例中,我们在SELECT列表子句中使用了星号 (*),它是所有列的简写。我们没有在SELECT子句中列出所有列,而是使用星号 (*) 来简化查询语句。

    但是,当您在 PythonJava、Node.js 或 PHP 等应用程序代码中嵌入 SQL 语句时,在SELECT语句中使用星号 (*) 并不是一个好的做法,原因如下:

  • 数据库性能。假设您有一个包含许多列和大量数据的表,带有星号 (*) 简写的SELECT语句将从表的所有列中选择数据,这对于应用程序来说可能不是必需的。
  • 应用性能。从数据库中检索不必要的数据会增加数据库服务器和应用程序服务器之间的流量。因此,您的应用程序可能响应速度较慢且可扩展性较差。
  • 由于这些原因,只要有可能,最好在SELECT列表子句中显式指定列名,以便仅从数据库获取必要的数据。

    对于检查数据库数据的临时查询,您可以使用星号 (*) 简写。

    4) 使用带有表达式的 SELECT 语句的示例

    以下示例使用SELECT语句返回所有客户的全名和电子邮件:

    SELECT 
       first_name || ' ' || last_name,
       email
       customer;
    

    在此示例中,我们使用串联运算符 ||来串联每个客户的名字、空格和姓氏。

    在下一个教程中,您将学习如何使用列别名为表达式分配更有意义的名称。

    5) 使用带有表达式的 SELECT 语句的示例

    以下示例使用带有表达式的SELECT语句。它省略了FROM子句:

    SELECT 5 * 3;
    

    这是输出:

    在本教程中,您学习了如何使用 PostgreSQL 的SELECT语句的基本形式来查询单个表中的数据。