You are on page 1of 36

Bases de Dados

O Modelo Relacional
Resultado do trabalho de E.F.Codd na IBM durante a dcada de 70. Oracle Server da Oracle Corp.; Informix SE e RDS e DB2 da IBM, SQL Server da Microsoft, Sybase SQL da Sybase Inc. entre outros, so os mais vendidos dos grandes fabricantes que aderiram aos SGBDs seguindo o modelo relacional.
Bases de Dados

Bases de Dados - O Modelo Relacional

Conceitos Bsicos:
relao (tabela) constitui uma estrutura bidimensional. atributos da relao - 1 ou mais colunas. tuplos da relao 0 ou mais linhas. O esquema conceptual de uma relao o conjunto dos seus atributos, que traduzem o tipo de dados a armazenar.
Bases de Dados

Bases de Dados - O Modelo Relacional

Conceitos Bsicos:

Bases de Dados

Bases de Dados - O Modelo Relacional

Conceito de Chave:
Chave candidata subconjunto de atributos de uma relao que , em conjunto, identificam univocamente qualquer tuplo, e que no pode ser reduzido sem perder essa qualidade. Chave primria chave seleccionada de entre as diversas chaves candidatas, para efectivamente identificar cada tuplo. Chave estrangeira atributo, ou conjunto de atributos, de uma relao que chave primria numa outra relao.
Bases de Dados

Bases de Dados - O Modelo Relacional

Entidades e Relacionamentos:
Entidades uma entidade ser representativa de uma classe de objectos sobre os quais se quer guardar informao. Ex: numa clnica as entidades podero ser: mdicos, pacientes, especialidades, etc. As entidades correspondem, ao nvel do modelo relacional, a relaes. Cada instncia de uma entidade ser caracterizada pelos valores de um conjunto de atributos. Ex: um mdico tem o seu nome, morada, especialidade etc.
Bases de Dados

Bases de Dados - O Modelo Relacional

Entidades e Relacionamentos:
Entre entidades estabelecem-se um conjunto de relaes: Relaes de 1 para 1. Relaes de 1 para muitos (1 para ? ). Relaes de muitos para muitos (? para ? ). Estas ltimas levam criao de novas entidades no processo de normalizao.
Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao:
A normalizao um processo sistemtico, definido por um conjunto de regras bem definidas, que visa eliminar fontes de redundncia nos dados

Os problemas da redundncia
Problemas de manuteno; Custos de espao de armazenamento; Problemas de desempenho.
Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao:
O processo de normalizao ocorre atravs de um conjunto de fases que conduzem a base de dados a estados onde a redundncia se torna cada vez menor. A cada um destes estados d-se o nome de forma normal (FN).

Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: exemplo
Consideremos a ficha de consulta de uma clnica mdica:
Cod.Medico:________ Nome: ______________________________ Especialid ade : ___ --- ______________ Morada Med. : ________________ Contacto: _______________ Idade : ____________ CONSULTAS: Data Hora N.Benif Paciente Idade Morada Cod.Postal Preo

Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: Exemplo
Considere as seguintes restries: Um mdico s consulta uma especialidade. O preo da consulta depende da especialidade. Durante a consulta podem ser feitos tratamentos ao paciente que sero pagos em conjunto com a consulta. A clnica tem 30 mdicos a consultar 10 especialidades, para um universo de 10000 pacientes, tendo cerca de 50 consultas por dia.
Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 1 Forma Normal


O primeiro passo do processo de normalizao (1FN), visa eliminar grupos de valores repetidos para um dado atributo, ou conjunto de atributos num dado tuplo. Analisando o exemplo, verifica-se que para a entidade mdico podem existir vrias consultas. A soluo passa por decompor a relao inicial criando novas relaes, tantas quantas o nmero de grupos que se repetem.
Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 1 Forma Normal


A nova relao teria como atributos a chave primria da relao de onde originria, bem como os atributos que fazem parte do grupo que se repete. O esquema conceptual da base de dados na 1FN o seguinte:
Mdico:(cod_med,nome,morada,contacto,idade, cod_esp,especialidade,preo) Consulta(cod_med,data,hora,n_ben,paciente,idade,morada,cod_post,localidade, preo)

Note-se que a chave da tabela criada quadrupla, incluindo a chave da tabela inicial e os atributos data, hora e n_ben.
Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: Dependncias Funcionais


Todo o processo necessrio normalizao est traduzido nas dependncias existentes entre os dados, existindo trs tipos de dependncias.
Funcionais existe uma dependncia funcional X? Y entre dois conjuntos de atributos X e Y, se uma instncia de valores de X determina ou identifica univocamente uma instncia de valores dos atributos Y.(este conceito vai ser utilizado para estabelecer a 2 FN, a 3 FN e a Boyce-Codd FN). Multivalor numa relao R(X,Y,Z) diz-se que existe uma dependncia multivalor X? Y (X multidetermina Y) se, para cada par de tuplos de R contendo os mesmos valores de X tambm existe em R um par de tuplos correspondentes troca de Y no par original ( com base nesta dependncia que se desenvolve a 4 FN). Juno- existe uma dependncia de juno se, dadas algumas projeces sobre essa relao, apenas se reconstro a relao inicial atravs de algumas junes bem especficas mas no de todas ( com base nesta dependncia que se desenvolve a 5 FN).

Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 2 Forma Normal


