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?
- 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'
- 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
- 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'
- 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'
- 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