Professional Documents
Culture Documents
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
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
Conceitos Bsicos:
Bases de Dados
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
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
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
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
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
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
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
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
Bases de Dados
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
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
Bases de Dados
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
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
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
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
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
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".
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):
26
Bases de Dados
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
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
+ * / %
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
Yuma
AZ
85002
032299
snowboard
45.00
10982
Wolfgang
Schultz
Yuma
AZ
85002
082899
snow shovel
35.00
10982
Wolfgang
Schultz
Yuma
AZ
85002
091199
gloves
15.00
10982
Wolfgang
Schultz
Yuma
AZ
85002
100999
lantern
35.00
10982
Wolfgang
Schultz
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