Uma relao na 2FN uma relao em que todos os atributos no pertencentes a qualquer chave candidata, devem depender da totalidade da chave.
Retomando o exemplo verificamos que na relao Consulta existem duas dependncias funcionais: Consulta(cod_med,data,hora,n_ben,paciente,idade,morada,cod_post,localidade, preo) cod_med,data,hora,n_ben? preo n_ben ? paciente,idade,morada,cod_post,localidade

Esta ultima dependncia est em desacordo com definio da 2FN.


Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 2 Forma Normal


A soluo passa por decompor a relao de acordo com as dependncias funcionais anteriores:
Consulta(cod_med,data,hora,n_bem,preo) Paciente(n_ben ,paciente,idade,morada,cod_post,localidade)

O problema detectado est agora resolvido, a base de dados est na 2 FN.

Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 3 Forma Normal


Uma relao na 3FN uma relao em que no existem dependncias funcionais entre atributos no chave ( dependncias transitivas).
Retomando o exemplo verificamos que na relao Mdicos existem duas dependncias funcionais: Mdico:(cod_med,nome,morada,contacto,idade, cod_esp,especialidade,preo) cod_med ? nome,morada,contacto,idade, cod_esp cod_esp ? especialidade,preo

Esta ultima dependncia est em desacordo com definio da 3FN.


Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 3 Forma Normal


A soluo passa por decompor a relao de acordo com as dependncias funcionais anteriores:
Medicos(cod_med , nome,morada,contacto,idade, cod_esp ) Especialidades(cod_esp, especialidade,preo )

na relao Pacientes existem duas dependncias funcionais: Paciente(n_ben ,paciente,idade,morada,cod_post,localidade) n_ben ? paciente,idade,morada,cod_pos cod_post ? localidade
Bases de Dados

Bases de Dados - O Modelo Relacional

Normalizao: 3 Forma Normal


A soluo passa novamente por decompor a relao de acordo com as dependncias funcionais anteriores:
Pacientes(n_ben ,paciente,idade,morada,cod_post) Cod_Postal(cod_post,localidade)

Os problemas detectados esto agora resolvidos, a base de dados est na 3 FN.

Bases de Dados

Exemplo - Clnica

Bases de Dados

Exemplo - Clnica
A - Com base na informao apresentada na figura anterior, apresente o esquema conceptual a que obedece a base de dados, indicando a estrutura de cada tabela em termos dos seus atributos (identificador, tipo e tamanho), chaves e relacionamentos. Indique e justifique se a informao est normalizada.
Bases de Dados

10

Exemplo Clnica - Exerccios


1. 2. 3. 4. 5. 6. 7. 8. Qual o nome dos mdicos com mais de 10 anos de servio. Indique o nome dos mdicos e respectiva especialidade Qual o nome e morada dos pacientes residentes em Braga. Qual o nome dos mdicos da especialidade de oftalmologia. Quais os mdicos com mais de 40 anos com a especialidade de Clnica Geral. Quais os mdicos de Oftalmologia que consultaram pacientes de Braga. Quais os mdicos com mais de 50 anos que deram consultas de tarde a pacientes com menos de 20 anos. Quais os pacientes com mais de 10 anos que nunca foram consultados a Oftalmologia.

Bases de Dados

Exemplo Clnica - Exerccios


9. 10. 11. 12. 13. 14. 15. Quais as especialidades consultadas no ms de Janeiro de 2002. Qual o nome dos mdicos com mais de 30 anos ou menos de 5 anos de servio. Quais os mdicos de Clnica Geral que no consultaram em Janeiro de 2002. Quais os pacientes que j foram consultados por todos os mdicos. Quais as especialidades que no foram consultadas durante os meses de Janeiro e Maro de 2002. Quais os mdicos que nunca consultaram pacientes de Braga. Quais os pacientes que s foram consultados a Clnica Geral.

Bases de Dados

11

Exemplo Um Banco
clientes(cc,cl,pr,lo) cc lo contas(nc,tc,cc,ca,sa) cc cc emprestimos(ne,cc,ca,va) ca ca ca agencias(ca,ag,lo)

Bases de Dados

1. Quais os clientes deste banco? SELECT cc, cl FROM clientes SELECT * FROM clientes

2. Quais os clientes que residem em Braga? SELECT * FROM clientes WHERE lo = BRAGA SELECT * FROM clientes WHERE lo like %BRAGA%

3. Quais os clientes com conta(s) na agncia ca = 123? SELECT DISTINCT cc FROM contas WHERE ca = 123 SELECT cc,cl FROM clientes c WHERE EXISTS (SELECT * FROM contas co WHERE co.cc = c.cc and co.ca = 123)
Bases de Dados

SELECT DISTINCT c.* FROM contas co,clientes c WHERE c.cc = co.cc and co.ca = 123

