Aprende leyendo en orden

SELECT — extraer datos de una tabla

Aprende la sentencia SQL SELECT desde lo básico. Cubre la selección completa y parcial de columnas, el alias AS, el filtrado de filas con WHERE y la combinación de operadores de comparación con AND / OR — todo ejecutándose en vivo en tu navegador.

Sobre el SQL que cubre este curso

Este curso enseña la sintaxis universal de SQL que funciona en los principales RDBMS — MySQL, Oracle, PostgreSQL, SQL Server y más. Los fundamentos como CREATE TABLE / SELECT / WHERE / JOIN / GROUP BY se escriben igual sin importar a qué base de datos cambies.

Por razones técnicas, la consola del navegador ejecuta SQLite, pero siempre que una característica difiera entre bases de datos (la longitud impuesta por los tipos, cómo listar tablas, etc.) verás una nota comparativa como En MySQL escribirías... para que sepas qué usar en otros entornos.

SELECT — extraer todas las columnas

Para extraer datos de una tabla, usas la sentencia SELECT. SELECT es la construcción más utilizada en SQL: generación de informes, renderizado de pantallas, análisis de datos, procesamiento por lotes — casi cualquier operación que "lee" datos comienza con SELECT.

Empecemos con la forma que extrae todas las columnas de una tabla tal cual. El * (asterisco) en SELECT * es un símbolo que significa "todas las columnas", y el FROM table_name que le sigue indica de qué tabla extraer.

-- Extrae todas las columnas y todas las filas de la tabla user
SELECT * FROM user;
Estructura de una sentencia SELECT
SELECTFROMWHERELista de columnas* / name, ageNombre de tablauserCondición de filaage >= 30Elige columnasTabla objetivoFiltra filas
SELECT especifica qué columnas tomar, FROM especifica de qué tabla tomarlas y WHERE especifica qué filas conservar. Familiarízate con la posición y el papel de cada uno.

Extrae todas las columnas y todas las filas de la tabla user configurada al inicio del artículo. (Ejecútalo correctamente y aparecerá la explicación.)

① Escribe y ejecuta SELECT * FROM user;.

② Confirma que el resultado devuelve 5 filas con las cuatro columnas id / name / age / city.

Editor SQL

Ejecutar una consulta para ver el resultado

Extraer solo columnas específicas

SELECT * es cómodo, pero en aplicaciones reales suele ser mejor extraer solo las columnas que necesitas. Se reduce el volumen de datos enviados y recibidos, vuelven solo las columnas que quieres mostrar y el procesamiento posterior se mantiene simple.

Para elegir columnas, lista los nombres de columnas separados por comas justo después de SELECT. El orden en que las escribes es el orden en que aparecen en el resultado.

Todas las columnas vs. columnas específicas — la elección de columnas cambia el volumen de datos
SELECT *SELECT name, age4 columnas(id / name / age / city)2 columnas(name / age)Todas las columnas en el resultadoSolo las columnas necesariasVistazo rápido a los datosApps en producción e informesReducir columnasReducir la salidaElegir según el caso
SELECT devuelve todas las columnas (bueno para inspeccionar) y una lista de columnas devuelve solo lo que necesitas (bueno para producción). Las flechas en cada fila comparan "izquierda (SELECT ) vs. derecha (SELECT name, age)" en la misma dimensión.
-- Extrae solo name y age (2 columnas)
SELECT name, age FROM user;

-- También puedes reordenar las columnas
SELECT city, name FROM user;

Imagina una pantalla de lista de usuarios que solo debe mostrar "name y age".

① De la tabla user, extrae solo las columnas name y age en ese orden.

② Confirma que el resultado son 5 filas × 2 columnas y que id y city no están incluidas.

Editor SQL

Ejecutar una consulta para ver el resultado

AS — asignar un alias a una columna

Por defecto, la cabecera de columna en el resultado de un SELECT muestra el nombre de columna original. Con column AS alias puedes cambiar el nombre de columna del lado del resultado a lo que quieras. Esto no cambia el nombre de la columna en la tabla subyacente — es solo "cómo debería llamarse esta columna en este resultado de SELECT".

Los alias también son útiles cuando quieres dar nombre a una expresión. Las operaciones aritméticas como age + 1 o los resultados de funciones de agregación como SUM(price) no tienen un nombre de columna por defecto, así que sin AS la cabecera sería la expresión cruda — incómoda para mostrar o trabajar desde el código de tu aplicación.

Cómo funciona AS — reescribir la cabecera de columna del resultado
Sentencia SELECTCabecera del resultadoValores de muestraSELECT name FROM username(nombre original)Alice / Bob /...SELECT name AS user_name FROM useruser_name(alias)Alice / Bob /...(valores sin cambios)SELECT age + 1 AS next_year FROM usernext_year(nombre para una expresión)31 / 26 /...(age + 1)Cabecera como aliasNombrar una expresión
AS solo cambia la cabecera del lado del resultado; el nombre real de la columna en la tabla no cambia. Las operaciones aritméticas y los resultados de funciones de agregación no tienen un nombre por defecto, así que nombrarlos con AS es el enfoque estándar.
-- Asigna alias a las columnas
SELECT name AS user_name, age AS user_age FROM user;

-- Asigna alias a una expresión (calcula la edad del año que viene)
SELECT name, age + 1 AS next_year_age FROM user;

AS se puede omitir

SELECT name AS user_name FROM user; y SELECT name user_name FROM user; (con AS omitido) significan lo mismo. Dicho esto, escribir AS deja claro al lector que "esto es ahora un alias", así que este curso siempre escribe AS de forma explícita.

Si necesitas espacios o caracteres no ASCII en el alias, envuélvelo en comillas dobles: AS "Edad del año que viene".

Imagina una pantalla de lista de usuarios que debe mostrar "edad actual" junto con "edad del año que viene".

① De la tabla user, extrae name, age y age + 1.

② Usa AS para asignar el alias next_year_age a la tercera columna (age + 1).

③ Confirma que el resultado son 5 filas × 3 columnas y que la cabecera de la tercera columna es next_year_age.

Editor SQL

Ejecutar una consulta para ver el resultado

WHERE — filtrar filas por condición

Hasta ahora has aprendido a elegir columnas. Ahora veamos el filtrado de filas. Al añadir WHERE condition después de SELECT cols FROM table, solo las filas que cumplen la condición acaban en el resultado.

Ayuda pensar en SELECT como elegir verticalmente (columnas) y en WHERE como elegir horizontalmente (filas).

SELECT reduce columnas; WHERE reduce filas
SELECT name, age (reduce verticalmente)WHERE id = 2 (reduce horizontalmente → 1 fila)idnameagecity1Alice30Tokyo2Bob25Osaka3Carol35Tokyo
SELECT name, age (la banda vertical verde) reduce 4 columnas a 2; WHERE id = 2 (la banda horizontal azul) reduce 3 filas a 1. Su intersección — el name y el age de Bob — es el resultado final de 1 fila × 2 columnas.

Operadores de comparación

Dentro de WHERE, las condiciones usan operadores de comparación (símbolos que comparan valores y devuelven verdadero/falso). Los operadores de comparación de SQL se parecen mucho a los de otros lenguajes de programación, con un detalle: la igualdad es un único =, no ==.

OperadorSignificadoEjemplo
=Igualage = 30
<>Distinto (!= también funciona)city <> 'Tokyo'
<Menor queage < 30
>Mayor queage > 30
<=Menor o igualage <= 30
>=Mayor o igualage >= 30
-- Extrae usuarios de 30 años o más
SELECT * FROM user WHERE age >= 30;

-- Extrae filas donde city es Tokyo (las cadenas van entre comillas simples)
SELECT * FROM user WHERE city = 'Tokyo';

