Baixe o app para aproveitar ainda mais
Prévia do material em texto
BANCO DE DADOS Prof. Higor Contato: E-mail: higor.delsoto@docente.unip.br Material Marquês: https://drive.google.com/drive/folders/1NMGv1-l7Xno1P8t_ikW0yNXelny_FlsK?usp=sharing Norte: https://drive.google.com/drive/folders/1Oltdz2Nq3V9_Dr7mit2wLTTTlIMKjpnc?usp=sharing Motivação Script SQLResposta Motivação Script SQL Ações internas SQL Embutida • Script sql utilizado em uma linguagem de programação(C, C#, Java, Python, PHP, etc); • O script SQL é o mesmo, ja que é destinado ao SGBD; • Capacidade de alterar, inserir, apagar e concultar. Script SQLResposta SQL Embutida Exercício de revisão • Criar o banco de dados; • Inserir 5 produtos; • Inserir 2 equipes; • Inserir 3 vendedores; • Inserir 3 vendas; Exercício de revisão • Buscar as vendas que possuem o produto x(produto inserido anteriormente) e o vendedor y. • Buscar equipes dos vendedores com mais de uma venda. Exercício de revisão • Buscar as vendas que possuem o produto x(produto inserido anteriormente) e o vendedor y. SELECT * FROM venda where venda.id_produto=0 and venda.id_vendedor=1; • Buscar equipes dos vendedores com mais de uma venda. select equipe.nome, vendedor.nome from equipe, vendedor, venda where equipe.id=vendedor.id_equipe and vendedor.id=venda.id_vendedor group by (venda.id_vendedor) having count(venda.id) > 1; Consultas encadeadas Consultas encadeadas • O resultado de uma consulta é utilizado por outra consulta, de forma encadeada e no mesmo comando SQL. • O resultado do comando SELECT mais interno (subselect) é usado por outro SELECT mais externo para obter o resultado final. • O SELECT mais interno (subconsulta ou consulta aninhada) pode ser usado principalmente nas cláusulas WHERE e HAVING do comando mais externo. Consultas encadeadas Tipos de subconsulta: • ESCALAR: Retornam um único valor. • ÚNICA COLUNA: Retornam várias linhas,mas apenas uma única coluna é obtida. • TABELA: Retornam uma ou mais colunas e múltiplas linhas. Consultas encadeadas Exemplo de utilização de uma subconsulta: SELECT * FROM vendedor WHERE setor = (SELECT nome FROM Departamento WHERE Nome = ‘eletrodomesticos’ ); Listar os vendedores que trabalham no setor de eletrodomésticos. Exercício Listar as vendas que o vendedor possui o nome com a lerta R. Exercício Alterar a tabela vendedor e inserir o campo salário (Preenche-lo também). Exercício Listar os empregados cujos salários são maiores do que o salário médio, mostrando o quanto são maiores. Exercício Listar os empregados cujos salários são maiores do que o salário médio, mostrando o quanto são maiores. SELECT *,(SELECT AVG (Salario) FROM vendedor) AS media, Salario - ( SELECT AVG (Salario) FROM vendedor) AS DifSal FROM vendedor WHERE Salario > ( SELECT AVG ( Salario) FROM vendedor ); Consultas encadeadas – ANY / SOME São usadas com subconsultas que produzem uma única coluna de números. Consultas encadeadas – ANY / SOME Exemplo: Listar os empregados cujos salários são maiores do que o salário de pelo menos um funcionário do departamento de vendas SELECT Nome, Sexo, Salario FROM Empregado WHERE Salario > SOME (SELECT Salario FROM Empregado WHERE Dep = “vendas”) ; Exercício Listar os vendedores cujos salários são maiores do que o salário de pelo menos um funcionário da equipe x (mais adequada para seu BD). Consultas encadeadas – ALL São usadas com subconsultas que produzem uma única coluna de números. Consultas encadeadas – ANY / SOME Exemplo: Listar os empregados cujos salários são maiores do que o salário de pelo menos um funcionário do departamento de vendas SELECT Nome, Sexo, Salario FROM Empregado WHERE Salario > SOME (SELECT Salario FROM Empregado WHERE Dep = “TI”) ; Exercício Listar os vendedores cujos salários são maiores do que o salário do que cada funcionário da equipe x (mais adequada para seu BD). Consultas encadeadas – REGRAS • A cláusula ORDER BY não pode ser usada em uma subconsulta. • Nomes de atributos especificados na subconsulta estão associados às tabelas listadas na cláusula FROM. • Quando a subconsulta é um dos operandos envolvidos em uma comparação, ela deve aparecer no lado direito da comparação. Consultas encadeadas – EXISTS E NOT EXISTS • Criada para ser utilizada somente em subconsultas; • Retorna TRUE ou FALSE quando há alguma tupla no que atende a clausula colocada na subconsulta; SELECT * FROM E WHERE EXISTS ( SELECT * FROM D WHERE E.Num-Dep = D.Numero AND D.Nome = ‘Informática’) ; Exercício Liste todos os vendedores que possuem resgistro de venda. Exemplo: SELECT * FROM E WHERE EXISTS ( SELECT * FROM D WHERE E.Num-Dep = D.Numero AND D.Nome = ‘Informática’) ; Consultas encadeadas Conjuntos Consultas encadeadas – UNION • Linhas duplicadas são removidas da tabela resultante. • A mesma quantidade de colunas devem ser requisitadas em ambas as querys Exemplo SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; Exercício Liste todos os vendedores, vendas e equipes do BD. Exemplo SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; Procedure Definições • Procedimento armazenado, com uma coleção de comandos SQL • Após a compilação o script é armazenado no servidor Procedure Vantagens: • Devido ao encapsulamento de tarefas repetitivas, a execução torna-se mais eficiente. • Redução no tráfego de rede Para iniciarmos, crie o seguinte banco: Procedure Exemplo: Consulta: Criar procedure: Executar: SELECT codigop, nome FROM Projeto p, Alocacao a WHERE p.codproj = a.codigop DELIMITER $$ create procedure buscateste () BEGIN SELECT codigop, nome FROM Projeto p, Alocacao a WHERE p.codproj = a.codigop END $$ DELIMITER ; call buscateste; Procedure Passagem de parâmetros IN – O programa chamador deve passar um parâmetro. O valor do parâmetro fora da procedure permanece inalterado. Procedure Passagem de parâmetros OUT – Valor alterado dentro da procedure e retornado para o programa chamador. OBS: Ao entrar no procedimento o parâmetro é ‘limpo’. Procedure Passagem de parâmetros INOUT – Combinação dos anteriores. O programa chamador deve passar o parâmetro, e dentro da procedure pode haver mudança. O valor é retornado. Procedure Passagem de parâmetros Sintaxe MODO nome_parâmetro tipo (tamanho) Procedure Passagem de parâmetros Sintaxe MODO nome_parâmetro tipo (tamanho) Procedure Passagem de parâmetros – Qtd_livro DELIMITER $$ CREATE PROCEDURE livro_qtd(IN qtd int) BEGIN select titulo from livro where estoque > qtd; END $$ DELIMITER ; call livro_qtd(2); Exercício Crie uma procedure que encontre o título dos livros da editora x. Procedure Passagem de parâmetros – Aumento venda DELIMITER $$ CREATE PROCEDURE aumento_venda(IN taxa double, IN id int) BEGIN update itens_da_venda set subtotal= subtotal*((taxa/100) +1) where idvenda = id; END $$ DELIMITER ; call aumento_venda(20,1); Exercício Crie uma procedure altere a quantidade de livros e imprima o resultado. Procedure Passagem de parâmetros – Número elevado² DELIMITER $$ CREATE PROCEDURE elev_quadrado(INOUT numero INT) BEGIN SET numero = numero * numero; END $$ DELIMITER ; SET @num=4; Call elev_quadrado(@num); select @num; Exercício Crie uma procedure que calcule a área de um triangulo retângulo.Formula: (b*h)/2 Procedure Passagem de parâmetros – Área triangulo 2 DELIMITER $$ CREATE PROCEDURE a_tri2(IN b INT, IN h INT, out s int) BEGIN SET s = (b * h)/2; END $$ DELIMITER ; SET @b=4; SET @h=3; SET @s=0; call a_tri2(@b,@h,@s); select @s; Exercício Crie uma procedure que calcule a área de um retângulo e retorne o valor para uma variável. Formula: (b*h) Procedure Declaração variáveis - exemplo 2 Procedure Declaração variáveis DECLARE nome_var tipo [DEFAULT valor padrão] Procedure Declaração variáveis Exercício Crie uma procedure que calcule o salário líquido de um funcionário, recebendo o salário e o desconto por parâmetro e acrescentando um bônus através de uma variável interna. Formula: (salário – desconto) + bônus Índices Recurso de otimização de consultas, visando a velocidade na busca de dados. Índices Índices Índices - Mostrar show indexes from nome_tabela; Índices - Criar create index nome_index on tabela(campo); Índices - Excluir drop index nome_index on tabela;
Compartilhar