Uma Non-Correlated Subquery (Subconsulta Não-Correlacionada) é uma subconsulta que é completamente independente da consulta externa. Isso significa que a subconsulta pode ser executada de forma isolada da consulta principal e retorna um conjunto de resultados que não depende dos valores da consulta externa. Ao contrário das subconsultas correlacionadas, as non-correlated subqueries são executadas apenas uma vez e seus resultados são usados pela consulta principal.
As subconsultas não-correlacionadas são executadas antes da consulta principal e o resultado é passado para esta última. Como a subconsulta não depende de nenhuma linha específica da consulta externa, ela é executada uma única vez e o resultado é reutilizado em cada linha da consulta externa, tornando-as mais eficientes em termos de desempenho em comparação com subconsultas correlacionadas.
A estrutura de uma subconsulta não-correlacionada geralmente se parece com isto:
SELECT coluna1, coluna2, ...
FROM tabela_externa
WHERE coluna IN (
SELECT coluna
FROM tabela_interna
WHERE alguma_condicao
);
Aqui, a subconsulta dentro dos parênteses (SELECT coluna FROM tabela_interna WHERE alguma_condicao
) não faz referência a nenhuma coluna da consulta externa.
Imagine que você tem duas tabelas: Produtos
e Categorias
. A tabela Produtos
tem colunas como id_produto
, nome_produto
, preco
, e id_categoria
. A tabela Categorias
tem id_categoria
e nome_categoria
. Queremos encontrar todos os produtos que pertencem à categoria "Eletrônicos".
SELECT nome_produto, preco
FROM Produtos
WHERE id_categoria = (
SELECT id_categoria
FROM Categorias
WHERE nome_categoria = 'Eletrônicos'
);
Explicação:
SELECT id_categoria FROM Categorias WHERE nome_categoria = 'Eletrônicos'
) retorna o id_categoria
da categoria "Eletrônicos".Suponha que temos uma tabela Empregados
com as colunas id_empregado
, nome
, e salario
. Queremos encontrar todos os empregados que ganham mais do que a média salarial de todos os empregados.
SELECT nome, salario
FROM Empregados
WHERE salario > (
SELECT AVG(salario)
FROM Empregados
);
Explicação:
SELECT AVG(salario) FROM Empregados
) calcula a média salarial de todos os empregados.