Banco de Dados
Rebeca Barros
Subqueries
MySQL
Subqueries
▪ Uma subquery (ou subconsulta) é uma consulta
dentro de outra consulta SQL.
▪ Uma subquery sempre está dentro de
parênteses e usualmente é executada antes da
consulta onde ela está contida.
3
Subqueries
▪ Como qualquer outra consulta SQL, uma
subquery pode retornar:
▫ Uma única linha com única coluna;
▫ Múltiplas linhas com uma única coluna;
▫ Múltiplas linhas e múltiplas colunas.
4
Subqueries
▪ Além disso, subqueries também podem ser
divididas em:
▫ Não correlatas - quando não dependem de
colunas da consulta base;
▫ Correlatas - quando referenciam colunas da
consulta base
5
Subquery de uma única linha/coluna
6
Subquery de uma única linha/coluna
7
Subquery de uma única linha/coluna
/* consulte o id da gravadora e o menor preço de cd de todas as
gravadoras em que o menor preço de cd seja maior que o preço
do cd de id 6 */
8
Subquery de uma única linha/coluna
/* consultar o id da gravadora e o preço máximo de cd onde esse
preço máximo seja maior que a média de preço da gravadora*/
9
O comando EXISTS
▪ Usado quando você precisa identificar que um
relacionamento existe sem precisar saber a
quantidade de linhas.
▪ Se a subquery conter uma ou mais linhas, o
resultado é mostrado, se não, não é mostrado.
10
O comando EXISTS
11
Subquery de múltiplas linhas
▪ Em subqueries que retornam mais de uma linha
não é possível utilizar operadores simples (=,
<>, > e <).
▪ Deve-se utilizar um operador de grupo que
permita realizar a comparação com um conjunto
e não com um único valor.
12
Subquery de múltiplas linhas
▪ Os operadores são:
▫ IN (e NOT IN): checa se o valor está dentro de um
conjunto de valores
▫ ANY/ALL: permite comparações entre um valor
único com cada valor dentro do conjunto. A
diferença é que o ANY retorna true assim que
encontrar uma comparação verdadeira, enquanto
que o ALL só retorna se a comparação for
13 verdadeira para todos os membros do conjunto.
Subquery de múltiplas linhas
14
Subquery de múltiplas linhas
/* consultar qual cd tem preço inferior a qualquer outro da gravadora 2
mas que não seja da gravadora 2 */
15
Subquery de múltiplas linhas
/* consultar quais cds tem preço de venda menor que a média
de preço de todas as gravadoras */
16
Subquery de múltiplas linhas
Importante:
▪ Ao utilizar not in ou <> all para comparar um
valor a um conjunto, é importante garantir que o
conjunto de valores não contenha um valor null
pois qualquer comparação com null retorna um
valor desconhecido.
17
Subquery de múltiplas linhas/colunas
18
Subquery como fontes de dados
/* consultar nome do cd, preço de venda e preço médio da gravadora
quando o preço do cd for maior que a média da sua gravadora */
19
Subquery na manipulação dados
20
Subquery na manipulação dados
21
Referências
▪ Beaulieu, A. (2009). Learning SQL: Master SQL Fundamentals. "
O'Reilly Media, Inc.".
▪ de OLIVEIRA, C. H. P. (2002). SQL: curso prático. Novatec.
▪ Documentação oficial do MySQL. Disponível em:
[Link]
▪ Curso Completo de MySQL (Bóson Treinamentos). Disponível
em: [Link]
22
completo-de-mysql/