Escolar Documentos
Profissional Documentos
Cultura Documentos
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
(Codd, 1972)
No Modelo relacional a informao representada atravs de
relaes (ou tabelas). A lgebra Relacional um conjunto de
operaes formais que operam sobre relaes. No essencial a
lgebra relacional corresponde lgebra de conjuntos, ou seja,
definida com base nos operadores de Interseco, Produto
Cartesiano e Unio.
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
Tipos de Operaes
Todas as operaes produzem como resultado outras relaes.
Tipos de operaes:
Binrias (operam sobre conjuntos)
Unio
Produto Cartesiano (e Join)
Unrias (operam apenas sobre um conjunto)
Projeco
Seleco
Relaes compatveis mesmo grau (nmero de atributos) e
atributos idnticos (i.e., tipos de dados compatveis).
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
Unio
Apenas pode ser efectuada entre relaes compatveis.
R S = {t: t R ou t S}, em que t representa um tuplo (linha)
A
lgebra
SQL ndice
lgebra Relacional
Produto Cartesiano
R X S = {t1.t2: t1 R e t2 S}
Cliente
Nmero
Nome
CodPostal
001
Joo
1500
013
Ana
2100
056
Lus
NULL
Localidade
X=
Nmero
Nome
Cliente.
CodPostal
Localidade.
CodPostal
Localidade
001
Joo
1500
1500
Lisboa
001
Joo
1500
2100
Porto
001
Joo
1500
3999
vora
013
Ana
2100
1500
Lisboa
013
Ana
2100
2100
Porto
CodPostal
Localidade
013
Ana
2100
3999
vora
1500
Lisboa
056
Lus
NULL
1500
Lisboa
2100
Porto
056
Lus
NULL
2100
Porto
3999
vora
056
Lus
NULL
3999
vora
lgebra
SQL ndice
lgebra Relacional
Join
INNER JOIN: Produto Cartesiano, em que apenas so seleccionados
tuplos nos quais os valores dos atributos comuns so idnticos.
Normalmente o atributo comum no repetido.
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
Exemplos de Join
Cliente
Nmero
Nome
CodPostal
001
Joo
1500
013
Ana
2100
056
Lus
NULL
X
Localidade
CodPostal
Nmero
Nome
CodPostal
Localidade
001
Joo
1500
Lisboa
Natural Join
013
Ana
2100
Porto
(Inner Join)
Nmero
Nome
CodPostal
Localidade
001
Joo
1500
Lisboa
013
Ana
2100
Porto
056
Lus
NULL
NULL
Nmero
Nome
CodPostal
Localidade
001
Joo
1500
Lisboa
013
Ana
2100
Porto
NULL
NULL
3999
vora
Localidade
1500
Lisboa
2100
Porto
3999
vora
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
Projeco
Ai, Aj, , Am (R) ={< t(Ai), t(Aj), , t(Am) >: t R} em que
R(A1, A2, , An) a relao projectada;
Ai, Aj, , Am so atributos da projeco;
i, j, , m so inteiros compreendidos no intervalo 1 n .
(A) R
R
A
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
Seleco
F (R) ={t: t R e t satisfaz F} em que
em que F uma frmula envolvendo atributos e operadores lgicos (devolvem verdade ou
falso) como operandos.
(A=a) R
R
A
Pedro Ramos,
lgebra
SQL ndice
lgebra Relacional
Exemplos de Interrogaes
1 Listar o nome e nacionalidade dos autores de nacionalidade
Portuguesa e Brasileira
nome, nacionalidade (nacionalidade =Portuguesa or nacionalidade =Brasileira
(Autor))
Pedro Ramos,
lgebra
SQL ndice
SQL - ndice
Domnios e Tipos de Dados
Tabelas
ndices
DML (Data Manipulation Language)
Prepared Statements
Stored Procedures
Triggers
SELECT
Clusula SELECT
Clusula FROM
Joins
Clusula WHERE
Clusulas GROUP BY, HAVING
e funes de agregao
UNION
UPDATE
DELETE
INSERT
Optimizao de Querys
Views
Pedro Ramos,
lgebra
SQL ndice
Linguagem SQL
Norma ANSI criada em 1986 (revista em 1989 e 1992).
A linguagem SQL tem duas vertentes: DDL (Data Definition
Language) e DML (Data Manipulation Language). Na vertente
DDL o SQL possui um conjunto de comandos para criao e
alterao de tabelas, chaves estrangeiras, regras de integridade
referencial e views. A vertente DML uma implementao da
lgebra Relacional, e.g., permite efectuar interrogaes a uma
base de dados, bem como alterar, anular ou inserir registos em
tabelas.
Ao longo do texto ser apresentado o SQL do Adaptive Server
Anywhere 6.0 da Sybase.
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
Nmero
Tinyint [0 255]
Smallint [-+ 32,767] ou
UNSIGNED [0 - 65535]
Integer [-+ 2,147,483,6479]
Double [ grande]
Decimal (inteiros[, decimais])
lgebra
SQL ndice
SQL
bi
nome
VARCHAR(100),
morada
dm_morada,
CONSTRAINT
CONSTRAINT
Pedro Ramos,
Chave alternativa
lgebra
SQL ndice
SQL
Tabelas (II)
CREATE TABLE Factura (
num_factura
INTEGER
NOT NULL,
data
DATE
NOT NULL,
valor
DECIMAL(10,2)
NOT NULL,
cod_cliente
INTEGER
NOT NULL,
CONSTRAINT
CONSTRAINT
for_key_cliente
Chave
Estrangeira
CASCADE
ON DELETE RESTRICT);
INTEGER
NOT NULL,
tipo
CHAR(2)
Designao
VARCHAR(100),
CONSTRAINT
prim_key
Pedro Ramos,
Restries
lgebra
SQL ndice
SQL
Tabelas (III)
CREATE TABLE Item (
num_factura
num_item
quantidade
INTEGER
valor
DECIMAL (4,2)
NOT NULL,
cod_produto
INTEGER
NOT NULL,
CONSTRAINT
CONSTRAINT
for_key_factura
Restries
for_key_produto
CASCADE
ON DELETE RESTRICT);
Pedro Ramos,
lgebra
SQL ndice
SQL
Tabelas (IV)
Comando para alterar uma tabela:
ALTER TABLE nome databela
alteraes
ALTER TABLE cliente
ADD COLUMN telefone VARCHAR (10)
DROP COLUMN bi;
Pedro Ramos,
lgebra
SQL ndice
SQL
ndices
Comando para criar um ndice tabela:
CREATE [UNIQUE] INDEX nome ndice ON nome tabela
(nome coluna [ASC | DESC])
create unique index Index_Key on Medicamentos_Receita (
Codigo ASC,
ID_Receita ASC
);
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Comando SELECT
Um comando SQL tpico para seleco de linhas obedece seguinte
estrutura (em que a clusula SELECT corresponde projeco, a
clusula FROM ao produto cartesiano e a clusula WHERE
seleco):
SELECT campos a seleccionar
FROM tabelas onde constam os campos indicados em Select
WHERE expresso lgica que indica quais as linhas que pretendemos
seleccionar
ORDER BY campo pelo qual a listagem vir ordenada;
SELECT Nome, Morada
FROM Cliente
WHERE Cod_Postal = 1300
ORDER BY Nome;
Pedro Ramos,
SQL ndice
SQL
Nota
importante notar que qualquer comando SELECT devolve uma
tabela (um conjunto de colunas e linhas).
Sempre que, no contexto da sintaxe da linguagem SQL for referida
uma tabela, ela deve ser interpretada no sentido mais lato: uma
tabela original (definida no esquema relacional) ou o resultado de
um comando SELECT.
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
(devolve
os cdigos postais
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Localidade;
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Natural Join
Critrio: atributos com o mesmo nome. Apenas funciona se existir pelo menos
um atributo com o mesmo nome e tipo de dados compatveis.
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
lgebra
SQL ndice
SQL
Cliente
Nmero
Nome
CodPostal
001
Joo
1500
013
Ana
2100
056
Luis
1500
001
Paula
2100
011
Nuno
1300
Pedro Ramos,
Nmero
Nome
CodPostal
001
Joo
1500
CodPostal
COUNT(CodPostal)
056
Luis
1500
1500
2100
1300
Nome
CodPostal
013
Ana
2100
001
Paula
2100
Resultado Final
CodPostal
COUNT(CodPostal)
1500
Nmero
Nome
CodPostal
2100
011
Nuno
1300
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Comando UNION
A unio de comandos SELECT efectuada atravs do operador
UNION.
O seguinte comando devolve os nomes dos clientes e fornecedores:
SELECT Nome FROM Cliente
UNION
SELECT Nome FROM Fornecedor;
Pedro Ramos,
lgebra
SQL ndice
SQL
Comando UPDATE
Um comando UPDATE para alterao de linhas obedece seguinte
estrutura:
UPDATE tabela a alterar
SET coluna a alterar = expresso
WHERE expresso lgica que indica quais as linhas que
pretendemos alterar
O seguinte comando transforma os cdigos postais 1200 em 1500:
UPDATE Cliente SET CodPostal = 1500
WHERE CodPostal = 1200;
Pedro Ramos,
lgebra
SQL ndice
SQL
Comando DELETE
Um comando DELETE para anulao de linhas obedece seguinte
estrutura:
DELETE FROM tabela a anular
WHERE expresso lgica que indica quais as linhas que
pretendemos alterar
O seguinte comando apaga os cdigos postais 1200
DELETE FROM Cliente
WHERE CodPostal = 1200;
Pedro Ramos,
lgebra
SQL ndice
SQL
Comando INSERT
Atravs do comando INSERT podem-se inserir uma linha ou vrias
linhas em simultneo. Para inserir uma linha um comando INSERT
obedece seguinte estrutura:
INSERT INTO tabela a inserir (colunas onde vo ser inseridos os valores)
VALUES (valores a inserir)
Pedro Ramos,
lgebra
SQL ndice
SQL
No vale a pena
usar o ndice
Pedro Ramos,
lgebra
SQL ndice
SQL
select PLAN(
'SELECT Nome FROM Cliente as
SELECT * From Cliente as CL2
Cl2.Bi<>Cl1.BI)');
Scan Cliente AS CL1
Scan Cliente AS CL2
sequentially
sequentially
select PLAN(
'SELECT Nome FROM Cliente as
SELECT CL2.Nome From Cliente
Scan Cliente AS CL1
Scan Cliente AS CL2
Pedro Ramos,
lgebra
SQL ndice
SQL
Views
As Views no so mais do que comandos SELECT armazenados.
So por vezes denominadas tabelas temporrias. Note-se que o
resultado de uma execuo de uma view (os registos que ela
devolve) depende dos registos armazenados no momento nas tabelas
de suporte view. As views podem ser utilizadas dentro de
comandos SELECT.
CREATE VIEW Clientes_Lisboa (BI, Nome)
AS Select BI, Nome FROM Cliente KEY JOIN Localidade
Where Localidade = 'Lisboa'
WITH CHECK OPTION;
Select Nome From Clientes_Lisboa;
Pedro Ramos,
lgebra
SQL ndice
SQL
Prepare Statement
O comando Prepare Statement permite optimizar acessos base de
dados que so efectuados mltiplas vezes em uma transaco.
Quando um comando SQL enviado ao SGBD, este, para alm de
ter o interpretar (parsing), tem de gerar um plano para a sua
realizao. O comando Prepare Statement evita que essas duas
tarefas sejam executadas mais do que uma vez.
A comando apenas se justifica quando o SQL utilizado dentro de outra
linguagem de programao (Java, C, Visual Basic, etc.) ou em Stored Procedures
(ver mais adiante).
Exemplo (simplificado, mais adiante apresenta-se um exemplo completo em JAVA)
PREPARE calc_factura("Update Factura Set Valor = ? Where Num_Factura = ? ;");
calc_factura.setDouble(1, totalFactura);
calc_factura.setInt(2, lastFactura);
Passagem de parmetros
calc_factura.executeSQL()
Execuo
Pedro Ramos,
lgebra
SQL ndice
SQL
Stored Procedures
Os Stored Procedures (SP) so procedimentos SQL compilados e
armazenados junto da base de dados. Trata-se da forma mais
eficiente de executar comandos SQL. Para alm dos comandos SQL
possvel utilizar as habituais primitivas de controlo (If, While), os
habituais operadores lgicos e variveis. Trata-se no entanto de uma
linguagem simples que no substitui as linguagens procedimentais
(C, Java, etc.).
possvel passar parmetros para um SP, assim como um SP
retornar valores (nomeadamente o resultado de comandos SELECT).
Os SP podem ser chamados dentro de um comando SELECT ou a
partir de uma linguagem procedimental (atravs da primitiva
CALL).
Pedro Ramos,
lgebra
SQL ndice
SQL
Pedro Ramos,
lgebra
SQL ndice
SQL
Triggers (I)
Os triggers so procedimentos armazenados junto da base de dados que so
associados a eventos que ocorrem nas tabelas. Atravs dos triggers o motor de
base de dados reage automaticamente quando esses eventos (alteraes dos dados
nas tabelas) ocorrem. A forma como reagem definida pelo procedimento
associado ao trigger (um trigger apenas pode estar associado a um evento de uma
tabela). Os eventos aos quais podem se associar os triggers: Insert, Update, Delete
e Update Of (para cada um deles necessrio discriminar se o evento ocorre antes
ou depois da operao terminar).
Os eventos Insert, Update e Delete ocorrem ao nvel do registo completo,
enquanto que o evento Update Of ocorre ao nvel de um campo da tabela (
necessrio indicar qual o atributo no momento da definio do trigger).
Os triggers podem ainda ser row-level ou statement-level. Os triggers row-level
ocorrem aps cada linha da tabela ser alterada (anulada ou inserida). Os triggers
statement-level ocorrem aps uma operao sobre a tabela ser concluda (por
exemplo, aps um conjunto de registos ser inserido).
Pedro Ramos,
lgebra
SQL ndice
SQL
Triggers (II)
O procedimento associado ao trigger obedece no essencial mesma
sintaxe que os SP.
Exemplo: trigger (row-level) que activado sempre que se insere
uma matria prima na tabela de produtos (insere um registo na tabela
de matrias primas):
create trigger "dba".MateriaPrima after insert
referencing new as new_produto
for each row
when(new_produto.Tipo='MP')
begin
insert into MateriaPrima(cod_produto)
values(new_produto.cod_produto)
end
Pedro Ramos,
on Produto
lgebra
SQL ndice