Você está na página 1de 29

Banco de Dados

Módulo 8 - Modelo Relacional


Consultas e Atualizações em SQL

modulo08.PRZ 1 10/17/01
Consultas em SQL
Consultas em SQL:

estrutura básica da forma select-from-where:

select <lista de resultados>


from <lista de tabelas>
where <qualificação>

consultas simples:
correspondem diretamente à Álgebra Relacional

consultas com aninhamento:


envolvem outras consultas

consultas com agregação:


envolvem operadores de agregação
modulo08.PRZ 2 10/17/01
Consultas Simples
Consultas Simples:

consultas da forma select-from-where:

select <lista de resultados>


from <lista de tabelas>
where <qualificação>

onde a lista de resultados e a qualificação envolvem apenas valores de atributos

ou combinação de consultas simples, das formas:

(Q1 union Q2) Q1  Q2

(Q1 except Q2) Q1 - Q2

(Q1 intersect Q2) Q1  Q2


modulo08.PRZ 3 10/17/01
Consultas Simples
Consultas Simples (cont.):

a qualificação é uma expressão booleana de comparações:

E and F

E or F

not E

modulo08.PRZ 4 10/17/01
Consultas Simples
Consultas Simples (cont.):

comparações simples:

Vk comparação  entre o valor V de um atributo e uma constante k

V  W comparação  entre dos valores V e W de atributos

outras formas de comparação (V é o valor de um atributo) :

V like P V é uma cadeia de caracteres


que deve satisfazer o padrão P

(V between N and M) V é um valor numérico


que deve pertencer ao intervalo [N,M]

V in (a, b,c, ...) V deve pertencer ao conjunto {a,b,c,...}

modulo08.PRZ
V is null V deve ser
5
nulo 10/17/01
Consultas Simples
Consultas Simples x Álgebra Relacional:

Projeção: select Con, End


from Disc

Cod, End (Disc)

Disc Cod End Matr Nível

inf1731 L520 15315 GR

inf1732 L510 11239 GR Seleção: select *


from Disc
inf1732 L520 15315 GR
where End = L510
inf2324 L520 24217 PG
"End=L510 (Disc)

modulo08.PRZ 6 10/17/01
Consultas Simples
Consultas Simples x Álgebra Relacional:
Disc Cod End Matr Nível Junção: select *
inf1731 L520 15315 GR
from Disc, Prof
where Disc.Matr = Prof. Matr
inf1732 L510 11239 GR

inf1732 L520 15315 GR Disc _Disc.Matr=Prof.Matr Prof


inf2324 L520 24217 PG

_Disc.Matr=Prof.Matr
Prof Matr Nome Idade Cod End Matr Nível Matr Nome Idade

15315 Pedro 46 inf1731 L520 15315 GR 15315 Pedro 46

11239 Manuel 33 = inf1732 L510 11239 GR 11239 Manuel 33

24217 José 66 inf1732 L520 15315 GR 15315 Pedro 46

inf2324 L520 24217 PG 24217 José 66

modulo08.PRZ 7 10/17/01
Consultas Simples
Exemplos:

Esquema Relacional do Banco de Dados:

Disc[Cod, End, Matr, Nível] Prof[Matr, Nome, Idade] Dep[Matr, DNome, DIdade]

Estado do Banco de Dados:


Disc Cod End Matr Nível Prof Matr Nome Idade Dep Matr DNome Didade

inf1731 L520 15315 GR 15315 Pedro 46 15315 Pedro 22

inf1732 L510 11239 GR 11239 Manuel 33 11239 Sonia 35

inf1732 L520 15315 GR 24217 José 66 11239 Maria 65

inf2324 L520 24217 PG

modulo08.PRZ 8 10/17/01
Consultas Simples
Exemplos (cont.):

Qual a matrícula dos professores que lecionam


disciplinas na L520?

R1 := selecione Disc onde End = L520;


R2 := projete R1 em Matr;

{ t / ( •s F Disc ) ( t = s[Matr]  s[End] = L520 ) }

select Matr
from Disc
where End = "L520"

modulo08.PRZ 9 10/17/01
Consultas Simples
Exemplos (cont.):

Qual o nome dos professores com mais de 45 anos


que lecionam disciplinas na GR?
R1 := junte Disc e Prof onde DiscPG.Matr = Prof.Matr;
R2 := selecione R1 onde Nível = GR e Idade > 45;
R3 := projete R2 em Nome;

