You are on page 1of 330

Banco de Dados

Compilaes de Diversos Autores


Prof. Jos Roberto de Arajo Fontoura
Prof. Fernando Cardeal
Modelo
= Modelo a representao abstrata e simplificada
de um sistema real, com a qual se pode explicar ou
testar o seu comportamento, em seu todo ou em
partes.

Modelo - Exemplo
= Uma planta baixa de um apartamento venda no
jornal de domingo.
= Modelo a representao abstrata e simplificada
de um sistema real.
= Logo, o modelo no o objeto real mas algo que o
representa, com maior ou menor fidelidade.
O Papel do Objeto Observado
= Objeto Observado o objeto que serve de
referncia para ser mapeado pelo observador.

O Objeto Observado pode ser real ou imaginrio.
Principais Questionamentos
QUANTO A MODELAGEM DE DADOS

= O que percebemos ?

= Como eles nos so apresentados ?

= O que devemos buscar ?
Modelagem como um Processo Estruturado.
Etapas:

= Abrangncia

= Nvel de Detalhamento

= Tempo para Produo do Modelo

= Recursos Disponveis
O Processo de Modelagem
Modelagem como um Processo Estruturado.
Definies:

= Abrangncia
Refere-se a profundidade da observao do objeto.

Exemplo: Um artista no bosque ao iniciar uma pintura
j deve ter em mente se observar toda a paisagem
para pint-la ou se focar sua ateno apenas em
uma nica rvore.
O Processo de Modelagem
Modelagem como um Processo Estruturado.
Etapas:

= Nvel de Detalhamento
Refere-se ao nvel de representao da realidade
observada.

Exemplo: No bosque observado, o artista pintar
inclusive o ninho de passarinho que est em
determinada rvore ou somente a rvore ?
O Processo de Modelagem
Modelagem como um Processo Estruturado.
Etapas:

= Tempo para Produo do Modelo
Tem relao intrnseca com a abrangncia e o nvel
de detalhamento.

Exemplo: Um artista pode querer pintar todo o
bosque, com todos os ninhos, entretanto s tem o dia
de hoje para faz-lo.
O Processo de Modelagem
Modelagem como um Processo Estruturado.
Etapas:

= Recursos Disponveis
Refere-se a quantidade e qualidade dos recursos
deixados disposio para serem utilizados.

Exemplo:
O artista pode querer pintar o riacho, mas no dispe
da cor necessria para faz-lo naquele momento, ou
no tem a quantidade necessria

O Processo de Modelagem
Modelagem como um Processo Estruturado.
Etapas :

= A observao dos Objetos
= O entendimento dos Conceitos
= A Representao dos Objetos
= A Verificao de Fidelidade e Coerncia
= A validao do Modelo

Execuo da Modelagem
Modelagem como um Processo Estruturado.
Etapas :

= A observao dos Objetos

Elementos como: entrevistas, anlise de documentos,
reunies, questionrios e outros mtodos so
importantes na obteno das caractersticas do
objeto.

Execuo da Modelagem
Modelagem como um Processo Estruturado.
Etapas :

= O entendimento dos Conceitos

O entendimento dos conceitos se refere na verdade
s regras de como se comportam determinados
eventos na empresa, ou seja, as regras de negcio.
Execuo da Modelagem
Modelagem como um Processo Estruturado.
Etapas :

= A Representao dos Objetos

A dominao de determinada tcnica de
representao de dados de extrema importncia,
entretanto caso no tenhamos absorvido o
funcionamento interno da empresa (regra de
negcio), de nada adiantar ser expert nessa ou
naquela tcnica.
Execuo da Modelagem
Modelagem como um Processo Estruturado.
Etapas :

= A Verificao de Fidelidade e Coerncia

Aps a utilizao de uma determinada tcnica, deve-
se observar atentamente se o modelo resultante
representa fielmente o que foi observado do
funcionamento da empresa.
Execuo da Modelagem
Modelagem como um Processo Estruturado.
Etapas :

= A validao do Modelo

Consiste na verdade em testar o modelo.
Se em um primeiro teste no conseguimos descobrir
algo que possa ser melhorado, devemos realmente
ficar preocupados.

Execuo da Modelagem
Objetivo do Modelo de dados
= Representar um ambiente observado;
= Servir de instrumento para a comunicao;
= Favorecer o processo de verificao e validao;
= Capturar aspectos de relacionamentos entre os
objetos observados;
= Servir como referencial para a gerao de
estruturas de dados;
= Estabelecer conceitos nicos a partir de vises
diversas.
Objetivo do Modelo de dados
= Representar um ambiente observado:

Abstrair do ambiente observado o seu funcionamento,
ou seja as regras impostas pelo negcio ou pelas
pessoas.
Seja um sistema de informaes, uma descrio de
execuo de tarefas ou um processo de fabricao.
Objetivo do Modelo de dados
= Representar um ambiente observado:

Abstrair do ambiente observado o seu funcionamento,
ou seja as regras impostas pelo negcio ou pelas
pessoas.
Seja um sistema de informaes, uma descrio de
execuo de tarefas ou um processo de fabricao.
Objetivo do Modelo de dados
= Representar um ambiente observado;
= Servir de instrumento para a comunicao;
= Favorecer o processo de verificao e validao;
= Capturar aspectos de relacionamentos entre os
objetos observados;
= Servir como referencial para a gerao de
estruturas de dados;
= Estabelecer conceitos nicos a partir de vises
diversas.
O Que Banco de Dados
um sistema computadorizado de registros,
onde os usurios podem:
Acrescentar novos arquivos ao Banco de
Dados
Inserir dados em arquivos existentes
Buscar dados em arquivos existentes
Excluir dados em arquivos existentes
Alterar dados em arquivos existentes
Remover Arquivos existentes do Banco de
Dados
Banco de Dados
Integrado a unificao de vrios
arquivos que, de outro modo, seriam
distintos, com a eliminao de qualquer
redundncia parcial ou total entre esses
arquivos.
Compartilhado quando diferentes
usurios podem ter acesso aos mesmos
dados, possivelmente ao mesmo tempo.
Usurios
Programadores de Aplicaes So
responsveis pelas aplicaes que acessam
os bancos de dados, essas escritas em
alguma linguagem.
Usurios Finais Os que acessam o banco de
dados interativamente por meio de uma das
aplicaes.
DBA Administrador de Banco de Dados o
responsvel pela manuteno do banco de
dados operacional.
Dados
Dados Persistentes So os dados que
efetivamente esto no banco, no so
transitrios como os dados ainda na
memria, e uma vez aceito no mesmo
s podem ser removidos por alguma
requisio explcita ao SGBD.
Dados
Um modelo de dados uma definio
abstrata, autnoma e lgica dos
objetos, operadores e outros elementos
que, juntos, constituem a mquina
abstrata com a qual os usurios
interagem. Os objetos nos permitem
modelar a estrutura dos dados e os
operadores nos permitem modelar seu
comportamento.
Dados
Implementao uma representao
fsica em uma mquina real dos
componentes da mquina abstrata que,
juntos, constituem esse modelo.
Banco de Dados
Abordagem dos Bancos de Dados
Os dados podem ser compartilhados;
A redundncia pode ser reduzida;
A inconsistncia pode ser evitada (at certo ponto);
O suporte a transaes pode ser fornecido;
A integridade pode ser mantida;
A segurana pode ser reforada;
Requisitos contraditrios podem ser equilibrados;
Os padres podem ser impostos.

Banco de Dados
Independncia de Dados
Fsica Imunidade de programas de
aplicao a alteraes no modelo de
armazenar fisicamente os dados e obter
acesso a eles.
Arquitetura
Vises
Interno;
Conceitual;
Externo.
Arquitetura
Mapeamentos
Conceitual / Interno Define a
correspondncia entre a viso
conceitual e o banco de dados
armazenado.
Externo / Conceitual Define a
correspondncia entre uma viso
externa especfica e a viso conceitual.
Arquitetura
DBA Administrador de Banco de Dados
Define o Esquema Conceitual
Define o Esquema Interno
Tem Contato com o Usurio
Define Restries de Segurana e Integridade
Define Normas de Descarga e Recarga
Monitora o Desempenho e Responde a
Requisitos de Mudanas
S.G.B.D
Definies de Dados;
Manipulao de Dados;
Otimizao e Execuo;
Segurana e Integridade de Dados;
Recuperao de Dados e Concorrncia;
Dicionrio de Dados;
Desempenho.

Banco de Dados Relacional
Modelo Relacional
Aspecto Estrutural: Os dados no banco so
percebidos pelo usurio unicamente como
tabelas.
Aspecto de Integridade:Essas tabelas
satisfazem a certas restries de integridade.
Aspecto Manipulador:So manipuladores os
operadores de restrio, projeo e juno.
Banco de Dados Relacional
Aspecto de Restrio extrai linhas
especificas de uma tabela;
Aspecto de projeo extrai colunas
especificas de uma tabela;
Aspecto de juno une duas tabelas
com base em valores comuns em uma
tabela comum.
Banco de Dados Relacional
Modelo Relacional consiste em cinco componentes:
Uma coleo ilimitada de tipos escalares (incluindo o
tipo booleano ou valor verdade)
Um gerador de tipo de relao e uma interpretao
pretendida para esses tipos de relaes gerados
Recursos para definio de RelVars desse tipo de
relaes gerados
Um operador de atribuio relacional para atribuio
de valores de relaes a essas RelVars
Uma coleo ilimitada de operadores relacionais
genricos (a lgebra relacional) para derivar valores
de relaes a partir de outros valores de relaes
SQL
Definio de Dados (DDL)
Introduo
Exemplos de SGBDs que seguem o padro SQL:
Oracle, DB2, Sybase, Informix, SQLServer, entre
outros.
Principais Intrues da linguagem de definio de
dados (DDL Data Definition Language)
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE VIEW
DROP VIEW
CREATE INDEX
DROP INDEX
Tabelas bsicas
Tabela do sistema relacional consiste em
Uma linha de cabealho (que especifica uma ou mais
colunas) +
Zero ou mais linhas de valores de dados (cada linha contm
um valor de dado para cada coluna especificada na linha do
cabealho)
Os nmeros da linhas variam em funo do momento
No existe ordem das linhas. As linhas de uma tabela
relacional so consideradas desordenadas. Uma
relao um conjunto matemtico (conjunto de
linhas) conjuntos em matemtica no tm
ordenao
Tabelas bsicas
Tabela autnoma (tem existncia prpria) que recebe
um nome
As tabelas construdas como resultado de uma
consulta no tem nome prprio e tem uma existncia
efmera
Uma tabela definida com as seguintes
caractersticas
Nome da tabela
Nomes das colunas, tipos de dados e tamanhos
Restries de Integridade (depende de cada SGBD)
O comando SQL utilizado para a definio de tabelas
o CREATE TABLE
CREATE TABLE
Sintaxe

CREATE TABLE nome_tabela
( nome_coluna tipo_de_dado [restrio_de_coluna],

[restrio_de_tabela])

Restrio de coluna: refere-se apenas coluna
em questo
Restrio de tabela: refere-se toda linha,
normalmente utilizada para referncias entre mais de
uma coluna
Restries de Integridade (Oracle)
NULL (NOT NULL)
A clusula NOT NULL garante que a coluna no poder conter valores
nulos
Nulo um valor especial, usado para representar valor desconhecido
ou no aplicvel. Operaes aritmticas com um valor nulo tm como
resultado nulo
NULL no zero
NULL no espao vazio
Os nicos operadores que podem ser utilizados para comparao com
valor nulo so:
IS NULL e IS NOT NULL
se A e B tm valor null:
A IS NULL TRUE
A = NULL Unknown
A = B FALSE
A = NULL Unknown
Restries de Integridade (Oracle)
UNIQUE
Uma coluna com restrio de UNIQUE, assim como uma
chave primria, no pode conter valores repetidos na tabela
PRIMARY KEY (chave primria)

CREATE TABLE DEPARTAMENTO
( Cod_Depto Smallint NOT NULL,
Nome_Depto VARCHAR(20) NOT NULL,
PRIMARY KEY (Cod_Depto) )
ou
CREATE TABLE DEPARTAMENTO
( Cod_Depto Smallint NOT NULL PRIMARY KEY,
Nome_Depto VARCHAR(20) NOT NULL )
Restries de Integridade (Oracle)
FOREIGN KEY (chave estrangeira)

CREATE TABLE FUNCIONARIO
(
Cod_Depto Smallint NOT NULL,

FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO);
ou

CREATE TABLE FUNCIONARIO
(
Cod_Depto Smallint NOT NULL REFERENCES
DEPARTAMENTO);
Restries de Integridade (Oracle)
CHECK
Define uma condio que deve ser
satisfeita
Permite a comparao de colunas da
mesma tabela
Definio de esquemas - Exemplo
Exemplo de definio de esquemas Oracle (ANSI
SQL-89)
CREATE TABLE DEPARTAMENTO (
Cod_Depto Smallint NOT NULL,
Nome_Depto VARCHAR(20) NOT NULL,
PRIMARY KEY (Cod_Depto) );
CREATE TABLE FUNCIONARIO (
Cod_Func Integer NOT NULL,
Cod_Depto Smallint NOT NULL,
Nome VARCHAR(40) NOT NULL,
Projeto CHAR(10) DEFAULT 'DISPONIVEL' ,
Data_Admissao DATE,
Salario NUMBER(10,2) CHECK (Salario >= 500),
Cod_Ger Integer,
PRIMARY KEY (Cod_Func),
FOREIGN KEY (Cod_Ger) REFERENCES FUNCIONARIO,
FOREIGN KEY (Cod_Depto) REFERENCES DEPARTAMENTO);
Restries de Integridade
Nomeando Restries de Integridade

No Oracle, as restries de integridade
(constraints) podem ter um nome, sendo
que possvel ligar ou desligar estas
restries (til em caso de importao de
dados)

Sintaxe Oracle:
[CONSTRAINT nome_constraint] restrio
Restries de Integridade
Exemplo de constraints

CREATE TABLE FUNCIONARIO (
Cod_Func INTEGER NOT NULL,
Cod_Depto SMALLINT NOT NULL,
Nome VARCHAR(40) NOT NULL,
Projeto CHAR(10) DEFAULT 'DISPONIVEL',
Data_Admissao DATE,
Salario NUMBER(10,2)
CONSTRAINT maior5002 CHECK (Salario >= 500),
Cod_Ger INTEGER,
CONSTRAINT XPKFUNCIONARIO PRIMARY KEY (Cod_Func),
CONSTRAINT XFK_FUNC_FUNC
FOREIGN KEY (Cod_Ger) REFERENCES FUNCIONARIO,
CONSTRAINT XFK_FUNC_DEPTO
FOREIGN KEY (Cod_Depto) REFERENCES
DEPARTAMENTO);
Integridade Referencial
Manuteno da Integridade Referencial
Cod_Depto

Nome_Depto











Cod_Func

Cod_Depto

Nome

Projeto

Data_Admissao

Salario

Cod_Ger

























































Integridade Referencial
Como o SGBD garante a Integridade Referencial:
Restrict
Comando SQL
Efeito
TABELA-PAI TABELA-FILHO
INSERT Sempre OK se o valor
da PK for nico
OK se o valor da FK
existe como PK
UPDATE Permitido se a
operao no deixar
FKs nas tabelas-filho
sem valor
correspondente na PK
da tabela-pai
Permitido se o novo
valor da FK ainda
referencie um valr
existente de PK.

DELETE Permitido se nenhuma
linha na tabela-filho
referencia o valor da
PK
Sempre OK
Integridade Referencial
Como o SGBD garante a Integridade Referencial:
ON DELETE CASCADE Oracle
CREATE TABLE FUNCIONARIO (

FOREIGN KEY (Cod_Depto)
REFERENCES DEPARTAMENTO
ON DELETE CASCADE);










Outras formas de manuteno da integridade referencial devem
ser implementadas atravs de Triggers
TABELA-PAI TABELA-
FILHO
INSERT Idem anterior Idem anterior
UPDATE Idem anterior Idem anterior
DELETE OK OK
ALTER TABLE
Permite a alterao da definio de uma tabela aps
sua criao, mesmo que a j exista contedo
Pode-se:
Adicionar uma coluna
Modificar uma coluna (tipo de dado, tamanho, default)
Adicionar ou remover restries (Oracle)
Habilitar ou desabiltar restries
Colunas no podem ser removidas via ALTER TABLE
ALTER TABLE
Sintaxe:

ALTER TABLE nome_tabela
[ADD nome_coluna tipo_de_dado [NOT NULL] [outras opes] ]
[MODIFY nome_coluna []]

Exemplos de alteraes sobre colunas:

ALTER TABLE DEPARTAMENTO
ADD (DESCRICAO CHAR(20) )

ALTER TABLE FUNCIONRIO
MODIFY (DESCRICAO CHAR(40) )
ALTER TABLE
Mudanas de tipos de dados em atributos existentes usualmente
so operacionalizadas atravs da deleo da tabela (drop) e
nova criao (create), recarregando os dados
No SGBD Oracle a mudana de um tipo de dado ou diminuio
do tamanho pode ser realizada via ALTER TABLE se tabela
estiver vazia
A insero de um novo atributo em uma tabela com contedo
deve ser realizada inicializando o mesmo com valor nulo
Usualmente usa-se o comando ALTER TABLE para a criao das
chaves estrangeiras, evitando-se assim o problema das relaes
de precedncia (como a seguir)
ALTER TABLE
Sintaxe de alteraes sobre restries
ALTER TABLE nome_tabela
[DROP CONSTRAINT []]
[MODIFY nome_coluna []]
[ENABLE CONSTRAINT []]
[DISABLE CONSTRAINT []]
Exemplos:
CREATE TABLE FUNCIONARIO (
Cod_Func INTEGER NOT NULL,
Cod_Depto SMALLINT NOT NULL,

Cod_Ger INTEGER NULL,
PRIMARY KEY (Cod_Func) );
ALTER TABLE
Exemplos:
(sem nomear a FK)

ALTER TABLE FUNCIONARIO
ADD (FOREIGN KEY (Cod_Ger)
REFERENCES FUNCIONARIO) ;

(nomeando a FK)

ALTER TABLE FUNCIONARIO
ADD (CONSTRAINT FK_FUNC_DEPTO FOREIGN KEY (Cod_Depto)
REFERENCES DEPARTAMENTO) ;
DROP TABLE
Remove uma tabela e todas as suas
linhas

Sintaxe:

DROP TABLE nome_tabela [CASCADE
constraints]
Outros Comandos
RENAME (Oracle)
Altera o nome de uma tabela, viso, sequence o sinnimo
Exemplo:
RENAME PESSOA TO FUNCIONARIO

TRUNCATE (Oracle)
Remove todas as linhas de uma tabela e libera o espao
fsico usado pela mesma
Exemplo:
TRUNCATE FUNCIONARIO
Outros Comandos
Comentrios em tabelas (Oracle)
Adiciona texto com comentrios de uma
tabela
Exemplo:

COMMENT ON TABLE FUNCIONARIO IS Informacoes sobre os
funcionarios
Tipos de Dados
Comit ANSI definiu um conjunto de tipos de dados
(padro ANSI)
Os SGBDs utilizam os tipos de dados ANSI (nem
todos) alm de outros tipos especficos
Tipos de dados mais comuns (ANSI)
INTEGER: valor inteiro, usalmente implementado com
preciso de 32-bits, que pode ser usado para armazenar
valores no intervalo de x+- 2.147.483.647
(-2
31
a 2
31
-1)
SMALLINT: valor inteiro, usalmente implementado com
preciso de 16-bits, que pode ser usado para armazenar
valores no intervalo de +- 32.767
Tipos de Dados
Tipos de dados mais comuns (ANSI)
NUMERIC (p[,q]), DEC ou DECIMAL (p[,q]): nmero decimal
em ponto fixo com quantidade total de p dgitos e q dgitos
decimais. Exemplo: DECIMAL(6,2) representa +- 9999,99
FLOAT(n): nmero em ponto flutuante com preciso n
REAL: nmero em ponto flutuante com preciso pr-
definida, usualmente de 32 bits (single)
DOUBLE: nmero em ponto flutuante com preciso pr-
definida, usualmente de 52 bits (double)
CHAR (n): cadeia de caracteres de comprimento fixo
Tipos de Dados
Tipos de dados mais comuns (ANSI)
CHAR VARYING(n): cadeia de caracteres de comprimento
varivel e tamanho mximo n
DATE: data-calendrio, em formato dependente da
implementao
TIME: tempo-do-dia
TIMESTAMP: combinao de date e time
Tipos de dados Oracle
VARCHAR2(tamanho): Tamanho obrigatrio e o
mximo 2000
NUMBER(p,e): preciso entre 1 a 38, escala de -84 a 127
Tipos de Dados
Tipos de dados Oracle
LONG: caracteres at 2GB (Oracle) - usado para
textos. Uma tabela somente pode possuir um
campo LONG
DATE: Informao de data e tempo: sculo, ano,
ms, dia, hora, minuto, segundo
RAW(tamanho): dados binrios at 255 bytes
CHAR(tamanho): Tamanho fixo at 255 bytes,
default 1
LONG RAW: dados binrios at 2GB (Oracle)
Tipos de Dados
Converso de tipos de dados ANSI para Oracle
O Oracle aceita criao de tabelas com tipos de dados ANSI,
convertendo para seus tipos de dados internos

Tipo SQL ANSI Tipo Oracle
CHARACTER(n), CHAR(n) CHAR(n)
CHARACTER VARYING(n), CHAR
VARYING(n),
VARCHAR(n)
NUMERIC(p,s), DECIMAL(p,s),
DEC(p,s)
NUMBER(p,s)
INTEGER, INT, SMALLINT NUMBER(38)
FLOAT(b), DOUBLE PRECISION,
REAL
NUMBER
Tipos de Dados
Tipo de dado DATE
Datas so armazenadas em formato interno de 7 bytes, sendo
necessrio uso de funo de converso TO_DATE ou o formato
padro DD-MES-AA
Armazenamento de data sem tempo definido: usa tempo default
que 12:00:00am
Data default primeiro dia do ms corrente
Data e hora corrente: SYSDATE
Operaes aritmticas sobre DATE
SYSDATE + 1 = amanh
SYSDATE - 7 = semana passada
SYSDATE + (10/1440) = agora + 10 minutos
Tipos de Dados
Operaes aritmticas sobre DATE
multiplicao e diviso: no aplicvel
exemplo de funes especficas
ADD_MONTHS
MONTHS_BETWEEN
Regras para comparao de tipos de dados caracter
Tipo Regra Resultado
CHAR blank-padded a = a
VARCHAR2 non-padded a > a
Sequences
Objeto do esquema que pode gerar nmeros seqenciais nicos
(usados para gerncia de pks)
Representado como inteiros de 38 dgitos
Independentes das tabelas
Armazenados como linhas em uma nica tabela da tablespace
SYSTEM
Pode-se definir valor inicial e incremento
CREATE SEQUENCE seq_pedido
START WITH 100
INCREMENT BY 2;
Referenciados pelas pseudocolunas CURRVAL (valor atual) e
NEXTVAL (prximo valor), que podem ser prefixados com o
nome da sequence. Ex: seq_pedido.nextval e
seq_pedido.currval
SQL
Manipulao de Dados (DML)
Sumrio
JOIN
INNER JOIN
OUTER JOIN
SELF JOIN
GROUP BY
HAVING
ORDER BY
Junes
Para a consulta de dados de mais de uma tabela usa-se a
operao de juno
As linhas das tabelas so combinadas usando valores comuns,
normalmente de chaves primrias e estrangeiras
A condio de juno especificada na clusula WHERE

SELECT
FROM tabela1, tabela2
WHERE tabela1.coluna1 = tabela2.coluna2
q Condio de juno
Junes
Aconselha-se que os nomes das colunas sejam
precedidos pelos nomes das tabelas por motivos de
clareza
Nos casos em que o mesmo nome aparece em mais
do que uma tabela na juno, esta prefixao
obrigatria para a resoluo de ambigidades
Quando a condio de uma juno a igualdade, a
juno chamada de Equijoin
Em um Equijoin a tabela resultante apresenta as
colunas da condio de juno em duplicidade
Equijoin
Numero
Pedido
Cod_
Func
Cod_
Cliente
Data_
Pedido
Data_
Entrega
Numero_
Pedido
Cod_
Produto
Qtdade
100 F10 C23 01/05/1998 01/05/1998 100 P01 1
101 F03 C21 01/05/1998 02/05/1998 100 P05 2
102 F10 C21 02/05/1998 100 P02 5
101 P01 5
102 P01 5
102 P02 2

PEDIDO ITEM_PEDIDO
SELECT *
FROM PEDIDO, ITEM_PEDIDO
WHERE PEDIDO.Numero_Pedido = ITEM_PEDIDO.Numero_Pedido
Equijoin
Nmero_
Pedido
Cod_
Func
Cod_
Cliente
Data_
Pedido
Data_
Entrega
Numero_
Pedido
Cod_
Produto
Qtdade
100 F10 C23 01/05/1998 01/05/1998 100 P01 1
100 F10 C23 01/05/1998 01/05/1998 100 P05 2
100 F10 C23 01/05/1998 01/05/1998 100 P02 5
101 F03 C21 01/05/1998 02/05/1998 101 P01 5
102 F10 C21 02/05/1998 102 P01 5
102 F10 C21 02/05/1998 102 P02 2

Equijoin
Uma juno natural um Equijoin onde a tabela resultante no
apresenta as colunas da condio de juno em duplicidade:

SELECT Cod_Func, Cod_Cliente, Data_Pedido, Data_Entrega, ITEM_PEDIDO.*
FROM PEDIDO, ITEM_PEDIDO
WHERE PEDIDO.Numero_Pedido = ITEM_PEDIDO.Numero_Pedido
Cod_
Func
Cod_
Cliente
Data_
Pedido
Data_
Entrega
Numero_
Pedido
Cod_
Produto
Qtdade
F10 C23 01/05/1998 01/05/1998 100 P01 1
F10 C23 01/05/1998 01/05/1998 100 P05 2
F10 C23 01/05/1998 01/05/1998 100 P02 5
F03 C21 01/05/1998 02/05/1998 101 P01 5
F10 C21 02/05/1998 102 P01 5
F10 C21 02/05/1998 102 P02 2

Join
Mltiplas condies:
Uma juno pode utilizar mais do que uma condio:

SELECT *
FROM PEDIDO, ITEM_PEDIDO
WHERE PEDIDO.Numero_Pedido = ITEM_PEDIDO.Numero_Pedido AND
Cod_Cliente = C21 AND Data_Pedido > 01-May-98
Nmero_
Pedido
Cod_
Func
Cod_
Cliente
Data_
Pedido
Data_
Entrega
Numero_
Pedido
Cod_
Produto
Qtdade
102 F10 C21 02/05/1998 102 P01 5
102 F10 C21 02/05/1998 102 P02 2

Join
Mltiplas tabelas:
Uma juno pode utilizar mais do que duas tabelas:

SELECT Cod_Filme, Nome_Filme
FROM FILME, PRODUCAO, PAIS
WHERE PAIS.Nome = Brasil AND
PRODUCAO.Nome = PAIS.Nome AND
PRODUCAO.Cod_Filme = FILME.Cod_Filme
Sinnimos
Um sinnimo (alias) uma palavra que colocada aps o
nome da tabela na clusula FROM, podendo ser usada para
referenciar esta tabela nas demais clusulas
Sinnimos so utilizados para simplificar e facilitar a leitura
de consultas extensas
Join
Sinnimos
SELECT c.nome Nome do Cliente,
c.cod_regiao Codigo Regiao,
r.nome Nome Regio
FROM CLIENTE.c, REGIAO.r
WHERE c.cod_regiao = r.cod

Alm da igualdade outras condies
podem ser utilizadas em uma juno
Join
Nome Cargo Salario Faixa Menor_Salario Maior_Salario
Joo Analista 1200,00 F10 0,01 200,00
Ana Programador 800,00 F20 200,01 500,00
Maira Analista 1500,00 F30 500,01 1000,00
Pedro Programador 1200,00 F40 1000,01 1500,00
Vera Gerente 3000,00 F50 15001,00 3000,00

FUNCIONRIO TABELA_SALARIAL
SELECT f.nome, f.cargo, f.salario, t.faixa
FROM FUNCIONARIO f, TABELA_SALARIAL t
WHERE f.salario BETWEEN t.menor_salario AND t.maior_salario
Nome Cargo Salario Faixa






Produto Cartesiano
Quando omite-se a clusula WHERE
operao realizada o produto
cartesiano, onde todas as linhas da
primeira tabela so combinadas com
todas as linhas da segunda tabela
SELECT
FROM tabela1, tabela2

Inner Join
Somente as linhas que satisfazem a condio de
juno fazem parte da tabela resultante de um JOIN.
Esta operao tambm chamada de INNER JOIN
Em algumas situaes necessrio que todas as
linhas de uma tabela estejam presentes no resultado,
mesmo que no satisfaam as condies. Estes casos
no so resolvidos com o uso do INNER JOIN, mas
com o uso de uma extenso do operador de juno
denominado OUTER JOIN
Inner Join
Exemplo




Se fosse utilizada a seguinte sentena (INNER JOIN)
para apresentar TODOS os funcionrios da empresa
com a lista de pedidos realizados
SELECT F.Cod_Func, F.Nome, Numero_Pedido, Cod_Cliente
FROM FUNCIONARIO F, PEDIDO P,
WHERE F.Cod_Func = P.Cod_Func
Numero
Pedido
Cod_
Func
Cod_
Cliente
Data_
Pedido
Data_
Entrega
Cod_Func Cod_
Filial
Nome
1 1 1 01-May-98 01-May-98 1 348 JOAO DA SILVA
2 1 2 01-May-98 02-May-98 2 348 JOSE DA SILVA
3 3 1 02-May-98 03-May-98 3 348 SILVA DA SILVA
4 4 3 03-May-98 4 345 GAUCHO DA FRONTEIRA
5 4 3 13-May-98


Inner Join






No teramos o resultado desejado, pois como pode
ser visto os dados do funcionrio JOSE DA SILVA
no aparecem na tabela resultante acima
Cod_Func Nome Numero
Pedido
Cod_
Cliente
1 JOAO DA SILVA 1 1
1 JOAO DA SILVA 2 2
3 SILVA DA SILVA 3 1
4 GAUCHO DA FRONTEIRA 4 3
4 GAUCHO DA FRONTEIRA 5 3

Outer Join
O objetivo de um OUTER JOIN permitir a
representao na tabela resultante de TODAS as
linhas de uma tabela, mesmo aquelas que no
atendam s condies de juno
O resultado de um OUTER JOIN formado da
seguinte forma, sendo que as linhas da tabela que
no tem correspondncia so complementadas com
nulos:
OUTER JOIN = Resultado do INNER JOIN + Linhas da
tabela sem correspondncia
Outer Join
Exemplo:




Foram definidos trs tipos de OUTER JOIN entre duas
tabelas: Left, Right e Full Outer Join
Sintaxe SQL-92:
tab1 NATURAL (LEFT | RIGHT | FULL) OUTER JOIN tab2
tab1 (LEFT | RIGHT | FULL) OUTER JOIN tab2 ON condio
Numero
Pedido
Cod_
Func
Cod_
Client
e
Data_
Pedido
Data_
Entrega
Cod_
Func
Cod_
Filial
Nome
1 1 1 01-May-98 01-May-98 1 348 JOAO DA SILVA
2 1 2 01-May-98 02-May-98 2 348 JOSE DA SILVA
3 3 1 02-May-98 03-May-98 3 348 SILVA DA SILVA
4 4 3 03-May-98 4 345 GAUCHO DA FRONTEIRA
5 4 3 13-May-98


Linha sem correspondncia
Outer Join
LEFT OUTER JOIN
Left Outer Join = Inner Join + linhas no participantes da tabela
esquerda
SELECT F.Cod_Func, F.Nome, Numero_Pedido, Cod_Cliente
FROM FUNCIONARIO F, PEDIDO P
WHERE F.Cod_Func NATURAL LEFT OUTER JOIN P.Cod_Func
Cod_
Func
Nome Numero
Pedido
Cod_
Cliente
1 JOAO DA SILVA 1 1
1 JOAO DA SILVA 2 2
3 SILVA DA SILVA 3 1
4 GAUCHO DA FRONTEIRA 4 3
4 GAUCHO DA FRONTEIRA 5 3
2 JOSE DA SILVA

Linhas sem correspondncia so complementadas com nulos
Outer Join
RIGHT OUTER JOIN
Right Outer Join = Inner Join + linhas no participantes da tabela
direita
FULL OUTER JOIN
Full Outer Join = Inner Join + linhas no participantes de ambas
tabelas
Sintaxe Oracle:
Colocar o sinal (+) na condio de juno, ao lado da coluna que
conter valores nulos em caso de no haver correspondncia de
valores
SELECT
FROM tabela1, tabela2
WHERE tabela1.coluna1 ( + ) = tabela2.coluna2
Outer Join
Sintaxe Oracle:
O operador de OUTER JOIN somente pode aparecer em um
dos lados da expresso
Uma condio envolvendo um OUTER JOIN no pode usar o
operador IN assim como no pode estar ligada a outra
condio pelo operador OR

SELECT F.Cod_Func, F.Nome, Numero_Pedido, Cod_Cliente
FROM FUNCIONARIO F, PEDIDO P
WHERE F.Cod_Func = P.Cod_Func (+)

Equivale a um left outer join
Self Join
Juno de linhas de uma mesma tabela
Nem sempre uma juno envolve duas tabelas.
Algumas vezes necessrio juntar uma tabela com
ela mesma, criando um SELF JOIN.
Para realizar esta operao necessrio simular a
existncia de duas tabelas, o que feito atravs da
criao de dois sinnimos para a mesma tabela na
clusula FROM
Ex.: listar os nomes de todos os gerentes
SELECT DISTINCT ger.nome Nome Gerente
FROM FUNCIONARIO func, FUNCIONARIO ger
WHERE func.Cod_Ger = ger.Cod_Func
Self Join
Cod_Func Nome Cod_
Ger
1 JOAO DA SILVA 4
2 JOS DA SILVA 1
3 SILVA DA SILVA 1
4 GAUCHO DA
FRONTEIRA


Func
Ger
Cod_Func Nome Cod_
Ger
1 JOAO DA SILVA 4
2 JOS DA SILVA 1
3 SILVA DA SILVA 1
4 GAUCHO DA
FRONTEIRA


Agrupamentos
As funes de grupo operam sobre grupos de tuplas
(linhas)
Retornam resultados baseados em grupos de tuplas
em vez de resultados de funes por tupla individual
As clusulas GROUP BY e HAVING podem ser
adicionadas ao comando SELECT, aumentando sua
funcionalidade para a manipulao de grupos
agregados
GROUP BY
A clusula GROUP BY do comando SELECT utilizada para
dividir tuplas em grupos menores
Agrupamentos
GROUP BY
Combina linhas em grupos, produzindo uma linha resultante para
cada grupo
A clusula GROUP BY pode ser usada para dividir as tuplas de uma
tabela em grupos menores
As funes de grupo devolvem uma informao sumarizada para
cada grupo
Formando grupos: Listar os nomes dos funcionrios e os cdigos
das filiais onde eles trabalham
SELECT Nome, Cod_Filial, Salario
FROM FUNCIONARIO
Nome Cod_Filial Salario
JOAO DA SILVA 348 1800,00
JOSE DA SILVA 348 1400,00
SILVA DA SILVA 348 1700,00
GAUCHO DA
FRONTEIRA
345 1800,00
Agrupamentos
GROUP BY
Exemplo: Listar a quantidade de funcionrios lotados por filial

SELECT Cod_Filial, COUNT(*) Quantidade
FROM FUNCIONRIO
GROUP BY Cod_Filial



A tabela resultante apresenta uma linha para cada Cod_Filial
O COUNT(*) mostra a quantidade de linhas de cada Cod_Filial
(grupo), ordenados por Cod_Filial (a ordenao pode ser
modificada atravs da clusla Order By)

Cod_
Filial
Quantidade
345 1
348 3
Agrupamentos

GROUP BY
Exemplo:
SELECT Cod_Filial, COUNT(*) Quantidade
FROM FUNCIONRIO
WHERE Cod_Filial = 348 AND Salario > 1500,00
GROUP BY Cod_Filial




Todas as colunas que aparecem na clusula SELECT que no estejam em
funes de agregao devem estar na clusula GROUP BY
A coluna que aparece na clusula GROUP BY no necessita estar na
clusula SELECT, embora os resultados tenham maior significado nestes
casos

Cod_
Filial
Quantidade
348 2
Agrupamentos
HAVING
A clusula HAVING pode ser utilizada para
especificar quais grupos devero ser
exibidos, portanto restringindo-os
Estabelece condies que restringem os
grupos resultantes
Restringe a participao de grupos na
tabela resultante
Agrupamentos
HAVING
Exemplo: Selecionar os cdigos de filiais e a mdia dos
salrios das filiais cuja mdia maior do que R$ 1.500,00

SELECT Cod_Filial, AVG(Salario)
FROM FUNCIONARIO
WHERE AVG(Salario) > 1500,00
GROUP BY Cod_Filial


SELECT Cod_Filial, AVG(Salario)
FROM FUNCIONARIO
GROUP BY Cod_Filial
HAVING AVG(Salario) > 1500,00
Funes de agregao no
podem ser utilizadas na
clusula WHERE
-
Agrupamentos
Etapas no uso da clusula HAVING
1. As linhas so agrupadas
2. As funes de agrupamento so aplicadas
sobre o grupo
3. Grupos que satisfazem as condies da
clusula HAVING so apresentados
Agrupamentos
ORDER BY
Ordena as linhas resultantes
ASC (default) e DESC
Pode-se ordenar por mais de uma coluna
possvel ordenar por uma coluna que no conste na
clusula SELECT (Oracle)
Exemplos:
SELECT Nome, Cod_Filial, Data_Admissao
FROM FUNCIONARIO
ORDER BY Nome

SELECT Nome FUNCIONARIO, Cod_Filial, Data_Admissao
FROM FUNCIONARIO
ORDER BY Data_Admissao DESC, FUNCIONARIO
Seqncia no comando SELECT
Seqncia no comando "Select":
SELECT coluna(s), funo de agrupamento
FROM tabela(s)
WHERE condio(es) da(s) tupla(s)
GROUP BY condio(es) do(s) grupo(s) de tupla(s)
HAVING condio(es) do(s) grupo(s) de tupla(s)
ORDER BY coluna(s);
A SQL far a seguinte avaliao:
a) WHERE, para estabelecer tuplas individuais candidatas (no
pode conter funes de grupo)
b) GROUP BY, para fixar grupos
c) HAVING, para selecionar grupos para exibio
NORMALIZAO
Medidas informais para projeto de
esquemas relacionais (Elmasri & Navathe
94)
1. Assegurar semntica dos atributos
2. Reduzir valores redundantes em tuplas
3. Reduzir valores nulos em tuplas
4. No permitir tuplas esprias (cm chaves
primrias diferentes das usadas para as
entidades representadas)

Estas medidas so dependentes entre si
Normalizao preocupa-se com itens 2 e 4
Semntica dos atributos
Significado dos nomes de atributos especifica como
interpretar os valores armazenados nas tuplas

Regra 1:
Projete um esquema de relao de forma que seja fcil explicar
seu significado. No combine atributos de mltiplos tipos de
entidades e relacionamentos em uma nica relao.

Intuitivamente, se um esquema de relao corresponde a um
tipo de entidade ou um tipo de relacionamento, o significado
tende a ser claro.
Valores redundantes em tuplas
Eliminar informaes redundantes tem como objetivo:
minimizar o espao de armazenamento
evitar anomalias de atualizao
anomalias de insero
anomalias de atualizao
anomalias de excluso
consistente com a primeira medida (de certa forma, outra
maneira de express-la)

Normalizao o enfoque formal para avaliar esta medida

Regra 2:
Projete os esquemas de relaes de forma que no ocorram
anomalias de insero, atualizao ou excluso
Valores nulos
Quando alguns atributos no se aplicam a certas tuplas,
so introduzidos valores nulos
Leva a:
desperdcio de espao de armazenamento
dificuldades para compreender o significado do atributo
nulo pode significar:
atributo no se aplica a esta tupla
valor do atributo desconhecido
valor conhecido mas ainda no foi fornecido
dificuldades para operaes como JOIN e funes de
agregao, como COUNT, SUM
Regra 3:
Evite colocar em uma relao atributos que possam apresentar
valores nulos
Tuplas esprias
Tuplas esprias aparecem como resultado da juno
natural de tabelas onde o atributo de juno no chave
primria em nenhuma das tabelas
Ex.: uma chave primria pode ser propositadamente
omitida, por no ser relevante para os leitores do arquivo
Deve-se introduzir, j na forma no normal, a chave
primria usual da tabela, como se ela aparecesse no
arquivo no normalizado

Regra 4:
Projete relaes de forma que elas possam ser juntadas
(operao JOIN) com condies de igualdade sobre atributos
que sejam chave primria ou estrangeira, de forma a garantir
que no aparecero tuplas esprias
Normalizao
Conforme visto at agora, agrupamento de atributos para
formar relaes feito com base em:
bom senso do projetista
mapeamento de um esquema E-R para um esquema
relacional
Perguntas a responder:
por que foi decidido este agrupamento e no outro?
como medir a qualidade e adequao do projeto?

Teoria da normalizao
introduz um formalismo para medir por que um conjunto de
relaes (agrupamento de atributos) melhor do que o
outro
desenvolvida no contexto do modelo relacional
Normalizao
Objetivo
Evitar anomalias de atualizao e inconsistncia de dados
Reagrupar informaes para
eliminar redundncia de dados
eliminar estruturas inexistentes no modelo ER (atributos
multivalorados)
Processo
uma tabela no normalizada transformada
sucessivamente em diversas tabelas normalizadas
quando aplicado a cada arquivo em um sistema de
computador, possvel obter o diagrama E-R para o sistema
(engenharia reversa)
Observao: no reflete consideraes de performance
pode no ser conveniente normalizar completamente
Normalizao
Proposta inicial de Codd (1972) apresenta trs formas
normais:
Primeira (1FN), Segunda (2NF) e Terceira (3FN)
Uma definio mais forte da Terceira Forma Normal foi
proposta mais tarde por Boyce e Codd (FNBC)
Posteriormente foram definidas a Quarta (4FN) e Quinta
(5FN) Formas Normais
Princpio da Normalizao:
esquemas de relaes considerados no satisfatrios so
decompostos
um esquema de relao quebrado em esquemas menores
que, juntos, reconstrem a relao original
Anomalias de Atualizao
Exemplo de atributos que se repetem na entidade PEDIDO:
cdigo do produto
unidade do produto
descrio do produto
Primeira Forma Normal
Atualmente, j considerada parte da definio formal de
uma relao
Historicamente, foi definida para proibir:
atributos multivalorados
em registros: campos repetitivos com nmero varivel de
ocorrncias
atributos compostos
em registros: itens de grupo
quaisquer combinaes destes
Relao na Primeira Forma Normal
Uma relao est na 1FN quando todos os
domnios de atributos so atmicos (simples,
indivisveis) e qualquer atributo em uma tupla
possui um nico valor.
No possui tabelas aninhadas
Primeira Forma Normal
Entidade PEDIDO no normalizada
Primeira Forma Normal
Entidades na 1FN
Relao no normalizada
Exemplo de uma relao no normalizada

DEPARTAMENTO
Dept GerDep
t
LocalDept
Num Nome
D10 Pesquisa 101 Rio de Janeiro
So Paulo
Porto Alegre
D20 Administra
o
204 So Paulo
Rio de Janeiro
D30 Recursos
Humanos
270 Porto Alegre
Passagem para a Primeira Forma Normal
Representao do esquema de uma relao no normalizada

DEPARTAMENTO (Dept (Num, Nome), GerDept, {LocalDept})

Chaves identificam atributos multivalorados - representam
uma tabela aninhada
Parnteses contm atributos componentes
Duas solues para chegar a relaes na 1FN:
1. remover cada tabela aninhada, criando uma tabela separada
2. repetir todos os valores de atributos, para cada um dos
valores da tabela embutida
introduz redundncia
Em ambas solues, eliminar itens de grupo
Passagem para a Primeira Forma Normal
Primeira soluo
Esquemas resultantes em 1FN
DEPARTAMENTO (NumDept, NomeDept, GerDept)
DEPT-LOCAIS (NumDept, LocalDept)

Chaves primrias das tabelas resultantes:
cada tabela aninhada tem como chave primria a
combinao de sua chave primria e a chave primria da
tabela externa
Passagem para a Primeira Forma Normal
DEPARTAMENTO
NumDept NomeDept GerDept
D10 Pesquisa 101
D20 Administrao 204
D30 Recursos
Humanos
270
DEPT-LOCAIS
NumDept LocalDept
D10 Rio de Janeiro
D10 So Paulo
D10 Porto Alegre
D20 So Paulo
D20 Rio de Janeiro
D30 Porto Alegre
Passagem para a Primeira Forma Normal
Segunda soluo
Esquemas resultantes em 1FN
DEPARTAMENTO (NumDept, NomeDept, GerDept, LocalDept)
Chave primria da tabela resultante:
combinao da chave primria da tabela aninhada com a
chave primria da tabela externa

Passagem para a Primeira Forma Normal

DEPARTAMENTO
NumDept Nome GerDept LocalDept
D10 Pesquisa 101 Rio de Janeiro
D10 Pesquisa 101 So Paulo
D10 Pesquisa 101 Porto Alegre
D20 Administrao 204 So Paulo
D20 Administrao 204 Rio de Janeiro
D30 Recursos
Humanos
270 PortoAlegre
Dependncia Funcional
Segunda e Terceira Formas Normais tratam do
relacionamento entre atributos chave e no chave
So definidas em termos de dependncia funcionais







Representao: A B
Diz-se que: B um fato sobre A
A determina B
Um atributo (ou conjunto de atributos) B de uma relao R
depende funcionalmente de um atributo (ou conjunto de
atributos) A se, a qualquer instante do tempo, cada valor
de A em R est associado com o mesmo valor em B

Dependncia Funcional
Dependncia funcional TOTAL (Completa)
a cada valor da chave (e no parte dela), est associado
um valor para cada atributo
Dependncia funcional PARCIAL
atributo s depende de parte da chave primria
concatenada e no dela como um todo
Dependncia funcional TRANSITIVA
um atributo ou conjunto de atributos A depende de
outro atributo B que no pertence chave primria, mas
dependente funcional desta.
Assim, A dependente transitivo de B
Em PEDIDO, ENDEREO, CIDADE, UF, CGC e
INSCRIO-ESTADUAL so dependentes transitivos do
atributo CLIENTE
Exemplos de dependncias funcionais
Matrcula Nome Curso NomeCurso
NomeCurso Curso

Nome Curso
Matrcula Curso
ALUNO
Matrcula Nome Curso NomeCurso
0080/86 Carla 020 Computao
1248/94 Vera 020 Computao
0712/92 Vera 101 Msica
1108/94 Joo 150 Medicina
0890/92 Paulo 108 Psicologia
0080/86 Carla 101 Msica
Segunda Forma Normal
Pressupe chave primria composta
Toda a relao na 1FN que possua um nico atributo como
chave primria j est na 2FN
Para verificar se uma relao est violando a 2FN, devem ser
verificadas relaes que:
possuam chave primria composta
possuam pelo menos um atributo no chave
Uma relao est na 2FN quando, alm de estar
na 1FN, cada atributo no chave primria
depende funcionalmente de toda a chave
primria (e no parte dela).
No contem dependncias parciais.
Segunda Forma Normal
Exemplo de relao na 1FN e no na 2FN:

ESTOQUE (Pea, Depsito, Quantidade, EndereoDepsito)


Problemas quando no se tem 2FN (anomalias de
atualizao):

endereo de um depsito repetido para todas as peas
mudana de endereo -> atualizao de todas as tuplas
deste depsito
podem ocorrer inconsistncias nos dados
como guardar o endereo de um depsito que no tem pea
armazenada?
Passagem para a Segunda Forma Normal
Devem ser removidos da relao original todos os atributos
que violam a 2FN, criando uma outra relao
Para verificar se h violao da 2FN, para cada atributo no
chave, perguntar:

o atributo depende de toda a chave primria ou de parte
dela?

Esquemas resultantes em Segunda Forma Normal:

ESTOQUE (Pea, Depsito, Quantidade)
ENDEREO-DEPSITO (Depsito, EndereoDepsito)
Passagem para a Segunda Forma Normal
Passagem para a Segunda Forma Normal
Terceira Forma Normal
Violada quando um atributo no chave um fato sobre
outro atributo no chave
Exemplo de relao na 2FN e no na 3FN:
EMPREGADO (CodEmpregado, CodDepto, LocalizaoDepto)


Problemas quando no se tem 3FN:
anlogos aos anteriores
Uma relao est na 3FN quando, alm de estar na
2FN, cada atributo no chave primria depende
diretamente da chave primria (isto , no h
dependncias transitivas)
Passagem para a Terceira Forma Normal
Devem ser removidos da relao original todos os atributos
que violam a 3FN, criando uma outra relao
Para verificar se h violao da 3FN, para cada atributo no
chave, perguntar:

o atributo depende de algum outro atributo que no a chave
primria ?

Esquemas resultantes em Terceira Forma Normal:

EMPREGADO (CodEmpregado, CodDepto)
DEPARTAMENTO (CodDepto, LocalizaoDepto)
Passagem para a Terceira Forma Normal
Passagem para a Terceira Forma Normal
Passagem para a Terceira Forma Normal
Passos da Normalizao
1. Passagem para a Primeira Forma Normal
2. Passagem para a Segunda Forma Normal
3. Passagem para a Terceira Forma Normal
OBS.: pode-se fugir normalizao, quando problemas de
performance forem prioritrios
Exemplo:

PESSOA (Cdigo, Nome, Rua, Nmero, Cidade, Estado, CEP)
No est na 3FN

PESSOA (Cdigo, Nome, Rua, Nmero, CEP)
CEPs (CEP, Cidade, Estado)
Relaes
em 3FN
Exemplo para normalizar
Histrico do Aluno
Matrcula: 2675/92
Curso: Cdigo: 020 Nome: Cincia da Computao
Endereo: Rua So Vicente, 434
Total de crditos: 160 Mdia: C
Cdigo Nome
Discipli.
Crditos Semestre Conceito
INF125
INF131
INF132
Algoritmos
Pascal
Banco de
Dados
4
3
92/1
92/1
92/2
92/2
93/1
B
E
D
D
A
Forma normal de BOYCE/CODD (FNBC)
Quarta e Quinta Formas Normais
Dependncias multivaloradas
Tratam de fatos multivalorados (no tratados pela 3FN)
Definidas em termos de dependncias multivaloradas
Dependncias multivaloradas requerem que outras tuplas
estejam presentes em uma relao
Seja uma relao R com trs atributos, X, Y e Z.
A dependncia multivalorada X Y requer que
sempre que existirem duas tuplas quaisquer (x1, y1, z1) e (
x2, y2, z2) existiro tambm as duas tuplas (x1, y2, z1) e (x2,
y1, z2)
Dependncia multivalorada
Exemplos:
Curso Professor
Curso Livro

Relao no normalizada
Curso Professor Livro
Banco de
Dados
Heuser
Cirano
Lia
Elmasri&Navathe
Korth&Silberschatz
Outros exemplos de dependncias multivaloradas:
Empregado Projeto Pessoa Habilidade
Empregado Equipamento Pessoa Lngua domina
Empregado Dependente
Dependncia multivalorada
Representao em uma relao normalizada
A tabela est representando dois relacionamentos:
relacionamento que associa curso a professor
relacionamento que associa curso a livro

introduz redundncia
Curso Professor Livro
Banco de Dados
Banco de Dados
Banco de Dados
Banco de Dados
Banco de Dados
Banco de Dados
Heuser
Heuser
Cirano
Cirano
Lia
Lia
Elmasri&Navathe
Korth&Silberschatz
Elmasri&Navathe
Korth&Silberschatz
Elmasri&Navathe
Korth&Silberschatz
Quarta Forma Normal
Esquemas resultantes na Quarta Forma Normal

CURSO-PROFESSOR (Curso, Professor)
CURSO-LIVRO (Curso, Livro)
Curso Professor
Banco de Dados
Banco de Dados
Banco de Dados
Heuser
Cirano
Lia
Curso Livro
Banco de Dados
Banco de Dados
Elmasri&Navathe
Korth&Silberschatz
Uma relao est na Quarta Forma Normal (4FN) se
est na 3FN e no contm mais de uma
dependncia multivalorada
Quarta Forma Normal
Quinta Forma Normal
Trata com casos onde a informao pode ser reconstruda
a partir de relaes menores, diminuindo a redundncia

Exemplos:
Representantes representam indstrias
Indstrias fabricam produtos
Representantes vendem produtos
Neste caso: Joo no vende carro da GM (s da Ford)
Joo no vende caminho da Ford (s da GM)
Representante Indstria Produto
Joo
Joo
Ford
GM
Carro
Caminho
Quinta Forma Normal
Supondo a seguinte regra vlida:
Se um representante vende um certo produto e representa
uma indstria que faz este produto, ento ele vende este
produto desta indstria
Todas as combinaes possveis devem ser representadas:
Problemas de atualizao:
O que acontece se Joo deixa de vender carro?
Representante Indstria Produto
Joo
Joo
Joo
Joo
Carlos
Ford
Ford
GM
GM
Ford
Carro
Caminho
Carro
Caminho
Carro
Quinta Forma Normal
A relao deve ser reconstruda a partir da juno das trs tabelas:
Representante Indstria
Joo
Joo
Carlos
Ford
GM
Ford
Representante Produto
Joo
Joo
Carlos
Carro
Caminho
Carro
Indstria Produto
Ford
Ford
GM
GM
Carro
Caminho
Carro
Caminho
Uma relao est na Quinta Forma Normal (5FN) se a sua
informao no pode ser reconstruda a partir de relaes
com um nmero menor de atributos
(excludos os casos em que a decomposio resulta em
relaes com a mesma chave primria)
Normalizao
Elimina redundncia em uma relao
Deve-se cuidar com redundncias entre relaes

Exemplo:

LOTAO (Empregado, Departamento)
DEPARTAMENTO (Departamento, Localizao)
EMP-LOCALIZAO (Empregado, Localizao)

SQL Embutida
Introduo
= O mtodo usual para o desenvolvimento de
aplicaes de bancos de dados a utilizao de
comandos SQL dentro das linguagens de
programao
= Nestes casos o SQL chamado SQL embutido e as
linguagens so chamadas linguagens hospedeiras
= Linguagens hospedeiras definidas pela ANSI como
padro para SQL embutido: C, Cobol, Fortran, PL/I,
ADA, Pascal e Mumps
Introduo
= Exemplos de outras linguagens, utilizadas em
ambiente cliente-servidor:
= Delphi
= Visual Basic
= Power Builder
= SQLWindows
= linguagens proprietrias (ex. Developer/2000)
Formas de Implementao
= Dentre as formas para a implementao de
SQL em linguagens hospedeiras, pode-se citar:
= A linguagem hospedeira faz chamadas de
funes/procedures que interagem com o mecanismo
do banco de dados, passando o comando SQL como
parmetro em um string
= Comandos SQL so utilizados de forma integrada
dentro da prpria linguagem de programao. Nestes
casos deve ser utilizado um pr-compilador para a
traduo dos comandos SQL
Variveis compartilhadas
= O banco de dados acessado somente por comandos SQL
= A troca de informaes entre o banco de dados e o
programa hospedeiro feita atravs do uso de variveis ditas
compartilhadas (chamadas de variveis hospedeiras, que so
declaradas na linguagem hospedeira e podem ser usadas em
qualquer parte do programa, inclusive em comandos SQL)
= Exemplo de declarao de variveis compartilhadas na
linguagem C:
EXEC SQL BEGIN DECLARE SECTION;
int v_cod_cliente, v_numero_pedido ;
char v_razao_social[50], v_endereco[50] ;
char SQLSTATE;
EXEC SQL END DECLARE SECTION
Variveis compartilhadas
= Quando referenciadas dentro dos comandos SQL as
variveis devem ser prefixados por dois pontos ( : ),
assim:
= Inserindo dados, usando as variveis de entrada
V_Cod_Cliente e V_Razao_Social:

EXEC SQL INSERT INTO CLIENTE (Cod_Cliente,
Razao_Social)
VALUES (:V_Cod_Cliente, :V_Razao_Social);
Controle de Erros
= Cada vez que uma funo da biblioteca SQL executada, um
cdigo atribudo varivel SQLSTATE, servindo para indicar a
ocorrncia de problemas durante a execuo do comando
= Se SQLSTATE = 00000 ento no houve erro
= Se SQLSTATE = 02000 ento no foi encontrada nenhuma
linha
= De forma alternativa, alguns SGBDs como Oracle e Informix
utilizam a varivel SQLCODE (Padro ANSI mais antigo)
= Se o SQLCODE zero indica operao realizada com
sucesso, se igual a 100, no more data/not found e se
negativo representa um cgido de erro ocasionado pela
execuo do comando
Expresso WHENEVER
= Uma forma bastante utilizada para o controle de erros
SQL dentro de um programa a expresso WHENEVER
= O comando WHENEVER permite ao programa transferir
o controle para uma rotina de tratamento de erros quando
da ocorrncia de erros ou warnings em comandos SQL
embutidos
= Esta expresso pode ser declarada no programa
hospedeiro, especificando o processamento que deve ser
realizado quando a condio de erro ocorrer na execuo
de um comando SQL
Expresso WHENEVER
= Aps a declarao de WHENEVER a definio passa a
valer para todos os comandos SQL que aparecem no
programa fonte
= Exemplos de uso no Oracle:
EXEC SQL WHENEVER NOT FOUND GOTO label
EXEC SQL WHENEVER SQLWARNING CONTINUE
EXEC SQL WHENEVER SQLERROR STOP
SELECT Embutido
= A utilizao do comando SELECT pode ser feita de duas
formas, dependendo se o resultado da consulta retorna
uma ou vrias linhas
= SELECT que retorna uma nica linha
= Neste caso a linha pode ser armazenada em
variveis compartilhadas, uma para cada coluna da
tupla, inserindo-se a clsula INTO no prprio
comando SELECT
= No exemplo a seguir so utilizadas as variveis
de entrada V_Numero_ Pedido e as variveis de
sada V_Cod_Cliente e V_Razao_Social
SELECT que retorna
uma nica linha
= Neste ponto deve-se testar se SQLSTATE igual a
00000 e em caso positivo imprimir os valores de
:V_Cod_Cliente e :V_Razao_Social


EXEC SQL SELECT Cod_Cliente, Razao_Social
FROM CLIENTE, PEDIDO
INTO :V_Cod_Cliente, :V_Razao_Social
WHERE CLIENTE.Cod_Cliente =
PEDIDO.Cod_Cliente AND
PEDIDO.Numero_Pedido = :V_Numero_Pedido;
= Neste exemplo, se o resultado da execuo do
comando SELECT apresentar uma nica linha
ento os valores resultantes da consulta sero
atribudos s variveis compartilhadas
:V_Cod_Cliente e :V_Razao_Social
= Se o resultado da consulta for vrias linhas, ou
mesmo nenhuma, ento no feita atribuio de
valores s variveis e um cdigo apropriado
atribudo variavel de estado (SQLSTATE)
SELECT que retorna
uma nica linha
= Se a execuo do comando SQL retorna mais
do que uma linha a atribuio no pode ser feita
diretamente s variveis, por incompatibilidade
entre a estrutura resultante (um conjunto de
linhas) e as estruturas de dados da linguagem de
programao
= Neste caso necessrio o uso de um CURSOR
SELECT que retorna mais
que uma linha
= Um cursor uma estrutura que abrange a tabela
resultante, chamada de conjunto ativo, permitindo que cada
linha deste conjunto ativo seja percorrida individualmente
como se houvesse um ponteiro e atribuindo valores s
variveis compartilhadas
= Para a utilizao de um cursor so utilizadas quatro
operaes:
= DECLARE Exec SQL DECLARE nome_do_cursor CURSOR FOR consulta
= OPEN Exec SQL OPEN nome_do_cursor
= FETCH Exec SQL FETCH FROM nome_do_cursor INTO variveis
= CLOSE Exec SQL CLOSE nome_do_cursor
Cursores
= DECLARE
= Esta a primeira operao a ser realizada para o uso
de um cursor. Sua funo especificar as
caractersiticas do cursor e alocar memria para o
mesmo
= OPEN
= Somente aps declarado um cursor pode ser aberto.
Esta operao determina a execuo do comando
SELECT associado e detecta eventuais erros no mesmo.
Aps a execuo do comando OPEN o cursor est
ativado, pronto para a recuperar a primeira linha da
tabela resultante (conjunto ativo)
Operaes
= FETCH
= Com a operao FETCH o programa acessa uma das linhas da
tabela resultante, extraindo os valores para as variveis
compartilhadas. O comando FETCH utilizado uma ou mais
vezes, buscando sempre a prxima linha do conjunto ativo. Se
todas as linhas j tiverem sido lidas, nenhuma linha retornada
e o valor da varivel de controle de execuo indicar no more
data/not found
= CLOSE
= Aps acessar a ltima linha do cursor o programa deve fechar
o cursor. Neste momento o conjunto ativo liberado e o cursor
no pode mais ser utilizado. Entretanto o mesmo pode ser
reinicializado por outro comando OPEN, que determinar uma
nova execuo do sentena SQL
Operaes
= Esquema geral de uso de um cursor
Operaes
DECLARE OPEN FETCH
CLOSE
VAZIO ?
Sim
No
EXEC SQL DECLARE C_Item_Pedido CURSOR
FOR SELECT Cod_Produto, Quantidade x Preco_Unitario
FROM PRODUTO P, ITEM_PEDIDO IP
WHERE P.Cod_Produto = IP.Cod_Produto AND
IP.Numero_Pedido = :V_Numero_Pedido;
EXEC SQL OPEN C_Item_Pedido;
EXEC SQL WHENEVER NOT FOUND GOTO fim_processamento;

LOOP
EXEC SQL FETCH C_Item_Pedido
INTO :V_Cod_Prod, :V_Total_Item;
V_Total_Pedido := V_Total_Pedido + V_Total_Item;

END LOOP;

fim:
print (Valor total do pedido numero , :V_Numero_Pedido, : R$ , :V_Total_Pedido);
EXEC SQL CLOSE C_Item_Pedido;
Exemplo
= Exemplo da execuo
Exemplo
Numero_Pedido Cod_Produto Quantidade Cod_Produto Preco_Unitario
1 1 10 1 1.00
1 2 5 2 1.10
2 1 5 3 3.00
3 1 10 4 0.50
4 4 15

Item_pedido Produto
C EXEC SQL DECLARE C_Item_Pedido CURSOR FOR




C EXEC SQL OPEN C_Item_Pedido;
Exemplo
Cod_Produto Quantidade X Preo_Unitario

C_Item_pedido
C_Item_pedido
Cod_Produto Quantidade X Preo_Unitario
1 10.00
2 5.50

Cursor pronto
para a leitura
da primeira
linha
C EXEC SQL WHENEVER NOT FOUND GOTO fim




C EXEC SQL FETCH C_Item_Pedido
INTO :V_Cod_Prod, :V_Total_Item;
Exemplo
C_Item_pedido
Cod_Produto Quantidade X Preo_Unitario
1 10.00
2 5.50

:V_Cod_Prod :=
1,
:V_Total_Item :=
10.00
A partir deste ponto, qualquer execuo de um comando SQL
dentro do programa que resulte na situao de NOT FOUND
ocasionar o desvio para a procedure determinada
C V_Total_Pedido := 0 + 10.00
EXEC SQL FETCH C_Item_Pedido
INTO :V_Cod_Prod, :V_Total_Item;







C V_Total_Pedido := 10.00 + 5.50
Exemplo
C_Item_pedido
Cod_Produto Quantidade X Preo_Unitario
1 10.00
2 5.50

:V_Cod_Prod :=
2,
:V_Total_Item =
5.50
EXEC SQL FETCH C_Item_Pedido
INTO :V_Cod_Prod, :V_Total_Item;






fim:
Valor total do pedido
numero 1: R$ 15.50
EXEC SQL CLOSE C_Item_Pedido;

Exemplo
C_Item_pedido
Cod_Produto Quantidade X Preo_Unitario
1 10.00
2 5.50

Not found
(provoca o desvio
para fim: )
Cod_Produto Quantidade X
Preo_Unitario

C_Item_pedido
= Quando o cursor abrange uma base-table, isto , uma
tabela fisicamente armazenada e no uma viso ou tabela
resultante de uma query, este cursor tambm pode ser
utilizado para atualizao e deleo dos dados desta tabela
= A sintaxe dos comandos UPDATE e DELETE para uso
dentro de cursores a mesma j apresentada, com
exceo da clusula WHERE cuja nica expresso permitida
WHERE CURRENT OF <nome_do_cursor>, indicando que
o comando se aplica apenas linha corrente do cursor
= O programa da aplicao deve ler as linhas da base-
table e decidir quais devero ser atualizadas antes de
executar os comandos UPDATE e DELETE
Cursores para alterao dos dados
= Exemplo: Apagar todos os produtos cuja quantidade em
estoque seja menor do que 10, aumentando-se o preo
unitrio em 10% caso contrrio:
EXEC SQL DECLARE C_Produto CURSOR
FOR SELECT Quantidade_Estoque
FROM PRODUTO
EXEC SQL OPEN C_Produto;
EXEC SQL WHENEVER NOT FOUND GOTO fim_processamento;

LOOP
EXEC SQL FETCH C_Produto
INTO :V_ Quantidade_Estoque;
if (:V_ Quantidade_Estoque < 10)
EXEC SQL DELETE FROM PRODUTO
WHERE CURRENT OF C_Produto;
else
EXEC SQL UPDATE PRODUTO
SET Preco_Unitario = Preco_Unitario * 1.2
WHERE CURRENT OF C_Produto;

END LOOP;
fim_processamento:
EXEC SQL CLOSE C_ Produto;
Cursores para alterao dos dados
= Os comandos INSERT, UPDATE e DELETE podem ser
aplicados para a modificao de uma ou vrias linhas sem
a necessidade do uso de cursores
= Exemplos:

EXEC SQL UPDATE PRODUTO
SET Preco_Unitario = Preco_Unitario * 1.10
WHERE Cod_Fornecedor = :V_Cod_Fornecedor;

EXEC SQL DELETE FROM PRODUTO
WHERE Cod_Fornecedor = :V_Cod_Fornecedor;

EXEC SQL INSERT INTO PRODUTO
SELECT *
FROM NOVOS_PRODUTOS;
Alterao dos dados sem cursores
= Normalmente a leitura das linhas em um cursor
feito seqencialmente, iniciando-se na primeira linha e
acessando-se as demais em ordem at a ltima linha
= Algumas implementaes de banco de dados
apresentam scrollable cursors que alm desta opo
permitem a leitura de linhas para frente e/ou para
trs
= O cursor deve ser declarado como SCROLL:

EXEC SQL DECLARE CURSOR nome_do_cursor SCROLL CURSOR FOR consulta
Scrolling Cursors
= O comando FETCH deve especificar o tipo de leitura
desejada








= Exemplo: EXEC SQL FETCH LAST FROM nome_cursor INTO :variavel
Scrolling Cursors
Opo de scroll Significado
NEXT
PRIOR
linha seguinte corrente (default)
linha anterior corrente
FIRST
LAST
primeira linha do cursor
ltima linha do cursor
RELATIVE +n
RELATIVE -n
n tuplas adiante em relao corrente
n tuplas atrs em relao corrente
ABSOLUTE +n
ABSOLUTE -n
acessa tupla da posio n a partir do incio
acessa tupla da posio n a partir do fim

= Alm do uso de comandos SQL pr-definidos (SQL esttico) pode-se
usar comandos mais genricos (SQL dinmico) embutidos em
programas na linguagem hospedeira
= Em um SQL dinmico os comandos somente so definidos em tempo
de execuo e por isso no podem ser compilados ou pr-processados
= Um exemplo desta situao um programa que l um string digitado
pelo usurio que uma consulta SQL e processa esta consulta
= Comandos para execuo de consultas com SQL dinmico:
= EXEC SQL PREPARE
= Prepara o comando SQL para execuo
= EXEC SQL EXECUTE
= Determina a execuo do comando SQL
= EXEC SQL EXECUTE IMMEDIATE
= Combina as duas formas anteriores
SQL Dinmico
EXEC SQL PREPARE SQLQuery FROM SELECT * FROM PEDIDO;

EXEC SQL EXECUTE SQLQuery

/* l a varivel :V_query */

EXEC SQL PREPARE SQLQuery FROM :V_query;

EXEC SQL EXECUTE SQLQuery

EXEC SQL EXECUTE IMMEDIATE :V_query
SQL Dinmico - Exemplos
SQL - Subconsultas
Subconsultas (Subqueries)
Pode ser visto como um SELECT aninhado com outro
SELECT, INSERT, UPDATE ou DELETE
Pode ser aninhada:
dentro de uma clusula WHERE ou HAVING em um SELECT,
INSERT, UPDATE ou DELETE principal
dentro de outra subquery
Deve estar entre parnteses
Uma subquery introduzida com operadores (=,<>,
>, >=, <, <=) deve retornar um nico valor
Uma subquery introduzida com IN, deve retornar
uma lista de valores
Subconsultas (Subqueries)
Uma subconsulta uma expresso SELECT FROM
WHERE aninhada dentro de tal expresso
So usadas para representar o conjunto de valores a
procurar atravs do predicado IN
O sistema avalia a consulta em geral, sendo que,
primeiramente, avalia a subconsulta aninhada
A subconsulta retorna um valor a ser utilizado em
uma comparao na consulta geral (consulta mais
externa)
Subconsultas (Subqueries)
Uma sentena SELECT pode ser utilizada
dentro de outra sentena SELECT
O SELECT aninhado chamado de subquery
(subconsulta)
Estrutura da consulta:
SELECT ...
FROM ...
WHERE ...


(SELECT ...
FROM ...
WHERE ...);
Consulta Externa
Sbconsulta
Subconsultas
A subconsulta seleciona e retorna valores
para o SELECT externo
O resultado da execuo da subconsulta pode
retornar
nenhum valor: Nenhuma linha retorna,
equivalendo a um valor nulo
um nico valor: Retorna exatamente uma
linha/coluna ou o resultado de uma expresso de
agregao
um conjunto de valores: Retorna mais de uma
linha/coluna
Subconsultas
Sintaxe:




O SELECT interno deve ser escrito entre
parnteses
SELECT ...
FROM ...
WHERE [coluna,] [operador,] [expresso]



(SELECT ...
FROM ... );
SQL - Subqueries
CodDepto NomeDepto Local
CodEmp Nome Cargo Chefe DataAdm Salrio Comisso CodDepto
Empregado
Departamento
Dependente
CodDep NomeDep CodEmp
Subconsultas
Estrutura de uma subconsulta (subquery) simples
( SELECT [ALL | DISTINCT] lista_coluna
FROM { nome_tabela | nome_view },.. { nome_tabela | nome_view }
[ WHERE condio(s) ]
[ GROUP BY expresso ]
[ HAVING condio(s) ] )
Exemplo: Listar todos os funcionrios que possuem
dependentes
SELECT Nome
FROM emp
WHERE cod_emp IN
(SELECT CodEmp
FROM Dependentes)
SELECT Nome, Cargo, Salrio
FROM emp
WHERE Salrio = (SELECT MIN(Salrio)
FROM emp)
Selecionar o nome, cargo e salrio do
empregado que possui o menor salrio
Nome Cargo Salrio
Roberto Balconista 800
Subconsultas - Exemplos
SELECT Nome, Cargo
FROM emp
WHERE Cargo =
(SELECT Cargo)
FROM emp
WHERE Nome = Patrcia);
Selecionar o nome, cargo de todos os
empregados que possuem a mesma profisso
do empregado Patrcia.
Nome Cargo
Juliana Gerente
Patricia Gerente
Luciana Gerente
Subconsultas - Exemplos
SELECT Nome, Salrio, CodDepto
FROM emp
WHERE Salrio IN (SELECT MIN(Salrio)
FROM emp
GROUP BY CodDepto);
Selecione o nome, salrio, nmero do departamento
dos empregados que recebem o menor salrio de
cada departamento
Nome Salrio CodDepto
Roberto 800 20
Carla 950 30
Eduardo 1300 10
Subconsultas - Exemplos
SELECT CodDepto, AVG(salrio)
FROM emp
GROUP BY CodDepto
HAVING AVG(salrio) > (SELECT AVG(salrio)
FROM emp
WHERE CodDepto = 30)
Selecionar o nmero dos departamentos onde os
empregados recebem um salrio mdio maior
que a mdia salarial do departamento 30
CodDepto Mdia
10 2916,67
20 2175,00
Subconsultas - Exemplos
Tipos de Subconsultas
Correlata (correlated)
Uma subconsulta dita correlata quando o
valor resultante do SELECT aninhado
depende do valor produzido pelo SELECT
externo.
Como depende do SELECT externo uma
subconsulta correlata deve ser
executada repetidas vezes, uma para
cada valor produzido pelo SELECT externo

Tipos de Subconsultas
No correlata (uncorrelated)
Os demais tipos de subconsultas so ditas no correlatas
Uma subconsulta no correlata executada apenas uma
vez, e antes da execuo do SELECT externo
Muitas vezes uma consulta aninhada tambm pode
ser escrita usando-se uma nica clusula SELECT.
Exemplo: Obter os nomes de fornecedor dos
fornecedores que fornecem a pea P2:
SELECT nome_fornec
FROM FORNECEDOR
WHERE cod_fornec IN
(SELECT cod_fornec
FROM PEAS
WHERE cod_pea = P2)
SELECT nome_fornec
FROM FORNECEDOR, PEA
WHERE FORNECEDOR.cod_fornec =
PEA.cod_fornec AND PEA.cod_pea =
cod_pea = P2
=
Expresses de especificao
As seguintes expresses podem ser
utilizadas para a especificao de
subconsultas
ALL
ANY
IN
EXISTS
ALL / IN
Numa subconsulta usando a expresso ALL a
comparao deve ser verdadeira para cada
um (todos) dos valores retornados
Se o valor retornado tiver sido nenhum valor,
a comparao ser verdadeira
Exemplo:
SELECT Cod_Func, Salario
FROM FUNCIONARIO
WHERE Salario > ALL
( SELECT salario
FROM FUNCIONARIO
WHERE cod_filial = 348 )
C
C
Cod_
Func
Salario
5 1900,00
6 2000,00
7 1850,00
Salario
1800,00
1700,00
1400,00
ALL / IN
A consulta anterior mostra os funcionrios
cujo salrio maior do que o salrio de
TODOS os funcionrios da filial 348
Inicialmente, e uma nica vez, executada a
subconsulta, obtendo-se o resultado auxiliar
C
Aps, so selecionadas as tuplas da tabela
FUNCIONRIO cujo salrio maior do que
todas as tuplas obtidas em C, gerando a
tabela resultante C
ALL / IN
Se a subconsulta retornar algum valor nulo a
comparao ser falso
No exemplo, se houvesse na filial 348 um funcionrio
cujo valor de salrio fosse null o SELECT externo no
apresentaria nenhuma linha como resposta.
Dica Oracle: Para solucionar esses casos, usar a
funo NVL(coluna,valor) que retorna um valor
quando ocorre um null em coluna. No exemplo, se
escrevermos SELECT NVL(Salario,0), quando o
salrio for null ser convertido para zero
!=ALL / NOT IN
Quando o operador com a expresso ALL for
a desigualdade ( != ALL) o mesmo pode ser
substitudo por NOT IN. Resultados
semelhantes podem ser obtidos utilizando-se
o operador de DIFERENA disponvel em
alguns SGBDs
As duas consultas a seguir so equivalentes e
apresentam todos os produtos que no tm
pedidos registrados
!=ALL / NOT IN
SELECT Cod_Produto, Nome
FROM PRODUTO
WHERE Cod_Produto NOT IN
( SELECT Cod_Produto
FROM PEDIDO )

SELECT Cod_Produto, Nome
FROM PRODUTO
WHERE Cod_Produto != ALL
( SELECT Cod_Produto
FROM PEDIDO )
ANY / IN
Utilizando-se a expresso ANY a
comparao deve ser verdadeira para
ao menos um dos valores retornados na
subconsulta
Se o valor retornado tiver sido nenhum
valor, a comparao ser falso
ANY / IN
Exemplo: Mostrar todos os funcionrios cujo
salrio maior do que o salrio de ao menos
um dos funcionrios da filial 348

SELECT Cod_Func, Salario
FROM FUNCIONARIO
WHERE Salario > ANY
( SELECT salario
FROM FUNCIONARIO
WHERE cod_filial = 348 )
=ANY e IN
Quando o operador com o termo ANY
for a igualdade ( = ANY) o mesmo pode
ser substitudo por IN
Resultados semelhantes podem ser
obtidos utilizando-se o operador de
INTERSEO disponvel em alguns
SGBDs
=ANY e IN
As duas consultas a seguir mostram os
cdigos e razo social dos clientes que tm
algum (ao menos um) pedido registrado
SELECT Cod_Cliente, Razao_Social
FROM CLIENTE
WHERE Cod_Cliente IN
( SELECT Cod_Cliente
FROM PEDIDO )

SELECT Cod_Cliente, Razao_Social
FROM CLIENTE
WHERE Cod_Cliente = ANY
( SELECT Cod_Cliente
FROM PEDIDO )
=ANY e IN
Usando mais do que um atributo na
comparao:

SELECT DISTINCT Cod_Cliente
FROM LOCACAO
WHERE ( Cod_Filme, Cod_Fita ) IN
( SELECT Cod_Filme, Cod_Fita
FROM FITA
WHERE Status_Conservacao =
AVARIADA )
Nveis de aninhamento
Teoricamente no existe limitao quanto ao nmero de
subconsultas aninhadas
A consulta a seguir apresenta os produtos dos fornecedores do estado de
So Paulo

SELECT Cod_Produto, Nome
FROM PRODUTO
WHERE Cod_Fornecedor IN
(SELECT Cod_Fornecedor
FROM FORNECEDOR
WHERE Cod_Cidade IN
( SELECT Cod_Cidade
FROM CIDADE
WHERE UF IN
( SELECT UF
FROM UF
WHERE Nome = SAO PAULO ) ) )
Single-Valued Subquery
Quando se sabe que a subconsulta retorna
sempre um nico valor no necessrio
nenhuma expresso (como ALL ou ANY)
A subconsulta pode ser tratada como uma
funo
Exemplo: Apresentar o cdigo e nome dos produtos fornecidos
por um determinado fornecedor do qual conhecida razo
social
SELECT Cod_Produto, Nome
FROM PRODUTO
WHERE Cod_Fornecedor =
( SELECT Cod_Fornecedor
FROM FORNECEDOR
WHERE Razao_Social = CASA DAS CANETAS )
Single-Valued Subquery
Se a subconsulta retornasse mais do que um valor, isto , caso
houvesse mais do que um fornecedor com a mesma razo
social, ocorreria um erro de execuo de SQL pois no possvel
comparar um atributo com um conjunto de valores usando o
operador =
Geralmente uma subconsulta single-valued usa uma funo de
agregao, pois funes de agregao retornam valores nicos:
SELECT Cod_Func, Salario
FROM FUNCIONARIO
WHERE Salario >
( SELECT AVG(salario)
FROM FUNCIONARIO )
Clusula HAVING
A clusula HAVING tambm pode utilizar
subconsultas
Exemplo: Listar todas filiais cuja mdia de salrios
maior do que a mdia dos salrios da filial 347.
SELECT Cod_Filial, AVG (Salario)
FROM FUNCIONARIO
GROUP BY Cod_Filial
HAVING AVG (Salario) >
( SELECT AVG (Salario)
FROM FUNCIONARIO
WHERE Cod_Filial = 348 )
Subconsultas Correlatas (Correlated
Subqueries)
Em uma subconsulta correlata o valor resultante da subconsulta
depende de valores do SELECT externo. Por isto uma subconsulta
correlata executada uma vez para cada linha considerada no SELECT
externo
Exemplo: A consulta abaixo lista os funcionrios de maior salrio em
cada filial. A subconsulta executada uma vez para funcionrio
selecionado pelo SELECT externo
SELECT Cod_Func, Nome
FROM FUNCIONARIO F1
WHERE Salario = ( SELECT
MAX(salario)
FROM FUNCIONARIO F2
WHERE F1.Cod_Filial = F2.Cod_Filial);
correlatos
Subconsultas Correlatas (Correlated
Subqueries)
Uma consulta correlata quando atributos do SELECT externo
so referidos na subconsulta. Nos casos em que a mesma tabela
utilizada em ambos SELECTs necessrio o uso de sinnimos
Observar que este tipo de subconsulta pode apresentar
limitaes de performance
Exemplo: Listar os pedidos ainda no entregues realizados nas
trs datas mais recentes (observe que a clusula ORDER BY no
pode ser usada dentro de uma subconsulta, apenas no SELECT
externo):
SELECT Numero_Pedido, Data_Pedido
FROM PEDIDO P1
WHERE 3 >
( SELECT COUNT(DISTINCT Data_Pedido)
FROM PEDIDO P2
WHERE P2.Data_Pedido > P1.Data_Pedido )
AND Data_Entrega IS NOT NULL
ORDER BY Data_Pedido, Numero_Pedido;
EXISTS
A expresso EXISTS conhecida como qualificador existencial,
pois a subconsulta retorna apenas um valor verdadeiro ou falso.
A subconsulta verdadeira somente se encontra uma ou mais
linhas que satisfazem suas condies
Exemplo: Seleciona todos os fornecedores de qualquer tipo de
caneta cuja quantidade em estoque seja superior a 100
unidades

SELECT DISTINCT Cod_Fornecedor, Razao_Social
FROM FORNECEDOR
WHERE EXISTS
(SELECT *
FROM PRODUTO
WHERE Nome LIKE CANETA%
AND Quant_Estoque > 100
AND FORNECEDOR.Cod_Fornecedor = PRODUTO.Cod_Fornecedor )
EXISTS
Sempre possvel escrever com EXISTS uma
consulta escrita com a expresso IN, o
contrrio, no entanto, no verdadeiro
Exemplo com NOT EXISTS: Selecionar os
produtos nunca vendidos

SELECT Cod_Produto, Nome
FROM PRODUTO
WHERE NOT EXISTS
( SELECT *
FROM ITEM_PEDIDO
WHERE PRODUTO.Cod_Produto =
ITEM_PEDIDO.Cod_Produto )
EXISTS
Exemplo: Obter nomes de fornecedor de fornecedores que no
forneam a pea P2
SELECT nome_fornec
FROM FORNECEDOR
WHERE NOT EXISTS
(SELECT *
FROM PEAS
WHERE PEA.cod_fornec = FORNECEDOR.cod_fornec AND cod_pea = P2)
Esta consulta tambm pode ser interpretada como: Selecionar os
nomes de fornecedor dos fornecedores para os quais no exista
nenhuma expedio que os relacione pea P2
Equivalente com NOT IN:
SELECT nome_fornec
FROM FORNECEDOR
WHERE nome_fornec NOT IN
(SELECT PEA.cod_fornec
FROM PEAS
WHERE cod_pea = P2)
EXISTS
A expresso EXISTS pode ser til quando
necessita-se especificar uma condio que
deve ser atendida por todos os valores de
uma determinada coluna
Exemplo: Determinar os nomes dos funcionrios que registraram
pedidos (ao menos um) para todos os clientes
SELECT Nome
FROM FUNCIONARIO
WHERE NOT EXISTS
( SELECT *
FROM CLIENTE
WHERE NOT EXISTS
( SELECT *
FROM PEDIDO
WHERE Cod_Cliente = CLIENTE.Cod_Cliente
AND Cod_Func = FUNCIONARIO.Cod_Func
EXISTS
No exemplo, sero selecionados todos os funcionrios
para os quais no existe um cliente que no tenha um
pedido realizado pelo prprio funcionrio
Exemplo da execuo:
Funcionr
io
Cliente Pedido Func Cli
F1 C1 001 F1 C1
F2 C2 002 F2 C1
F3 C3 003 F1 C3
004 F1 C2
005 F1 C1
NOT EXISTS
pedido...
SELECT
intermedirio
EXISTS
F1
F2
F3
F1 X C1 F1 X C2 F1 X C3 F2 X C1 F2 X C2 F2 X C3 F3 X C1 F3 X C2 F3 X C3
001 F1 C1
005 F1 C1
004 F1 C2 003 F1 C3 002 F2 C1
X
X X X X
SELECT
Externo
V F F
F F F F V V V V V
No existe pedido
SELECT
Interno
NOT EXISTS cliente...
1
2
3
1 os pedidos de cada cliente para cada funcionrio
2 para cada funcionrio, os clientes que no tm pedidos
3 os funcionrios para os quais no existem clientes sem pedidos
EXISTS
O SELECT interno retorna os pedidos do
cliente x, para o funcionrio y
Se o funcionrio no tem pedidos para este
cliente, este SELECT no retornar nenhuma
linha. Neste caso a clusula EXISTS do
SELECT intermedirio retornar FALSE. Como
ela NEGADA (NOT EXISTS), ser verdadeira
para os clientes que no tenham pedido feito
pelo funcionrio y
Isto significa que o SELECT intermedirio
retorna os clientes que no tenham tido
pedidos registrados pelo funcionrio y
EXISTS
A clusula EXISTS do SELECT externo retorna FALSE quando o
SELECT intermedirio no retornar nenhuma linha, ou seja,
quando no tiver nenhum cliente sem pedido pelo funcionrio y.
Como ela NEGADA (NOT EXISTS), retornar verdadeiro
apenas quando o funcionrio tiver pedido para todos os
clientes, ou seja, quando o SELECT intermedirio no trouxer
nenhum cliente (todos tiveram pedidos pelo funcionrio)
O SELECT externo retornar cada um dos funcionrios para os
quais no exista nenhum cliente sem pedido
O comando ser executado para cada um dos funcionrios da
tabela Funcionrio
lgebra e clculo relacional
O modelo de dados relacional
O Modelo Relacional (MR) relativamente novo, se
comparado a outros modelos de dados orientados a
registro
Codd props oficialmente o MR em 1970, nos
laboratrios de pesquisa da IBM em San Jos,
Califrnia
MR representa o BD como uma coleo de tabelas
(e somente tabelas)
H uma correspondncia direta entre o conceito de
TABELA RELACIONAL (TR) e o conceito matemtico
de RELAO (R)
O modelo de dados relacional
Cada TR possui um nome nico no contexto do BD
e representa o relacionamento entre um conjunto
de valores (dados/informaes)
Exemplo de BD Relacional:
Banco de Dados EMPRESA
Tabela EMP (empregados)
Nro Nome_emp Idade Cargo Salrio Depto
010 Eduardo 20 C04 1000 D10
020 Fabiano 22 C02 2000 D20
005 Joaquim 18 C04 1000 D20
011 Rodrigo 25 C01 5000 D10
001 Rui 30 C03 3000 D10
O modelo de dados relacional
Banco de Dados EMPRESA
Tabela DEPT (departamentos)




Tabela CARGO (cargos)
Nro Nome_depto Gerente Andar
D10 Marketing 001 3
D20 Vendas 020 3
D30 Contabilidade null 1
Cargo_id Nome_cargo Sal_min Sal_mx
C01 Recepo 2000 5000
C02 Vendedor 1500 3000
C03 Contador 2000 5000
C04 Boy 1000 1500
Considere a tabela EMP do exemplo
Cada coluna em EMP representa uma classe de
informao que ser armazenada na tabela
Ex.: a coluna Nome_emp usada para armazenar
nomes de funcionrios da empresa
Cada coluna denominada um atributo da tabela
relacional. A cada atributo conferido um nome
nico dentro da tabela
Ao conjunto de valores possveis para um
determinado atributo d-se o nome de domnio (D)
do atributo
Considere a tabela EMP
Ex.: o domnio de nome_emp o conjunto de todos os
possveis nomes de funcionrios que j trabalharam,
ainda trabalham ou podero vir a trabalhar na empresa
Cada linha da tabela denominada tupla. Cada
tupla combina um valor de cada um dos
atributos da tabela
E.: a primeira tupla de EMP relaciona o nmero de
empregado 010 com o nome Eduardo, a idade 20, o
cargo C04 (boy), o salrio 1000 e o departamento
D10 (marketing)
Descrio de uma TR
De uma maneira mais formal, pode-se descrever
uma TR da seguinte forma:
Seja {at1,...,ati,...,atn} o conjunto de atributos da
tabela relacional TR, com at1 sobre o Domnio D1, at2
sobre o domnio D2 at atn sobre o domnio Dn
O conjunto de todas as tuplas possveis em TR ,
portanto, representvel pelo produto cartesiano dos
domnios D1 at Dn:
O produto cartesiano (X) de n domnios o conjunto de n-
tuplas (diferentes), onde cada tupla combina um dos
possveis valores de cada domnio
Descrio de uma TR
Na matemtica, qualquer subconjunto do produto
cartesiano de uma lista de domnios denominado
RELAO (R)
A designao tabela relacional baseia-se no conceito
relao j que, normalmente, a TR s apresenta um
subconjunto do produto cartesiano de sua lista de
domnios
Esquema e instncias no MR
Um esquema de BD relacional , na verdade, um
conjunto de esquemas de TR
As instncias de uma TR so as tuplas. A cada
momento, o conjunto de instncias de uma TR
representado pelo conjunto de tuplas existentes na
tabela
O esquema de uma tabela TR contm o nome da
tabela e a lista de seus atributos, cada qual
associado a seu domnio
Ex.: o esquema EMP poderia ser representado:
Esquema e instncias no MR
EMP (nro: nmeros_de_empregado,
nome_emp: nomes_de_empregado,
idade: idades_possveis,
cargo: cargos_existentes,
salrio: salrios_possveis,
depto: departamentos_existentes)

A maioria dos SGBDs trabalham com um conjunto
limitado de domnios
Ex.: inteiro, real, string, data
Esquema e instncias no MR
Neste caso, o esquema de EMP poderia ser
expresso como segue:
EMP (nro: inteiro,
nome_emp: string,
idade: inteiro,
cargo: string,
salrio: real,
depto: string)
Linguagens de consultas formais
Uma linguagem de consulta (Query Language) uma
linguagem com a qual o usurio pode requisitar ao
Sistema de Gerncia de Banco de Dados (SGBD)
informaes armazenadas no banco de Dados (BD)
Linguagens de consulta podem ser
Procedurais
O usurio descreve o algoritmo de acesso aos dados atravs
de uma seqncia de instrues (COMO)
No procedurais
O usurio descreve a informao que deseja obter sem
descrever como obt-la (O QU)
Linguagens de consultas formais
As linguagens de consulta e atualizao comerciais para
sistemas relacionais baseiam-se na LGEBRA
RELACIONAL (procedural) e no CLCULO RELACIONAL
(no procedural)
As operaes da lgebra e do clculo exprimem o
conjunto de consultas e manipulaes possveis sobre
uma base de dados relacional qualquer
A lgebra apresenta o conjunto mnimo de
OPERADORES RELACIONAIS que podem ser
combinados para extrair da base de dados,
praticamente, todas as informaes ali armazenadas
(dados e seus relacionamentos)
Linguagens de consultas formais
O clculo estende (e completa) a potencialidade
da lgebra relacional com a introduo dos
quantificadores universal () e existencial (-)
Operaes fundamentais da lgebra Relacional
Restrio/Seleo (select): o
Projeo (project): t
Produto Cartesiano (cartesian product): x
Unio (union):
Diferena (set-difference): -
Operaes da lgebra Relacional
Todas as operaes operam sobre relaes e
produzem uma relao (tabela relacional) como
resultado
Operaes unrias
Restrio
Projeo
Operaes binrias
Produto cartesiano
Unio
Diferena
Seleciona tuplas de uma tabela que satisfazem
um determinado predicado
Formato:
Ex.:selecionar tuplas de empregados em EMP que
apresentam salrio maior que 1000 e trabalham no
departamento D10


Tabela R (restrio sobre EMP)
Restrio/Seleo
Nro Nome_emp Idade Cargo Salrio Depto
011 Rodrigo 25 C01 5000 D10
001 Rui 30 C03 3000 D10
R = o
salrio>1000 and depto=D10
(EMP)
RelResultado = o
predicado
(RelEntrada)
Em geral, os predicados permitem expressar
comparaes do tipo (<, s, >, >, = e =). Alm disso,
pode-se relacional com operadores lgicos (and, or, not)
Exemplos:
Selecione tuplas da relao EMP para as quais o nome do
empregado Fabiano
RelResult = o
nome_emp=Fabiano
(EMP)
Selecione tuplas da relao EMP para as quais o salrio maior
que 2000
RelResult = o
salrio > 2000
(EMP)
Restrio/Seleo
Copia no resultado a tabela argumento,
deixando de fora algumas colunas
Formato:
Ex.: construir uma tabela a partir de DEPTO,
contendo somente os atributos nro e gerente


Tabela S (projeo sobre DEPTO)
Projeo
Nro Gerente
D10 001
D20 020
D30 null
S=t
nro,gerente
(DEPTO)
RelResult=t
colunas a copiar
(RelEntrada)
Projeo
possvel compor operaes mais complexas da
lgebra relacional atravs do aninhamento de
operaes mais simples
A operao de seleo que gera uma relao como
resultado pode ser usada como relao de entrada
para a operao de projeo
Exemplo: listar os nomes dos empregados com
salrio superior a 2000:

RelResult=t
nome_emp
(o
salrio > 2000
(EMP))
Produto Cartesiano
Relaciona informaes de duas relaes
Monta uma tabela resultado a partir de duas tabelas TR1 e TR2
Dadas duas relaes de entrada, TR1 com N tuplas e TR2 com
M tuplas, o produto cartesiano delas uma relao contendo
(MxN) tuplas
Operao concatena cada tupla de TR1 com todas as tuplas de
TR2
Repetindo-se o produto cartesiano sobre os resultados de outros
produtos, obtm-se o produto cartesiano de uma lista de
tabelas (TR1,...,TRi,...,TRn)
Cada tupla do resultado a concatenao de uma das tuplas de
cada tabela da lista. O resultado contm todas as combinaes
possveis
Produto Cartesiano
Quando, devido a concatenao de tuplas de duas relaes
diferentes, RelResult apresenta duas colunas de mesmo
nome, cada uma delas recebe, como prefixo, o nome de sua
relao de origem
Exemplo: listar o nome dos empregados do departamento
contabilidade

RelResult1= EMP x DEPTO
RelResult2= o
e_nro_depto=d_nro_depto
(RelResult1)
RelResult3= o
d_nome_depto=contabilidade
(RelResult2)
RelResult4= t
nome_emp
(RelResult3)
Produto Cartesiano
Ex.: construir uma tabela a partir do produto
cartesiano de EMP e DEPT
T = R x S
Tabela T (produto cartesiano R x S)
Nro Nome_emp Idade Cargo Salrio Depto Nro_depto Gerente
011 Rodrigo 25 C01 5000 D10 D10 001
011 Rodrigo 25 C01 5000 D10 D20 020
011 Rodrigo 25 C01 5000 D10 D30 Null
001 Rui 30 C03 3000 D10 D10 001
001 Rui 30 C03 3000 D10 D20 020
001 Rui 30 C03 3000 D10 D30 null
Unio
Mesma operao da teoria dos conjuntos
A partir de duas tabelas relacionais TR1 e TR2,
obtm-se uma tabela contendo todas as tuplas
de TR1 mais todas as tuplas de TR2
Apesar de a operao de UNIO eliminar
duplicatas, existem SGBDs (ex.:INGRES) que
permitem que o usurio determine se tuplas
duplicadas devem ser eliminadas do resultado
ou no
Unio
S se pode executar UNIO sobre tabelas
compatveis, ou seja, que tenham o mesmo
nmero de atributos (mesma ordem) e o
mesmo domnio para cada posio da lista de
atributos
Ex.: construir a tabela unio das tabelas EMP e R

(U = EMP R) U = EMP

Diferena
Mesma operao da teoria dos conjuntos
A partir de duas tabelas relacionais TR1 e TR2, obtm-
se uma tabela contendo todas as tuplas de TR1 que no
aparecem em TR2
Ex.: construir a tabela diferena entre as tabelas EMP e R
D = Emp R
Tabela D (diferena EMP R)
Nro Nome_emp Idade Cargo Salrio Depto
010 Eduardo 20 C04 1000 D10
020 Fabiano 22 C02 2000 D20
005 Joaquim 18 C04 1000 D20
Definio formal da lgebra Relacional
Com base nos 5 operadores (t, o, , e -) pode-se definir
completamente uma expresso da lgebra relacional. Tal expresso
pode ser:
uma relao no banco de dados
uma relao constante (dada pelo usurio do BD na formulao da
consulta)
Uma expresso da lgebra relacional pode-se constituir de
subexpresses menores. Sejam E1 e E2 expresses da lgebra
relacional, ento tambm so vlidas:
E1 E2
E1 - E2
E1 x E2
o
p
(E1), onde p um predicado de atributos em E1
t
s
(E1), onde s uma lista de atributos de E1
Outras operaes da lgebra Relacional
So 3 as operaes complementares da lgebra
relacional
Todas elas podem ser definidas em termos das 5
operaes fundamentais
Interseo
Juno Tetha (u) e Juno Natural ()
Diviso
Interseo
Os requisitos vlidos para a UNIO e DIFERENA valem
tambm para a interseo
Interseo entre duas tabelas TR1 e TR2 produz uma tabela
relacional com as tuplas comuns de TR1 e TR2
EMP R = EMP (EMP R)
R1 R2 = R1 (R1 R2)
Outras operaes da lgebra Relacional
Juno (join)
A juno THETA uma operao binria que combina o produto
cartesiano e a seleo em uma nica operao. Por exemplo:
listar o nome e o salrio dos empregados do departamento de
vendas
t
nome_emp, salario_emp
(
o
emp_depto = nro_depto and nome_depto = vendas
(CLIENTE x DEPTO))
Utilizando a juno THETA, a expresso ficaria assim:
t
nome_emp, salario_emp
(CLIENTE u DEPTO)
u = emp_depto = nro_depto and nome_depto = vendas
R1 u R2 = o
u
(R1 x R2)
Outras operaes da lgebra Relacional
Juno (join)
A juno THETA citada fora a igualdade naqueles atributos que so
comuns a R1 e R2 (atributos de mesmo nome e domnio, nas duas
relaes). Isto acontece quando queremos relacionar tuplas de
relaes diferentes que contm informao sobre um ente comum do
mundo real (no exemplo dado, dados sobre um mesmo empregado)
Ajuno natural surgiu como uma simplificao da juno THETA para
estes casos
Na juno natural o predicado explcito u substitudo por um
predicado implcito, representado pela igualdade dos pares de atributos
com mesmo nome das duas relaes envolvidas
Desta forma, na juno natural o u est implcito e representa a
igualdade de todos os pares de atributos de mesmo nome nas duas
relaes
Outras operaes da lgebra Relacional
Diviso
Soluciona consultas que buscam uma informao X qualquer
em uma tabela relacional R1, tal que X aparea associada, em
R1, a cada uma das informaes Yi (i=1,...,n) que aparecem
nas n tuplas de uma tabela relacional R2
Usada para responder perguntas do tipo: Existe um X em R1,
tal que, para todo o Yi (1s i sn) de R2 (tabela de n tuplas), X
aparece com Yi em R1
Operao binria entre duas tabelas r e s que revela quais
tuplas de r esto relacionadas a todas as tuplas de s.
Equivalente a expresso:
r s = t
(R-S)
(r) - t
(R-S)
((t
(R-S)
(r) x s) r)
Clculo Relacional de Tuplas (CRT)
Linguagem no procedural (declarativa)
Permite que se defina conjunto de tuplas a partir de
expresses do tipo:
{ t | P(t) }
Uma expresso do clculo relacional representa um
conjunto de tuplas onde, para cada tupla t, o predicado
P(t) verdadeiro:
T e Result P(t)
Uma Varivel Tupla (VT) representa, a cada instante,
uma tupla T de uma determinada relao R. Uma
frmula P(t) pode apresentar mais de uma varivel
tupla
Clculo Relacional de Tuplas (CRT)
Exemplo de consulta: D todos os clientes que tm um
emprstimo de maior valor que $1200

{t| - s e EMPRSTIMO (t[nome-cliente] = s[nome-cliente] .
s[quantia] > 1200)}

Em portugus, l-se:
O conjunto de todas as tuplas t, tal que existe uma tupla s na
relao EMPRSTIMO para a qual os valores de t e s para o
atributo nome-cliente so iguais, e o valor do atributo quantia
maior que $1200
Clculo Relacional de Tuplas
Em uma determinada frmula, uma VT pode aparecer como:
Varivel destino: quando estiver associada a um quantificador existencial (-) ou
universal ()
Varivel livre: em caso contrrio ao anterior
Exemplo:
P(t) = t e R1 . - s e R2 (t[R1.nome] = s[R2.nome])
t varivel livre enquanto s varivel destino

Qualquer frmula P(t) do CRT constituda de tomos. Um tomo pode
assumir as seguintes formas:
s e R, onde s uma varivel tupla e R uma relao
s[x] comp u[y], onde comp e{<, s, >, >, = e =} e x um atributo em que s
definido e y um atributo em que u definido. X e y devem ter domnios cujos
membros possam ser comparados por comp
s[x] comp C, onde C constante no domnio de x
Clculo Relacional de Tuplas
Para formarem frmulas, tomos podem ser combinados da
seguinte maneira:
Um tomo uma frmula
Se P1 frmula ento P1 e (P1) so frmulas
Se P1 e P2 so frmulas, ento tambm o so:
P1 v P2
P1 . P2
P1 = P2
Se P(s) uma frmula vlida contendo uma VT livre s, ento
tambm o so
-s e R(P(s))
s e R(P(s))

Clculo Relacional de Tuplas
Como na lgebra, tambm no CRT pode-se
escrever expresses equivalentes. Tais
equivalncias incluem trs regras
P1 . P2 equivalente a (P1 v P2)
P1 P2 (se P1 verdadeiro, ento P2 deve ser
verdadeiro) equivalente a P1 v P2
s e R(P(s)) equivalente a -s e R(P(s))
Domnio de uma frmula relacional de tupla
Uma expresso no CRT pode gerar uma relao
infinita. Ex.: {t|(t e R)}
Clculo Relacional de Domnio
Para restringir o poder das expresses, impem-se o conceito
de Domnio de uma frmula: dom(P)
o conjunto de todos os valores referenciados por P
explicitamente ou que aparecem em alguma das relaes
referenciadas por P
Uma expresso P considerada segura se, e somente se,
todos os valores que aparecem no resultado so valores de
dom(P)
Dom((t e R)) o conjunto dos valores que aparecem em R.
J a expresso {(t e R)} apresenta valores que no aparecem
no domnio da frmula. Sendo assim, conclui-se que a
expresso NO segura
J a expresso {t| t e R . t[salario] > 2000} uma expresso
segura
Clculo Relacional de Domnio
Um tomo no clculo relacional de domnio tem uma das
seguintes formas:
<x1, x2,...,xn> e r, onde r uma relao sobre n atributos e
x1, x2,...,xn so variveis-domnio ou constantes-domnio (xi
assume valores ou uma constante com um valor do domnio
do atributo correspondente)
x u y, onde x e y so variveis-domnio e u um operador de
comparao (<, s, >, >, = e =). Exige-se que x e y tenham
domnios que possam ser comparados por u
x u c, onde x uma varivel-domnio, u um operador de
comparao e c uma constante no domnio do atributo para
qual x uma varivel-domnio
Clculo Relacional de Domnio
Poder expressivo de linguagens
O CRT restrito a expresses seguras equivalente
(em poder de expresso) lgebra Relacional, ou
seja, para cada expresso vlida da lgebra
Relacional existe uma expresso equivalente no CRT
e vice-versa
Exerccio
Considere o seguinte BD relacional:
reside (nome-pessoa, rua, cidade)
trabalha (nome-pessoa, nome-companhia, salrio)
localizado-em (nome-companhia, cidade)
gerencia (nome-pessoa, nome-gerente)
Escreva uma expresso em:
lgebra relacional
clculo relacional de tupla
clculo relacional de domnio
para cada uma das consultas abaixo:
D o nome de todos os funcionrios que trabalham para a First Bank Corporation
D o nome e cidade de todos os funcionrios que trabalham para a First Bank Corporation
D o nome, a rua e a cidade de todos os funcionrios que trabalham para a First Bank Corporation e recebem
mais de $10.000
D todos os funcionrios que moram na mesma cidade da companhia em que trabalham
D todos os funcionrios que vivem na mesma cidade e na mesma rua que seu gerente
D todos os empregados que no trabalham para a First Bank Corporation
D todos os empregados que recebem mais do que todos os empregados da Small Bank Corporation
Assuma que as companhias podem estar localizadas em diversas cidades. Encontre todas as companhias
localizadas em cada cidade na qual a Small Bank Corporation est localizada
Transaes em Banco de Dados
O paradigma da Transao
Segundo Date 1981: A transao uma
unidade de trabalho do usurio (da
aplicao) que atmica do ponto de
vista da aplicao
Transao uma coleo de operaes
que executa uma nica funo lgica
numa aplicao do banco de dados
O paradigma da Transao
Atravs da transao a aplicao leva o BD
de um estado inicial consistente a outro final,
tambm consistente
A transao representa um comando atmico
ao nvel da aplicao. Por sua complexidade,
pode tambm ser apresentada ao SGBD
como um programa (seqncia de comandos
DML). O SGBD deve trat-la como se fosse
um nico comando
O paradigma da Transao
A transao , portanto, um programa
de aplicao para o qual o SGBD
garante algumas propriedades bem
especficas
Atomicidade
Consistncia
Isolamento
Durabilidade
Propriedades da Transao (ACID)
Atomicidade
O programa que representa a transao
deve, ou executar por completo e com
sucesso sobre o BD, ou deve parecer
nunca antes executado (Lei do Tudo-ou-
Nada)
Esta propriedade garantida pelo SGBD
atravs de seu componente de Recovery
(recuperao em caso de falhas). EX:
UNDO
Propriedades da Transao (ACID)
Consistncia
A transao s pode realizar operaes
corretas sobre o BD, do ponto de vista da
aplicao. Isto , a transao no pode
transgredir qualquer restrio de
integridade declarada ao SGBD
Transaes consistentes sempre levam um
BD de um estado consistente a outro
tambm consistente
Propriedades da Transao (ACID)
Isolamento
Em ambiente multiusurio
(multiprogramado), a execuo de uma
transao no deve ser influenciada pela
execuo de outras
Esta propriedade , normalmente,
garantida pelo SGBD atravs de seu
componente de Controle de Concorrncia
(Scheduler)
Propriedades da Transao (ACID)
Durabilidade
Os resultados de uma transao que termina com
sucesso devem permanecer inalterados no BD, at
que outra transao os altere e tambm termine
com sucesso
Isto , os resultados de transaes que terminam
com sucesso devem sobreviver a falhas (de
transao, de sistema ou de meio de
armazenamento)
Esta propriedade garantida pelo SGBD atravs
de seu componente de Recovery (recuperao)
Tipos de armazenamento
Armazenamento voltil
Memria principal
Memria cache
Armazenamento no-voltil
Discos e fitas magnticos (backup)
Armazenamento estvel
Informaes armazenadas em meio estvel
nunca so perdidos (discos e fitas)
Tipos de falhas
Erros lgicos (falha de transao)
Entrada com erro, dado no encontrado,
overflow...
Erros do sistema
Travamento mtuo (deadlock)
Queda do sistema
Disfunes de hardware onde meio no-voltil
permanece intacto
Falha no disco
Quebra do cabeote de leitura/gravao
Recuperao (Recovery)
Diversos tipos de falhas podem violar a
integridade de um sistema de banco de dados
Ex.: queda de luz, falha na unidade de
armazenamento, falha no programa de aplicao
Testes e controles devem ser incorporados ao
sistema para diminuir a possibilidade de uma
falha
Procedimento de reconstruo:
Leva o BD a um estado consistente, aps uma falha
que o tenha deixado num estado no confivel
Refaz transaes
Informa usurios sobre as ltimas transaes
executadas
Recuperao (Recovery)
Princpios das tcnicas de recuperao:
Redundncia de informao
Limitao:
No existe sistema de
reconstruo/recuperao completamente
seguro
Exemplo: falha nos dados da reconstruo
Hierarquia de armazenamento
Sistema de BD reside em memria no-voltil
BD dividido em unidades de armazenamento de
tamanho fixo, chamados blocos (unidades de
alocao de armazenamento ou de transaes de
dados)
Transaes transferem informaes do disco para a
memria principal e depois as devolvem ao disco
Operaes de entrada e sada so feitas em unidades
de blocos
Blocos fsicos (residentes em disco)
Blocos de buffer (residentes temporariamente em
memria principal)
Hierarquia de armazenamento
Movimentos entre disco e memria principal
so iniciados pelas operaes:
Input (X) Transfere para a memria o bloco
fsico no qual reside um item de dados principal de
X
Output(X) Transfere para o disco o bloco de
buffer no qual reside X e substitui o bloco fsico
apropriado
Hierarquia de armazenamento
Transaes interagem com o sistema de BD
transferindo dados de variveis de programa
para o BD e, do BD para as variveis do
programa, atravs das operaes
Read (X,x
i
) atribui o valor de dado X para a
varivel local x
i


Write (X,x
i
) atribui valor da varivel local x
i

para o item de dados X no bloco de buffer
Modelo de transao
Exemplo bancrio

T: read (A, a1)
a1 := a1 50
write (A,a1)
read (B,b1)
b1 := b1 + 50
write (B,b1)
Observar:
Estado do BD deve ser
consistente

Quando o read
executado o valor a1 ou
b1 lido para memria

O dado s gravado em
disco se aps o comando
write, houver o
comando output(X)
Execuo de uma Transao
Begin Transaction
(BOT)
Seqncia de operaes
DML associadas a RIs
End-Of-Transaction
(EOT)
Inicia aes padro para UNDO
Garantia de atomicidade
da transao
Execuo das operaes DML
e teste de RIs imediatas, com msgs
de erros
Teste de RIs postergadas com msg
de erro e UNDO
Aes padro para REDO garantia de
durabilidade
Avisa a aplicao/usurio do final da
transao
Comandos de uma transao
Incio da transao
BEGIN-TRANSACTION
Fim da transao
Normal: COMMIT-TRANSACTION
Anormal: ABORT-TRANSACTION
Corretude e Atomicidade
Corretude (correctness)
Cada transao deve ser um programa que
preserva a consistncia do BD
Atomicidade
Todas operaes associadas a uma
transao precisam ser executadas at o
final, ou nenhuma deve ser executada
Transao abortada no deve ter efeito
sobre o estado do BD transao deve
ser desfeita (ROLL BACK)
Estados das transaes
Ativo (estado inicial)
Parcialmente compromissado (committed)
depois que a ltima instruo foi executada
Falhado (no pode mais prosseguir)
Abortado - depois que a transao foi
desfeita e o BD foi restaurado ao seu estado
anterior ao incio da transao
Compromissado depois de a transao ser
completada com sucesso
Diagrama de Estados das transaes
ativo
Parcialmente
compromissado
compromissado
falhado
abortado
Como assegurar a atomicidade?
Sistemas baseados em LOG
Log com modificaes adiadas
Log com modificaes imediatas
Paginao com imagem
LOG do Banco de Dados
Registra modificaes no BD
Descreve uma nica gravao no BD e
contm os seguintes campos:
Nome da transao
Nome do item de dado
Valor antigo
Novo valor
Exemplo de LOG
Cada vez que executada uma
alterao sobre uma linha da tabela,
gravado no registro de log
Identificador
da transao
Identificador
do registro
Valor antigo
(before
image)
Valor novo
(after image)
Incluso Txx 100 X
Excluso Txy 200 Y
Alterao Txz 300 A B
LOG com modificaes adiadas
Durante a execuo de uma transao, todas
as operaes write so adiadas at que a
transao seja parcialmente compromissada
Todas atualizaes so registradas no LOG,
que precisa ser mantido em meio estvel
Depois de uma falha o esquema de
recuperao consulta o LOG e cada transao
compromissada refeita usando a operao
redo
Pode-se usar checkpoints para reduzir a
sobrecarga busca no LOG
LOG com modificaes adiadas
Ponto de verificao (checkpoints)
Ponto em que se garante que os contedos
dos buffers foram para o arquivo de LOG e
disco
A execuo de um checkpoint envolve:
Descarregar todos os buffers do arquivo de log
Gravar um registro de checkpoint no arquivo de
log
Descarregar todos os buffers da base de dados
Gravar na base de dados o endereo do ltimo
registro de checkpoint
Cenrio para reconstruo
tempo
T1
T2
T3
T4
T5
checkpoint
Falha no
sistema
Alteraes
at este
momento
foram para
disco
redo
undo
redo
undo
Aes de reconstruo
Quando ocorre uma falha o SGBD verifica o
ltimo checkpoint
A partir deste, neste cenrios, as seguintes aes
devem ser realizadas:
T1 no afetada
T2 e T4 devem ser refeitas, utilizando o arquivo de log
T3 e T5 devem ser desfeitas, tambm utilizando o
arquivo de log
Recuperao de falha de armazenamento
O BD est danificado
Deve ser usada a cpia de segurana. A partir dela
devem ser refeitas todas as operaes, utilizando o
arquivo de log
LOG com modificaes imediatas
Todas atualizaes so aplicadas diretamente
sobre o BD e um log com todas as mudanas
do BD mantido em meio de armazenamento
estvel
Em caso de falha, usa-se o arquivo de log
para restaurar o BD para um estado
consistente
Isso realizado atravs das operaes de
redo e undo
Pode-se usar checkpoints
LOG com modificaes imediatas
Undo (T
i
) restaura o valor de todos os itens
de dados atualizados pela transao aos
valores antigo T
i

Uma transao deve ser desfeita se o log contiver
o registro <T
i
starts>, mas no o registro <T
i

commits>
Redo (T
i
) ajusta o valor de todos os itens
de dados atualizados pela transao T
i
aos
novos valores
Uma transao deve ser refeita se o log contiver o
registro <T
i
starts>, e o registro <T
i
commits>
Exemplo de log em 3 momentos
(a)

<T
0
starts>
<T
0
, A, 1000, 950>
<T
0
, B, 2000, 2050>
(b)

<T
0
starts>
<T
0
, A, 1000, 950>
<T
0
, B, 2000, 2050>
<T
0
commits>
<T
1
starts>
<T
1
, C, 700, 600>

(c)

<T
0
starts>
<T
0
, A, 1000, 950>
<T
0
, B, 2000, 2050>
<T
0
commits>
<T
1
starts>
<T
1
, C, 700, 600>
<T
1
commits>
O que
acontece se
ocorrer um
ERRO nestes
pontos?
Paginao com imagem
Duas tabelas de pginas so mantidas
durante a existncia de uma transao
Tabela de pginas corrente
Tabela de pginas imagem
Ambas so idnticas quando a transao
inicia
Tabela de pginas nunca modificada
durante a transao
Tabela de pginas corrente pode ser alterada
quando uma transao executa uma
operao de write
Paginao com imagem
Todas operaes de input e output usam a
tabela de pginas corrente para localizar uma
pgina do BD no disco
Quando uma tabela parcialmente
compromissada, a tabela de pginas imagem
descartada e a tabela de pginas corrente
torna-se a nova tabela de pginas
Se a transao aborta, a tabela de pginas
corrente simplesmente descartada
Exemplo de tabela de pginas
1
2
3
4
5
6
7
Tabela de
pginas imagem
pginas no disco
1
2
3
4
5
6
7
Tabela de pginas
corrente

Execuo de transao
Suponha que a transao execute uma operao write(X, xj) e
que X resida na pgina i. A operao write executada da
seguinte forma:
Se a pgina i no estiver em memria principal, ento emita input(X)
Se esta a primeira gravao executada na pgina i por essa
transao, ento modifique a tabela de pginas corrente da seguinte
maneira:
Encontre uma pgina livre no disco (BD tem acesso a uma lista
de pginas no usadas)
Remova a pgina encontrada no passo anterior da lista de
pginas livres
Modifique a tabela de pginas corrente para que a entrada i
aponte para a pgina livre encontrada no passo anterior
Atribua o valor de xj para X na pgina de buffer
Paginao com imagem
Para compromissar uma transao:
Assegurar que todas as pginas de buffer na
memria principal que tenham sido alteradas
pela transao sejam gravadas em disco
Gravar a tabela de pginas corrente para o
disco
Gravar o endereo de disco da pgina corrente
na localizao fixa no dispositivo estvel
contendo o endereo da tabela de pginas
imagem
Paginao com imagem
Vantagens
No possui sobrecarga da sada de registro
de log
Recuperao de quedas mais rpida, pois
nenhuma operao de undo e redo
necessria
Desvantagens
Fragmentao dos dados
Coleta de lixo (garbage collection)
Concorrncia
Um dos critrios para classificao de
SGBDs o nmero de usurios que pode
usar o sistema concorrentemente
Monousurio: no mximo um usurio pode
utilizar o sistema a cada vez
Multiusurio: vrios usurios podem utilizar o
sistema concorrentemente
Execuo concorrente na verdade
execuo intercalada (interleaved)
Concorrncia
A
A
B B
C
D
tempo t1 t2 t3 t4
Execuo intercalada
Execuo simultnea
Necessidade de controle de Concorrncia
Cada transao isolada produz um estado
correto do BD
No entanto diversos problemas podem
ocorrer quando transaes so executadas
concorrentemente, sem controle
Problemas de interferncia entre transaes
Atualizao perdida (lost update)
Deadlock
Leitura de valor inexistente (phantom problem)
Problemas relacionados ao controle
de concorrncia (Isolamento)
Quando duas ou mais transaes executam
concorrentemente (em paralelo, acessando
dados comuns), suas operaes podem ser
processadas pelo sistema de computao
de forma intercalada (interleaving)
Interleaving: operaes de uma transao
so processadas entre duas operaes de
outra transao
Interleaving interferncia entre transaes inconsistncia do BD
Problemas relacionados ao controle
de concorrncia (Isolamento)
Alguns fenmenos podem ocorrer a partir do
interleaving
Lost update (perda da alguma atualizao do BD)
Inconsistent Retrieval (acesso invlido a dados)
Phantom problem (problema do fantasma)
Soluo mais simples
Proibir totalmente o interleaving na execuo de
duas ou mais transaes (execuo serial
conseqncia m utilizao dos recursos do
sistema)
Problemas relacionados ao controle
de concorrncia (Isolamento)
Soluo mais econmica
Execuo concorrente mas serializvel de
duas ou mais transaes
Teoria da Serializabilidade
A execuo de um conjunto de transaes
dita serializvel se, e somente se, ela produz
os mesmos resultados e os mesmos efeitos
no BD que alguma das possveis execues
seriais do mesmo conjunto de transaes
J que a execuo de uma transao
consistente sempre leva o BD de um estado
consistente a outro estado consistente, ento
execues seriais (de transaes
consistentes) tambm so corretas
Teoria da Serializabilidade
Se execues seriais so sempre
corretas e qualquer execuo
serializvel sempre equivalente a
alguma execuo serial, ento
execues serializveis so
consideradas tambm corretas

Critrio de correo do BD
Serializabilidade e consistncia de
transao
Se cada transao, quando executada
sozinha sobre o BD, preserva a
consistncia deste, ento a execuo seria
de transaes tambm preserva
J que execues serializveis so
equivalentes a execues seriais, elas
tambm mantm a consistncia do BD
Critrio de correo do BD
Todas as execues serializveis de um
mesmo conjunto de transaes so
igualmente corretas. Portanto o SGBD
pode executar as transaes do
conjunto em qualquer ordem, desde
que o efeito desta execuo seja o
mesmo de alguma execuo serial
deste conjunto
Limitaes das execues serializveis
A serializabilidade no a soluo ideal para
todos os tipos de aplicao. Por exemplo:
Aplicaes estatsticas que realizam operaes
(estatsticas) sobre uma grande massa de dados
Alguns lost updates no fariam sentido, pois no
alterariam valores mdios de forma expressiva
(serializabilidade aqui s penaliza a performance do
sistema)
Aplicaes de controle de processos
Processos contnuos no tem fim, portanto
serializabilidade no tem sentido. Melhor impor
excluso mtua em sees crticas dos programas
executados (ex: uso de semforos, monitores)
Atualizao perdida
Ambas transaes esto alterando o mesmo
dado
Soluo: serializar as transaes
Mecanismo de bloqueio (locking)
Mecanismo de marca de tempo (timestamping)
tempo
T1 T2
L item(X);
X := X-N;


Escreve item(X);


L item(X);
X := X+M;


Escreve item(X);
Bloqueio (locking)
Unidade de bloqueio: usualmente registro
Menor unidade maior concorrncia
tempo
T1 T2
L e bloqueia item(X);
X := X-N;


Escreve e libera item(X);


L e bloqueia item(X);
(espera)
(espera)

L e bloqueia item(X);
X := X+M;
Escreve e libera item(X);
Deadlock
Duas ou mais transaes dependem uma do
final da(s) outra(s) para prosseguir
Dependem de liberaes mtuas de lock
Abordagens para o problema de deadlock
Evitar (utilizado em sistemas operacionais)
Detectar e resolver (adotado em SGBDs)
Deadlock
tempo
T1 T2
L e bloqueia item(X);


L e bloqueia item(Y);
(espera)



L e bloqueia item(Y);


L e bloqueia item(X);
(espera)
Solues para o problema de Deadlock
Evitar o deadlock
No permitir transaes concorrentes
Drstica demais
Vivel apenas em pequenas bases de dados monousurios ou
operadas em batch
Obrigar os usurios a proteger os dados em uma ordem pr-
estabelecida
Difcil de implementar quando h muitos usurios
Impossvel quando o bloqueio comandado por contedo dos
registros
Proteger todos os dados necessrios transao com uma
nica instruo
Linguagens no oferecem instruo to poderosa
Determinao dos dados pode ocorrer ao longo da transao
Solues para o problema de Deadlock
Detectar e resolver o deadlock
Uso de locking
Timeout
SGBD aborta uma das transaes envolvidas
Qual? Critrio a ser definido
Prioridade
Tempo de execuo
Idade
Leitura de valor inexistente (phantom)
Transao 2 v alterao realizada pela transao 1
que foi desfeita
Soluo: dados s devem ser liberados ao final da
transao
tempo
T1 T2
L e bloqueia item(X);
X := X-N;
Escreve e libera item(X);




Aborta transao;
(rollback)





L e bloqueia item(X);
X := X+M;
Escreve e libera item(X);

SQL - Linguagem de Manipulao de Dados
Vises
Vises
= Uma maneira alternativa para a visualizao dos
dados armazenados nas tabelas atravs de VISES
= Uma viso uma tabela lgica (virtual) derivada
de uma ou mais tabelas ou mesmo de outras vises
= Esta tabela virtual no existe por si, mas aparece
ao usurio como se assim o fosse
= As vises aparecem para os usurios como se
fossem tabelas, podendo ser consultadas e, em
alguns casos, atualizadas
= As vises no so armazenadas no banco de dados
Definio de uma Viso
= A base de uma viso a clusula SELECT
= Quando uma viso criada define-se o comando
SELECT que ir criar a viso, cujo contedo gerado
sempre no momento em que a viso acessada
= Sintaxe:

CREATE [OR REPLACE] VIEW nome_da_view
[ (sinonimo[, sinonimo] ) ]
AS SELECT
Definio de uma Viso
= Qualquer tabela derivada (que pode ser
recuperada atravs de uma instruo SELECT) pode,
teoricamente, definir-se como uma viso
= Uma subconsulta numa definio de viso no
inclui o ORDER BY (ORDER BY no faz sentido,
porque o objeto a ser definido a viso uma
tabela e tabelas relacionais no tm ordenamento)

Exemplo
= Quando executada esta CREATE VIEW, a
SELECT-FROM-WHERE que segue a AS (que define
como deriva a viso) no executada, apenas
armazenada no SGBD (tabela SYSVIEWS, no caso de
DB2)
= Neste caso, bons-fornecedores uma janela para
a tabela FRONECEDOR

CREATE VIEW bons_fornecedores
AS SELECT COD_FORNEC, STATUS, CIDADE
FROM FORNCEDOR
WHERE STATUS > 15;
Exemplo
= bons-fornecedores uma tabela dinmica, pois as
modificaes em FORNECEDOR sero automticas e
visveis atravs desta janela (a recproca
verdadeira)
= Viso resultante:


COD_FORNEC NOME STATUS CIDADE
S1 Smith 20 London
S2 Jones 10 Paris
S3 Blake 30 Paris
S4 Clark 20 London
S5 Adams 30 Athens
Vises
= Na definio de uma viso podemos usar o
comando SELECT para selecionar, renomear e
redistribuir colunas
= Expresses aritmticas e funes pr-definidas
podem ser usadas para criar novas colunas
= As condies da clusula WHERE so utilizadas
para selecionar as linhas que devem aparecer numa
viso, assim como efetuar as junes desejadas
= A clusula GROUP BY pode ser utilizada para
sumarizar dados nas vises
Vises
= Uma viso pode ser vista como uma sntese dos
dados existentes nas tabelas ou outras vises
= Nomenclatura:
= O termo relao pode ser usado tanto para tabelas
quanto para vises. Assim, tabelas so relaes
armazenadas fisicamente, enquanto vises so
relaes lgicas
= Usualmente as relaes armazenadas so
chamadas de base tables
Vises
= O exemplo cria uma viso baseada na tabela
FUNCIONARIO, contendo apenas trs colunas desta
tabela e apresentando todas as linhas
Cod_Func Nome Cod_Filial Salario
1 JOAO DA SILVA 348 1800,00
2 JOSE DA SILVA 348 1400,00
3 SILVA DA SILVA 348 1700,00
4 GAUCHO DA
FRONTEIRA
345 1800,00
5 GILMAR D.
PILCHA
345 1900.00
6 GILBERTO
BICHINHO
347 2000.00
7 MARIA DO
SOCORRO
347 1700.00
8 ZORA YONARA 345 1850.00
Funcionrio
Criando uma Viso
CREATE VIEW V_FUNCIONARIO
AS SELECT Cod_Func, Cod_Filial, Nome
FROM FUNCIONARIO
V_Funcionrio
Cod_Func Cod_Filial Nome
1 348 JOAO DA SILVA
2 348 JOSE DA SILVA
3 348 SILVA DA SILVA
4 345 GAUCHO DA FRONTEIRA
5 345 GILMAR D. PILCHA
6 347 GILBERTO BICHINHO
7 347 MARIA DO SOCORRO
8 345 ZORA YONARA
Criando uma Viso
= Este exemplo cria uma viso com todos os
funcionrios da filial de Porto Alegre, realizando ao
mesmo tempo uma juno, criando campos derivados
e restringindo as linhas as serem visualizadas:

CREATE VIEW V_FUNCIONARIO_POA AS
SELECT Cod_Func, Nome, Salario Salario_Antigo, Salario *
1.1 Novo_Salario
FROM FUNCIONARIO FU, FILIAL FI, CIDADE CI
WHERE CI.Nome = PORTO ALEGRE AND
CI.Cod_Cidade = FI.Cod_Cidade AND
FI.Cod_Filial = FU.Cod_Filial
Criando uma Viso

V_Funcionrio_POA
Cod_Func Nome Salario_Antigo Novo_Salario
4 GAUCHO DA FRONTEIRA 1800.00 1980.00
5 GILMAR D. PILCHA 1900.00 2090.00
8 ZORA YONARA 1850.00 2035.00
Consultando uma Viso
= O usurio pode consultar uma viso usando um
comando SELECT. O SGBD junta o SELECT do usurio
com o SELECT da definio da viso e executa a
consulta
= As seguintes consultas poderiam ser realizadas
sobre a viso FUNCIONARIO_POA:
SELECT Cod_Func, Nome, Salario
FROM FUNCIONARIO_POA
WHERE Novo_Salario > 1700.00

SELECT Cod_Func, Nome, Cod_Cidade
FROM FUNCIONARIO_POA, PEDIDO
WHERE FUNCIONARIO_POA.Cod_Func = PEDIDO.Cod_Func
Consultando uma Viso
= Uma viso dependente da(s) tabela(s) sobre a
qual est definida
= Quando so inseridos, alterados ou apagados
dados de uma viso estas alteraes so aplicadas
nas prprias tabelas
= Se as tabelas so 'dropadas' as vises baseadas
nas mesmas tambm so
Consultando uma Viso
= Considerando a seguinte consulta viso
bons_fornecedores:
SELECT *
FROM bons_fornecedores
WHERE CIDADE = London;

= Este SELECT se comporta como um SELECT
normal em uma tabela bsica convencional:
SELECT COD_FORNEC, STATUS, CIDADE
FROM FORNECEDOR
WHERE CIDADE = London
AND STATUS > 15;
Sinnimos
= Vises tambm podem ser utilizadas para
renomear atributos das tabelas, normalmente com o
objetivo de criar nomes mais familiares ao usurio

CREATE VIEW V_FUNCIONARIO2 ( Codigo_Funcionario, Codigo_Filial,
Nome_Funcionario )
AS
SELECT Cod_Func, Cod_Filial, Nome
FROM FUNCIONARIO

CREATE VIEW V_FILIAL ( Cod_Filial, menor_salario, maior_salario,
media_salario )
AS
SELECT Cod_Filial, MIN(salario), MAX(salario), AVG(Salario)
FROM FUNCIONARIO
GROUP BY Cod_Filial
Modificando Vises
= Apenas vises simples podem ser submetidas aos
comandos INSERT, UPDATE ou DELETE
= Em geral, s podem sofrer modificao de dados
vises definidas sobre uma nica tabela e onde cada
linha e coluna da viso correspondem a uma nica
linha e coluna da tabela base
= Vises baseadas em mais do que uma tabela no
podem ser utilizadas para alterar o contedo dos
dados, ou seja, os comandos INSERT, UPDATE e
DELETE no podem ser utilizados
Modificando Vises
= As operaes de modificao so tratadas de
forma similar ao SELECT
= A operao:
UPDATE bons_fornecedores
SET STATUS = STATUS + 10
WHERE CIDADE = Paris;

= Ser convertida pelo tradutor em:
UPDATE FORNECEDOR
SET STATUS = STATUS + 10
WHERE CIDADE = Paris
AND STATUS > 15;
Modificando Vises
= Vises que contm funes de agregao, ou a
clusula GROUP BY ou ainda o termos DISTINCT
tambm no podem ter seu contedo alterado,
independente de serem baseadas em uma ou mais
tabelas
= Nos casos em que permitido a atualizao da
viso, o SGBD traduz a esta modificao para a tabela
fisicamente armazenada e nesta executa o
procedimento
Modificando Vises
= A expresso ALTER no pode ser aplicada sobre
uma viso
= Para que a viso seja modificada necessrio
remover (dropar) e criar a viso novamente
= 'Dropar uma viso afeta apenas os programas que
usam a viso, no afetando as tabelas nas quais a
viso estava baseada
Modificando Vises
= Para remover uma viso usa-se o comando:
DROP VIEW nome_da_viso

= Caso seja removida (dropada) uma tabela bsica,
todas as vises definidas a partir da mesma sero
automaticamente anuladas
Vises Atualizveis
= Vises atualizveis subconjunto linhas e colunas
de uma tabela bsica
= Uma viso subconjunto de coluna teoricamente
atualizvel se, e apenas se, preservar a chave
primria da tabela fundamental
= Viso subconjunto de linha:
CREATE VIEW fornecedores_londres
AS SELECT COD_FORNEC, NOME, STATUS, CIDADE
FROM FORNCEDOR
WHERE CIDADE = London;
Esta viso inclui a
chave primria da
tabela fundamental e
atualizvel
Vises Atualizveis
= Viso com juno:

CREATE VIEW peca_fornec (COD_FORNEC, NOME,
STATUS, CIDADE_FORN, COD_PECA,
NOME_PECA, COR, PESO, CIDADE_PECA)
AS SELECT COD_FORNEC, NOME, STATUS,
CIDADE_FORN, COD_PECA, NOME_PECA,
COR, PESO, CIDADE_PECA
FROM FORNCEDOR, PECA
WHERE CIDADE_FORN = CIDADE_PECA;
Esta viso uma juno (equijoin) e no suporta atualizaes
Vises Atualizveis
= Viso resumo estatstico:

CREATE VIEW peso_qtde (COD_PECA, TOTQTDE)
AS SELECT COD_PECA, SUM (QTDE)
FROM FORNCEDOR_PECA
GROUP BY COD_PECA;
Esta viso no suporta operaes de INSERT e UPDATE no
campo TOTQTDE
Objetivos
= Vises so utilizadas com os seguintes
objetivos:
= Controle de acesso aos dados, restringindo o acesso
dos usurios a determinadas linhas e/ou colunas das
tabelas. Dados ocultos so aqueles no visveis
atravs de determinada viso (obrigar os usurios a
acessar o BD atravs de vises controla a autorizao)
= Simplificao de consultas, reduzindo a
complexidade dos dados e apresentando verses
sintticas das tabelas aos usurios (usurios finais e
desenvolvedores)
Objetivos
= Vises so utilizadas com os seguintes
objetivos:
= Aumento da independncia lgica de dados
= os usurios e os programas de usurios so
independentes da estrutura lgica dos dados
= aspectos a considerar: crescimento e reestruturao
= Crescimento: medida que o BD cresce para
incorporar novos tipos de informaes, o mesmo ocorre
com a definio do BD
= Reestruturao: alterao das informaes do BD.
indesejvel, todavia por vezes inevitvel
= Acesso a dados derivados sem a necessidade de
armazenar dados redundantes

You might also like