

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

# 支持的子句
<a name="supported-clauses"></a>

该`SELECT`语句用于从一个或多个视图中检索数据。 Amazon IoT SiteWise 支持`JOIN`和`INNER JOIN`操作。

视图使用显式`JOIN`语法或子句中以逗号分隔的符号连接。`FROM`

**Example**  
一般性`SELECT`陈述：  

```
SELECT expression [, ...]
  [ FROM table_name AS alias [, ...] ]
  [ WHERE condition ]
  [ GROUP BY expression [, ...] ]
  [ HAVING condition ]
  [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] [, ...] ]
  [ LIMIT expression ]
```

**Example**  
包含不同子句的 SELECT 语句：  

```
SELECT
  a.asset_name,
  a.asset_id,
  p.property_type,
  p.property_data_type,
  p.string_attribute_value,
  p.property_name
FROM asset a, asset_property p
WHERE a.asset_description LIKE '%description%'
AND p.property_type IN ('attribute', 'metric')
OR p.property_id IN (
  SELECT property_id
  FROM raw_time_series
  WHERE event_timestamp BETWEEN TIMESTAMP '2025-01-01 00:00:00' AND TIMESTAMP '2025-01-02 00:00:00'
  GROUP BY asset_id, property_id
  HAVING COUNT(*) > 100
 )
GROUP BY p.property_type
HAVING COUNT(*) > 5
ORDER BY a.asset_name ASC
LIMIT 20;
```

**注意**  
 隐式`JOIN`组合了两个或多个不同的表，而不使用基于 Amazon IoT SiteWise的内部架构的`JOIN`关键字。这等效于`JOIN`在元数据表`asset_id`和原始数据表之间对和`property_id`字段执行。当从原始数据表中提取数据时，这种模式允许 SiteWise 在查询中利用任何给定的元数据筛选器，从而减少扫描的总体数据。  

**Example 查询的：**  

```
SELECT a.asset_name, p.property_name, r.event_timestamp
FROM asset a, asset_property p, raw_time_series r
WHERE a.asset_name='my_asset' AND p.property_name='my_property'
```
上面的示例仅扫描属于指定元数据名称的资产属性的数据。  

**Example 与上述查询相比，优化程度较低的等效查询：**  

```
SELECT a.asset_name, p.property_name, r.event_timestamp
FROM asset a
JOIN asset_property p ON a.asset_id=p.asset_id
JOIN raw_time_series r ON p.asset_id=r.asset_id AND p.property_id=r.property_id
WHERE a.asset_name='my_asset' AND p.property_name='my_property'
```

下面列出了每个条款的解释及其描述：


|  **条款**  |  **签名**  |  **描述**  | 
| --- | --- | --- | 
|  `LIMIT`  |  <pre>LIMIT { count }</pre>  |  此子句将结果集限制为指定的行数。您可以使用`LIMIT`带或不带`ORDER BY`和`OFFSET`子句。 `LIMIT`仅适用于 [0,2147483647] 中的非负整数。  | 
|  `ORDER BY`  |  <pre>ORDER BY expression<br />[ ASC | DESC ]<br />[ NULLS FIRST | NULLS LAST ] <br /></pre>  |  该`ORDER BY`子句对查询的结果集进行排序。   在`ORDER BY`子句中引用聚合中的选定列时，请使用该列的序数索引，而不是名称或别名。 <pre>SELECT AVG(t.double_value)<br />FROM latest_value_time_series t<br />GROUP BY t.asset_id<br />ORDER BY 1</pre>   | 
|  `GROUP BY`  |  <pre>GROUP BY expression [, ...]</pre>  |  该`GROUP BY`子句标识查询的分组列。它与聚合表达式一起使用。  | 
|  `HAVING`  |  <pre>HAVING boolean-expression</pre>  |  该`HAVING`子句筛选由 GROUP BY 子句创建的组行。  | 
|  `SUB SELECT`  |  <pre>SELECT column1, column2<br />FROM table1<br />WHERE column3 IN (SELECT column4 FROM table2);<br /></pre>  |  嵌入在另一条`SELECT`语句中的`SELECT`语句。  | 
|  `JOIN`  |  <pre>SELECT column1, column2<br />FROM table1 JOIN table2<br />ON table1.column1 = table2.column1;<br /></pre>  | 
|  `INNER JOIN`  |  <pre>SELECT columns<br />FROM table1<br />INNER JOIN table2 ON table1.column = table2.column;<br /></pre>  |  `INNER JOIN`返回两个表中符合联接条件的所有行。  | 
|  `UNION`  |  <pre>query<br />   { UNION [ ALL ] }<br />another_query<br /></pre>  |  `UNION`运算符计算其两个参数的集合并集，自动从结果集中删除重复的记录。  | 