Cursos / Informática para Internet / Banco de dados / Aula

arrow_back Aula 13 - Linguagem SQL – Subconsultas

Subconsulta correlacionada e subconsulta não correlacionada

No exemplo anterior, que lista todos os nomes dos produtos e quantidade de itens vendidos, vimos que a consulta interna necessita da informação sobre o atributo prod_codigo da tabela produtos para ser executada, que está disponível para acesso a partir da consulta externa. Sendo assim, a subconsulta não pode ser executada como uma consulta independente. A consulta externa tem que ser executada antes para sabermos qual é o valor de prod_codigo. Quando isso ocorre, dizemos que a subconsulta é correlacionada.

Subconsulta correlacionada é quando a consulta interna depende dos valores retornados pela consulta externa para ser processada. Na subconsulta não correlacionada, a consulta interna funciona sozinha, não necessitando de nenhuma informação da consulta externa, podendo ser executada como uma consulta independente.

Para entendermos melhor a diferença entre subconsulta correlacionada e subconsulta não correlacionada, vamos analisar os seguintes exemplos. Examine com cuidado e não deixe que nenhuma dúvida fique sem ser esclarecida.

1º exemplo

Subconsulta correlacionada

Pesquisar o nome e o total de produtos comprados por cada cliente.

Nesse exemplo, a subconsulta necessita, para ser executada, da informação de qual é o código do cliente, que será informada pela consulta externa a cada linha que a consulta externa processe. O resultado dessa pesquisa é ilustrado na Figura 8.

 

2º exemplo

Subconsulta não correlacionada

Pesquisar o nome do cliente com o atributo cli_codigo=1 e os produtos por ele comprados.

Nesse exemplo, tem-se uma junção de conexões e subconsulta não correlacionada em uma única consulta. A subconsulta não depende de nenhuma informação da consulta externa para ser executada, trabalhando apenas com as informações provenientes da tabela compras, sendo, portanto, uma subconsulta não correlacionada. A consulta externa realiza uma pesquisa empregando conexão cartesiana. O resultado dessa pesquisa é ilustrado na Figura 8. Observe que as linhas listadas correspondem ao produto cartesiano entre as tabelas clientes e produtos que possuem o código do produto pertencente ao conjunto retornado pela subconsulta.

Tela do MySQL após os comandos SELECTs dos exemplos 1 e 2.

Versão 5.3 - Todos os Direitos reservados