2.3 DQL
Cuando necesites recuperar datos desde un SGBD, usarás el subconjunto DQL (Data Query Language) de SQL.
Leer datos
SELECT
es el comando principal para consultar datos en una base de datos. La sintaxis básica es:
SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE condición; -- opcional
SELECT *
FROM nombre_tabla
SELECT columna1, columna2
FROM nombre_tabla
ORDER BY columna1 [ASC|DESC]; -- ordenar resultados
SELECT columna1, columna2
FROM nombre_tabla
LIMIT n; -- limitar resultados a n filas
SELECT columna1, columna2
FROM nombre_tabla
OFFSET m; -- omitir las primeras m filas
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 IN (valor1, valor2, ...); -- filtrar por valores específicos
Alias
Puedes renombrar columnas o tablas usando AS
para hacer las consultas más legibles:
SELECT columna1 AS alias1, columna2 AS alias2
FROM nombre_tabla AS alias_tabla;
SELECT columna1, columna2
FROM nombre_tabla AS alias_tabla
WHERE alias_tabla.columna1 = valor;
Distinct
En ocasiones, es posible que quieras eliminar duplicados de los resultados. Para ello, puedes usar DISTINCT
:
Order
Para ordenar los resultados de una consulta, puedes usar ORDER BY
:
SELECT columna1, columna2
FROM nombre_tabla
ORDER BY columna1 ASC; -- orden ascendente
SELECT columna1, columna2
FROM nombre_tabla
ORDER BY columna1 DESC; -- orden descendente
SELECT columna1, columna2
FROM nombre_tabla
ORDER BY columna1 ASC, columna2 DESC; -- ordenar por múltiples columnas
Limitar resultados
Para limitar el número de resultados devueltos por una consulta, puedes usar OFFSET
o LIMIT
:
SELECT columna1, columna2
FROM nombre_tabla
LIMIT n; -- limita a n filas
SELECT columna1, columna2
FROM nombre_tabla
OFFSET m; -- omite las primeras m filas
SELECT columna1, columna2
FROM nombre_tabla
LIMIT n OFFSET m; -- limita a n filas y omite las primeras m filas
Filtrar resultados
Para filtrar los resultados de una consulta, puedes usar la cláusula WHERE
:
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 = valor; -- filtrar por igualdad
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 > valor; -- filtrar por mayor que
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 < valor; -- filtrar por menor que
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 BETWEEN valor1 AND valor2; -- filtrar por rango
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 LIKE 'patrón'; -- filtrar por patrón
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 LIKE '%patrón%'; -- filtrar por patrón con comodines
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 IS NULL; -- filtrar por valores nulos
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 IS NOT NULL; -- filtrar por valores no nulos
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 IN (valor1, valor2, ...); -- filtrar por valores específicos
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 NOT IN (valor1, valor2, ...); -- filtrar por valores
Subconsultas
Las subconsultas son consultas anidadas dentro de otra consulta. Se pueden usar en cláusulas SELECT
, FROM
o WHERE
:
SELECT columna1, columna2
FROM nombre_tabla
WHERE columna1 IN (SELECT columna1 FROM otra_tabla WHERE condición);
SELECT password
FROM usuarios
WHERE id = (SELECT id FROM usuarios WHERE username = 'usuario');
Funciones de agregación
Las funciones de agregación permiten realizar cálculos sobre un conjunto de valores y devolver un único valor. Algunas de las más comunes son:
COUNT()
: cuenta el número de filas.SUM()
: suma los valores de una columna.AVG()
: calcula el promedio de los valores de una columna.MIN()
: devuelve el valor mínimo de una columna.MAX()
: devuelve el valor máximo de una columna.GROUP_CONCAT()
: concatena los valores de una columna en una sola cadena.
SELECT COUNT(*) FROM nombre_tabla; -- cuenta todas las filas
SELECT COUNT(columna1) FROM nombre_tabla; -- cuenta filas no nulas en columna
SELECT SUM(columna1) FROM nombre_tabla; -- suma los valores de columna1
SELECT AVG(columna1) FROM nombre_tabla; -- promedio de columna1
SELECT MIN(columna1) FROM nombre_tabla; -- valor mínimo de columna1
SELECT MAX(columna1) FROM nombre_tabla; -- valor máximo de columna1
SELECT GROUP_CONCAT(columna1) FROM nombre_tabla; -- concatena valores de columna1
SELECT columna1, COUNT(*)
FROM nombre_tabla
GROUP BY columna1; -- agrupa por columna1 y cuenta filas en cada grupo
SELECT columna1, SUM(columna2)
FROM nombre_tabla
GROUP BY columna1; -- agrupa por columna1 y suma valores de columna2
SELECT columna1, AVG(columna2)
FROM nombre_tabla
GROUP BY columna1; -- agrupa por columna1 y calcula promedio de columna2
SELECT columna1, MIN(columna2)
FROM nombre_tabla
GROUP BY columna1; -- agrupa por columna1 y obtiene valor mínimo de columna2
SELECT columna1, MAX(columna2)
FROM nombre_tabla
GROUP BY columna1; -- agrupa por columna1 y obtiene valor máximo de columna2
SELECT columna1, GROUP_CONCAT(columna2)
FROM nombre_tabla
GROUP BY columna1; -- agrupa por columna1 y concatena valores de columna2
En estos ejemplos usamos GROUP BY
para agrupar los resultados por una o más columnas antes de aplicar las funciones de agregación. Esto permite realizar cálculos sobre grupos de datos en lugar de sobre toda la tabla.