Consultas SQL: Optimización y Ejemplos Prácticos
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 10,53 KB
Operaciones Básicas en Consultas SQL
A continuación, se presentan ejemplos de consultas SQL que ilustran diversas operaciones y funciones comunes en la gestión de bases de datos.
1. DISTINCT: Selección de Valores Únicos
Ejemplo: Seleccionar los códigos de cliente únicos de la tabla facturas que tengan el estado 'A'.
SELECT DISTINCT codcli FROM facturas WHERE estatus = 'A';
2. Alias: Renombrar Columnas y Tablas
Ejemplo: Mostrar el nombre de los clientes con el alias "Nombre del Cliente" de la tabla clientes (con alias cl) y estado 'A'. El uso de alias en los nombres de las tablas permite simplificar las consultas, especialmente cuando los nombres de las tablas son largos.
SELECT nombre AS "Nombre del Cliente" FROM clientes cl WHERE estatus = 'A';
3. Concatenación: Unir Valores de Columnas
Ejemplo: Mostrar la fecha de emisión y vencimiento de las facturas de forma amigable.
SELECT 'La factura ' || numero || ' se emitió el: ' || fecha || ' y se vence el: ', fecha + diasvigencia FROM facturas WHERE estatus = 'A';
4. Operadores Matemáticos: Cálculos en Consultas
Ejemplo 1: Realizar una proyección de precios sumando el 40% al costo de los productos en la tabla articulos.
SELECT codigo, descripcion, costo, ((costo * 0.40) + costo) AS "precio" FROM articulos WHERE estatus = 'A';
Ejemplo 2: Sumar 500 unidades al límite de crédito de cada cliente en la tabla clientes, considerando los valores nulos.
SELECT codigo, nombre, limcre AS "limite de credito", limcre + 500 AS "limite propuesto" FROM clientes WHERE estatus = 'A';
5. TRUNC y ROUND: Funciones de Redondeo
Ejemplo: Mostrar el código del cliente, el límite de crédito, el 12.5% del límite de crédito, el 12.5% sin decimales y redondeado al valor superior.
SELECT codigo, limcre, limcre * 0.125, TRUNC(limcre * 0.125), ROUND(limcre * 0.125) FROM clientes WHERE estatus = 'A';
6. UPPER y SUBSTR: Manipulación de Cadenas
Ejemplo: Mostrar las descripciones en mayúsculas y los 5 primeros caracteres de la descripción de cada artículo.
SELECT descripcion, UPPER(descripcion), SUBSTR(descripcion, 1, 5) FROM articulos WHERE estatus = 'A';
7. AVG, MAX y SUM: Funciones de Agregación
Ejemplo: Mostrar el promedio de los costos, el costo mayor y la suma de todos los costos de la tabla articulos.
SELECT AVG(costo), MAX(costo), SUM(costo) FROM articulos WHERE estatus = 'A';
Operaciones con Fechas en SQL
8. TO_CHAR: Formateo de Fechas
Elementos de TO_CHAR:
- DD: Día del mes.
- D: Día de la semana.
- DAY: Nombre del día en mayúscula.
- MM: Mes (01-12).
- MONTH: Nombre del mes en mayúscula.
- MON: Primeras tres letras del mes en mayúscula.
- HH:MM:SS: Horas, minutos y segundos.
- FM: Suprime espacios en blanco.
Ejemplo: Descomponer las fechas de las facturas en día, mes y año.
SELECT numero, fecha, TO_CHAR(fecha, 'dd') AS "dia", TO_CHAR(fecha, 'month') AS "mes", TO_CHAR(fecha, 'yyyy') AS "Año" FROM facturas WHERE estatus = 'A';
9. Operaciones Aritméticas con Fechas
Operaciones:
- Fecha + número
- Fecha - número
- Fecha1 - Fecha2
Ejemplo: Mostrar el número de factura, fecha de emisión, días de vigencia y fecha de vencimiento (fecha de emisión + días de vigencia).
SELECT numero, fecha AS "emision", diasvigencia AS "dias", fecha + diasvigencia AS "vencimiento" FROM facturas WHERE estatus = 'A';
10. Obtener la Fecha del Sistema
Ejemplo: Obtener la fecha actual del sistema.
SELECT TO_CHAR(SYSDATE, 'dd/mm/yyyy') AS "hoy es:" FROM dual;
Funciones Avanzadas en SQL
11. NVL: Manejo de Valores Nulos
Ejemplo: Mostrar el código, límite de crédito, límite de crédito + 500, y el límite de crédito + 500 usando NVL para reemplazar nulos por 0.
SELECT codigo, limcre, limcre + 500, NVL(limcre, 0) + 500 FROM clientes WHERE estatus = 'A';
12. DECODE: Evaluaciones Condicionales
Ejemplo: Calcular el precio de los artículos basado en su costo, aplicando diferentes incrementos según el costo actual.
SELECT codigo, descripcion, costo, DECODE(costo, 500, costo + 100, 1630, costo + 50, costo + 10) AS "precio" FROM articulos WHERE estatus = 'A';
13. COUNT: Conteo de Registros
Ejemplo: Mostrar la cantidad de artículos existentes.
SELECT COUNT(*) AS "cant articulos" FROM articulos WHERE estatus = 'A';
14. BETWEEN: Selección por Rango
Ejemplo: Mostrar las facturas elaboradas entre el 5 y el 10 de enero de 2004.
SELECT * FROM facturas WHERE fecha BETWEEN '05/01/04' AND '10/01/04' AND estatus = 'A';
15. IN: Selección por Conjunto de Valores
Ejemplo: Mostrar código, descripción y costo de los artículos con costo igual a 500, 420 o 391.
SELECT codigo, descripcion, costo FROM articulos WHERE costo IN (500, 420, 391) AND estatus = 'A';
16. LIKE: Búsqueda por Patrón
Comodines:
- %: Sustitución completa.
- _: Sustitución posicional.
Ejemplo 1: Mostrar el código, nombre y límite de crédito de los clientes cuyo nombre comienza con 'B'.
SELECT codigo, nombre, limcre FROM clientes WHERE nombre LIKE 'B%' AND estatus = 'A';
Ejemplo 2: Mostrar los datos de los clientes cuya segunda letra del nombre sea 'A'.
SELECT * FROM clientes WHERE nombre LIKE '_A%' AND estatus = 'A';
17. NOT, AND y OR: Operadores Lógicos
Ejemplo: Mostrar código, descripción y costo de los artículos con costo diferente a 500, 420 y 391.
SELECT codigo, descripcion, costo FROM articulos WHERE costo NOT IN (500, 420, 391) AND estatus = 'A';
18. ORDER BY: Ordenamiento de Resultados
Ejemplo 1: Mostrar los clientes ordenados por nombre.
SELECT codigo, nombre, limcre FROM clientes WHERE estatus = 'A' ORDER BY nombre;
Ejemplo 2: Mostrar el código, nombre y límite de crédito de cada cliente ordenado por límite de crédito y luego por nombre.
SELECT codigo, nombre, limcre FROM clientes WHERE estatus = 'A' ORDER BY limcre, nombre;
19. GROUP BY: Agrupación de Resultados
Ejemplo: Mostrar el código del cliente, el número de facturas que posee y el total de esas facturas por cada cliente.
SELECT codcli, COUNT(*) AS "num facturas", SUM(montotal) AS "total" FROM facturas WHERE estatus = 'A' GROUP BY codcli;
20. HAVING: Filtrado de Grupos
Ejemplo: Mostrar la misma información que en el ejemplo anterior, pero solo para los totales inferiores a 10,000, ordenados por total.
SELECT codcli, COUNT(*) AS "num facturas", SUM(montotal) AS "total" FROM facturas WHERE estatus = 'A' GROUP BY codcli HAVING SUM(montotal) < 10000 ORDER BY SUM(montotal);
Uniones y Subconsultas en SQL
21. JOIN: Unión de Tablas
Ejemplo: Buscar el ID del cliente, nombre, número de factura, monto de la factura y fecha de la tabla cliente y factura.
SELECT cliente.id_cliente, cliente.nombre, factura.num_factura, factura.montotal, factura.fec_factura FROM cliente, factura WHERE cliente.id_cliente = factura.id_cliente;
22. JOIN de 3 Tablas
Ejemplo: Unir las tablas factura, cliente y detalle_factura para obtener información detallada de las facturas.
SELECT b.id_cliente, b.nombre, a.numfactura, a.fecha_factura, d.cod_articulo, d.cantidad, d.precioventa, (d.cantidad * precioventa) AS subtotal FROM factura AS a, cliente AS b, detalle_factura AS d WHERE a.numfactura = d.numfactura AND a.id_cliente = b.id_cliente ORDER BY b.id_cliente;
23. JOIN de 4 Tablas
Ejemplo: Unir las tablas facturas, cliente, articulo y detalle_factura.
SELECT b.id_cliente, b.nombre, a.num_factura, d.cod_articulo, c.nombre, d.cantidad, d.precio, (d.cantidad * d.precio) AS subtotal FROM facturas AS a, cliente AS b, articulo AS c, detalle_factura AS d WHERE b.id_cliente = a.id_cliente AND a.num_factura = d.num_factura AND d.cod_articulo = c.cod_articulo;
24. JOIN Externo
Ejemplo: Mostrar todos los clientes que no tienen facturas asociadas.
SELECT * FROM cliente WHERE ID_cliente NOT IN (SELECT id_cliente FROM factura);
25. Subquery: Consultas Anidadas
Ejemplo 1: Listar los clientes cuyo límite de crédito es superior al del cliente BECO (Código = 0002).
SELECT codigo, nombre, limcre FROM clientes WHERE limcre < (SELECT limcre FROM clientes WHERE codigo = '0002' AND estatus = 'A') ORDER BY codigo;
Ejemplo 2: Listar alumnos cuya edad sea mayor a la de Daniela.
SELECT * FROM alumnos WHERE edad > (SELECT edad FROM alumnos WHERE nombre = 'Daniela');
26. UNION: Combinar Resultados de Consultas
Ejemplo: Combinar los códigos y nombres de clientes y proveedores.
SELECT codigo, nombre FROM clientes UNION SELECT codigo, nombre FROM proveedores;
27. INTERSECT: Intersección de Resultados
Ejemplo: Mostrar los códigos y nombres que existen tanto en la tabla clientes como en la tabla proveedores.
SELECT codigo, nombre FROM clientes INTERSECT SELECT codigo, nombre FROM proveedores;
28. MINUS: Diferencia de Conjuntos
Ejemplo: Mostrar los códigos de artículos que no están en detalle_factura.
SELECT codigo FROM articulos MINUS SELECT codart FROM detalle_factura;