九月 3, 2023
摘要:在本教程中,您将学习如何使用基本的 PostgreSQL SELECT 语句从表中查询数据。
目录
请注意,如果您不知道如何使用 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
FROM
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
FROM
customer;
3) 使用 SELECT 语句查询表所有列数据的示例
以下查询使用SELECT
语句从customer
表的所有列中检索数据:
SELECT * FROM customer;
在此示例中,我们在SELECT
列表子句中使用了星号 (*
),它是所有列的简写。我们没有在SELECT
子句中列出所有列,而是使用星号 (*
) 来简化查询语句。
但是,当您在 Python、Java、Node.js 或 PHP 等应用程序代码中嵌入 SQL 语句时,在SELECT
语句中使用星号 (*
) 并不是一个好的做法,原因如下:
- 数据库性能。假设您有一个包含许多列和大量数据的表,带有星号 (
*
) 简写的SELECT
语句将从表的所有列中选择数据,这对于应用程序来说可能不是必需的。 - 应用性能。从数据库中检索不必要的数据会增加数据库服务器和应用程序服务器之间的流量。因此,您的应用程序可能响应速度较慢且可扩展性较差。
由于这些原因,只要有可能,最好在SELECT
列表子句中显式指定列名,以便仅从数据库获取必要的数据。
对于检查数据库数据的临时查询,您可以使用星号 (*
) 简写。
4) 使用带有表达式的 SELECT 语句的示例
以下示例使用SELECT
语句返回所有客户的全名和电子邮件:
SELECT
first_name || ' ' || last_name,
email
FROM
customer;
输出:
在此示例中,我们使用串联运算符 ||
来串联每个客户的名字、空格和姓氏。
在下一个教程中,您将学习如何使用列别名为表达式分配更有意义的名称。
5) 使用带有表达式的 SELECT 语句的示例
以下示例使用带有表达式的SELECT
语句。它省略了FROM
子句:
SELECT 5 * 3;
这是输出:
在本教程中,您学习了如何使用 PostgreSQL 的SELECT
语句的基本形式来查询单个表中的数据。