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

arrow_back Aula 13 - Linguagem SQL – Subconsultas

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 resposta do sistema SGBD a essa pesquisa é ilustrada na Figura 4.

Tela do MySQL após o comando SELECT para determinar o nome dos produtos vendidos.

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.

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.

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.

Tela do MySQL após diversos comandos SELECT para listar o nome dos produtos vendidos.

Versão 5.3 - Todos os Direitos reservados