Skip to main content

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.

Archivo:Consulta-avanzada.png

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)