{ n / ( •r F Prof ) ( •s F Disc )
(n = r[Nome]  r[Idade] > 45  s[Nível] = GR  r[Matr] = s[Matr] ) }

select Prof.Nome
from Prof, Disc
where Prof.Idade > 45
and Disc.Nível = "GR"
and Prof.Matr = Disc.Matr

modulo08.PRZ 10 10/17/01
Consultas Simples
Caracteristicas adicionais das consultas simples:

a resposta a uma consulta em SQL pode conter duplicatas:

select distinct ... elimina duplicatas

select all... mantém as duplicatas


select...

a resposta pode ser ordenada:

select A,B,C,...
from ...
where ...
order by B,C
modulo08.PRZ 11 10/17/01
Consultas Simples
Caracteristicas adicionais das consultas simples:

uma tabela TAB pode ser utilizada mais de uma vez:

select ... select ...


from TAB as T, TAB as U from TAB T, TAB U
where ... where ...

os atributos de uma tabela TAB[A,B,C,...] podem ser


renomeados:

select ...
from TAB as T[X,Y,Z,...]
where ...
modulo08.PRZ 12 10/17/01
Consultas Simples
Resumo da sintaxe:

<seleção básica> ::= select <filtro> <lista de resultados>


from <lista de tabelas>
where <qualificação>

<filtro> ::= distinct | all

<lista de resultados> ::= <resultado> | <resultado><lista de resultados>

<resultado> ::= <nome de atributo> |


<nome de tabela>.<nome de atributo> |
<variável>.<nome de atributo> |
<expressão>

<lista de tabelas> ::= <tabela> | <tabela><lista de tabelas>

<tabela> ::= <nome de tabela> as <variável> | <nome de tabela>


modulo08.PRZ 13 10/17/01
Consultas com Aninhamento
Consultas com Aninhamento:

a qualificação de uma consulta com aninhamento P


contém uma ou mais consultas aninhadas

a qualificação de uma consulta aninhada Q


pode ainda referenciar atributos definidos em P.
Neste caso, diz-se que Q é correlacionada com P

modulo08.PRZ 14 10/17/01
Consultas com Aninhamento
Consultas com Aninhamento:

a qualificação de uma consulta com aninhamento P


é uma expressão booleana envolvendo:

termos da Teoria dos Conjuntos:

(Q1 union Q2)

(Q1 except Q2) (a diferença Q1 - Q2)

(Q1 intersect Q2)

(continua na próxima página)

modulo08.PRZ 15 10/17/01
Consultas com Aninhamento

Consultas com Aninhamento (cont.):

comparações entre o valor V de um atributo e a resposta de Q

V in (Q) V deve pertencer ao resultado de Q

V = some (Q) V é igual a alguma tupla no resultado de Q


V = any (Q) V é igual a todas as tuplas no resultado de Q

V  some (Q) generalização para uma comparação 


V  any (Q)

quantificação existencial (ou a sua negação)

exists (Q) o resultado de Q não é vazio

not exists (Q) o resultado de Q é vazio


modulo08.PRZ 16 10/17/01
Consultas com Aninhamento
Exemplos:

Qual o nome dos professores com mais de 45 anos


que lecionam disciplinas na GR?

select Prof.Nome select Nome


from Prof, Disc from Prof
where Prof.Idade > 45 where Idade > 45
and Prof.Matr = Disc.Matr and Matr in (select Matr
and Disc.Nível = "GR" from Disc
where Nivel = "GR")

modulo08.PRZ 17 10/17/01
Consultas com Aninhamento
Exemplos (cont.):

Quais disciplinas são lecionadas por professores


com mais de 45 anos?

select Disc.Cod select Cod


from Prof, Disc from Disc
where Disc.Matr = Prof.Matr where Matr = some (select Matr
and Prof.Idade > 45 from Prof
where Idade > 45)

modulo08.PRZ 18 10/17/01
Consultas com Aninhamento
Exemplos (cont.):

Quais professores tem apenas dependentes mais velhos do que ele?

select Matr
from Prof as P
where P.Idade < any (select DIdade
from Dep
where Dep.Matr = P.Matr)

para cada tupla de Prof,


esta consulta é avaliada,
retornando as idades dos
dependentes do professor

modulo08.PRZ 19 10/17/01
Consultas com Aninhamento

Exemplos (cont.):

Quais professores não tem dependentes?

select Matr
from Prof as P
where not exists (select *
from Dep
where Dep.Matr = P.Matr)

modulo08.PRZ 20 10/17/01
Consultas com Aninhamento

Exemplos (cont.):

Qual a matrícula dos professores que lecionam todas as disciplinas


da GR?

select Matr
from Prof as P
where not exists ( (select *
from Disc
where Disc.Nivel = "GR")
except
(select *
from Disc
where Disc.Matr = P.Matr) )

modulo08.PRZ 21 10/17/01
Consultas com Aninhamento
Exemplos (cont.):

Qual a matrícula dos professores que Disc Cod End Matr Nível
lecionam todas as disciplinas da GR?
inf1731 L520 15315 GR

inf1732 L510 11239 GR


R1 := selecione Disc onde Nível = GR;
inf1732 L520 15315 GR
R2 := projete R1 em Cod;
inf2324 L520 24217 PG
R3 := projete Disc em Cod, Matr;
R4 := R3  R2;
R1 Cod End Matr Nível R2 Cod R3 Cod Matr R4 Matr

inf1731 L520 15315 GR inf1731 inf1731 15315 15315

inf1732 L510 11239 GR inf1732 inf1732 11239

inf1732 L520 15315 GR inf1732 15315

inf2324 24217

modulo08.PRZ 22 10/17/01
Consultas com Agregação
Consultas com Agregação:

a lista de resultados ou a qualificação de uma consulta com


agregação P contém uma ou mais operadores de agregação,
ou seja, operadores que mapeiam conjuntos em valores

a consulta pode conter ainda uma cláusula de agrupamento e uma


condição de agrupamento:

select <lista de resultados>


from <lista de tabelas>
where <qualificação>
group by <lista de atributos de agrupamento>
having <condição de agrupamento>

modulo08.PRZ 23 10/17/01
Consultas com Agregação
Consultas com Agregação (cont.):

operadores de agregação podem ser utilizados


na lista de resultados ou na condição de agrupamento

operadores de agregação:

count retorna a cardinalidade do conjunto

sum retorna a soma dos valores


max retorna o valor máximo (desde que o domínio seja ordenado)
min retorna o valor mínimo (desde que o domínio seja ordenado)
avg retorna a soma dos valores

o argumento pode conter a opção distinct para filtrar duplicatas

modulo08.PRZ 24 10/17/01
Consultas com Agregação
Exemplos:

Qual a média de idade dos professores


que lecionam disciplinas na GR?

select avg( Prof.Idade )


from Prof, Disc
where Prof.Matr = Disc.Matr
and Disc.Nível = "GR"

Quantos professores lecionam disciplinas na GR?

select count ( distinct Disc.Matr )


from Disc
where Disc.Nível = "GR"

modulo08.PRZ 25 10/17/01
Consultas com Agregação
Exemplos:

Liste as disciplinas com o número de professores diferentes


que as lecionam.

select Cod, count ( distinct Matr )


from Disc
group by Cod

Nota: os atributos utilizados na cláusula group by


devem aparecer na lista de resultados

modulo08.PRZ 26 10/17/01
Consultas com Agregação
Exemplos:

Para as disciplinas de graduação que


utilizam mais de 2 salas distintas,
liste o código da disciplina e
o número de salas distintas que a disciplina utiliza.

select Cod, count ( distinct End )


from Disc
where Nivel = "GR"
group by Cod
having count ( distinct End ) > 2

modulo08.PRZ 27 10/17/01
Comandos de Atualização
Inserção:

insert into <nome de tabela>[(<lista de atributos>)] values (<lista de valores>)

insert into <nome de tabela>[(<lista de atributos>)]


select <lista de resultados>
from <lista de tabelas>
where <qualificação>

Remoção:

delete from <nome de tabela> where <qualificação>

Atualização:

update <nome de tabela>


set <lista de atributos e valores>
where <qualificação>
modulo08.PRZ 28 10/17/01
Visões
Definição de uma visão:

create view <nome de tabela>[(<lista de atributos>)]


as select <lista de resultados>
from <lista de tabelas>
where <qualificação>

Atualizações em visões:

permitidas apenas quando o mapeamento


para atualizações das tabelas do esquema conceitual
não é ambígüo

modulo08.PRZ 29 10/17/01

Você também pode gostar