

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

# SELECT
<a name="cql.dml.select"></a>

使用 SELECT 陳述式查詢資料。

**語法**

```
select_statement ::=  SELECT  [ JSON ] ( select_clause | '*' )
                      FROM table_name
                      [ WHERE 'where_clause' ]
                      [ ORDER BY 'ordering_clause' ]
                      [ LIMIT (integer | bind_marker) ]
                      [ ALLOW FILTERING ]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | CAST '(' selector AS cql_type ')'
                      | function_name '(' [ selector ( ',' selector )* ] ')'
where_clause     ::=  relation ( AND relation )*
relation         ::=  column_name operator term
                      TOKEN
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | IN | CONTAINS | CONTAINS KEY
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
```

**範例**

```
SELECT name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;

SELECT JSON name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;
```

如需將 JSON 編碼資料類型映射至 Amazon Keyspaces 資料類型的資料表，請參閱 [Amazon Keyspaces 資料類型的 JSON 編碼](cql.elements.md#cql.data-types.JSON)。

**使用 `IN`關鍵字**

`IN` 關鍵字指定一或多個值的相等性。它可以套用至分割區索引鍵和叢集資料欄。結果會依索引鍵在`SELECT`陳述式中呈現的順序傳回。

**範例**

```
SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 = 2;
SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 <= 2;
SELECT * from mykeyspace.mytable WHERE primary.key1 = 1 and clustering.key1 IN (1, 2);
SELECT * from mykeyspace.mytable WHERE primary.key1 <= 2 and clustering.key1 IN (1, 2) ALLOW FILTERING;
```

如需`IN`關鍵字以及 Amazon Keyspaces 如何處理陳述式的詳細資訊，請參閱 [在 Amazon Keyspaces 的查詢中使用 `IN`運算子搭配 `SELECT`陳述式](in.select.md)。

**排序結果**

`ORDER BY` 子句指定傳回結果的排序順序。它需要資料欄名稱清單以及每個資料欄的排序順序做為引數。您只能依子句順序指定叢集資料欄。不允許使用非叢集資料欄。排序順序選項`ASC`適用於遞增和`DESC`遞減排序。如果省略排序順序，則會使用叢集資料欄的預設順序。如需可能的排序順序，請參閱 [在 Amazon Keyspaces `ORDER BY`中使用 排序結果](ordering-results.md)。

**範例**

```
SELECT name, id, division, manager_id FROM "myGSGKeyspace".employees_tbl WHERE id = '012-34-5678' ORDER BY division;
```

`ORDER BY` 搭配 `IN`關鍵字使用 時，結果會在頁面中排序。不支援使用已停用分頁進行完整重新排序。

**TOKEN**

您可以將`TOKEN`函數套用至 `SELECT`和 `WHERE`子句中的資料`PARTITION KEY`欄。使用 `TOKEN`函數時，Amazon Keyspaces 會根據 的映射字符值傳回資料列，`PARTITION_KEY`而不是根據 的值傳回資料列`PARTITION KEY`。

`TOKEN` `IN`關鍵字不支援關聯。

**範例**

```
SELECT TOKEN(id) from my_table; 

SELECT TOKEN(id) from my_table WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;
```

**TTL 函數**

您可以使用 `TTL`函數搭配 `SELECT`陳述式，以秒為單位擷取為資料欄存放的過期時間。如果未設定`TTL`任何值，函數會傳回 `null`。

**範例**

```
SELECT TTL(my_column) from my_table;
```

`TTL` 函數無法用於多儲存格資料欄，例如集合。

**WRITETIME 函式**

只有在資料表使用用戶端時間戳記時，您才能使用 `WRITETIME`函數搭配 `SELECT`陳述式來擷取存放為資料欄值中繼資料的時間戳記。如需詳細資訊，請參閱[Amazon Keyspaces 中的用戶端時間戳記](client-side-timestamps.md)。

```
SELECT WRITETIME(my_column) from my_table;
```

`WRITETIME` 函數無法用於多儲存格資料欄，例如集合。

**注意**  
為了相容於已建立的 Cassandra 驅動程式行為，當您透過 Cassandra 驅動程式和開發人員工具使用 Cassandra 查詢語言 (CQL) API 呼叫對系統資料表執行操作時，不會強制執行標籤型授權政策。如需詳細資訊，請參閱[根據標籤的 Amazon Keyspaces 資源存取](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tags)。