Questão FC295887
Qual comando SQL será executado sem produzir erro?
Linguagem SQL
CESGRANRIO · 2023
Uma empresa aérea possui um sistema de informação para registrar as reservas de passagens de seus passageiros nos voos que oferece. O esquema desse banco de dados foi criado com os seguintes comandos SQL:
CREATE TABLE PASSAGEIRO (
CODIGO NUMERIC(5) NOT NULL,
NOME TEXT NOT NULL,
PRIMARY KEY (CODIGO));
CREATE TABLE VOO (
NUMERO NUMERIC(3) NOT NULL,
ORIGEM TEXT NOT NULL,
DESTINO TEXT NOT NULL,
NUM_LUGARES NUMERIC(3) NOT NULL,
PRIMARY KEY (NUMERO));
CREATE TABLE RESERVA (
NUM_VOO NUMERIC(3) NOT NULL,
CD_PASS NUMERIC(5) NOT NULL,
PRIMARY KEY (NUM_VOO, CD_PASS),
FOREIGN KEY (NUM_VOO)
REFERENCES VOO(NUMERO),
FOREIGN KEY (CD_PASS)
REFERENCES PASSAGEIRO(CODIGO));
Na Figura a seguir, são exibidos os estados atuais dessas tabelas.
| --------TABELA PASSAGEIRO--------- | -------------TABELA VOO----------- | --------TABELA RESERVA----- | |||||
| CODIGO | NOME | NUMERO | ORIGEM | DESTINO | NUM_LUGARES | NUM_VOO | CD_PASS |
| 11232 | FABIO CARNEIRO | 357 | RIO DE JANEIRO | FORTALEZA | 30 | 357 | 65789 |
| 13121 | CARLOS AMARAL | 635 | SALVADOR | RIO DE JANEIRO | 20 | 357 | 13121 |
| 22578 | ANA MARIA RIOS | 784 | FORTALEZA | BRASILIA | 20 | 357 | 56390 |
| 22667 | CECILIA LOPES | 998 | PORTO ALEGRE | CURITIBA | 20 | 357 | 22578 |
| 23799 | KAREN RIBEIRO | 357 | 22667 | ||||
| 44532 | VICENTE DE CARVALHO | 357 | 56123 | ||||
| 44677 | JULIA VASCONCELOS | 357 | 44909 | ||||
| 44909 | ALEX MEDEIROS | 635 | 45131 | ||||
| 45131 | FLAVIA NASCIMENTO | 635 | 89567 | ||||
| 51734 | EDSON RIBEIRO | 635 | 11232 | ||||
| 56123 | PEDRO COIMBRA | 635 | 44532 | ||||
| 56390 | FELIPE DE SOUZA | 635 | 78980 | ||||
| 65123 | POLIANA PEDROSA | 635 | 44677 | ||||
| 65789 | JOANA RODRIGUES | 784 | 23799 | ||||
| 79980 | ROSANA DA SILVA | 784 | 51734 | ||||
| 89567 | IARA DE MELO | 784 | 65123 | ||||
Qual comando SQL será executado sem produzir erro?
- DELETE FROM PASSAGEIRO WHERE NOME = 'VICENTE DE CARVALHO';
- DELETE FROM VOO WHERE DESTINO = 'CURITIBA';
- INSERT INTO RESERVA VALUES(998, 56000);
- INSERT INTO PASSAGEIRO VALUES(56390, 'RICARDO GONÇALVES');
- UPDATE VOO SET NUMERO = 532 WHERE DESTINO = 'RIO DE JANEIRO';
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
O comando DELETE FROM VOO WHERE DESTINO = 'CURITIBA'; remove as linhas da tabela VOO cujo destino seja CURITIBA. No esquema, a tabela RESERVA possui uma chave estrangeira que referencia VOO(NUMERO), o que impede a exclusão de uma linha pai se houver linhas filhas apontando para ela.
Na situação apresentada, o registro com DESTINO = 'CURITIBA' corresponde ao voo de NUMERO = 998 e não existe nenhuma tupla em RESERVA com NUM_VOO = 998. Como não há referências, a exclusão não viola a restrição de integridade referencial (REFERENCES) e, portanto, é executada sem erro.
Conclusão: o comando é permitido porque apaga apenas um voo não referenciado por reservas.
Conteúdo do catálogo FC Concursos · Atualizado em