

# テーブルのスキャンにおける相違点
<a name="SQLtoNoSQL.ReadData.Scan"></a>

SQL では、`SELECT` 句なしの `WHERE` ステートメントは、テーブルのすべての行を返します。Amazon DynamoDB では、`Scan` オペレーションで同様のアクションを行います。どちらの場合も、すべて、または一部の項目を取得できます。

SQL または NoSQL データベースのいずれを使用するにしても、スキャンは大量のシステムリソースを消費するので、控え目に使用する必要があります。スキャンが適切 (小さなテーブルをスキャンするなど) または不可避 (データの一括エクスポートの実行など) な場合はあります。しかし、一般的なルールとして、スキャンを実行しないようアプリケーションを設計する必要があります。詳細については、「[DynamoDB のテーブルに対するクエリの実行](Query.md)」を参照してください。

**注記**  
一括エクスポートを実行すると、パーティションごとに少なくとも 1 つのファイルも作成されます。各ファイル内のすべての項目は、その特定のパーティションのハッシュされたキースペースからのものです。

**Topics**
+ [SQL を使用してテーブルをスキャンする](#SQLtoNoSQL.ReadData.Scan.SQL)
+ [DynamoDB でテーブルをスキャンする](#SQLtoNoSQL.ReadData.Scan.DynamoDB)

## SQL を使用してテーブルをスキャンする
<a name="SQLtoNoSQL.ReadData.Scan.SQL"></a>

SQL を使用すると、`SELECT` 句を指定せずに、`WHERE` ステートメントを使用してテーブルをスキャンし、データのすべてを取得することができます。結果の 1 つ以上の列をリクエストできます。または、ワイルドカード文字「\$1」を使用する場合は、すべての項目をリクエストできます。

以下は `SELECT` ステートメントの使用例です。

```
/* Return all of the data in the table */
SELECT * FROM Music;
```

```
/* Return all of the values for Artist and Title */
SELECT Artist, Title FROM Music;
```

## DynamoDB でテーブルをスキャンする
<a name="SQLtoNoSQL.ReadData.Scan.DynamoDB"></a>

Amazon DynamoDB では、DynamoDB API または [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (SQL 互換のクエリ言語) を使用して、テーブルに対してスキャンを実行します。

------
#### [ DynamoDB API ]

DynamoDB API では、テーブルまたはセカンダリインデックスの各項目にアクセスして、1 つまたは複数の項目または項目属性を返す `Scan` オペレーションを使用します。

```
// Return all of the data in the table
{
    TableName:  "Music"
}
```

```
// Return all of the values for Artist and Title
{
    TableName:  "Music",
    ProjectionExpression: "Artist, Title"
}
```

`Scan` オペレーションでは、`FilterExpression` パラメータも指定できます。これを使用して、結果に表示しない項目を破棄することができます。`FilterExpression` は、スキャンの実行後、結果が返されるまでの間に適用されます。(これは、大きなテーブルではお勧めしません。返される一致項目がごく少数でも、`Scan` 全体に対して料金が請求されます。)

------
#### [ PartiQL for DynamoDB ]

PartiQL では、`Select` ステートメントを使用するテーブルに対してすべての内容を返す `ExecuteStatement` オペレーションを使用してスキャンを実行します。

```
SELECT AlbumTitle, Year, Price
FROM Music
```

このステートメントは、Music テーブルのすべての項目を返すことに注意してください。

`Select` と `ExecuteStatement` を使用したコード例については、[DynamoDB 用の PartiQL select ステートメント](ql-reference.select.md) を参照してください。

------