-- Extrae filas donde city es cualquier cosa que no sea Tokyo
SELECT * FROM user WHERE city <> 'Tokyo';

La comparación de cadenas con `=` distingue mayúsculas/minúsculas

En la consola de este curso, la comparación de cadenas con `=` distingue mayúsculas y minúsculas. WHERE name = 'alice' no coincidirá con 'Alice' — el resultado son 0 filas. En MySQL, la collation a menudo hace que esta comparación no distinga mayúsculas/minúsculas por defecto, así que la misma consulta puede devolver 1 fila.

`WHERE column = NULL` no hace lo que esperas

Escribir WHERE name = NULL no extraerá "filas donde name sea NULL". En SQL, NULL se trata como "desconocido", y = NULL siempre se evalúa como NULL — lo que WHERE filtra fuera. Para extraer filas NULL, usa el WHERE column IS NULL dedicado. Lo cubrimos en detalle en el artículo de profundización sobre WHERE — por ahora, recuerda "no uses = NULL".

Imagina un requisito: "muestra cada usuario de 30 años o más".

① De la tabla user, extrae cada fila donde age sea 30 o superior.

② Confirma que el resultado son 3 filas (Alice / Carol / Eve) y que Bob y Dave no están incluidos.

Editor SQL

Ejecutar una consulta para ver el resultado

AND / OR — combinar varias condiciones

En el trabajo real a menudo necesitas combinar condiciones: "usuarios de Tokyo de 30 años o más", "miembros de rango oro o platino". SQL combina condiciones con AND (ambas verdaderas) y OR (cualquiera verdadera).

Un operador útil más es NOT (negar la condición). NOT (city = 'Tokyo') significa "no Tokyo". <> hace el mismo trabajo, así que por ahora céntrate en AND y OR.

Operador lógicoSignificadoEjemplo
ANDAmbas condiciones son verdaderasage >= 30 AND city = 'Tokyo'
ORCualquiera de las condiciones es verdaderacity = 'Tokyo' OR city = 'Osaka'
NOTNiega la condiciónNOT (city = 'Tokyo')
-- Usuarios en Tokyo de 30 años o más
SELECT name, age, city FROM user WHERE city = 'Tokyo' AND age >= 30;

-- Usuarios en Tokyo u Osaka
SELECT name, city FROM user WHERE city = 'Tokyo' OR city = 'Osaka';

Usa paréntesis al mezclar AND y OR

Cuando AND y OR aparecen en el mismo WHERE, AND se evalúa antes que OR. A OR B AND C en realidad significa A OR (B AND C) — no el orden que escribiste.

Para evitar sorpresas, haz explícito el orden de evaluación con paréntesis al mezclar AND y OR. Por ejemplo, "(Tokyo u Osaka) y 30 o más" es WHERE (city = 'Tokyo' OR city = 'Osaka') AND age >= 30. Los paréntesis también dejan claro tu intención al lector — cuando dudes, añádelos.

Imagina un requisito: "lista el name y la city de los usuarios que viven en Tokyo u Osaka, tienen 25 años o más, y no son Carol". Este ejercicio practica la combinación de AND, OR y NOT.

① De la tabla user, extrae name y city.

② Usa un WHERE que combine tres condiciones con AND: `city` es `'Tokyo'` u `'Osaka'`, `age` es 25 o más, y `name` no es `'Carol'`. Haz explícito con paréntesis el orden de evaluación de la parte OR.

③ Confirma que el resultado son 3 filas (Alice Tokyo / Bob Osaka / Eve Tokyo), excluyendo a Carol (Tokyo / 35) y Dave (Kyoto / 28).

Editor SQL

Ejecutar una consulta para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué significa * en SELECT * FROM user;?

Pregunta 2¿Cuál describe mejor los papeles de SELECT y WHERE?

Pregunta 3¿Qué significa el operador de comparación SQL <>?