Como usar consultas sql aninhados que retornam um único valor

Apresentando uma subconsulta com uma das seis operadores de comparação (=

, lt; gt;, lt;,lt; =, gt;, gt; =) É frequentemente útil. Em tal caso, a expressão SQL que precede o operador avalia a um valor único, e o subconsulta seguindo o operador também deve ser avaliada como um único valor. Uma exceção é o caso do operador comparação quantitativa, que é um operador de comparação seguido por um quantificador (QUALQUER, ALGUNS, ou TODOS).

Para ilustrar um caso em que uma subconsulta retorna um valor único, olhar para outro pedaço de banco de dados do Zetec Corporation. Ele contém uma tabela de clientes que contém informações sobre as empresas que compram produtos Zetec.

ColunaTiporestrições
CustIDINTEIROCHAVE PRIMÁRIA
companhiaCHAR (40)ÚNICO
CustAddress CHAR (30)
CustCityCHAR (20)
CustStateCHAR (2)
CustZipCHAR (10)
CustPhoneCHAR (12)
modlevelINTEIRO

A tabela de contatos contém dados pessoais sobre indivíduos em cada uma das organizações de clientes da Zetec.

ColunaTiporestrições
CustIDINTEIROCHAVE PRIMÁRIA
ContFNameCHAR (10)
ContLNameCHAR (16)
ContPhoneCHAR (12)
ContInfoCHAR (50)

Diga que você quer olhar para as informações de contato para vendas Olímpico, mas você não se lembra que a empresa de CustID. Use uma consulta aninhada como este para recuperar as informações que deseja:

Video: 1.Consultas SQL (Select, Where, group by, having, order by, join)

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

O resultado é algo como isto:

Video: 26 - T-SQL - Campos Calculados - Cálculos - SQL Server

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

Agora você pode chamar Jerry no Olympic e dizer-lhe sobre venda especial deste mês em impressoras 3D.

Video: Part 1 How to find nth highest salary in sql

Quando você usa uma subconsulta em um “=”Comparativamente, a subconsulta de SELECIONAR lista deve especificar uma única coluna (CustID no exemplo). Quando a subconsulta é executado, ele deve retornar uma única linha, a fim de ter um único valor para a comparação.

Neste exemplo, suponha que a tabela de cliente tem apenas uma linha com um companhia valor de ‘Vendas Olímpico’. o CRIAR A TABELA declaração para CLIENTE especifica um ÚNICO restrição para companhia, e esta declaração garante que a subconsulta no exemplo anterior retorna um único valor (ou nenhum valor).

Subqueries como o que neste exemplo, no entanto, são normalmente utilizados em colunas que não estão especificadas para ser ÚNICO. Nesses casos, você deve contar com o conhecimento prévio do conteúdo do banco de dados para acreditar que a coluna não tem duplicatas.



Se mais de um cliente tem um valor de ‘Vendas Olímpico’ no companhia coluna (talvez em diferentes estados), a subconsulta gerará um erro.

Se nenhum cliente com esse nome da empresa existe, a subconsulta é tratado como se fosse nula, e a comparação torna-se desconhecido. Neste caso, o ONDE cláusula retorna nenhuma linha (porque ele retorna somente as linhas com a condição verdadeira e filtra linhas com a condição falsa ou desconhecida). Isso provavelmente aconteceria, por exemplo, se alguém incorreto o companhiaComo ‘Olumpic Vendas’.

Embora o operador igual (=) É o mais comum, você pode usar qualquer um dos outros cinco operadores de comparação em uma estrutura similar. Para cada linha na tabela especificada no delimitador declaração de A PARTIR DE cláusula, o valor único devolvido pela subconsulta é comparada com a expressão no delimitador declaração de ONDE cláusula. Se a comparação dá um valor True, a linha é adicionada à tabela de resultados.

Você pode garantir que uma subconsulta retornará um único valor, se você incluir uma função de agregação na mesma. As funções de agregação sempre retornar um único valor. Claro, esta maneira de retornar um único valor é útil somente se você quer o resultado de uma função de agregação.

Suponha que você é um vendedor Zetec e você precisa para ganhar um cheque de comissão grande para pagar algumas contas inesperadas. Você decide se concentrar na venda do produto mais caro do Zetec. Você pode descobrir o que esse produto está com uma consulta aninhada:

Select Model, ProdName, ListPriceFROM PRODUCTWHERE ListPrice = (SELECT MAX (ListPrice) DE PRODUTO) -

Na consulta aninhada anterior, tanto a subconsulta ea declaração delimitador operar na mesma tabela. A subconsulta retorna um único valor: o preço máximo de lista na tabela de produtos. A consulta externa recupera todas as linhas da tabela de produtos que têm esse preço lista.

O exemplo seguinte mostra uma comparação subconsulta que utiliza um operador de comparação que não seja =:

Select Model, ProdName, ListPriceFROM PRODUCTWHERE ListPrice lt; (SELECT AVG (ListPrice) DE PRODUTOS) -

A subconsulta retorna um único valor: o preço lista médio na tabela de produtos. A consulta externa recupera todas as linhas da tabela de produtos que têm um preço de lista inferior ao preço médio de lista.

Video: 6 - T-SQL - IDENTITY - Auto-incremento de valores em colunas - SQL Server

No padrão SQL original, uma comparação pode ter apenas uma subconsulta, e tinha que ser no lado direito da comparação. SQL: 1999 permitiu um ou ambos os operandos da comparação ser subconsultas, e versões posteriores do SQL reter que a expansão da capacidade.


Publicações relacionadas