Você está na página 1de 22

Exemplos de triggers (cont) o do sal 2. Alterac a ario de um ou mais empregados 3. Mudanc a de empregados de um departamento para outro.

R2: CREATE TRIGGER TotalSal2 AFTER UPDATE OF Salario ON Empregado FOR EACH ROW WHEN (NEW.Ndep IS NOT NULL) UPDATE Departamento SET TotalSal=TotalSal+NEW.Salario-OLD.Salario WHERE Dnum=NEW.Ndep; R3: CREATE TRIGGER TotalSal3 AFTER UPDATE OF Ndep ON Empregado FOR EACH ROW BEGIN UPDATE Departamento SET TotalSal=TotalSal+NEW.Salario WHERE Dnum=NEW.Ndep; UPDATE Departamento SET TotalSal=TotalSal-OLD.Salario WHERE Dnum=OLD.Ndep; END;
42

Exemplos de triggers (cont) 4. Remover um ou mais empregados.


R4: CREATE TRIGGER TotalSal4 AFTER DELETE ON Empregado FOR EACH ROW WHEN (OLD.Ndep IS NOT NULL) UPDATE Departamento SET TotalSal=TotalSal-OLD.Salario WHERE Dnum=OLD.Ndep;

43

Triggers (cont.)

o da acc o pode ser condicionada: A execuc a a


o WHEN e testada depois do evento-de-disparo. AFTER a condic a o WHEN e testada antes do evento-de-disparo. BEFORE a condic a o e executada se a condic o WHEN se verica e o evento-de-disparo n INSTEAD OF a acc a a ao executado. e

Eventos-de-disparo: UPDATE, INSERT, DELETE.

FOR EACH ROW

especica que a regra vai ser disparada uma vez por cada linha (tuplo) afectada pelo evento-de-disparo.

CREATE TRIGGER nome_trigger (AFTER|BEFORE) trigger-eventos ON nome-tabela [FOR EACH ROW] [WHEN condic ao] trigger-acc ao; <-- PL/SQL trigger-evento = INSERT|DELETE|UPDATE [OF atributos]

40

Exemplos de triggers es: Suponha que temos as relac o


Empregado(Nome, EBI, Salario, Ndep, SuperBI) Departamento(Dnome, Dnum, TotalSal, DirBI)

um atributo derivado e manter o seu valor actualizado pode ser feito TotalSal e o do valor atrav es de um trigger. Os eventos que podem determinar uma alterac a desse atributo s ao: 1. Inserir (um ou mais) novos empregados
R1: CREATE TRIGGER TotalSal1 AFTER INSERT ON Empregado FOR EACH ROW WHEN (NEW.Ndep IS NOT NULL) UPDATE Departamento SET TotalSal=TotalSal+NEW.Salario WHERE Dnum=NEW.Ndep;

41

