3. SQL (Structured-Query Language)
Linguagem para manipulação de banco de dados em um SGBD;
Início dos anos 70 nos laboratórios da IBM:
Necessidade de uma linguagem mais amigável que álgebra relacional;
Inclui operações de:
Definição/exclusão/alteração de tabelas e esquemas
Create/Drop table/schema.
Definição de restrições de integridade
On delete/update set null, on delete/update cascade, primary key,
foreing key...
4. SQL (Structured-Query Language)
...
Manipulação de dados
Select/Insert/Update/Delete
Definição de visões
Create/Drop view
Controle de transações
Commit, roolback...
Autorização de usuários
Grant...
5. Criação/exclusão de esquemas
Cria um esquema para definição de tabelas:
CREATE SCHEMA empresa
Cria um esquema indicando a quem ele pertence:
CREATE SCHEMA empresa AUTHORIZATION mariane
Exclusão de um esquema criado no SGBD:
Possui dois tipos (CASCADE e RESTRICT)
DROP SCHEMA empresa CASCADE
DROP SCHEMA empresa
O esquema será excluído mesmo se houver elementos dentro dele;
DROP SCHEMA empresa RESTRICT
O esquema só será excluído se não tiver elementos;
6. Criação de tabelas
O comando CREATE TABLE é utilizado na criação de uma
tabela:
CREATE TABLE nometabela (
campo1 tipocampo1 restricao1 restricao2…,
campo2 tipocampo2 restricao1 restricao2…,
….
PRIMARY KEY (campochavedestatabela),
FOREIGN KEY(chaveestrangeira1) REFERENCES
tabela(campochave))
7. Criação de tabelas
Criação de uma tabela em um dado esquema, com
restrições:
CREATE TABLE empregado (
ssn int(10) NOT NULL AUTO_INCREMENT,
pnome varchar(45),
datanasc datetime,
sexo enum('M','F'),
salario double,
superssn int(10),
dnumero int(10),
PRIMARY KEY (ssn),
FOREIGN KEY(superssn) REFERENCES empregado(ssn),
FOREIGN KEY(dnumero) REFERENCES departamento (dnumero))
8. Criação de tabelas
Criação de uma tabela em um dado esquema, com
restrições:
CREATE TABLE empregado (
ssn int(10) NOT NULL PRIMARY KEY,
pnome varchar(45),
datanasc datetime,
sexo enum('M','F'),
salario double DEFAULT NULL,
superssn int(10),
dnumero int(10),
UNIQUE (pnome),
FOREIGN KEY(superssn) REFERENCES empregado(ssn),
FOREIGN KEY(dnumero) REFERENCES departamento (dnumero))
9. Criação de tabelas
Especificando restrições com CONSTRAINT e ações referenciais
engatilhadas:
CREATE TABLE empregado (
…
CONSTRAINT chaveestrangeirasuper
FOREIGN KEY (superssn) REFERENCES empregado(ssn)
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT chaveestrangeiradep
FOREIGN KEY (dnumero) REFERENCES empregado(dnumero)
ON DELETE SET DEFAULT ON UPDATE CASCADE)
opcional
10. Exclusão de tabelas
Exclui uma tabela em um esquema:
DROP TABLE empresa CASCADE
DROP TABLE empresa
Exclui uma tabela em um esquema desde que ela não esteja sendo
referenciada em nenhuma restrição de chave estrangeira ou visões
DROP TABLE empresa RESTRICT
Exclui apenas os registros, mantém a tabela vazia.
DELETE FROM empresa
11. Alteração de tabelas
A estrutura da tabela pode mudar utilizando o comando ALTER
para vários tipos de mudança:
ALTER TABLE nomedatabela ALTERACAO
ALTER TABLE empregado ADD funcao varchar(12)
ALTER TABLE empregado DROP endereco CASCADE
ALTER TABLE empregado DROP funcao RESTRICT
ALTER TABLE empregado ALTER salario SET DEFAULT=2000,00
ALTER TABLE empregado ADD CONSTRAINT x ..... (definição da
constraint)
ALTER TABLE empregado DROP CONSTRAINT x CASCADE
obrigatório
12. Inserção de tuplas em tabelas
O comando INSERT pode ser utilizado para adicionar uma única tupla à
tabela. Existem duas formas:
Informando todos os campos desejados diretamente:
INSERT INTO nometabela (campo1, campo2, ...) VALUES (valor1, valor2, ...)
INSERT INTO empregado (ssn, pnome, minicial, unome, datanasc, salario)
VALUES (123456789, ‘Marcia', ‘S.', ‘Garcia','1983-08-15', 30000)
Utilizado quando não se deseja inserir informação em todos os campos
da tabela;
Os campos desejados devem ser explicitados; Os demais serão definidos
com o seu valor default;
13. Inserção de tuplas em tabelas
Informando apenas os valores:
INSERT INTO nometabela VALUES (valor1, valor2, ..., valor n)
INSERT INTO empregado VALUES (123456789, ‘Marcia', ‘S.',
‘Garcia', '1983-08-15', ‘F’, 30000, 98765, 2)
Utilizado para inserir informações completas;
Neste caso os campos não precisarão ser mencionados, mas os valores
deverão estar na ordem especificada na tabela;
14. Inserção de tuplas em tabelas
É possível adicionar diversas tuplas de uma só vez
em uma tabela:
Os atributos de cada uma serão definidos entre parênteses;
Depois dos parênteses deve-se separar usando vírgula;
INSERT INTO empregado (pnome, minicial,unome)
VALUES (‘Marcio', ‘M.', ‘Rezende'), (‘Mario', ‘L.',
‘Figueira')
15. Inserção de tuplas em tabelas
Podemos ainda inserir tuplas resultantes de uma consulta utilizando o
comando INSERT
Suponha que desejo criar uma tabela para armazenar o número de
empregados de cada departamento;
CREATE TABLE info_emp (
nome_dep varchar(15)
numero_emp int(10));
INSERT INTO info_emp (nome_dep, numero_emp)
SELECT dnome, count(*) FROM departamento, empregado WHERE
departamento.dnumero = empregado.dnumero GROUP BY dnome;
Esta tabela pode ser mantida apenas com restrições ON UPDATE
CASCADE?
Não. A manutenção desta tabela pode ser feita criando uma view (visão).
16. Inserção de tuplas em tabelas
É importante frisar que o controle de permitir ou não que um dado
INSERT possa ser efetivado no banco pode depender:
Do SGBD: caso ele implemente restrições de integridade
Do programador: caso contrário
Ex: Se o SGBD implementa NOT NULL, ele não irá permitir que um
comando INSERT seja efetivado com um dado campo sem nenhum valor.
Caso contrário, o programador não deverá permitir que um campo, em um
formulário por exemplo, possa ser nulo, ou neste caso terá que passar um
valor default para o banco;
17. Atualização de tuplas em tabelas
A atualização de valores de atributos de uma tupla é
feita utilizando o comando UDPATE:
UPDATE nometabela SET atributo1 = novovalor1,
atributo 2 = novovalor2 ... WHERE condicao
Deseja-se alterar o nome do departamento número 2 para
DCC. :
UPDATE departamento SET dnome = ‘DCC’ WHERE dnumero
= 2;
18. Atualização de tuplas em tabelas
Um único comando UDPATE pode alterar valores de várias
tuplas;
Suponha que se deseja aumentar o salário de todos os empregados da
do departamento ‘Exatas’ em 10%.
UPDATE empregado SET salario = salario*1.1 WHERE dnumero IN
(SELECT dnumero FROM departamento WHERE dnome = ‘Exatas’)
Neste caso, várias tuplas (referente a cada empregado que trabalha no
departamento ‘Exatas’) serão atualizadas em um só comando
UPDATE;
19. Atualização de tuplas em tabelas
Caso sejam definidas ações engatilhadas do tipo ON
UPDATE CASCADE as atualizações poderão ser propagadas
para outras tabelas;
Suponha a definição da seguinte ação engatilhada na restrição
de chave estrangeira na tabela empregado:
CONSTRAINT chaveestrangeiradep
FOREIGN KEY (dnumero) REFERENCES
empregado(dnumero)
ON DELETE SET NULL ON UPDATE CASCADE
20. Atualização de tuplas em tabelas
Neste caso, com a seguinte atualização da tabela
departamento:
UPDATE departamento SET dnumero = 2 WHERE
dnumero = 5
O que acontece?
Todas as tuplas na tabela empregado que tiverem
relacionadas com o departamento 5 terão seus valores do
campo ‘dnumero’ atualizados para 2;
21. Remoção de tuplas em tabelas
A remoção de tuplas de uma tabela é feita através do
comando DELETE:
DELETE FROM nometabela WHERE condicao
O número de tuplas deletadas depende das condições definidas
na cláusula WHERE.
Caso a cláusula WHERE não seja colocada, todas as tuplas da
tabela mencionada serão deletadas!
Entretanto, a tabela continuará no banco de dados (somente
DROP exclui uma tabela).
22. Remoção de tuplas em tabelas
Suponha que se deseja remover todos os empregados que
ganhem mais de 40.000 reais na empresa;
DELETE FROM empregado WHERE empregado.salario > 40.000;
Suponha que se deseja excluir todos os empregados do
departamento ‘Solos’;
DELETE FROM empregado WHERE empregado.dnumero IN
(SELECT dnumero FROM departamento WHERE
departamento.dnome = ‘Solos’)
23. Remoção de tuplas em tabelas
Da mesma forma que acontece com UPDATE:
Caso sejam definidas ações engatilhadas do tipo ON DELETE
CASCADE as exclusões poderão ser propagadas em outras tabelas;
Suponha a definição da seguinte ação engatilhada na restrição
de chave estrangeira na tabela dependente:
CONSTRAINT chaveestrangeiraemp
FOREIGN KEY (essn) REFERENCES empregado(ssn)
ON DELETE CASCADE ON UPDATE CASCADE
24. Remoção de tuplas em tabelas
Neste caso, com a seguinte exclusão na tabela
empregado:
DELETE FROM empregado WHERE ssn = 12345678;
Todas as tuplas na tabela dependente que tiverem
relacionadas com o empregado cujo ssn é
‘12345678’ serão deletadas;