Documente Academic
Documente Profesional
Documente Cultură
Consultas em SQL
Consultas Bsicas
Implementando Juno
Definindo Viso
Subconsultas
Ordenando resultados
Operaes e Comparao de Conjuntos
Gerando resumos
Consultas bsicas em SQL:
select < lista de atributos>
from < lista de nomes de relao>
where < condio de seleo> ;
select A1,...,An
from R1,...,Rm
where <condio>;
(R1 x ... x Rm) [ <condio> ] [A1,...,An]
select *
from E
where E.localizao = Fortaleza;
Q2: Liste todas as informaes em D
select *
from D;
select enome
from E, D
where E.dno = D.dno AND
D.ger = gustavo AND
sal < 1000;
select E1.enome
from E E1, D, E E2
where E1.dno = D.dno AND
D.ger = E2.enome AND
E1.sal > E2.sal;
Outer Join
Implementando Juno
PEAS
#p pnome
P1 mouse RESULTADO
RESULTADO
P2 teclado
#p qtd qtd
P3 monitor
P1
mouse 10 10
P4 disco rgido
P1
mouse 20 20
teclado 15
P2 15
FORNECEDORES_PEAS P3 null
monitor null
disco rgido null
#f #p qtd
F1 P1 10
F1 P2 15
F2 P1 20
Definindo Vises
Definindo Viso
Q8: Como criar uma viso para salvar o resultado de uma
consulta temporariamente?
select e_nome
from ESGS
where e_sal > 0.9 * g_sal;
Consultas com Subconsultas
Tipos de Subconsultas
Testa membros de um conjunto:
IN
NOT IN
Verificao de Relaes Vazias:
EXISTS
NOT EXISTS
Comparao de Conjuntos: Subconsultas
introduzidas com um operador de comparao
(=,< >, >, >=, <, <=, ou !> ) seguida por
ANY (SOME) ou ALL.
Subconsultas: Membros de um conjunto
select E1.enome
from E E1, E E2
where E2.enome = Vera and
E1.dno = E2.dno;
select enome
from E
where E.dno IN (NOT IN)
(select dno
from E subconsulta
where enome = Vera);
Subconsultas: Membros de um conjunto
EMP ( enome, #CI, idade) DEP ( nome, e_#CI, ... )
select E.enome
from EMP E
where E.#CI IN ( select e_#CI
from DEP
where e_#CI = E.#CI AND
DEP.nome = E.enome);
Subconsultas: Membros de um conjunto
EMP ( enome, #CI, idade) DEP ( nome, e_#CI, ... )
select E.enome
from EMP E
where E.enome IN ( select nome
from DEP
where e_#CI = E.#CI);
Subconsultas
select E.enome
from EMP E
where EXISTS ( select *
from DEP
where e_#CI = E.#CI AND
nome = E.enome);
Subconsultas
select E.enome
from EMP
where NOT EXISTS ( select *
from DEP
where e_#CI = #CI );
Subconsultas
select enome
from E
where sal >= all (select sal
from E );
Funes de Agregao
GROUP BY e HAVING
COMPUTE e COMPUTE BY
Funes de Agregao
Funes de Agregao
Q17: Qual a mdia de salrio dos empregados no
departamento de brinquedos?
* Nao podemos responder em alg. rel. . mas facil em SQL.
select avg(sal)
from E, D
where E.dno = D.dno AND
D.dname = brinquedo;
select enome
from E E1
where sal > all
A maioria das
(select avg(sal) consultas SQL requerem
from E E2 all aqui !
where E2.dno = E1.dno);
GROUP BY e HAVING
GROUP BY
Q20: Para cada departamento, liste o nmero total de
empregados do departamento e a soma total dos salrios.
group by
GROUP BY
Os atributos do grouped-by
devem ser exatamente os itens no-
agregado da linha de seleo (na maioria
das SQLs).
GROUP BY
select dnome
from MediaDep
where avgsal > all (select avg(avgsal)
from MediaDep)
AND
noEmps > all (select avg(noEmps)
from MediaDep);
GROUP BY e HAVING
Q24: Mesma que Q22, mas exclua deptos com menos R$10000 na
soma total dos salrios dos seu empregados, e imprima a
resposta em ordem alfabtica.
Create view GrandesDeptos (dnome, avgSal, noEmps)
as select dnome, avg(sal), count(enome)
from E, D
where E.dno = d.dno
group by dnome
having sum(sal) >=10000
order by dnome;
select dnome
from ( select dnome, avg(sal)
from E, D
where E.dno = D.dno
group by dnome)
as resultado (dnome, avgsal)
where avgsal > 2.000
150.60
COMPUTE BY
TTULO (ttulo, tipo, preo)
tipo preo
select tipo, preo
DB_info 30.95 from TTULOS
DB_info 10.40
where tipo like %info
sum
41.35 order by tipo, preo
IA_info 42.05 compute SUM(preo) by tipo
compute SUM(preo)
42.05
sum
150.60
Operaes de Conjunto
EMPREGADOS (E)
DEPARTAMENTOS (D)
select enome
from E
MINUS (EXCEPT)
select enome
from T, E
where T.CPF_emp = E.CPF
Operaes de Conjunto
Q29: Liste os nomes dos empregados que no trabalham
em nenhum projeto
select enome
from E
where NOT EXIST (select *
from T
where T.CPF_emp = E.CPF )
Comparao de Conjuntos
select enome
from E
where ((select pnumero
from T
where T.CPF_emp = E.CPF )
Contains
(select pnumero
from P))
Comparao de Conjuntos
Q31: Liste os nomes dos empregados que trabalham em
todos os projetos
select enome
from E
where NOT EXISTS ( (select pnumero from P)
EXCEPT
(select pnumero
from T
where T.CPF_emp = E.CPF ))
Comparao de Conjuntos
Q32: Liste os nomes dos empregados que trabalham em
todos os projetos
select enome
from E
where NOT EXISTS ( select *
from P
where NOT EXITS
(select *
from T
where T.CPF_emp = E.CPF and ))
T.pnum = P.CPF ))
De AR para SQL
1: seleo select *
R[A = a] from R
where A = a;
5: Diferena select *
R1 - R2 from R1
where * not in
(select *
from R2);
De AR para SQL
5: Diferena select A1, ..., An
R1 - R2 from R1
except
select B1, ..., Bn
from R2);
6: Interseo select A1, ..., An
R1 R2 from R1
intersect
select B1, ..., Bn
from R2);