FC ConcursosFC Concursos

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?

  1. SELECT F.NOME

    FROM FILME F, GRADE G

    WHERE F.CODIGO=G.COD_FILME

    GROUP BY F.NOME

    HAVING COUNT(F.NOME)=0

  2. SELECT NOME

    FROM FILME

    MINUS

    SELECT F.NOME

    FROM FILME F, GRADE G

    WHERE F.CODIGO=G.COD_FILME

  3. SELECT DISTINCT F.NOME

    FROM FILME F

    LEFT JOIN GRADE G ON F.CODIGO=G.COD_FILME

    WHERE G.DIA=NULL AND HORA=NULL

  4. SELECT F.NOME

    FROM FILME F, GRADE G

    WHERE F.CODIGO=G.COD_FILME

    INTERSECT

    SELECT NOME

    FROM FILME

  5. 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

Continue aprendendo