Você está na página 1de 8

31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

Prova de Aplicação de Banco de


Dados (2021-1 Aplicação de Banco
de Dados)
Use o script a seguir:

create schema prova002;

use prova002;

DROP TABLE IF EXISTS `autores`;

CREATE TABLE `autores` (

`id` int NOT NULL,

`nome` varchar(45) DEFAULT NULL,

`sobrenome` varchar(45) DEFAULT NULL,

`cidade` varchar(45) DEFAULT NULL,

`estado` varchar(2) DEFAULT NULL,

PRIMARY KEY (`id`)

);

DROP TABLE IF EXISTS `cargos`;

CREATE TABLE `cargos` (

`id` int NOT NULL,

`descricao` varchar(45) DEFAULT NULL,

`nivelMinimo` int DEFAULT NULL,

`nivelMaximo` int DEFAULT NULL,

PRIMARY KEY (`id`)

);

DROP TABLE IF EXISTS `editoras`;

CREATE TABLE `editoras` (

`id` int NOT NULL,

`nome` varchar(45) DEFAULT NULL,

`cidade` varchar(45) DEFAULT NULL,

`estado` varchar(2) DEFAULT NULL,

PRIMARY KEY (`id`)

);

DROP TABLE IF EXISTS `autortitulo`;

CREATE TABLE `autortitulo` (

`idAutor` int NOT NULL,

`idTitulo` int DEFAULT NULL,

`ordemAutoria` varchar(45) DEFAULT NULL,

PRIMARY KEY (`idAutor`),

KEY `fk_titulo_idx` (`idTitulo`),

CONSTRAINT `fk_autor` FOREIGN KEY (`idAutor`) REFERENCES `autores` (`id`),

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 1/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

CONSTRAINT `fk_titulo` FOREIGN KEY (`idTitulo`) REFERENCES `titulos` (`id`)

);

DELIMITER ;;

CREATE DEFINER=`root`@`localhost`

TRIGGER `autortitulo_BEFORE_INSERT` BEFORE INSERT ON `autortitulo` FOR EACH ROW


BEGIN

declare existe int;

set existe = 0;

set existe = (select max(ordemAutoria) from autortitulo where idTitulo = NEW.idTitulo);

if (new.ordemAutoria < existe) then

signal SQLSTATE '02000' set message_text = 'Já existe um autor nessa ordem!' ;

delete from autortitulo where idtitulo = new.idtitulo and idautor=new.idautor and


ordemautoria = new.ordemautoria;

end if;

END ;;

DELIMITER ;

DROP TABLE IF EXISTS `titulos`;

CREATE TABLE `titulos` (

`id` int NOT NULL,

`titulo` varchar(45) DEFAULT NULL,

`genero` varchar(45) DEFAULT NULL,

`idEditora` int DEFAULT NULL,

`preco` double DEFAULT NULL,

`dataPublicacao` date DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `fk_editora` (`idEditora`),

CONSTRAINT `fk_editora` FOREIGN KEY (`idEditora`) REFERENCES `editoras` (`id`)

);

DROP TABLE IF EXISTS `empregados`;

CREATE TABLE `empregados` (

`id` int NOT NULL,

`nome` varchar(45) DEFAULT NULL,

`sobrenome` varchar(45) DEFAULT NULL,

`idCargo` int DEFAULT NULL,

`nivelCargo` varchar(45) DEFAULT NULL,

`idEditora` int DEFAULT NULL,

`dataContratacao` date DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `fk_cargo_idx` (`idCargo`),

CONSTRAINT `fk_cargo` FOREIGN KEY (`idCargo`) REFERENCES `cargos` (`id`)

);

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` TRIGGER `empregados_AFTER_INSERT` AFTER INSERT


ON `empregados` FOR EACH ROW BEGIN

declare maximo int;

declare minimo int;

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 2/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

set minimo = (SELECT MIN(nivelMinimo) FROM cargos where id = NEW.id);

set maximo = (SELECT MAX(nivelMaximo) FROM cargos where id = NEW.id);

IF (new.nivelCargo > maximo) then

update cargos set nivelMaximo = new.nivelCargo where id = NEW.id;

end if;

if (new.nivelCargo < minimo) then

update cargos set nivelMinimo = new.nivelCargo where id = new.id;

end if;

END ;;

DELIMITER ;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` TRIGGER `empregados_AFTER_UPDATE` AFTER UPDATE


ON `empregados` FOR EACH ROW BEGIN

declare maximo int;

declare minimo int;

set minimo = (SELECT MIN(nivelMinimo) FROM cargos where id = NEW.id);

set maximo = (SELECT MAX(nivelMaximo) FROM cargos where id = NEW.id);

IF (new.nivelCargo > maximo) then

update cargos set nivelMaximo = new.nivelCargo where id = NEW.id;

end if;

if (new.nivelCargo < minimo) then

update cargos set nivelMinimo = new.nivelCargo where id = new.id;

end if;

END ;;

DELIMITER ;

