Menu

SELECT en SQLite: consultar filas, columnas y expresiones

Cómo funciona la sentencia SELECT en SQLite: elegir columnas, calcular expresiones, poner alias con AS y el modelo mental detrás de cualquier consulta que vayas a escribir.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

SELECT: cómo leer filas de una tabla en SQLite

Toda consulta que le hagas a una base de datos SQLite empieza con SELECT. Lo que le estás diciendo es: dame estas columnas, de esta tabla, para las filas que cumplan estas condiciones. En este documento nos vamos a centrar en las dos primeras partes: las columnas y la tabla. El filtrado lo veremos en el siguiente.

La consulta SELECT más sencilla posible:

SELECT * significa "todas las columnas". FROM products indica la tabla. El resultado es una fila por cada registro, con las cuatro columnas. El punto y coma cierra la sentencia.

Esa es la forma básica de la sintaxis SELECT en SQLite: SELECT <columnas> FROM <tabla>;.

Seleccionar columnas específicas en SQLite

* viene bien cuando estás explorando los datos. Pero en código real casi siempre conviene nombrar exactamente las columnas que te interesan:

Recibes las dos columnas en el orden que pediste. El orden en la lista del SELECT define el orden del resultado: no tiene por qué coincidir con el orden de las columnas en la tabla.

¿Por qué conviene esto frente a un SELECT *? Por dos motivos. Primero, viaja menos información (o se lee menos del archivo), algo que se nota cuando las tablas tienen muchas columnas. Segundo, tu consulta se mantiene estable aunque alguien añada una columna nueva a la tabla el mes que viene. Con SELECT *, de repente empiezan a devolverse más columnas, y eso puede romper código de aplicación que desempaqueta las filas por posición.

SELECT no solo consulta: también calcula

Las columnas dentro de un SELECT no tienen por qué ser nombres de columnas tal cual. Pueden ser cualquier expresión: operaciones aritméticas, llamadas a funciones, concatenación de cadenas, constantes. SQLite evalúa la expresión para cada fila.

La cuarta columna no existe en la tabla: SQLite la calcula fila por fila. Puedes hacer lo mismo con funciones de texto, fechas, expresiones condicionales o lo que se te ocurra. La lista de un SELECT es un sitio para moldear los datos, no solo para recuperarlos.

Es más, puedes usar SELECT sin la cláusula FROM y tratar a SQLite como si fuera una calculadora:

Una fila, tres columnas. Es útil para probar qué hace una expresión antes de meterla en una consulta de verdad.

Renombrar columnas con AS (alias en SQL)

Cuando calculas una columna, SQLite le asigna un nombre por defecto — muchas veces es la expresión tal cual, algo como price * stock. Eso queda feo y, además, no es estable. Ponle un nombre decente a la columna usando AS:

El alias es el nombre que tendrá la columna en el resultado. Esto importa para la legibilidad cuando estás revisando la salida, pero importa todavía más en el código de la aplicación que accede a los valores por nombre de columna (row["inventory_value"] en lugar de row[1]).

La palabra clave AS es opcional —price * stock inventory_value funciona igual—, pero conviene escribirla. La intención queda más clara y evitas confundir a quien lea el código, que podría interpretar una coma faltante como un alias.

Asignar un alias a la tabla

También puedes ponerle un alias corto a la propia tabla. Con una sola tabla no aporta gran cosa, pero es una costumbre que te salvará en cuanto empieces a hacer JOINs:

p ahora hace las veces de products. La forma con punto, p.name, deja claro de qué tabla viene cada columna. Con una sola tabla es ruido innecesario; con tres tablas unidas mediante JOIN, es lo único que mantiene la consulta legible.

Literales y constantes en el resultado

En un SELECT puedes combinar columnas reales con valores constantes. Resulta útil cuando quieres etiquetar filas o rellenar un valor de marcador:

Cada fila obtiene el mismo 'USD' y 1. Este patrón aparece cuando combinas resultados de varias consultas con UNION y necesitas una columna marcadora para distinguir el origen de cada una.

Una nota sobre NULL

Hay columnas que vienen vacías: o no se insertó ningún valor, o la columna no tiene valor por defecto. SQLite representa la "ausencia de valor" como NULL, y en los resultados de un SELECT ese NULL se muestra como un espacio en blanco o como la palabra literal NULL, según la herramienta que estés usando.

Fíjate en la segunda fila: price es NULL y price * 2 también es NULL. Cualquier operación aritmética que involucre un NULL devuelve NULL. Esta es una de las causas más habituales de resultados confusos en SQL, y le dedicaremos una página entera más adelante. Por ahora, quédate con la idea de que NULL se contagia a través de las expresiones.

Lo que debes recordar

  • SELECT <columnas> FROM <tabla>; es la forma que tiene cualquier consulta SELECT en SQLite.
  • En código real, lista las columnas de forma explícita; deja SELECT * para cuando estés explorando.
  • La lista del SELECT admite cualquier expresión, no solo nombres de columna.
  • Usa AS para ponerle un nombre decente a columnas calculadas y a alias de tablas.
  • NULL se propaga en la aritmética: tenlo presente cuando un resultado te parezca raro.

Siguiente paso: filtrar con WHERE

Hasta ahora, cada consulta nos devuelve todas las filas de la tabla. La cláusula WHERE es la que te permite acotar el resultado: filtrar filas por precio, por nombre, por fecha o por cualquier expresión que se evalúe como verdadera o falsa. De eso trata el siguiente documento.

Preguntas frecuentes

¿Cuál es la sintaxis básica de SELECT en SQLite?

SELECT <columnas> FROM <tabla>;. Las columnas pueden ser una lista separada por comas (SELECT name, email FROM users), un * para traerlas todas, o cualquier expresión como price * quantity. La cláusula FROM indica de qué tabla se lee, y el punto y coma cierra la sentencia.

¿Conviene usar SELECT * en SQLite?

Para curiosear desde la CLI y ver qué hay en una tabla, perfecto. En código de aplicación, mejor lista las columnas que realmente necesitas. SELECT * acopla tu código al esquema actual: si mañana añades una columna, todas las consultas devuelven más datos en silencio, y eso puede romper código que desempaqueta filas por posición.

¿Cómo renombro una columna en el resultado de un SELECT?

Con AS le pones un alias a una columna o expresión: SELECT price * quantity AS total FROM orders. Ese alias pasa a ser el nombre de la columna en el resultado, lo cual importa para la legibilidad y para el código que accede a los resultados por nombre. La palabra clave AS es opcional, pero conviene mantenerla por claridad.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR