Professional Documents
Culture Documents
2
lgebra Relacional...............................................................................................................................................4
Operaes Fundamentais..................................................................................................................................4
Seleo..........................................................................................................................................................4
Projeo........................................................................................................................................................5
Produto Cartesiano.......................................................................................................................................5
Renomeao.................................................................................................................................................6
Unio............................................................................................................................................................7
Diferena......................................................................................................................................................8
Operaes Adicionais.....................................................................................................................................12
Interseo....................................................................................................................................................12
Juno Natural............................................................................................................................................13
Diviso........................................................................................................................................................14
Clculo Relacional..............................................................................................................................................16
Clculo Relacional de Tuplas.........................................................................................................................16
Definies Formais.....................................................................................................................................16
Exemplos....................................................................................................................................................16
Clculo Relacional de Domnios....................................................................................................................18
Definies Formais.....................................................................................................................................18
Exemplos....................................................................................................................................................18
QBE................................................................................................................................................................19
SQL.....................................................................................................................................................................21
Declarao de Domnios.................................................................................................................................22
Manipulao de Tabelas.................................................................................................................................22
DML...............................................................................................................................................................22
DQL................................................................................................................................................................23
Segunda Lista de Exemplos............................................................................................................................24
Terceira Lista de Exemplos............................................................................................................................25
SQL Embutida................................................................................................................................................27
Reconhecendo Comandos SQL Embutidos................................................................................................27
Uma Primeira Viso da SQL Embutida......................................................................................................27
Variveis da Linguagem Hospedeira na SQL Embutida............................................................................27
Declarao de Variveis.............................................................................................................................28
SELECT na SQL Embutida........................................................................................................................28
UPDATE em SQL Embutida......................................................................................................................28
DELETE e INSERT na SQL Embutida......................................................................................................28
Outros Comandos SQL Embutidos............................................................................................................29
Cursores......................................................................................................................................................29
O Uso de Cursores Para UPDATE e DELETE..........................................................................................29
nome_f
Bingen
Botafogo
Flamengo
Flamengo
Icara
Madureira
Madureira
depsitos
conta_#
22473
20018
20210
20500
19872
19880
19890
nome_c
Lindalva
Pedro
Pedro
Paulo
Joo
Rosa
Pedro
saldo
nome_f
Bingen
Flamengo
Icara
Madureira
emprstimos
emprstimo-#
6698
5578
1455
3367
nome_c
Lindalva
Paulo
Joo
Pedro
valor
nome_f
Icara
Bingen
Botafogo
Flamengo
Madureira
filiais
ativo
9000000
17000000
23000000
34000000
21000000
889
8450
5100
2315
3243
5312
4111
1500
2000
1000
2000
cidade_f
Niteri
Petrpolis
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
correntistas
rua
Miguel de Frias
Gavio Peixoto
Alfenas
Curimat
Cotingo
Mem de S
Curimat
Uruguai
nome_c
Joo
Laerte
Lindalva
Geraldo
Laura
Paulo
Pedro
Rosa
cidade_c
Niteri
Niteri
Petrpolis
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
clientes
nome_c
Joo
Laerte
Laura
Lindalva
Paulo
Pedro
gerente
Erasmo
Pedro
Joo
Joo
Clia
Pedro
lgebra Relacional
A lgebra Relacional uma linguagem de consulta procedimental que possui seis operaes
fundamentais e diversas outras. Cada uma das operaes da lgebra Relacional que se seguem produz como
resultado uma relao.
Operaes fundamentais
Seleo (unria)
Projeo (unria)
Renomeao (unria)
Produto cartesiano (binria)
Unio (binria)
Diferena (binria)
Outras operaes
Interseo
Juno natural
Diviso
Atribuio
Operaes Fundamentais
Seleo
Esta operao seleciona as tuplas que atendem a uma determinada condio. denotada pela letra
grega sigma com o predicado aparecendo como subscrito. A relao argumento aparece entre parnteses
depois do sigma. Para selecionar as tuplas da relao emprstimos aonde a filial seja Madureira, escrevese
Para obter os clientes que tenham o mesmo nome que seus gerentes pode-se escrever
Projeo
Esta operao copia de sua relao argumento apenas os atributos especificados. Como uma relao
um conjunto eventuais tuplas duplicadas so eliminadas. Projeo denotada pela letra grega pi maisculo
com os atributos aparecendo como subscritos. Para obter uma relao de emprstimos mostrando apenas os
correntistas e filiais escreve-se
nome_c
Lindalva
Paulo
Joo
Rosa
Pedro
Para obter os nomes dos correntistas que tenham o mesmo nome que seus gerentes escreve-se
Produto Cartesiano
O Produto Cartesiano de duas relaes denotado por . O resultado da operao r1 r2 uma nova
relao com uma tupla para cada possvel par de tuplas de r1 e r2. Para evitar ambigidade os atributos tem
seus nomes concatenados com os nomes das relaes a que pertencem. Quando inexiste ambigidade o nome
da relao pode ser omitido.
O resultado da operao uma nova relao. Se r1 possui n1 tuplas e r2 possui n2 tuplas ento r = r1 r2 possui
n1.n2 tuplas. Para encontrar os clientes do gerente Joo e a cidade na qual eles vivem necessita-se de
informaes das relaes correntistas e clientes e pode-se escrever
gerente
Joo
Joo
nome_c
Laura
Lindalva
rua
Cotingo
Alfenas
cidade_c
Rio de Janeiro
Petrpolis
Se desta relao apenas se desejasse o nome do correntista e sua cidade usar-se-ia uma projeo
cidade_f
Rio de Janeiro
Petrpolis
Renomeao
A operao de renomeao resolve os problemas que ocorrem quando se faz o produto cartesiano de
uma relao por ela mesma. Considere-se, por exemplo, que se deseja encontrar os nomes dos correntistas que
moram na mesma cidade e na mesma rua que Pedro. Pode-se obter a cidade e a rua de Pedro escrevendo
cidade_c
Rio de Janeiro
Para obter outros correntistas com a mesma informao necessita-se referenciar novamente a relao
correntistas, da forma
Na expresso anterior P um predicado de seleo requerendo a igualdade de rua e cidade_c. Para distinguir
entre os diferentes valores de rua aparecendo no produto cartesiano usa-se o operador de renomeao
denotado pela letra grega ro cujo ndice o novo nome da relao e o argumento entre parnteses o nome
anterior, ou seja
nome_c
Pedro
Pedro
Geraldo
Geraldo
cidade_c
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
nome_c
Pedro
Geraldo
Pedro
Geraldo
corrent2
rua
Curimat
Curimat
Curimat
Curimat
cidade_c
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Como o que se quer dessa relao apenas o nome dos correntistas faz-se uma projeo
obtendo-se
nome_c
Pedro
Geraldo
Unio
A operao de unio para funcionar tal como na teoria dos conjuntos necessita que as relaes a se
unir tenham o mesmo nmero de atributos e que os domnios dos atributos correspondentes coincidam. Para
encontrar os usurios da agncia Madureira preciso encontrar todos aqueles que ou tenham conta na agncia
ou que tenham feito emprstimos l, escrevendo-se
nome _c nome _ f " Madureira" empr stimos nome _c nome _ f " Madureira" depsitos
nome_f
Madureira
emprstimos em Madureira
emprstimo_#
nome_c
3367
Pedro
valor
2000
emprstimos em Madureira
nome_c
Pedro
nome_f
Madureira
Madureira
depsitos em Madureira
conta_#
nome_c
19880
Rosa
19890
Pedro
saldo
5312
4111
depsitos em Madureira
nome_c
Rosa
Pedro
usurios em Madureira
nome_c
Rosa
Pedro
Diferena
A operao diferena encontra as tuplas que esto em uma relao mas no esto na outra. Para
encontrar os usurios do banco que na agncia Madureira tenham conta corrente mas no tenham
emprstimos pode-se escrever
nome _c nome _ f " Madureira" depsitos nome _c nome _ f " Madureira" empr stimos
o resultado obtido
nome_f
Madureira
Madureira
depsitos
conta_#
19880
19890
nome_c
Rosa
Pedro
saldo
5312
4111
depsitos em Madureira
nome_c
Rosa
Pedro
nome_f
Madureira
emprstimos
emprstimo_#
nome_c
3367
Pedro
valor
2000
emprstimos em Madureira
nome_c
Pedro
usurios com conta e sem emprstimos em Madureira
nome_c
Rosa
Para encontrar o maior saldo dentre as contas correntes do banco o que se faz encontrar uma
relao r que no contenha o maior saldo e verificar a diferena entre a relao anterior e a relao de
depsitos. Para encontrar r o que se faz
obtendo-se
depsitos d(depsitos)
nome_f
Bingen
Bingen
Bingen
Bingen
Bingen
Bingen
Bingen
Botafogo
Botafogo
Botafogo
Botafogo
Botafogo
Botafogo
Botafogo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Icara
Icara
Icara
Icara
Icara
Icara
Icara
depsitos
conta_#
nome_c
22473 Lindalva
22473 Lindalva
22473 Lindalva
22473 Lindalva
22473 Lindalva
22473 Lindalva
22473 Lindalva
20018 Pedro
20018 Pedro
20018 Pedro
20018 Pedro
20018 Pedro
20018 Pedro
20018 Pedro
20210 Pedro
20210 Pedro
20210 Pedro
20210 Pedro
20210 Pedro
20210 Pedro
20210 Pedro
20500 Paulo
20500 Paulo
20500 Paulo
20500 Paulo
20500 Paulo
20500 Paulo
20500 Paulo
19872 Joo
19872 Joo
19872 Joo
19872 Joo
19872 Joo
19872 Joo
19872 Joo
saldo
nome_f
889Bingen
889Botafogo
889Flamengo
889Flamengo
889Icara
889Madureira
889Madureira
8450Bingen
8450Botafogo
8450Flamengo
8450Flamengo
8450Icara
8450Madureira
8450Madureira
5100Bingen
5100Botafogo
5100Flamengo
5100Flamengo
5100Icara
5100Madureira
5100Madureira
2315Bingen
2315Botafogo
2315Flamengo
2315Flamengo
2315Icara
2315Madureira
2315Madureira
3243Bingen
3243Botafogo
3243Flamengo
3243Flamengo
3243Icara
3243Madureira
3243Madureira
d
conta_#
nome_c
22473 Lindalva
20018 Pedro
20210 Pedro
20500 Paulo
19872 Joo
19880 Rosa
19890 Pedro
22473 Lindalva
20018 Pedro
20210 Pedro
20500 Paulo
19872 Joo
19880 Rosa
19890 Pedro
22473 Lindalva
20018 Pedro
20210 Pedro
20500 Paulo
19872 Joo
19880 Rosa
19890 Pedro
22473 Lindalva
20018 Pedro
20210 Pedro
20500 Paulo
19872 Joo
19880 Rosa
19890 Pedro
22473 Lindalva
20018 Pedro
20210 Pedro
20500 Paulo
19872 Joo
19880 Rosa
19890 Pedro
saldo
889
8450
5100
2315
3243
5312
4111
889
8450
5100
2315
3243
5312
4111
889
8450
5100
2315
3243
5312
4111
889
8450
5100
2315
3243
5312
4111
889
8450
5100
2315
3243
5312
4111
nome_f
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
nome_f
Bingen
Bingen
Bingen
Bingen
Bingen
Bingen
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Icara
Icara
Icara
Icara
Madureira
Madureira
Madureira
saldo
889
8450
5100
2315
3243
5312
4111
889
8450
5100
2315
3243
5312
4111
saldo
8450
5100
2315
3243
5312
4111
8450
8450
5100
3243
5312
4111
8450
5100
5312
4111
8450
5100
5312
depsitos
saldo
889
5100
2315
3243
5312
4111
10
Essa relao contm todos os saldos exceto o maior deles. Para finalizar a consulta calcula-se a
diferena
11
Operaes Adicionais
Interseo
A operao de interseo retorna uma relao que contm as tuplas que estejam em ambas as
relaes argumentos da interseo.
r s = r - (r - s)
Para obter todos os usurios que possuam tanto emprstimos quanto contas correntes no banco escreve-se
nome _c nome _ f " Madureira" empr stimos nome _c nome _ f " Madureira" depsitos
obtendo-se
nome_f
Madureira
emprstimos em Madureira
emprstimo_#
nome_c
3367
Pedro
valor
2000
emprstimos em Madureira
nome_c
Pedro
nome_f
Madureira
Madureira
depsitos em Madureira
conta_#
nome_c
19880
Rosa
19890
Pedro
saldo
5312
4111
depsitos em Madureira
nome_c
Rosa
Pedro
usurios com emprstimos e depsitos em Madureira
nome_c
Rosa
Pedro
12
Juno Natural
A operao de juno natural combina o produto cartesiano e a seleo em uma s operao. A
seleo fora a igualdade nos atributos que aparecem nos esquemas das duas relaes. Para encontrar os
usurios que possuem emprstimos no banco e as cidades em que moram necessrio utilizar as relaes
emprstimos e correntistas, de uma das formas abaixo
O resultado
nome_f
Bingen
Bingen
Bingen
Bingen
Bingen
Bingen
Bingen
Bingen
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Flamengo
Icara
Icara
Icara
Icara
Icara
Icara
Icara
Icara
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
Madureira
emprstimos correntistas
emprstimos
emprstimo_# nome_c
valor
nome_c
6698
Lindalva
1500
Joo
6698
Lindalva
1500
Laerte
6698
Lindalva
1500
Lindalva
6698
Lindalva
1500
Geraldo
6698
Lindalva
1500
Laura
6698
Lindalva
1500
Paulo
6698
Lindalva
1500
Pedro
6698
Lindalva
1500
Rosa
5578
Paulo
2000
Joo
5578
Paulo
2000
Laerte
5578
Paulo
2000
Lindalva
5578
Paulo
2000
Geraldo
5578
Paulo
2000
Laura
5578
Paulo
2000
Paulo
5578
Paulo
2000
Pedro
5578
Paulo
2000
Rosa
1455
Joo
1000
Joo
1455
Joo
1000
Laerte
1455
Joo
1000
Lindalva
1455
Joo
1000
Geraldo
1455
Joo
1000
Laura
1455
Joo
1000
Paulo
1455
Joo
1000
Pedro
1455
Joo
1000
Rosa
3367
Pedro
2000
Joo
3367
Pedro
2000
Laerte
3367
Pedro
2000
Lindalva
3367
Pedro
2000
Geraldo
3367
Pedro
2000
Laura
3367
Pedro
2000
Paulo
3367
Pedro
2000
Pedro
3367
Pedro
2000
Rosa
correntistas
rua
Miguel de Frias
Gavio Peixoto
Alfenas
Curimat
Cotingo
Mem de S
Curimat
Uruguai
Miguel de Frias
Gavio Peixoto
Alfenas
Curimat
Cotingo
Mem de S
Curimat
Uruguai
Miguel de Frias
Gavio Peixoto
Alfenas
Curimat
Cotingo
Mem de S
Curimat
Uruguai
Miguel de Frias
Gavio Peixoto
Alfenas
Curimat
Cotingo
Mem de S
Curimat
Uruguai
cidade_c
Niteri
Niteri
Petrpolis
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Niteri
Niteri
Petrpolis
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Niteri
Niteri
Petrpolis
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Niteri
Niteri
Petrpolis
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
13
nome_f
Bingen
Flamengo
Icara
Madureira
nome_c
Lindalva
Paulo
Joo
Pedro
cidade_c
Petrpolis
Rio de Janeiro
Niteri
Rio de Janeiro
cidade_c
Petrpolis
Rio de Janeiro
Niteri
Rio de Janeiro
Diviso
A operao de diviso destina-se s consultas que incluem a frase para todo. Quando se divide uma
relao de grau m+n (com m+n colunas) por uma relao grau n (com n colunas) se obtm uma relao grau
m (com m colunas). Para encontrar todos os usurios que possuem contas em todas as agncias situadas no
Rio de Janeiro usam-se trs passos. No primeiro determinam-se os nomes das agncias do Rio de Janeiro
nome_f
Botafogo
Flamengo
Madureira
filiais
ativo
23000000
34000000
21000000
cidade_f
Rio de Janeiro
Rio de Janeiro
Rio de Janeiro
nome_f
Botafogo
Flamengo
Madureira
14
O passo seguinte consiste em determinar os pares nome_c e nome_f para os quais o correntista
possua uma conta
nome_c
Pedro
Pedro
Paulo
Rosa
Pedro
No terceiro passo preciso determinar os correntistas que aparecem em r2 com todos os nomes de filiais de r1,
o que feito pela operao de diviso r2 r1.
obtendo-se
nome_c
Pedro
15
Clculo Relacional
Clculo Relacional de Tuplas
Definies Formais
A notao t r(Q(t)) significa existe uma tupla t na relao r tal que o predicado Q(t) verdadeiro.
Uma expresso de tupla de Clculo Relacional da forma {t P(t)} onde P uma frmula. Uma
varivel de tupla uma varivel livre a menos que seja quantificada por ou . Quando isto ocorrer a varivel
dita ligada. Uma frmula constituda de tomos. Um tomo de uma das formas:
s r, aonde s uma varivel de tupla e r uma relao, no se aceitando para a relao ;
s[x] u[y], aonde s e u so variveis de tupla, x e y so atributos e um operador de
comparao
s[x] c, aonde c uma constante no domnio do atributo x
As frmulas so constitudas de tomos de acordo com as seguintes regras:
Um tomo uma frmula
Se P uma frmula, ento P e (P) so frmulas
Se P1 e P2 so frmulas, ento P1 P2, P1 P2 e P1=P2 tambm so frmulas
Se P(s) uma frmula contendo uma varivel livre de tupla, s, ento s r(P(s)) e s r(P(s))
tambm so frmulas
So equivalentes conhecidos
P1 P2 = (P1 P2)
t r(P(t)) = t r(P(t))
P1 P2 = P1 P2
Exemplos
Para encontrar todos os atributos das tuplas correspondentes aos emprstimos maiores do que 1200
escreve-se
{t t emprstimos t[valor] > 1200}
Para encontrar apenas os nomes dos correntistas correspondentes aos emprstimos maiores do que
1200 procura-se o conjunto de todas as tuplas t tais que existe uma tupla s na relao emprstimos para a
qual os valores de t e de s para os atributos nome_c so iguais e o valor de s para o atributo valor maior do
que 1200 e escreve-se
{t s emprstimos (t[nome_c] = s[nome_c] s[valor] > 1200)}
Com outra notao tambm pode-se escrever, para a mesma consulta
{t[nome_c] t emprstimos t[valor] > 1200)}
Para encontrar os usurios que obtiveram emprstimos na agncia Madureira obtendo tambm as
cidades em que moram o que se tem de recuperar o conjunto das tuplas (nome_c,cidade_c) para as quais
nome_c um tomador de emprstimo na agncia Madureira e cidade a cidade aonde mora nome_c. A
varivel s servir para caracterizar o usurio como tomador de emprstimo na agncia Madureira. A varivel
u restrita a pertencer ao mesmo usurio s e garante que cidade_c a moradia do usurio.
{t s emprstimos (t[nome_c] = s{nome_c] s[nome_f] = Madureira)
u correntistas (u[nome_c] = s[nome_c] t[cidade_c] = u[cidade_c])}
16
Para encontrar os usurios que possuem uma conta, um emprstimo, ou ambos, na agncia Madureira
{t s emprstimos (t[nome_c] = s{nome_c] s[nome_f] = Madureira)
u depsitos (u[nome_c] = s[nome_c] u[nome_f] = Madureira)}
Para encontrar os usurios que possuem tanto uma conta quanto um emprstimo na agncia
Madureira basta trocar, na expresso anterior, por .
Para encontrar os usurios que possuem uma conta na agncia Madureira mas no possuem um
emprstimo l
{t u depsitos (t[nome_c] = u{nome_c] s[nome_f] = Madureira)
s emprstimos (t[nome_c] = s[nome_c] s[nome_f] = Madureira)}
Para encontrar todos os usurios que possuem uma conta em todas as agncias da cidade do Rio de
Janeiro, na lgebra Relacional usa-se diviso e no Clculo Relacional de tuplas usa-se a implicao. O
resultado o conjunto de todas as tuplas nome_c t tais que para todas as tuplas u na relao filiais, se os
valores de u para o atributo cidade forem iguais a Rio de Janeiro, ento o usurio tem uma conta na filial
cujo nome aparece no atributo nome_f de u.
{t u filias (u[cidade_f] = Rio de Janeiro) s depsitos (t[nome_c] = s[nome_c]
u[nome_f] = s[nome_f])}
Uma expresso {t P(t)} segura se for finita e se todos os valores que aparecem no resultado forem
valores do domnio de P. Como exemplo de expresso infinita pode-se escrever
{t (t emprstimos)}
Definies Formais
Uma expresso da forma {<x1, x2, ..., xn> P(x1, x2, ..., xn)} , aonde xi1 , 1 i n representam variveis
de domnios e P uma frmula.
Um tomo no Clculo Relacional de domnio de uma das formas:
<x1, x2, ..., xn> r, aonde r uma relao de n atributos e xi1 , 1 i n so variveis de domnio ou
constantes ;
x [y, aonde, x e y so variveis de domnio e um operador de comparao
x c, aonde c uma constante no domnio do atributo x
As frmulas so constitudas de tomos de acordo com as seguintes regras:
Um tomo uma frmula
Se P uma frmula, ento P e (P) so frmulas
Se P1 e P2 so frmulas, ento P1 P2, P1 P2 e P1=P2 tambm so frmulas
Se P(x) uma frmula aonde x uma varivel de domnio, ento x (P(x)) e x (P(x)) tambm
so frmulas
Exemplos
Para encontrar todos os atributos das tuplas correspondentes aos emprstimos maiores do que 1200
escreve-se
{<f1 e1 c1 v> <f1 e1 c1 v> emprstimos v > 1200}
nome_f
valor
Para encontrar apenas os nomes dos correntistas correspondentes aos emprstimos maiores do que
1200 escreve-se
17
nome_c
Para encontrar os usurios que possuem uma conta, um emprstimo, ou ambos, na agncia Madureira
escreve-se
{<c> f1 e1 v (<f1 e1 c1 v> emprstimos f = Madureira) f1 o1 n(<f1 o1 c1 s> depsitos
f = Madureira)}
nome_f
saldo
Para encontrar todos os usurios que possuem uma conta em todas as agncias da cidade do Rio de
Janeiro escreve-se
{<c> x1 y1 z ((<x1 y1 z > filiais) z Rio de Janeiro ( o1 s(<x1 o1 c1 s> depsitos ))}
Se esta expresso for considerada de difcil entendimento ela pode ser re escrita utilizando
implicao.
{<c> nf1 at1 cf ((<nf1 at1 cf > filiais) cf = Rio de Janeiro) o1 s(<nf1 o1 c1 s>
depsitos ))}
nome_f
nome_f
cidade_f
saldo
So equivalentes:
A lgebra Relacional
QBE
18
emprstimos
filiais
nome_f
nome_f
nome_f
correntistas
clientes
conta_#
ativo
nome_c
nome_c
nome_c
emprstimo-#
saldo
nome_c
valor
cidade_f
rua
cidade_c
gerente
nome_f
P.
ativo
cidade_f
Para listar os nomes das filiais do banco na cidade do Rio de Janeiro escreve-se
filiais
nome_f
P.
ativo
cidade_f
Rio de Janeiro
Para listar os nomes das filiais do banco com ativo superior a 2.000.000 escreve-se
19
filiais
nome_f
P.
ativo
> 2000000
cidade_f
Para listar os nomes e as cidades dos correntistas que possuam saldo superior a 2.000 escreve-se
correntistas
depsitos
nome_c
P.X
nome_f
X
rua
conta_#
cidade_c
P
nome_c
saldo
> 2000
Para listar os nomes dos clientes que tenham conta na agncia Icara ou que tenham emprstimos
superiores a 3.000 escreve-se
emprstimos
nome_f
Icara
emprstimo-#
nome_c
P.X
P.Y
valor
> 3000
Para listar todos os atributos dos clientes que tenham emprstimos na agncia Flamengo escreve-se
emprstimos
P.
nome_f
Flamengo
emprstimo-#
nome_c
valor
20
SQL
A linguagem Structured Query Language, ou SQL, baseada no modelo relacional mas no uma
rgida implementao daquele mtodo. A primeira verso da linguagem foi padronizada em 1986. Uma
reviso feita em 1992 foi chamada de SQL2. Presentemente trabalha-se em nova verso prevista para meados
de 1998 chamada de SQL3. SQL3 pretende ser uma linguagem computacional completa para a definio e
gerenciamento de objetos complexos persistentes.
As unidades bsicas da linguagem so tabelas, linhas e colunas.
Uma relao mapeada em uma tabela, uma coluna representa um elemento de dado presente na
tabela e uma linha representa uma instncia de um registro.
Algumas de suas caractersticas (da SQL) so:
A linguagem no sensvel a espaos CR, LF, TAB etc.
Palavras reservadas so limitadas por vrgulas quando aplicvel e usam-se parnteses para agrupamentos.
Quando se utiliza mltiplas consultas usa-se ; para separar umas das outras.
As consultas so indiferentes a maisculas.
Um esquema uma coleo de zero ou mais tabelas sendo que cada tabela s pode pertencer a um
esquema. Um catlogo contm zero ou mais esquemas.
A linguagem SQL dividida em trs partes:
Data Definition Language, ou DDL, para definio dos dados, criao de tabelas (CREATE TABLE).
Data Control Language, ou DCL, para controlar a segurana e o acesso aos dados (GRANT REVOKE).
Data Manipulation Language, ou DML, para manipulao dos dados, armazenamento, modificao e
recuperao.
A linguagem SQL pode ser utilizada pelos usurios finais. As tabelas relacionais so autnomas.
Referncias cruzadas entre tabelas podem ser estabelecidas por comandos SQL.
A lgebra relacional opera sobre conjuntos. Para bancos de dados relacionais no preciso navegar
sobre arquivos. Toda consulta retorna todos os dados que respondem a consulta.
Usurios da linguagem SQL no precisam se preocupar com ndices, chaves ou qualquer outra
estrutura de navegao. Para esses usurios qualquer campo pode ser uma chave.
Quando duas ou mais tabelas so relacionadas pela linguagem SQL existe uma juno.
Os BD relacionais tentam postergar o mapeamento de relaes entre as estruturas de dados at o
momento em que um agente deseja que algo seja feito.
Muito embora a linguagem SQL no seja extremamente amigvel sua operao intuitiva para
muitos usurios e mais simples que a maioria das linguagens procedimentais de acesso.
Muitos processadores de texto, planilhas e EIS esto sendo construdos com interfaces SQL.
Quase todos os fornecedores de BD relacionais embutem em seus pacotes suas prprias solues de
gerenciamento de interfaces e linguagem de 4a gerao.
21
Declarao de Domnios
Pela declarao de domnios pode-se dar um nome a um tipo de dados de tamanho especificado. Isto
auxilia quando vrias colunas tem caractersticas comuns.
CREATE DOMAIN NMERO_EMP AS CHAR(5);
A pr definio de um objeto de dados til para garantir que certa entrada em uma tabela tenha a
forma dos dados esperados para essa coluna.
CREATE DOMAIN NMERO_EMP AS CHAR(5) CHECK (VALUE IS NOT NULL);
SQL possui dois tipos de strings: CHAR e VARCHAR. Se uma entrada for especificada como
CHAR(N) e o string for menor do que N, os caracteres restantes recebem branco. Por outro lado
VARCHAR sempre armazena exatamente o string recebido (no completa a cadeia de caracteres) e o tamanho
da especificao de VARCHAR serve apenas para limite superior.
Sempre que uma tabela fizer referncia a outra preciso definir anteriormente a tabela referenciada.
Manipulao de Tabelas
Para remover de um BD uma tabela EMPREGADOS o comando : DROP TABLE EMPREGADOS;
Para excluir uma coluna de uma tabela o comando :
ALTER TABLE EMPREGADOS
DROP primeironome;
Para adicionar uma coluna a uma tabela o que se faz :
ALTER TABLE EMPREGADOS
ADD datanascimento DATE NOT NULL;
Uma clusula ALTER permite diversas alteraes.
DML
Suponha-se que a criao de uma tabela foi feita da forma
CREATE TABLE EMPREGADOS
(
emp_nmero
NUM(10)
PRIMARY KEY,
ltimonome
VARCHAR(20)
NOT NULL,
primeironome VARCHAR(20)
NOT NULL,
funo
VARCHAR(20)
NOT NULL,
departamento
VARCHAR(20)
);
A incluso de uma linha pode ser feita da maneira que se segue.
INSERT INTO EMPREGADOS
VALUES (
0466,
Brito,
Claudio,
Marinheiro,
);
ou
22
Retorno
Nmero de valores de uma coluna
Soma dos valores de uma coluna/expresso
Mdia dos valores de uma coluna/expresso
Maior valor em uma coluna
Menor valor em uma coluna
A diferena entre asa clusulas HAVING e WHERE que a condio de busca WHERE se aplica a
linhas isoladas antes do agrupamento, enquanto que a condio de busca da clusula HAVING se aplica a
grupos de linhas. Quando se usa a clusula GROUP BY a clusula HAVING se aplica a cada um dos grupos
formado com valores iguais na coluna especificada para o grupamento. Caso no exista uma clusula GROUP
BY ento .a clusula HAVING aplica-se a toda a tabela.
Se duas tabelas possuem, cada qual, uma coluna com um domnio comum, estas tabelas podem ser
unidas por uma operao de juno com base nas colunas definidas sobre o domnio comum. A operao de
juno retorna uma nova tabela da qual cada linha produto da concatenao de uma linha de cada uma das
tabelas que contriburam para a operao de juno. As linhas contribuintes foram selecionadas pelos seus
23
valores na colunas de domnio comum. Junes nas quais a condio de juno baseada na igualdade so
chamadas de equi-junes que caracterizam-se por gerar tabelas que possuem duas colunas idnticas.
Quando se elimina a duplicidade de colunas por uma operao de projeo a juno se torna uma juno
natural.
Quando se deseja obter e combinar o resultado de diversas consultas usa-se a unio de tabelas.
Quando se utiliza uma operao de unio a linguagem SQL automaticamente elimina as duplicatas sem
necessidade de tornar explcita a clusula Distinct. Nas situaes nas quais uma chave primria est
relacionada com uma chave estrangeira e, esta chave estrangeira possa ser nula para algum valor da chave
primria o efeito combinado da unio poderia ficar comprometido. Considere-se, por exemplo, uma tabela na
qual a chave primria fosse vendedor e outra tabela na qual a chave primria fosse cliente e, nesta ltima o
vendedor fosse um atributo. Caso um vendedor estivesse sem cliente ele no apareceria na tabela de
clientes. Para que uma juno de tabelas na qual as tuplas de uma tabela sem correspondncia na outra
apaream no resultado concatenadas com uma tupla nula cria-se o conceito de juno externa.
Para recuperar toda uma tabela escreve-se
select from empregados;
Para obter a lista dos empregados do departamento comercial escreve-se
select from empregados
where departamento = Comercial;
Para obter esta lista classificada em ordem ascendente de sobrenome escreve-se
select from empregados
where departamento = Comercial
order by ltimonome;
Para desta lista recuperar apenas os nmeros dos empregados escreve-se
select emp_nmero from empregados
where departamento = Comercial
order by ltimonome;
Para obter a lista dos empregados chamados Jos Silva escreve-se
select from empregados
where (primeironome = Jos) and (ltimonome = Silva);
Para obter todos os dados das tabelas EMPREGADOS e GERAL escreve-se
select empregados., geral.
from empregados, geral;
Para obter os salrios do pessoal do departamento comercial, sabendo que os salrios ficam na tabela
GERAL escreve-se
select g.salrio
from empregados e, geral g
where e.departamento = Comercial
and g.emp_nmero = e.emp_nmero;
Verificar quem ganha mais de R$2.500,00 pode ser feito da forma
select salrio
from geral
where salrio > 2.500;
Verificar quem ganha mais de R$2.500,00 no departamento comercial pode ser feito da forma
select g.salrio
from empregados e, geral g
where e.departamento = Comercial
and g.emp_nmero = e.emp_nmero
and g.salrio > 2.500;
A mdia salarial desse departamento pode ser obtida utilizando-se AVG.
select avg (g.salrio)
from empregados e, geral g
where e.departamento = Comercial
and g.emp_nmero = e.emp_nmero;
24
25
26
27
SQL Embutida
A SQL embutida fornece um meio para construir a consulta necessria num programa de computador
e torna possvel escrever o programa sem que se saiba nada a respeito da maneira como os dados esto
armazenados. Em outras palavras, a SQL embutida mantm os ideais dos bancos de dados relacionais e das
linguagens de consulta como SQL.
Est ao encargo do programador fornecer as variveis da linguagem hospedeira para os resultados
das consultas ou para os valores variveis das condies da linguagem da consulta. Estas ltimas so s vezes
chamadas de variveis de ligao. Adotar-se- o termo variveis de ligao para tais variveis.
Para o texto que se segue se utilizado um Banco de Dados Judicirio, cujas relaes so definidas
como se segue.
ID (nmero_de_registro, nome_do_prisioneiro, identificao_do_prisioneiro)
APELIDO (identificao_do_prisioneiro, apelido_do_prisioneiro)
NASCIMENTO (identificao_do_prisioneiro, data_do_nascimento)
PRISO (nmero_de_registro, data_da_priso, pena)
Reconhecendo Comandos SQL Embutidos
Todos os comandos SQL embutidos so precedidos pelas palavras-chave EXEC SQL. Dependendo
da linguagem de programao hospedeira, eles so encerrados por um ponto e vrgula ou algum outro
terminador, ou at mesmo sem nenhum terminador em particular.
Uma Primeira Viso da SQL Embutida
Com a utilizao das palavras-chave EXEC SQL para iniciar e do ponto e vrgula para encerrar,
muitos comandos SQL podem ser embutidos na linguagem hospedeira simplesmente pela sua incluso no
programa, como, por exemplo:
exec sql update priso
set pena = dirigir embriagado
where identificao_do_prisioneiro = 111111;
ou
exec sql delete
from priso
where identificao_do_prisioneiro = 111111;
Variveis da Linguagem Hospedeira na SQL Embutida
Variveis da linguagem de programao hospedeira devem aparecer em comandos SQL embutidos.
Assim, um formato para o comando SELECT na SQL embutida :
exec sql select < lista-objetivo >
into < variveis da linguagem hospedeira >
from
where
;
28
29
30
Todos os comandos SQL que no envolvam matrizes podem ser embutidos, bastando preced-los por
EXEC SQL e encerr-los por um ponto e vrgula. Na existncia de matrizes, os cursores podem ser usados
como mostrado nos exemplos acima.
31