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

La introducción de una subconsulta con uno de los seis operadores de comparación (=, lt;>, lt;,lt; =, >, > =) Es a menudo útil. En tal caso, la expresión SQL anterior 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 que una subconsulta devuelve un solo valor, mirar a otra parte de la base de datos de Zetec Corporation. Contiene una tabla CUSTOMER que contiene información sobre las empresas que compran productos Zetec.

ColumnaEscribeRestricciones
CustIDINTEGERPRIMARY KEY
CompañíaCHAR (40)UNIQUE
CustAddress CHAR (30)
CustCityCHAR (20)
CustStateCHAR (2)
CustZipCHAR (10)
CustPhoneCHAR (12)
ModLevelINTEGER

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

ColumnaEscribeRestricciones
CustIDINTEGERPRIMARY KEY
ContFNameCHAR (10)
ContLNameCHAR (16)
ContPhoneCHAR (12)
ContInfoCHAR (50)

Digamos que usted desea ver la información de contacto de ventas olímpico, pero no te acuerdas de que la compañía de CustID. Utilice 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 se ve algo como esto:

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

Ahora puede llamar a Jerry en el Olympic y contarle lo de la venta especial de este mes en las impresoras 3D.

Cuando se utiliza una subconsulta en un "=" comparación, la subconsulta de SELECT 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, supongamos que la tabla CLIENTE tiene una sola fila con un Compañía valor de 'Ventas olímpico'. los CREATE TABLE declaración para el cliente especifica un UNIQUE limitación para Compañía, 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, son de uso común en las columnas que no están especificados para ser UNIQUE. En tales casos, debe basarse 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 Compañía columna (tal vez en diferentes estados), la subconsulta genera un error.

Si no existe un cliente con tal nombre de la empresa, 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 sucederá, por ejemplo, si alguien escribe mal el Compañíacomo 'Olumpic Ventas'.

Aunque el operador igual (=) Es el 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 del 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 subconsulta devolverá un solo valor si se incluye una función de agregado en el mismo. Las funciones de agregación 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.

Suponga que usted es un vendedor Zetec y que necesita para ganar un cheque de 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 el producto es con una consulta anidada:

SELECT Modelo, ProdName, ListPriceFROM PRODUCTWHERE ListPrice = (SELECT MAX (ListPrice) DE PRODUCTO) -

En la consulta anidada anterior, tanto la subconsulta y la declaración que encierra operan en la misma mesa. La subconsulta devuelve un solo valor: el precio máximo de la lista en la tabla PRODUCTO. La consulta externa recupera todas las filas de la tabla PRODUCTO que tiene que el precio de lista.

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

SELECT Modelo, ProdName, ListPriceFROM PRODUCTWHERE ListPrice lt; (SELECT AVG (ListPrice) DE PRODUCTO) -

La subconsulta devuelve un solo valor: el precio medio de cotización en la tabla PRODUCTO. La consulta externa recupera todas las filas de la tabla PRODUCTO que tiene 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ó que uno o ambos operandos de la comparación sea subconsultas, y versiones posteriores de SQL retener que la expansión de la capacidad.




» » » » Cómo utilizar consultas SQL anidadas que devuelven un solo valor