Consultas avanzadas postgresql
Álgebra relacional
Cuando los campos de diferentes tablas a comparar son del mismo tipo y tienen la misma cantidad de carácteres, es decir varchar(100) y varchar(100), podemos utilizar la álgebra relacional. Veámos algunos casos:
Union
Con Union los resultados solo aparecen una vez:
SELECT * FROM Persona
UNION
SELECT * FROM Trabajadores
Except
Except elimina de lista a producir las tuplas que no aparecen en la segunda tabla
SELECT * FROM persona
EXCEPT
SELECT * FROM trabajadores
En este caso tendríamos una lista de las personas que no trabajan
Intersect
Con intersect pasa todo lo contrario que con except, tendríamos una lista de las personas que aparecen también en la segunda tabla
SELECT * FROM estudiantes
INTERSECT
SELECT * FROM trabajadores
Tendríamos una lista de los estudiantes que trabajan
Consultas avanzadas
Obtener una lista de todas los miembros que han sido recomendados por otros miembros del club.
SELECT r.nombre||’-‘||r.apellido AS “Recomendados”, m.nombre||’-‘||m.apelllido AS “Miembros”
FROM r.miembros, m.miembros
WHERE r.miembros=m.recomendadospor
order by Recomendados;
Produce una lista contando el número de recomendaciones hecha por cada miembro
SELECT recomendadopor, count(*)
FROM miembros
WHERE recomendadopor IS NOT NULL
GROUP BY 1
ORDER BY 1;
Visualizar el tema, el estante y los ejemplares de la tabla libreria con ejemplares comprendidos entre el 8 y el 15.
UNA FORMA DE HACERLO
SELECT tema, estante, ejemplares
FROM libreria
WHERE ejemplares BETWEEN 8 and 15;
Visualizar los registros donde el estante no este compredido entre la B y la D
SELECT *
FROM librerias
WHERE estante NOT BETWEEN ‘B’ AND ‘D';
o
SELECT * FROM librerias
EXCEPT
SELECT * FROM librerias
WHERE estante BETWEEN ‘B’ AND ‘D';
Visualizar aquellos registros donde la estantería no tenga los valores A, C o E
SELECT * FROM libreria
WHERE estante NOT IN (‘A’,’C’,’E’)
o
SELECT * FROM libreria
EXCEPT
SELECT * FROM libreria
WHERE estante IN (‘A’,’C’,’E’)
Visualizar todos los temas de la tabla libreria donde el número de ejemplares sea inferior a los que hay de medicina
SELECT tema FROM librerias
WHERE ejemplares < (SELECT ejemplares
FROM librerias
WHERE tema LIKE ‘Medicina’)
Visualizar las estanterias con más ejemplares
SELECT estante, SUM(ejemplares) AS Libros FROM libreria
GROUP BY estante
having SUM(ejemplares) = (SELECT SUM(ejemplares)
FROM libreria
GROUP BY estante
ORDER BY SUM(ejemplares) DESC LIMIT 1);
Visualizar los nombres de la tabla alumnos, que aparezcan en alguna de las siguentes tablas: nuevos y antiguos.
Encuentra los códigos de proyecto y los nombre de proyecto en que todos los empleados que esten asignados tengan un sueldo superior a 30.000 €
SELECT codi_pro, nom_pro FROM poyectos
EXCEPT
SELECT codi_pro, nom_pro FROM proyectos, empleados
WHERE cod_pro=nom_pro
AND sou <= 30000;
Se quiere saber los clientes que no han contratado ningún proyecto
SELECT codi_cli FROM clientes
except
SELECT codi_client FROM proyectos
o
SELECT * FROM clientes
where codi_cli not in (SELECT codi_client
FROM proyectos)