

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# SELECT 子句
<a name="iot-sql-select"></a>

SE Amazon IoT LECT 子句与 ANSI SQL SELECT 子句基本相同，但有一些细微的区别。

SELECT 子句支持[数据类型](iot-sql-data-types.md)[运算符](iot-sql-operators.md)[函数](iot-sql-functions.md)、[文本](iot-sql-literals.md)、[Case 语句](iot-sql-case.md)、、[JSON 扩展](iot-sql-json.md)、、[嵌套对象查询](iot-sql-nested-queries.md)、[变量](iot-sql-set.md#iot-sql-set-usage)和[二进制有效载荷](binary-payloads.md)。

您可以使用 SELECT 子句从传入 MQTT 消息中提取信息。也可以使用 `SELECT *` 检索整个传入消息有效载荷。例如：

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL statement: SELECT * FROM 'topic/subtopic'
Outgoing payload: {"color":"red", "temperature":50}
```

如果有效载荷是 JSON 对象，您可以参考对象中的键。您的传出有效载荷将包含键值对。例如：

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL statement: SELECT color FROM 'topic/subtopic'
Outgoing payload: {"color":"red"}
```

您可以使用 AS 关键字重命名键。例如：

```
Incoming payload published on topic 'topic/subtopic':{"color":"red", "temperature":50}
SQL:SELECT color AS my_color FROM 'topic/subtopic'
Outgoing payload: {"my_color":"red"}
```

您可以通过用逗号分隔来选择多个项目。例如：

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT color as my_color, temperature as fahrenheit FROM 'topic/subtopic'
Outgoing payload: {"my_color":"red","fahrenheit":50}
```

您可以通过在向传入有效载荷添加项目时包括“\*”来选择多个项目。例如：

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT *, 15 as speed FROM 'topic/subtopic'
Outgoing payload: {"color":"red", "temperature":50, "speed":15}
```

您可以使用 `"VALUE"` 关键字来生成不属于 JSON 对象的传出有效载荷。使用 SQL 版本 `2015-10-08` 时，您只能选择一个项目。使用 SQL 版本 `2016-03-23` 或更高版本时，您还可以选择作为顶级对象输出的数组。

**Example**  

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT VALUE color FROM 'topic/subtopic'
Outgoing payload: "red"
```

您可以使用 `'.'` 语法深入剖析传入有效载荷中的嵌套 JSON 对象。例如：

```
Incoming payload published on topic 'topic/subtopic': {"color":{"red":255,"green":0,"blue":0}, "temperature":50}
SQL: SELECT color.red as red_value FROM 'topic/subtopic'
Outgoing payload: {"red_value":255}
```

有关如何使用包含预留字符（如数字或连字符（减号）的 JSON 对象和属性名称的信息，请参阅 [JSON 扩展](iot-sql-json.md)

您可以使用函数（参阅 [函数](iot-sql-functions.md)）来转换传入有效载荷。您可以使用括号进行分组。例如：

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT (temperature - 32) * 5 / 9 AS celsius, upper(color) as my_color FROM 'topic/subtopic'
Outgoing payload: {"celsius":10,"my_color":"RED"}
```