12

4. Quais os clientes que residem na mesma localidade das agncias? SELECT DISTINCT clientes.* FROM clientes,agencias WHERE clientes.lo = agencias.lo

SELECT DISTINCT c.* FROM clientes c,agencias a WHERE c.lo = a.lo 5. Quais os clientes com emprstimos de valor superior a 500000 ? SELECT DISTINCT c.* FROM clientes c,emprestimos e WHERE c.cc = e.cc AND e.va > 500000 6. Quais os nomes dos clientes com a mesma profisso que o cliente cc=1234? SELECT DISTINCT c1.cl FROM clientes c1,clientes c2 WHERE c1.pr = c2.pr AND c2.cc = 1234 7. Listar as contas da agncia (ca=123) por ordem decrescente do valor do seu saldo? SELECT DISTINCT co.* FROM contas co WHERE co.ca = 123 ORDER BY sa DESC 8. Quantas contas existem em todas as agncias do banco? SELECT count(*) FROM contas
Bases de Dados

9. Quantos clientes possuem conta(s) na agncia ca=123? SELECT count(distinct cc) FROM contas WHERE ca = 123

10. Listar o nmero de contas existentes em cada agncia? SELECT ca, count(*) FROM contas GROUP BY ca

11. Para cada agncia com menos de 1000 contas, listar os valores mximos e mnimos dos saldos dessas contas, assim como o saldo mdio.

SELECT ca, max(sa), min(sa),avg(sa) FROM contas GROUP BY ca HAVING count(*) < 1000

Bases de Dados

13

12. Quais os clientes cuja profisso desconhecida? SELECT * FROM clientes WHERE pr is null

13. Quais os clientes da agncia ca = 123?

SELECT DISTINCT c.* FROM clientes c, contas co WHERE co.ca = 123 AND co.cc = c.cc UNION SELECT DISTINCT c.* FROM clientes c, emprestimos e WHERE e.ca = 123 AND e.cc = c.cc

SELECT DISTINCT c.* FROM clientes c, contas co, emprestimos e WHERE (co.ca = 123 AND co.cc = c.cc) OR (e.ca = 123 AND e.cc = c.cc)

Bases de Dados

14. Quais os clientes que so simultaneamente depositantes e devedores na agncia ca = 123? SELECT DISTINCT c.* FROM clientes c, contas co WHERE co.ca = 123 AND co.cc = c.cc INTERSECT SELECT DISTINCT c.* FROM clientes c, emprestimos e WHERE e.ca = 123 AND e.cc = c.cc 15. Quais os clientes que so apenas depositantes na agncia ca = 123? SELECT DISTINCT c.* FROM clientes c, contas co WHERE co.ca = 123 AND co.cc = c.cc EXCEPT SELECT DISTINCT c.* FROM clientes c, emprestimos e WHERE e.ca = 123 AND e.cc = c.cc

SELECT DISTINCT c.* FROM clientes c, contas co, emprestimos e WHERE (co.ca = 123 AND co.cc = c.cc) AND (e.ca = 123 AND e.cc = c.cc)

SELECT DISTINCT c.* FROM clientes c, contas co, emprestimos e WHERE (co.ca = 123 AND co.cc = c.cc) AND NOT (e.ca = 123 AND e.cc = c.cc)

Bases de Dados

14

16. Quais os clientes com, pelo menos, um emprstimo no banco? SELECT c.* FROM clientes c WHERE EXISTS (SELECT * FROM emprestimos e where e.cc = c.cc) 17. Quais as agncias com depositantes residentes em Lisboa?

SELECT ag.* FROM agencias ag WHERE ag.ca IN (SELECT ca FROM clientes, contas where lo = Lisboa and contas.cc = clientes.cc) 18. Quais os clientes cujo saldo total das suas contas superior a qualquer emprstimo contrado neste banco?

SELECT c.* FROM clientes c WHERE (SELECT sum(sa) FROM contas co WHERE c.cc = co.cc) > (SELECT max(va) FROM emprestimos)

Bases de Dados

19. Quais os clientes que possuem contas em todas as agncias do Porto?

SELECT c.* FROM clientes c WHERE (SELECT count(DISTINCT co.ca) FROM contas co, agencias ag WHERE co.cc = c.cc AND co.ca = ag.ca AND ag.lo = PORTO) = (SELECT count(*) FROM agencias WHERE lo = PORTO)

SELECT c.* FROM clientes c WHERE NOT EXISTS (SELECT * FROM agencias ag WHERE ag.lo = PORTO AND NOT EXISTS (SELECT * FROM contas co WHERE co.cc = c.cc AND co.ca = ag.ca)) 20. Para cada cliente apresentar o seu saldo total. SELECT cc,sum(sa) FROM contas GROUP BY cc

SELECT c.cc,c.cl,(SELECT sum(sa) FROM contas co where co.cc = c.cc) FROM clientes c
Bases de Dados

15

O Comando INSERT
INSERT INTO cl VALUES (1234,Silva,Estudante,Braga) INSERT INTO cl(cc,cl,lo,pr) VALUES (1234,Silva,Braga,Estudante)