es Asserc o es gen Permitem vericar condic o ericas: qualquer express ao que pode aparecer a seguir a WHERE.
CREATE ASSERTION nome CHECK (condic ao) o a ` BDs que leve a condic o a tomar o valor FALSO ser o tem Qualquer alterac a a a rejeitada. A condic a (obviamente) de dar um valor booleano. Exemplos:
o total de todos os lmes de um dado est 1- A durac a udio n ao deve exceder 10000 minutos.

CREATE ASSERTION TotDurac ao CHECK (10000 >=ALL (SELECT SUM(Durac ao) FROM Filme GROUP BY Est udio);
2- O sal ario de um empregado n ao pode ser maior do que o sal ario do director do departamento onde o empregado trabalha.

CREATE ASSERTION TectoSalario CHECK (NOT EXISTS (SELECT * FROM Empregado E, Empregado S, Departamento D WHERE E.Salario>S.Salario AND E.Ndep=D.Dnum AND D.DirBI=S.EBI));
38

Triggers (gatilhos) em SQL3

Baseiam-se em regras do tipo evento-condic a a o-acc o (ECA) es UPDATE, mas O evento que faz disparar o trigger. S ao normalmente operac o tamb em pode ser temporal. o deve ser executada. A condic a a o que determina se a acc A acc a o a tomar.

o pode ser executada antes, depois ou em vez do evento que a dispara. A acc a

Exemplo: Trigger para comparar o sal ario de um empregado com o do seu supervisor.
CREATE TRIGGER InformaSupervisor BEFORE INSERT OR UPDATE OF Salario, SuperBI ON Empregado FOR EACH ROW WHEN (NEW.Salario> (SELECT Salario FROM Empregado WHERE EBI=NEW.SuperBI)) Informa_Supervisor(New.SuperBI, New.EBI);

39

o de integridade referencial Manutenc a

es (INSERT) e actualizac es (UPDATE) na tabela referenciante (que cont s ao proibidas inserc o o em a chave-externa) que violem a integridade referencial.

es (DELETE) e actualizac es (UPDATE) na tabela referenciada (externa) que violem as eliminac o o o indicada: a integridade referencial s ao tratadas de acordo com a acc a es a ` tabela referenciante. CASCADE propaga as eliminac o SET NULL coloca valores nulos nos atributos referenciantes. SET DEFAULT coloca valores nulos nos atributos referenciantes. es ou eliminac es. por omiss ao: pro be essas actualizac o o

Exemplo: CREATE TABLE Estudio( nome CHAR(30) PRIMARY KEY, morada VARCHAR(80), presidente CHAR(9) REFERENCES Presidente(PBI) ON DELETE SET NULL, ON UPDATE CASCADE);

36

es sobre atributos Restric o Os valores permitidos para os atributos podem ser restringidos

es expressas na sua denic o atrav es de restric o a

es expressas num dom o. atrav es de restric o nio usado na sua denic a

o envolve o atributo cujos valores se quer restringir, CHECK condic ao a condic a ` condic o de uma clausula WHERE. mas pode assemelhar-se a a

sexo CHAR(1) CHECK (sexo IN (F,M)) presidente CHAR(9) CHECK (presidente IN (SELECT PBI FROM Presidente))

es de dom restric o nio:


CHECK (VALUE IN (F,M));

CREATE DOMAIN sexoDom CHAR(1) VALUE refere-se

a um valor do dom nio.


37

es na chave Restric o o da CREATE TABLE garante-se que operac es ao denir-se uma chave na denic a o o ou actualizac o satisfazem os requisitos de unicidade da chave. de inserc a a

CREATE TABLE Actor( nome CHAR(30) PRIMARY KEY, ... )

CREATE TABLE Filme( t tulo CHAR(30), ano CHAR(10), ... PRIMARY KEY (t tulo,ano));

pode-se proibir a exist encia de valores nulos para um dado atributo. Basta adicionar o do atributo na tabela. NOT NULL na denic a

CREATE TABLE Actor( nome CHAR(30) PRIMARY KEY, dNasc DATE NOT NULL, ... )

34

es de integridade referencial Restric o

Chaves-externas: os valores refereciados t em de existir.

` denic o do atributo: Se a chave externa for apenas um atributo, pode-se adicionar a a

REFERENCES

tabela ( atributo )

o FOREIGN KEY. Ou usar a denic a

Exemplo:

CREATE TABLE Participa( actor CHAR(30) REFERENCES Actor(nome), filme CHAR(50), ano CHAR(10), salario DECIMAL(9,2), FOREIGN KEY (filme,ano) REFERENCES Filme(t tulo,ano) );

35

Vis oes: exemplos Q32: Criar uma vis ao que contenha para cada departamento o nome, o n umero de empregados e o custo envolvido com sal arios nesse departamento.
CREATE VIEW DepStats (Dnome, Nemps, TotSalario) AS SELECT Dnome, COUNT(*), SUM(Salario) FROM Departamento, Empregado WHERE Dnum=Ndep <-- junc ao entre Departamento e Empregado GROUP BY Dnome;

o de tabelas diculta muito a Notar que o facto de uma vis ao incluir uma junc a o da vis o de actualizac o actualizac a ao pois seria d cil ver como fazer reectir a operac a a nas tabelas envolvidas.

32

Elementos activos em SQL

s ao express oes ou comandos, escritos uma vez e guardados na BDs, que se espera sejam executados quando determinados eventos ocorrerem.

es associadas a relac es que s o SQL2 permite indicar restric o o ao testadas sempre oes nessas relac es: que h a modicac a o es na chave restric o es de integridade referencial restric o es de dom restric o nio es gen asserc o ericas

o de gatilhos (triggers) O SQL3 permite a denic a

33

GROUP BY e HAVING: exemplos


Q31: Para todas as componentes cuja quantidade total fornecida for maior do que 300 (excluindo do igual ou inferior a 200), obtenha o nu mero da compototal todos os fornecimentos cuja quantidade e nente e a quantidade m axima fornecida dessa componente; ordene o resultado por ordem decrescente das quantidades m aximas. SELECT Cnr, MAX(Qtd) FROM FC WHERE Qtd>200 GROUP BY Cnr HAVING SUM(Qtd)>300 ORDER BY Qtd DESC

30

Vis oes em SQL: CREATE VIEW e DROP VIEW

uma tabela derivada de outras tabelas. uma vis ao (view) e

uma tabela virtual que pode n uma vis ao e ao existir sicamente em disco.

til para especicar uma tabela que agrupe informac o que precisamos de referu a o possa residir sicamente em enciar com frequ encia, pese embora a informac a outras tabelas.

o no acesso; mas a actualizac o levanta problemas... n ao tem limitac a a

uma vis ao est a sempre actualizada. Se modicarmos os tuplos nas tabelas de que es automaticamente (responsabilidade a vis ao depende, a vis ao v e essas alterac o do DBMS).
         ! " #   $ & '     (  $  )  '

Para denir uma vis ao: Para remover uma vis ao:

c
0

1 2

3 

 

 

31

Agrupamentos: GROUP BY e HAVING


GROUP BY: cria grupos de tuplos t.q. em cada grupo todos os tuplos t em o mesmo valor para o para aplicac o de func es de agregac o. atributo de agrupamento. Util a o a mero de componente e o total do fornecimento para Q28: Para cada componente fornecida, obter o nu essa componente. SELECT Cnr, SUM(Qtd) AS Total FROM FC GROUP BY Cnr Res: (Cnr,Total)=(C1,600),(C2,1000), (C3,400),(C4,500), (C5,500),(C6,100)

normalmente usada para restringir ou eliminar grupos; equivale a ` clausula WHERE mas HAVING: e associado aoGROUP BY. Q29: Obter os n umeros das componentes de todas as componentes fornecidas por mais do que um fornecedor. SELECT Cnr FROM FC GROUP BY Cnr HAVING COUNT(*)>1

<-- ficam os grupos que satisfazem esta condic ao


28

GROUP BY e HAVING: exemplos


mero do departamento e o n Q30: Para cada departamento com mais de 5 empregados, obter o nu umero de empregados com sal ario superior a 150 contos. SELECT Dnum, COUNT(*) FROM Deparatamento, Empregado WHERE Dnum=Ndep AND Salario > 150 AND Ndep IN (SELECT Ndep FROM Empregado GROUP BY Ndep HAVING COUNT(*)>5) GROUP BY Dnum;

es de agregac o aos atributos da clausuNote-se que tamb em podemos associar func o a la HAVING.

29

es de agregac o Func o a Em muitos casos pretende-se que no resultado de uma quest ao aparec am contagens, m edias, valores m aximos ou m nimos de determinados atributos. es de agregac o aparecem normalmente na clausula SELECT e associadas a As func o a um atributo:
& 4 2 5 6 & 5 8 8 9 8  6  @   ! " #   $  7 7 7 7 %

Q24: Obter o n umero total de empregados do departamento 5. Q25: Obter o total de sal arios de todos empregados, o sal ario m aximo e m nimo, e a m edia dos sal arios. Q24: SELECT COUNT(*) FROM Empregado WHERE Ndep=5 Q25: SELECT SUM(Salario), MAX(Salario), MIN(Salario), AVG(Salario) FROM Empregado

26

es de agregac o: exemplos Func o a


` categoria m Q26: Obtenha o n umero de fornecedores com categoria inferior a axima actual na tabela de fornecedores. Q24: SELECT COUNT(Fnum) FROM F WHERE Cat < (SELECT MAX(Cat) FROM F); maior ou igual a ` m Q26: Obtenha os n umeros de fornecedores cuja categoria e edia para a respectiva cidade. Q27: Obter os nomes de todos empregados que t em 2 ou mais dependentes. Q26: SELECT F1.Fnum FROM F AS F1 WHERE F1.Cat >= (SELECT AVG(Cat) FROM F WHERE Cidade=F1.Cidade); Q27: SELECT Pnome, Unome FROM Empregado AS E WHERE (SELECT COUNT(*) FROM DEPENDENTE AS D WHERE D.EBI=E.EBI);

27

Exemplos de quest oes encadeadas: IV


ltimo nome dos funcion maior do que o sal Q21: Obter o primeiro e u arios cujo sal ario e ario de qualquer empregado do departamento 5. SELECT Pnome,Unome FROM Empregado WHERE Salario >ALL (SELECT Salary FROM Empregado WHERE Ndep=5); Q22: Obter o nome dos empregados que trabalham em todos os prjectos controlados pelo departamento 5. SELECT Pnome, Unome FROM Empregado AS E WHERE ( (SELECT Pnum FROM TrabalhaEm AS T WHERE E.EBI=T.EBI) CONTAINS (SELECT Pnum FROM Projecto AS T WHERE Dnum=5));
24

o de atributos e tabelas de junc o Renomeac a a poss E vel renomear os atributos que aparecem no resultado da quest ao, fazer: SELECT atributo AS novo nome ... o: o SQL2 j o de tabelas seja feita de forma Tabelas de junc a a permite que a junc a explic ta. Exemplo, a quest ao Q23: Obter o nome e enderec o de todos os empregados que trabalham para o departamento Vendas.
SELECT Pnome, Unome, Enderec o FROM Empregado, Departamento WHERE Dnome=Vendas AND Dnum=Ndep; <-- junc ao implicita ou SELECT Pnome, Unome, Enderec o FROM (Empregado JOIN Departamento ON Ndep=Dnum) WHERE Dnome=Vendas; <-- junc ao explicita

es para a junc o: NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN. Outras operac o a

25

Exemplos de quest oes encadeadas II


` categoria do fornecedor F1. Q16: Obter os n umeros de fornecedores com categoria inferior a SELECT Fnum FROM F WHERE Cat <ALL (SELECT Cat FROM F WHERE Fnum=F1); Ambiguidade na quest ao Q16? N ao, porque por regra uma refer encia a um atributo n ao qualicado, refere-se a a ` relac o declarada na quest ao mais interior. Q17: Obter os nomes dos fornecedores que fornecem pelo menos uma componente. SELECT Fnome FROM F WHERE EXISTS (SELECT * FROM FC WHERE Fnr=Fnum); Res: F1,F2,F3,F4 Res: F2

22

Exemplos de quest oes encadeadas: III)


Q18: Obter os nomes dos fornecedores que n ao fornecem a componente C2. SELECT Fnome FROM F WHERE NOT EXISTS (SELECT * FROM FC WHERE Fnr=Fnum AND Cnr=C2); Res: F1,F2,F3,F4

Q19: Obter os nomes dos fornecedores que fornecem todas as componentes. ou obter os nomes dos fornecedores para os quais n ao existe uma componente que eles n ao fornec am. SELECT Fnome Res: F1 FROM F WHERE NOT EXISTS (SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM FC WHERE Fnr=Fnum AND Cnr=Cnum));

23

es envolvendo relac es Condic o o

EXISTS R verdadeiro sse R (sub-consulta) n ao for vazio.

s IN R verdadeiro sse s for igual a um dos valores de R. s NOT IN R verdadeiro sse s n ao for igual a qualquer valor de R. uma sub-consulta ou uma lista de a tomos. Re

ALL R verdadeiro sse s for maior do que todos os valores em R.


o, e.g. s Podemos ter outros operadores de comparac a que s NOT IN R.

ALL R que tem o mesmo signicado

ANY R verdadeiro sse s for maior do que pelo menos um valor em R.


A

o, e.g. s Podemos ter outros operadores de comparac a IN R.

ANY R tem o mesmo signicado que s

Os operadores EXISTS, ALL e ANY podem ser negados colocando-se NOT antes. NOT EXISTS R verdadeiro sse R for vazio.

20

Exemplos de quest oes encadeadas: I


Q13: Obter os n umeros de fornecedores que fornecem pelo menos uma componente de cor vermelha. SELECT Fnr FROM FC WHERE Cnr IN (SELECT Cnum FROM C WHERE Cor=verm); 12, 16 ou 17 grs. Q14: Obter os n umeros de componentes cujo peso e SELECT Cnum FROM C WHERE Peso IN (12,16,17); Res: C1,C2,C3 Res: F1,F4

es (projecto,horas) que Q15: Obter o BI todos os empregados que trabalham nos mesmas combinac o 1234567. o empregado Joao Regras cujo EBI e SELECT EBI FROM TrabalhaEm WHERE (Pnum,Horas) IN (SELECT Pnum, Horas FROM TrabalhaEm WHERE EBI=1234567);
21

o do resultado Ordenac a
o ORDER BY: ordenac a Q11: Listar os nomes dos alunos inscritos em BD por ordem alfab etica.

SELECT nome FROM Alunos, Inscric oes WHERE codDisc=BD AND codigo=codAluno ORDER BY nome o e por defeito por ordem crescente. Podemos indicar exactamente o que se pretende: A ordenac a ORDER BY [ASC|DESC] atributo

18

Quest oes encadeadas necess o obtida Por vezes e ario comparar um atributo com os valores de uma relac a por uma quest ao encadeada.
A quest ao Q12: Listar o Director do Departamento Vendas pode ser formulada em SQL como: SELECT E.Pnome, E.Unome FROM Empregado AS E, Departamento AS D WHERE D.nome=Vendas AND E.EBI=D.dirEBI; ou SELECT nome FROM Empregado WHERE EBI = (SELECT DirEBI FROM Departamento WHERE nome=Vendas); um valor apenas. Note-se que o resultado da sub-consulta e
19

es sobre conjuntos. Quest oes envolvendo operac o


es sobre conjuntos da a lgebra relacional, como O SQL incorpora directamente algumas das operac o sejam: UNION -- reuni ao EXCEPT -- diferenc a INTERSECT -- intersecc ao es resultantes s as relac o ao conjuntos de tuplos, em que os tuplos em duplicado s ao eliminados do resultado. caso n ao se queira que os tuplos em duplicado sejam eliminados, deve seguir-se ao operador o qualicativo ALL: R INTERSECT ALL S. es s es compat estas operac o o se aplicam a relac o veis para a reuni ao.
B B

Q8: Obter os n umeros das componentes que ou pesam mais de 18 grs ou s ao fornecidas pelo fornecedor F2 (ou ambos).
(SELECT C.Cnum FROM C WHERE C.Peso > 18) UNION (SELECT FC.Cnum FROM FC WHERE FC.Fnum=F2)

16

o e aritm Operadores de comparac a eticos


Strings: atributo = string ou atributo LIKE a%. Ops aritm eticos: +, *, -, / Q9: Mostrar os sal arios dos empregados que trabalham no projecto 5 com um aumento de 10%.

SELECT Pnome, Unome, 1.1*Salario FROM Empregado AS E, Projecto AS P, TrabalhaEm AS T WHERE Pnum=5 AND P.Pnum=T.Pnum AND E.EBI=T.EBI operador BETWEEN: Q10: Obter todos os empregados do departamento 7 cujo salario est a entre 100c e 150c.

SELECT * FROM Empregado WHERE Ndep=7 AND (Salario BETWEEN 100 AND 150)

17

UPDATE o. Permite modicar os valores dos atributos de um ou mais tuplos de uma relac a
UPDATE relac ao SET novas valores WHERE condic ao;

o de WHERE selecciona os tuplos a modicar. Em SET indicam-se os atribA condic a utos que ser ao modicados e os respectivos novos valores. os seus novos valores o s relac a ao removidos mas a tabela mantem-se, embora vazia. Exemplos:
M4: UPDATE Disciplinas SET nome=Redes e Sistemas Distribu dos WHERE nome IN (SELECT nome FROM Disciplinas WHERE nome LIKE Compl%Operacao AND anoLect > 96/97; M5: UPDATE Empregado SET salario= salario*1.05 WHERE Ndep= 5;

14

BD sobre Fornecedores e Componentes


FC Fnr F1 F1 F1 F1 F1 F1 F2 F2 F3 F4 F4 F4 Cnr C1 C2 C3 C4 C5 C6 C1 C2 C2 C2 C4 C5 Qtd 300 200 400 200 100 100 300 400 200 200 300 400

F Fnum F1 F2 F3 F4 F5

Fnome SOS TLP AMP CCB RTB

Cat 20 10 30 20 30

Cidade Lisboa Porto Porto Lisboa Braga

C Cnum C1 C2 C3 C4 C5 C6

Cnome prego porca parafuso parafuso anilha anilha

Cor verm verde azul verm azul verde

Peso 12 17 17 14 12 19

Cidade Lisboa Porto Coimbra Lisboa Porto Lisboa

15

INSERT o. Permite adicionar tuplos a uma relac a


INSERT INTO R(
C D

,
E

,
C

) VALUES ( ,
G E D P I

, );
G F V W T

O tuplo a inserir tem o valor


H

no atributo

, para
Q

` tabela de Alunos M1: Adicionar um novo aluno a


INSERT INTO Alunos VALUES (19990307007,Alice,1982-05-13,Rua Direita, 4 -- 4000 Porto);

quando n ao se indica os atributos da tabela, sup oe-se que s ao todos e pela ordem o. denida quando da sua criac a
necess se adicionarmos um tuplo com valores para apenas alguns dos atributos, e ario indicar quais, ou respeitar a ordem dos atributos na tabela. Os restantes cam com valores por defeito ou Null.
B B

poss e vel adicionar tuplos em que os valores s ao obtidos como resultado de uma quest ao: INSERT INTO R( , , ) SELECT , , FROM ...;
C E E E C C E E E C D F D F

12

DELETE o. Permite eliminar tuplos de uma relac a


DELETE FROM relac ao WHERE condic ao remoc ao;

o WHERE for omitida, todos os tuplos da relac o s Se a condic a a ao removidos mas a tabela mantem-se, embora vazia. Exemplos:
M2: DELETE FROM Inscric oes WHERE anoLect < 97/98; es; M3: DELETE FROM Inscric o

o a seguir ao WHERE pode ser uma quest a condic a ao complexa (veremos exemplos mais adiante).
B

o pode propagar-se a outras tabelas para preservar a integridade refer esta operac a encial.

13

DISTINCT O SQL n ao elimina automaticamente tuplos em duplicado, porque:


