Cursos / Redes de Computadores / Conceitos de Banco de Dados / Aula

arrow_back Aula 07 - Linguagem SQL - Subconsultas e Visões

Subconsultas - pt.2

Esses são os códigos dos produtos que foram vendidos, mas essa resposta não fornece muita informação acerca de quais são esses produtos. Então, uma nova pesquisa é necessária para identificar quais são os nomes dos produtos que possuem código 2, 3 e 4. Para tanto, podemos utilizar o seguinte comando.

AخA
1
mysql> SELECT prod_nome 
2
    FROM produtos
3
    WHERE prod_codigo IN (2,3,4);

A resposta do sistema SGBD a essa pesquisa é ilustrada na Figura 4.

Figura 04 - Tela do MySQL após o comando SELECT para determinar o nome dos produtos vendidos.
Tela do <span class='italico'>My</span>SQL após o comando SELECT para determinar o nome dos produtos vendidos.
Fonte: MySQL Server 5.7 Command Line Client

Será que não é possível combinar essas duas consultas para que não se tenha de escrever e solicitar duas consultas separadas ao banco de dados? A resposta a essa pergunta é a subconsulta, o assunto que estudaremos agora.

Subconsulta é uma instrução SELECT na forma (SELECT... FROM... WHERE...) adicionada dentro de outra instrução SELECT. Podendo também ser utilizada nas instruções INSERT, DELETE e UPDATE como parâmetro da cláusula WHERE.

Vamos combinar as duas consultas realizadas anteriormente ao banco de dados sistvendas em única consulta usando uma subconsulta? A consulta que retorna os códigos dos produtos que foram vendidos será a consulta interna ou subconsulta. E a consulta que identifica os nomes dos produtos vendidos será a consulta externa. Para ver como isso funciona, analise o seguinte comando, que realiza uma consulta com a subconsulta, descrito no quadro a seguir.

3
1
mysql> SELECT prod_nome
2
    FROM produtos
3
    WHERE prod_codigo IN (SELECT comp_codproduto FROM compras);

O que a instrução SELECT mais interna faz é retornar os códigos dos produtos que já foram vendidos. Esses códigos são utilizados pela expressão da consulta mais externa para filtrar os nomes dos produtos que devem ser visualizados.

Observe no exemplo anterior alguns pontos importantes. Em primeiro lugar, a subconsulta está entre parênteses “()”. Sempre devemos colocar uma subconsulta entre parênteses, pois é assim que o SGBD consegue fazer sua identificação. Segundo, a subconsulta não tem seu próprio sinal de ponto e vírgula. O sinal de ponto e vírgula é utilizado somente ao final de uma consulta completa (consulta externa + consulta interna). Terceiro, a subconsulta em questão está retornando uma lista de valores. Por isso, utilizamos o operador IN, que é um operador de agregação que indica que o sistema está procurando um conjunto de valores, conforme foi visto em aulas anteriores. Se tivéssemos utilizado na cláusula WHERE um operador de comparação, como o sinal de igualdade (=), a subconsulta deve retornar apenas um valor simples.

Uma pergunta que pode surgir nesse momento é se a consulta feita não poderia ser realizada utilizando conexões. A verdade é que uma consulta contendo uma subconsulta não é o único jeito de realizar a pesquisa em questão. Poderíamos ter realizado a mesma consulta utilizando conexão cruzada, conforme é descrito no quadro a seguir.

3
1
mysql> SELECT prod_nome
2
    FROM produtos, compras
3
    WHERE prod_codigo = comp_codproduto GROUP BY prod_nome;

O termo GROUP BY agrupa as linhas com valores iguais de uma determinada coluna, conforme apresentado anteriormente. Observe na Figura 5 que ambas as consultas produzem o mesmo resultado impresso na tela.

Figura 05 - Tela do MySQL após diversos comandos SELECT para listar o nome dos produtos vendidos.
Tela do <span class='italico'>My</span>SQL após diversos comandos SELECT para listar o nome dos produtos vendidos.
Fonte: MySQL Server 5.7 Command Line Client

Versão 5.3 - Todos os Direitos reservados