DROP PROCEDURE IF EXISTS `sp_prova001` ;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_prova001`()

BEGIN

select e.nome, t.titulo from editoras e

inner join titulos t on e.id = t.idEditora

where exists

select c.descricao, count(c.id) from empregados

join cargos c on c.id = empregados.idcargo

where idEditora = e.id

group by c.descricao

having count(c.

Pontos: 100/100

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 3/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

Considere o script apresentado no início desta avaliação. O que faz a trigger


autortitulo_BEFORE_INSERT?
(10/10 Pontos)

Apaga o titulo da publicação

Valida se já existe um autor/titulo na ordem adicionada.

Envia um email ao operador.

Considere o script apresentado no início desta avaliação Qual o o resultado


da procedure sp_prova002?
(15/15 Pontos)

Nome e sobrenome de autores que sao o primeiro na ordem de publicação

Nome e sobrenome de autores que sao o primeiro na ordem de publicação e a


dataPaublicaçao é menor que a datalimite

Nome e sobrenome de autores que são o número na ordemautoria

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 4/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

Considere o script a seguir:

create table R1 (

a int,

b int

);

insert into R1 values (1, 2);

insert into R1 values (2, 2);

insert into R1 values (3, 3);

insert into R1 values (4, 3);

insert into R1 values (4, 2);

insert into R1 values (4, 1);

insert into R1 values (5, 0);

select distinct A from R1

where exists (select * from R1 x where x.B > R1.A)

O que será exibido no resultado


(15/15 Pontos)

2,3

1,2,3,4,5

1,2

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 5/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

Foi solicitado um levantamento nesse banco de dados, determinando o


quantitativo de programadores plenos que estão lotados em “Z”, para cada
uma das cidades. A consulta SQL que retorna essa informação é:
(10/10 Pontos)

SELECT COUNT(*), f.id_cidade, c.descricao_cargo FROM funcionario f INNER JOIN


cargo c ON c.id_cargo = f.id_cargo WHERE f.id_cidade = 1 AND f.id_unidade_lotacao
= 3 GROUP BY f.id_cidade, c.nome_cidade;

SELECT COUNT(*), f.id_cidade, c.nome_cidade FROM funcionario f INNER JOIN


cidade c ON c.id_cidade = f.id_cidade WHERE f.id_cargo = 5
AND f.id_unidade_lotacao = 3 GROUP BY f.id_cidade, c.nome_cidade;

SELECT COUNT(*), f.id_cidade, c.nome_cidade FROM funcionario f INNER JOIN cidade


c ON c.id_cidade = f.id_cidade WHERE f.id_cargo = 5 AND f.id_unidade_lotacao = 3;

SELECT COUNT(*), f.id_cidade, c.descricao_cargo FROM funcionario f INNER JOIN


cargo c ON c.id_cargo = f.id_cargo WHERE f.id_cidade = 1 AND f.id_unidade_lotacao
= 3;

O comando abaixo é válido para a criação de uma nova tabela disciplina,


com chave primária id_disciplina:

create table disciplinas (

id_disciplina INTEGER not null,

disciplina VARCHAR(40) not null,

primary key (id_disciplina)

);
(10/10 Pontos)

Verdadeiro

Falso

Considere o script apresentado no início desta avaliação. Qual é o resultado


da Procedure sp_prova001
(10/10 Pontos)

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 6/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

Retorna a editora e o titulo de autores que tem mais de 5 titulos.

Retorna a editora e o titulo de editoras que tem mais de 5 empregados com o


mesmo cargo.

Retorna a editora e o titulo de editoras que tem mais de 5 titulos.

O comando TRUNCATE no MySQL executa a seguinte função:


(10/10 Pontos)

Apaga determinada tabela

Apaga os dados de determinada tabela

Reorganiza o autoincremento de determinada tabela

Considere o script apresentado no início desta avaliação. Para se obter os


titulos e o nome dos respectivos autores em ordem crescente titulos e
autoria do livro, é obtido pela query:
(10/10 Pontos)

select a.nome, t.titulo from autores a inner join autortitulo at inner join titulo t order
by t.titulo, at.ordemAutoria

select a.nome, t.titulo from autores a inner join autortitulo at on a.id = at.idAutor
inner join titulo t on t.id = at.idTitulo order by t.titulo, at.ordemAutoria

select a.nome, t.titulo from autores a inner join autortitulo at on a.id = at.idAutor
inner join titulo t on t.id = at.idTitulo order by at.ordemAutoria

Considere o script apresentado no início desta avaliação. Qual a função da


trigger empregados_AFTER_UPDATE ?
(10/10 Pontos)

Atualiza o valor de nívelMínimo e o nivelMáximo da tabela cargos

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 7/8
31/10/2021 22:40 Geral (2021-1 Aplicação de Banco de Dados) | Microsoft Teams

Aplica um aumento de salário se o nivelCargo for maior que o maior valor já


existente.

Atualiza a tabela empregados revisando o campo minimo e máximo respectivamente.

Atualiza o nivel do cargo do empregado

https://teams.microsoft.com/_?culture=pt-br&country=BR&lm=deeplink&lmsrc=NeutralHomePageWeb&cmpid=WebSignIn#/school/tab::37170026… 8/8

Você também pode gostar