Carregar apresentação
A apresentação está carregando. Por favor, espere
1
REVISÃO Comandos SQL - DML SELECT * FROM ?
2
Comandos SQL - DML • Os exemplos serão elaborados para o esquema de dados a seguir: EMPREGADO (matricula, nome, sexo, endereco, salario, supervisor, depto) DEPARTAMENTO (coddep, nome, gerente, dataini) PROJETO (codproj, nome, local, depart) ALOCACAO (matric, codigop, horas) DEPENDENTE (coddepend, matricula, nome, sexo) CREATE TABLE DEPARTAMENTO ( codDep INT NOT NULL, nome VARCHAR(50), gerente INT, dataIni DATE, PRIMARY KEY (coddep) ); CREATE TABLE EMPREGADO ( matricula INT NOT NULL, endereco VARCHAR (50), salario DECIMAL, supervisor INT, depto INT, PRIMARY KEY (matricula), FOREIGN KEY (supervisor) REFERENCES EMPREGADO(matricula), FOREIGN KEY (depto) REFERENCES DEPARTAMENTO(codDep) ALTER TABLE DEPARTAMENTO ADD FOREIGN KEY (gerente) REFERENCES EMPREGADO (matricula);
3
Comandos SQL - DML CREATE TABLE DEPARTAMENTO ( codDep INT NOT NULL,
nome VARCHAR(50), gerente INT, dataIni DATE, PRIMARY KEY (coddep) ); CREATE TABLE EMPREGADO ( matricula INT NOT NULL, endereco VARCHAR (50), salario DECIMAL, supervisor INT, depto INT, PRIMARY KEY (matricula), FOREIGN KEY (supervisor) REFERENCES EMPREGADO(matricula), FOREIGN KEY (depto) REFERENCES DEPARTAMENTO(codDep) ALTER TABLE DEPARTAMENTO ADD FOREIGN KEY (gerente) REFERENCES EMPREGADO (matricula);
4
Comandos SQL - DML • Operações de manipulação: SELECT INSERT UPDATE
DELETE
5
Comandos SQL - DML • O comando SELECT: forma básica
SELECT <lista atributos> FROM <lista tabelas> WHERE <condição> • O resultado de qualquer comando SELECT é uma tabela - O campo FROM realiza produto cartesiano das tabelas relacionadas - WHERE deve trazer as condições de junção
6
Comandos SQL – DML - Desafio
• Q1. Obtenha todos os atributos de todos os empregados • Q2. Selecione as matrículas dos empregados
7
Comandos SQL – DML - Desafio
• Q1. Obtenha todos os atributos de todos os empregados SELECT * FROM Empregado • Q2. Selecione as matrículas dos empregados SELECT matricula FROM empregado
8
Comandos SQL – DML - Desafio
• Q3. Obtenha o salário do empregado Eduardo • Q4. Selecione todos os atributos de todos os empregados do departamento d5
9
Comandos SQL – DML - Desafio
• Q3. Obtenha o salário do empregado Eduardo SELECT salario FROM Empregado WHERE nome = ‘Eduardo’ • Q4. Selecione todos os atributos de todos os empregados do departamento código 4 SELECT * FROM Empregado WHERE depto = 4
10
Comandos SQL – DML - Desafio
• Q5. Faça o produto cartesiano, seguido de projeção de Empregados X Departamento retornando a matrícula do empregado e o nome do departamento SELECT empregado.matricula, departamento.nome FROM empregado, departamento; A cláusula FROM realiza o produto cartesiano Departamento.nome é especificado para não haver confusão com o atributo nome de empregado - Empregados são relacionados com outros departamentos além daquele em que trabalham
11
Comandos SQL – DML - Desafio
• Q5. Faça o produto cartesiano, seguido de projeção de Empregados X Departamento retornando a matrícula do empregado e o nome do departamento SELECT empregado.matricula, departamento.nome FROM empregado, departamento WHERE empregado.codigoDepertamento = departamento.codigoDepartamento; A cláusula FROM realiza o produto cartesiano - Departamento.nome é especificado para não haver confusão com o atributo nome de empregado - Empregados são relacionados com outros departamentos além daquele em que trabalham (problema resolvido no WHERE)
12
Comandos SQL – DML - Desafio
• Q6. Selecione o nome e o endereço de todos os empregados que trabalham no departamento 'DDG - Departamento de Desenvolvimento de Games'
13
Comandos SQL – DML - Desafio
• Q6. Selecione o nome e o endereço de todos os empregados que trabalham no departamento 'DDG - Departamento de Desenvolvimento de Games' SELECT e.nome, e.endereco FROM empregado e, departamento d WHERE d.coddep = e.depto AND d.nome = 'DDG - Departamento de Desenvolvimento de Games';
14
Comandos SQL – DML - Exemplos
• Q7. Para cada projeto no ‘Fragata’, liste o código do projeto, o departamento que controla o projeto e o nome do gerente com endereço e salário
15
Comandos SQL – DML - Exemplos
• Q7. Para cada projeto em ‘Fragata’, liste o código do projeto, o departamento que controla o projeto e o nome do gerente com endereço e salário SELECT p.codproj, d.nome, e.nome, e.endereco, e.salario FROM projeto p, departamento d, empregado e WHERE p.depart = d.coddep AND d.gerente = e.matricula AND p.local = ‘Fragata’
16
Comandos SQL – DML - Exemplos
• Q8. Para cada empregado, recupere seu nome e o nome do seu supervisor
17
Comandos SQL – DML - Exemplos
• Q8. Para cada empregado, recupere seu nome e o nome do seu supervisor SELECT e.nome, s.nome FROM empregado e, empregado s WHERE s.matricula = e.supervisor
18
Comandos SQL – DML - Exemplos
- Q9. Selecione todos os atributos de todos os empregados do 'DTRD - Departamento de Teste de Redes para Dormir' - Q10. Recupere os salários dos empregados
19
Comandos SQL – DML - Exemplos
- Q9. Selecione todos os atributos de todos os empregados do departamento 'DTRD - Departamento de Teste de Redes para Dormir' SELECT * FROM empregado e, departamento d WHERE d.coddep = e.depto AND d.nome = 'DTRD - Departamento de Teste de Redes para Dormir' - Q10. Recupere os salários dos empregados SELECT salario FROM empregado
20
Comandos SQL – DML - Exemplos
• Algumas vezes surgem duplicatas como resposta a uma query. Podemos eliminá-las usando o comando DISTINCT na cláusula SELECT - Q11. Selecione os diferentes salários pagos pela empresa aos empregados
21
Comandos SQL – DML - Exemplos
• Algumas vezes surgem duplicatas como resposta a uma query. Podemos eliminá-las usando o comando DISTINCT na cláusula SELECT - Q11. Selecione os diferentes salários pagos pela empresa aos empregados SELECT DISTINCT salario FROM empregado
22
Comandos SQL – DML - Exemplos
• SQL implementa a operação UNIAO da álgebra relacional. É requerido que as relações sejam compatíveis de união - Q12. Liste todos os nomes de projetos que envolvem o empregado ‘Eduardo’ como trabalhador ou como gerente do departamento que controla o projeto
23
Comandos SQL – DML - Exemplos
Q12 (parcial). Liste todos os nomes de projetos que envolvem o empregado ‘Eduardo’ como trabalhador SELECT p.nome FROM PROJETO p, ALOCACAO a, EMPREGADO e WHERE p.codproj = a.codigop AND e.matricula = a.matric AND e.nome = 'Eduardo';
24
Comandos SQL – DML - Exemplos
Q12 (parcial). Liste todos os nomes de projetos que envolvem o empregado ‘Eduardo’ como gerente do departamento que controla o projeto SELECT p.nome FROM PROJETO p, DEPARTAMENTO d, EMPREGADO e WHERE d.coddep = p.depart AND d.gerente = e.matricula AND e.nome = 'Eduardo‘;
25
Comandos SQL – DML - Exemplos
(SELECT p.nome FROM PROJETO p, ALOCACAO a, EMPREGADO e WHERE p.codproj = a.codigop AND e.matricula = a.matric AND e.nome = 'Eduardo') UNION (SELECT p.nome FROM PROJETO p, DEPARTAMENTO d, EMPREGADO e WHERE d.coddep = p.depart AND d.gerente = e.matricula AND e.nome = 'Eduardo');
26
Comandos SQL - DML SOCORRO! MATÉRIA NOVA!
27
Comandos SQL - DML • Os exemplos serão elaborados para o esquema de dados a seguir: EMPREGADO (matricula, nome, sexo, endereco, salario, supervisor, depto) DEPARTAMENTO (coddep, nome, gerente, dataini) PROJETO (codproj, nome, local, depart) ALOCACAO (matric, codigop, horas) DEPENDENTE (coddepend, matricula, nome, sexo) CREATE TABLE DEPARTAMENTO ( codDep INT NOT NULL, nome VARCHAR(50), gerente INT, dataIni DATE, PRIMARY KEY (coddep) ); CREATE TABLE EMPREGADO ( matricula INT NOT NULL, endereco VARCHAR (50), salario DECIMAL, supervisor INT, depto INT, PRIMARY KEY (matricula), FOREIGN KEY (supervisor) REFERENCES EMPREGADO(matricula), FOREIGN KEY (depto) REFERENCES DEPARTAMENTO(codDep) ALTER TABLE DEPARTAMENTO ADD FOREIGN KEY (gerente) REFERENCES EMPREGADO (matricula);
28
Comandos SQL - DML CREATE TABLE DEPARTAMENTO ( codDep INT NOT NULL,
nome VARCHAR(50), gerente INT, dataIni DATE, PRIMARY KEY (coddep) ); CREATE TABLE EMPREGADO ( matricula INT NOT NULL, endereco VARCHAR (50), salario DECIMAL, supervisor INT, depto INT, PRIMARY KEY (matricula), FOREIGN KEY (supervisor) REFERENCES EMPREGADO(matricula), FOREIGN KEY (depto) REFERENCES DEPARTAMENTO(codDep) ALTER TABLE DEPARTAMENTO ADD FOREIGN KEY (gerente) REFERENCES EMPREGADO (matricula);
29
Comandos SQL – DML - Exemplos
• Consultas Aninhadas: consultas que possuem consultas completas dentro de sua cláusula WHERE - Motivação: Algumas queries requerem que valores do BD sejam buscados e então usados numa condição - Q13. A consulta Q12 poderia ser reescrita da seguinte forma:
30
Comandos SQL – DML - Exemplos
SELECT DISTINCT nome FROM PROJETO WHERE codproj IN (SELECT p.codproj FROM PROJETO p, DEPARTAMENTO d, EMPREGADO e WHERE p.depart = d.coddep AND d.gerente = e.matricula AND e.nome = 'Eduardo') OR codproj IN (SELECT a.codigop FROM ALOCAÇÃO a, EMPREGADO e WHERE a.matric = e.matricula
31
Comandos SQL – DML - Exemplos
• Q14. Recupere o nome de cada empregado que tem um dependente com o mesmo nome e mesmo sexo SELECT e.nome FROM empregado e WHERE e.matricula IN (SELECT matricula FROM dependente WHERE matricula = e.matricula AND e.nome = nome AND e.sexo = sexo) Obs.: Veja que e.matricula, e.nome e e.sexo são atributos de empregado da consulta externa
32
Comandos SQL – DML - Exemplos
• Q14. Recupere o nome de cada empregado que tem um dependente com o mesmo nome e mesmo sexo SELECT e.nome FROM EMPREGADO e WHERE e.matricula IN (SELECT matricula FROM DEPENDENTE d WHERE d.matricula = e.matricula AND e.nome = d.nome AND e.sexo = d.sexo); Obs.: Veja que e.matricula, e.nome e e.sexo são atributos de empregado da consulta externa
33
Comandos SQL – DML - Exemplos
-Q15. Re-escrevendo a Q14 sem usar aninhamento SELECT e.nome FROM empregado e, dependente d WHERE e.matricula = d.matricula and e.nome = d.nome and e.sexo = d.sexo
34
Comandos SQL – DML - Exemplos
-Q15. Re-escrevendo a Q14 sem usar aninhamento SELECT e.nome FROM EMPREGADO e, DEPENDENTE d WHERE e.matricula = d.matricula and e.nome = d.nome and e.sexo = d.sexo
35
Comandos SQL – DML - Exemplos
• A função EXISTS É usada para verificar se o resultado de uma consulta aninhada é vazio ou não. É sempre usado em conjunto com um query aninhada -A consulta Q14 poderia ser: SELECT e.nome FROM EMPREGADO e WHERE EXISTS (SELECT * FROM DEPENDENTE WHERE e.matricula = matricula and e.nome = nome and e.sexo = sexo)
36
Comandos SQL – DML - Exemplos
• Podemos usar o NOT EXISTS(Q) - Q16. Recupere os nomes dos empregados que não têm dependentes
37
Comandos SQL – DML - Exemplos
• Podemos usar o NOT EXISTS(Q) - Q16. Recupere os nomes dos empregados que não têm dependentes SELECT e.nome FROM EMPREGADO e WHERE NOT EXISTS (SELECT * FROM DEPENDENTE WHERE e.matricula = matricula)
38
Comandos SQL – DML - Exemplos
• Podemos usar um conjunto de valores explícitos - Q17. Selecione a matricula de todos os empregados que trabalham nos projetos 10, 20 ou 30
39
Comandos SQL – DML - Exemplos
• Podemos usar um conjunto de valores explícitos - Q17. Selecione a matricula de todos os empregados que trabalham nos projetos 10, 20 ou 30 SELECT DISTINCT matric FROM ALOCACAO WHERE codigop IN (10,20,30)
40
Comandos SQL – DML - Exemplos
• Podemos verificar valores nulos através de IS NULL e IS NOT NULL - Q18. Selecione os nomes de todos os empregados que não têm supervisores
41
Comandos SQL – DML - Exemplos
• Podemos verificar valores nulos através de IS NULL e IS NOT NULL - Q18. Selecione os nomes de todos os empregados que não têm supervisores SELECT nome FROM EMPREGADO WHERE supervisor IS NULL
42
Comandos SQL – DML - Funções
• SQL fornece 5 funções embutidas - COUNT: retorna o número de tuplas ou valores especificados numa query - SUM: retorna a soma os valores de uma coluna - AVG: retorna a média dos valores de uma coluna - MAX: retorna o maior valor de uma coluna - MIN: identifica o menor valor de uma coluna • Estas funções só podem ser usadas numa cláusula SELECT ou numa cláusula HAVING (a ser vista depois)
43
Comandos SQL – DML - Exemplos
-Q19. Encontre o total de salários, o maior e o menor salário e a média salarial da relação empregados
44
Comandos SQL – DML - Exemplos
-Q19. Encontre o total de salários, o maior e o menor salário e a média salarial da relação empregados SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario) FROM EMPREGADO
45
Comandos SQL – DML - Exemplos
- Q20. Encontre o maior e menor salário do departamento de Produção - Q.21 Obtenha o número de empregados da empresa
46
Comandos SQL – DML - Exemplos
- Q20. Encontre o maior e menor salário do departamento de Produção SELECT MAX(salario), MIN(salario) FROM EMPREGADO e, DEPARTAMENTO d WHERE e.depto = d.coddep AND d.nome = 'Produção'; - Q.21 Obtenha o número de empregados da empresa SELECT COUNT(*) FROM EMPREGADO
47
Comandos SQL – DML - Exemplos
Q.22 Obter o número de salários distintos do departamento de Contabilidade
48
Comandos SQL – DML - Exemplos
Q.22 Obter o número de salários distintos do departamento de Contabilidade SELECT COUNT(DISTINCT salario) FROM empregado e, departamento d WHERE (e.depto = d.coddep AND d.nome = 'DDG - Departamento de Desenvolvimento de Games'); -O que aconteceria se escrevêssemos COUNT(salario) ao invés de COUNT(DISTINCT salario)?
49
Comandos SQL – DML - Exemplos
- Q23. Obter o nome dos empregados que tenham 2 ou mais dependentes
50
Comandos SQL – DML - Exemplos
- Q23. Obter o nome dos empregados que tenham 2 ou mais dependentes SELECT e.nome FROM EMPREGADO e WHERE (SELECT COUNT(*) FROM DEPENDENTE d WHERE e.matricula = d.matricula) >= 2
51
Comandos SQL – DML - Exemplos
• Cláusulas GROUP BY e HAVING Usadas para lidar com grupos Q24. Para cada departamento, obter o código do departamento, o número de empregados e a média salarial
52
Comandos SQL – DML - Exemplos
• Cláusulas GROUP BY e HAVING Usadas para lidar com grupos Q24. Para cada departamento, obter o código do departamento, o número de empregados e a média salarial SELECT depto, COUNT(*), AVG(salario) FROM EMPREGADO GROUP BY depto - As tuplas de empregados são separadas em grupos (departamento) e as funções COUNT e AVG são aplicadas a cada grupo separadamente
53
Comandos SQL – DML - Exemplos
• Q25. Para cada projeto, obter o código do projeto, seu nome e o número de empregados que trabalham nele
54
Comandos SQL – DML - Exemplos
• Q25. Para cada projeto, obter o código do projeto, seu nome e o número de empregados que trabalham nele SELECT codigop, nome, COUNT(*) FROM PROJETO p, ALOCACAO a WHERE p.codproj = a.codigop GROUP BY p.codproj, p.nome - O agrupamento e as funções são aplicadas após a junção
55
Comandos SQL – DML - Exemplos
• HAVING Cláusula usada em conjunto com GROUP BY para permitir a inclusão de condições nos grupos • Q26. Para cada projeto que possui mais de 2 empregados trabalhando, obter o código do projeto, nome do projeto e número de empregados que trabalha neste projeto
56
Comandos SQL – DML - Exemplos
SELECT p.codproj, p.nome, COUNT(*) FROM PROJETO p, ALOCACAO a WHERE p.codproj = a.codigop GROUP BY p.codproj, p.nome HAVING COUNT(*) > 2
57
Comandos SQL – DML - Exemplos
• Operadores de comparação e aritméticos • BETWEEN Sintaxe: expressão [NOT] BETWEEN expressão AND expressão Ex.: y BETWEEN x AND z equivale a x <= y <= z - Q27. Selecione os nomes dos empregados que ganham mais de 1000 e menos de 2000 reais
58
Comandos SQL – DML - Exemplos
• Operadores de comparação e aritméticos • BETWEEN Sintaxe: expressão [NOT] BETWEEN expressão AND expressão Ex.: y BETWEEN x AND z equivale a x <= y <= z - Q27. Selecione os nomes dos empregados que ganham mais de 1000 e menos de 2000 reais SELECT nome FROM EMPREGADO WHERE salario BETWEEN 3000 AND 8000
59
Comandos SQL – DML - Exemplos
• LIKE Permite comparações de substrings. Usa dois caracteres reservados ‘%’ (substitui um número arbitrário de caracteres) e ‘_‘ (substitui um único caracter) - Q.28 Obter os nomes de empregados cujos endereços estão em Espírito Santo
60
Comandos SQL – DML - Exemplos
• LIKE Permite comparações de substrings. Usa dois caracteres reservados ‘%’ (substitui um número arbitrário de caracteres) e ‘_‘ (substitui um único caracter) - Q.28 Obter os nomes de empregados cujos endereços estão em Espírito Santo SELECT nome FROM EMPREGADO WHERE endereco LIKE '%Oliveira%';
61
Comandos SQL – DML - Exemplos
- Q29. Queremos ver o efeito de dar aos empregados que trabalham no ProdutoX um aumento de 10%
62
Comandos SQL – DML - Exemplos
- Q29. Queremos ver o efeito de dar aos empregados que trabalham no ProdutoX um aumento de 10% SELECT e.nome, 1.1*salario FROM EMPREGADO e, ALOCACAO a, PROJETO p WHERE e.matricula = a.matric and a.codigop = p.codproj and p.nome = 'Pop Center 2';
63
Comandos SQL – DML - Exemplos
• Ordenação - O operador ORDER BY permite ordenar o resultado de uma query por um ou mais atributos - Q.30 Obter uma lista de empregados e seus respectivos departamentos e projetos, listando ordenado pelo nome do departamento
64
Comandos SQL – DML - Exemplos
• Ordenação - O operador ORDER BY permite ordenar o resultado de uma query por um ou mais atributos - Q.30 Obter uma lista de empregados e seus respectivos departamentos e projetos, listando ordenado pelo nome do departamento SELECT d.nome, e.nome, p.nome FROM DEPARTAMENTO d, EMPREGADO e, PROJETO p, ALOCACAO a WHERE d.codDep = e.depto AND e.matricula = a.matric AND a.codigop = p.codproj ORDER BY d.nome, e.nome;
65
ORDER BY d.nome DESC, e.nome ASC
Comandos SQL – DML - Exemplos • Ordenação -A ordem default é ascendente (ASC) caso queiramos ordem decrescente usamos DESC ORDER BY d.nome DESC, e.nome ASC
66
Inserção de Dados • O comando INSERT
- Usado para adicionar uma tupla a uma relação - Sintaxe: INSERT INTO tabela [ (lista colunas)] fonte - Onde fonte pode ser uma especificação de pesquisa (SELECT) ou uma cláusula VALUES da forma • VALUES (lista de valores atômicos) Obs.: Se o comando INSERT incluir a cláusula VALUES então uma única tupla é inserida na relação Ex.: INSERT INTO EMPREGADO (matricula, nome) VALUES (9491,'Ana')
67
Inserção de Dados Obs.: A inserção será rejeitada se tentarmos omitir um atributo que não permite valores nulos (NOT NULL) Ex.: INSERT INTO EMPREGADO (nome, salario) VALUES('Flávia', 960) - Podemos inserir várias tuplas numa relação através de uma query
68
Inserção de Dados CREATE TABLE DEPTO_INFO
(nome character(15), numemp integer, totsal real); INSERT INTO DEPTO_INFO(nome, numemp, totsal) SELECT d.nome, COUNT(*), SUM(salario) FROM DEPARTAMENTO d, EMPREGADO e WHERE d.coddep = e.depto GROUP BY d.nome;
69
Exclusão de Dados • O comando DELETE - Remove tuplas de uma relação
Sintaxe DELETE FROM tabela [WHERE condição] - Obs.: Se omitirmos a cláusula WHERE, então o DELETE deve ser aplicado a todas as tuplas da relação. Porém, a relação permanece no BD como uma relação vazia
70
Modificação de Dados • O comando UPDATE
- Modifica o valor de atributos de uma ou mais tuplas. - Sintaxe UPDATE tabela SET lista_atributos com atribuições de valores [WHERE condição] - Obs.: omitir a cláusula WHERE implica que o UPDATE deve ser aplicado a todas as tuplas da relação
71
Modificação de Dados • O comando UPDATE
- Ex. Modifique o nome do Departamento de Computação para Departamento de Informática
72
Modificação de Dados • O comando UPDATE
- Ex. Modifique o nome do Departamento de Computação para Departamento de Informática UPDATE DEPARTAMENTO SET nome = 'DDG - Departamento de Desenvolvimento de Games' WHERE nome = 'DDG';
73
Modificação de Dados • O comando UPDATE
- Ex. Dê um aumento de 10% a todos os empregados do departamento de Pesquisa
74
Modificação de Dados • O comando UPDATE
- Ex. Dê um aumento de 10% a todos os empregados do departamento de Pesquisa UPDATE EMPREGADO SET salario = salario * 1.1 WHERE depto in (SELECT coddep FROM DEPARTAMENTO WHERE nome = 'DDG');
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.