

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

`SELECT` 陳述式用於從一或多個檢視擷取資料。 AWS 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`會結合兩個或多個不同的資料表，而不根據 AWS 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'
```

每個子句及其描述的說明如下所示：


|  **子句**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `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` 運算子會計算其兩個引數的集合聯集，自動從結果集中移除重複的記錄。  | 