SUBCONSULTA
SQL
SUBCONSULTA SQL
SUBCONSULTAS
Resumo : neste tutorial, você aprenderá sobre a subconsulta SQL que é uma
consulta regular aninhada dentro de outra consulta para formar uma consulta
complexa.
Introdução à subconsulta SQL
Uma subconsulta é uma SELECT instrução regular aninhada dentro de outra
consulta, como a instrução SELECT , UPDATE ou DELETE . A imagem a seguir
ilustra o conceito de subconsulta:
SELECT
id, nome, sobrenome
FROM
tabelaA
WHERE CONSULTA EXTERNA
id IN (
SELECT DISTINCT
reportSTO
FROM
tabelaA);
SUBQUERY
Uma subconsulta também é conhecida como seleção interna ou consulta
interna, enquanto a consulta que contém a subconsulta é chamada de seleção
externa ou consulta externa.
Na imagem acima, a subconsulta retorna um conjunto de resultados que
consiste em três linhas.
SELECT DISTINCT
reportsto
FROM
employees
Este conjunto de resultados é buscado no operador IN da consulta externa. A
consulta pode ser traduzida como:
SELECT
employeeid, firstname, lastname
FROM
employees
WHERE
employeeid IN (5 , 3, null);
2
SUBCONSULTA SQL
Ele retorna todos os gerentes da employees tabela.
Neste exemplo, o resultado da subconsulta é usado pela consulta externa. Os
mecanismos de banco de dados executam a consulta inteira duas vezes, uma para a
subconsulta e outra para a consulta externa.
Uma subconsulta também pode ser aninhada dentro de outra subconsulta. O
número de níveis de aninhamento depende da implementação de um produto de
banco de dados específico. Por exemplo, o Microsoft SQL Server oferece suporte a
até 32 níveis.
Exemplos de subconsulta SQL
Nos exemplos a seguir, usaremos as seguintes tabelas no banco de dados de
amostra :
clientes - armazena dados cadastrais do cliente.
produtos - armazena dados mestre dos produtos.
pedidos - armazena os dados do cabeçalho do pedido, incluindo o cliente que
fez as compras.
detalhes do pedido - armazena dados de itens de linha do pedido.
Uma subconsulta pode retornar uma ou mais linhas. Quando a subconsulta
retorna uma única linha, você pode usar o operador de comparação, como =,>, <,>
3
SUBCONSULTA SQL
=, <= e <> na consulta externa para comparar o valor com o valor retornado pela
subconsulta.
Por exemplo, a consulta a seguir seleciona todos os clientes que localizam a
mesma cidade que o ID do cliente BSBEV usando o operador diferente (<>):
SELECT
customerid, companyname, city
FROM
customers
WHERE
customerid <> 'BSBEV'
AND city = (SELECT
city
FROM
customers
WHERE
customerid = 'BSBEV')
Primeiro, a subconsulta retorna a cidade onde o cliente BSBEV localiza, que é
Londres. Em seguida, a cidade de Londres é usada para fornecer a consulta externa
para localizar todos os clientes que localizam na cidade de Londres.
Subconsulta SQL com exemplos de operadores IN e NOT IN
Caso a subconsulta retorne um conjunto de resultados que contém várias
linhas, você pode usar o operador IN ou NOT IN na consulta externa para verificar se
o valor está no conjunto de valores retornado pela subconsulta.
Por exemplo, a consulta a seguir seleciona todos os pedidos de clientes nos
EUA. A subconsulta seleciona todos os IDs de cliente nos EUA, e este conjunto de IDs
é usado na consulta externa para selecionar pedidos:
SELECT
orderid, customerid, shipname
FROM
orders
WHERE
customerid IN (
SELECT
customerid
FROM
customers
WHERE
country = 'USA');
4
SUBCONSULTA SQL
Você também pode usar o NOT IN operador para consultar todos os pedidos
que estão fora dos EUA como a seguinte consulta:
SELECT
orderid, customerid, shipname
FROM
orders
WHERE
customerid NOT IN (
SELECT
customerid
FROM
customerS
WHERE
country = 'USA')
Subconsulta SQL com o exemplo de instrução UPDATE
Uma subconsulta pode ser aninhada dentro de outras instruções,
como instruções UPDATE e DELETE , em vez da SELECTinstrução.
Por exemplo, a seguinte declaração aumenta o preço unitário dos produtos
fornecidos pelo vendedor 15 em 5%:
UPDATE products
SET
unitprice = unitprice * 1.05
WHERE
productid IN (
SELECT
productid
5
SUBCONSULTA SQL
FROM
suppliers
WHERE
supplierid = 15);
A subconsulta seleciona todos os IDs de produtos fornecidos pelo fornecedor
15. O conjunto de IDs é então buscado na UDPATE instrução para atualizar o preço
unitário.
Subconsulta SQL como um exemplo de expressão
Uma subconsulta pode ser usada para substituir uma expressão em instruções
SQL. Por exemplo, a consulta a seguir retorna os preços de todas as bebidas, o preço
médio do produto e a diferença entre o preço unitário e o preço médio.
SELECT
productid, productname,
(SELECT
AVG(unitprice)
FROM
products) AS 'average price',
(unitprice - (
SELECT
AVG(unitprice)
FROM
products)) AS diff
FROM
products
WHERE
categoryid = 1
Subconsulta SQL com operadores EXISTS e NOT EXISTS
Uma subconsulta pode ser usada para testar a existência de linhas ao combinar
com EXISTS e NOT EXISTSoperador. Confira o tutorial do operador SQL EXISTS para
aprender como usar o opeartor EXISTS com subconsultas.
6
SUBCONSULTA SQL
Subconsulta SQL correlacionada
A subconsulta que vimos até agora pode ser executada de forma
independente. Existe outro tipo de subconsulta que não pode ser executada
independentemente, chamada de subconsulta corralted. Abordaremos a subconsulta
correlacionada no próximo tutorial.
Neste tutorial, apresentamos a subconsulta SQL e mostramos como escrever
consultas que contêm subconsultas.