Una subconsulta es una sentencia select que se utiliza dentro de otra
sentencia select. La subconsulta obtiene unos resultados intermedios
(uno o mas datos) que se emplean en la consulta principal. Las
subconsultas siempre deben estar escritas entre parentesis.
Como utilizar subconsultas?
°Se pueden utilizar subconsultas en lugar de una expresion
siempre y cuando se devuelva un solo valor o una lista de valores.
°Puede tener subconsultas dentro de subconsultas, con una
anidacion de hasta 32 niveles.
Para que sirve?
Para filtrar una clausula WHERE o HAVING con el
conjunto de resultados de la subconsulta, aunque también
pueden utilizarse en la lista de selección.
Tipos de Subconsultas
Subconsultas que devuelven un unico valor.
Una fila con una unica columna, El valor devuelto por la subconsulta puede
ser usado con un valor normal en una expresion, en una comparacion, entre
otras. Si la subcolsuta devuelve mas de un valor (una fila con varias
columnas o mas de una fila), se produce un error de ejecucion.
Subconsultas que devuelven una unica fila con mas de una columna.
Una subconsulta que devuelve una única fila con más de una columna es usada
habitualmente en predicados (en el where o en el having). En este caso la subconsulta debe
devolver una sola fila y tantas columnas como las existentes entre paréntesis a la izquierda
del operador. Es decir, el número de columnas a ambos lados del operador debe coincidir.
Subconsultas que devuelven un conjunto de filas (es decir, cero, una o varias filas).
Si la subconsulta devuelve un conjunto de valores (cero, uno o más), entonces no se pueden
comparar con un comparador tradicional(<,<=,=, etc.) debido a que estos operadores sólo
sirven para comparar un valor con otro, pero no un valor con muchos. Por tanto, hay que
recurrir a operadores especiales. (operador IN, operador exists, operador All, operador any).
Componentes de la subconsulta
Operador IN
El operador in se puede emplear para determinar si un elemento pertenece a un
conjunto dado de valores. Ahora se va a ver cómo se puede usar una subconsulta en
lugar de un conjunto dado de valores. Este operador tiene dos formas habituales de
uso: expresión in ( subconsulta ) y ( exprl, expr2,... ) in ( subconsulta ). En el primer
caso el operador determina si un valor pertenece a un conjunto de valores. En el
segundo caso el operador determina si una tupla pertenece a un conjunto de tuplas.
Operador Exists
Los operadores exists y su contrario not exists suelen necesitar emplear
las referencias externas, de ahí que hasta ahora no se hayan presentado.
Ambos operadores pueden ser usados tanto en la cláusula where como en
la cláusula having. El operador exists( subconsulta ) devuelve verdadero s1
la subconsulta devuelve al menos una fila. En caso contrario, es decir, si la
subconsulta no devuelve ninguna fila, entonces el operador devuelve falso.
Operador Any
La palabra sorne es sinónimo de any. Este operador
también tiene dos formas de uso, dependiendo del número
de columnas en la subconsulta. Se comienza por describir la
versión para una sola columna. Un uso de este operador es
el siguiente: expresión operador any ( subconsulta ). En este
uso de any la subconsulta debe devolver una sola columna.
Operador All
Este operador también tiene dos formas de uso, dependiendo del número de
columnas en la subconsulta. Se comienza por describir la versión para una sola
columna. El primer uso de este operador es el siguiente: expresión operador all (
subconsulta ). En este uso la subconsulta debe devolver una sola columna.
Operador Some
SOME es un equivalente del estándar de SQL-92 de ANY