Modelado físico relacional de bases de datos

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):

1SELECT columna
2FROM tabla
3LIMIT N;

Ejemplo (usando LIMIT / TOP/FETCH): Si quieres obtener solo los primeros 5 estudiantes de una tabla ordenada por edad:

1SELECT nombre, edad
2FROM estudiantes
3ORDER BY edad DESC
4LIMIT 5;

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.

Sintaxis básica:

1SELECT columnas
2FROM tabla
3ORDER BY columna
4LIMIT cantidad OFFSET número_de_registros_a_omitir;
  • 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.

Ejemplo:

Supongamos que tienes una tabla llamada estudiantes y quieres mostrar los nombres de los estudiantes, pero omitiendo los primeros 5 registros.

1SELECT nombre
2FROM estudiantes
3ORDER BY nombre
4LIMIT 10 OFFSET 5;

Este comando:

  • Omite los primeros 5 registros de la tabla.
  • Devuelve los siguientes 10 registros después de omitir los primeros 5.

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 con "A":

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:

1--❌ No soporta ILIKE
2SELECT columna
3FROM tabla
4WHERE LOWER(columna) LIKE LOWER(patrón);

Ejemplo: Si quieres encontrar todos los estudiantes cuyo nombre comienza con "A":

1SELECT nombre
2FROM estudiantes
3WHERE nombre LIKE 'Pedro';
4-- Nota: Asegúrate de que la columna `nombre` tenga collation con `ci` (case-insensitive), como utf8_general_ci.

Esto devolverá todos los estudiantes cuyos nombres sea pedro sin importar mayusculas y minúsculas.

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).

Resumen de los comandos en DQL:

  1. DISTINCT: Para eliminar duplicados.
  2. LIMIT / TOP: Para limitar el número de resultados devueltos.
  3. OFFSET: Omite un número específico de registros.
  4. IN: Para filtrar registros basados en un conjunto de valores.
  5. BETWEEN: Para filtrar resultados dentro de un rango de valores.
  6. LIKE: Para buscar patrones en columnas de texto.
  • Loading...