Escolar Documentos
Profissional Documentos
Cultura Documentos
Exemplos:
- EXERCÍCIO 1:
https://moodle.feliz.ifrs.edu.br/pluginfile.php/160147/mod_resource/content/1/Ativida
de_RelacionandoTabelas.pdf
--------------------------------------------INSERÇÃO---------------------------------------------------------
INSERT INTO item (num_item, descricao, preco_unitario) VALUES (123, 'TV LED
32', 900), (124, 'DVD', 100), (125, 'PS4', 1800), (126, 'Frigobar', 300);
--------------------------------------------------------------------------------------------------------------------
Aula 2 - 23/06
Lista Remota
1. SELECT Pnome, Datanasc, Dnome FROM funcionario JOIN departamento
ON funcionario.Dnr = departamento.Dnumero
ORDER BY Dnome, Datanasc;
3. SELECT Pnome, Unome FROM funcionario WHERE Pnome like '%a%' and
Unome like '%o';
4. SELECT Pnome, Salario, (Salario*1.25) possivelSalario FROM funcionario;
Aula 3 - 23/06
exemplo 5
SELECT COUNT(Pnome) FROM funcionario;
ex 6
SELECT COUNT(Pnome)
FROM funcionario
WHERE Sexo = "F";
Outros exemplos
SELECT departamento.Dnome, SUM(funcionario.Salario)
FROM funcionario JOIN departamento on funcionario.Dnr=departamento.Dnumero
WHERE sexo="M"
GROUP BY departamento.Dnome;
EXERCÍCIOS 23/06
https://docs.google.com/document/d/1oBFj6L24TYI7HcUmYfVGf-Pi2GsSeClHSPBk
Gj1iTcA/edit?usp=sharing
1. Recuperar o nome dos funcionários que tem salário maior que ‘30.000’.
SELECT Pnome FROM funcionario
WHERE Salario > 30000;
2. Recuperar o nome dos funcionários que tem salário menor que ‘30.000’ e que
seja do sexo feminino.
SELECT Pnome
FROM funcionario
WHERE Salario < 30000 AND Sexo ="F";
OUTRA RESOLUÇÂO
SELECT Pnome
FROM `funcionario` f
WHERE f.Salario > 30000 and f.Sexo='F';
OUTRA RESOLUÇÃO
ATIVIDADE 2
https://docs.google.com/document/d/1maCPusfiuj-XiCxvMzmFjnE5HTkkTj76JD9zJh
kS7mY/edit?usp=sharing
ATIVIDADE 3
https://docs.google.com/document/d/1PE_QLLbQG9fskXKbgsmOopSMfQdkPTe_ZU
EbQewnHZU/edit?usp=sharing
5. Para cada projeto, liste o nome do projeto e o total de horas por semana (por
todos os funcionários) gastas nesse projeto.
Aula 4 - 30/06
LISTA 01 - 30/06/2023
1.Fazer uma lista dos números de projeto nos quais trabalham funcionários
cujo último nome seja ‘Silva’. A lista também deve conter os números dos
projetos que pertencem ao departamento “Pesquisa”. Uso obrigatório de
UNION ou UNION ALL para apresentar os números dos projetos,
considerando que eles não devem aparecer de forma repetida.
10. Fazer uma lista dos números de projeto para aqueles que envolvem um
funcionário cujo último nome é ‘Silva’, seja como um trabalhador ou como um
gerente do departamento que controla o projeto.
13. Listar os nomes dos gerentes que têm pelo menos um dependente.
SELECT Pnome FROM `funcionario` JOIN departamento ON
departamento.Dnumero = funcionario.Dnr WHERE funcionario.Cpf =
departamento.Cpf_gerente AND departamento.Cpf_gerente IN
(SELECT Fcpf FROM dependente);
16. Para cada projeto, liste o nome do projeto e o total de horas por semana (por
todos os funcionários) gastas nesse projeto.
19. Liste o último nome de todos os gerentes de departamento que não possuem
dependentes.
SELECT Unome FROM `funcionario`
JOIN departamento ON departamento.Dnumero = funcionario.Dnr
WHERE funcionario.Cpf = departamento.Cpf_gerente AND
departamento.Cpf_gerente NOT IN (SELECT Fcpf FROM dependente);
Aula 5 - 07/07
ou
2.
Para o projeto Informatização, retorne o valor gasto por hora de trabalho do projeto
considerando o salário e as horas de trabalho no projeto de todos os funcionários
que trabalham no projeto (dividir a soma dos salários pela soma das horas
trabalhadas de todos os funcionários).
SELECT (SUM(Salario) / SUM(Horas)) Gasto FROM funcionario JOIN
trabalha_em ON trabalha_em.Fcpf = funcionario.Cpf JOIN projeto
ON projeto.Projnumero = trabalha_em.Pnr
WHERE Projnome = "Informatização";
3.
Recuperar o primeiro nome, último nome e salário dos funcionários do
departamento ‘Administração’ que trabalham mais de 15 horas no projeto
‘Informatização’.
ou
4.REPETIDO
5.
Listar o primeiro nome do funcionário e o número de projetos que trabalham todos
os funcionários que moram na cidade de São Paulo que trabalham no departamento
Pesquisa e que trabalham em dois ou mais projetos de empresa.
6.
Mesmo enunciado da questão anterior, mas adicionando a restrição de que o local
dos projetos também seja São Paulo.
select d.nome_dependente
from funcionarios f join dependente d on f.Cpf = d.Fcpf
where f.sexo ="F" and d.sexo = "M" AND
f.Cpf Not in (Select dependente.Fcpf from dependente where dependente.sexo
="F");
10) Fazer uma lista dos números de projeto para aqueles que envolvem um
funcionário cujo último nome é ‘Silva’. Além do solicitado na parte inicial da questão,
a lista de projetos também deve conter os números dos projetos que tenham
funcionários do sexo feminino trabalhando nele. USO obrigatório do UNION ou
UNION ALL nesta questão.
Aula 6 - 08/08
08/08
Outra forma :
SELECT CONCAT_WS('-',LEFT(Cpf,3), RIGHT(Pnome,3)) FROM
funcionario;
EXERCÍCIO
RESPOSTA:
SELECT CONCAT(f.Pnome, ' ', f.Unome), f.Salario, (f.Salario*1.2)Novo_Salario,
CONCAT_WS('_', LEFT(d.Dnome, 3),
d.Dnumero , RIGHT(p.Projnome, 3), p.Projnumero, f.Pnome, MID(f.Cpf, 4, 3))
FROM funcionario f
JOIN departamento d ON d.Dnumero = f.Dnr
JOIN trabalha_em t ON f.Cpf = t.Fcpf
JOIN projeto p ON t.Pnr = p.Projnumero
WHERE f.Endereco LIKE '%São Paulo%' OR f.Datanasc BETWEEN '1960-01-01'
AND '1969-12-31' (ou assim: f.Datanasc LIKE "__6_______")
ORDER BY Cpf DESC;
Aula 7 - 15/08
Exemplo de solução:
SELECT
CONCAT(f.Pnome, ' ', f.Unome) AS nome_funcionario,
d.Dnome AS nome_departamento,
CONCAT(
CONCAT(TIMESTAMPDIFF(YEAR, d.Data_inicio_gerente, current_date), ' anos, ') ,
CONCAT(TIMESTAMPDIFF(MONTH, d.Data_inicio_gerente + INTERVAL
TIMESTAMPDIFF(YEAR, d.Data_inicio_gerente, current_date) YEAR ,
current_date), ' meses, ') ,
CONCAT(TIMESTAMPDIFF(DAY, d.Data_inicio_gerente + INTERVAL
TIMESTAMPDIFF(MONTH, d.Data_inicio_gerente, current_date) MONTH ,
current_date), ' dias') ) AS tempo
FROM funcionario f
JOIN departamento d ON f.Cpf = d.Cpf_gerente;
Aula 8 - 22/08
Aula 22/08
1. Diz a lenda da sorte que se a soma do dia, mês e ano de nascimento for maior do
que a soma do dia, mês e ano atual você terá sorte no dia. Essa lenda é totalmente
verdadeira exceto pelas partes que foram totalmente inventadas. Faça uma consulta
para verificar se o funcionário terá sorte no dia de hoje. Retornar o nome do
funcionário, a soma referente ao dia do nascimento e a soma referente ao dia atual.
Soma da data: 04/10/1980 = 1994.
parte 1
SELECT Pnome, funcionario.Datanasc, (DAYOFMONTH(funcionario.Datanasc) +
MONTH(funcionario.Datanasc) + YEAR(funcionario.Datanasc))soma_nasc,
DAYOFMONTH(CURDATE()) + MONTH(CURDATE()) +
YEAR(CURDATE())soma_hoje
FROM funcionario;
parte 2
transformar em sorte ou azar
2:.
Considerando que o endereço dos funcionários segue um padrão, faça uma
consulta para extrair o nome das cidades onde moram os funcionários.
SELECT f.Pnome,
reverse(SUBSTRING_INDEX(reverse(SUBSTRING_INDEX(f.Endereco, ",", 3)),",",
1)) FROM funcionario f;
RESOLUÇÃO DO SOR
SELECT endereco,
reverse(SUBSTRING_INDEX(reverse(SUBSTRING_INDEX(Endereco, ',', 3)),',',1))
exemplo1,
reverse(substring(reverse(left(endereco,char_length(Endereco)-4)),1,instr(reverse(le
ft(endereco,char_length(Endereco)-4)),',')-2)) exemplo2
FROM funcionario
3.Considerando que o endereço dos funcionários segue um padrão, faça uma
consulta para extrair o nome das cidades onde moram os funcionários que
trabalham em 2 ou mais projetos.
SELECT f.Pnome,
reverse(SUBSTRING_INDEX(reverse(SUBSTRING_INDEX(f.Endereco, ",", 3)),",",
1))
FROM funcionario f
JOIN trabalha_em tb ON tb.Fcpf = f.Cpf
JOIN projeto p ON p.Projnumero = tb.Pnr
GROUP BY f.Cpf
HAVING COUNT(p.Projnumero) > 1;
SELECT Pnome,
CONCAT(RIGHT(funcionario.Cpf, 3), LEFT(dependente.Nome_dependente, 3),
departamento.Dnome)
FROM funcionario
JOIN dependente ON dependente.Fcpf = funcionario.Cpf
JOIN departamento ON departamento.Dnumero = funcionario.Dnr;
2° forma
SELECT Pnome, ROUND((((YEAR(NOW()) -
YEAR(departamento.Data_inicio_gerente))/ (YEAR(NOW()) -
YEAR(funcionario.Datanasc)))*100), 2)porcentagem_trab FROM funcionario JOIN
departamento ON departamento.Dnumero = funcionario.Dnr;
ROUND arredonda as casas, como o parâmetro é dois ele arredonda para duas
casas.
Aula 9 - 12/09
12/09
Arquivo:
2. Fazer uma consulta SQL que retorne o nome do departamento onde existam
funcionários do sexo feminino. Embora possa ser feito de forma mais simples, você
deve utilizar EXISTS para exercitar seu uso.
SELECT f.Pnome, CASE WHEN f.Sexo = 'M'THEN "Masculino" ELSE "Feminino" END
'Sexo' FROM funcionario f;
ou
SELECT f.Pnome,
CASE WHEN f.Sexo = 'M' THEN "Masculino"
WHEN f.Sexo = 'M' THEN "Feminino"
ELSE "Outro"
END
'Sexo'
FROM funcionario f;
Exercícios JOIN:
1) Selecione os clientes com seus pedidos (id e data do pedido). Clientes sem
pedido também devem aparecer na lista.
SELECT c.id, p.data FROM cliente c LEFT JOIN pedido p ON c.id = p.cliente_id;
3) Selecione o nome dos produtos com o seu total de itens vendidos (coluna
quantidade em produto_pedido). Produtos sem pedido também devem
aparecer na lista.
SELECT p.nome,
CASE
WHEN SUM(pp.quantidade) is NULL THEN 0
ELSE SUM(pp.quantidade)
END
'quantidade'
FROM produto p
LEFT JOIN produto_pedido pp ON p.id = pp.produto_id
GROUP by p.nome;
Concatene o resultado destas três colunas na ordem código, data e soma, separados por _
(ex. ZZZZZ_XXXXX_YYYYYY)
19/09/2023
EXERCÍCIO 1:
Retornar o nome do projeto que tenha mais funcionários trabalhando nele do a média
de funcionários trabalhando em todos os projetos.
Exercícios subconsultas:
Aula 10 - 03/10
FUNÇÕES -
MODELO:
DELIMITER $
CREATE FUNCTION()
RETURNS
BEGIN
RETURN
END$
DELIMITER ;
EXEMPLO SIMPLES:
EXEMPLO VARIÁVEIS:
DELIMITER $
DELIMITER ;
NUMERIC(3,1) ex.: 10,0 (até 3 dígitos, com uma casa depois da vírgula)
EXEMPLO COM IF
DELIMITER $
RETURN situacao;
END$
DELIMITER ;
--uso da função
select verificaAprovacao(7.5,5,4.3);
OUTROS EXEMPLOS
--------------------------------
DELIMITER $
CREATE FUNCTION PrimeiroNome (nomeCompleto VARCHAR(50))
RETURNS varchar(50)
BEGIN
declare novo_nome varchar(50);
return novo_nome;
end$
DELIMITER ;
--uso da função
select PrimeiroNome("Lucas Ramos dos Santos");
---------------------------
DELIMITER $$
DELIMITER ;
--uso da função
select fn_ValorPedido(3);
--uso da função
select cliente.nomeCliente, fn_ValorPedido(3) totalPedido
from cliente, pedido
where cliente.NumCliente = pedido.NumCliente AND
pedido.NumPedido=3;
----------------------------
DELIMITER $$
DELIMITER ;
EXERCÍCIOS:
- Exercício 1:
Criar uma função que recebe a data de nascimento do funcionário e retorna a
idade do funcionário.
Dica: procurar funções de data(date) do MySQL pode ajudar.
DELIMITER $
CREATE FUNCTION calc_idade(dataNascimento date)
RETURNS INT
BEGIN
RETURN TRUNCATE((DATEDIFF(NOW(), dataNascimento) / 365.25),0);
END$
DELIMITER;
- Exercício 2:
Fazer um select que retorne o nome e a idade de todos os funcionário
demostrando o uso da função.
- Exercício 3:
Criar uma função que recebe o CPF do funcionário e retorna o número de
dependentes do funcionário.
- Exercício 5:
Fazer um select que retorne o nome e o número de dependentes de todos os
funcionários.
EXERCÍCIOS PARTE 2:
- Exercício 1:
Crie a função TotalHoras para retornar o total de horas que um funcionário
trabalha. O parâmetro de entrada da função deve ser o cpf do funcionário.
função deve retornar o total de horas que o funcionário trabalha (tabela
trabalha_em).
DELIMITER $
CREATE FUNCTION TotalHoras(cpf bigint)
RETURNS decimal(10,1)
BEGIN
RETURN (SELECT SUM(trabalha_em.Horas) FROM trabalha_em WHERE
trabalha_em.Fcpf = cpf);
END$
DELIMITER ;
- Exercício 2:
Crie a função TotalHorasProjetos para retornar o total de horas e o número
de projetos que um funcionário trabalha. O parâmetro de entrada da função
deve ser o cpf do funcionário. A função deve retornar de forma concatenada
o total de horas que o funcionário trabalha e a quantidade de projetos que o
funcionário trabalha. Exemplo de retorno da função: '10h - 2 projetos'.
select TotalHorasProjetos(12345678966);
- Exercício 3:
Crie a função TotalFuncionários para retornar a quantidade de funcionários
que trabalham em um determinado projeto. O parâmetro de entrada da
função deve ser o nome do projeto. A função deve retornar a quantidade de
funcionários que trabalha no projeto indicado.
- Exercício 4:
Crie a função MediaSalDep para retornar a média salarial dos funcionários
de um departamento. O parâmetro de entrada da função deve ser o nome do
departamento. A função deve retornar a média salarial dos funcionários que
trabalham no departamento indicado.
EXERCÍCIOS PARTE 3:
- Exercicio 1:
Criar uma função que recebe o CPF do funcionário e retorna o valor do
aumento do funcionário. Se a soma de horas trabalhadas em projetos pelo
funcionário for maior ou igual a 40, o aumento deve ser de 20%. Caso
contrário o aumento deve ser de 5%.
DELIMITER $
CREATE FUNCTION aumentoSalario(cpf bigint)
RETURNS float
BEGIN
DECLARE horas decimal(10,1);
DECLARE aumento float;
RETURN aumento;
END$
DELIMITER ;
- Exercício 2:
Fazer uma consulta para mostrar o uso da função que retorne o nome do
funcionário e seu novo salário.
DELIMITER $
CREATE FUNCTION maisFuncionarios(proj1 int, proj2 int, proj3 int)
RETURNS int
BEGIN
DECLARE projFunc1 int;
DECLARE projFunc2 int;
DECLARE projFunc3 int;
DECLARE resultado int;
DELIMITER ;
- Exercício 4:
Fazer uma consulta para mostrar o uso da função.
SELECT maisFuncionarios(1,2,3);
EXERCÍCIO PARTE 4:
- Exercício 1:
Criar uma função que recebe o nome do departamento como parâmetro de entrada
e retorna o nome do gerente do departamento juntamente com o tempo de gerência
do funcionário no departamento. Retornar no seguinte formato: Fula do tal, gerente a
5 anos, 3 meses e 5 dias.
- Exercício 2:
- Exercício 3:
Fazer uma função que receba como entrada o cpf do funcionário e o sexo dos
dependentes que deve ser considerado na contabilização. A função deve retornar o
número de dependentes do funcionário para o sexo indicado.
- Exercício 4:
Fazer uma consulta para mostrar o uso da função. Essa consulta deve retornar as
seguintes colunas: nome e sobrenome do funcionário, total de dependentes,
dependentes femininos, dependentes masculinos. Essas três últimas colunas devem
utilizar a função criada para retornar os dados
DELIMITER $
CREATE OR REPLACE FUNCTION listarAll()
RETURNS text
BEGIN
DECLARE id int;
DECLARE id2 int;
DECLARE resultado text;
DECLARE tarefa text;
SET id2 = (SELECT MIN(tarefas.id) FROM tarefas);
SET id = (SELECT MAX(tarefas.id) FROM tarefas);
WHILE id2 <= id DO
SET tarefa = (SELECT titulo FROM tarefas WHERE id2 = tarefas.id);
SET resultado = (SELECT CONCAT(tarefa,'\n'));
SET id2 = (id2 + 1);
END WHILE;
RETURN resultado;
END$
DELIMITER ;
Aula 12 - 24/10/23
Xampp - APACHE - config - phpmyadmin
Você pode querer substituir a palavra localhost pelo endereço do seu servidor. Por exemplo,
se este usuário precisa acessar o MySQL de uma máquina com o endereço IP 11.0.0.0,
então você executaria o seguinte:
CREATE USER ‘newuser’@’11.0.0.0’ DENTIFIED BY
‘user_password’;
Se você quiser criar um usuário que possa se conectar de qualquer host, você pode incluir a
% wildcard no seu comando. Por exemplo:
CREATE USER ‘newuser’@’%’ IDENTIFIED BY ‘user_password’;
FROM sua_tabela;
6. Qual o comando para dar acesso apenas de consulta (SELECT) para um usuário
em um banco de dados?
VIEWS
EX.: CREATE VIEW vfunc as SELECT f.Pnome, f.Salario FROM funcionario f;
EXERCÍCIO:
Uma aplicação externa precisa de alguns dados disponíveis em nosso banco de
dados PESSOAS. Porém, como esta aplicação externa é uma aplicação para uso gerencial,
ela necessita apenas ter acesso aos dados de maneira consolidada. Você precisa
disponibilizar acesso apenas de consulta aos dados solicitados e não permitir acesso a
nenhuma outra informação do banco. Os dados necessários são: o número de pessoas
físicas por país como no exemplo a seguir:
Desta forma, solicita-se que você crie uma visão(view) chamada viewConsolidada
para disponibilizar estes dados e crie um usuário chamado appGerente com acesso de
select apenas a esta view.
Entregas do exercício:
● Script de criação da view viewConsolidada;
●
CREATE VIEW viewConsolidada AS
SELECT pais AS País, tipo_pessoa AS Tipo, COUNT(tipo_pessoa) AS
Quantidade FROM pessoaold WHERE tipo_pessoa = "PF" GROUP BY pais;
PROCEDURE:
EXEMPLO SIMPLES:
DELIMITER $
CREATE PROCEDURE sp_soma(in A int, in B int, out S int)
BEGIN
SET S=A+B;
END$
DELIMITER ;
CALL sp_soma(30,40,@saida);
SELECT @saida;
=
EXERCÍCIO:
(n acabado)
DELIMITER $
CREATE PROCEDURE atualizaSalario(in Dnome varchar, in aumento char, out resultado
varchar)
BEGIN
DECLARE salario = (SELECT salario from funcionario f JOIN departamento d on f.Dnr =
d.Dnumero where d.Dnome = Dnome );
DECLARE porcentagem varchar;
if(aumento = "A") THEN
SET salario= salario * 1.1;
SET porcentagem = "10%";
ELSEIF(aumento = "B") THEN
SET salario= salario * 1.2;
SET porcentagem = "20%";
ELSEIF(aumento = "C") THEN
SET salario= salario * 1.3;
SET porcentagem = "30%";
END$
DELIMITER ;
DELIMITER $
CREATE PROCEDURE atualizaSalario(IN nome_departamento VARCHAR(25), IN
faixa_aumento CHAR(1), OUT saida VARCHAR(200))
BEGIN
DECLARE numDepto int;
DECLARE percentual_aumento double;
DECLARE soma_salarios_atuais DECIMAL(10,2);
DECLARE soma_salarios_novos DECIMAL(10,2);
DECLARE registros_atualizados int;
CASE faixa_aumento
WHEN "A" THEN
SET percentual_aumento = 0.10;
WHEN "B" THEN
SET percentual_aumento = 0.20;
WHEN "C" THEN
SET percentual_aumento = 0.30;
END CASE;
#TESTANDO
call atualizaSalario("Pesquisa","A", @saida);
SELECT @saida;
EXERCÍCIO:
DELIMITER $
CREATE PROCEDURE atualizarPreco(in nomeP VARCHAR(20), in valorUni
DECIMAL(10.0), out saida varchar(200))
BEGIN
DECLARE codigoP int;
DECLARE uni char;
DECLARE valorU decimal;
DECLARE codHP int;
select cod_produto, Valor_unitario INTO codigoP, valorU FROM produto where descricao =
nomeP;
SET codHP = (select IFNULL(MAX(cod_produto),0) from historico_preco);
end $
DELIMITER ;
DELIMITER $$
CREATE TRIGGER antesUpdate_Funcionario
BEFORE UPDATE ON funcionario
FOR EACH ROW BEGIN
INSERT INTO funcionario_auditoria (id_funcionario, nome, sobrenome, cargo,
modificadoem, acao)
VALUES (OLD.id_funcionario, OLD.nome, OLD.sobrenome,
OLD.cargo, NOW(), "update");
END$$
DELIMITER ;
TESTE TRIGGER:
INSERT INTO funcionario (id_funcionario, nome, sobrenome, email, cargo) VALUES ('1', 'Tulio',
'Basegio', 'tulio@ifrs.com', 'Professor');
Exemplo INSERT
DELIMITER $$
CREATE TRIGGER Insert_Funcionario
BEFORE INSERT ON funcionario
FOR EACH ROW BEGIN
INSERT INTO funcionario_auditoria (id_funcionario, nome, sobrenome, cargo,
modificadoem, acao)
VALUES (NEW.id_funcionario, NEW.nome, NEW.sobrenome,
NEW.cargo, NOW(), "insert");
END$$
DELIMITER ;
Exemplo DELETE
DELIMITER $$
CREATE TRIGGER Delete_Funcionario
AFTER DELETE ON funcionario
FOR EACH ROW BEGIN
INSERT INTO funcionario_auditoria (id_funcionario, nome, sobrenome, cargo,
modificadoem, acao)
VALUES (OLD.id_funcionario, OLD.nome, OLD.sobrenome,
OLD.cargo, NOW(), "delete");
END$$
DELIMITER ;
ATIVIDADE 1
DELIMITER $$
CREATE TRIGGER Insert_Flor
AFTER INSERT ON flor
FOR EACH ROW BEGIN
INSERT INTO promocao (idFlor, preco_promocional)
VALUES (NEW.idFlor, (NEW.preco - NEW.preco * NEW.percentual_promocao));
END$$
DELIMITER ;
ATIVIDADE 2
Considerando as tabelas abaixo (que devem ser criadas por você), crie triggers conforme
solicitado a seguir:
1. Criar uma trigger para atualizar o estoque na tabela produtos toda vez que um produto
for vendido (neste exercício vender significa inserir na tabela itensvenda).
2. Criar uma trigger para atualizar o estoque na tabela produtos toda vez que um for
devolvido (neste exercício devolver significa apagar da tabela itensvenda).
3. Criar uma trigger para atualizar o estoque na tabela produtos toda vez que a quantidade
de um produto vendido for alterado (neste exercício significa alterar a quantidade na tabela
itensvenda).
CREATE TABLE produtos (produto_id int NOT NULL, descricao varchar (30)
DEFAULT NULL, estoque int NOT NULL DEFAULT 0);
CREATE TABLE itensvenda ( venda_id int DEFAULT NULL, produto_id int DEFAULT
NULL, quantidade Int DEFAULT NULL);
1.
DELIMITER $$
CREATE TRIGGER Insert_Venda
AFTER INSERT ON itensvenda
FOR EACH ROW BEGIN
UPDATE produtos SET estoque = estoque - NEW.quantidade WHERE NEW.produto_id =
produtos.produto_id;
END;
DELIMITER ;
2.
DELIMITER $$
CREATE TRIGGER atualiza_estoque
AFTER DELETE ON itensvenda
FOR EACH ROW BEGIN
UPDATE produtos SET estoque = estoque + OLD.quantidade WHERE
produtos.produto_id = OLD.produto_id;
END$$
DELIMITER ;
DELETE FROM `itensvenda` WHERE venda_id = 1;
3.
DELIMITER $$
CREATE TRIGGER update_VendasEstoque
AFTER UPDATE ON itensvenda
FOR EACH ROW BEGIN
UPDATE produtos SET estoque = estoque + OLD.quantidade - NEW.quantidade WHERE
OLD.produto_id = produtos.produto_id;
END$$
DELIMITER ;