lunes, mayo 29, 2006

[BBDD] Utilización de Exists

Me ha parecido práctico poner este pequeño resumen sobre la utilización de los EXISTS en las consultas anidadas de SQL, que el compañero Juanjo ha dejado en las news. Espero que os sirva.
Utilización de los EXISTS

* Cuando es AL MENOS UNO/ALGUNO se utiliza 1 EXISTS.

Ejemplo:"Obtener los j# de los proyectos donde se utilice AL MENOS UNA de las piezas suministradas por el proveedor s1"

SELECT DISTINCT spjx.j#
FROM spj spjx
WHERE EXISTS
(SELECT *
FROM spj spjy
WHERE spjy.p#=spjx.p#
AND spjy.s#=´s1´)

* Cuando es ÚNICO / ÚNICAMENTE se utiliza NOT EXISTS.

Ejemplo:"Obtener los j# de los proyectos en los que s1 es el ÚNICO proveedor".

SELECT DISTINCT j#
FROM spj spjx
WHERE NOT EXISTS
(SELECT *
FROM spj spjy
WHERE spjy.p#=spjx.p#
AND spjy.s# < > s1´)

* Cuando se trata de TODOS o AL MENOS LOS MISMOS se utilizan 2 NOT EXISTS.

Ejemplo:"Obtener los j# de los proyectos donde se utilicen TODAS las piezas suministradas por el proveedor s1".

SELECT DISTINCT spj.j#
FROM spj
WHERE NOT EXISTS
(SELECT *
FROM spj spjx
WHERE s# = ´s1´ (*CUIDADO¡¡¡la condición no se cambia; no es s#<>s1 *)
AND NOT EXISTS
(SELECT *
FROM spj spjy
WHERE spjy.j#=spjx.j#
AND spjy.p# = spj.p#));

* Cuando se trata de SOLAMENTE también se utilizarán 2, pero a diferencia del anterior en el primer EXISTS no existe condición.

Ejemplo:"Obtener los j# de los proyectos donde se utilicen SOLAMENTE las piezas suministradas por el proveedor s1".

SELECT DISTINCT j#
FROM spj spjx
WHERE NOT EXISTS
(SELECT *
FROM spj spjy
AND NOT EXISTS
(SELECT *
FROM spj spjz
WHERE spjz.p#=spjy.p#
AND spjz.s# = ´s1´));

3 comentarios:

Felix dijo...

Gracias! ha sido muy útil.

Suerte! :)

Felix dijo...

ya que estamos... He buscado por las news, por web, etc, etc... y me faltan las soluciones a uno de los examenes que me parecen más complicados, es el de junio 2004, la 2a semana, tipo B.

Estaría bien si os parece poner aqui nuestras opiniones acerca de la solución, tras hacer cada uno el mismo, si no está hecho ya.

Bueno, yo postearé las mías, en cuanto lo acabe. :)

Salu2!

Anónimo dijo...

Gracias. Tiene tela que tengamos que aprender cuatro trucos sobre exists para aprobar la maldita asignatura, la peor planteada, junto con redes (del mismo profesor, por cierto) de toda la carrera. Así luego salimos sin saber hacer E/R en condiciones o tirar consultas en SQL. Eso sí, mucho QUEL, QBE y modelos obsoletos que sólo en la UNED se estudian... Patético.