

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

# 使用主索引鍵讀取項目的差異
<a name="SQLtoNoSQL.ReadData.SingleItem"></a>

資料庫常見的一種存取模式是從資料表讀取單一項目。您必須指定您想要讀取之項目的主索引鍵。

**Topics**
+ [在 SQL 中使用項目的主索引鍵讀取項目](#SQLtoNoSQL.ReadData.SingleItem.SQL)
+ [在 DynamoDB 中使用項目的主索引鍵讀取項目](#SQLtoNoSQL.ReadData.SingleItem.DynamoDB)

## 在 SQL 中使用項目的主索引鍵讀取項目
<a name="SQLtoNoSQL.ReadData.SingleItem.SQL"></a>

在 SQL 中，您會使用 `SELECT` 陳述式從資料表擷取資料。您可以在結果中請求一或多個資料行 (或使用 `*` 運算子請求所有資料行)。`WHERE` 子句則可決定要傳回的資料列。

下列為從 *Music* 資料表擷取單一資料列的 `SELECT` 陳述式。`WHERE` 子句會指定主索引鍵值。

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

您可以修改此查詢，只擷取部分資料行。

```
SELECT AlbumTitle, Year, Price
FROM Music
WHERE Artist='No One You Know' AND SongTitle = 'Call Me Today'
```

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

## 在 DynamoDB 中使用項目的主索引鍵讀取項目
<a name="SQLtoNoSQL.ReadData.SingleItem.DynamoDB"></a>

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

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

借助 DynamoDB API，您可以使用 `PutItem` 操作將項目新增至資料表。

DynamoDB 提供 `GetItem` 操作，可依主索引鍵擷取項目。`GetItem` 的效率極高，因為它可供您直接存取項目的實體位置。(如需詳細資訊，請參閱 [DynamoDB 的分割區與資料分配](HowItWorks.Partitions.md)。)

根據預設，`GetItem` 會傳回整個項目及其所有屬性。

```
{
    TableName: "Music",
    Key: {
        "Artist": "No One You Know",
        "SongTitle": "Call Me Today"
    }
}
```

您可以新增 `ProjectionExpression` 參數，以只傳回某些屬性。

```
{
    TableName: "Music",
    Key: {
        "Artist": "No One You Know",
        "SongTitle": "Call Me Today"
    },
    "ProjectionExpression": "AlbumTitle, Year, Price"
}
```

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

DynamoDB `GetItem` 操作非常有效率。它使用主索引鍵值判斷所指項目的確切儲存位置，然後直接從該位置擷取項目。在使用主索引鍵值擷取項目的案例中，SQL `SELECT` 陳述式一樣具有效率。

SQL `SELECT` 陳述式可支援多種查詢和資料表掃描。DynamoDB 使用其 `Query` 和 `Scan` 操作提供類似功能，這些操作會在 [查詢資料表的差異](SQLtoNoSQL.ReadData.Query.md) 和 [掃描資料表的差異](SQLtoNoSQL.ReadData.Scan.md) 中說明。

SQL `SELECT` 陳述式可執行資料表聯結，可讓您同時從多個資料表擷取資料。在資料庫資料表標準化且資料表間的關聯性明確時，聯結最為有效。但是，若您在單一 `SELECT` 陳述式中聯結太多資料表，應用程式的效能可能會受到影響。您可以使用資料庫複寫、具體化視觀表，或查詢重寫來因應這項問題。

DynamoDB 是非關聯式資料庫，不支援資料表聯結。若您正在將現有應用程式從關聯式資料庫移轉至 DynamoDB，必須將您的資料模型去標準化，才不需聯結。

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

借助 PartiQL，您可以使用 PartiQL `Select` 陳述式，使用 `ExecuteStatement` 操作讀取資料表的項目。

```
SELECT AlbumTitle, Year, Price
FROM Music
WHERE Artist='No One You Know' AND SongTitle = 'Call Me Today'
```

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

**注意**  
 PartiQL Select 陳述式也可以用來查詢或掃描 DynamoDB 資料表

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

------