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.

AخA
1
mysql> SELECT cli_nome,
2
    (SELECT SUM(comp_total)
3
    FROM compras
4
    WHERE cli_codigo= comp_codcliente) AS itenscomprados
5
    FROM clientes;

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.

4
1
mysql> SELECT cli_nome, prod_nome 
2
    FROM clientes, produtos 
3
    WHERE prod_codigo IN (SELECT comp_codproduto FROM compras
4
    WHERE comp_codcliente=1) and cli_codigo=1;

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.

Figura 08 - Tela do MySQL após os comandos SELECTs dos exemplos 1 e 2.
Tela do MySQL após os comandos SELECTs dos exemplos 1 e 2.
play_circle_filled
Vídeo 03 - Subconsultas como Coluna

Versão 5.3 - Todos os Direitos reservados