INSERT INTO cl(cc,cl,lo) VALUES (1234,Silva,Braga) INSERT INTO contas_prazo (nc,sa) SELECT nc,as FROM contas WHERE as < 15000

Bases de Dados

A Linguagem SQL
SQL uma linguagem usada para comunicar com bases de dados. De acordo com a ANSI (American National Standards Institute) a linguagem standard para os sistemas de gesto de bases de dados relacionais. Os comandos da SQL so usados para realizar operaes tais como alterar / actualizar dados numa base de dados, ou responder a questes a partir da informa o armazenada numa base de dados. Os seguintes motores de bases de dados usam SQL: Oracle, Informix, DB2, Sybase, Microsoft SQL Server, Access, Ingres, etc. A maior parte dos sistemas gestores de bases de dados usam SQL mas tm as suas prprias extenses ao SQL. No entanto os comandos standard da SQL tais como "SELECT", "INSERT", "UPDATE", "DELETE", "CREATE" e "DROP" podem ser usados para fazer a maioria das operaes necessrias numa base de dados.
Bases de Dados

16

Objectos duma Base de Dados Relacional


Um sistema de bases de dados relacionais contm um ou mais objectos chamados tabelas. Os dados ou informao so armazenados nessas tabelas. As tabelas so apenas identificadas pelo nome e contm colunas e linhas. As colunas contm o nome da coluna, o tipo de dado, e qualquer outro atributo para a coluna. As linhas contm os registos ou dados para as colunas.

Bases de Dados

Bases de Dados

17

Codigo

Designao MAQ SYSTEM 3 ANOS GARANTIA MAQ OEM 1 ANO GARANTIA FONTE DE ALIMENTAO 200W CAMARA GENIUS USB COOLER DRIVE IOMEGA ZIP 100 MB IDE KIT-CDR PHILIPS PCRW804K 32X8X HUB GENIUS 8XRJ45 GREEN 100M G HUB DLINK SWITCHING 8 PORTAS RAM 128MB SDRAM MCT PC133 RAM 64MB SDRAM MCT PC133 BOARD EPOX MVP3C2 ATA 66 PL-REDE GENIUS ETHERNET GF100T PL-REDE GENIUS ETHERNET GF100T PLREDE GENIUS PCMCIA MF300 10/ RATO GENIUS OPTICAL PS2 RATO GENIUS NETSCROLL USB RATO HIMAC BLUE PS2 SOFTWARE MSOFFICE 2000 PRO OEM UPS MGE ELLIPSE 300 IMPRESSORA HP LASERJET 1100 IMPRESSORA HP LASERJET 2100 IMPRESSORADados Bases de HP DESKJET 640C

Civa Qtd 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1

Preo 247000 77100 3750 14900 1100 16500 27500 20700 35270 14300 5850 16025 2530 3000 15000 4000 2295 800 85000 14700 87100 147800 15265

Exemplo

01001 01002 10002 22003 27002 28002 32001 34001 34003 35001 35002 37005 38001 38001 38002 44002 44004 44005 46001 49001 70001 70002 70004

UNIO

INTERSECO

DIFERENA

Bases de Dados

18

PRODUTO CARTESIANO

PROJECO

SELECO

JUNO

Bases de Dados

DIVISO

Bases de Dados

19

As Doze Regras de Codd


1) 2) 3) 4) 5) Numa base de dados relacional, todos os dados, incluindo o prprio dicionrio de dados, so representados de uma s forma, em tabelas bidimensionais. Cada elemento de dados fica bem determinado pela combinao do nome da tabela onde est armazenado, valor da chave primria e respectiva coluna (atributo). Os valores nulos so suportados para representar informao no disponvel ou no aplicvel, independentemente do domnio dos respectivos atributos. Os metadados so representados e acedidos da mesma forma que os prprios dados. Apesar de um sistema relacional poder suportar vrias linguagens, dever existir pelo menos uma linguagem com as seguintes caractersticas: 6) Manipulao de dados, com possibilidade de utilizao interactiva ou em programas de aplicao. Definio de dados. Definio de views. Definio de restries de integridade. Definio de acessos (autorizaes). Manipulao de transaces (commit, rollback, etc.).

Numa view, todos os dados actualizveis que forem modificados, devem ver essas modificaes traduzidas nas tabelas base.
Bases de Dados

7)

H a capacidade de tratar uma tabela (base ou virtual) como se fosse um simples operando (ou seja, utilizao de uma linguagem set -oriented), tanto em operaes de consulta como de actualizao.

8) Alteraes na organizao fsica dos ficheiros da base de dados ou nos mtodos de acesso a esses ficheiros (nvel interno) no devem afectar o nvel conceptual independncia fsica. 9) Alteraes no esquema da base de dados (nvel conceptual), que no envolvam remoes de elementos, no devem afectar o nvel externo independncia lgica. 10) As restries de integridade devem poder ser especificadas numa linguagem relacional, independentemente dos programas de aplicao, e armazenadas no dicionrio de dados. 11) O facto de uma base de dados estar centralizada numa mquina, ou distribuda por vrias mquinas, no deve repercutir-se ao nvel da manipulao de dados. 12) Se existir no sistema uma linguagem de mais baixo nvel (tipo record-oriented), ela no dever permitir ultrapassar as restries de integridade e segurana.

