

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

# 掃描資料表的差異
<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 時，您可以使用不指定 `WHERE` 子句的 `SELECT` 陳述式來掃描資料表，並擷取其中的所有資料。您可以在結果中請求一或多個資料行。或者，您可以使用萬用字元 (\$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，可使用 `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，您可以藉由使用 `ExecuteStatement` 操作並使用 `Select` 陳述式傳回資料表的所有內容。

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

請注意，此陳述式會傳回「Music」資料表中的所有項目。

如需使用 `Select` 和 `ExecuteStatement` 的程式碼範例，請參閱 [適用於 DynamoDB 的 PartiQL Select 陳述式](ql-reference.select.md)。

------