

# Diferenças na consulta de uma tabela
<a name="SQLtoNoSQL.ReadData.Query"></a>

Outro padrão de acesso comum é a leitura de vários itens de uma tabela, com base em seus critérios de consulta.

**Topics**
+ [Criar uma tabela com o SQL](#SQLtoNoSQL.ReadData.Query.SQL)
+ [Consultar uma tabela no DynamoDB](#SQLtoNoSQL.ReadData.Query.DynamoDB)

## Criar uma tabela com o SQL
<a name="SQLtoNoSQL.ReadData.Query.SQL"></a>

O uso da instrução `SELECT` do SQL permite consultar colunas-chave, colunas que não são chave ou qualquer combinação. A cláusula `WHERE` determina quais linhas são retornadas, conforme mostrado nos exemplos a seguir.

```
/* 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;
```

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

## Consultar uma tabela no DynamoDB
<a name="SQLtoNoSQL.ReadData.Query.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 consultar um item de uma tabela.

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

Com o Amazon DynamoDB, você pode usar a operação `Query` para recuperar dados de forma semelhante. A operação `Query` oferece acesso rápido e eficiente aos locais físicos onde os dados estão armazenados. Para obter mais informações, consulte [Partições e distribuição de dados no DynamoDB](HowItWorks.Partitions.md).

É possível usar a `Query` com qualquer tabela ou índice secundário. É possível especificar uma condição de igualdade para o valor da chave de partição e, se desejar, fornecer outra condição, se definida, ao atributo da chave de classificação.

O parâmetro `KeyConditionExpression` especifica os valores de chave que você deseja consultar. Você pode usar uma `FilterExpression` opcional para remover determinados itens dos resultados antes que eles sejam retornados para você.

No DynamoDB, você deve usar `ExpressionAttributeValues` como espaços reservados em parâmetros de expressão (como `KeyConditionExpression` e `FilterExpression`). Isso é análogo ao uso de *variáveis de ligação* em bancos de dados relacionais, onde você substitui os valores reais na instrução `SELECT` em tempo de execução.

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

A seguir há alguns exemplos de `Query` no DynamoDB.

```
// 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
    }
}
```

**nota**  
Como `FilterExpression` é aplicada depois que a `Query` lê itens correspondentes, isso não reduz a capacidade de leitura consumida. Sempre que possível, modele os dados para que as condições de intervalo usem `KeyConditionExpression` na chave de classificação para melhorar a eficiência das consultas. Para obter mais informações, consulte [Consultar tabelas no DynamoDB](Query.md).

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

Com o PartiQL, é possível realizar uma consulta usando a operação `ExecuteStatement` e a instrução `Select` na chave de partição.

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

Usar a instrução `SELECT` desse modo retornará todas as músicas associadas a este `Artist` específico.

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

------