No existe nenhuma implementao do modelo relacional que, luz das doze regras de Codd, possa ser considerada completamente relacional.

Bases de Dados

20

O Comando SELECT
O comando SELECT usado para interrogar a base de dados e recuperar os dados selecionados e que verificam as condies especificadas. SELECT "coluna1"[,"coluna2",etc] FROM "nometabela" [WHERE "condio"]; [ ] = opcional * Os nomes das colunas que seguem a palavra SELECT determinam as colunas a apresentar como resultado. Pode-se selecionar
um n mero varivel de colunas ou usar um metacaracter * para selecionar todas as colunas. *O nome da tabela aps a palavra FROM especifica a tabela a interrogar. *A clasula WHERE (opcional) especifica que valores ou linhas devem ser apresentados, baseando -se na condio descrita aps a palavra WHERE. Bases de Dados

Operadores
Os seguintes operadores podem ser numa clasula WHERE : = Igual > Maior que < Menor que >= Maior ou igual <= Menor ou igual <> Diferente LIKE
Bases de Dados

21

LIKE
Like um operador muito verstil que permite selecionar todas as linhas que so parecidas com uma dada sequncia. O smbolo de percentagem "%" pode ser usado como um metacaracter que substitu qualquer sequncia de caracteres. SELECT primeiro, ltimo, localidade FROM empregado WHERE primeiro LIKE 'Er%';
O comando seleciona qualquer atribudo primeiro que comece por Er. Os valores de strings devem estar entre .

Bases de Dados

LIKE
SELECT primeiro, ltimo FROM empregado WHERE ltimo LIKE '%s'; O comando seleciona qualquer atribudo primeiro que termine com s. SELECT * FROM empregado WHERE primeiro = 'Eric'; Este comando apenas seleciona a linha cuja atributo primeiro igual a Eric.

Bases de Dados

22

EXEMPLO
SELECT primeiro, ltimo, localidade FROM empregado; SELECT ltimo, localidade, idade FROM empregado WHERE idade > 30; SELECT primeiro, ltimo, localidade, estado FROM empregado WHERE primeiro LIKE 'J%'; SELECT * FROM empregado; SELECT primeiro, ltimo, FROM empregado WHERE ltimo LIKE '%s'; SELECT primeiro, ltimo, idade FROM empregado WHERE ltimo LIKE '%illia%'; SELECT * FROM empregado WHERE primeiro = 'Eric';
Bases de Dados

O Comando CREATE TABLE


O comando CREATE TABLE : CREATE TABLE "nometabela" ("coluna1" "data type", "coluna2" "data type", "coluna3" "data type"); no caso de usar restries opcionais: CREATE TABLE "nometabela" ("coluna1" "data type" [restrio], "coluna2" "data type" [restrio], "coluna3" "data type" [restrio]); [ ] = opcional

Exemplo:
CREATE TABLE empregado (primeiro varchar(15), ltimo varchar(20), idade nmero(3), morada varchar(30), localidade varchar(20), estado varchar(20));

Bases de Dados

23

Tipos de Dados
Os tipos de dados especificam o tipo dos valores a armazenar num coluna. Se uma coluna a chamada "ltimo_Nome" vai suportar nomes, ento o tipo deve ser "varchar" (caracter de comprimento varivel). char(tamanho) : String de comprimento fixo. O tamanho esta especificado entre parnteses. Max 255 bytes . varchar(tamanho) : String de comprimento varivel. O tamanho m ximo est especificado entre parnteses. nmero(tamanho) : Valor numrico inteiro com um nmero mximo de d gitos tamanho data : Valor de data nmero(tamanho,d) : Valor numrico com um nmero mximo de d gitos tamanho e um nmero n mximo de casas decimais d.
Bases de Dados

Restries
Quando as tabelas so criadas, normal associar a uma ou mais colunas algumas restries. Uma restrio basicamente uma regra associada a uma coluna que deve ser respeitada por todos os dados que forem armazenados nessa coluna. Por exemplo, a restrio "unique" especifica que no possvel dois registos diferentes terem essa coluna com o mesmo valor. As outras duas restries mais populares so o "not null" que especifica que uma coluna no pode ter o valor nulo, e "primary key". A restrio "primary key" define uma identificao nica para cada registo.
Bases de Dados

24

O Comando INSERT
O comando INSERT usado para inserir ou adicionar dados a uma tabela. INSERT INTO "nometabela" [(primeira_coluna,...ltima_coluna)] VALUES (primeira_valor,...ltima_valor); [ ] = opcional Exemplo : INSERT INTO empregado (primeiro, ltimo, idade, morada, localidade, estado) VALUES ('Luke', 'Duke', 45, '2130 Boars Nest', 'Hazard Co', 'Georgia');

Bases de Dados

Exerccio
A tabela empregado dever conter agora a seguinte informao: Primeiro nome ltimo nome Cargo Idade Vencimento Inserir os dados seguintes na tabela empregado: Joana, Weber, Secret ria, 28, 19500.00 Pedro, Weber, Programador, 32, 45300.00 Daniel,Smith, Programador II, 45, 75020.00
Construa atravs do comando SELECT as seguintes interrogaes: 1. Todas as colunas para todos os registos de empregado. 2. Todas as colunas dos empregados que ganham mais de 30000. 3. O primeiro e ltimo nome dos empregados com menos de 30 anos de idade. 4. O primeiro e ltimo nome, assim como o salrio, dos empregados com o t tulo de "Programador". 5. Todas as colunas dos empregados cujo ltimo nome contm a sequncia ebe. 6. O ltimo nome de todos aqueles cujo primeiro nome Potsy. 7. Todas as colunas para aqueles que tm mais de 80 anos. 8. Todas as colunas para aqueles cujo ltimo nome termina com "ith".

Inserir mais cinco registos escolha.

Bases de Dados

25

O Comando UPDATE
O comando UPDATE usado para actualizar registos: UPDATE "nometabela" SET "nomecoluna " = "novovalor "[,"proxcoluna" = "novovalor2"...] WHERE "nomecoluna " OPERADOR "valor" [and|or "coluna" OPERADOR "valor"]; [ ] = opcional 1. Joana Weber casou-se com Bob Williams . O seu ltimo nome Exemplos: mudou para Weber-Williams . 2. Daniel Smith faz anos hoje. Vai ficar um ano mais velho. UPDATE phone_book 3. Todas as secretrias sero agora intituladas Assistentes SET area_code = 623 Administrativas". WHERE prefix = 979; 4. Todos aqueles que ganham menos de 30000 vo ter um aumento de 3500. UPDATE phone_book 5. Todos aqueles que ganham mais de 33500 iro ter um aumento SET ltimo_nome = 'Smith', prefix=555, suffix=9292 de 4500. WHERE ltimo_nome = 'Jones'; 6. Todos aqueles que auferem o ttulo de "Programador II" vo ser promovidos a "Programador III". UPDATE empregado 7. Todos aqueles que auferem o ttulo de "Programador" vo ser SET idade = idade+1 promovidos a "Programador II".
WHERE primeiro_nome='Mary' and ltimo_nome='Williams';

Bases de Dados

O Comando DELETE
O comando DELETE usado para apagar / eliminar registos: DELETE FROM "nometabela " WHERE "nomecoluna" OPERADOR "valor" [and|o r "coluna" OPERADOR "valor"]; [ ] = opcional Exemplos: DELETE FROM empregado; 1. Nota: todos os registos so removidos! DELETE FROM empregado WHERE ltimonome = 'May'; 2. A Joana Weber-Williamsfoi embora; tempo de poupar. Os empregados que ganham mais de 7000 vo ser despedidos Exerccio (use o comando SELECT para verificar as eliminaes):

DELETE FROM empregado WHERE primeironome = 'Mike' or primeironome = 'Eric';


Bases de Dados

26

O Comando DROP TABLE


O comando DROP TABLE usado para remover a tabela e a respectiva informao: DROP TABLE "nometabela" Exemplo : DROP TABLE empregado; Exerccio: Elimine a tabela empregado.

Bases de Dados

O comando SELECT (conceitos avanados)


