Pregunta 1¿Qué significa * en SELECT * FROM user;?
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;
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.
-- Extrae solo name y age (2 columnas)
SELECT name, age FROM user;
-- También puedes reordenar las columnas
SELECT city, name FROM user;
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.
-- 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".
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).
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 ==.
| Operador | Significado | Ejemplo |
|---|---|---|
| = | Igual | age = 30 |
| <> | Distinto (!= también funciona) | city <> 'Tokyo' |
| < | Menor que | age < 30 |
| > | Mayor que | age > 30 |
| <= | Menor o igual | age <= 30 |
| >= | Mayor o igual | age >= 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".
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ógico | Significado | Ejemplo |
|---|---|---|
| AND | Ambas condiciones son verdaderas | age >= 30 AND city = 'Tokyo' |
| OR | Cualquiera de las condiciones es verdadera | city = 'Tokyo' OR city = 'Osaka' |
| NOT | Niega la condición | NOT (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.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cuál describe mejor los papeles de SELECT y WHERE?
Pregunta 3¿Qué significa el operador de comparación SQL <>?