dispendioso ordenar+remover eliminar duplicados e es de agregac o (somas, contagens, m se se pretender aplicar func o a edias,...) n ao se pretende, na maioria dos casos, eliminar duplicados. o utilizador pode querer ver os tuplos em duplicado no resultado
X

Para eliminar duplicados, usa-se:


SELECT DISTINCT lista_atributos FROM relac ao

Q7: Nomes de alunos que est ao inscritos em 99/00 em disciplinas do DCC.


SELECT DISTINCT A.nome <-oes FROM Alunos AS A, Disciplinas AS D, Inscric WHERE I.anoLect=99/00 AND D.depto=DCC -AND I.codDisc=D.codigo -AND I.codAluno=A.codigo; evita que um aluno aparec a AS I tantas vezes quantas as disc. do DCC em que esta inscrito

10

o da BDs Comandos SQL para actualizac a Iremos ver formas mais complexas e potentes de interrogar uma BDs, mas primeiro vamos ver os comandos que permitem modicar o estado da BDs. S ao tr es:

o INSERT adicionar tuplos a uma relac a

o DELETE remover tuplos de uma relac a

UPDATE actualizar valores de atributos de alguns tuplos

11

Ambiguidades os nomes de atributos e Sin onimos es envolvidas na quest Se as relac o ao tiverem nomes de atributos em comum, pode o amb o e qualicar os atributos com o nome vericar-se uma situac a gua. A soluc a o a que pertencem. da relac a Q4: Obter os nomes dos alunos e das disciplinas a que est ao inscritos.
SELECT A.nome, D.nome <-- qualif. dos atributos FROM Alunos AS A, Disciplinas AS D, Inscric oes <-- sin onimos ou aliases WHERE A.codigo=codAlunos AND D.codigo=codDisc

