Questão FC295906
Qual consulta irá fornecer o relatório que o gerente de produção deseja?
Linguagem SQL
CESGRANRIO · 2018
Uma empresa que comercializa álbuns de figurinhas (cromos) possui um banco de dados para controlar a fabricação de cromos. O modelo conceitual desse banco de dados é exibido na Figura a seguir.

O modelo conceitual acima deu origem às seguintes Tabelas:
CREATE TABLE ALBUM (
COD CHAR(5) NOT NULL,
NOME VARCHAR2(4000) NOT NULL,
CONSTRAINT ALBUM_PK PRIMARY KEY (COD))
CREATE TABLE CROMO (
COD NUMBER(5) NOT NULL,
NUMERO NUMBER(4) NOT NULL,
DESCRICAO VARCHAR2(500) NOT NULL,
COD_ALBUM CHAR(5) NOT NULL,
CONSTRAINT CROMO_PK PRIMARY KEY (COD),
CONSTRAINT CROMO_FK FOREIGN KEY (COD_ALBUM)
REFERENCES ALBUM (COD))
CREATE TABLE FABRICACAO (
NUM_FAB NUMBER(5) NOT NULL,
QUANTIDADE NUMBER(5) NOT NULL,
DATA DATE NOT NULL,
COD_CROMO NUMBER(5) NOT NULL,
CONSTRAINT FABRICACAO_PK PRIMARY KEY (NUM_FAB),
CONSTRAINT FABRICACAO_FK FOREIGN KEY (COD_CROMO)
REFERENCES CROMO (COD))
O gerente de produção dessa empresa deseja obter um relatório que exiba, para cada álbum comercializado, o nome do álbum, o número de cada um de seus cromos e o somatório da quantidade fabricada de cada um deles.
Qual consulta irá fornecer o relatório que o gerente de produção deseja?
- SELECT A.NOME, B.NUMERO, COALESCE (SUM (C.QUANTIDADE),0) “QTD FABR” FROM
ALBUM A, CROMO B
LEFT JOIN FABRICACAO C ON B.COD = C.COD_CROMO
GROUP BY A.NOME, B.NUMERO
ORDER BY A.NOME, B.NUMERO
- SELECT A.NOME, B.NUMERO, COALESCE (SUM (C.QUANTIDADE),0) “QTD FABR” FROM
ALBUM A INNER JOIN CROMO B ON A.COD = B.COD_ALBUM
LEFT JOIN FABRICACAO C ON B.COD = C.COD_CROMO
GROUP BY A.NOME, B.NUMERO
ORDER BY A.NOME, B.NUMERO
- SELECT A.NOME, B.NUMERO, COALESCE (SUM (C.QUANTIDADE),0) “QTD FABR” FROM
ALBUM A, CROMO B
RIGHT JOIN FABRICACAO C ON B.COD = C.COD_CROMO
WHERE A.COD = B.COD_ALBUM
GROUP BY A.NOME, B.NUMERO
ORDER BY A.NOME, B.NUMERO
- SELECT A.NOME, B.NUMERO, COALESCE (SUM (C.QUANTIDADE),0) “QTD FABR” FROM
ALBUM A, CROMO B
FULL OUTER JOIN FABRICACAO C ON B.COD = C.COD_CROMO
GROUP BY A.NOME, B.NUMERO
ORDER BY A.NOME, B.NUMERO
- SELECT A.NOME, B.NUMERO, COALESCE (SUM (C.QUANTIDADE),0) “QTD FABR” FROM
ALBUM A, CROMO B, FABRICACAO C
WHERE A.COD = B.COD_ALBUM AND B.COD = C.COD_CROMO
GROUP BY A.NOME, B.NUMERO
ORDER BY A.NOME, B.NUMERO
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
A consulta seleciona A.NOME, B.NUMERO e o somatório das quantidades fabricadas por cromo, usando a agregação \( \sum \text{C.QUANTIDADE} \). A função COALESCE transforma resultado NULL em 0, cobrindo cromos sem fabricação.
O INNER JOIN entre ALBUM e CROMO garante que cada cromo pertença a um álbum (A.COD = B.COD_ALBUM). Em seguida, o LEFT JOIN de CROMO para FABRICACAO inclui cromos mesmo quando não existem registros de fabricação (B.COD = C.COD_CROMO).
Como há agregação, o GROUP BY em A.NOME e B.NUMERO agrupa os registros por álbum e por figurinha, produzindo uma linha por par (álbum, número) com o total \( \sum \).
Por fim, o ORDER BY organiza a saída por nome do álbum e número do cromo, entregando o relatório no formato solicitado.
Conteúdo do catálogo FC Concursos · Atualizado em