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';

Entradas relacionadas: