Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Consultas
Checando valores nulos
Predicado IS [NOT] NULL
Exemplo
select * from Empregado
where dt-nasc is null
select * from Empregado
where dt-nasc is not null
Consultas
Predicado [NOT] IN
Verifica a pertinncia de elementos em um conjunto
Exemplo
select nome
from Empregado
where matr in (1,5,8,9);
select nome
from Empregado
where matr not in (1,5,8,9)
SQL
Funes Agregadas
Funes embutidas (built-in) aplicadas sobre uma coleo
de valores (colunas) do banco de dados
sum
Retorna o somatrio dos valores de uma coleo
avg
Retorna a mdia dos valores de uma coleo
max
Retorna o maior valor de uma coleo de valores
min
Retorna o menor valor de uma coleo
count
Retorna o nmero de elementos de uma coleo
Sintaxe
nome-da-funo (ALL | DISTINCT nome-coluna) | count(*)
No podem ser utilizados na clusula WHERE
8
SQL
Exerccios
16
SQL
Agrupando tuplas no SQL
Aplicar funes agregadas a diferentes grupos de tuplas
Exemplo
Listar a quantidade de empregados por departamento
Clusula
GROUP BY
Exemplo
SQL
Agrupando tuplas no SQL (cont.)
Todas colunas que aparecem na clusula select tm
que aparecer na clusula group by
Exceto os argumentos da funes agregadas
Exemplos
Lista de todos empregados e a quantidade de dependentes que
cada um deles possui.
SQL
Agrupando tuplas no SQL (cont.)
Exemplos (cont.)
26
SQL
Selecionando grupos
Listar nome dos departamentos cuja mdia salarial seja
maior que 7000
Clusula having
Filtro de grupos
Exemplo
select d.nome, avg(salario)
from Departamento d, Empregado e
where d.cod_depart=e.lotacao
group by d.nome
having avg(e.salario)>7000
SQL
Selecionando grupos (cont.)
Exemplos
SQL
Selecionando grupos (cont.)
Exemplos
Listar nome de vendedores e quantidade de vendas efetuadas dos
vendedores com volume de vendas superior a 10000 (classificado
em ordem decrescente por quantidade de vendas), considerando o
seguinte esquema:
Vendedor(matr, nome, salrio)
Vendas(matr,cod_item,qtde, pr-venda,dt-hora-venda)
Estoque(cod_item, referncia, pr_compra,pr_venda,qtde)
select v.nome, count(*) as total_de_vendas
from Vendedor v, Vendas d
where v.matr=d.matr
group by v.nome
having sum(d.qtde*d.pr_venda) > 10000
order by count(*)
Consultas aninhadas
Blocos select-from-where dentro da clusula
WHERE de outra consulta (consulta externa).
Consultas aninhadas
No aninhada
Consultas aninhadas
Aninhada
Consultas aninhadas
Operador de comparao IN
Compara o valor v com um conjunto de valores V.
Resulta TRUE se v um dos elementos em V.
Consultas aninhadas
SQL permite o uso de tuplas de valores em
comparaes.
Devem ser escritas entre parnteses.
SQL
select pnome,salario
from funcionario
where salario > (select avg(salario) from
funcionario);
36
SQL
SQL
Consulta SQL aninhada (cont.)
Usando o Predicado [NOT] IN
Listar os CPFs dos funcionrios que trabalham
em projetos localizados em Maua.
select distinct fcpf
from trabalha_em
where pnr in (
select projnumero
from projeto
where projlocal='Maua'
);
38
Consultas aninhadas
possvel o uso de um conjunto explcito de
valores na clusula WHERE.
Consultas aninhadas
Evite erros em ambiguidades criando apelidos (aliases) para
todas as tabelas referenciadas em uma consulta SQL.
Consultas aninhadas
Consultas aninhadas
Usar outros operadores de comparao para
comparar um nico valor v.
Operador = ANY (ou = SOME)
Retorna TRUE se o valor v igual a algum valor no
conjunto V e, portanto, equivalente a IN.
Consultas aninhadas
select distinct fcpf
from trabalha_em
where pnr = any (
select projnumero
from projeto
where projlocal='Maua'
);
select distinct fcpf
from trabalha_em
where pnr = some (
select projnumero
from projeto
where projlocal='Maua'
);
Consultas aninhadas
select pnome, salario
from funcionario
where salario <= ALL (select salario from
funcionario);
Consultas aninhadas
select pnome, salario
from funcionario
where salario >= ALL (select salario from
funcionario);
Consultas aninhadas
Consulta para retornar os nomes dos funcionrios
cujo salrio maior do que o salrio de todos os
funcionrios no departamento 5.
SQL
Consulta SQL aninhada (cont.)
Predicados SOME, ANY e ALL
48
SQL
So equivalentes
ALL (subconsulta)
SQL
select d.nome
from Empregado e, Departamento d
where d.cod_depart=e.lotao
group by d.nome
having avg(salrio) >=all (select avg(salrio) from Empregado
group by lotao)
50
select pnome
from funcionario
where cpf in (
select fcpf from dependente
);
select pnome
from funcionario
where (
select count(*)
from dependente
where cpf = fcpf
) >= 2;
SQL
Predicado EXISTS
Verifica se o conjunto retornado por uma subconjunto vazio ou
no
Listar empregados que possuem dependentes
select pnome
from funcionario
where exists (
select *
from dependente
where cpf=fcpf
);
58
SQL
EXISTS (subconsulta)
UNIQUE
A funo UNIQUE(C) retorna TRUE se no
houver tuplas duplicadas no resultado da
consulta C.
Junes
Usurios podem especificar uma tabela
resultante de uma operao de juno na
clusula FROM de uma consulta.
Consulta a seguir tem uma nica tabela de juno.
Junes
Tipos
NATURAL JOIN
Natural JOIN sobre duas relaes R e S, nenhuma
condio de juno especificada.
Cria-se uma condio EQUIJOIN implcita para
cada par de atributos com o mesmo nome.
select pnome, nome_dep
from funcionario
natural join departamento as dep
(nome_dep, dnr, cpf_gerente, data_inicio_gerente);
Junes
Tipos
NATURAL JOIN
Junes
Inner join
Tipo padro de juno em uma tabela de juno.
A tupla includa no resultado somente se uma
tupla correspondente existir na outra relao.
Explcito
Implcito
Junes
LEFT OUTER JOIN
Toda tupla na tabela esquerda deve aparecer no
resultado.
Se no houver tupla correspondente:
Preenchido com valores NULL para atributos da
tabela da direita.
Junes
Junes
Junes
RIGHT OUTER JOIN
Toda tupla na tabela direita deve aparecer no
resultado.
Se no houver tupla correspondente:
Preenchido com valores NULL para atributos da
tabela da esquerda.
select pnome, dnome
from funcionario
right outer join departamento
on dnr=dnumero;
Junes
FULL OUTER JOIN
Toda tupla nas tabelas direita e esquerda deve
aparecer no resultado.
select pnome, dnome
from funcionario
full outer join departamento
on dnr=dnumero;
Junes
Sintaxe do Oracle:
+= LEFT OUTER JOIN
=+ RIGHT OUTER JOIN
+=+ FULL OUTER JOIN
Junes
Mltiplas junes em uma mesma consulta.
SQL
d.nome(d.id=e.id_dept(Departamento x Empregado))
Departamento
d.id=e.id_dept
72
Empregado
SQL
Formas de Juno em SQL Avanado (cont.)
Sintaxe da clusula FROM
[ FROM {<tabela_fonte>} [,...n] ]
<table_fonte> ::=
nome_tabela [ [AS] qualificador ]
| <tabela_fonte> <tipo_juno> <tabela_fonte> ON
<condio_juno>
<tipo_juno> ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ <join_hint> ]
JOIN
73
SQL
Formas de Juno em SQL Avanado (cont.)
Sintaxe da clusula FROM (cont.)
Tipos de juno
Juno theta
INNER JOIN
Juno externa esquerda
LEFT OUTER JOIN
Juno externa direita
RIGHT OUTER JOIN
Juno externa completa
FULL OUTER JOIN
Juno theta
Exemplo
74
SQL
Formas de Juno em SQL Avanado (cont.)
Juno Externa (OUTER JOIN)
Adicionar tuplas extras ao resultado de uma
juno natural
75
SQL
Exemplo
76
SQL
Formas de Juno em SQL Avanado (cont.)
RIGHT OUTER JOIN
Exemplo
77
SQL
Formas de Juno em SQL Avanado (cont.)
FULL OUTER JOIN
Calcula o resultado da juno
Adiciona ao resultado da juno
Tuplas das relaes envolvidas na juno que no satisfazem a
condio de juno
Atribui valores nulos aos atributos no definidos para estas tuplas
Exemplo
Listar nome do empregado e o nome de seu departamento. O nome
do empregado deve ser exibido mesmo que ele no possua
departamento. Da mesma forma, o nome do departamento deve
ser exibido mesmo que ele no tenha empregados.
O MySQL no implementa o FULL OUTER JOIN. A alternativa fazer
a unio (UNION) dos resultados do LEFT OUTER JOIN com os
resultados do RIGHT OUTER JOIN. 78
2.
3.
Quando o evento que dispara a ao tiver ocorrido, uma condio opcional pode
ser avaliada.
Se nenhuma condio for especificada, a ao ser executada quando ocorrer o
evento.
Se uma condio for especificada, ela primeiro avaliada e, somente se for
avaliada como verdadeira, a ao da regra ser executada.
A condio especificada na clusula WHEN de um trigger.
A ao a ser tomada.
COMMIT
Confirma a transao corrente.
ROLLBACK
Aborta e desfaz as operaes realizadas na transao corrente.
SQL Vises
Acesso a um banco de dados
Vises (views)
Usos
Simplifica a especificao de certas consultas.
Mecanismo de segurana e autorizao.
SQL Vises
Definio de vises em SQL
CREATE VIEW nome_da_viso
[(nome_coluna {, nome_coluna })]
AS
subquery [WITH CHECK OPTION]
100
Atualizao de viso
Duas
atualizaes
possveis:
SQL Vises
Tipos de vises
Viso virtual
A definio da viso armazenada
Dados da viso no so persistentes
Quanto ao acesso
Somente leitura
Vises que s permitem acesso de leitura
Permitem atualizao
Vises que permitem atualizaes nas tabelas base
SQL Vises
Tipos de vises (cont.)
Viso materializada
Dados e definio so persistentes
Problema de atualizao dos dados da viso
SQL Vises
Exemplos
Definindo vises
create view V1 (nome_departamento, nome_empregado)
as select d.nome,e.nome
from Departamento d inner join Empregado e
on d.id=e.id_dept
create view V2 (nome_empregado, nmero_de_dependentes)
as select nome,salrio
from Empregado
where salrio<700 with check option
SQL Vises
Exemplos
select * from V1
select * from V2 where nmero_de_dependentes>2
select * from V3
matrcula
salrio
----------------------------------- -----------------------caio
500.0
rebeca
500.0
select * from V3
matrcula
salrio
----------------------------------- -----------------------caio
600.0
rebeca
600.0
Comando DROP
Usado para remover elementos nomeados do
esquema, como tabelas, domnios ou restries.
Tambm possvel remover um esquema.
Opes de comportament de DROP:
CASCADE capaz de remover o esquema e todas
as suas tabelas, domnios e outros elementos.
RESTRICT o esquema removido somente se
ele no tiver elementos.
O usurio deve remover individualmente cada
elemento no esquema, para depois remover o
prprio esquema.
Comando DROP
Comando ALTER
Permite a alterao da definio de uma tabela
da base ou de outros elementos de esquema
nomeados.
Aes de alterao de tabela incluem:
Adicionar ou remover uma coluna (atributo).
Alterar uma definio de coluna.
Adicionar ou remover restries de tabela.
Comando ALTER
Exemplos:
Referncias
Elsmari, R., Navathe, Shamkant B. Sistemas
de Banco de Dados. 6 Edio, Pearson
Brasil, 2011. Captulo 5
Silberschatz, A., Korth, H., Sudarshan, S.
Sistema de Banco de Dados. 5 Edio,
Editora Campus, 2006.
Slides Prof. Jos Maria (UFC).
regispires@lia.ufc.br