Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SQL
Linguagem para:
Definio de dados: criao das estruturas
Data Definition Language (DDL)
Manipulao de dados: atualizao e consultas
Data Manipulation Language (DML)
Manipulao de Dados
Define operaes de manipulao de dados:
INSERT
UPDATE
DELETE
SELECT
Insero de dados
INSERT INTO nome_tabela [(lista_atributos)]
VALUES (lista_valores_atributos)
[, (lista_valores_atributos)]
Exemplos
INSERT INTO Ambulatorios VALUES (1, 1, 30)
INSERT INTO Medicos
(codm, nome, idade, especialidade, CPF, cidade)
VALUES (4, Carlos, 28,ortopedia,
11000110000, Joinville);
SQL Insero a partir de outra tabela
Insero de dados
Permite inserir em uma tabela dados de outra tabela
A nova tabela ter os mesmos atributos, com os mesmos
domnios
Exemplos
INSERT into cliente as
SELECT * from funcionario
SQL Update
Alterao de dados
UPDATE nome_tabela
SET nome_atributo_1 = Valor
[{, nome_atributo_n = Valor}]
[WHERE condio]
Exemplos
UPDATE Medico
SET cidade = Florianopolis
UPDATE Ambulatorios
SET capacidade = capacidade + 5, andar = 3
WHERE codigo_area = 2
SQL DML
Excluso de dados
DELETE FROM nome_tabela
[WHERE condio]
Exemplos
DELETE FROM Ambulatorios
Ai representa um atributo
Ri representa uma tabela
P um predicado
Exemplo: SELECT
FROM funcionario, departamento
A clusula FROM
Quando mais de uma tabela utilizada necessrio dar um
apelido para elas que deve ser utilizado para diferenciar atributos
iguais (com mesmo nome).
Exemplo: SELECT f.
FROM funcionario f, departamento d
WHERE f.codDepto = d.codDepto
A clusula WHERE
A clusula where especifica as condies que o resultado precisa
satisfazer
Corresponde ao predicado de seleo da lgebra
Renomeao de atributos
old-name as new-name
Exemplos:
select count(*)
FROM cliente
select SUM(salario)
FROM funcionario
Funes de Agregao e Group By
Encontre o total de funcionarios de cada departamento
-----------------------------
VISAO: FUNCIONARIO_VIEW
-----------------------------
CODCLI NOME DEPTO
-----------------------------
1001 FULANO ENGENHARIA
1002 BELTRANO MARKETING
1003 CICRANO JURDICO
--------------------------------
VISAO: CLIENTE_PEDIDO_VIEW
-------------------------------- SELECT UF, SUM(VALOR)
CODCLI NOME UF NR VALOR FROM CLIENTE_PEDIDO_VIEW
-------------------------------- GROUP BY UF;
1001 FULANO SP 1 4800
1002 BELTRANO RJ 2 3600
1003 CICRANO SP 3 5500
VIEWS >>> EXERCCIO 1 <<<
-----------------------------
VISAO: FUNCIONARIO_VIEW
-----------------------------
CODFUN NOME DEPTO
-----------------------------
1001 FULANO ENGENHARIA
1002 BELTRANO MARKETING
1003 CICRANO JURDICO
VIEWS >>> EXERCCIO 1 <<<
-----------------------------
VISAO: FUNCIONARIO_VIEW
----------------------------- CREATE VIEW FUNCIONARIO_VIEW AS
CODFUN NOME DEPTO SELECT CODFUN, NOME, DEPTO
----------------------------- FROM FUNCIONARIO
1001 FULANO ENGENHARIA WITH READ ONLY CONSTRAINT FUNC_READ_ONLY;
1002 BELTRANO MARKETING
1003 CICRANO JURDICO
VIEWS >>> EXERCCIO 2 <<<
--------------------------------
VISAO: CLIENTE_PEDIDO_VIEW
--------------------------------
CODCLI NOME UF NR VALOR
--------------------------------
1001 FULANO SP 1 4800
1002 BELTRANO RJ 2 3600
1003 CICRANO SP 3 5500
VIEWS >>> EXERCCIO 2 <<<
--------------------------------
VISAO: CLIENTE_PEDIDO_VIEW
-------------------------------- CREATE VIEW CLIENTE_PEDIDO_VIEW AS
CODCLI NOME UF NR VALOR SELECT C.CODCLI, C.NOME, C.UF,
-------------------------------- P.NR, P.VALOR
1001 FULANO SP 1 4800 FROM CLIENTE C
1002 BELTRANO RJ 2 3600 INNER JOIN PEDIDO P
1003 CICRANO SP 3 5500 ON C.CODCLI = P.CODCLI;
INDEXES (NDICES)
ndices nicos;
ndices no nicos;
ndices de chave invertida;
ndices baseados em funes;
Etc.
INDEXES
previsto:
Comandos DML (INSERT, REPLACE, DELETE ou UPDATE)
Vrios triggers podem ser criados em um mesmo BD.
Os triggers podem ser disparados antes ou depois de eventos.
Triggers
CREATE TRIGGER `atualizaHistorico` AFTER UPDATE ON `funcionario`
FOR EACH ROW
BEGIN
if(old.status = 'd') then
if(new.statuss = 'a') then
INSERT INTO historicoFuncionario
SET codHistoricoFuncionario = NULL,
codFuncionario = OLD.codFuncionario,
dataAdmissao = NOW(),
dataDemissao = null;
end if;
end if;
if(old.statuss = 'a') then
if(new.statuss = 'd') then
call demiteFuncionario(OLD.codFuncionario);
end if;
end if;
END;
Triggers
CREATE TRIGGER `admiteFuncioanario` AFTER INSERT ON `funcionario`
FOR EACH ROW
BEGIN
INSERT INTO historicoFuncionario SET
codHistoricoFuncionario = NULL,
codFuncionario = new.codFuncionario,
dataAdmissao = NOW(),
dataDemissao = null;
END
Triggers
CREATE TRIGGER `atualizaProdutosVendidos` BEFORE INSERT ON `pedido`
FOR EACH ROW
BEGIN
call updateProduto(new.quantidade,new.codProduto);