

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

SELECT ステートメントを使用してデータのクエリを行います。

**[Syntax]** (構文)

```
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` キーワードは、1 つ以上の値が等しいことを指定します。パーティションキーとクラスタリング列に適用できます。結果は `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 でクエリの `SELECT` ステートメントで `IN` 演算子を使用する](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;
```

`IN` キーワードと一緒に `ORDER BY` を使用すると、結果はページ内で順序付けられます。ページ分割を無効にした状態での完全な並べ替えはサポートしていません。

**トークン**

`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 関数**

`SELECT` ステートメントで `WRITETIME` 関数を使用して、列の値のメタデータとして保存されているタイムスタンプを取得できるのは、テーブルがクライアント側のタイムスタンプを使用している場合だけです。詳細については、「[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)」を参照してください。