Lenguaje de Consulta de Datos (DQL) 3/4
1. Comandos adicionales en DQL: #
DISTINCT (Eliminar duplicados) #
La cláusula DISTINCT se utiliza para seleccionar solo valores únicos de una columna o conjunto de columnas, eliminando los duplicados.
Sintaxis:
1SELECT DISTINCT columna 2FROM tabla;
Ejemplo:
Si tienes una tabla de empleados y quieres obtener los departamentos únicos:
1SELECT DISTINCT departamento 2FROM empleados;
Esto devolverá solo una lista de departamentos sin duplicados.
LIMIT / TOP (Limitar resultados) #
El comando LIMIT (en MySQL y otros) y TOP (en SQL Server) se utilizan para limitar la cantidad de resultados que devuelve una consulta. Esto es útil cuando solo quieres obtener los primeros N registros.
Sintaxis para LIMIT (en MySQL, PostgreSQL, etc.), TOP (en SQL Server), FETCH (en Oracle):
Ejemplo (usando LIMIT / TOP/FETCH):
Si quieres obtener solo los primeros 5 estudiantes de una tabla ordenada por edad:
Resultado: Este comando devolverá solo los primeros 5 estudiantes con mayor edad.
OFFSET (Omite un número específico de registros) #
La cláusula OFFSET en SQL se utiliza para omitir un número específico de registros al comienzo del conjunto de resultados de una consulta. Generalmente se usa junto con la cláusula LIMIT para controlar qué parte de los resultados se muestra, lo que es muy útil para la paginación de datos.
2. Sintaxis básica: #
LIMIT cantidad: Especifica cuántos registros se deben devolver.OFFSET número_de_registros_a_omitir: Indica cuántos registros deben ser omitidos antes de comenzar a devolver los resultados.
3. Ejemplo: #
Supongamos que tienes una tabla llamada estudiantes y quieres mostrar los nombres de los estudiantes, pero omitiendo los primeros 5 registros.
Este comando:
- Omite los primeros 5 registros de la tabla.
- Devuelve los siguientes 10 registros después de omitir los primeros 5.
4. Usos comunes: #
- Paginación: Mostrar un conjunto de resultados en diferentes páginas, como en aplicaciones web donde se muestran pocos registros por página.
Por ejemplo, si estás mostrando 10 registros por página, para la primera página no necesitas un OFFSET, para la segunda página necesitarás OFFSET 10, para la tercera OFFSET 20, y así sucesivamente.
IN (Filtrar por un conjunto de valores) #
La cláusula IN permite filtrar resultados para que coincidan con cualquiera de una lista de valores especificados.
Sintaxis:
1SELECT columna 2FROM tabla 3WHERE columna IN (valor1, valor2, valor3);
Ejemplo:
Si quieres encontrar los estudiantes que pertenecen a las clases Matemáticas, Física o Química:
1SELECT nombre, clase 2FROM estudiantes 3WHERE clase IN ('Matemáticas', 'Física', 'Química');
BETWEEN (Rango de valores) #
La cláusula BETWEEN se utiliza para filtrar resultados que están dentro de un rango determinado, tanto numérico como de fechas.
Sintaxis:
1SELECT columna 2FROM tabla 3WHERE columna BETWEEN valor_inferior AND valor_superior;
Ejemplo: Si quieres encontrar los estudiantes cuya edad esté entre 18 y 25 años:
1SELECT nombre, edad 2FROM estudiantes 3WHERE edad BETWEEN 18 AND 25;
LIKE (Búsqueda de patrones) #
La cláusula LIKE se utiliza para buscar patrones dentro de una columna de texto. Puedes usar los caracteres comodín % (cualquier secuencia de caracteres) y _ (un solo carácter).
Sintaxis:
1SELECT columna 2FROM tabla 3WHERE columna LIKE patrón;
Ejemplo: Si quieres encontrar todos los estudiantes cuyo nombre comienza por "A", sin distinguir entre mayúsculas y minúsculas:
1SELECT nombre 2FROM estudiantes 3WHERE nombre LIKE 'A%';
Esto devolverá todos los estudiantes cuyos nombres empiecen con "A".
iLIKE (Búsqueda de patrones insensible) #
En la mayoría de los motores de base de datos que los admiten (principalmente PostgreSQL), la diferencia esencial entre LIKE e ILIKE radica en la sensibilidad a mayúsculas y minúsculas:
- LIKE: realiza comparaciones respetando las mayúsculas y minúsculas. Es decir, 'ABC' LIKE 'abc' devolvería falso (no coinciden debido a la diferencia de caso).
- ILIKE: hace la comparación de forma insensible a mayúsculas y minúsculas (no distingue entre A y a). Por ejemplo, 'ABC' ILIKE 'abc' devolvería verdadero (coinciden ignorando el caso).
Sintaxis:
Ejemplo: Si quieres encontrar todos los estudiantes cuyo nombre comienza con "A":
Esto devolverá los estudiantes cuyo nombre comience por "A", sin distinguir entre mayúsculas y minúsculas dentro de las limitaciones indicadas para cada motor. El comodín % representa cualquier secuencia de caracteres posterior.
Rendimiento:
- En la mayoría de motores, las búsquedas con LIKE e ILIKE pueden verse afectadas si se usan patrones que empiezan con comodines (por ejemplo, '%texto'). Se recomienda crear índices apropiados o evitar patrones que impidan su uso.
- Con ILIKE, al ser insensible a mayúsculas, es más probable que no se aproveche un índice basado en las cadenas directamente, salvo que se utilicen índices especiales (como los de tipo citext en PostgreSQL, o índices de texto con funciones específicas).
5. Resumen de los comandos en DQL: #
DISTINCT: Para eliminar duplicados.LIMIT/TOP: Para limitar el número de resultados devueltos.OFFSET: Omite un número específico de registros.IN: Para filtrar registros basados en un conjunto de valores.BETWEEN: Para filtrar resultados dentro de un rango de valores.LIKE: Para buscar patrones en columnas de texto.
Resumen del tema
Conceptos clave #
- Paginación (
LIMITyOFFSET/OFFSET ... FETCH): limita la cantidad de filas y salta registros para presentar datos por páginas. - Filtro de Conjuntos (
IN): evalúa si una columna coincide con cualquiera de los valores de una lista o subconsulta. - Filtro de Rangos (
BETWEEN): selecciona valores inclusivos entre un límite inferior y superior (fechas o números). - Búsqueda por Patrones (
LIKE/ILIKE): compara texto usando comodines (%para cero o más caracteres,_para un único carácter). - Sensibilidad a Mayúsculas:
ILIKEen PostgreSQL o uso deLOWER()/ collation_cien otros motores. - Impacto en Rendimiento: patrones que inician con comodín (
'%texto') no pueden usar índices B-Tree estándar y causan escaneo completo de tabla (Full Table Scan).
Qué debes recordar #
Usa IN y BETWEEN para filtros claros y acotados, y ten cuidado con comodines iniciales en LIKE que degradan el rendimiento al anular el uso de índices.