O comando SELECT tem a seguinte sintaxe: SELECT [ALL | DISTINCT] coluna1[,coluna2] FROM table1[,table2] [WHERE "condies"] [[GROUP BY "coluna-lista"] [HAVING "condies]] [ORDER BY "coluna-lista" [ASC | DESC] ] As palavras reservadas ALL e DISTINCT so usadas para SELEC(T)ionar todos (ALL) ou os valores sem repeties. Por exemplo: SELECT DISTINCT idade FROM empregado_info;

Bases de Dados

27

Funes de Agregao
MIN MAX AVG retorna o valor mais pequeno duma dada coluna retorna o valor maior duma dada coluna Retorna a mdia de todos os valores numricos duma coluna Retorna a cardinalidade do conjunto de todos os registos Retorna a c tabela ardinalidade da
SELECT AVG(Vencimento) FROM empregado; SELECT AVG(Vencimento) FROM empregado WHERE Cargo = 'Programmer'; SELECT Count(*) FROM empregados;

COUNT

COUNT(*)

Bases de Dados

GROUP BY
SELECT coluna-1ista, SUM(coluna2) FROM "lista-de-tabelas" GROUP BY "coluna-lista"; SELECT max(Vencimento), dept FROM empregado GROUP BY dept; SELECT quantidade, max(preo) FROM artigos_encomendados GROUP BY quantidade;

Bases de Dados

28

HAVING
SELECT coluna1, SUM(coluna2) FROM "lista-de-tabelas" GROUP BY "colunal" HAVING "condio"; SELECT dept, avg(Vencimento) FROM empregado GROUP BY dept; SELECT dept, avg(Vencimento) FROM empregado GROUP BY dept HAVING avg(Vencimento) > 20000;
Bases de Dados

ORDER BY
Exemplo: SELECT empregado_id, dept, nome, idade, Vencimento FROM empregado_info WHERE dept = 'Sales' ORDER BY vencimento; SELECT empregado_id, dept, nome, idade, Vencimento FROM empregado_info WHERE dept = 'Sales' ORDER BY vencimento, idade DESC; SELECT coluna1, SUM(coluna2) FROM "lista-de-tabelas" ORDER BY "coluna-lista" [ASC | DESC]; [ ] = opcional ASC = Ordem ascendente - defeito DESC = Ordem descendente

Bases de Dados

29

Condies e Operadores Lgicos


Exemplo : SELECT coluna1, SELECT empregadoid, primeironome , ltimonome, Cargo, SUM(coluna2) Vencimento FROM "lista-de-tabelas" FROM empregado_info WHERE "condio1" WHERE vencimento >= 50000.00 AND cargo = 'Programador'; AND "condio2"; SELECT empregadoid, primeironome , ltimonome, cargo, vencimento FROM empregado_info WHERE (vencimento >= 50000.00) AND (cargo = 'Programador'); SELECT primeironome, ltimonome, Cargo, vencimento FROM empregado_info WHERE (cargo = Vendas') OR (cargo = 'Programador');
Bases de Dados

IN e BETWEEN

Exemplo:

SELECT empregadoid, ltimonome, Vencimento FROM empregado_info WHERE ltimonome IN ('Hernandez', 'Jones', 'Roberts', 'Ruiz');

SELECT coluna1, SUM(coluna2) FROM "lista-de-tabelas WHERE coluna3 IN (listade-valores); SELECT coluna1, SUM(coluna2) FROM "lista-de-tabelas WHERE coluna3 BETWEEN valor1 AND valor2;

SELECT empregadoid, ltimonome, Vencimento FROM empregado_info WHERE ltimonome = 'Hernandez' OR ltimonome = 'Jones' OR ltimonome = 'Roberts' OR ltimonome = 'Ruiz'; SELECT empregadoid, idade, ltimonome, Vencimento FROM empregado_info WHERE idade BETWEEN 30 AND 40; SELECT empregadoid, idade, ltimonome, Vencimento FROM empregado_info WHERE idade >= 30 AND idade <= 40;

Bases de Dados

30

FUNES
ABS(x) retorna o valor absoluto de x retorna o sinal de x (-1, 0, ou 1) (negativo, zero, ou positivo) mdulo - retorna o resto da diviso inteira de x por ( x%y) returna o maior inteito que menor ou igual a x or returna o menor inteiro que maior ou igual a x returna o valor de x elevado potncia de y returna o valor de x arredonda ao inteiro mais prximo Retorna o valor de x arredondado o nmero com d casas decimais mais prximo Retorna a raz quadrada de x
Bases de Dados

+ * / %

Adio Subtrao Multiplicao Diviso M dulo

SIGN(x) MOD(x,y) FLOOR(x) CEILING(x) CEIL(x) POWER(x,y) ROUND(x) ROUND(x,d) SQRT(x)

EXEMPLO
SELECT round(vencimento), primeironome FROM empregado_info

Este comando seleciona o vencimento arredondado ao inteiro mais prximo e o primeironome do empregado.

Bases de Dados

31

JUNO - Introduo
Todas as questes colocadas at agora tem uma ligeira limitao. O comando SELECT aplica-se a apenas uma tabela. tempo de introduzir agora uma das caractersticas mais importantes das bases de dados relacionais o join, o operador que torna os sistemas de bases de dados relacionais relacionais. As junes permitem ligar dados de duas ou mais tabelas, de forma a obter uma nica tabela como resultado. Uma juno reconhece-se num SELECT que houver mais de uma tabela referida na clusula FROM. Exemplo: SELECT "lista-de-colunas" FROM table1,table2 WHERE "conditio(es)_pesquisa"
Bases de Dados

JUNO
As junes podem ser explicadas facilmente demonstrando o que aconteceria se se trabalhasse apenas com uma tabela, e no houvesse a possibilidade de fazer junes. Essa table singular tambm chamada tabela plana. Essa tabela teria armazenada, na mesma linha, a informao sobre clientes e encomendas.

id

primeiro

ltimo

morada

localidade

estado

codpostal

data

artigo
preo

Sempre que uma nova linha fosse adicionada tabela, todas as colunas seriam alteradas, o que resultaria naturalmente em dados redundantes desnecessrios.
Bases de Dados

32

id

primeiro

ltimo

morada

localidade

estado

codpostal

data

artigo

preo

10982

Wolfgang

Schultz

300 N. 1st Ave

Yuma

AZ

85002

032299

snowboard

45.00

10982

Wolfgang

Schultz

300 N. 1st Ave

Yuma

AZ

85002

082899

snow shovel

35.00

10982

Wolfgang

Schultz

300 N. 1st Ave

Yuma

AZ

85002

091199

gloves

15.00

10982

Wolfgang

Schultz

300 N. 1st Ave

Yuma

AZ

85002

100999

lantern

35.00

10982

Wolfgang

Schultz

300 N. 1st Ave

Yuma

AZ

85002

022900

tent

85.00

Bases de Dados

Uma base de dados normalizada teria duas tabelas: ? Uma para guardar a informao sobre os clientes ? E outra para guardar a informao sobre o que compram: Tabela "clientes":

cliente_nmero

primeironome

ltimonome

morada

localidade

estado

codpostal

Tabela vendas:
cliente_nmero data artigo preo

Bases de Dados

33

Agora, sempre que um cliente j registado efectuar uma compra, apenas a segunda tabela vendas necessita de ser actualizada. Os dados redundantes foram assim eliminados e a base de dados est normalizada. Nota-se que ambas as tabelas tem uma coluna comum "cliente_nmero" coluna. Essa coluna, contem o nmero nico do cliente ser usada para juntar as duas tabelas. Usando as duas tabelas, se se quiser saber o nome dos clientes e os artigos que compraram, o seguinte comando pode resolver essa questo: SELECT cliente_info.primeironome, cliente_info.ltimonome, vendas.artigo FROM cliente_info, vendas WHERE cliente_info.cliente_nmero = vendas.cliente_nmero; Esta jun o particular conhecida por "Inner Join" ou "Equijoin ". o tipo mais conhecida de juno. Nota-se que o identificador de cada coluna precedido pelo nome da tabela e um ponto. No obrigat rio, mas um bom hbito faz-lo para que em caso de ambiguidade se saiba o significado das colunas e a que tabelas elas pertencem. Por exemplo obrigatrio quando as colunas comum tm o mesmo nome. SELECT cliente_info.primeironome, cliente_info.ltimonome, vendas.artigo FROM cliente_info INNER JOIN vendas ON cliente_info.cliente_nmero = vendas.cliente_nmero;

Bases de Dados

Outro exemplo :

SELECT empregado_info.empregadoid, empregado_info.ltimonome, empregado_vendas.comisso FROM empregado_info, empregado_vendas WHERE empregado_info.empregadoid = empregado_vendas.empregadoid;

Bases de Dados

34

ALTER TABLE <TABLE NAME> ADD|DROP|MODIFY (COLUMN SPECIFICATION[S]...ver Create Table ); --permite adicionar, modificar ou apagar colunas de uma tabela, assim como alterar o seu tipo; este comando pode ter alterar a especificao fsica de uma tabela (i.e., a forma de armazenamento dos dados da tabela COMMIT; -- torna as actualizaes permanentes (desde o ltimo COMMIT ver transaces) CREATE [UNIQUE] INDEX <INDEX NAME> ON <TABLE NAME> (<COLUMN LIST>); --UNIQUE opcional.

Bases de Dados

CREATE TABLE <TABLE NAME> (<COLUMN NAME> <DATA TYPE> [(<SIZE>)] <COLUMN CONSTRAINT>, ...,outras colunas); (tambm aplicvel a ALTER TABLE) -- onde SIZE para ser usado apenas para alguns tipos de dado, e constraints considera as seguintes possibilidades (automaticamente garantidas pelo SGBD; a falha causa um erro): NULL ou NOT NULL UNIQUE garante que em duas linhas diferentes o atributo no pode ter o mesmo valor PRIMARY KEY define a chave principal CHECK permite que uma restrio seja definida; por exemplo, CHECK (PRICE > 0) faz com que o sistema verifique se a coluna Price sempre maior que 0 DEFAULT insere um valor por omisso quando o valor da coluna no referido durante o comando INSERT; por exrmple, BENEFITS INTEGER DEFAULT = 10000 FOREIGN KEY define uma chave estrangeira e acompanhada de REFERENCES <TABLE NAME> (<COLUMN NAME>), que liga a chave estrangeira chave de outra tabela.

Bases de Dados

35

CREATE VIEW <TABLE NAME> AS <QUERY>; DELETE FROM <TABLE NAME> WHERE <CONDITION>; INSERT INTO <TABLE NAME> [(<COLUMN LIST>)] VALUES (<VALUE LIST>); ROLLBACK; --Recupera o estado anterior a uma sequncia de comandos desde o ltimo COMMIT. Quando o SGBD usa o chamada automatic committing o ROLLBACK no funciona. SELECT[DISTINCT|ALL] <LIST OF COLUMNS, FUNCTIONS, CONSTANTS, ETC.> FROM <LIST OF TABLES OR VIEWS> [WHERE <CONDITION(S)>] [GROUP BY <GROUPING COLUMN(S)>] [HAVING <CONDITION>] [ORDER BY <ORDERING COLUMN(S)> [ASC|DESC]]; --onde ASC|DESC permite a ordenao por order crescente e decresecente, respectivamente UPDATE <TABLE NAME> SET <COLUMN NAME> = <VALUE> [WHERE <CONDITION>]; -- se a clasula WHERE no for referida, TODAS as linhas sero modificadas em funo do comando UPDATE

Bases de Dados

36

You might also like