FC ConcursosFC Concursos

Questão FC295909

Sabe-se que um fornecedor pode vender muitos materiais, e um material pode ser vendido por vários fornecedores. Considerando as Tabelas e as informações dadas, qual consulta exibe

Linguagem SQL

CESGRANRIO · 2018

O banco de dados de uma empresa contém as tabelas a seguir, que são usadas para controlar as compras de materiais de escritório.


CREATE TABLE FORNECEDOR (
    ID_FORN NUMBER(5) NOT NULL,
    NOME VARCHAR2(100) NOT NULL,
    TEL1 CHAR(15) NOT NULL,
    TEL2 CHAR(15),
    TEL3 CHAR(15),
    CONSTRAINT FORNECEDOR_PK PRIMARY KEY (ID_FORN)
)


CREATE TABLE MATERIAL (
    ID_MATER NUMBER(5) NOT NULL,
    DESCR VARCHAR2(100) NOT NULL,
    CONSTRAINT MATERIAL_PK PRIMARY KEY (ID_MATER)
)


CREATE TABLE VENDA (
    ID_F NUMBER(5) NOT NULL,
    ID_M NUMBER(5) NOT NULL,
    DATA DATE NOT NULL,
    PRECO NUMBER(9,2) NOT NULL,
    QTD NUMBER(5) NOT NULL,
    CONSTRAINT VENDA_PK PRIMARY KEY (ID_F,ID_M,DATA.),
    CONSTRAINT VENDA_FK1 FOREIGN KEY (ID_F)
       REFERENCES FORNECEDOR (ID_FORN),
    CONSTRAINT VENDA_FK2 FOREIGN KEY (ID_M)
       REFERENCES MATERIAL (ID_MATER)
)


Sabe-se que um fornecedor pode vender muitos materiais, e um material pode ser vendido por vários fornecedores. Considerando as Tabelas e as informações dadas, qual consulta exibe o número de identificação e o nome dos fornecedores que realizaram pelo menos uma venda entre os dias 05/01/2018 (inclusive.) e 10/01/2018 (inclusiv?

  1. SELECT ID_FORN, NOME      FROM FORNECEDOR F, VENDA V                 WHERE F.ID_FORN=ID_F AND DATA >= '05/01/2018'      INTERSECT      SELECT ID_FORN, NOME      FROM FORNECEDOR F, VENDA V                 WHERE F.ID_FORN=ID_F AND DATA <= '10/01/2018'
  2. SELECT ID_FORN, NOME      FROM FORNECEDOR F                 WHERE (SELECT COUNT(*) FROM VENDA                            WHERE F.ID_FORN=ID_F AND                             DATA BETWEEN '05/01/2018' AND '10/01/2018') > 0
  3. SELECT UNIQUE ID_FORN, OME       FROM FORNECEDOR F LEFT JOIN VENDA V ON F.ID_FORN= V.ID_F                 WHERE DATA >= '05/01/2018' OR DATA <= '10/01/2018'
  4. SELECT ID_FORN, NOME      FROM FORNECEDOR F, VENDA V                 WHERE F.ID_FORN=ID_F AND DATA >= '05/01/2018'     UNION     SELECT ID_FORN, NOME     FROM FORNECEDOR F, VENDA V                WHERE F.ID_FORN=ID_F AND DATA <= '10/01/2018'
  5. SELECT ID_FORN, NOME      FROM FORNECEDOR F      WHERE ID_FORN NOT IN (SELECT ID_F FROM VENDA                                          WHERE DATA < '05/01/2018' OR DATA > '10/01/2018')
Mostrar resposta e comentário

Gabarito

B

Comentário do professor

A consulta seleciona ID e nome dos fornecedores da tabela FORNECEDOR cujo número de vendas no intervalo especificado seja maior que zero.

Isso é obtido por uma subconsulta correlacionada: para cada linha de FORNECEDOR F, a subconsulta conta (com COUNT(*)) as linhas em VENDA que satisfazem F.ID_FORN = ID_F.

A cláusula BETWEEN restringe as vendas ao período de 05/01/2018 a 10/01/2018, sendo inclusiva nos limites, portanto apenas vendas dentro desse intervalo são contadas.

A condição final exige que essa contagem seja \(>0\), ou seja, pelo menos uma venda no período. Assim retornam-se apenas fornecedores com ocorrência de venda entre as datas solicitadas.

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

Continue aprendendo