

# Diferencias al leer un elemento mediante la clave principal
<a name="SQLtoNoSQL.ReadData.SingleItem"></a>

Un patrón de acceso habitual de acceso a las bases de datos consiste en leer un único elemento de una tabla. Es preciso especificar la clave principal del elemento que se desea.

**Topics**
+ [Lectura de un elemento usando su clave principal con SQL](#SQLtoNoSQL.ReadData.SingleItem.SQL)
+ [Lectura de un elemento usando su clave principal en DynamoDB](#SQLtoNoSQL.ReadData.SingleItem.DynamoDB)

## Lectura de un elemento usando su clave principal con SQL
<a name="SQLtoNoSQL.ReadData.SingleItem.SQL"></a>

En SQL, se utilizaría la instrucción `SELECT` para recuperar datos de una tabla. Puede solicitar una o varias columnas en el resultado (o todas ellas, si se utiliza el operador `*`). La cláusula `WHERE` determina qué filas se devolverán.

A continuación se muestra una instrucción `SELECT` que recupera una sola fila de la tabla *Music*. La cláusula `WHERE` especifica los valores de la clave principal.

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

Puede modificar esta consulta para recuperar tan solo un subconjunto de las columnas:

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

Observe que la clave principal de esta tabla consta de *Artist* y *SongTitle*.

## Lectura de un elemento usando su clave principal en DynamoDB
<a name="SQLtoNoSQL.ReadData.SingleItem.DynamoDB"></a>

En Amazon DynamoDB, puede utilizar la API de DynamoDB o [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (un lenguaje de consulta compatible con SQL) para leer un elemento de una tabla.

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

Con la API de DynamoDB, se utiliza la operación `PutItem` para agregar un elemento a una tabla.

DynamoDB proporciona la operación `GetItem` para recuperar un elemento por su clave principal. `GetItem` es muy eficiente ya que proporciona acceso directo a la ubicación física del elemento. (Para obtener más información, consulte ). [Particiones y distribución de datos en DynamoDB](HowItWorks.Partitions.md).)

De forma predeterminada, `GetItem` devuelve el elemento completo con todos sus atributos.

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

Puede agregar un parámetro `ProjectionExpression` para que solo se devuelvan algunos de los atributos.

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

Observe que la clave principal de esta tabla consta de *Artist* y *SongTitle*.

La operación `GetItem` de DynamoDB es muy eficiente. Utiliza los valores de clave principal para determinar la ubicación de almacenamiento exacta del elemento en cuestión y lo recupera directamente desde ella. La eficiencia de la instrucción `SELECT` de SQL es parecida para recuperar elementos por sus valores de clave principal.

La instrucción `SELECT` de SQL admite muchos tipos de consultas y exámenes de tablas. DynamoDB proporciona una funcionalidad semejante con las operaciones `Query` y `Scan`, que se describen en [Diferencias al consultar una tabla](SQLtoNoSQL.ReadData.Query.md) y [Diferencias al analizar una tabla](SQLtoNoSQL.ReadData.Scan.md).

La instrucción `SELECT` de SQL puede llevar a cabo uniones de tablas para permitirle recuperar datos de varias tablas al mismo tiempo. Las uniones son más eficaces cuando las tablas de base de datos están normalizadas y las relaciones entre las tablas están claras. Sin embargo, si se unen demasiadas tablas en una misma instrucción `SELECT`, el rendimiento de la aplicación podría verse afectado. Puede solucionar este problema utilizando la replicación de bases de datos, las vistas materializadas o las reescrituras de consultas.

DynamoDB es una base de datos no relacional y no admite uniones de tablas. Si va a migrar una aplicación existente a partir de una base de datos relacional a DynamoDB, debe desnormalizar el modelo de datos para eliminar la necesidad de uniones.

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

Con PartiQL, se utiliza la operación `ExecuteStatement` para leer un elemento de una tabla, mediante la instrucción `Select` de PartiQL.

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

Observe que la clave principal de esta tabla consta de Artist y SongTitle. 

**nota**  
 La instrucción select de PartiQL también se puede utilizar para consultar o analizar una tabla de DynamoDB

Para obtener ejemplos de código mediante `Select` y `ExecuteStatement`, consulte [Instrucciones de selección de PartiQL para DynamoDB](ql-reference.select.md).

------