

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

# Amazon Keyspaces でクエリの `SELECT` ステートメントで `IN` 演算子を使用する
<a name="in.select"></a>

**SELECT IN**

ステートメントを使用してテーブルからデータをクエリできます。`SELECT` ステートメントは、テーブル内の 1 つ以上の行の 1 つ以上の列を読み取り、リクエストに一致する行を含む結果セットを返します。`SELECT` ステートメントには、結果セットで読み取る列と返す列を決定する `select_clause` が含まれています。この句には、データを返す前に変換する命令を含めることができます。オプションの `WHERE` 句は、どの行をクエリする必要があるかを指定するもので、主キーの一部である列のリレーションで構成されます。Amazon Keyspaces は、`WHERE` 句内の `IN` キーワードをサポートしています。このセクションでは、例を使用して、Amazon Keyspaces が`IN` キーワードを含む `SELECT` ステートメントを処理する方法を示します。

この例は、Amazon Keyspaces が `IN` キーワードを含む `SELECT` ステートメントを*サブクエリ*に分割する方法を示しています。この例では、`my_keyspace.customers` という名前のテーブルを使用しています。このテーブルには、プライマリキー列が 1 つ (`department_id`)、クラスタリング列とが 2 つ (`sales_region_id` および `sales_representative_id`)、`customer_name` 列に顧客の名前を含む列が 1 つあります。

```
SELECT * FROM my_keyspace.customers;

         department_id | sales_region_id | sales_representative_id | customer_name
        ---------------+-----------------+-------------------------+--------------
          0            |        0        |            0            |    a
          0            |        0        |            1            |    b
          0            |        1        |            0            |    c
          0            |        1        |            1            |    d
          1            |        0        |            0            |    e
          1            |        0        |            1            |    f
          1            |        1        |            0            |    g
          1            |        1        |            1            |    h
```

このテーブルを使用して、次の `SELECT` ステートメントを実行して、`WHERE` 句内の `IN` キーワードで関心のある部門や販売地域の顧客を検索できます。以下のステートメントは、この例です。

```
SELECT * FROM my_keyspace.customers WHERE department_id IN (0, 1) AND sales_region_id IN (0, 1);
```

Amazon Keyspaces は、以下の出力に示しているように、このステートメントを 4 つのサブクエリに分割しています。

```
SELECT * FROM my_keyspace.customers WHERE department_id = 0 AND sales_region_id = 0;

 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  0            |        0        |           0             |    a
  0            |        0        |           1             |    b

SELECT * FROM my_keyspace.customers WHERE department_id = 0 AND sales_region_id = 1;

 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  0            |        1        |          0              |    c
  0            |        1        |          1              |    d

SELECT * FROM my_keyspace.customers WHERE department_id = 1 AND sales_region_id = 0;

 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  1            |        0        |          0              |    e
  1            |        0        |          1              |    f

SELECT * FROM my_keyspace.customers WHERE department_id = 1 AND sales_region_id = 1;

 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  1            |        1        |           0             |    g
  1            |        1        |           1             |    h
```

`IN` キーワードを使用すると、Amazon Keyspaces は、以下のいずれかの場合に結果を自動的にページ分割します。
+ 10 回目ごとにサブクエリが処理されます。
+ 1 MB の論理 IO を処理した後。
+ `PAGE SIZE` を設定した場合、Amazon Keyspaces は、`PAGE SIZE` セットに基づいて処理するクエリの数を読み取った後にページ分割します。
+ `LIMIT` キーワードを使用して返される行の数を減らすと、Amazon Keyspaces は、セット `LIMIT` に基づいて処理するクエリの数を読み取った後にページ分割します。

 以下の表では、これを例を挙げて説明しています。

ページ分割の詳細については、「[Amazon Keyspaces で結果のページを分割する](paginating-results.md)」を参照してください。

```
SELECT * FROM my_keyspace.customers;

         department_id | sales_region_id | sales_representative_id | customer_name
        ---------------+-----------------+-------------------------+--------------
          2            |        0        |          0              |    g
          2            |        1        |          1              |    h
          2            |        2        |          2              |    i
          0            |        0        |          0              |    a
          0            |        1        |          1              |    b
          0            |        2        |          2              |    c
          1            |        0        |          0              |    d
          1            |        1        |          1              |    e
          1            |        2        |          2              |    f
          3            |        0        |          0              |    j
          3            |        1        |          1              |    k
          3            |        2        |          2              |    l
```

このテーブルに対して次のステートメントを実行すると、ページ分割の仕組みを確認できます。

```
SELECT * FROM my_keyspace.customers WHERE department_id IN (0, 1, 2, 3) AND sales_region_id IN (0, 1, 2) AND sales_representative_id IN (0, 1);
```

Amazon Keyspaces は、このステートメントを 24 個のサブクエリとして処理します。これは、このクエリに含まれるすべての `IN` 用語のデカルト積の基数が 24 であるためです。

```
 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  0            |        0        |          0              |    a
  0            |        1        |          1              |    b
  1            |        0        |          0              |    d
  1            |        1        |          1              |    e

---MORE---
 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  2            |        0        |          0              |    g
  2            |        1        |          1              |    h
  3            |        0        |          0              |    j

---MORE---
 department_id | sales_region_id | sales_representative_id | customer_name
---------------+-----------------+-------------------------+--------------
  3            |        1        |          1              |    k
```

この例は、`IN` キーワードを含む `SELECT` ステートメントで `ORDER BY` 句を使用する方法を示しています。

```
SELECT * FROM my_keyspace.customers WHERE department_id IN (3, 2, 1) ORDER BY sales_region_id DESC;
        
         department_id | sales_region_id | sales_representative_id | customer_name
        ---------------+-----------------+-------------------------+--------------
          3            |        2        |          2              |    l
          3            |        1        |          1              |    k
          3            |        0        |          0              |    j
          2            |        2        |          2              |    i
          2            |        1        |          1              |    h
          2            |        0        |          0              |    g
          1            |        2        |          2              |    f
          1            |        1        |          1              |    e
          1            |        0        |          0              |    d
```

サブクエリは、パーティションキー列とクラスタリングキー列がクエリに表示される順序で処理されます。以下の例では、パーティションキー値「2」のサブクエリが最初に処理され、続いてパーティションキー値「3」と「1」のサブクエリが処理されます。特定のサブクエリの結果は、クエリの順序付け句 (存在する場合) またはテーブル作成時に定義されたテーブルのクラスタリング順序に従って順序付けられます。

```
SELECT * FROM my_keyspace.customers WHERE department_id IN (2, 3, 1) ORDER BY sales_region_id DESC;

         department_id | sales_region_id | sales_representative_id | customer_name
        ---------------+-----------------+-------------------------+--------------
          2            |        2        |          2              |    i
          2            |        1        |          1              |    h
          2            |        0        |          0              |    g
          3            |        2        |          2              |    l
          3            |        1        |          1              |    k
          3            |        0        |          0              |    j
          1            |        2        |          2              |    f
          1            |        1        |          1              |    e
          1            |        0        |          0              |    d
```