Questão FC295912
Qual consulta SQL recupera do banco de dados os nomes dos filmes que não serão exibidos durante o mês corrente?
Linguagem SQL
CESGRANRIO · 2018
Considere as informações a seguir para responder a questão
O esquema relacional abaixo descreve o banco de dados usado por uma operadora de TV a cabo para registrar os filmes que serão exibidos em seus diversos canais durante o mês corrente. Um filme pode ser exibido várias vezes durante o mês, possivelmente em canais e horários distintos. Um canal exibe vários filmes.
CREATE TABLE CANAL (
NUMERO NUMBER(4) NOT NULL,
NOME VARCHAR2(50) NOT NULL,
CONSTRAINT CANAL_PK PRIMARY KEY (NUMERO) )
CREATE TABLE FILME (
CODIGO NUMBER(5) NOT NULL,
NOME VARCHAR2(50) NOT NULL,
DURACAO NUMBER(3) NOT NULL,
CONSTRAINT FILME_PK PRIMARY KEY (CODIGO) )
CREATE TABLE GRADE (
NUM_CH NUMBER(4) NOT NULL,
COD_FILME NUMBER(5) NOT NULL,
DIA NUMBER(2) NOT NULL,
HORA NUMBER(2) NOT NULL,
CONSTRAINT GRADE_PK PRIMARY KEY (NUM_CH, COD_FILME, DIA, HORA),
CONSTRAINT GRADE_FK1 FOREIGN KEY (NUM_CH)
REFERENCES CANAL (NUMERO),
CONSTRAINT GRADE_FK2 FOREIGN KEY (COD_FILME)
REFERENCES FILME (CODIGO) )
Qual consulta SQL recupera do banco de dados os nomes dos filmes que não serão exibidos durante o mês corrente?
- SELECT F.NOME
FROM FILME F, GRADE G
WHERE F.CODIGO=G.COD_FILME
GROUP BY F.NOME
HAVING COUNT(F.NOME)=0
- SELECT NOME
FROM FILME
MINUS
SELECT F.NOME
FROM FILME F, GRADE G
WHERE F.CODIGO=G.COD_FILME
- SELECT DISTINCT F.NOME
FROM FILME F
LEFT JOIN GRADE G ON F.CODIGO=G.COD_FILME
WHERE G.DIA=NULL AND HORA=NULL
- SELECT F.NOME
FROM FILME F, GRADE G
WHERE F.CODIGO=G.COD_FILME
INTERSECT
SELECT NOME
FROM FILME
- SELECT F.NOME
FROM FILME F, GRADE G
WHERE F.CODIGO=G.COD_FILME
MINUS
SELECT NOME
FROM FILME
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
A consulta utiliza o operador MINUS para efetuar a diferença entre dois conjuntos de nomes: o de todos os filmes e o dos filmes que aparecem na grade.
O primeiro bloco, SELECT NOME FROM FILME, retorna o conjunto completo de títulos registrados na tabela FILME.
O segundo bloco, SELECT F.NOME FROM FILME F, GRADE G WHERE F.CODIGO=G.COD_FILME, produz os títulos que têm pelo menos uma ocorrência na tabela GRADE (a junção relaciona cada filme às suas exibições).
O operador MINUS realiza a diferença de conjuntos: ele retorna os elementos do primeiro conjunto que não estão no segundo, ou seja, aplica \(A \setminus B\).
Assim, o resultado final é a lista dos nomes dos filmes que não foram escalados na grade do mês corrente. Note que MINUS trata conjuntos, removendo duplicatas no resultado.
Conteúdo do catálogo FC Concursos · Atualizado em