4.10 - CONSULTAS AVANZADAS.
| CONSULTAS AVANZADAS SELECT | CONSULTAS AVANZADAS: CUANTIFICADORES ALL, ANY Y EXISTS |
||
|
En relacción con consultas anidadas existen 3 cuantificadores ALL y ANY y EXITS. |
|||
|
|
|||
| CUANTIFICADOR ALL. | |||
Se utilizará de forma conjunta con una consulta anidada que devuelva más de un valor y un operador de comparación que no sea la igualdad. Sirve para seleccionar los valores que cumplan una determinada condición para todos los valores de la consulta anidada. (No se suele utilizar con igualdad). EJEMPLO 53: Nombre de las asignaturas que tengan más créditos. SELECT Nombre FROM ASIGNATURA WHERE Creditos >= ALL (SELECT Creditos FROM ASIGNATURA);Otra forma: SELECT Nombre FROM ASIGNATURA WHERE Creditos = (SELECT MAX(Creditos) FROM ASIGNATURA);EJEMPLO 54: Personas que viven en la ciudad que vive más gente. SELECT * FROM PERSONA WHERE Ciudad IN (SELECT Ciudad FROM PERSONA GROUP BY Ciudad HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM PERSONA GROUP BY Ciudad)); |
|||
|
|
|||
| CUANTIFICADOR ANY. | |||
En conjunción con una consulta anidada que devuelve varios valores, sirve para determinar cuando una determinada condición se verifica para al menos uno de los valores que devuelve la subconsulta. (No se suele utilizar con desigualdad). EJEMPLO 54B: Personas que viven en cualquier ciudad excepto en la que vive más gente. SELECT * FROM PERSONA WHERE Ciudad IN (SELECT Ciudad FROM PERSONA GROUP BY Ciudad HAVING COUNT(*) < ANY (SELECT COUNT(*) FROM PERSONA GROUP BY Ciudad)); |
|||
|
|
|||
| CUANTIFICADOR EXISTS. | |||
En conjunción con una consulta anidada sirve para determinar si existen filas en dicha subconsulta. Podemos utilizar análogamente NOT EXISTS. Este tipo de consultas se llaman correlacionadas ya que hay una relacción entre la consulta principal y la subconsulta. EJEMPLO 55: Lista de asignaturas en las que no se ha matriculado nadie. SELECT * FROM ASIGNATURA WHERE NOT EXISTS (SELECT * FROM ALUMNO_ASIGNATURA WHERE ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura);EJEMPLO 56: Ciudades en las que vive algún profesor y también algún alumno. SELECT DISTINCT Ciudad FROM PERSONA AS PP, PROFESOR WHERE PP.DNI = PROFESOR.DNI AND EXISTS (SELECT * FROM PERSONA AS PA, ALUMNO WHERE PA.DNI = ALUMNO.DNI AND PA.Ciudad = PP.Ciudad);Otra forma: SELECT DISTINCT PP.Ciudad FROM PERSONA AS PP, PROFESOR, PERSONA AS PA, ALUMNO WHERE PP.DNI = PROFESOR.DNI AND PA.DNI = ALUMNO.DNI AND PA.Ciudad = PP.Ciudad;EJEMPLO 57: Ciudades en las que vive algún profesor pero ningún alumno. SELECT DISTINCT Ciudad FROM PERSONA AS PP, PROFESOR WHERE PP.DNI = PROFESOR.DNI AND NOT EXISTS (SELECT * FROM PERSONA AS PA, ALUMNO WHERE PA.DNI = ALUMNO.DNI AND PA.Ciudad = PP.Ciudad); | |||


No hay comentarios:
Publicar un comentario