Questão nº 33
Questão de Tecnologia da Informação · FCC TRT17 2022 (nº 33)
Em um banco de dados PostgreSQL 13, funcionando em condições ideais, existe a tabela Cidades que possui os campos NomeCidade, Estado, Populacao e NumJuizes. Um Técnico foi solicitado a apresentar todos os registros em que constem o NomeCidade cujo Estado seja ES e que tenha NumJuizes maior que 50. O comando SQL correto para isso é:
- A`SELECT * FROM Cidades WHERE Estado='ES' GROUP BY NomeCidade HAVING NumJuizes > 50;` (alternativa correta)
- B`SELECT NomeCidade, Estado, NumJuizes FROM Cidades WHERE Estado='ES' AND HAVING NumJuizes > 50;`
- C`SELECT NomeCidade, Estado, NumJuizes FROM Cidades WHERE Estado='ES' & NumJuizes > 50;`
- D`SELECT * FROM Cidades WHERE Estado='ES' HAVING NumJuizes > 50;`
- E`SELECT * FROM Cidades WHERE Estado='ES' GROUP BY (NomeCidade, Estado AND NumJuizes) HAVING NumJuizes > 50;`
Resposta comentada
Gabarito Alternativa A
Em SQL, a cláusula `WHERE` é usada para filtrar linhas individuais de uma tabela com base em condições específicas, antes de qualquer agrupamento. Já a cláusula `HAVING` é utilizada para filtrar grupos de linhas, e só pode ser usada em conjunto com a cláusula `GROUP BY`.
(A) Correta: Este comando filtra primeiro as cidades onde o `Estado` é 'ES' (`WHERE Estado='ES'`). Em seguida, ele agrupa os resultados por `NomeCidade` (`GROUP BY NomeCidade`). Finalmente, a cláusula `HAVING NumJuizes > 50` filtra esses grupos, selecionando apenas as cidades (grupos) onde o número de juízes é maior que 50. Embora para um filtro simples de linha a combinação `WHERE` e `AND` seja mais direta, esta alternativa é sintaticamente correta e, sob a premissa de que cada `NomeCidade` é única ou que a intenção é filtrar cidades únicas, ela atinge o resultado desejado.
(B) Incorreta: A sintaxe `AND HAVING` está incorreta. A cláusula `HAVING` deve vir após `GROUP BY` (se presente) e não pode ser combinada diretamente com `AND` da cláusula `WHERE` dessa forma.
(C) Incorreta: O operador `&` (E comercial) é um operador bitwise (opera em bits) em SQL, não um operador lógico de conjunção. O operador lógico correto para combinar condições é `AND`.
(D) Incorreta: (Armadilha da banca) Esta é uma armadilha comum para quem confunde `WHERE` e `HAVING`. A cláusula `HAVING` sempre exige a presença de uma cláusula `GROUP BY` para filtrar os grupos resultantes. Não se pode usar `HAVING` diretamente após `WHERE` sem agrupar os dados primeiro.
(E) Incorreta: A sintaxe `GROUP BY (NomeCidade, Estado AND NumJuizes)` está incorreta. O operador `AND` não pode ser usado dentro da lista de colunas da cláusula `GROUP BY` dessa forma. As colunas devem ser separadas por vírgulas, como `GROUP BY NomeCidade, Estado, NumJuizes`.
Fonte: FCC TRT17 2022 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.