#### 20.3.4.2 选择表格

[](<>)

您可以使用`选择（）`从数据库中的表中查询和返回记录的方法。X DevAPI 提供了与`选择（）`方法对返回的记录进行过滤和排序。

MySQL 提供以下运算符来指定搜索条件：`要么`(`||`),`和`(`&&`),`异或`,`是`,`不是`,`之间`,`在`,`喜欢`,`!=`, `<>`, `>`, `>=`, `<`, `<=`, `&`, `|`, `<<`, `>>`, `+`, `-`, `*`, `/`, `~`， 和`%`.

##### 选择所有记录

[](<>)

要发出返回现有表中所有记录的查询，请使用`选择（）`不指定搜索条件的方法。下面的例子从城市表中选择所有记录`世界_x`数据库。

笔记

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

```
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)
```

##### 过滤搜索

[](<>)

要发出返回一组表列的查询，请使用`选择（）`方法并在方括号之间指定要返回的列。此查询从 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)
```

要发出返回与特定搜索条件匹配的行的查询，请使用`在哪里（）`包含这些条件的方法。例如，以下示例返回以字母 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)
```

您可以使用`绑定（）`方法。例如，不要使用“Name = 'Z%'”作为条件，而是替换一个命名占位符，该占位符由一个冒号和一个以字母开头的名称组成，例如*姓名*.然后将占位符和值包含在`绑定（）`方法如下：

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

提示

在程序中，绑定使您能够在表达式中指定占位符，这些占位符在执行前用值填充，并且可以根据需要从自动转义中受益。

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

##### 项目成果

[](<>)

使用[`和`](logical-operators.html#operator_and)运算符，在搜索条件之间添加运算符`在哪里（）`方法。

```
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)
```

要指定多个条件运算符，您可以将搜索条件括在括号中以更改运算符优先级。下面的例子演示了放置[`和`](logical-operators.html#operator_and)和[`要么`](logical-operators.html#operator_or)运营商。

```
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)
```

##### 限价、定单和抵消结果

[](<>)

您可以申请`限制（）`,`orderBy()`， 和`抵消（）`管理返回的记录的数量和顺序的方法`选择（）`方法。

要指定结果集中包含的记录数，请附加`限制（）`具有值的方法`选择（）`方法。例如，以下查询返回 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()`的方法`选择（）`方法。传递给`orderBy()`方法 一个或多个列的列表以进行排序，并且可以选择降序 (`描述`) 或升序 (`升序`) 属性视情况而定。升序是默认的订单类型。

例如，以下查询按 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)
```

默认情况下，`限制（）`方法从表中的第一条记录开始。您可以使用`抵消（）`改变起始记录的方法。例如，要忽略第一条记录并返回符合条件的下三个记录，请传递给`抵消（）`方法值为 1。

```
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)
```

##### 相关信息

-   这[MySQL 参考手册](functions.html)提供有关函数和运算符的详细文档。

-   看[表选择函数](https://dev.mysql.com/doc/x-devapi-userguide/en/crud-ebnf-table-crud-functions.html#crud-ebnf-tableselectfunction)完整的语法定义。
