分享到

简介

SELECT 是最适合用于查询和返回 MySQL 表中信息的 SQL 命令。顾名思义,它用于指定从数据库中选择匹配记录的条件。这是一个广泛有用的角色,不仅适用于读取数据,也适用于定位更新和其他操作。

在本文中,我们将介绍 SELECT 命令的基本形式,并演示如何使用它返回数据。虽然 SELECT 支持许多高级用例,但我们将坚持一些更简单的形式来演示基本的命令结构。

SELECT 命令的通用语法

`SELECT` 命令的基本格式如下:

SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;

此语句由几个不同的部分组成:

  • SELECTSELECT 命令本身。此 SQL 命令表示我们希望查询视图以获取其包含的数据。围绕它的参数和子句决定了返回输出的内容和格式。
  • <column_names>SELECT 语句可以返回整个行(如果使用 * 通配符指定)或可用列的子集。如果您只想输出特定列,请提供您想要显示的列名,并用逗号分隔。
  • FROM <table_name>FROM 关键字用于指示应查询的表或视图。在大多数简单查询中,这由一个包含您感兴趣数据的单一表组成。
  • <additional_conditions_and_formatting>:大量的过滤器、输出修饰符和条件可以作为 SELECT 命令的附加项进行指定。您可以使用它们来帮助精确定位具有特定属性的数据、修改输出格式或进一步处理结果。

使用 SELECT 指定要显示的列

`SELECT` 命令的列规范部分要求您命名要显示查询数据的列。

对于即席查询和数据探索,最有用的选项之一是使用星号来指示您要显示所有可用列的值

SELECT * FROM my_table;

这将显示 my_table 中的所有记录,因为我们没有提供任何筛选来缩小结果范围。每条记录的所有列将按照它们在表中定义的顺序显示。

如果您正在查询一个包含许多列的表,您可能希望使用的一种修改是使用 \G 而不是分号 ; 来结束您的语句

SELECT * FROM my_table\G

\G’ 语句终止符告诉 MySQL 垂直而不是水平显示结果,这可以提高包含许多列或长值的表的读取性。您可以将 ‘\G’ 用于终止任何语句,而不仅仅是与 ‘SELECT’ 一起使用。

您还可以通过指定列名来选择查看可用列的子集。列名用逗号分隔,并按给定顺序显示

SELECT column2, column1 FROM my_table;

这将显示 my_table 中的所有记录,但只按 column2column1 的顺序显示这两列。

使用 AS 定义列别名以修改结果表

您可以选择设置列别名来修改输出中列的名称。

SELECT column1 AS "first column" FROM my_table;

这将显示 my_tablecolumn1 的每个值。但是,输出中的列将被标记为 first column 而不是 column1

如果输出结合了可能共享名称的多个表的列名,或者包含尚无名称的计算列,则此功能特别有用。

使用 ORDER BY 定义排序顺序

ORDER BY 子句可用于根据给定条件对结果行进行排序。通用语法如下:

SELECT * FROM my_table ORDER BY <sort_expression>;

这将显示 my_table 中所有记录的所有列的值。结果将按照占位符 <sort_expression> 所表示的表达式进行排序。

例如,假设我们有一个 customer 表,其中包含 first_namelast_nameaddressphone_number 列。如果我们要按 last_name 的字母顺序显示结果,可以使用以下命令

SELECT * FROM customer ORDER BY last_name;
显示结果

结果按 last_name 列的升序字母顺序排序。

要反转排序,我们可以在 ORDER BY 子句的末尾添加 DESC 修饰符

SELECT * FROM customer ORDER BY last_name DESC;
显示结果

您还可以按多列排序。在这里,我们首先按 last_name 排序,然后对于具有相同 last_name 值的任何列,按 first_name 排序。两种排序都是升序。

SELECT * FROM customer ORDER BY last_name, first_name;
显示结果

获取去重结果

如果您想在 MySQL 中查找某一列的值范围,可以使用 SELECT DISTINCT 变体。这将为列的每个不同值显示一行。

基本语法如下:

SELECT DISTINCT column1 FROM my_table;

这将为 column1 中的每个唯一值显示一行。

例如,要显示 shirt 表中 color 的所有不同值,您可以输入

SELECT DISTINCT color FROM shirt;
+--------+
color |
+--------+
blue |
green |
orange |
red |
yellow |
+--------+
5 rows in set (0.00 sec)

要显示多列的唯一性,您可以添加用逗号分隔的其他列。

例如,这将显示 shirt 表中 colorshirt_size 的所有不同组合

SELECT DISTINCT color,shirt_size FROM shirt;
+--------+------------+
color | shirt_size |
+--------+------------+
blue | M |
blue | S |
green | M |
green | L |
green | S |
orange | L |
orange | M |
red | M |
yellow | S |
+--------+------------+
9 rows in set (0.00 sec)

这将显示表中 colorshirt_size 的每个唯一组合。

总结

在本文中,我们介绍了 SELECT 命令的一些基本元素,以演示如何从 MySQL 表中返回数据。还有更多可选子句可以修改命令的行为,允许您缩小所需结果的范围、指定要返回的行数等等。在后续文章中,我们将探讨这些修饰符以增强 SELECT 的实用性。

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直撰写有关数据库、Linux、基础设施和开发者工具的文章。他目前与妻子和两只兔子居住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。
© . All rights reserved.