livro banco de dados volume 04
Post on 29-Oct-2015
86 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
Recife, 2010
Banco de Dados
UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO (UFRPE)
COORDENAO GERAL DE EDUCAO A DISTNCIA (EAD/UFRPE)
Sandra de Albuquerque Siebra
Volume 4
-
Universidade Federal Rural de Pernambuco
Reitor: Prof. Valmar Corra de Andrade
Vice-Reitor: Prof. Reginaldo Barros
Pr-Reitor de Administrao: Prof. Francisco Fernando Ramos Carvalho
Pr-Reitor de Extenso: Prof. Paulo Donizeti Siepierski
Pr-Reitor de Pesquisa e Ps-Graduao: Prof. Fernando Jos Freire
Pr-Reitor de Planejamento: Prof. Rinaldo Luiz Caraciolo Ferreira
Pr-Reitora de Ensino de Graduao: Prof. Maria Jos de Sena
Coordenao Geral de Ensino a Distncia: Prof Marizete Silva Santos
Produo Grfica e Editorial
Capa e Editorao: Rafael Lira, Italo Amorim e Arlinda Torres
Reviso Ortogrfica: Elias Vieira
Ilustraes: Mrio Frana
Coordenao de Produo: Marizete Silva Santos
-
Sumrio
Apresentao ................................................................................................................. 4
Conhecendo o Volume 4 ................................................................................................ 5
Captulo 10 lgebra e Clculo Relacional ..................................................................... 7
lgebra Relacional ...........................................................................................................7
lgebra Relacional: Operadores de Tabelas ..................................................................11
Captulo 11 Criando e Mantendo um Banco de Dados ............................................... 26
A SQL .............................................................................................................................26
Captulo 12 Consultas em Banco de Dados Relacionais .............................................. 39
Inserindo Dados em Tabelas ..........................................................................................39
Consideraes Finais .................................................................................................... 74
Conhea a Autora ........................................................................................................ 76
-
4Apresentao
Caro(a) cursista,
Seja bem-vindo(a) ao quarto mdulo do curso Banco de Dados!
Neste quarto mdulo, vamos aprender a manipular um SGBD de forma a criar, manter e consultar o banco
de dados que voc antes aprendeu a modelar. Para fazer isso, estudaremos principalmente a linguagem SQL,
presente em todos os banco de dados relacionais e de grande utilidade no acesso a eles.
Adicionalmente, estudaremos um pouco de lgebra relacional e clculo relacional que so formas de
representar matematicamente as operaes que podem ser aplicadas a um Banco de Dados.
Bons estudos!
Sandra de Albuquerque Siebra
Autora
-
5Banco de Dados
Conhecendo o Volume 4
Neste quarto volume, voc ir encontrar o Mdulo 4 da disciplina de Banco de
Dados. Para facilitar seus estudos, veja a organizao deste quarto mdulo.
Mdulo 4 Criao, Manuteno e Consulta a Banco de Dados
Carga horria do Mdulo 4: 15 h/aula
Objetivo do Mdulo 4:
Introduzir os principais conceitos referentes a lgebra relacional e o cclulo
relacional como formas de manipulao e consulta a BD.
Examinar os principais comandos em SQL para criao e manuteno de banco de
dados.
Examinar os principais comandos em SQL para consultas simples e aninhadas a
banco de dados.
Contedo Programtico do Mdulo 4:
lgebra Relacional.
Clculo Relacional de Tupla e Clculo Relacional de Domnio.
SQL Conceitos bsicos, comandos para criao e atualizao do banco de dados.
SQL - Consultas bsicas e Consultas Aninhadas.
-
6Banco de Dados
Captulo 10
O que vamos estudar neste captulo?
Neste captulo, vamos estudar os seguintes temas:
lgebra Relacional.
Clculo Relacional de Tupla.
Clculo Relacional de Domnio.
Metas
Aps o estudo deste captulo, esperamos que voc:
Compreenda o que lgebra relacional e clculo relacional.
Consiga diferenciar o clculo relacional de tupla e de domnio.
Consiga fazer uso de alguns comandos da lgebra relacional.
-
7Banco de Dados
Captulo 10 lgebra e Clculo Relacional
Vamos conversar sobre o assunto?
At aqui, j estudamos como modelar e otimizar nosso modelo para um banco de
dados relacional. Um modelo relacional representa o banco de dados como um conjunto
de relaes. Uma relao pode ser pensada como uma tabela de valores, onde cada
linha na tabela representa uma coleo de valores de dados relacionados. Para acessar
e manipular esses valores h duas categorias de linguagens que podem ser utilizadas: as
linguagens formais (a lgebra relacional e o clculo relacional) e as linguagens comerciais,
que so baseadas nas linguagens formais (tal como a SQL Structured Query Language). As
linguagens formais so justamente as que daremos uma olhada nesse captulo e uma das
linguagens comerciais mais utilizadas (a SQL) ser assunto dos dois captulos finais desse
volume.
Neste captulo, vamos estudar as linguagens formais para consulta e manipulao
dos dados em um banco de dados: a lgebra relacional e o clculo relacional.
lgebra Relacional
A lgebra Relacional uma linguagem de consulta formal, porm procedimental
(procedural), ou seja, o usurio d as instrues ao sistema para que o mesmo realize uma
sequncia de operaes na base de dados para calcular o resultado desejado. Ela consiste
de um conjunto de operaes que tm como entrada uma ou duas relaes e produzem,
como resultado, uma nova relao.
Os operadores da lgebra relacional podem ser divididos em dois grupos:
Operadores de Conjuntos: so operadores tpicos definidos pela lgebra para
conjunto, tais como unio, interseo, diferena e produto cartesiano. As operaes
com esses operadores se aplicam a duas relaes que obedeam compatibilidade
de unio, ou seja, ambas as relaes devem apresentar atributos que pertenam
respectivamente aos mesmos domnios.
Operadores de Tabelas: so operadores definidos especialmente para a
manipulao de tuplas, em bases de dados relacionais tais como: Select, Project
e Join, entre outras. As operaes com esses operadores se aplicam a quaisquer
relaes.
Esses operadores sero detalhados nas sees a seguir.
Observao
As linguagens disponveis para acesso a BDs relacionais, inclusive o SQL, no utilizam os mesmos operadores ou nomes definidos pela lgebra relacional. Entretanto todos, ou quase todos, os operadores da lgebra relacional podem ser escritos usando estas linguagens.
-
8Banco de Dados
lgebra Relacional: Operadores de Conjuntos
So operadores binrios e para utiliz-los, preciso se assegurar de que as duas
relaes envolvidas nas operaes tenham o mesmo tipo de tuplas, ou seja, pertenam
ao mesmo domnio. Essa condio chamada unio compatvel. Em outras palavras, duas
relaes R1 (A1, A2,..., An) e R2 (B1, B2, ..., Bn) so unio compatvel se elas tiverem o
mesmo grau n, e dom(Ai) = dom(Bi) para 1 i n. Isso significa que as duas relaes tm
o mesmo nmero de atributos e que cada par de atributos correspondentes pertence ao
mesmo domnio.
Pode-se definir as operaes de unio, interseo, diferena e produto cartesiano
sobre duas relaes que sejam unio compatvel R1 e R2. Resumidamente:
Unio (R1 R2) - todas as tuplas de R1 e todas as tuplas de R2, sendo que tuplas duplicadas so eliminadas.
Interseo (R1 R2) - todas as tuplas comuns a R1 e R2.
Diferena (R1 R2) - todas as tuplas de R1 que no esto em R2.
Produto Cartesiano (R1 x R2) - combinao das tuplas de R1 com as de R2.
Vamos detalhar e exemplificar, a seguir, cada uma dessas operaes. Mas, antes,
algumas observaes sobre essas operaes:
As operaes de unio e interseo so operaes comutativas. Ou seja:
R1 R2 = R2 R1 e R1 R2 = R2 R1.
J a operao de diferena no comutativa: R - S S - R.
As operaes de unio e interseo so binrias, mas podem ser aplicadas a
qualquer nmero de relaes e ambas so operaes associativas. Assim:
R (S T) = (R S) T e R (S T) = (R S) T.
Considere como base para os exemplos das operaes as relaes Professor e Aluno
representadas pelas Tabelas 1 e 2.
Tabela 1 - Relao Professor Tabela 2 - Relao Aluno
CPF Nome CPF Nome
1001 Ana Maria 1002 Joo
1002 Joo 1116 Mrcia
1003 Pedro 1900 Ronaldo
Unio: A B
Unio a operao entre duas relaes unio compatvel (mesmo nmero de
atributos e com domnio compatvel) que gera uma relao resultante contendo todas
as tuplas (linhas) das duas relaes originais, com eliminao das tuplas duplicadas.
Ela denotada pelo smbolo . Por exemplo, a unio das relaes Professor e Aluno representadas pelas Tabelas 1 e 2 a relao representada pela Tabela 3.
-
9Banco de Dados
Tabela 3 Relao Resultante de Professor Aluno
CPF Nome
1001 Ana Maria
1002 Joo
1003 Pedro
1116 Mrcia
1900 Ronaldo
Interseo: A B
Interseo a operao entre duas relaes unio compatvel que gera uma
relao resultante contendo todas as tuplas (linhas) presentes em ambas as relaes
originais. Ela denotada pelo smbolo . Por exemplo, a interseo das relaes Professor e Aluno representadas pelas Tabelas 1 e 2 a relao representada pela Tabela 4.
Tabela 4 - Relao Resultante de Professor Aluno
CPF Nome
1002 Joo
Diferena: A B
Diferena a operao entre duas relaes unio compatvel que gera uma relao
resultante contendo todas as linhas que esto na primeira relao, e que no aparecem na
segunda. Ela denotada pelo smbolo . Por exemplo, a diferena das relaes Professor e
Aluno representadas pelas Tabelas 1 e 2 (Professor Aluno) a relao representada pela
Tabela 5, que contm as tuplas das relao Professor que no esto na relao Aluno.
Tabela 5 - Relao Resultante de Professor Aluno
CPF Nome
1001 Ana Maria
1003 Pedro
Para mostrar que a operao de diferena no comutativa, vamos agora fazer
Aluno Professor, ou seja, as tuplas que esto na relao Aluno, mas que no esto na
relao Professor. Veja pela relao resultante representada na Tabela 6 que os resultados
da diferena, mudando a ordem das relaes so diferentes.
-
10
Banco de Dados
Tabela 6 - Relao Resultante de Aluno Professor
CPF Nome
1116 Mrcia
1900 Ronaldo
Produto Cartesiano: A x B
O produto cartesiano combina duas relaes gerando uma terceira cujas linhas
representam todas as possveis combinaes das linhas (tuplas) das relaes originais. Um
esquema dessa combinao pode ser vista na Figura 1.
Figura 1 - Esquema de combinaes do Produto Cartesiano
O produto cartesiano uma operao binria e representado pelo smbolo X. O
formato geral da operao : relao_1 X relao_2 . Vamos dar um exemplo. Qual seria o
resultado do produto cartesiano Cidade x Estado (vide Tabelas 7 e 8)?
Tabela 7 - Relao Cidade Tabela 8 - Relao Estado
Cdigo Nome UF Regio
1 Recife PB Nordeste
2 Manaus AM Norte
3 Joo Pessoa
O resultado seria a relao resultante apresentada na Tabela 9. Veja que esta
relao resultante apresenta a combinao de todas as tuplas da relao Cidade, com todas
as tuplas da relao Estado.
-
11
Banco de Dados
Tabela 9 - Relao Resultante
Cdigo Nome UF Regio
1 Recife PB Nordeste
2 Natal PB Nordeste
3 Joo Pessoa PB Nordeste
1 Recife AM Norte
2 Natal AM Norte
3 Joo Pessoa AM Norte
Renomear para diferenciar: O Produto Cartesiano entre duas relaes R1 e R2 (R1 x R2) apresenta
problemas quando:
* As relaes tm mesmo nome;
* Se se quer fazer o produto de uma relao com ela mesma ou
* O produto cartesiano est envolvido com a relao resultante de expresses (que vamos ver o
que so daqui a pouco).
Isso porque um mesmo nome de atributo pode aparecer tanto em R1 quanto em R2. Por isso,
preciso estabelecer um modo de diferenciar esses atributos na relao resultante. Para isso, pode-
se anexar ao atributo o nome da relao a qual ele pertena: nome_relacao.nome_atributo. Por
exemplo, se fizssemos o produto cartesiano entre as relaes Professor e Aluno (vide Tabelas 1 e
2), como as duas tabelas possuem atributos de mesmo nome, a relao resultante ficaria com as
seguintes colunas: (Professor.CPF, Professor.Nome, Aluno.CPF, Aluno.Nome)
lgebra Relacional: Operadores de Tabelas
Os operadores de tabela manipulam tuplas em bases de dados relacionais e podem
ser aplicados a quaisquer relaes. A seguir, descreveremos cada uma das operaes.
Seleo
O operador de seleo usado para selecionar tuplas que satisfaam uma
determinada condio. Essas tuplas selecionadas geram uma relao resultante. O esquema
da relao resultante o mesmo da relao original. O operador de seleo representado
pela letra grega sigma () e seu formato geral : condio(tabela ou relao). O operador
da seleo unrio, ou seja, seleciona tuplas de somente uma relao. Vamos dar alguns
exemplos a partir da relao Cidade (vide Tabela 10).
-
12
Banco de Dados
Tabela 10 - Relao Cidade
Cdigo Nome _capital UF
1 Recife S PE
2 Natal S RN
3 Joo Pessoa S PB
4 Patos N PB
UF = PB(cidade) daria como resultado a relao da Tabela 11, que atenderia a
algo como: selecione da relao cidade, as tuplas cuja UF seja igual ao valor PB.
Tabela 11 - Relao Resultante
Cdigo Nome _capital UF
3 Joo Pessoa S PB
4 Patos N PB
Para especificar as condies da seleo podemos utilizar: valores constantes, nome
de atributos (colunas), operadores relacionais (=, , =, ) ou operadores lgicos (and,
or, not). Por exemplo, UF=PB and E_Capital=N(CIDADE) daria como resultado a relao
da Tabela 12, que atenderia a algo como: selecione da relao cidade, as tuplas cuja UF seja
igual ao valor PB e o campo E_Capital tenha o valor N.
Tabela 12 - Relao Resultante
Cdigo Nome _capital UF
4 Patos N PB
Vamos a outro exemplo, suponha o esquema de relao Empregado (CPF, Nome,
DataNasc, Endereo, Sexo, NumDep, Salario). Agora, suponha que desejamos selecionar
os empregados que trabalham no departamento 10 e ganham mais de 1500 ou aqueles que
trabalham no departamento 3 e ganham mais que 4000. Como ficaria?
(NumDep = 10 and salario > 1500) or (NumDep=3 and salario > 4000)
(Empregado)
A operao de seleo comutativa, ou seja, uma sequncia de seleo pode ser
aplicada em qualquer ordem:
( (Relao)) = ( (Relao))
Sempre possvel combinar uma propagao de operaes de seleo dentro de
uma nica operao de seleo, fazendo uso de uma condio conjuntiva (AND):
( (Relao)) = and (Relao)
( ( ... ( (Relao)) ...)) = AND
AND ... AND (Relao)
-
13
Banco de Dados
Projeo
A operao de projeo unria e opera sobre uma nica relao gerando outra
relao resultante que conter todas as linhas da relao original, mas apenas as colunas
(atributos) que se deseja projetar (e que foram especificadas na operao). Ou seja, retorna
parte da relao deixando de fora os atributos que no foram solicitados. Na relao
resultante as tuplas (linhas) duplicadas so eliminadas. O formato geral da operao de
projeo : A1, A2, , An (Relao) onde A1, A2, ..., An so nomes de atributos da relao.
Vamos dar um exemplo. Tomando como base a relao Cidade (vide Tabela 10), vamos
supor que queremos selecionar (projetar) apenas os atributos Nome e UF. Da precisaramos
da seguinte operao: Nome, UF (Cidade). A relao resultante dessa projeo seria a
apresentada na Tabela 13. Observe que a relao resultante tem todas as tuplas da relao
original, mas s apresenta os atributos especificados na operao de projeo. Alm disso,
observe que estes atributos aparecem na mesma ordem em que foram especificados.
Tabela 13 - Relao Resultante da Projeo
Nome UF
Recife PE
Natal RN
Joo Pessoa PB
Patos PB
Na verdade, se observarmos bem, o operador de projeo tambm serve para
selecionar. Porm, enquanto o operador de SELEO seleciona tuplas de uma relao, o
operador de PROJEO seleciona colunas de uma Relao.
O nmero de tuplas na relao resultante sempre ser igual ou menor que a
quantidade de tuplas na relao original. Isto porque tuplas duplicadas so eliminadas. Por
exemplo, observe a seguinte operao de projeo Nome, UF (Cidade) aplicada relao
Cidade (vide Tabela 10). Veja que PB aparece apenas uma vez na relao resultante (vide
Tabela 14). Mesmo que ela aparea duas vezes na relao original (Tabela 10).
Tabela 14 - Relao Resultante da Projeo
UF
PE
RN
PB
A operao de projeo no comutativa. Apenas no caso especfico de
conter os mesmos atributos de pode-se observar comutatividade.
( (Relao))
( (Relao))
-
14
Banco de Dados
Combinando Operaes
Em geral, existe a necessidade de se aplicar vrias operaes da lgebra relacional
uma aps a outra. Pode-se escrever essas operaes em apenas uma nica expresso da
lgebra relacional, combinando as operaes, usando tanto operadores de conjunto, quanto
de tabela. Vamos dar alguns exemplos a seguir.
Tomando como base as relaes Professor(CPF, Nome) e Aluno (CPF, Nome) -
vide Tabelas 1 e 2 se desejssemos encontrar o nome de todos os professores
que tambm so alunos, poderamos usar a expresso: nome(Professor) nome(Aluno)
A partir da relao Empregado (CPF, Nome, Sexo, Salario, Num_Dep), vide Tabela
15, selecione o nome e o salrio de todos os empregados que trabalhem no
departamento de nmero 4. Para isso, poderamos usar a expresso:
nome, salario ( Num_Dep=4(Empregado))
Isso daria origem a tabela 16.
Tabela 15 - Relao Empregado
CPF Nome Sexo Salario Num_Dep
1234 Ana Gomes F 1500 2
2345 Pedro Nunes M 1000 4
3765 Maria Lima F 2000 2
4987 Igor Matos M 3500 5
9876 Las Ramos F 3000 4
Tabela 16 - Relao Resultante
Nome Salario
Pedro Nunes 1000
Las Ramos 3000
Tabela 17 - Relao Gerente
CPF Nome Sexo Salario Num_Dep
5678 Joo Teixeira M 1800 2
2345 Pedro Nunes M 1000 4
A partir da relao Empregado (Tabela 15) e da relao Gerente (Tabela 17),
encontre o nome de todos os empregados que no so gerentes. Para isso,
poderamos usar a expresso:
nome (Empregado) - nome (Gerente)
-
15
Banco de Dados
Outra forma de combinar operaes aplicar uma nica operao por vez e criar
relaes intermedirias. Neste caso, preciso dar nomes s relaes intermedirias. Por
exemplo, vamos tomar o exemplo anteriormente visto de tomar a relao Empregado como
base (Tabela 15) e dela recuperar o nome e o salrio de todos os empregados que trabalham
no departamento 4. J apresentamos como fazer isso com uma nica expresso. Agora,
alternativamente, seria possvel explicitar a sequncia de operaes, dando um nome para
cada relao intermediria:
Empregados_Dep4 Num_Dep=4(Empregado)
nome, salario (Empregados_Dep4)
Juno
O operador de juno combina as linhas de duas tabelas (relaes) segundo uma ou
mais condies. A condio de juno deve ser baseada em uma ou mais colunas (atributos)
de cada uma das tabelas cujos valores compartilhem um domnio comum. As linhas das
tabelas sero combinadas sempre que a condio de juno for verdadeira. (geralmente
a condio uma igualdade entre atributos equivalentes). O join representado pelo
operador binrio |x| e o formato geral de utilizao : Relao1 |x|
Relao2. Por exemplo, Cidade |x| cidade.UF = Estado.UF Estado. Vai combinar os valores
das relaes Cidade (Tabela 18) e Estado (Tabela 19), de acordo com a igualdade do atributo
comum s duas relaes: a UF. Dessa forma, seria gerada a relao representada na Tabela
20. Veja que a primeira tupla da relao Cidade (vide Tabela 18) no faz parte da relao
resultante, por que ela no tem equivalente na relao Estado (j que est sendo feita a
igualdade com base no atributo UF). Ou seja, tuplas cujos atributos de juno so nulos no
aparecem na relao resultante.
Tabela 18 - Relao Cidade
Cdigo Nome Sexo
1 Recife PE
2 Manaus AM
3 Joo Pessoa PB
Tabela 19 - Relao Estado
UF Regio
PB Nordeste
AM Norte
Tabela 20 - Relao Resultante
Cdigo Nome Cidade.UF Estado.UF Regio
2 Manaus AM AM Norte
3 Joo Pessoa PB PB Nordeste
-
16
Banco de Dados
Quando a condio de uma juno a igualdade, a juno chamada de equijoin.
O equijoin gera duas colunas idnticas na relao resultante (vide as colunas UF na Tabela
20). Uma Juno Natural um equijoin onde uma das colunas idnticas eliminada. Como
assim? O operador de juno natural combina as linhas de duas tabelas que tem atributos
comuns (mesmo nome), resultando numa tabela que contm apenas as linhas onde todos
os atributos comuns apresentam o mesmo valor. Na relao resultante, uma das colunas
idnticas eliminada, evitando a duplicidade.
A juno natural equivale a uma seleo precedida de um produto cartesiano.
Assim:
Cidade |x| cidade.UF = Estado.UF Estado equivalente a
cidade.UF = Estado.UF (Cidade x Estado)
Se duas relaes envolvidas em uma juno natural no tm atributos em comum,
ento a juno natural produz um resultado igual ao produzido pelo produto cartesiano.
EQUIJOIN: juno onde somente operadores de comparao = so utilizados. Gera colunas
idnticas.
JUNO NATURAL: requer que os dois atributos de juno tenha o mesmo nome em ambas as
relaes. Nesse tipo de join outras condies podem ser utilizadas alm da igualdade. A relao
resultante no gera nenhuma duplicidade.
Clculo Relacional
O Clculo Relacional (CR) uma linguagem de consulta formal. Utilizando-se de uma
expresso declarativa pode-se especificar uma consulta. Uma expresso de clculo permite
a descrio da consulta desejada sem especificar os procedimentos para obteno dessas
informaes, ou seja, no-procedural. Contudo, tal consulta deve ser capaz de descrever
formalmente a informao desejada, com exatido.
No Clculo Relacional existem variveis, constantes, operadores lgicos, de
comparao e quantificadores. As expresses de Clculo so chamadas de frmulas. Uma
tupla de respostas essencialmente uma atribuio de constantes s variveis que levam a
frmula a um estado verdadeiro. Existem dois tipos de clculo relacional: Clculo Relacional
de Tuplas (CRT) e Clculo Relacional de Domnio (CRD), ambos subconjuntos simples de
lgica de primeira ordem. No CRT, as variveis so definidas sobre (isto , associam) tuplas.
J em CRD, variveis so definidas sobre o domnio dos elementos (ou seja, sobre os valores
dos campos).
Como o clculo relacional pouco utilizado, vamos apenas apresentar algumas
definies e exemplos, a ttulo informativo, de cada um dos tipos de clculo. Adicionalmente,
importante saber que todas as expresses de consulta descritas no Clculo Relacional
possuem equivalentes em lgebra Relacional, que mais utilizada e possui mais ferramentas
para dar suporte a construo de suas expresses.
Clculo Relacional de Tupla
O Clculo Relacional de Tupla (CRT) baseado na especificao de um nmero de
variveis de tuplas. Cada varivel de tupla pode assumir como seu valor qualquer tupla da
relao especificada. Uma consulta em CRT especificada da seguinte forma:
{varivel tupla | predicado} ou { t | P(t) } que significa o conjunto de todas as tuplas
-
17
Banco de Dados
t, tal que o predicado P seja verdadeiro para t. E temos que t uma varivel de tuplas. P
uma expresso condicional e t.A ou t[A] denota o valor do atributo A da tupla t. O resultado
de tal consulta o conjunto de todas as variveis tuplas para as quais o predicado indicado
como verdadeiro.
Uma expresso genrica do clculo relacional de tuplas tem a forma:
{t1.A1, t2.A2, ..., tn.An | predicado(t1, t2, ..., tn, tn+1, tn+2, ..., tn+m)}
Onde: t1, t2, ..., tn, tn+1, tn+2, ..., tn+m so variveis de tuplas, cada Ai um
atributo da relao na qual ti se encontra e o predicado uma frmula do clculo relacional
de tuplas.
Uma frmula definida, de forma recursiva, por uma ou mais frmulas atmicas.
Essas frmulas podem ser conectadas por operadores lgicos (AND, OR ou NOT), como
segue:
Se F1 e F2 so frmulas atmicas, ento (F1 AND F2), (F1 OR F2), NOT (F1) e NOT
(F2) tambm o so, tendo seus valores verdade derivados a partir de F1 e F2.
Relembrando...
(F1 AND F2) ser TRUE apenas se ambos, F1 e F2, forem TRUE;
(F1 OR F2) ser TRUE quando uma das duas frmulas F1 e F2, for TRUE;
NOT(F1) ser TRUE quando F1 for FALSE;
NOT(F2) ser TRUE quando F2 for FALSE.
Se F1 uma frmula atmica, ento ( t)(F1) tambm o , e seu valor verdade
apenas ser TRUE se a frmula F for avaliada como verdadeira para pelo menos
uma tupla atribuda para ocorrncias livres de t (que uma varivel de tupla) em F.
Se F1 uma frmula atmica, ento ( t)(F1) tambm o , e seu valor verdade apenas ser TRUE se a frmula F for avaliada como verdadeira para todas as tuplas
atribudas para ocorrncias livres de t em F.
Adicionalmente, temos:
Uma frmula atmica ti.A op tj.B, onde op um dos operadores de comparao no
conjunto {=, >, =, , =,
-
18
Banco de Dados
Todas as variveis tuplas abordadas so consideradas variveis livres (elas aparecem em
uma expresso de clculo relacional esquerda da barra |), uma vez que estas no aparecem
quantificadas. Porm, quando quantificadores (universal () ou existencial ()) aparecem nas
frmulas, as variveis que os sucedem so denominadas variveis limite.
Tabela 21 - Relao Empregado
CPF Nome Sexo Salario Cod_Depto
1234 Ana Gomes F 1500 2
2345 Pedro Nunes M 1000 4
3765 Maria Lima F 2000 2
4987 Igor Matos M 3500 5
9876 Las Ramos F 3000 4
Tabela 22 - Relao Departamento
Cod Descricao
2 Vendas
4 Suporte
5 Gerncia
Vamos dar alguns exemplos para ilustrar. Tomando como base a relao Empregado
(vide Tabela 21) e a relao Departamento (vide Tabela 22), suponha as seguintes consultas
e como elas ficariam representadas em clculo relacional de tupla.
Obtenha todos os empregados cujo salrio seja maior que 3000 reais: { t |
EMPREGADO(t) AND t.SALARIO > 3000 }.
Analisando a expresso podemos l-la da seguinte forma: considere uma tupla t,
ela deve ser uma tupla da relao empregado, cujo atributo salrio dessa tupla deve
ser maior que 3000. EMPREGADO(t) o mesmo que dizer que t EMPREGADO.
A consulta acima resulta em uma relao que contm todas as tuplas t da relao
EMPREGADO que satisfazem a condio (no caso, salrio > 3000).
No CRT especificamos primeiro os atributos desejados. Se for usado apenas o t, sem
especificao de atributos, todos os atributos da tupla so recuperados. Logo, na consulta
acima, seriam recuperados os atributos CPF, Nome, Sexo, Salario e Cod_Depto (vide Tabela
21). Agora, suponha que gostaramos de recuperar apenas os atributos CPF e Nome das
tuplas que atendessem a condio. Como faramos?
{ t.CPF, t.Nome | EMPREGADO(t) AND t.SALARIO > 3000 }.
Observe que os atributos desejados so especificados do lado esquerdo da barra
(|).
Vamos a outro exemplo. Obtenha o nome e o salrio dos empregados que
trabalham para o departamento de Suporte.
{t.NOME, t.SALARIO | EMPREGADO(t) AND ( d) (DEPARTAMENTO (d) AND
-
19
Banco de Dados
d.DESCRICAO = Suporte AND d.COD = t.COD_DEPTO)}
Analisando a expresso podemos l-la da seguinte forma: obtenha o nome e o
salrio de todas as tuplas da relao empregado e exista um departamento d, cuja
descrio seja Suporte e o cdigo desse departamento de nome Suporte seja
igual ao cdigo do departamento da tupla sendo avaliada na relao Empregado.
Vamos exemplificar agora o quanto o CRT pode ser representado facilmente por
uma expresso da lgebra relacional, levando em conta a relao Empregado (Tabela 21).
Recupere o CPF e o nome de todos os empregados.
Em CRT: { t.CPF, t.Nome | EMPREGADO(t) }
Em lgebra Relacional: CPF, Nome (Empregado)
Recupere todos os empregados do sexo masculino
Em CRT: { t | EMPREGADO(t) AND t.SEXO = M }
Em lgebra Relacional: Sexo = M (Empregado)
Clculo Relacional de Domnio (CRD)
Trata-se de uma segunda forma de clculo relacional, equivalente ao CRT. Essa
forma usa variveis de domnio que tomam valores do domnio de um atributo, em vez de
valores da tupla inteira. Uma expresso neste clculo tem a forma:
{ | Predicado (x1, x2, ..., xn) }
onde x1, x2, ..., xn representam variveis de domnio e Predicado representa uma
frmula composta de tomos, como no clculo relacional de tupla.
A diferena bsica entre CRT e CRD que neste ltimo as variveis estendem-se
sobre valores nicos de domnios de atributos. Para formar uma relao de grau n para
um resultado de consulta, faz-se necessrio criar n variveis de domnio, uma para cada
atributo. Como em CRT, as frmulas so avaliadas em valores verdade para um conjunto
especfico de valores.
A seguir, para fins de comparao e para ilustrar o CRD, seguem em CRD os mesmos
exemplos de consultas j escritos em CRT.
Tabela 23 - Relao Empregado
a b c d e
CPF Nome Sexo Salario Cod_Depto
1234 Ana Gomes F 1500 2
2345 Pedro Nunes M 1000 4
3765 Maria Lima F 2000 2
4987 Igor Matos M 3500 5
9876 Las Ramos F 3000 4
-
20
Banco de Dados
Tabela 24 - Relao Departamento
m n
Cod Descricao
2 Vendas
4 Suporte
5 Gerncia
Tomando como base as tabelas 23 e 24 que representam, respectivamente, as
relaes Empregado e Departamento (note que cada coluna dessas relaes recebeu uma
letra para referenciar o domno do atributo representado por cada coluna), podemos
realizar as seguintes consultas:
Obtenha todos os empregados cujo salrio seja maior que 3000 reais: { t |
EMPREGADO(t) AND t.SALARIO > 3000 }.
{ abcde1 | ( d2) EMPREGADO(abcde) AND d > 3000 }
Se na consulta anterior quisssemos recuperar apenas o CPF e o nome dos
empregados, teramos:
{ ab | ( d) EMPREGADO(abcde) AND d > 3000 }
Obtenha o nome e o salrio dos empregados que trabalham para o departamento
de Suporte.
{ bd | ( e) ( m)( n) (EMPREGADO(abcde) AND DEPARTAMENTO(mn) AND
n = Suporte AND m = e) }
Consideraes Finais
A lgebra relacional uma forma de clculo sobre conjuntos ou relaes. Uma
aplicao prtica da lgebra relacional na execuo de consultas a bancos de dados
relacionais. A lgebra relacional recebia pouca ateno at a publicao do modelo
relacional de dados de E.F Codd, em 1970. Codd props tal lgebra como uma base para
linguagens de consulta em banco de dados. As operaes da lgebra relacional podem ser
resumidas de forma ilustrada na Figura 2.
Comentrio
1 Observe que as letras esquerda da barra (|) representam o domno dos atributos desejados (vide Tabela 23), como conseqncia, eles referenciam as colunas desejadas.
Comentrio
2 Somente necessrio quantificar as variveis que participam de uma condio.
Ou seja, s usamos o operador existencial na varivel de domnio d, porque apenas essa varivel usada na condio expressa no predicado (d > 3000)
-
21
Banco de Dados
Figura 2 - Resumo das Operaes da lgebra Relacional
O Clculo Relacional uma linguagem formal, no-procedural, para consulta a
relaes. A lgebra relacional tem poder de expresso essencialmente equivalente ao do
clculo relacional, esse resultado conhecido como teorema de Codd. Em geral, a lgebra
relacional bem mais utilizada do que o clculo relacional.
Conhea Mais
Para obter mais informaes sobre o assunto estudado nesse captulo voc pode
consultar qualquer um dos livros listados a seguir. Todos eles possuem captulos dedicados a
lgebra Relacional e o Clculo Relacional (de Tupla e de Domnio):
KORTH, Henry F; SILBERSCHATZ, Abraham; SUDARSHAN, S. Sistema de banco de
dados. Traduzido por Daniel Vieira. Rio de Janeiro: Elsevier;Campus, 2006.
ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 4a. ed. So
Paulo: Pearson Education do Brasil, 2005.
DATE, C. J. Introduo a sistemas de bancos de dados. Rio de Janeiro: Campus,
2000.
ALVES, W.P. Fundamentos de Bancos de Dados. Editora rica, 2004.
-
22
Banco de Dados
Voc Sabia?
O Clculo relacional dependendo do autor pode ter sua notao ligeiramente modificada. A notao que fizemos uso nesse captulo a notao de Navathe (ELMASRI e NAVATHE, 2005). Porm, existe tambm a notao de Korth (KORTH, SILBERSCHATZ e SUDARSHAN, 2006). Para ilustrar as diferenas, vamos repetir a mesma consulta anteriormente realizada:
Obtenha o nome e o salrio dos empregados que trabalham para o departamento de Suporte. Na notao de Navathe, que j utilizamos, ficaria:
{bd | ( e) ( m) ( n) (EMPREGADO(abcde) AND DEPARTAMENTO(mn) AND n = Suporte AND m = e)}
J na notao de Korth, a mesma sentena ficaria da seguinte forma:
{ | empregado departamento(mn) n = Suporte m = e)}
Veja que o formato geral da expresso muda um pouco, mas o que muda mesmo a simbologia dos operadores lgicos: AND (), OR (), NOT (), a forma de expressar as variveis de tupla (observe o comeo das duas expresses e veja a diferena) e ao invs de aspas simples em constantes, usa-se aspas duplas.
Aprenda Praticando
Como a lgebra relacional mais utilizada, vamos avaliar alguns exerccios
resolvidos para que, logo depois, voc possa resolver os seus exerccios sozinho.
1) Tome como base os esquemas das tabelas 25 e 26 e mostre como ficariam as
consultas, a seguir, em lgebra relacional.
Tabela 25 - Relao Devedor
Nome Num_Emprestimo Sexo
Ana Gomes 01 F
Pedro Nunes 03 M
Maria Lima 05 F
Tabela 26 - Relao Emprstimo
Agencia Num_Emprestimo Valor
3456 01 1500
2123 03 5000
2123 05 2500
Em geral, na realizao de consultas as operaes mais utilizadas so a projeo
(representada pelo smbolo ) que seleciona quais colunas (atributos) se deseja na relao
resultante e a seleo (representada pelo smbolo ) que seleciona quais tuplas da relao
atendem a uma determinada condio. Se a projeo no for utilizada, todos os atributos da
relao original faro parte da relao resultante. Quando necessitamos de dados que esto
-
23
Banco de Dados
em duas relaes diferentes, devemos utilizar a operao de juno |x|.
Apresentar os dados de todos os devedores do sexo feminino. Cada vez que
desejamos selecionar tuplas da relao de acordo com uma determinada condio,
usamos a seleo.
sexo = F (devedor)
Apresentar o nome e o nmero do emprestimo de todos os devedores do sexo
masculino. Como especificado o que deve ser mostrado nome e nmero
emprstimo necessrio usar a projeo antes da seleo)
nome,num_emprestimo ( sexo = M (devedor))
Mostrar o nome das pessoas que possuem emprstimo acima de trs mil reais
na agncia 2123. Como o nome da pessoa est na relao devedor e o valor do
emprstimo na relao emprstimo, necessrio fazer a juno dessas duas
relaes, para ser possvel selecionar o que foi pedido. A juno feita equiparando
os atributos que as relaes tm em comum.
nome ( valor > 3000 and agencia = 2123 (Devedor |x| devedor.num_emprestimo
= emprstimo.num_emprestimo Emprestimo))
Apresentar as pessoas cujo nmero do emprstimo igual a 5 e o nmero da
agncia igual a 2123 ou que o nmero do emprstimo seja igual a 3 e o valor do
emprstimo maior do que 1000 reais. um caso de seleo onde necessrio usar
operadores lgicos para montar as condies.
(num_emprestimo = 5 and agencia = 2123) or (num_emprestimo = 3 and valor >
1000) (Emprestimo))
Atividades e Orientaes de Estudo
Agora vamos exercitar o que foi estudado neste captulo. Assim sendo, faa as
atividades sugeridas a seguir. Lembre que exercitar vai lhe ajudar a fixar melhor o contedo
estudado. Mos obra!
Atividades Prticas
Responda as questes a seguir em um documento de texto (doc)3 e poste as
respostas no ambiente virtual, no local indicado. Esse trabalho deve ser feito em DUPLA.
Especifique usando a lgebra relacional as consultas a seguir, tomando como base
as relaes cujos esquemas esto representados a seguir.
EMPREGADO
CPF (PK) Nome DtNasc Endereco Sexo Salario Cod_Dep (FK)
Dica
3 No Word, a simbologia usada na lgebra relacional pode ser inserida no documento atravs do seguinte caminho: Inserir -> Smbolo, fazendo uso da fonte Symbol (da voc escolhe na tabela que apresentada o smbolo apropriado)
-
24
Banco de Dados
DEPARTAMENTO
Cod_Dep (PK) Descricao CPF_Gerente (FK) Dt_Inicio_Gerencia
PROJETO
Cod_Proj (PK) Nome_Proj Cod_Dep (FK)
ALOCACAO
CPF (PK) Cod_Proj (PK) Horas
DEPENDENTE
CPF (PK) Nome_Depen Sexo Parentesco
a) Recuperar os nomes de empregados do departamento 6 que trabalham mais que
20 horas no projeto chamado Star Project.
b) Listar os nomes dos empregados que tenham um dependente com o mesmo nome
deles.
c) Recuperar os cdigos e os nomes dos projetos do departamento de nome
Pesquisa.
d) Listar o nome do projeto, do departamento ao qual ele pertence e o nome dos
empregados deles.
e) Recuperar os nomes dos empregados que trabalham em todos os projetos.
f) Recuperar os nomes dos empregados que no trabalham em quaisquer projetos.
h) Recuperar o nome e o sexo de todos os dependentes do empregado de CPF de
nmero 12345.
i) Recuperar o nome e a quantidade de horas trabalhadas por cada empregado em
cada projeto do qual faz parte.
Vamos Revisar?
Voc estudou, neste captulo, formas de acessar e manipular os dados armazenados
em um banco de dados, fazendo uso de linguagens formais tais como a lgebra relacional e
o clculo relacional (tanto de tupla, quanto de domno). A maneira de raciocionar fazendo
uso dessas linguagens ir facilitar a compreenso do uso da linguagem comercial a ser
estudada nos captulos seguintes: a SQL. At l!
-
25
Banco de Dados
Captulo 11
O que vamos estudar neste captulo?
Neste captulo, vamos estudar os seguintes temas:
A Linguagem SQL.
Subdivises da SQL.
Como criar um Banco de Dados usando SQL.
Metas
Aps o estudo deste captulo, esperamos que voc:
Conhea a linguagem SQL.
Conhea as subdivises da linguagem.
Consiga criar e manter a estrutura de um banco de dados usando SQL.
Consiga criar ndices para um banco de dados.
-
26
Banco de Dados
Captulo 11 Criando e Mantendo um Banco de Dados
Vamos conversar sobre o assunto?
No captulo anterior vimos linguagens formais para consulta a banco de dados
relacionais. Porm, na rea comercial, essas linguagens no so muito utilizadas, ao invs
delas, so usadas linguagens comerciais para criao, manuteno e consulta a banco de
dados. Entre essas linguagens, a SQL (Structured Query Language) a mais utilizada. Por
isso mesmo, a interface SQL implementada em todos os sistemas de bancos de dados
relacionais existentes. justamente sobre a SQL que estudaremos nesse captulo e no
captulo seguinte.
Neste captulo, comearemos estudando a linguagem comercial SQL, com o
objetivo de ter um conhecimento geral sobre a linguagem e criar e manter esquemas de
bancos de dados relacionais. Adicionalmente, tambm apresentaremos como criar ndices
para esses esquemas. Vamos l?
A SQL
SQL ou Structured Query Language (Linguagem de Consulta Estruturada) uma
linguagem de consulta declarativa, no-procedural, fundamentada na lgebra e no clculo
relacional de tupla. Apesar de ser chamada linguagem de consulta (Query), ela no apenas
de consulta, ela inclui comandos para definio, manuteno e consulta em bancos de dados
relacionais. Alm disso, ela define mecanismos para criao de vises, especificaes de
segurana, autorizaes, definies de restries e controle de transaes. Adicionalmente,
ela possui regras para embutir os comandos SQL em linguagens de programao genricas
como Java, PHP, C# ou C/C++.
A SQL foi desenvolvida pelo laboratrio da IBM, nos anos 70, como parte do
sistema System R (o primeiro SGBD relacional). Ela foi, inicialmente, chamada de SEQUEL
(Structured English Query Language), mas teve seu nome alterado para SQL por razes
Jurdicas. Em 1986, em um esforo conjunto da ANSI (American Nacional Standars Institute)
e da ISO (International Standards Organization) criou-se a primeira verso padro da SQL, a
SQL-86 (SQL1), substituda posteriormente pela SQL-92 (SQL2) e depois pela SQL-99 (SQL3).
O atual projeto da SQL o padro 200n.
A SQL padro suportada por todos os SGBDs relacionais comerciais. Porm,
mesmo padronizada, existem variaes, ou seja, cada fornecedor pode incluir comandos
prprios na SQL utilizada pelo seu SGBD. Em outras palavras, cada implementao do SQL
de cada fornecedor possui os comandos do SQL padro (tambm chamado SQL ANSI)
e, tambm, algumas adaptaes para resolver certas particularidades. Para conhecer
o conjunto completo de comandos SQL de um determinado fornecedor (ex: Oracle),
recomendamos a leitura do manual do fabricante. A vantagem de fazer uso apenas do SQL
padro no ter problemas com migrao de SGBD para SGBD. Por exemplo, se voc fazia
uso de SQL Server e, depois, migrou para o uso do Oracle, se fez uso apenas do SQL padro,
-
27
Banco de Dados
no haver problemas ou necessidade de adaptaes.
O SQL usado nesta disciplina ser o baseado no Padro ANSI e nenhuma
caracterstica especfica de SGBD ser abordada. Dessa forma, para praticar os comandos de
SQL aqui ensinados, voc poder fazer uso de qualquer SGBD comercial.
Subdiviso da SQL
A SQL composta por grupos de instrues que so utilizadas no processo de
administrao e controle de bancos de dados. Esses grupos sero descritos a seguir (vide
Figura 3).
DDL (Data Definition Language - Linguagem de Definio de Dados) - as instrues
do tipo DDL permitem efetuar a criao das estruturas (esquemas) de tabelas
(relaes) onde os dados sero armazenados, ndices e os bancos de dados como
um todo. Permitem tambm efetuar alteraes nas estruturas criadas, bem
como remover estruturas existentes. Neste grupo esto as instrues: CREATE
TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX. O resultado da
compilao dos parmetros/comandos DDL geram os dicionrios de dados (arquivo
de metadados). Adicionalmente, a DDL inclui comandos para definio de vises e
para especificao de direitos de acesso s relaes/vises.
Figura 3 - Subdivises da SQL
DML (Data Manipulation Language - Linguagem de Manipulao de Dados) - as
instrues do tipo DML permitem efetuar a manipulao dos dados que estejam
armazenados nas tabelas de um determinado banco de dados. Desta forma
possvel cadastrar, alterar e excluir registros (tuplas) existentes. Neste grupo
encontram-se as instrues: INSERT, SELECT, UPDATE e DELETE. De todos os
comandos existentes, o comando SELECT o mais importante e utilizado, pois
com ele que se obtm a extrao de informaes a partir do banco de dados.
DCL (Data Control Language - Linguagem de Controle de Dados) as instrues
do tipo DCL permitem controlar o acesso e os privilgios dos usurios s relaes e
vises, protegendo os dados de manipulaes no autorizadas;
TML (Transactions Manipulation Language - Linguagem de Manipulao de
Transaes) as intrues do tipo TML especificam as transaes atravs de
comandos de iniciao e finalizao das mesmas, garantindo o compartilhamento e
a integridade dos dados.
-
28
Banco de Dados
Nesta disciplina apenas abordaremos a DDL e a DML.
Tipos de Dados
Antes de entrar nos comandos propiamente ditos da SQL, vale a pena comentar
sobre tipos de dados. Para definir os atributos das tabelas, precisamos definir os domnios
de cada um deles. Isso feito atravs da especificao do tipo do dado. Nesse ponto
importante ressaltar que cada SGBD tem um conjunto prprio de tipos de dados. Mas,
podemos dizer que, genericamente, vamos encontrar na maioria dos SGBDs tipos como:
Char(X): Para dados caracteres, onde X o tamanho mximo permitido de caracteres
e esse tamanho fixo. Ou seja, se for especificado, por exemplo, um tamanho de
50 caracteres, sempre ser ocupado na memria 50 posies, independente da
palavra sendo armazenada.
Varchar(X): Idem o anterior, mas o tamanho armazenado varivel. Se ocupar
memria apenas para o que for digitado, tendo o X apenas como referncia para
tamanho mximo.
Integer : Para dados numricos inteiros positivos ou negativos
Decimal(X,Y): Pada dados numricos decimais, onde X o tamanho mximo
permitido da parte inteira e Y o tamanho mximo da parte fracionria
Date: Para datas. Seu formato depende do SGBD relacional. E cada SGBD pode ter
um tipo diferenciado para armazenamento de datas.
Logical: Para os valores lgicos TRUE ou FALSE.
Comandos SQL para Definio de Dados (DDL)
A DDL serve para expressar a especificao do esquema do BD. O resultado da
compilao dos parmetros DDLs um conjunto de tabelas que so armazenadas em um
arquivo especial chamado dicionrio de dados4.
Os comandos SQL para definio de dados so: CREATE, DROP e ALTER. Vamos
dar uma olhada em cada um desses comandos, a seguir e, para exemplificar o uso deles,
vamos tomar a modelagem da Figura 4 como base. Nela temos especificado o MER para
uma Editora.
Figura 4 - Modelo base para exemplos
O MR para este diagrama o seguinte (baseado nas regras de converso do MER
para o MR, anteriormente vistas):
Comentrio
4 Relembrando: o Dicionrio de Dados um arquivo de metadados (dados a respeito de dados) no SGBD. Ou seja, ele contm a semntica dos dados do BD (o que eles significam).
-
29
Banco de Dados
AUTOR (CodAutor (PK), Nome, Nascimento)
LIVRO (TitLivro (PK), CodAutor (FK), CodEditora (FK), Valor,Publicacao, Volume,
Idioma)
EDITORA (CodEditora (PK), Razao, Endereco, Cidade)
DDL - Criando Tabelas
O comando CREATE TABLE especifica uma nova tabela (relao), dando o seu nome
e especificando as colunas (atributos), cada uma com seu nome, tipo e restries iniciais.
A forma geral do comando : create table nome_tabela. Por exemplo: create table
Empregado. Porm, a sintaxe completa do comando bem mais detalhada:
CREATE TABLE Nome_Tabela (
Nome_Atributo1 Tipo [(Tamanho)] [NOT NULL] [DEFAULT valor] [...],
[,Nome_Atributo2 Tipo [(Tamanho)] [NOT NULL] [DEFAULT valor] [...],
[PRIMARY KEY (Primria1[, Primria2 [, ...]])]
[UNIQUE (Candidata1[, Candidata2[, ...]])]
[FOREIGN KEY (Estrangeira1[, Estrangeira2 [, ...]]) REFERENCES
TabelaExterna [(AtributoExterno1 [, AtributoExterno2 [, ...]])]
[CHECK (condio)]
)
Onde : ( ) Indica parte da sintaxe do comando e [ ] Indica opcionalidade do comando.
Vamos explicar agora cada parte do comando completo.
Nome_Atributo - nome do atributo que est sendo definido
Tipo: domnio do atributo ou seja o tipo do dado do atributo.
Tamanho : alguns tipos de dados necessitam de especificao do tamanho do dado.
Por exemplo, o tipo CHAR
NOT NULL: expressa que o atributo no pode receber valores nulos
DEFAULT valor: indica um valor a ser atribudo ao atributo caso no seja
determinado um valor durante a insero
PRIMARY KEY (Primria1, Primria2, ...) serve para especificar a(s) chave(s)
primria(s) da tabela.
UNIQUE: indica que o atributo tem valor nico na tabela. Qualquer tentativa de se
introduzir uma linha na tabela contendo um valor igual ao do atributo ser rejeitada. Serve
para indicar chaves secundrias (chaves candidatas). Em Candidata1, Candidata2 devem ser
especificados os atributos que tero esse valor nico na tabela.
FOREIGN KEY (Estrangeira1[, Estrangeira2 [, ...]]) REFERENCES TabelaExterna
[(AtributoExterno1 [, AtributoExterno2 [, ...]]) serve para especificar os atributos que
so chaves estrangeiras na relao, j relacionando-os s tabelas onde eles so chave
primria (Integridade Referencial). Em Estrangeira1, Estrangeira2, ... especificam-se os
atributos que so chave estrangeira. Em TabelaExterna se especifica o nome da tabela onde
o atributo chave primria e, por fim, o nome desse atributo nessa TabelaExterna (porque
os atributos na relao e na tabela externa original podem ter nomes diferentes). Se os
atributos da relao e da tabela externa tiverem o mesmo nome, esses AtributoExterno1,
-
30
Banco de Dados
AtributoExterno2, ... no precisam ser especificados.
CHECK (condio) aqui so especificadas condies que devem ser checadas na
insero de dados na tabela (validaes).
Vamos agora dar exemplos de uso dessa sintaxe tomando o nosso modelo base
(Figura 4). Primeiro, vamos criar as tabelas Autor e Editora que so tabelas simples (sem
chaves estrangeiras ou checagens a serem feitas):
CREATE TABLE AUTOR(
CodAutor INTEGER NOT NULL,
Nome CHAR(50)5 NOT NULL,
Nascimento DATE NOT NULL,
PRIMARY KEY (CodAutor),
UNIQUE (Nome) );
CREATE TABLE EDITORA(
CodEditora INTEGER NOT NULL,
Razao CHAR(50),
Endereco CHAR(50),
Cidade CHAR(30)
PRIMARY KEY(CodEditora ));
Agora, podemos partir para a definio da tabela Livro que faz uso das duas tabelas
anteriormente definidas:
CREATE TABLE LIVRO(
Titulo CHAR(50) NOT NULL,
CodAutor INTEGER NOT NULL,
CodEditora INTEGER NOT NULL,
Valor DECIMAL(3.2)6,
Publicacao DATE,
Volume INTEGER,
Idioma CHAR (15) DEFAULT = Portugus 7,
PRIMARY KEY (Titulo, CodAutor8),
FOREIGN KEY (CodAutor) REFERENCES AUTOR9,
FOREIGN KEY (CodEditora) REFERENCES EDITORA,
CHECK Valor > 10.010);
S pra ilustrar melhor o uso da clusula CHECK vamos dar outro exemplo de criao
de tabela, fora do exemplo do modelo base (Figura 4). Suponha que desejamos criar a tabela
estudante que contenha os atributos matricula, nome e nvel.
CREATE TABLE estudante (
matricula char(10) NOT NULL,
nome char(15) NOT NULL,
nivel char(15) NOT NULL,
Comentrio
5 Como tipo de dados estamos deduzindo os tipos possveis baseados na explicao da seo anterior sobre tipos de dados.
Comentrio
6 Valor ser do tipo DECIMAL, ou seja, um valor de ponto flutuante, tendo 3 casas na parte inteira e duas casas decimais.
Comentrio
7 Aqui est sendo especificado o valor default para o atributo idioma. Se esse campo no for informado, o valor Portugus ser assumido.
Comentrio
8 Veja que est sendo especificada uma chave primria composta, uma vez que dois atributos fazem parte da especificao.
Comentrio
9 Veja que estamos espeficifando que CodEditora chave estrangeira na tabela sendo definida e um atributo pertencente a tabela Autor (sendo chave primria nessa outra tabela tabela externa)
-
31
Banco de Dados
PRIMARY KEY (matricula),
CHECK (nivel IN (Bacharelado, Mestrado, Doutorado)))11
O SQL-89 obrigava os atributos da chave primria a serem declarados como NOT NULL e UNIQUE.
SQL-92 e posteriores j assumem essas condies, assim, sua declarao redundante.
Uma clusula FOREIGN KEY pode incluir regras de remoo / atualizao:
FOREIGN KEY (coluna) REFERENCES tabela
[ON DELETE {RESTRICT | CASCADE | SET NULL | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | SET DEFAULT}]
Suponha que T2 tem uma chave estrangeira para T1, ou seja, tem um atributo que
chave primria em T1. Vejamos as clusulas ON DELETE e ON UPDATE
ON DELETE
RESTRICT: (default) significa que uma tentativa de se remover uma linha de T1
falhar se alguma linha em T2 combinar com a chave da tupla de T1 que est sendo
deletada.
CASCADE: a remoo de uma linha de T1 implica em remoo de todas as linhas de
T2 que combinam com a chave da tupla de T1 sendo deletada.
SET NULL: remoo de T1 implica em colocar NULL em todos os atributos de T2 que
sejam chave estrangeira e estejam relacionados com a tupla sendo deletada em T1.
SET DEFAULT: remoo de linha em T1 implica em colocar valores DEFAULT nos
atributos da chave estrangeira de cada linha de T2 que combina
ON UPDATE
RESTRICT: (default) a atualizao de um atributo de T1 falha se existem linhas em
T2 combinando com a tupla sendo modificada.
CASCADE: a atualizao de atributo em T1 implica que linhas que combinam em T2
tambm sero atualizadas
SET NULL: a atualizao de T1 implica que valores da chave estrangeira em T2, nas
linhas que combinam com a tupla de T1 sendo atualizada, so postos para NULL.
SET DEFAULT: a atualizao de T1 implica que valores da chave estrangeira de T2
nas linhas que combinam tero valores default aplicados.
Vamos dar um exemplo de uso dessas clusulas:
CREATE TABLE empregado (
matricula char(10) NOT NULL,
nome char(15) NOT NULL,
cod_depto INT NOT NULL DEFAULT 112,
PRIMARY KEY(matricula)13,
FOREIGN KEY(supervisor) REFERENCES Empregado(matricula)14
ON DELETE SET NULL15
ON UPDATE CASCADE16,
FOREIGN KEY (cod_depto) REFERENCES Departamento(codigo)
ON DELETE SET DEFAULT17
Comentrio
10 Aqui especificado que os livros que forem criados devem ter seu valor maior que 10. Essa uma validao que ser feita a cada insero / alterao de dados na tabela.
Comentrio
11 Veja que aqui estamos especificando os valores possveis para o atributo nvel.
Comentrio
12 O valor default para o departamento 1.
Comentrio
13 A chave primria a matrcula.
Comentrio
14 Veja que aqui o atributo da tabela sendo definida tem nome diferente do atributo na sua tabela externa de origem. Por isso, o nome do atributo na tabela externa precisa ser especificado.
Comentrio
15 Aqui especificado que, se a tupla que contm a matrcula sendo utilizada nesta tabela for deletada, o atributo SUPERVISOR dever receber o valor NULL.
-
32
Banco de Dados
ON UPDATE CASCADE);
DDL - Alterando Tabelas
O comando ALTER TABLE permite inserir/eliminar/modificar colunas nas tabelas j
existentes, modificando a estrutura das mesmas. A sintaxe bsica desse comando :
ALTER TABLE Tabela {
ADD (NomeNovoAtributo NovoTipo [BEFORE Nome_Atributo] [, ...] ) |
DROP (Nome_Atributo [, ...] ) |
MODIFY ( Nome_Atributo NovoTipo [ NOT NULL ] [DEFAULT, ... ] )
}
Onde: | Indica escolha de vrias opes e { } Indica obrigatoriedade de escolha de
uma opo entre as vrias. Agora, vamos explicar cada parte do comando.
Adicionando um novo atributo (nova coluna) na Tabela
ADD (NomeNovoAtributo NovoTipo [BEFORE Nome_Atributo] [, ...] ) |
Usando o ADD possvel adicionar um novo atributo na Tabela. Dessa forma, o novo
atributo deve ser especificado (nome e tipo). possvel ainda dizer antes de qual atributo
se deseja que esse novo atributo seja inserido (BEFORE nome_atributo). Por exemplo, se
desejssemos adicionar o campo E-MAIL na tabela Autor, do nosso exemplo base (Figura 4),
usaramos:
ALTER TABLE AUTOR ADD EMAIL CHAR(40);
Observao
Os novos atributos tero valores nulos em todas as linhas. Por isso, no se pode usar NOT NULL juntamente com ADD (na definio do novo atributo), quando a tabela j contiver registros (lembre, com o uso de ADD a nova coluna carregada com NULLs).
Deletando um atributo (uma coluna) da Tabela
DROP (Nome_Atributo [, ...] ) |
Para usar a clusula DROP necessrio apenas especificar o nome do atributo que
se deseja remover da tabela. Porm, ateno, a clusula DROP no remove atributos da
chave primria. Por exemplo, se desejssemos eliminar o campo E-MAIL (anteriormente
adicionado) da tabela Autor, usaramos:
ALTER TABLE AUTOR DROP EMAIL;
A clusula DROP pode ser usada com algumas configuraes adicionais:
DROP Nome_Atributo [CASCADE | RESTRICT] onde:
CASCADE: removeria o atributo de todos os lugares onde ele estivesse sendo usado
(outras tabelas como chave estrangeira e em vises).
RESTRICT: no permitiria a remoo do atributo se este estivesse sendo usado em
uma viso ou como chave estrangeira em outra tabela.
Comentrio
16 Aqui especifricado que, se a matrcula for atualizada na tabela de origem, todas as tuplas da tabela onde o atributo chave estrangeira devem ser atualizadas tambm.
Comentrio
17 Aqui especificado que, se a tupla que contm o cdigo do departamento sendo utilizado nesta tabela for deletada, o atributo cod_depto dever receber o valor default especificado para este atributo. No caso, o nmero 1.
-
33
Banco de Dados
Ex: ALTER TABLE AUTOR DROP EMAIL RESTRICT;
Modificando um atributo (uma coluna) da Tabela
MODIFY18 ( Nome_Atributo NovoTipo [ NOT NULL ] [, ... ] )
Esta clusula serve para modificar as informaes de um atributo como, por
exemplo, seu tamanho, sua nulidade, etc. Quando se altera o tipo de dados de uma coluna,
os dados so convertidos para o novo tipo. Por exemplo, se desejssemos modificar o
campo E-MAIL na tabela Autor, diminuindo seu tamanho de 40 para 30, usaramos:
ALTER TABLE AUTOR MODIFY EMAIL CHAR(25);
O detalhe que, se se diminuir o tamanho de um atributo do tipo CHAR, os dados
existentes sero truncados, havendo assim, perda de informao.
DDL Criando e Removendo ndices
ndices so estruturas que permitem agilizar a busca e ordenao de dados em
tabelas. Para criar um ndice em uma tabela existente usamos o comando CREATE INDEX. A
sintaxe completa desse comando :
CREATE [UNIQUE] INDEX Nome_Indice ON
Nome_Tabela (Nome_Atributo1 [, Nome_Atributo2])
Neste comando devemos especificar se o ndice deve ser nico (UNIQUE), ou seja,
no deve permitir repeties (restrio de chaves) ou se ser apenas um ndice usado para
acelerar a busca entre as tuplas da tabela. Depois, devemos especificar o nome do ndice
(Nome_Indice), a qual tabela ele vai pertencer (Nome_Tabela) e qual(ais) atributo(s) far
(o) parte do ndice. Por exemplo, se desejssemos criar um ndice para o campo cdigo do
autor da tabela Autor, usaramos:
CREATE UNIQUE INDEX CodigoIDX19 ON Autor (CodAutor);
Agora, se desejssemos criar um ndice para pesquisar pelo cdigo do autor e pelo
cdigo da editora ao mesmo tempo, usaramos:
CREATE INDEX AutorEditoraIDX ON Livro (CodAutor,CodEditora);
O default indexar em ordem ascendente, se quisermos uma ordem descendente
devemos adicionar palavra DESC depois do nome do atributo (no final do comando). Por
exemplo, suponha que se deseja pesquisar os autores pelo seu nascimento. Mas das datas
maiores (mais rescentes) para as menores (mais antigas). Assim, ficaramos com:
CREATE INDEX NascIDX20 ON Autor (Nascimento) DESC;
Observao
Uma consulta que envolva atributos indexados realizada com um tempo de execuo melhor do que com atributos no-indexados. Agora, cuidado, voc tambm no pode indexar TODOS os atributos de uma tabela. Voc dever usar o bom-senso para escolher quais aqueles que sero indexados de acordo com o problema sendo modelado e a freqncia de uso do atributo em consultas.
Alguns SGBDs (por exemplo, o Oracle) criam, automaticamente, ndices para as
chaves primrias das tabelas, fazendo uso da clusula UNIQUE.
Comentrio
18 Em alguns SGBDs ao invs de MODIFY usada a clusula ALTER.
Comentrio
19 Foi usado o sufixo IDX para indicar que um ndice para o cdigo do autor.
Comentrio
20 Foi usado o sufixo IDX para indicar que um ndice para o nome do autor.
-
34
Banco de Dados
Para eliminarmos um ndice usamos o comando DROP INDEX, cuja sintaxe :
DROP INDEX Nome-ndice21
Por exemplo, suponha que sejamos deletar o ndice criado para a data de
nascimento do autor, ficaramos com:
DROP INDEX NascIDX
DDL - Excluindo Tabelas
Para excluir uma tabela existente do SGBD utilizado o comando DROP. Agora,
necessrio muito cuidado com este comando, pois ao deletar a tabela (esquema da
mesma), automaticamente, TODOS os dados da tabela tambm sero excludos. A sintaxe
desse comando :
DROP TABLE Nome_Tabela
Exemplo:
/* Excluir a tabela livro */
DROP TABLE LIVRO;
Conhea Mais
Em geral, os livros de banco de dados trazem um ou mais captulo sobre SQL. Entre
esses livros temos:
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. Sistema de banco de
dados. Traduzido por Daniel Vieira. Rio de Janeiro: Elsevier;Campus, 2006.
ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 4a. ed. So
Paulo: Pearson Education do Brasil, 2005.
DATE, C. J. Introduo a sistemas de bancos de dados. Rio de Janeiro: Campus,
2000.
ALVES, W.P. Fundamentos de Bancos de Dados. Editora rica, 2004.
Alm destes, h livros especficos sobre SQL, independente de SGBD, tais como:
BEIGHLEY, Lynn. Use a Cabea SQL. Starlin Alta Consult, 1 Edio, 2008
KLINE, Daniel; KLINE, Kelvin E. Sql - O Guia Essencial - Manual de Referncia
Profissional. Alta Books, 2010.
SHELDON, Robert; OPPEL, Andy. SQL Um Guia para Iniciantes. Editora Cincia
Moderna, 3 Edio, 2009
DAMAS, Lus. Sql - Structured Query Language. Editora LTC, 6 edio, 2007.
Comentrio
21 Deve ser usado o nome que foi dado ao ndice na criao do mesmo.
Comentrio
22 Para criar tabelas usado o comando CREATE TABLE.
Comentrio
23 Integer indica um valor numrico inteiro e como o cdigo a chave, ele deve ser NOT NULL.
Comentrio
24 A descrio deve ser um atributo do tipo caractere. Usando o bom-senso voc define o tamanho do campo. Optei pela descrio ser tambm not null.
Comentrio
25 O preo um valor decimal . Optei por ele poder assumir o valor NULL (suponha que no momento do cadastro voc ainda no saiba por quanrto vai vender o produto.
-
35
Banco de Dados
Voc Sabia?
Alm da SQL outra linguage comercial para manipulao de SGBDs a QBE (Query-by-Example). A verso experimental da linguagem foi descrita formalmente (publicada) por Moshe Zloof em 1977. A verso comercial foi descrita em 1978 pela IBM e usada mais tarde na Query Management Facility (QMF). A QBE tem por base o clculo relacional de domnio e possui sintaxe bidimensional: as consultas parecem tabelas. Nesta linguagem as consultas so expressas por exemplo. Em vez de determinar um procedimento para obteno da resposta desejada, o usurio d um exemplo do que desejado. A partir da, o sistema generaliza o exemplo para o processamento da resposta da consulta.
Comentrio
26 Voc no pode deixar para especificar a quantidade de itens depois. Por isso, NOT NULL.
Aprenda Praticando
Utilize SQL para fazer o que se pede, a partir do modelo relacional a seguir.
Produto (cod_prod (PK), descricao, preco)
Item_Venda (cod_venda (PK), cod_prod(PK), qntde)
Venda (cod_venda (PK), nome_cliente)
1) Crie as tabelas acima usando o comando, sabendo que os cdigos devem ser
valores nmricos, preco deve ser um valor de ponto flutuante e qntde (quantidade
comprada do produto) deve ser um valor inteiro, obrigatoriamente, maior que zero
(afinal, ningum compra zero produto!).
Devemos comear a criao pelas tabelas mais simples (sem chave estrangeira).
Dessa forma, vamos criar primeiro a tabela PRODUTO e, depois, a tabela VENDA.
CREATE TABLE22 PRODUTO(
cod_prod integer23 NOT NULL,
descricao CHAR(45) NOT NULL24,
preco DECIMAL25(5,2),
PRIMARY KEY (cod_prod) )
Seguindo o mesmo raciocnio da tabela anterior, criaremos, agora, a tabela VENDA.
CREATE TABLE VENDA(
cod_venda integer NOT NULL,
nome_cliente CHAR(40) NOT NULL,
PRIMARY KEY (cod_venda) )
CREATE TABLE ITEM_VENDA(
cod_prod INTEGER NOT NULL,
cod_venda INTEGER NOT NULL,
qntde INTEGER NOT NULL26,
PRIMARY KEY (cod_prod, cod_venda)27,
FOREIGN KEY (cod_prod) REFERENCES Produto28,
FOREIGN KEY (cod_venda) REFERENCES Venda,
Comentrio
27 Veja que est sendo especificada uma chave primria composta, uma vez que dois atributos fazem parte da especificao.
Comentrio
28 Veja que estamos espeficifando que cod_prod chave estrangeira na tabela e um atributo pertencente a tabela Produto.
-
36
Banco de Dados
CHECK qntde > 0)29;
2) Altere a Tabela VENDA para incluir o atributo Dt_Venda e, depois, para mudar o
tamanho do atributo nome para 50 caracteres.
ALTER TABLE VENDA { ALTER TABLE VENDA {
ADD Dt_Venda DATE NOT
NULL30 MODIFY Nome_Cliente CHAR(50)31
} }
3) Criar um ndice para o atributo nome_cliente da tabela VENDA
CREATE INDEX clienteIDX32 ON VENDA (nome_cliente);
Atividades e Orientaes de Estudo
Agora a sua vez de fazer as atividades! Lembre-se praticar muito importante pra
fixar o contedo estudado!
Atividades Prticas:
Resolva as atividades a seguir em um documento texto e poste o mesmo no
ambiente virtual, no local indicado. Essa atividade para ser realizada em DUPLA (escolha
seu companheiro de trabalho!) e far parte da avaliao somativa de vocs.
I) A partir do modelo relacional especificado a seguir, escreva os comandos SQL que
realizem as operaes solicitadas.
Professor (CPF_Prof (PK), Nome_Prof, Titulacao)
Disciplina (Cod_Disc (PK), CPF_Prof (FK), Nome_Disc, carga_horaria)
Aluno (Matricula (PK), Nome)
Turma (Cod_Disc (PK), Matricula (PK), sala)
1) Faa a criao das tabelas do modelo relacional especificado acima. Algumas
observaes so: o atributo TITULACAO deve ser caractere de tamanho 30, deve
permitir nulos e os valors permitidos so graduado, especialista, mestre ou
doutor. A carga horria da disciplina deve ser maior que zero.
2) Altere a tabela PROFESSOR para para incluir o atributo tempo de servio, do tipo
inteiro e que deve ser not null. E modifique o atributo titulao para que passe a
no permitir valores nulos.
3) Altere a tabela TURMA para deletar o atributo sala.
4) Altere a tabela ALUNO para incluir o curso que ele est prestando. Esse atributo
deve ser caractere de tamanho 40 e no deve permitir nulos. O valor default desse
atributo deve ser Informtica.
5) Crie ndices para os atributos Nome_Prof (tabela professor) e Nome_Disc (tabela
Disciplina).
Comentrio
29 Aqui especificado que a quantidade de itens deve ser maior que zero, conforme foi especificado no enunciado.
Comentrio
30 Adicionamos o atributo tabela VENDA.
Comentrio
31 Aumentamos o tamanho para 50.
Comentrio
32 Como estamos fazendo neste captulo, voc pode adotar um sufixo para indicar o nome do ndice, como no caso IDX.
-
37
Banco de Dados
Vamos Revisar?
Nos captulos anteriores a esse, voc estudou como fazer a modelagem conceitual
do seu banco de dados e, depois, como projet-lo segundo o modelo relacional (MR). A
partir do MR gerado, para poder criar fisicamente o banco de dados, voc necessitar fazer
uso dos comandos estudados neste captulo. Esses comandos fazem parte da DDL (Data
Definition Language) da SQL e incluem, entre outros, comandos para criar, alterar e deletar
tabelas, alm de comandos para criao e deleo de ndices de tabela. Os comandos aqui
estudados podero ser utilizados em qualquer SGBD, pois fazem parte do SQL ANSI. Uma
vez que seu banco de dados estiver criado, ele poder ser manipulado e consultado usando
a DML (Data Manipulation Language) da SQL, este ser o assunto do prximo captulo.
-
38
Banco de Dados
Captulo 12
O que vamos estudar neste captulo?
Neste captulo, vamos estudar os seguintes temas:
Insero de dados em Tabelas.
Deleo de dados de Tabelas.
Consultas em Tabelas.
Metas
Aps o estudo deste captulo, esperamos que voc saiba utilizar a DML (Data
Manipulation Language) do SQL. Dessa forma, voc dever saber:
Inserir dados em Tabelas.
Deletar dados de Tabelas.
Realizar consultas simples, agrupadas e aninhadas em Tabelas.
-
39
Banco de Dados
Captulo 12 Consultas em Banco de Dados Relacionais
Vamos conversar sobre o assunto?
No captulo anterior voc aprendeu como criar fisicamente o seu banco de dados
atravs dos comandos da DDL (Data Definition Language) da SQL. Ou seja, voc aprendeu
como fazer a criao de tabelas, ndices para determinados atributos das tabelas e fazer a
manuteno de tudo que foi criado em termos de esquema (definio da tabela). Agora, que
as tabelas j esto criadas, resta saber como inserir dados nas mesmas, como atualizar ou
deletar esses dados inseridos, alm de como fazer para buscar informaes em uma ou mais
tabelas atravs de consultas simples ou aninhadas. justamente isto que voc ir estudar
neste captulo.
Neste captulo estudaremos a DML (Data Manipulation Language) da SQL que
engloba justamente os comandos da SQL para insero, deleo, atualizao e consulta de
dados em tabelas de banco de dados relacionais. Vamos l?
Inserindo Dados em Tabelas
A partir do momento em que uma tabela est criada, ela j pode receber a entrada
de dados. Para isto usamos o comando INSERT INTO. Este comando adiciona uma ou mais
linhas na tabela. A sintaxe desse comando :
Para inserir uma nica tupla (linha):INSERT INTO nome_tabela [(atrib1,atrib2,...)] VALUES (valor1, valor2,...)
Onde:
nome_tabela deve ser o nome da tabela onde se deseja inserir dados.
Atrib1, atrib2, ... so os nomes dos atributos que recebero os valores na insero.
Se for omitida essa lista de nomes de atributos sero selecionadas todas as colunas
da tabela, pela sua ordem de criao33. Se for especificada uma lista de nomes
de atributos, os valores para os dados devero ser especificados para insero na
ordem em que aparecem na lista.
Valor1, valor2, ... so os valores que sero atribudos aos atributos. Esses valores
devem ser especificados seguindo a ordem dos atributos (ou da lista de atributos
especificada no comando ou a ordem de criao dos atributos na tabela). Na
especificao dos valores tambm deve-se atentar que: 1) Valores de atributos do
tipo caracter (CHAR ou VARCHAR) e do tipo DATE devem estar entre apstrofos.
2) A entrada de dados baseada em caracteres deve ser efetuada, de preferncia
com caracteres em maisculo e sem acentuao, pois se algum acento for utilizado,
pode criar problemas no momento de uma pesquisa com uma palavra idntica que
no possua acento. 3) Os atributos especificados como NOT NULL devem sempre
receber algum valor seno um erro ser gerado e o comando no ser executado,
Comentrio
33 Importante atentar para isto porque voc dever especificar os valores a serem inseridos tambm pela ordem de criao dos atributos. Seno, corre o risco de inserir dados nos campos errados.
-
40
Banco de Dados
pois esses atributos nunca podero ficar vazios.
Para inserir mais de uma tupla (linha):INSERT INTO nome_tabela [(atrib1,atrib2,...)] 34
Vamos exemplificar o uso desses comandos. Para isso, tomaremos como base o
modelo relacional usado nos exemplos do captulo anterior, mas com alguns atributos a
menos, veja:
AUTOR (CodAutor (PK), Nome, Nascimento)
LIVRO (TitLivro (PK), CodAutor (FK), CodEditora (FK), Valor, Ano_Publicacao)
EDITORA (CodEditora (PK), Razao, Endereco, Cidade)
Vamos aos exemplos. Suponha que voc deseje inserir um registro na tabela Autor.
Como ficaria?
INSERT INTO Autor ( CodAutor, Nome, Nascimento )
VALUES (112, C. J. Date, 03/12/194135);
Lembrando que a ordem dos valores deve ser a mesma ordem dos atributos para
que sejam inseridos nos lugares corretos. Agora, vamos inserir um registro na tabela Editora.
INSERT INTO Editora( CodEditora, Razao, Endereco, Cidade )
VALUES (1, Editora Campus, R. Sete de Setembro,111, Rio de Janeiro);
Depois de preenchida as tabelas base (que no dependem de nenhuma outra),
vamos colocar um registro na tabela Livro, que depende de valores cadastrados nas duas
tabelas anteriores
INSERT INTO Livro36
VALUES (Introduo a Sistemas de Banco de Dados, 11237, 138, NULL39, 2000);
Chamamos a ateno para o fato que, na Tabela Livro, o cdigo do autor e o cdigo
da editora so chaves estrangeiras e, para que tudo d certo, os valores utilizados, aqui, no
insert, devem existir anteriormente nas tabelas de origem das chaves estrangeiras, no caso,
nas tabelas Autor e Editora.
Para finalizar os exemplos, vamos fazer a criao de uma nova tabela no nosso
modelo, chamada AUTOR_JOVEM com os mesmos campos da tabela AUTOR. Depois,
vamos inserir nesta nova tabela os autores da tabela AUTOR com nascimento posterior a
01/01/1980. Como ficariam os comandos SQL para realizar essas aes? Comecemos pela
criao da nova tabela.
CREATE TABLE AUTOR_JOVEM(
CodAutor INTEGER NOT NULL,
Nome CHAR(50) NOT NULL,
Nascimento DATE NOT NULL,
PRIMARY KEY (CodAutor),
UNIQUE (Nome, Nascimento) );
Agora vamos preencher essa tabela com os autores com nascimento posterior a
01/01/1980.
INSERT INTO AUTOR_JOVEM
Comentrio
34 O comando SELECT sera explicado posteriormente. Por hora, o importante saber que podemos inserir em uma tabela, vrias tuplas, resultado de uma consulta usando SELECT.
Comentrio
35 Observe que, como mencionado, valores do tipo caracter e valores do tipo DATE devem vir entre apstrofos.
Comentrio
36 Lembre que, quando no especificamos a ordem dos atributos, tomada a ordem de criao dos atributos na tabela. Assim, os valores dos atributos deveriam vir nessa mesma ordem de criao que est especificada no esquema da tabela Livro, do modelo relacional exemplo.
Comentrio
37 112 o cdigo do autor anteriormente cadastrado.
Comentrio
38 O Valor 1 o cdigo da editora anteriormente cadastrada.
Comentrio
39 Como o atributo VALOR pode receber valores nulos (ele no NOT NULL) pela definio feita na tabela, no captulo anterior, podemos preench-lo com o valor NULL.
-
41
Banco de Dados
pois esses atributos nunca podero ficar vazios.
Para inserir mais de uma tupla (linha):INSERT INTO nome_tabela [(atrib1,atrib2,...)] 34
Vamos exemplificar o uso desses comandos. Para isso, tomaremos como base o
modelo relacional usado nos exemplos do captulo anterior, mas com alguns atributos a
menos, veja:
AUTOR (CodAutor (PK), Nome, Nascimento)
LIVRO (TitLivro (PK), CodAutor (FK), CodEditora (FK), Valor, Ano_Publicacao)
EDITORA (CodEditora (PK), Razao, Endereco, Cidade)
Vamos aos exemplos. Suponha que voc deseje inserir um registro na tabela Autor.
Como ficaria?
INSERT INTO Autor ( CodAutor, Nome, Nascimento )
VALUES (112, C. J. Date, 03/12/194135);
Lembrando que a ordem dos valores deve ser a mesma ordem dos atributos para
que sejam inseridos nos lugares corretos. Agora, vamos inserir um registro na tabela Editora.
INSERT INTO Editora( CodEditora, Razao, Endereco, Cidade )
VALUES (1, Editora Campus, R. Sete de Setembro,111, Rio de Janeiro);
Depois de preenchida as tabelas base (que no dependem de nenhuma outra),
vamos colocar um registro na tabela Livro, que depende de valores cadastrados nas duas
tabelas anteriores
INSERT INTO Livro36
VALUES (Introduo a Sistemas de Banco de Dados, 11237, 138, NULL39, 2000);
Chamamos a ateno para o fato que, na Tabela Livro, o cdigo do autor e o cdigo
da editora so chaves estrangeiras e, para que tudo d certo, os valores utilizados, aqui, no
insert, devem existir anteriormente nas tabelas de origem das chaves estrangeiras, no caso,
nas tabelas Autor e Editora.
Para finalizar os exemplos, vamos fazer a criao de uma nova tabela no nosso
modelo, chamada AUTOR_JOVEM com os mesmos campos da tabela AUTOR. Depois,
vamos inserir nesta nova tabela os autores da tabela AUTOR com nascimento posterior a
01/01/1980. Como ficariam os comandos SQL para realizar essas aes? Comecemos pela
criao da nova tabela.
CREATE TABLE AUTOR_JOVEM(
CodAutor INTEGER NOT NULL,
Nome CHAR(50) NOT NULL,
Nascimento DATE NOT NULL,
PRIMARY KEY (CodAutor),
UNIQUE (Nome, Nascimento) );
Agora vamos preencher essa tabela com os autores com nascimento posterior a
01/01/1980.
INSERT INTO AUTOR_JOVEM
Comentrio
34 O comando SELECT sera explicado posteriormente. Por hora, o importante saber que podemos inserir em uma tabela, vrias tuplas, resultado de uma consulta usando SELECT.
Comentrio
35 Observe que, como mencionado, valores do tipo caracter e valores do tipo DATE devem vir entre apstrofos.
Comentrio
36 Lembre que, quando no especificamos a ordem dos atributos, tomada a ordem de criao dos atributos na tabela. Assim, os valores dos atributos deveriam vir nessa mesma ordem de criao que est especificada no esquema da tabela Livro, do modelo relacional exemplo.
Comentrio
37 112 o cdigo do autor anteriormente cadastrado.
Comentrio
38 O Valor 1 o cdigo da editora anteriormente cadastrada.
Comentrio
39 Como o atributo VALOR pode receber valores nulos (ele no NOT NULL) pela definio feita na tabela, no captulo anterior, podemos preench-lo com o valor NULL.
SELECT * FROM AUTOR WHERE Nascimento40 > 01/01/1980;
Atualizando Dados em Tabelas
Para modificar o valor de atributos de uma ou mais tuplas (linhas), dependendo
dos critrios de seleo de quem ser modificado, o comando UPDATE deve ser utilizado. A
sintaxe desse comando :
UPDATE nome_tabela SET lista_atributos com atribuies de valores
[WHERE condio de seleo das tuplas a serem modificadas]
Onde: nome_tabela - a indicao da tabela em que se deseja efetuar a atualizao
dos registros;
lista_atributos com atribuies de valores a indicao de quais atributos
devero ser atualizados e por qual valor. Esse trecho deve ter o seguinte formato: nome_
atributo1 [, nome_atributo2, ....] = {valor ou expresso }
A clusula WHERE especifica quais dados da coluna sero alterados. Quando
a clusula WHERE (que opcional) omitida, o UPDATE deve ser aplicado a todas as
tuplas da relao. Ou seja, todas as tuplas da relao sero modificadas. Por exemplo: se
desejssemos reajustar o valor de todos os livros em 10%, usaramos o seguinte comando:
UPDATE LIVRO SET Valor = Valor * 1.141
Como no comando acima no foi especificada uma clusula WHERE, todos os livros
cadastrados na tabela LIVRO seriam atualizados. Agora, vamos supor que desejssemos
alterar o endereo e a cidade da editora com CodEditora = 10.
UPDATE EDITORA SET endereco = Av. N.S. de Ftima, 456, cidade = Joo Pessoa42
WHERE CodEditora = 1;
Aqui no seriam atualizadas todas as editoras da tabela EDITORA, mas apenas a
editora de cdigo 10.
A clusula WHERE aceita como condio um comando SELECT. Daremos mais detalhes do que pode
vir em uma clusula WHERE mais frente. Aguarde...
Exluindo Dados de Tabelas
Para excluir linhas (que satisfaam uma determinada condio) de uma ou mais
tabelas, usa-se o comando DELETE FROM, cuja sintaxe :
DELETE FROM Nome_Tabela
[WHERE Condio43]
Se omitirmos a clusula WHERE, ento o DELETE ser aplicado a todas as tuplas
da relao, ou seja, TODOS os registros da tabela sero deletados (cuidado com esse
comando!). Porm, a tabela permanece no BD como uma tabela vazia. Por exemplo, o
comando: DELETE FROM LIVRO; Deletaria todos os registros da tabela livro, deixando a
mesma vazia. Vale ressaltar que a tabela (seu esquema) permanece. Logo, esse comando
no equivalente ao DROP TABLE (que apagaria o esquema da tabela do banco de dados e,
por consequncia, todos os dados da tabela seriam deletados juntamente).
Quando a clusula WHERE especificada, apenas os registros que obedecem a
condio estabelecida so deletados. Por exemplo, excluir os registros da tabela autor cujo
Comentrio
40 Aqui fazemos a seleo dos autores com nascimento maior que 01/01/1980. Veremos o comando SELECT , o mais importante da DML, em detalhes, mais a frente.
Comentrio
41 O valor antigo de cada livro vai receber o valor antigo aumentado de 10% (representado na frmula pelo 1.1)
Comentrio
42 Veja que apenas os campos endereo e cidade, como solicitado, seriam atualizados. Os novos valores para os atributos vm entre apstrofos porque so do tipo caracter.
Comentrio
43 A clusula WHERE especifica quais linhas da tabela sero excludas.
-
42
Banco de Dados
codAutor seja igual a 15.
DELETE FROM AUTOR WHERE CodAutor = 15;
Consultando Dados em Tabelas
Chegamos, agora, no comando mais importante da SQL por ser o utilizado com mais
frequncia: o SELECT. Este comando se tornou o mais importante da linguagem SQL devido
ao seu poder de consulta. Pois com ele poderemos realizar, entre outras coisas, consultas
em uma ou mais tabelas, realizar consultas aninhadas, fazer a aplicao de funes pr-
existentes e utilizar operaes relacionais (unio, diferena, interseo e obviamente
seleo) com extrema simplicidade na manipulao das tabelas. A estrutura bsica do
comando SELECT :
SELECT PROJEO da lgebra relacional
FROM Onde a pesquisa ser feita (uma ou mais tabelas)
WHERE Condies da SELEO
Em resumo, a clusula SELECT corresponde operao de projeo da lgebra
relacional. Usada para listar os atributos desejados do resultado de uma consulta. A
clusula FROM corresponde A especificao de onde a pesquisa ser realizada. Em uma ou
mais tabelas (quando for usada mais de uma tabela, ser aplicada a operao de produto
cartesiano da lgebra relacional). A clusula WHERE corresponde operao de seleo
da lgebra relacional, onde so especificadas as condies de pesquisa na(s) tabela(s)
identificadas na clusula FROM.
Vamos dar um exemplo. Selecione todas as informaes da tabela AUTOR. Haveria
duas formas de realizar essa consulta:
SELECT CodAutor, Nome, Nascimento44 FROM AUTOR ; ou
SELECT45 * FROM AUTOR ;
Outro exemplo seria: Selecione todas as informaes sobre o autor de cdigo 5.
SELECT * FROM AUTOR WHERE CodAutor = 546;
Alm dessa parte bsica o comando SELECT tem vrias outras que iremos explicando
nas prximas sees, comeando da utilizao mais simples, at chegar na mais elaborada.
Para dar uma ideia, a sintaxe completa do comando :
SELECT [DISTINCT] nome_coluna,....
FROM nome_tabela, ....
[WHERE (condies)]
[GROUP BY nome_coluna, ....] [HAVING (condies)]
Comentrio
44 Voc pode especificar os atributos desejados
Comentrio
45 Ou pode utulizar o * (asterisco) que indica que se quer projetar TODAS as colunas da(s) tabela(s) espedificada(s) na clusula FROM.
Comentrio
46 Veja que, na clusula WHERE espedificamos a condio de pesquisa que, no caso, o cdigo ser igual a 5.
-
43
Banco de Dados
[{INTERSECT | MINUS | UNION} outro_comando_select]
[ORDER BY nome_coluna {ASC | DESC}, ....];
Cada clusula permite a especificao de algum elemento referente s operaes
relacionadas a lgebra relacional :
SELECT - o que deseja-se na tabela de resultado
FROM - de onde retirar os dados necessrios
WHERE - condies para busca dos resultados
GROUP BY - agrupamento de resultados
HAVING - condies para a definio de grupos na tabela de resultados
INTERSECT - permite a interseo de tabelas
MINUS - permite a diferena entre tabelas
UNION - permite a unio de tabelas
ORDER BY - estabelece a ordenao lgica da tabela de resultados (ASC ordenao
ascendente, DESC ordenao descendente)
importante ressaltar que o resultado de qualquer comando SELECT uma tabela
com as tuplas (e os atributos destas) que atendam aos critrios especificados. Para mostrar
esse ponto, alm de tomarmos como base o mesmo modelo exemplo que vem sendo
utilizado para demonstrar as consultas das sees a seguir, vamos fazer uso das Relaes
mostradas nas Tabelas 27, 28 e 29 que representam exemplos do modelo base preenchido.
Tabela 27 - Relao Editora
Cod_Editora (PK) Razao Endereco Cidade
1 Sextante Av. Hortncias, 234 Porto Alegre
2 Fantasy R. 24 horas, 55 So Paulo
3 Bookman Av. das Ubaias, 303 Recife
Tabela 28 - Relao Autor
Cod_Autor (PK) Nome Nascimento
110 Pedro Alves 18/03/1955
111 Carolina Dantas 22/02/1970
112 Olvia Duncan 10/01/1968
-
44
Banco de Dados
Tabela 29 - Relao Livro
TitLivro (PK) CodAutor (FK) CodEditora (FK) Valor Ano_Publicacao
Banco de Dados 110 3 150,00 2009
O Estranho 111 1 45,00 2010
Sucesso 112 2 35,00 2000
Arquitetura de BD 110 3 110,00 2007
O Conhecido 111 1 55,00 2009
BD Distribudos 110 3 98,00 2010
Consultas Simples Sem Condio
Como exemplificado na seo anterior, uma consulta simples, utiliza apenas as
clusulas SELECT/FROM. Por exemplo, selecionar todas as informaes de todas as editoras
cadastradas:
SELECT * FROM Editora;
Esse comando resultaria na Tabela 30, pois o * (asterisco), como j explicado
anteriormente, indica que todos os atributos (colunas) da tabela devem ser selecionados.
Tabela 30 - Relao Resultante
Cod_Editora Razao Endereco Cidade
1 Sex
top related