

# 关系（SQL）数据库和 DynamoDB 在从表中读取数据方面的差异
<a name="SQLtoNoSQL.ReadData"></a>

利用 SQL，您可使用 `SELECT` 语句从表中检索一个或多个行。可使用 `WHERE` 子句来确定返回给您的数据。

这与使用 Amazon DynamoDB 不同，后者提供以下操作来读取数据：
+ `ExecuteStatement` 将会检索表中的单个或多个项目。`BatchExecuteStatement` 可以通过单个操作检索不同表中的多个项目。所有这些操作均使用 [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html)，一种 SQL 兼容的查询语言。
+ `GetItem` – 从表中检索单个项目。这是读取单个项目的最高效方式，因为它将提供对项目物理位置的直接访问。（DynamoDB 还提供 `BatchGetItem` 操作，允许在单个操作中执行最多 100 次 `GetItem` 调用。）
+ `Query` – 检索具有特定分区键的所有项目。在这些项目中，您可以将条件应用于排序键并仅检索一部分数据。`Query` 针对存储数据的分区提供快速、高效的访问。（有关更多信息，请参阅 [DynamoDB 中的分区和数据分布](HowItWorks.Partitions.md)。）
+ `Scan` – 检索指定表中的所有项目。（不应对大型表使用此操作，因为这可能会占用大量系统资源。）

**注意**  
利用关系数据库，您可以使用 `SELECT` 语句联接多个表中的数据并返回结果。联接是关系模型的基础。要确保联接高效运行，应持续优化数据库及其应用程序的性能。DynamoDB 是一个不支持表连接的非关系 NoSQL 数据库。相反，应用程序一次从一个表中读取数据。

以下各节介绍读取数据的各种使用案例，以及如何使用关系数据库和 DynamoDB 执行这些任务。

**Topics**
+ [使用项目的主键读取项目方面的差异](SQLtoNoSQL.ReadData.SingleItem.md)
+ [查询表方面的差异](SQLtoNoSQL.ReadData.Query.md)
+ [扫描表方面的差异](SQLtoNoSQL.ReadData.Scan.md)