• Nenhum resultado encontrado

bd-aula07

N/A
N/A
Protected

Academic year: 2021

Share "bd-aula07"

Copied!
44
0
0

Texto

(1)

Banco de Dados I

SQL – DML

Ricardo Oliveira

ba.ricardo@uol.com.br

(2)

SQL - DML

Os exemplos da aula serão elaborados para

o esquema de dados a seguir:

Empregado(matricula, nome, endereco, salario,

supervisor, depto)

Departamento(coddep, nome, gerente, dataini)

Projeto(codproj, nome, local, depart)

Alocacao(matric,codigop, horas)

(3)

SQL - DML

As operações de manipulação sem cursor

são

 SELECT  INSERT  UPDATE  DELETE

(4)

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

(5)

SQL - DML: Exemplos

Q1. Obtenha todos os atributos de todos os

empregados

Select *

From Empregado

Q2. Selecione as matrículas dos empregados

Select matricula

From empregado

(6)

SQL - DML: Exemplos

 Q3. Obtenha o salário do empregado José

Select salario

From Empregado

Where nome = ‘José’

 Q4. Selecione todos os atributos de todos os

empregados do departamento d5 Select *

From Empregado Where depto = ‘d5’

(7)

SQL - DML: Exemplos

 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 matricula, Departamento.nome

From Empregado, Departamento

 A cláusula FROM já realiza o produto cartesiano  Departamento.nome é especificado para não

haver confusão com o atributo nome de empregado

(8)

SQL - DML: Exemplos

 Q6. Selecione o nome e o endereço de todos os

empregados que trabalham no departamento de produção

Select e.nome, e.endereco

From empregado e, departamento d

Where d.nome = ‘Produção’ and d.coddep = e.depto

(9)

SQL - DML: Exemplos

 Q7. Para cada projeto em ‘Fortaleza’, 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 = ‘Fortaleza’

(10)

SQL - DML: Exemplos

Q8. Para cada empregado, recupere seu

nome e o nome do seu supervisor

Select e.nome, s.nome

From Empregado e s

(11)

SQL - DML: Exemplos

 Q9. Selecione todos os atributos de todos os

empregados do departamento pessoal Select *

From Empregado e, Departamento d Where d.nome = ‘Pessoal’ and

d.coddep = e.depto

 Q10. Recupere os salários dos empregados

Select salario

(12)

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

(13)

SQL - DML: Exemplos

SQL implementa a operação UNIÃO 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 ‘Silva’ como trabalhador ou como gerente do departamento que controla o projeto

(14)

SQL - DML: Exemplos

(SELECT p.nome

FROM Projeto P, Departamento d, Empregado e

WHERE d.coddep = p.depart and d.gerente =

e.matricula and e.nome = ‘Silva’)

UNION

(SELECT p.nome

FROM Projeto p, Alocação a, Empregado e

WHERE p.codproj = a.codproj and e.matricula =

a.matricula and e.nome = ‘Silva’)

(15)

SQL - DML: Exemplos

Além da operação UNIÃO, o SQL

implementa as operações INTERSEÇÃO e

DIFERENÇA (  e - )

 INTERSECT  EXCEPT

A sintaxe para os dois comandos é a mesma

da UNIÃO

(16)

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

(17)

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 = ‘Silva’)

or

codproj in

(SELECT a.codigop

(18)

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

(19)

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

(20)

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)

(21)

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

(22)

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

(23)

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

(24)

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)

(25)

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)

(26)

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

(27)

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 = ‘Contabilidade’)

 O que aconteceria se escrevêssemos

COUNT(salario) ao invés de COUNT(DISTINCT salario)?

(28)

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

(29)

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

(30)

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

(31)

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

(32)

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

(33)

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

(34)

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 Natal, RN SELECT nome

FROM empregado

(35)

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.matricula and a.codigop = p.codproj and p.nome = ‘ProdutoX’

(36)

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 WHERE d.coddep = e.depto and e.matricula = a.matricula and a.codigop = p.codproj

(37)

SQL - DML: Exemplos

Ordenação

 A ordem default é ascendente (ASC) caso

queiramos ordem decrescente usamos DESC ORDER BY d.nome DESC, e.nome ASC

(38)

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)

(39)

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

(40)

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

(41)

Remoçã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

(42)

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

(43)

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 = ‘Informática’

(44)

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

Referências

Documentos relacionados

Ao encontrar o cesto com bolas a pessoa deverá parar na marca que encontra no chão e fazer, pelo menos, 3 lançamentos da bola, a diferentes níveis (exemplo: por cima do ombro,

Converse com os participantes do grupo para preparar uma excursão que contemple suas expectativas e objetivos. De acordo com o perfil do grupo, você poderá encontrar su- gestões em

No que tange a cogeração de energia, consi- derando que, na média, 1 kg de massa seca de sorgo biomassa com 50% de umidade gera 1.800 kcal, os referidos custos de produção no

Leviner e col 18 submeteram 20 portadores de doença arterial coronária a tratamento odontológico divididos em três grupos: sete pacientes não receberam anestesia durante

Que a Assembléia Geral de Ministros e Autoridades Altas de Morar e Urbanismo de América Latina e o Caribe (MINURVI) e o Foro Ibero- americano de Ministros e Autoridades de Máximo

No final, direciona-se para a esquerda, terminando na mesma parada da Punhos de Aço.. Pode ser escalada em dias

A TURIHAB conjuntamente com a CENTER pretendem, neste cenário, aumentar o número de operadores e agentes especialistas que promovam os Solares de Portugal e Casas no

A nível internacional, estará presente nas feiras, congressos e eventos mais importantes para a promoção internacional dos Solares de Portugal e das Casas no Campo e em que o Turismo