Módulo 2 · 01 | Anatomía de una consulta SELECT

MÓDULO 2 · CLASE 1

Anatomía de una consulta SELECT

Clase de lectura. Las partes de un SELECT, en qué orden se escriben, en qué orden las procesa el motor y cómo tratar los valores NULL.

Idea clave

Los ejemplos usan la base tablas_libro (USE tablas_libro;). SELECT es la instrucción para leer datos. Se escribe con sus cláusulas en un orden fijo, pero el motor las procesa en otro orden. Entender esa diferencia evita la mayoría de los errores de principiante.

1. Las cláusulas, en el orden en que se escriben

SELECT columnas o cálculos -- qué mostrar FROM tabla -- de dónde WHERE condición sobre filas -- qué filas entran GROUP BY columnas -- cómo agrupar HAVING condición sobre grupos -- qué grupos quedan ORDER BY columnas [ASC|DESC] -- cómo ordenar LIMIT n; -- cuántas filas devolver

Solo SELECT es obligatorio (y casi siempre FROM). El resto es opcional, pero si aparece tiene que respetar este orden: por ejemplo, HAVING va después de GROUP BY y antes de ORDER BY.

2. El orden lógico: cómo la procesa el motor

PasoCláusulaQué hace
1FROM (y JOIN)Toma la tabla o une las tablas
2WHEREFiltra filas
3GROUP BYForma grupos
4HAVINGFiltra grupos
5SELECTCalcula las columnas y los alias
6ORDER BYOrdena el resultado
7LIMITRecorta la cantidad de filas

Consecuencia práctica

Como WHERE se procesa antes que SELECT, no podés usar en WHERE un alias creado en el SELECT. En MySQL sí podés usarlo en ORDER BY, GROUP BY y HAVING.
-- Error: el alias "total" todavía no existe en WHERE SELECT ID_LINEA, CANTIDAD * PRECIO AS total FROM lineas_factura WHERE total > 5; -- Correcto: repetir la expresión en WHERE (o usar el alias en ORDER BY) SELECT ID_LINEA, ROUND(CANTIDAD * PRECIO, 2) AS total FROM lineas_factura WHERE CANTIDAD * PRECIO > 5 ORDER BY total DESC; -- línea 1 → 27.78 · línea 3 → 6.6

3. Piezas que vas a usar todo el tiempo

  • Alias con AS: renombran columnas o tablas en el resultado (SUM(SALARIO) AS total_salarios).
  • DISTINCT: elimina filas repetidas (SELECT DISTINCT CARGO FROM empleados).
  • Operadores en WHERE: =, <>, >, BETWEEN, IN, LIKE, combinados con AND, OR y NOT.
  • ORDER BY con ASC (por defecto) o DESC, y LIMIT para un “top N”.
  • Comentarios: -- una línea o /* varias líneas */.

4. El valor NULL

NULL significa “sin dato”: no es cero ni texto vacío. Por eso no se compara con =:

-- Vehículos sin inspección previa (ULTI_ITV vacía) -- No devuelve nada: NULL = NULL no es verdadero SELECT MARCA, MODELO FROM vehiculos WHERE ULTI_ITV = NULL; -- Correcto → Alfa Romeo Brera, BMW X3, Ford Fiesta SELECT MARCA, MODELO FROM vehiculos WHERE ULTI_ITV IS NULL; SELECT MARCA, MODELO FROM vehiculos WHERE ULTI_ITV IS NOT NULL;

Además, las funciones de agregación (SUM, AVG, COUNT(columna)) ignoran los NULL; COUNT(*) cuenta todas las filas. En vehiculos, COUNT(*) da 5 y COUNT(ULTI_ITV) da 2.

Buenas prácticas

Evitá SELECT * en reportes: pedí solo las columnas que necesitás. Escribí las palabras clave en mayúsculas, una cláusula por línea, y terminá cada instrucción con ;.

Bibliografía

El manual oficial de MySQL está en inglés; podés usar el traductor del navegador.

Siguiente clase: Primeras consultas SQL.

Scroll al inicio
¿Consultas? Escribinos