por Paulo Ribeiro No artigo anterior – Subqueries Parte I – vimos que uma subquery é um comando SELECT que foi "embutido" noutro comando SELECT, UPDATE, DELETE ou dentro de outra subquery. Vimos também que a finalidade da subquery é retornar um conjunto de linhas para a query principal. Subqueries Correlatas Quando uma subquery referencia colunas da query principal, recebe o nome de Subquery Correlata. Diferentemente das subqueries convencionais, a Subquery Correlata será executada tantas vezes quantas forem as linhas de output da query principal, num processo de Nested Loop Join. Exemplos de utilização de Subqueries Correlatas Os exemplos a seguir foram executados no database-exemplo NorthWind tendo por base as tabelas Orders e Order Details. · Subquery Correlata na linha do SELECT: na query a seguir será listado, junto com os dados da header do pedido (=tabela Orders), a totalização de itens (=tabela Order Details). PS: Note a relação de dependência com a query principal no filtro da subquery (... where od.orderId = o.orderId ...) SELECT SELECT (8 row(s) affected) · Subquery Correlata na cáusula HAVING: no batch a seguir o total de vendas/ano é confrontado com um valor previamente armazenado numa tabela de metas de venda (=projecao). Note que a comparação acontece na cláusule HAVING, comparando o totalizador com o resultado da subquery. create table projecao_ ( select vlr_total_vendas from projecao_where ano=year(orderdate) ) · Subquery Correlata no comando UPDATE: a coluna vlr_total, criada na tabela Orders será atualizada a partir da totalização dos itens. alter table orders drop column vlr_total Conclusão Subqueries correlatas agregam versatilidade às queries, permitindo que joins complexos sejam resolvidos com apenas um comando, sem a criação de tabelas temporárias. Um único detalhe: subqueries correlatas muitas vezes podem ser executadas como um join convencional; nesses casos vale a pena olhar o plano de execução dos dois formatos (subquery correlata X join), optando pelo mais eficiente. Bem, essa foi a dica de hoje. Até a próxima!
|
|
|||||||||||||
Todos
os direitos reservados: DevMedia Group |