TÓPICO 7 – USANDO SUBQUERIES

No tópico 7, falarei um pouco sobre subqueries, como e quando usa-las.

1) QUANDO USAR SUBQUERIES:

As subqueries podem resolver os seguintes problemas:

  • Criando tabelas populadas: Uma subquery pode ser usada em um comando CREATE TABLE para criar e já popular uma tabela, técnica essa chamada de CTAS ou CREATE TABLE AS SELECT. Sua sintaxe é:
  • Manipulação de grandes quantidades de dados: Subqueries podem ser incorporadas em comandos de INSERT e UPDATE para mover grandes quantidades de dados, ou alterar grandes quantidades de dados em um único SQL.
  • Definição dinâmica de VIEWs (Cláusula WITH)
  • Definição dinâmica de expressões com subqueries escalares (subqueries que retornam apenas um valor)

2) COMO USAR SUBQUERIES

Existem alguns tipos de subqueries, cada uma com suas vantagens/desvantagens. Abaixo é possível ver os tipos de subqueries bem como alguns exemplos para ajudar a entende-las.

NOTA.01 – Caso a subquery retorne 0 linhas, então o valor retornado pela subquery é NULL

NOTA.02 – É possível ter subqueries no WHERE, HAVING e GROUP BY.

2.1) SINGLE-ROW SUBQUERIES

Subqueries que retornam apenas uma linha, e uma ou varias colunas Ex:

2.2) MULTIPLE-ROW SUBQUERIES

Subqueries que retornam 0, uma ou varias linhas. Ex:

2.3) MULTIPLE-COLUMN SUBQUERIES

Retorna mais de uma coluna para a query pai. Pode retornar uma ou várias linhas. Ex:

2.4) CORRELATED SUBQUERIES:

Especifica colunas que pertencem a tabelas que são referenciadas pela tabela pai. Ex:

3) USANDO O EXISTS

O EXISTS testa a existência de uma linha em uma subquery. Caso nenhuma linha seja encontrada, retorna FALSE. Caso a subquery retorne mais de uma linha, se essa linha “bater” com a linha da query-pai o comando é encerrado, não sendo necessário todas as linhas do EXISTS serem validadas. Mais performático do que o operador IN. Ex:

4) USANDO O WITH

O WITH determina nomes para subqueries (blocos de subqueries). Essa subquery, que foi nomeada é tratada como uma view dinâmica. Isso facilita a leitura e manutenção caso se tenha que trabalhar com muitas subqueries dentro de uma query Ex:

Bem… é isso por enquanto pessoal. Até a próxima.

Keep Querying