文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
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() 方法的使用限制在交互式语句中。在应用程序代码中始终使用显式列名选择。

Press CTRL+C to copy
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 列。

Press CTRL+C to copy
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 开头的城市的名称和国家代码。

Press CTRL+C to copy
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() 方法中,如下所示

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

在程序中,绑定允许您在表达式中指定占位符,这些占位符将在执行之前填充值,并且可以从自动转义中受益,具体取决于情况。

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

项目结果

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

Press CTRL+C to copy
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 运算符的放置。

Press CTRL+C to copy
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() 方法返回的记录数量和顺序。

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

Press CTRL+C to copy
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 列对所有记录进行排序,然后按降序返回前三条记录。

Press CTRL+C to copy
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() 方法。

Press CTRL+C to copy
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)
相关信息