简介
SELECT
是最适合用于查询和返回 MySQL 表中信息的 SQL 命令。顾名思义,它用于指定用于从数据库中选择匹配记录的标准。这是一个广泛有用的作用,不仅适用于读取数据,而且适用于针对更新和其他操作。
在本文中,我们将介绍SELECT
命令的基本形式,并演示如何使用它来返回数据。虽然SELECT
支持许多高级用例,但我们将坚持使用一些更简单的形式来演示基本命令结构。
SELECT
命令的一般语法
SELECT
命令的基本格式如下所示
SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;
该语句由几个不同的部分组成
SELECT
:SELECT
命令本身。此 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
中的所有记录,但只显示名为column2
和column1
的列,并且按此顺序显示。
使用AS
与列别名来修改结果表
您可以选择设置列别名来修改用于输出中列的名称。
SELECT column1 AS "first column" FROM my_table;
这将显示my_table
中column1
的每个值。但是,输出中的列将被标记为first column
而不是column1
。
如果输出组合来自可能共享名称的多个表的列名,或者如果它包含没有名称的计算列,这将特别有用。
使用ORDER BY
定义排序顺序
ORDER BY
子句可用于根据给定的标准对结果行排序。一般语法如下所示
SELECT * FROM my_table ORDER BY <sort_expression>;
这将显示my_table
中所有记录的所有列的值。结果将根据占位符<sort_expression>
表示的表达式进行排序。
例如,假设我们有一个包含 first_name
、last_name
、address
和 phone_number
列的 customer
表。如果我们想按 last_name
的字母顺序显示结果,可以使用以下命令
SELECT * FROM customer ORDER BY last_name;
结果按 last_name
列的升序字母顺序排序。
要反转排序顺序,可以在 ORDER BY
子句末尾添加 DESC
修饰符
SELECT * FROM customer ORDER BY last_name DESC;
您也可以按多个列排序。在这里,我们首先按 last_name
排序,然后按 first_name
排序,对于具有相同 last_name
值的任何列。两种排序都是按升序进行的
SELECT * FROM customer ORDER BY last_name, first_name;
您可以 对结果进行排序,使用 Prisma Client 的方法与在 SQL 查询中进行排序的方式非常相似。
获取唯一结果
如果您想在 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
表中 color
和 shirt_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)
这将显示表中 color
和 shirt_size
的每个唯一组合。
您可以通过使用 Prisma Client 的 distinct 功能,从查询中过滤重复行。
结论
在本文中,我们介绍了 SELECT
命令的一些基本元素,以演示如何从 MySQL 表中返回数据。还有许多其他可选子句可以修改命令的行为,允许您缩小要返回的结果范围,指定要返回的行数等等。在以后的文章中,我们将探索这些修饰符,以增强 SELECT
的实用性。