文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


22.3.4.2 选择表

您可以使用 select() 方法查询数据库中表的记录并返回它们。X DevAPI 提供了可与 select() 方法一起使用的其他方法,以筛选和排序返回的记录。

MySQL 提供以下运算符来指定搜索条件:OR (||),AND (&&),XORISNOTBETWEENINLIKE!=<>>>=<<=&|<<>>+-*/~%

选择所有记录

要发出查询以从现有表中返回所有记录,请使用 select() 方法,而无需指定搜索条件。以下示例从 world_x 数据库中的 city 表中选择所有记录。

注意

将空 select() 方法的使用限制在交互式语句中。在应用程序代码中始终使用明确的列名选择。

mysql-js> db.city.select()
+------+------------+-------------+------------+-------------------------+
| ID   | Name       | CountryCode | District   | Info                    |
+------+------------+-------------+------------+-------------------------+
|    1 | Kabul      | AFG         | Kabol      |{"Population": 1780000}  |
|    2 | Qandahar   | AFG         | Qandahar   |{"Population": 237500}   |
|    3 | Herat      | AFG         | Herat      |{"Population": 186800}   |
...    ...          ...           ...          ...
| 4079 | Rafah      | PSE         | Rafah      |{"Population": 92020}    |
+------+------- ----+-------------+------------+-------------------------+
4082 rows in set (0.01 sec)

空集(没有匹配记录)将返回以下信息

Empty set (0.00 sec)
筛选搜索

要发出查询以返回一组表列,请使用 select() 方法并在方括号之间指定要返回的列。此查询将从 city 表中返回 Name 和 CountryCode 列。

mysql-js> db.city.select(["Name", "CountryCode"])
+-------------------+-------------+
| Name              | CountryCode |
+-------------------+-------------+
| Kabul             | AFG         |
| Qandahar          | AFG         |
| Herat             | AFG         |
| Mazar-e-Sharif    | AFG         |
| Amsterdam         | NLD         |
...                 ...
| Rafah             | PSE         |
| Olympia           | USA         |
| Little Falls      | USA         |
| Happy Valley      | USA         |
+-------------------+-------------+
4082 rows in set (0.00 sec)

要发出查询以返回与特定搜索条件匹配的行,请使用 where() 方法来包含这些条件。例如,以下示例返回以字母 Z 开头的城市的名称和国家代码。

mysql-js> db.city.select(["Name", "CountryCode"]).where("Name like 'Z%'")
+-------------------+-------------+
| Name              | CountryCode |
+-------------------+-------------+
| Zaanstad          | NLD         |
| Zoetermeer        | NLD         |
| Zwolle            | NLD         |
| Zenica            | BIH         |
| Zagazig           | EGY         |
| Zaragoza          | ESP         |
| Zamboanga         | PHL         |
| Zahedan           | IRN         |
| Zanjan            | IRN         |
| Zabol             | IRN         |
| Zama              | JPN         |
| Zhezqazghan       | KAZ         |
| Zhengzhou         | CHN         |
...                 ...
| Zeleznogorsk      | RUS         |
+-------------------+-------------+
59 rows in set (0.00 sec)

您可以使用 bind() 方法将值与搜索条件隔开。例如,与其使用 "Name = 'Z%' " 作为条件,不如用由冒号后跟以字母开头的名称组成的命名占位符替换它,例如 name。然后在 bind() 方法中包含占位符和值,如下所示

mysql-js> db.city.select(["Name", "CountryCode"]).
              where("Name like :name").bind("name", "Z%")
提示

在程序中,绑定使您能够在表达式中指定占位符,这些占位符在执行之前用值填充,并且可以从自动转义中受益(如果适用)。

始终使用绑定来清理输入。避免使用字符串连接在查询中引入值,这可能会导致无效输入,并在某些情况下会导致安全问题。

项目结果

要发出使用 AND 运算符的查询,请在 where() 方法中的搜索条件之间添加运算符。

mysql-js> db.city.select(["Name", "CountryCode"]).where(
"Name like 'Z%' and CountryCode = 'CHN'")
+----------------+-------------+
| Name           | CountryCode |
+----------------+-------------+
| Zhengzhou      | CHN         |
| Zibo           | CHN         |
| Zhangjiakou    | CHN         |
| Zhuzhou        | CHN         |
| Zhangjiang     | CHN         |
| Zigong         | CHN         |
| Zaozhuang      | CHN         |
...              ...
| Zhangjiagang   | CHN         |
+----------------+-------------+
22 rows in set (0.01 sec)

要指定多个条件运算符,您可以将搜索条件括在括号中以更改运算符优先级。以下示例演示了 ANDOR 运算符的放置。

mysql-js> db.city.select(["Name", "CountryCode"]).
where("Name like 'Z%' and (CountryCode = 'CHN' or CountryCode = 'RUS')")
+-------------------+-------------+
| Name              | CountryCode |
+-------------------+-------------+
| Zhengzhou         | CHN         |
| Zibo              | CHN         |
| Zhangjiakou       | CHN         |
| Zhuzhou           | CHN         |
...                 ...
| Zeleznogorsk      | RUS         |
+-------------------+-------------+
29 rows in set (0.01 sec)
限制、排序和偏移结果

您可以应用 limit()orderBy()offSet() 方法来管理 select() 方法返回的记录数量和顺序。

要指定结果集中包含的记录数,请将 limit() 方法与值附加到 select() 方法。例如,以下查询将返回 country 表中的前五条记录。

mysql-js> db.country.select(["Code", "Name"]).limit(5)
+------+-------------+
| Code | Name        |
+------+-------------+
| ABW  | Aruba       |
| AFG  | Afghanistan |
| AGO  | Angola      |
| AIA  | Anguilla    |
| ALB  | Albania     |
+------+-------------+
5 rows in set (0.00 sec)

要指定结果的顺序,请将 orderBy() 方法附加到 select() 方法。将要排序的一个或多个列的列表传递给 orderBy() 方法,以及可选的降序 (desc) 或升序 (asc) 属性(如果适用)。升序是默认顺序类型。

例如,以下查询按 Name 列排序所有记录,然后以降序返回前三条记录。

mysql-js> db.country.select(["Code", "Name"]).orderBy(["Name desc"]).limit(3)
+------+------------+
| Code | Name       |
+------+------------+
| ZWE  | Zimbabwe   |
| ZMB  | Zambia     |
| YUG  | Yugoslavia |
+------+------------+
3 rows in set (0.00 sec)

默认情况下,limit() 方法从表中的第一条记录开始。您可以使用 offset() 方法更改起始记录。例如,要忽略第一条记录并返回与条件匹配的接下来的三条记录,请将值 1 传递给 offset() 方法。

mysql-js> db.country.select(["Code", "Name"]).orderBy(["Name desc"]).limit(3).offset(1)
+------+------------+
| Code | Name       |
+------+------------+
| ZMB  | Zambia     |
| YUG  | Yugoslavia |
| YEM  | Yemen      |
+------+------------+
3 rows in set (0.00 sec)
相关信息