HAVING

HAVING pode ser considerado o “WHERE” do group by.

Na clausua HAVING podemos informar as limitações de uma query, inclusive com funções de grupo.

Vamos imaginar a seguinte query:

SELECT TABLESPACE_NAME, MAX(SAMPLE_SIZE)
  FROM ALL_TABLES
 GROUP BY TABLESPACE_NAME

Nela buscamos o maior SAMPLE_SIZE de cada TABLE_SPACE cadastrado na tabela ALL_TABLES.

Agora imagine se quisessemos apenas os valores para o tablespace SYSAUX?
Poderia ser feito, usando HAVING, da seguinte maneira:

SELECT TABLESPACE_NAME, MAX(SAMPLE_SIZE)
  FROM ALL_TABLES
 GROUP BY TABLESPACE_NAME
HAVING TABLESPACE_NAME = 'SYSAUX'

Parecido com WHERE, não?

Agora vamos perguntar aqueles registros que tenham ou SAMPLE_SIZE maior que 1000 ou TABLE_SPACE igual a SYSAUX:

SELECT TABLESPACE_NAME, MAX(SAMPLE_SIZE)
  FROM ALL_TABLES
 GROUP BY TABLESPACE_NAME
HAVING TABLESPACE_NAME = 'SYSAUX' OR MAX(SAMPLE_SIZE) > 1000

Vale lembrar que o HAVING sempre precede o ORDER BY.

Deixe uma resposta