Banco de dadosSql (3)
- (CESGRANRIO 2022)
O controle diário da utilização de passes de metrô em uma cidade é feito por programas que utilizam um banco de dados composto pelas seguintes tabelas:
CREATE TABLE PASSE ( NUM INTEGER NOT NULL, DATA_EXP DATE NOT NULL, NUM_VIAGENS INTEGER NOT NULL, PRIMARY KEY (NUM))
CREATE TABLE REG_VIAGEM ( NUM INTEGER NOT NULL, NUM_ROLETA INTEGER NOT NULL, DATA_VIAGEM DATE NOT NULL, FOREIGN KEY (NUM) REFERENCES PASSE (NUM))
A tabela PASSE contém uma linha para cada passe vendido pela empresa que administra o metrô. A coluna DATA_EXP informa a data de emissão do passe, e a coluna NUM_VIAGENS informa o número de viagens em que o passe poderá ser usado (número máximo de viagens). Este número não sofre alteração ao longo do tempo.
A tabela REG_VIAGEM contém uma linha para cada viagem em que o passe foi usado. A coluna NUM_ROLETA informa a roleta na qual o passe foi inserido, e a coluna DATA_VIAGEM informa a data em que o usuário inseriu o passe na roleta.
Qual consulta SQL permite obter os números dos passes que nunca foram usados, juntamente com os números dos passes que já esgotaram o número de viagens realizadas?
A)
SELECT A.NUM
FROM PASSE A
WHERE A.NUM_VIAGENS = (SELECT COUNT(*) FROM REG_VIAGEM
WHERE NUM = A.NUM) OR A.NUM NOT IN (SELECT NUM FROM REG_VIAGEM)
B)
SELECT DISTINCT (A.NUM)
FROM PASSE A
LEFT JOIN REG_VIAGEM B
ON A.NUM=B.NUM OR A.NUM NOT IN (SELECT NUM FROM REG_VIAGEM)
C)
SELECT A.NUM
FROM PASSE A, REG_VIAGEM B
WHERE A.NUM_VIAGENS = (SELECT COUNT(*) FROM REG_VIAGEM
WHERE NUM = A.NUM) OR A.NUM != B.NUM
D)
SELECT A.NUM
FROM PASSE A
INTERSECT
SELECT A.NUM
FROM PASSE A
WHERE A.NUM NOT IN (SELECT NUM FROM REG_VIAGEM)
E)
SELECT NUM
FROM PASSE
EXCEPT
SELECT NUM
FROM REG_VIAGEM
Próximo:
EXERCÍCIOS - Exercício 124
Vamos para o Anterior: Exercício 122
Tente Este: Exercício 169
Primeiro: Exercício 1
VOLTAR ao índice: Banco de dados