ltimo nome, e o 1o e u ltimo do seu superQ5: Listar para cada empregado o 1o. e u visor imediato.
SELECT E.Pnome, E.Unome, S.Pnome, S.Unome FROM Empregado AS E, Empregado AS S WHERE E.superBI=S.EBI;

o de strings SELECT * e Comparac a O simbolo * pode substituir a lista de atributos a seleccionar, signicando que se o sem os mencionar explicitapretende seleccionar todos os atributos de uma relac a mente. da forma YYYY0307XXX, em Q6: Obter os dados dos alunos de CC. O c odigo de CC e o ano e XXX e o n que YYYY e umero de ordem.
SELECT * FROM Alunos WHERE c odigo LIKE ____0307%;

o de strings: nome_atributo [NOT] LIKE _a% Comparac a

pode ser um qualquer caracter. % pode ser um n umero arbitr ario de caracteres.

SQL: Quest oes.


SELECT lista de atributos FROM tuplos de tabelas o sobre WHERE condic a os tuplos seleccionados

projecc a o relac o es selecc a o o + outras operac es

Exemplos: Q1: Obter a lista das disciplinas do 3o Ano. SELECT nome FROM Disciplinas WHERE anoCurso=3; na Algebra Relacional:

g h

l m

Exemplos quest oes simples de SQL. Q2: Obter o nome de todos os alunos inscritos na disciplina de EDA bem 99/00.
SELECT nome FFROM Alunos, Inscric oes WHERE codDisc=EDA AND anoLect=99/00 AND codigo=codAluno; lgebra relacional: na a
Y ) #   e f u q q q

o de selecc <--- condic a ao o de selecc <--- condic a ao <--- cond. de junc ao entre 2 relac oes
  $ ' ! '   $

` a

b c

i a

s t

` a

i w

