Questão FC369454
Considere o seguinte esquema de um banco de dados relacional, expresso em linguagem SQL: create table editora ( cod_editora integerprimary key, nome_editora varchar(30) not null, t
Linguagem SQL
FGV · 2024
Considere o seguinte esquema de um banco de dados relacional, expresso em linguagem SQL:
create table editora
(
cod_editora integerprimary key,
nome_editora varchar(30) not null,
telefone char(11)
);
create table livro
(
cod_livro integerprimary key,
num_isbn char(10) unique not null,
titulo varchar(20) not null,
edicao integerdefault 1 not null,
cod_editora integerreferences editora
);
Após criadas, os comandos de inserção a seguir foram executados:
insert into editora values (1,'Ed1','2222-3333'), (2,'Ed2',NULL);
insert into livro values (1,'111','Livro1',2,NULL), (2,'222','Livro2',2,1), (5,'555','Livro5',1,1);
insert into livro(cod_livro,num_isbn,titulo,cod_editora) values (3,'333','Livro3',2),
(4,'444','Livro4',2);
A consulta select * from livro where exists (select distinct * from editora) and edicao%2 <> 0 produz como resultado a seguinte quantidade de linhas:
- 0.
- 1.
- 2.
- 3.
- 4.
Mostrar resposta e comentário
Gabarito
D
Comentário do professor
A consulta retorna 3 linhas porque a cláusula EXISTS avalia apenas se a subquery retorna algo. Aqui select distinct * from editora devolve linhas (existem editoras), logo EXISTS é verdadeiro para todos os registros de livro e não filtra nenhuma linha por si só.
O filtro efetivo é edicao%2 <> 0, ou seja \(edicao \% 2 \neq 0\), que seleciona somente edições ímpares. Como a coluna edicao tem default 1, os livros sem valor explícito recebem edição 1.
Analisando os dados inseridos, três livros têm edição ímpar (valores 1): cod_livro 3, 4 e 5. Portanto a consulta combina o verdadeiro de EXISTS com o critério de imparidade e retorna exatamente três linhas.
Conteúdo do catálogo FC Concursos · Atualizado em