Skip to content

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:

SELECT DISTINCT columna1
FROM nombre_tabla;

SELECT DISTINCT columna1, columna2
FROM nombre_tabla;

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.