FC ConcursosFC Concursos

Questão FC546285

CREATE TABLE empresas (id_empresa INT PRIMARY KEY, nome_empresa VARCHAR(100), cnpj VARCHAR(18)); CREATE TABLE auditorias (id_auditoria INT PRIMARY KEY, id_empresa INT, data_auditor

Linguagem SQL

CEBRASPE (CESPE) · 2025

CREATE TABLE empresas (id_empresa INT PRIMARY KEY, nome_empresa VARCHAR(100), cnpj VARCHAR(18));

CREATE TABLE auditorias (id_auditoria INT PRIMARY KEY, id_empresa INT, data_auditoria DATE, FOREIGN KEY (id_empresa) REFERENCES empresas(id_empresa));

 

A partir das tabelas precedentes, referentes a empresas em que foram realizadas auditorias, assinale a opção em que a consulta SQL apresentada retorna corretamente a lista de empresas que foram objeto de nenhuma ou de apenas uma auditoria no ano de 2025.

  1. SELECT e.id_empresa, e.nome_empresa

    FROM empresas e LEFT JOIN auditorias a

    ON e.id_empresa = a.id_empresa

    WHERE a.data_auditoria >= '2025-01-01'

    AND a.data_auditoria <= '2025-12-31'

    GROUP BY e.id_empresa, e.nome_empresa

    HAVING COUNT(*) <= 1

  2. SELECT e.id_empresa, e.nome_empresa

    FROM empresas e LEFT JOIN auditorias a

    ON e.id_empresa = a.id_empresa

    AND a.data_auditoria BETWEEN '2025-01-01' AND

    '2025-12-31'

    GROUP BY 1, 2

    HAVING COUNT(a.id_auditoria) <= 1

  3. SELECT e.id_empresa, e.nome_empresa

    FROM empresas e INNER JOIN auditorias a

    ON e.id_empresa = a.id_empresa

    AND a.data_auditoria BETWEEN '2025-01-01' AND

    '2025-12-31'

    GROUP BY e.id_empresa, e.nome_empresa

    HAVING COUNT(*) <= 1

  4. SELECT e.id_empresa, e.nome_empresa

    FROM empresas e LEFT JOIN auditorias a

    ON e.id_empresa = a.id_empresa

    GROUP BY e.id_empresa, e.nome_empresa

    HAVING COUNT(*) <= 1

  5. SELECT e.id_empresa, e.nome_empresa

    FROM empresas e LEFT JOIN auditorias a ON

    e.id_empresa = a.id_empresa

    WHERE a.data_auditoria BETWEEN '2025-01-01'

    AND '2025-12-31'

    GROUP BY e.id_empresa, e.nome_empresa

    HAVING COUNT(*) <= 1

Mostrar resposta e comentário

Gabarito

B

Comentário do professor

A consulta usa LEFT JOIN com a restrição de data na cláusula ON, o que faz com que todas as empresas permaneçam na junção mesmo quando não há auditorias em 2025 (os campos de auditoria ficam NULL nesses casos). A condição BETWEEN '2025-01-01' AND '2025-12-31' limita as linhas de auditoria consideradas ao ano de 2025.

Em seguida agrupa por empresa (GROUP BY 1, 2) e usa HAVING COUNT(a.id_auditoria) \( \le 1 \). Como COUNT ignora valores NULL, empresas sem auditoria retornam 0 e as com uma única auditoria retornam 1, atendendo à condição. Se a restrição de data estivesse em WHERE, as empresas sem auditoria em 2025 seriam filtradas, o que seria incorreto.

Portanto, a consulta retorna corretamente id e nome das empresas com nenhuma ou até uma auditoria em 2025.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo