Académique Documents
Professionnel Documents
Culture Documents
SISTEMAS DE INFORMAO
ndice
Introduo........................................................................................................................................ 5
A quem se destina?.......................................................................................................................... 6
Onde que se pode utilizar?...........................................................................................................6
Quais so os objectivos do SQL?....................................................................................................6
Quais so as caractersticas do SQL?.............................................................................................7
A clusula de seleco Select........................................................................................................8
Operadores especiais utilizados em SQL.........................................................................................9
A clusula de ordenao (Order By)............................................................................................11
Seleco de expresses................................................................................................................11
Eliminao de repeties............................................................................................................... 12
Juno de tabelas.......................................................................................................................... 12
Tipos de Junes Joins................................................................................................................ 12
Funes Agregadas....................................................................................................................... 15
Agrupamento de informao.......................................................................................................... 16
Agrupamentos e o valor Nul........................................................................................................ 18
Ordenao de Grupos.................................................................................................................... 18
Sub-Consultas (SubQuerys)........................................................................................................18
Manipulao de Dados (DML)........................................................................................................22
Insero de registos simples.......................................................................................................... 22
Insero de conjuntos de registos..................................................................................................22
Actualizao de registos................................................................................................................ 23
Eliminao de registos................................................................................................................... 23
Manipulao de datas.................................................................................................................... 24
Criao e manuteno de tabelas (DDL).......................................................................................24
Criar uma base de dados............................................................................................................... 24
Eliminar uma base de dados.......................................................................................................... 24
Criar uma tabela............................................................................................................................. 25
Tipos de dados............................................................................................................................... 25
Valores por defeito......................................................................................................................... 27
Valores a admitir (restries).......................................................................................................... 27
Criao de tabelas a partir de outras tabelas.................................................................................28
Alterar a estrutura de uma tabela...................................................................................................28
Eliminar uma tabela....................................................................................................................... 29
Vises (Views) em SQL (SQLServer e Oracle)............................................................................29
Juntando vrias tabelas numa View (SQLServer e Oracle).........................................................30
Clusula With Check Option (SQLServer e Oracle).....................................................................30
Eliminar Vises (SQLServer e Oracle)...........................................................................................31
Criao de ndices......................................................................................................................... 31
Eliminao de ndices.................................................................................................................... 32
Introduo
Quando as Bases de Dados Relacionais estavam a ser desenvolvidas, foram criadas linguagens
destinadas sua manipulao. O Departamento de Pesquisas da IBM, desenvolveu o SQL (l-se
SEQUEL) como interface para o sistema de BD relacional denominado SYSTEM R, no incio dos
anos 70. Em 1986 o American National Standard Institute (ANSI), publicou um padro SQL.
O SQL estabeleceu-se ento como linguagem padro das Bases de Dados Relacionais.
O SQL apresenta uma srie de comandos que permitem a definio dos dados, chamada de DDL
(Data Definition Language), composta entre outros pelos comandos Create, que destinado
criao da Base de Dados, das Tabelas que o compe, alm das relaes existentes entre as
tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e
Drop.
Os comandos da srie DML (Data Manipulation Language), destinados a consultas, inseres,
excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea.
Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e
Delete.
Uma subclasse de comandos DML, a DCL (Data Control Language), dispe de comandos de
controlo como Grant e Revoke.
A Linguagem SQL tem como grandes virtudes a capacidade de gerir ndices, sem a necessidade
de controlo individualizado de ndice corrente, algo muito comum nas linguagens de manipulao
de dados do tipo registro a registro. Outra caracterstica muito importante disponvel em SQL
sua capacidade de construo de vises, que so formas de visualizarmos os dados na forma de
listagens independente das tabelas e organizao lgica dos dados.
Outra caracterstica interessante na linguagem SQL a capacidade que dispomos de cancelar
uma srie de actualizaes ou de as gravarmos, depois de iniciarmos uma sequncia de
actualizaes. Os comandos Commit e Rollback so responsveis por estas facilidades.
Devemos notar que a linguagem SQL consegue implementar estas solues, somente pelo facto
de estar baseada em Base de Dados, que garantem por si mesmo a integridade das relaes
existentes entre as tabelas e seus ndices.
A quem se destina?
Esta linguagem destina-se essencialmente a programadores, administradores de base de dados,
gestores, estudantes e utilizadores em geral.
Dos principais SGBDR conhecidos do mercado actual, de destacar o Access, SQL Server,
MySQL, Oracle, SQL AnyWhere, Informix, Paradox, entre outros.
Salienta-se contudo que, as verses de SQL utilizadas nestas diferentes plataformas, diferem
ligeiramente (em determinadas operaes), visto haver ainda algumas situaes que passam pela
utilizao de comandos proprietrios. Exemplos: SQL Jet no Access, SQL Plus no Oracle, SQL
Transact no SQL Server. O SQL aqui abordado passar essencialmente por demonstrar a
utilizao do SQL Standard, que reconhecido na totalidade em qualquer uma das plataformas
supra mencionadas. No entanto, isto no inviabiliza o facto de em algumas
situaes/consideraes ser feito uma meno a alguns comandos, ditos proprietrios. Aconselha-
se, pois, a consultar a documentao nas plataformas que vier a utilizar para um conhecimento
mais detalhado e aprofundado da sintaxe em questo.
Como sabido, uma tabela ou entidade num SGBDR constituda por linhas (registos ou tuplos)
e colunas (campos ou atributos), em que as tabelas so identificadas inequivocamente atravs de
chaves primrias e, possivelmente, relacionadas entre si.
O SQL usa na sua sintaxe comandos para interagir com as BD, fazendo permanentemente
interrogaes s mesmas. Estes comandos so designados por clusulas.
Sintaxe geral:
Select campo1, campo2, , campoN ou *
From tabela1, , tabelaN
[Where condio]
[Group By]
[Having]
[Order By]
Nota: O smbolo * representa tudo (todos os campos); os comandos entre [ ] so opcionais, pois
nem sempre esto presentes numa consulta. Se tivermos que utilizar todos estes comandos numa
consulta, a ordem sequencial dos mesmos ter que ser respeitada!
Vamos supor que temos definido numa base de dados as tabelas Pessoa, Postal, Comissao e
Mensagem, com as relaes indicadas e constitudas pelos seguintes campos:
H dois conceitos que importa desde j explicar. Quando se fala de projeco, estamos
interessados em obter apenas algumas das colunas da(s) tabela(s). Quando se fala de restrio,
estaremos interessados em efectuar algum tipo de filtragem aos dados, restringindo o n. de
linhas a mostrar/visualizar. Neste ltimo caso, teremos que usar a clusula Where.
Operadores Relacionais: =, >, <, >=, <=, <> ou != (diferente, em algumas verses de SQL).
Operadores Lgicos: And (E), Or (Ou), Not (No).
Problemas:
1. Seleccionar todas as pessoas com menos de 35 anos de idade.
2. Seleccionar o nome e salrio de todas as pessoas com idade para votar.
3. Seleccionar as pessoas com idades compreendidas entre os 30 e os 45 anos de idade.
4. Seleccionar as pessoas cujas idades no esto compreendidas entre os 30 e os 45 anos de
idade.
3. Is
Operador bastante utilizado no tratamento de nulos.
As BDR contm um valor especial NULL que pode ser atribudo a qualquer tipo de dados. Esse
valor, quando presente num campo, indica a ausncia de valor.
As comparaes de valores com NULL so feitas com o operador Is.
Sintaxe:
Select ..
From
Where campo Is [Not] Null
Problemas:
1. Seleccionar pessoas com idades compreendidas entre 20 e 50, utilizando o operador
Between.
2. Seleccionar os cdigos postais completos de Lisboa e Porto.
3. Seleccionar os cdigos postais completos que no sejam nem 1000, 4000 e 4760.
4. Seleccionar os nomes das pessoas que no possuem telefone.
5. Seleccionar os nomes das pessoas que possuem telefone.
6. Seleccionar todas as pessoas cujo nome comea por J.
7. Seleccionar todas as pessoas cujo nome contenha a palavra Manuel.
8. Seleccionar todas as pessoas cuja 2. letra do nome um a.
A clusula Where de cima equivalente a: Where Idade <= 27 or (Idade >= 30 and Telef is Null).
Sintaxe:
Select .
From .
Order By campo1 [ASC | DESC], , campoN [ASC | DESC]
Problemas:
1. Seleccionar todas as pessoas, ordenando o resultado pelo campo Idade.
2. Seleccionar o nome e o salrio de todas as pessoas, ordenando o resultado pelos
salrios mais elevados.
3. Seleccionar todo o contedo da tabela de Comisses, ordenado por ID e ID_MSG.
4. Seleccionar da tabela de Comisses, as linhas cujo ID menor que 40, ordenadas,
dentro de cada ID, pela coluna valor de forma descendentemente.
Seleco de expresses
Podemos efectuar clculos a nvel de operaes aritmticas na clusula Select.
Exemplo:
1. Seleccionar o nome, idade actual e idade que iro ter daqui a 1 ano de todas as pessoas
registas na BD.
Select Nome, Idade, Idade+1 As [Idade para o ano]
From Pessoa
O operador AS entendido como sendo uma aliase.
Problema:
1. Seleccionar da tabela de Comisses, o valor bruto a receber, o montante do IVA (23%) e o
valor lquido para os indivduos cujo ID igual a 14 e 25, ordenando o resultado pelo campo
ID.
A listagem obtida dever ter o seguinte aspecto:
Eliminao de repeties
possvel em SQL eliminar linhas repetidas na visualizao de registos, usando para o efeito a
palavra reservada Distinct. Os dados obtidos ficam automaticamente ordenados.
Exemplo:
Select Distinct Local
From Postal
Juno de tabelas
O Join (ligao) entre tabelas permite extrair, num nico Select, qualquer informao contida
em diferentes tabelas.
A ligao entre tabelas feita atravs de chaves primrias na origem e chaves estrangeiras no
destino. Recordando o conceito de chave estrangeira (Foreign Key): trata-se de um campo ou
conjunto de campos existentes numa tabela, que permite ligar os dados desta tabela a outra
tabela, onde este mesmo conjunto de campos existe como chave primria.
Sintaxe:
Select campo1, , campoN, *
From tabela1, , tabelaN
Tipos de Junes Joins
1. Cross Join (Produto Cartesiano): associa a cada linha de uma tabela o conjunto de linhas
de outra tabela. Nota: Pouco usado.
Exemplo:
Select *
From Pessoa, Postal
3. Natural Join: existe quando todas as colunas envolvidas na ligao entre as tabelas so
apresentadas sem repetio de colunas.
Exemplo:
Select Pessoa.*,Postal.Local
From Pessoa, Postal
Where Cod_Postal=Codigo
4. Inner Join: juntam-se duas ou mais tabelas, ligando-as atravs da chave primria de uma e
da chave estrangeira da outra. Os dois tipos anteriores fazem parte deste tipo de ligao.
Nota: O mais usado de todos.
Exemplo:
Select Nome,Cod_Postal,Local
From Pessoa, Postal
Where Cod_Postal=Codigo
Podamos tambm substituir o campo Cod_Postal em cima pelo campo Codigo, visto as
duas tabelas estarem relacionadas atravs deles.
A juno de N tabelas num nico Select obriga colocao de, pelo menos, N-1 condies de
juno.
Problemas:
1. Seleccionar os nomes e as localidades das pessoas que no possuem telefone.
2. Seleccionar o ID das pessoas, seus nomes e valor de todas as comisses ganhas.
3. Seleccionar o nome das pessoas e o valor das comisses, ordenando o resultado pelo nome e
colocando os maiores valores de comisso no topo do resultado de cada indivduo.
4. Seleccionar todas as comisses, o seu destinatrio e a descrio da operao que reflectem.
O resultado dever aparecer ordenado por nome.
5. Outer Join: permite que a totalidade das linhas de uma tabela seja obtida, ainda que no
exista o correspondente valor na outra tabela a que esta est ligada.
Exemplo: Todos os cdigos postais e respectivas pessoas, mesmo para aqueles cdigos que
no estejam associados a nenhuma pessoa em particular.
Select Nome, Cod_Postal, Codigo, Local
From Postal Left Join Pessoa
On Postal.Codigo=Pessoa.Cod_Postal
O Outer Join pode ser realizado esquerda ou direita, isto , quando se faz a ligao entre
duas tabelas, ir mostrar-se respectivamente, todo o contedo da tabela da esquerda e
respectiva ligao tabela da direita ou vice-versa.
Quando o Outer Join realizado direita, so considerados todos os registos da tabela da
direita e apenas os registos correspondentes na tabela da esquerda.
Exemplo:
Select Nome, Valor
From Comissao Right Join Pessoa
On Comissao.ID=Pessoa.ID
O n. de campos a seleccionar em cada um dos comandos Select tem que ser igual. Se se
pretender juntar tabelas que no possuam o conjunto de campos necessrio, devemos adicionar a
constante Null seleco. O nome das colunas na listagem final, o que resulta do 1. Select.
Cada Select pode conter a sua prpria clusula Where, no entanto, s poder existir uma nica
clusula Order By no ltimo Select, sendo a ordenao aplicada a todo o resultado final. Por
defeito, um Union remove sempre as linhas duplicadas.
Problemas:
1. Juntar as tabelas Postal com os locais contendo a string Ar e Mensagem, com os
IDs de mensagem <= 50. Ordenar o resultado pela coluna das descries das
mensagens.
2. Unir o contedo da tabela Postal ao da tabela Pessoa.
Funes Agregadas
O uso de funes agregadas ou estatsticas permite obter informao sobre conjuntos de linhas
especificados na clusula Where ou sobre grupos de linhas indicados na clusula Group By.
Funo Descrio
Count Devolve o n. total de linhas (registos)
Max Devolve o maior valor de uma coluna
Min Devolve o menor valor de uma coluna
Sum Devolve a soma de todos os valores de uma coluna
Avg Devolve a mdia de todos os valores de uma coluna
Problemas:
1. Quantas pessoas existem na BD?
2. Qual o n. total de pessoas e quantas possuem telefone?
3. Quantas pessoas no possuem telefone?
4. Quantas comisses tm valores superiores a 1000?
5. Quantos so os IDs envolvidos na tabela de Comisses?
Agrupamento de informao
Os conceitos de agrupamento de dados so fundamentais na maior parte das consultas
efectuadas a Base de Dados Relacionais.
Vejamos os dois seguintes exemplos em que no existe qualquer tipo de agrupamento:
Exemplos:
1. Mostrar para cada ID, o valor total das comisses.
Select ID, Sum(Valor) As Total
From Comisso
Group By ID
2. Mostrar para cada pessoa, o valor total das comisses.
Select Nome, Sum(Valor) As Total
From Pessoa P,Comissao C
Where P.ID=C.ID
Group By Nome
Problemas:
1. Mostrar o valor total (salrio+comisses) a receber por cada pessoa.
2. Seleccionar a maior comisso de cada ID.
3. Seleccionar o n. de comisses de cada ID.
4. Mostrar o valor total e o n. das comisses sobre Vendas a receber por cada pessoa,
indicando tambm o local onde essa pessoa vive.
Se num Select com a clusula Group By no houver nenhuma funo de agregao, ento
estamos perante um Select Distinct.
Exemplo:
Select ID Select Distinct ID
From Comissao From Comissao
Group By ID
A clusula Having permite aplicar restries ao nvel dos grupos que so processados.
Exemplo:
1. Mostrar o valor total de cada comisso agrupada por ID, seleccionando apenas os IDs com
comisses totais maiores que 1000.
Select ID, Sum(Valor) As Total
From Comissao
Group By ID
Having Sum(Valor)>1000
Notas: Usa-se a clusula Where sempre que se pretende restringir os registos a considerar na
seleco. Usa-se a clusula Having para restringir o conjunto dos grupos de registos a
considerar.
Problemas:
1. Seleccionar o nome de todas as pessoas que tenham alguma mensagem com ID_Msg > 35.
2. Qual o total das comisses agrupadas por ID, considerando apenas aquelas de valor > 1000.
3. Qual o total das comisses agrupadas por ID, considerando apenas aquelas cujo valor total >
1000.
Ordenao de Grupos
Pode-se efectuar a ordenao por colunas, expresses ou pela ordem da coluna ou expresso
seleccionada.
Exemplos:
1. Ordenao por coluna
Select ID, Count(ID) As Conta
From Comissao
Group By ID
Order By ID
Sub-Consultas (SubQuerys)
O resultado do comando Select sempre uma tabela, ainda que da sua execuo no resulte
qualquer linha/registo.
Um subquery consiste num comando Select dentro doutro.
Um comando Select pode ser colocado:
dentro doutro nas clusulas Where, Having, Select e From;
nos comandos Insert, Upate e Delete que iremos ver mais frente;
na definio de vistas (Views), que iremos tambm ver mais frente.
Exemplo:
1. Qual o nome da pessoa que aufere o menor salrio?
Select Nome
From Pessoa
Where Salario=(Select Min(Salario) From Pessoa)
Quando um Select contm outro Select encadeado, por vezes, pode acontecer que o Select
interior necessite de valores do Select exterior.
Exemplo:
1. Qual o nome das pessoas cujo salrio menor que 15 vezes o conjunto das suas comisses?
Select Nome,Salario
From Pessoa P
Where Salario<15*(Select Sum(Valor) From Comissao C Where C.ID=P.ID)
Para cada pessoa estudada no Select exterior, executado o Select interior calculando o total
das comisses que lhe esto associadas.
Ao Select exterior chama-se Outer Select.
Ao Select interior chama-se Inner Select.
A sub-query (colocada entre parntesis) que depende, para o seu funcionamento, de valores da
query mais exterior chama-se Query correlacionada. Se no depender, diz-se que no
correlacionada.
A utilizao de operadores lgicos e relacionais na comparao com o resultado duma subquery
obriga a que esta ltima devolva apenas uma nica linha de resultado. Caso contrrio, obtm-se
um erro.
Exemplos:
1. Seleccionar o nome das pessoas que vivem na localidade com o maior cdigo postal.
Select Nome
From Pessoa
Where Cod_Postal=(Select Max(codigo) From Postal)
O operador In
Verifica se um valor existe no resultado duma subquery, devolvendo True ou False.
Exemplo:
1. Qual o conjunto de pessoas que vivem em Lisboa?
Select Nome, Cod_Postal
From Pessoa
Where Cod_Postal In (Select Codigo From Postal Where Local=Lisboa)
O operador Exists
S pode ser usado para avaliar o resultado de subqueries; o seu objectivo verificar se, da
execuo da subquery, resultou ou no alguma linha de resultado, devolvendo True ou False.
Sintaxe:
Select .
From ..
Where [Not] Exists (Subquery)
Exemplos:
1. Seleccionar o nome e a morada completa de todas as pessoas que tm comisses a receber.
a. Usando a juno de tabelas:
Select Distinct Nome, Cod_Postal, Local
From Pessoa,Postal,Comissao
Where Cod_Postal=Codigo and Comissao.ID=Pessoa.ID
Exemplos:
1. Seleccionar todos os cdigos e respectivas localidades que no esto associados a nenhuma
pessoa.
Select *
From Postal
Where Not Exists (Select * From Pessoa Where Cod_Postal=Codigo)
2. Seleccionar todas as linhas da tabela Postal cujo cdigo menor ou igual que 5000 e
simultaneamente maior ou igual que 3000.
Select *
From Postal P
Where Codigo<=5000 and Exists (Select * From Postal Where Codigo>=3000 and
Codigo=P.Cod_Postal)
Ou
Select Nome,Idade
From Pessoa
Where Cod_Postal = Any (Select Codigo From Postal Where Local<>Lisboa)
Nota: As colunas que no forem colocadas no comando Insert so preenchidas com o valor
Null.
Cuidados a ter:
Manter a compatibilidade de tipos de dados;
Manter o n. de colunas iguais.
Exemplo:
1. Inserir na tabela Postal, o ID e Nome de todas as pessoas (algo estranho, mas que
comprova este facto) => J funciona no SQL Server 2005
Insert Into Postal(Codigo,Local) Insert Into Postal
Select ID, Nome Select ID As Codigo, Nome As Local From Pessoa
From Pessoa
Cuidados a ter:
Manter o n. de colunas igual;
Manter compatibilidade de tipos de dados;
O comando Select no pode conter a tabela em que se est a fazer a insero.
Actualizao de registos
Sintaxe:
Update tabela [Aliase]
Set campo1={expresso1,query1},
.
.
campoN={expressoN,queryN}
[Where condio]
Exemplo:
1. Aumentar o salrio 10% a todas as pessoas
Update Pessoa
Set Salario=Salario*1.1
Problemas:
1. Aumentar o salrio 20% ao Paulo Viegas e adicionar mais 1 ano sua idade.
2. Adicionar o prefixo 1 ao telefone de todas as pessoas que tm telefone e que vivem em
Lisboa.
Eliminao de registos
Apaga linhas completas duma determinada tabela.
Sintaxe:
Delete From Tabela
[Where condio]
Problemas:
1. Eliminar o registo do Sr. Joaquim Almeida.
2. Apagar as localidades da tabela Postal que no esto associadas a nenhuma pessoa.
Nota: Ateno Integridade Referencial! Cuidado ao remover as linhas da tabela Postal que
possuem cdigos postais associados na tabela Pessoa.
Manipulao de datas
Cada um dos diferentes SGBDR representa e manipula de forma distinta datas e horas.
Exemplos:
Inserir uma data de nascimento (2/Julho/1979) numa tabela:
Insert Into Tabela(Num,Nome,Data_Nasc) Values (1,Carlos Sousa,#07/02/1979#) => Access
Insert Into Tabela(Num,Nome,Data_Nasc) Values (1,Carlos Sousa,02 Jul 1979) => SQLServer
O ficheiro vai ter o nome lgico de mydb_dat no caso de ser preciso referenci-lo num script de
SQL mais tarde.
Notas: Apesar desses utilitrios fornecerem ambientes grficos amigveis, existem situaes em
que absolutamente necessrio efectuar a criao da BD atravs de um Script (ficheiro externo
com comandos de SQL), incluindo muitas vezes a criao das tabelas, ndices e mesmo o
eventual carregamento de dados.
Exemplo:
DROP DATABASE mydb
Alguns sistemas no disponibilizam este comando.
Exemplo:
Create Table Empregado(ID int, Nome text, DataNasc datetime, Salario float)
Tipos de dados
Strings;
Numricos;
Data e Hora.
Vejamos de seguida alguns dos principais tipos de dados encontrados na maioria dos SGBDR.
Algumas questes que se colocam relativamente s caractersticas dos campos duma tabela so:
Logo:
Insert Into Postal(Local) Values(Faro) Insert Into Postal Values(Null,Faro)
Exemplo:
Create Table Teste3(BI int Constraint BI Unique)
Exemplos:
Create Table Teste4(ID Int Constraint Chave1 Primary Key, Nome Char(50))
Create Table Comissao2(ID int not null, ID_Msg int not null, Valor float not null, Constraint Chave2
Primary Key(ID,ID_Msg))
Exemplo:
Create Table Funcionarios(Cod_Postal smallint References Postal(Codigo))
O que que acontece quando tentarmos apagar ou alterar os valores duma chave primria que
tem dados associados noutra(s) tabela(s)?
Se no houver qualquer ligao entre as tabelas atravs da clusula References, ento as
alteraes na tabela Me no se reflectem na tabela Filho.
Se existir uma ligao entre as duas tabelas, ento o sistema no vai permitir que os valores da
tabela me sejam alterados ou apagados, se estes existirem em qualquer tabela filho.
No entanto, por vezes interessa que, ao alterar um valor (chave primria) numa tabela, sejam
alteradas todas as ocorrncias desse mesmo valor nas tabelas filhos ou, ento que, ao apagar o
valor na tabela me, sejam apagados todos os valores existentes nas tabelas filhos.
Problemas:
1. Adicionar tabela Pessoa a coluna Fax com 15 caracteres.
2. Alterar o tipo de dados da coluna Fax para 25 caracteres.
3. Alterar as caractersticas da coluna Salario, de forma a que esta possa admitir nulos.
4. Eliminar a coluna Fax.
Sintaxe:
Create View nomevista [(lista de campos)] As
Select
From
[Where condio]
O nome dos campos da View so, por defeito, iguais aos nomes dos campos das tabelas a que
pertencem. Uma viso pode ser criada a partir de tabelas ou de outras views.
Exemplos:
1. Criar uma viso com o conjunto das pessoas cujo salrio menor que 10000.
Create View Salrios AS
Select ID, Nome, Salario
From Pessoa
Where Salario < 10000
Criao de ndices
Os registos, quando adicionados ao ficheiro ou BD, so sempre colocados no fim do mesmo.
Evita-se desta forma pesadas reorganizaes dos sistemas do ficheiro sempre que um novo
registo introduzido. Sendo os registos colocados sempre no final do ficheiro ou da tabela, outra
forma qualquer ter que existir para simular uma ordenao sobre os dados.
A indexao a estrutura que permite essa simulao. Consiste numa rvore de termos que
revertem para uma determinada posio no ficheiro ou tabela.
Uma rvore binria uma estrutura em que, para cada um dos ns da rvore, todos os ns
esquerda so menores ou iguais chave de indexao e todos os ns direita so maiores que a
chave de indexao. Em cada um dos ns vai-se guardar a chave de indexao e a posio no
ficheiro ou o n. de registo.
ID Nome Apelido
2456 Clia Morais
Clia
4561 Jos Lopes 1
6452 Florinda Simes
1289 Antnio Dias
4978 Beatriz Costa
3254 Ana Rita Antnio Jos
4 2
5698 Paulo Viegas
A maioria dos SGBDR inclui utilitrios que criam ndices de forma visual.
Sintaxe:
Exemplo:
1. Criar um ndice sobre o campo Local da tabela Postal.
Create Index ILocal On Postal(Local)
Problemas:
1. Criar um ndice nico sobre o campo Nome da tabela Pessoa.
2. Criar um ndice descendente sobre o campo Salario da tabela Pessoa.
3. Criar um ndice nico sobre os campos ID e ID_Msg da tabela Comissoes.
possvel a criao de ndices sobre campos que so de tipos de dados diferentes. Os ndices
so automaticamente actualizados pelo SGBDR cada vez que um registo indexado inserido,
alterado ou eliminado. de referir ainda que os ndices existem fisicamente em disco.
Eliminao de ndices
Sintaxe:
Drop Index Nomendice on Tabela
Exemplos:
1. Drop Index ILocal On Postal
2. Drop Index INome On Pessoa