As subconsultas no PostgreSQL são consultas aninhadas usadas em uma consulta principal para realizar filtragens ou cálculos complexos. Eles permitem que você isole partes de consultas SQL e use resultados intermediários para formular a saída final da consulta.
Uso
As subconsultas são normalmente usadas nas instruções SELECT, INSERT, UPDATE ou DELETE para dividir operações SQL complexas em componentes mais simples e gerenciáveis. Eles são colocados entre parênteses e podem retornar um único valor ou um conjunto de valores a ser usado pela consulta principal.
SELECT column1, column2,...FROM table_name
WHERE column_name operator(SELECT column FROM table WHERE condition);Tecnologia
Nessa sintaxe, a subconsulta é usada em uma cláusula WHERE para filtrar os resultados com base na saída da consulta aninhada.
Exemplos
1. Subconsulta básica na cláusula WHERE
SELECT customer_id, customer_name
FROM customers
WHERE customer_id IN(SELECT customer_id FROM orders WHERE order_date >'2023-01-01');Tecnologia
Este exemplo recupera os clientes que fizeram pedidos após 1º de janeiro de 2023, usando uma subconsulta na cláusula WHERE.
2. Subconsulta na instrução SELECT
SELECT product_id,(SELECTAVG(price)FROM products)AS average_price
FROM products;Tecnologia
Aqui, uma subconsulta calcula o preço médio de todos os produtos e o apresenta junto com o ID de cada produto.
3. Usando subconsulta com EXISTS
SELECT supplier_id, supplier_name
FROM suppliers
WHEREEXISTS(SELECT*FROM products WHERE suppliers.supplier_id = products.supplier_id AND products.stock >0);Tecnologia
Este exemplo verifica se há fornecedores com produtos em estoque usando uma condição EXISTS para filtrar os resultados.
4. Subconsulta na instrução INSERT
INSERTINTOsales_summary(product_id, total_sales)SELECT product_id,SUM(sales_amount)FROM sales
WHERE sale_date >'2023-01-01'GROUPBY product_id;Tecnologia
Este exemplo usa uma subconsulta para agregar dados de vendas e inserir os resultados em uma tabela de resumo.
5. Subconsulta na instrução UPDATE
UPDATE products
SET price = price *1.1WHERE category_id =(SELECT category_id FROM categories WHERE category_name ='Electronics');Tecnologia
Aqui, a subconsulta encontra o ID da categoria para "Eletrônicos" e a consulta principal atualiza os preços desses produtos.
6. Subconsulta na instrução DELETE
DELETEFROM orders
WHERE order_id IN(SELECT order_id FROM order_items WHERE quantity =0);Tecnologia
Esse exemplo exclui pedidos que não têm itens, conforme determinado por uma subconsulta.
7. Exemplo de subconsulta correlacionada
SELECT employee_id, employee_name
FROM employees e
WHEREEXISTS(SELECT1FROM sales s WHERE s.employee_id = e.employee_id AND s.amount >1000);Tecnologia
Uma subconsulta correlacionada faz referência a colunas da consulta externa, aqui verificando se há funcionários com vendas acima de US$ 1.000.
Dicas e práticas recomendadas
Otimize o desempenho. Use as subconsultas com sabedoria; considere a indexação de colunas relevantes ou a reestruturação de consultas para minimizar o tempo de execução.
Use subconsultas para modularidade. Divida consultas complexas em subconsultas para facilitar o gerenciamento e a legibilidade.
Aproveite cuidadosamente as subconsultas correlacionadas. As subconsultas correlacionadas são poderosas, mas podem afetar o desempenho, pois são executadas uma vez por linha na consulta externa.
Considere o uso do site EXISTS para verificações de existência. Geralmente é mais eficiente do que comparar resultados de subconsultas com operadores como IN.
As subconsultas no PostgreSQL são consultas aninhadas usadas em uma consulta principal para realizar filtragens ou cálculos complexos. Eles permitem que você isole partes de consultas SQL e use resultados intermediários para formular a saída final da consulta.
Uso
As subconsultas são normalmente usadas nas instruções
SELECT,INSERT,UPDATEouDELETEpara dividir operações SQL complexas em componentes mais simples e gerenciáveis. Eles são colocados entre parênteses e podem retornar um único valor ou um conjunto de valores a ser usado pela consulta principal.Nessa sintaxe, a subconsulta é usada em uma cláusula
WHEREpara filtrar os resultados com base na saída da consulta aninhada.Exemplos
1. Subconsulta básica na cláusula WHERE
Este exemplo recupera os clientes que fizeram pedidos após 1º de janeiro de 2023, usando uma subconsulta na cláusula
WHERE.2. Subconsulta na instrução SELECT
Aqui, uma subconsulta calcula o preço médio de todos os produtos e o apresenta junto com o ID de cada produto.
3. Usando subconsulta com EXISTS
Este exemplo verifica se há fornecedores com produtos em estoque usando uma condição
EXISTSpara filtrar os resultados.4. Subconsulta na instrução INSERT
Este exemplo usa uma subconsulta para agregar dados de vendas e inserir os resultados em uma tabela de resumo.
5. Subconsulta na instrução UPDATE
Aqui, a subconsulta encontra o ID da categoria para "Eletrônicos" e a consulta principal atualiza os preços desses produtos.
6. Subconsulta na instrução DELETE
Esse exemplo exclui pedidos que não têm itens, conforme determinado por uma subconsulta.
7. Exemplo de subconsulta correlacionada
Uma subconsulta correlacionada faz referência a colunas da consulta externa, aqui verificando se há funcionários com vendas acima de US$ 1.000.
Dicas e práticas recomendadas
EXISTSpara verificações de existência. Geralmente é mais eficiente do que comparar resultados de subconsultas com operadores comoIN.