Subconsulta do SQL Server
Resumo: neste tutorial, você aprenderá sobre a subconsulta do SQL Server e como usá-la para consultar dados.
Introdução à subconsulta do SQL Server
Uma subconsulta é uma consulta aninhada dentro de outra instrução, como SELECT
, INSERT
, UPDATE
ou DELETE
.
Vamos ver o seguinte exemplo.
Considere o orders
e customers
tabelas do banco de dados de amostra.
A instrução a seguir mostra como usar uma subconsulta na WHERE
cláusula de uma SELECT
declaração para encontrar os pedidos de venda dos clientes que localizam em New York
:
Aqui está o resultado:
Neste exemplo, a seguinte instrução é uma subconsulta:
Code language: SQL (Structured Query Language) (sql)
Observe que você deve sempre incluir o SELECT
consulta de uma subconsulta entre parênteses ()
.
Uma subconsulta também é conhecida como consulta interna ou seleção interna, enquanto a instrução que contém a subconsulta é chamada de seleção externa ou consulta externa:
SQL O servidor executa todo o exemplo de consulta acima da seguinte maneira:
Primeiro, ele executa a subconsulta para obter uma lista de números de identificação dos clientes localizados em New York
.
Code language: SQL (Structured Query Language) (sql)
Em segundo lugar, o SQL Server substitui os números de identificação do cliente retornados pela subconsulta no operador IN
e executa a consulta externa para obter o conjunto de resultados final.
Como você pode s ee, usando a subconsulta, você pode combinar duas etapas. A subconsulta elimina a necessidade de selecionar os números de identificação do cliente e conectá-los à consulta externa. Além disso, a própria consulta se ajusta automaticamente sempre que os dados do cliente são alterados.
Subconsulta de aninhamento
Uma subconsulta pode ser aninhada em outra subconsulta. O SQL Server oferece suporte a até 32 níveis de aninhamento. Considere o seguinte exemplo:
Primeiro, O SQL Server executa a seguinte subconsulta para obter uma lista de números de identificação de marca das marcas Strider
e Trek
:
Em segundo lugar, o SQL Server calcula a lista de preços médios de todos os produtos que pertencem a essas marcas.
Code language: SQL (Structured Query Language) (sql)
Terceiro, o SQL Server encontra os produtos cujo preço de lista é maior do que o preço de lista médio de todos os produtos com o Strider
ou Trek
marca.
Tipos de subconsulta do SQL Server
Você pode usar uma subconsulta em vários lugares:
- No lugar de uma expressão
- Com
IN
ouNOT IN
- Com
ANY
ouALL
- Com
EXISTS
ouNOT EXISTS
- Em
UPDATE
,DELETE
, ouINSERT
instrução - Na
FROM
cláusula
subconsulta do SQL Server é usado no lugar de uma expressão
Se uma subconsulta retornar um único valor, ela pode ser usada em qualquer lugar em que uma expressão for usada.
No exemplo a seguir, uma subconsulta é usada como um expressão de coluna chamada max_list_price
em uma SELECT
declaração.
A subconsulta do SQL Server é usada com o operador IN
Uma subconsulta que é usada com o IN
retorna um conjunto de zero ou mais valores. Depois que a subconsulta retorna valores, a consulta externa os utiliza.
A consulta a seguir encontra os nomes de todos os produtos de mountain bikes e bicicletas de estrada que as lojas de bicicletas vendem.
Esta consulta é avaliada em duas etapas:
- Primeiro, a consulta interna retorna uma lista de números de identificação de categoria que correspondem aos nomes
Mountain Bikes
ecode
Bicicletas de estrada. - Em segundo lugar, esses valores são substituídos na consulta externa que encontra os nomes dos produtos cujo número de identificação da categoria corresponde a um dos valores da lista.
A subconsulta do SQL Server é usada com ANY operador
A subconsulta é introduzida com o operador ANY
tem a seguinte sintaxe:
Code language: SQL (Structured Query Language) (sql)
Supondo que a subconsulta retorne uma lista de valores v1, v2,… vn. O operador ANY
retorna TRUE
se um de um par de comparação (scalar_expression
, vi) avalia para TRUE
; caso contrário, retorna FALSE
.
Por exemplo, a consulta a seguir encontra os produtos cujos preços de lista são maiores ou iguais ao preço de lista médio de qualquer marca de produto .
Para cada marca, a subconsulta encontra o preço máximo de tabela. A consulta externa usa esses preços máximos e determina qual preço de tabela de produto individual é maior ou igual ao preço de tabela máximo de qualquer marca.
A subconsulta do SQL Server é usada com o operador ALL
O ALL
operador tem a mesma sintaxe que o operador ANY
:
Code language: SQL (Structured Query Language) (sql)
O operador ALL
retorna TRUE
se todos os pares de comparação (scalar_expression
, vi) avaliarem TRUE
; caso contrário, retorna FALSE
.
A consulta a seguir encontra os produtos cujo preço de lista é maior ou igual ao preço de lista médio retornado pela subconsulta:
A subconsulta do SQL Server é usada com EXISTS ou NÃO EXISTS
O seguinte ilustra a sintaxe de uma subconsulta introduzida com o operador EXISTS
:
Code language: SQL (Structured Query Language) (sql)
O operador EXISTS
retorna TRUE
se a subconsulta retornar resultados; caso contrário, retorna FALSE
.
Por outro lado, NOT EXISTS
é o oposto de EXISTS
operador.
A consulta a seguir encontra os clientes que compraram produtos em 2017:
Se você usar NOT EXISTS
em vez de EXISTS
, você pode encontrar os clientes que não compraram nenhum produto em 2017.
Subconsulta do SQL Server na cláusula FROM
Suponha que você queira encontrar a média da soma dos pedidos de toda a equipe de vendas. Para fazer isso, você pode primeiro encontrar o número de pedidos por equipes:
Então, você pode aplicar a função AVG()
a este conjunto de resultados. Como uma consulta retorna um conjunto de resultados que se parece com uma tabela virtual, você pode colocar a consulta inteira na cláusula FROM
de outra consulta como esta:
A consulta que você coloca no FROM
deve ter um alias de tabela. Neste exemplo, usamos o t como o alias da tabela para a subconsulta. Para chegar ao resultado final, o SQL Server realiza as seguintes etapas:
- Execute a subconsulta na cláusula
FROM
. - Use o resultado da subconsulta e execute a consulta externa.
Neste tutorial, você aprendeu sobre o conceito de subconsulta do SQL Server e como usar vários tipos de subconsulta para consultar dados.