Consultas SQL Avanzadas: Optimización y Ejemplos Prácticos
Enviado por Chuletator online y clasificado en Inglés
Escrito el en español con un tamaño de 4,23 KB
Consultas SQL Avanzadas
Optimización y Ejemplos Prácticos
Consultas con LIKE
SELECT * FROM plantilla WHERE apellido LIKE 'H%'
SELECT * FROM plantilla WHERE apellido LIKE 'H%' OR apellido LIKE 'h%';
SELECT * FROM plantilla WHERE UPPER(apellido) LIKE 'H%';
Consultas con AND y OR
SELECT * FROM plantilla WHERE (turno LIKE 'T' OR turno LIKE 'M') AND funcion LIKE 'Enfermer%';
SELECT * FROM plantilla WHERE turno in('T', 'M') AND funcion in('Enfermero', 'Enfermera');
Consultas con Funciones de Tiempo
SELECT * FROM enfermo WHERE fecha_nac LIKE '%/05/%';
SELECT * FROM enfermo WHERE extract(month from fecha_nac) = 5;
Consultas con Funciones de Fecha
SELECT * FROM enfermo WHERE (extract(month from fecha_nac) = 2 AND extract(day from fecha_nac) > 20) OR (extract(month from fecha_nac) = 3 AND extract(day from fecha_nac) < 20);
Joins
SELECT p.apellido, h.nombre, p.hospital_cod, h.hospital_cod FROM hospital h, plantilla p WHERE p.hospital_cod = h.hospital_cod;
SELECT count(p.apellido), h.nombre FROM hospital h, plantilla p WHERE p.hospital_cod = h.hospital_cod GROUP BY h.nombre;
Consultas con DISTINCT
SELECT distinct funcion FROM plantilla;
SELECT funcion,count(*) FROM plantilla GROUP BY funcion;
SELECT funcion, max(salario), count(*) FROM plantilla GROUP BY funcion;
Subconsultas
SELECT apellido, funcion, salario FROM plantilla WHERE salario = (SELECT max(salario) FROM plantilla)
SELECT funcion, max(salario) FROM plantilla GROUP BY funcion;
Consultas con CASE
SELECT nombre, CASE WHEN num_camas<500 then 'petit' ELSE 'gran' END FROM hospital;
SELECT apellido, especialidad, case when lower(especialidad) like 'cardi%' then 1 when lower(especialidad) like 'psiqui%' then 2 when lower(especialidad) like 'pedia%' then 3 else 4 end from doctor;
Joins con LEFT JOIN
SELECT s.nombre, p.apellido from sala s LEFT JOIN plantilla p ON p.hospital_cod=s.hospital_cod and p.sala_cod = s.sala_cod WHERE s.hospital_cod=13;
SELECT h.nombre, t.numero FROM hospital h LEFT JOIN (SELECT hospital_cod, count(*) numero FROM doctor where especialidad like 'Card%' group by hospital_cod) t ON h.hospital_cod=t.hospital_cod;
Consultas con Funciones de Agregación
SELECT SUM(c_comprada), marca, filtro, color, clase, mentol from compras WHERE color='N' GROUP BY marca, filtro, color, clase, mentol;
SELECT m.marca from manufactura m, fabricantes f WHERE (f.nombre_fabricante = m.nombre_fabricante) and not f.pais like 'Espa%';
Consultas con Funciones de Grupo
SELECT nif_estanco, sum(c_comprada * precio_compra) FROM compras GROUP BY NIF_ESTANCO;
SELECT clase, AVG(nicotina) FROM cigarrillos GROUP BY clase;
Consultas con DISTINCT y Filas Diferentes
SELECT distinct c.color, c.marca, m.nombre_fabricante, f.pais FROM cigarrillos c, manufactura m, fabricantes f WHERE m.nombre_fabricante=f.nombre_fabricante AND c.marca = m.marca
Consultas con Joins Complejos
SELECT distinct c.color, c.marca, c.filtro, c.mentol, c.clase, e.nombre_estanco, c.precio_costo*a.unidades FROM cigarrillos c, almacenes a, estancos e WHERE c.color = a.color AND c.marca = a.marca AND c.filtro = a.filtro AND c.clase = a.clase AND e.nif_estanco = a.nif_estanco AND c.mentol = a.mentol
Consultas con Rangos de Fechas
SELECT sum(c_comprada*precio_compra) FROM compras WHERE fecha_compra < (SELECT add_months(min(fecha_compra),3) FROM compras) ORDER BY fecha_compra;
Joins con LEFT JOIN y Filtrado
SELECT m.marca, a.unidades FROM manufactura m LEFT JOIN almacenes a ON m.marca = a.marca AND a.nif_estanco = '2000';