Cómo utilizar consultas sql anidadas que devuelven un solo valor

La introducción de una sub consulta con uno de los seis operadores de comparación (=, lt; gt;, lt;,lt; =, gt;, gt; =) Es a menudo útil. En tal caso, la expresión SQL que precede al operador evalúa a un solo valor, y la subconsulta siguiendo el operador también debe evaluar a un solo valor. Una excepción es el caso de la operador de comparación cuantificado, que es un operador de comparación seguido de un cuantificador (ALGUNA, ALGUNOS, o TODAS).

Para ilustrar un caso en el que una sentencia devuelve un solo valor, mirar a otra parte de la base de datos de Trend Corporation. Contiene una tabla de cliente que contiene información acerca de las compañías que compran productos Zetec.

ColumnaTiporestricciones
CustIDENTEROPRIMARY KEY
EmpresaCHAR (40)ÚNICO
CustAddress CHAR (30)
CustCityCHAR (20)
CustStateCHAR (2)
CustZipCHAR (10)
CustPhoneCHAR (12)
ModLevelENTERO

La tabla CONTACTAR posee los datos personales sobre los individuos en cada una de las organizaciones de clientes de Zetec.

ColumnaTiporestricciones
CustIDENTEROPRIMARY KEY
ContFNameCHAR (10)
ContLNameCHAR (16)
ContPhoneCHAR (12)
ContInfoCHAR (50)

Digamos que usted desea ver la información de contacto para los Juegos Olímpicos de ventas, pero no recuerda que la compañía de CustID. Utilizar una consulta anidada como éste para recuperar la información que desea:

SELECT * FROM CONTACTWHERE CustID = (SELECT CustIDFROM CUSTOMERWHERE Empresa = ‘Ventas Olímpico’) -

El resultado es como la siguiente:

CustID ContFName ContLName ContPhone ContInfo ------ --------- --------- --------- -------- 118 505 Jerry Attwater -876-3456 Se playmajor papel inadditivemanufacturing.

Ahora puede llamar a Jerry en el Olympic y hablarle de venta especial de este mes sobre las impresoras 3D.

Cuando se utiliza una subconsulta en una “=”Comparación de la subconsulta, SELECCIONAR lista debe especificar una sola columna (CustID en el ejemplo). Cuando se ejecuta la subconsulta, debe devolver una sola fila con el fin de tener un valor único para la comparación.

En este ejemplo, se supone que la tabla cliente tiene sólo una fila con una Empresa valor de ‘Ventas Olímpico’. los CREAR MESA Declaración para el cliente especifica una ÚNICO limitación para Empresa, y esta declaración garantiza que la subconsulta en el ejemplo anterior devuelve un solo valor (o ningún valor).

Subconsultas como el de este ejemplo, sin embargo, se utilizan comúnmente en las columnas que no están especificados para ser ÚNICO. En tales casos, debe confiar en el conocimiento previo de los contenidos de bases de datos para creer que la columna no tiene duplicados.

Si más de un cliente tiene un valor de ‘Ventas Olímpico’ en el Empresa columna (tal vez en diferentes estados), la sub consulta genera un error.

Si no existe un cliente con un nombre de esas empresas, la subconsulta se trata como si fuera nula, y la comparación se hace desconocido. En este caso, el DÓNDE cláusula devuelve ninguna fila (porque devuelve sólo las filas con la condición verdadera y filtra filas con la condición de falso o desconocido). Esto probablemente ocurrirá, por ejemplo, si alguien está mal escrito el Empresacomo ‘Olumpic Ventas’.

Aunque el operador igual (=) Es la más común, puede utilizar cualquiera de los otros cinco operadores de comparación en una estructura similar. Para cada fila de la tabla especificada en la declaración de cerramiento DE cláusula, el único valor devuelto por la subconsulta se compara con la expresión en la declaración de cerramiento DÓNDE cláusula. Si la comparación da un valor True, se agrega una fila a la tabla de resultados.

Usted puede garantizar que una sub consulta devolverá un solo valor si se incluye una función de agregado en ella. Funciones agregadas Siempre devolver un solo valor. Por supuesto, esta forma de devolver un solo valor es útil sólo si desea que el resultado de una función agregada.

Supongamos que usted es un vendedor Zetec y que necesita para ganar un cheque comisión grande para pagar algunas facturas inesperadas. Usted decide concentrarse en la venta de productos más caros de Zetec. Usted puede averiguar lo que es producto de una consulta anidada:

SELECT Modelo, ProdName, ListPriceFROM PRODUCTWHERE ListPrice = (SELECT MAX (ListPrice) a partir del producto) -

En la consulta anidada anterior, tanto la sub consulta y la declaración que encierra operan en la misma mesa. La sentencia devuelve un único valor: el precio máximo de la lista en la tabla de productos. La consulta externa recupera todas las filas de la tabla de productos que tienen que el precio de lista.

El siguiente ejemplo muestra una subconsulta comparación que utiliza un operador de comparación que no sea =:

Seleccione el modelo, ProdName, ListPriceFROM PRODUCTWHERE ListPrice lt; (SELECT AVG (ListPrice) a partir del producto) -

La sentencia devuelve un único valor: el precio medio de cotización en la tabla de productos. La consulta externa recupera todas las filas de la tabla de productos que tienen un precio de lista más bajo que el precio de lista promedio.

En el estándar SQL original, una comparación podría tener sólo una subconsulta, y tenía que estar en el lado derecho de la comparación. SQL: 1999 permitió uno o ambos operandos de que la comparación sea subconsultas, y versiones posteriores de SQL retener que la expansión de la capacidad.

Artículos Relacionados