

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

# 查詢資料表的差異
<a name="SQLtoNoSQL.ReadData.Query"></a>

資料庫常見的另一種存取模式是根據您的查詢條件，從資料表讀取多個項目。

**Topics**
+ [使用 SQL 查詢資料表](#SQLtoNoSQL.ReadData.Query.SQL)
+ [在 DynamoDB 中查詢資料表](#SQLtoNoSQL.ReadData.Query.DynamoDB)

## 使用 SQL 查詢資料表
<a name="SQLtoNoSQL.ReadData.Query.SQL"></a>

使用 SQL 時，`SELECT` 陳述式可讓您查詢索引鍵資料行、非索引鍵資料行或任何組合。`WHERE` 子句則可決定要傳回的資料列，如下列範例所示。

```
/* Return a single song, by primary key */

SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle = 'Call Me Today';
```

```
/* Return all of the songs by an artist */

SELECT * FROM Music
WHERE Artist='No One You Know';
```

```
/* Return all of the songs by an artist, matching first part of title */

SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE 'Call%';
```

```
/* Return all of the songs by an artist, only if the price is less than 1.00 */

SELECT * FROM Music
WHERE Artist='No One You Know'
AND Price < 1.00;
```

請注意，此資料表的主索引鍵包含 *Artist* 和 *SongTitle*。

## 在 DynamoDB 中查詢資料表
<a name="SQLtoNoSQL.ReadData.Query.DynamoDB"></a>

在 Amazon DynamoDB 中，您可以使用 DynamoDB API 或 [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (SQL 相容查詢語言) 查詢資料表中的項目。

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

若使用 Amazon DynamoDB，您可以使用 `Query` 操作以類似方式擷取資料。`Query` 操作可供您快速且有效率地存取存放資料的實體位置。如需詳細資訊，請參閱[DynamoDB 的分割區與資料分配](HowItWorks.Partitions.md)。

您可以對任何資料表或次要索引使用 `Query`。您必須為分割區索引鍵值指定相等條件，並可選擇性地為已定義的排序索引鍵屬性提供另一個條件。

`KeyConditionExpression` 參數指定您想要查詢的索引鍵值。您可以使用選用的 `FilterExpression`，在結果傳回之前從中移除特定的項目。

在 DynamoDB 中，您必須使用 `ExpressionAttributeValues` 作為表達式參數 (例如 `KeyConditionExpression` 及 `FilterExpression`) 中的預留位置。這與在關聯式資料庫中使用*繫結變數*類似，您會在執行時期將實際值代入 `SELECT` 陳述式。

請注意，此資料表的主索引鍵包含 *Artist* 和 *SongTitle*。

下列是一些 DynamoDB `Query` 範例。

```
// Return a single song, by primary key

{
    TableName: "Music",
    KeyConditionExpression: "Artist = :a and SongTitle = :t",
    ExpressionAttributeValues: {
        ":a": "No One You Know",
        ":t": "Call Me Today"
    }
}
```

```
// Return all of the songs by an artist

{
    TableName: "Music",
    KeyConditionExpression: "Artist = :a",
    ExpressionAttributeValues: {
        ":a": "No One You Know"
    }
}
```

```
// Return all of the songs by an artist, matching first part of title

{
    TableName: "Music",
    KeyConditionExpression: "Artist = :a and begins_with(SongTitle, :t)",
    ExpressionAttributeValues: {
        ":a": "No One You Know",
        ":t": "Call"
    }
}
```

```
// Return all of the songs by an artist, only if the price is less than 1.00

{
    TableName: "Music",
    KeyConditionExpression: "Artist = :a",
    FilterExpression: "Price < :p",
    ExpressionAttributeValues: {
        ":a": "No One You Know",
        ":p": 1.00
    }
}
```

**注意**  
`FilterExpression` 會在`Query`讀取相符項目後套用，因此不會減少使用的讀取容量。如果可能，請將您的資料建模，讓範圍條件在排序索引鍵`KeyConditionExpression`上使用，以實現有效率的查詢。如需詳細資訊，請參閱[在 DynamoDB 中查詢資料表](Query.md)。

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

若使用 PartiQL，您可以藉由使用 `ExecuteStatement` 操作和 `Select` 陳述式對分割區索引鍵進行查詢。

```
SELECT AlbumTitle, Year, Price
FROM Music
WHERE Artist='No One You Know'
```

以此方式使用 `SELECT` 陳述式會傳回所有與此特定 `Artist` 相關聯的歌曲。

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

------