` a

es, pelo que todos os Omiss ao do WHERE signica que n ao impomos condic o o indicada em FROM s tuplos da relac a ao seleccionados. Q3: Seleccionar todos os c odigos e nomes de disciplinas.
SELECT codigo, nome FROM Disciplinas
7

SQL: DROP TABLE / ALTER TABLE

DROP TABLE nome_tabela [CASCADE|RESTRICT]

remove uma tabela.

es e vis Com CASCADE s ao tamb em removidas todas as restric o oes que referenciam a tabela. removida se n es sobre a Com RESTRICT, a tabela s oe ao existirem restric o tabela.

ALTER TABLE nome tabela COM atributo; modica uma o. DROP (cascade ou restrict), remove um atributo ou restric a

tabela. Se COM = Se COM = ALTER,

o. modica o atributo ou restric a Um exemplo: ALTER TABLE Inscric oes ADD exame INT;

o de novos dom SQL: Denic a nios Em SQL podemos indicar um tipo de dados default para os atributos, mas podemos o dos atributos. tamb em declarar um novo dom nio de dados e us a-lo na denic a
CREATE DOMAIN novo tipo AS tipo base;

Exemplo: CREATE DOMAIN CodTipo AS CHAR(7); o de tabelas podiam agora ser: Os comandos de criac a
CREATE TABLE Inscric oes ( codAluno CodTipo NOT NULL, codDisc CodTipo NOT NULL, anoLect CHAR(5), PRIMARY KEY (codAluno,codDisc), FOREIGN KEY (codAluno) REFERENCES Alunos(codigo), FOREIGN KEY (codDisc) REFERENCES Disciplinas(codigo) );

SQL: CREATE TABLE o, indicando-se o seu nome, atributos (nome e tipo de permite criar uma nova relac a es (chave e restric es de integridade). dados associados) e restric o o
CREATE TABLE nome_tabela ( atributo_1 tipoDados_1 [restric ao_atributo_1], atributo_N tipoDados_N [restric ao_atributo_N], [ restric ao_tabela_1 {, restric ao_tabela_i } ] ); ... ,

em que tipoDados_i: num erico: INT, SHORTINT, REAL, DOUBLE PRECISION, DECIMAL(n,d) (n digitos decimais com d digitos depois do ponto decimal). strings: CHAR(n) comprimento xo, VARCHAR(n) comprimento vari avel at e n caracteres, BIT(n) string de n bits, VARBIT(n) string at e n bits. Data: DATE YYYY-MM-DD (10 caracteres) Hora: TIME HH:MM:SS (8 caracteres)
2

Exemplo CREATE TABLE Considere-se o seguinte esquema:


chave. Alunos(codigo, nome, dtNasc, enderec o) codigo e chave. Disciplinas(codigo, nome, anoCurso, depto) codigo e chave. Inscric oes(codAluno, codDisc, anoLect) (codAluno,codDisc) e

Comandos para criar as tabelas:


CREATE TABLE Alunos ( codigo CHAR(7) NOT nome VARCHAR(30) NOT dtNasc DATE, Enderec o VARCHAR(30), PRIMARY KEY (codigo) ); CREATE TABLE Disciplinas ( codigo CHAR(7) NOT nome VARCHAR(20) NOT anoCurso CHAR(1), depto INT, NULL, NULL, PRIMARY KEY (codigo) ); CREATE TABLE Inscric oes ( codAluno CHAR(7) NOT NULL, codDisc CHAR(7) NOT NULL, anoLect CHAR(5), PRIMARY KEY (codAluno,codDisc), FOREIGN KEY (codAluno) REFERENCES Alunos(codigo), FOREIGN KEY (codDisc) REFERENCES Disciplinas(codigo) );

NULL, NULL,

SQL Structured Query Language usada por todos os sistemas Linguagem para denir, questionar e actualizar a BD. E comerciais de BDs relacionais.

SQL = DDL (data denition lang.) + DML (data manipulation lang.), permite:
criar as tabelas

O SQL resultou do SEQUEL da IBM.

denir vis oes sobre os dados

SQL1 (1986) 1a vers ao ANSI.

criar e remover ndices

SQL2 (1992) 2a vers ao ANSI.

ligar-se a outras linguagens, como o C

SQL3 novo standard em curso.

denir permiss oes de acesso a tabelas

SQL3 inclui conceitos OO.