

# Diferenças na leitura de um item usando a respectiva chave primária
<a name="SQLtoNoSQL.ReadData.SingleItem"></a>

Um padrão de acesso comuns para bancos de dados é ler um único item de uma tabela. Você deve especificar a chave primária do item que deseja.

**Topics**
+ [Ler um item usando a respectiva chave primária com o SQL](#SQLtoNoSQL.ReadData.SingleItem.SQL)
+ [Ler um item usando a respectiva chave primária no DynamoDB](#SQLtoNoSQL.ReadData.SingleItem.DynamoDB)

## Ler um item usando a respectiva chave primária com o SQL
<a name="SQLtoNoSQL.ReadData.SingleItem.SQL"></a>

No SQL, você usa a instrução `SELECT` para recuperar dados de uma tabela. Você pode solicitar uma ou mais colunas no resultado (ou todas elas, se você usar o operador `*`). A cláusula `WHERE` determina quais linhas devem ser retornadas.

A seguinte é uma instrução `SELECT` para recuperar uma única linha da tabela *Music*. A cláusula `WHERE` especifica os valores de chave primária.

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

É possível modificar a consulta para recuperar somente um subconjunto de colunas.

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

Observe que a chave primária dessa tabela consiste em *Artist* e *SongTitle*.

## Ler um item usando a respectiva chave primária no DynamoDB
<a name="SQLtoNoSQL.ReadData.SingleItem.DynamoDB"></a>

No Amazon DynamoDB, você pode usar a API do DynamoDB ou do [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (uma linguagem de consultas compatível com SQL) para ler um item de uma tabela.

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

Com a API do DynamoDB, você usa a operação `PutItem` para adicionar um item a uma tabela.

O DynamoDB fornece a operação `GetItem` para recuperar um item por meio da respectiva chave primária. `GetItem` é altamente eficiente, pois dá acesso direto à localização física do item. (Para ter mais informações, consulte [Partições e distribuição de dados no DynamoDB](HowItWorks.Partitions.md).)

Por padrão, `GetItem` retorna todo o item com todos os seus atributos.

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

É possível adicionar um parâmetro `ProjectionExpression` para retornar apenas alguns dos atributos.

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

Observe que a chave primária dessa tabela consiste em *Artist* e *SongTitle*.

A operação `GetItem` do DynamoDB é muito eficiente. Ela usa os valores da chave primária para determinar o local de armazenamento exato do item em questão e recupera-o diretamente dali. A instrução SQL `SELECT` é similarmente eficiente, no caso da recuperação de itens por valores de chave primária.

A instrução SQL `SELECT` é compatível com muitos tipos de consultas e verificações de tabela. O DynamoDB oferece funcionalidade semelhante com suas operações `Query` e `Scan`, que são descritas em [Diferenças na consulta de uma tabela](SQLtoNoSQL.ReadData.Query.md) e [Diferenças na varredura de uma tabela](SQLtoNoSQL.ReadData.Scan.md).

A instrução SQL `SELECT` pode realizar junções de tabela, permitindo que você recupere dados de várias tabelas ao mesmo tempo. As junções são mais eficazes onde as tabelas de banco de dados são normalizadas e os relacionamentos entre as tabelas são claros. No entanto, se você juntar muitas tabelas em uma instrução `SELECT`, a performance do aplicativo pode ser afetada. Você pode resolver esses problemas usando replicação de banco de dados, visualizações materializadas ou regravações de consulta.

O DynamoDB é um banco de dados não relacional e não oferece suporte a junções de tabela. Se você estiver migrando uma aplicação existente de um banco de dados relacional para o DynamoDB, será necessário desnormalizar o seu modelo de dados para eliminar a necessidade de junções.

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

Com PartiQL, você usa a operação `ExecuteStatement` para ler um item de uma tabela, usando a instrução `Select` PartiQL.

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

Observe que a chave primária dessa tabela consiste em Artist e SongTitle. 

**nota**  
 A instrução Select PartiQL também pode ser usada para consultar ou digitalizar uma tabela do DynamoDB

Para obter exemplos de código que usam `Select` e `ExecuteStatement`, consulte [Instruções Select em PartiQL para DynamoDB](ql-reference.select.md).

------