Você está na página 1de 56

Ps-Graduao em Anlise e Projetos de Sistemas

Disciplina: Banco de Dados


Professor: Clayton Escouper das Chagas
6 aula

6 aula:
Tpicos de Manipulao e Administrao de Banco:
SQL (Structured Query Language) - DDL e DML:
Introduo
SQL como Linguagem de Definio de Dados (DDL)
SQL como Linguagem de Manipulao de Dados (DML)

Introduo
lgebra: usurio preocupa-se com a ordem que as
operaes devem ser executadas, preocupao com a
performance e otimizao
SQL: usurio apenas especifica qual o resultado
desejado atravs de uma consulta declarativa, deixando
a otimizao com o SGBD

Histrico:
- SEQUEL - Structured English Query Language
- Projetada e implementada no Centro de
Pesquisa da IBM como interface de um banco de
dados relacional experimental chamado System R

- ANSI (American National Standards Institute) e a


ISO (International Standards Organization)
juntaram esforos de pesquisa, originando a
verso SQL86, ou SQL 1
- SQL 2, aprovada em 1992 (SQL92)
- SQL 3, aprovada em 1999

SQL mais do que uma linguagem de consulta:


- Definio de dados: permite a definio da estrutura do
banco de dados
- Recuperao de dados: possibilita a recuperao dos
dados do banco
- Manipulao de dados: permite alteraes e excluses de
dados j existentes, bem como a adio de novos dados
- Controle de acesso: fornece meios para determinar o
controle de acesso de usurios aos dados do banco
- Compartilhamento de dados: coordena o acesso
concorrente de usurios, assegurando que um no interfira
no trabalho do outro
- Integridade de dados: permite definir restries de
integridade aos dados do banco

SQL como Linguagem de Definio de


Dados (DDL - Data Definition Language)
Declaraes SQL:
- Definio de dados
- Consulta a dados
- Update de dados
Pode-se embutir declaraes SQL em vrios tipos de
linguagens como C, C++, Java, etc

SQL como linguagem de definio da dados - DDL


Definio de dados - CREATE
Update de dados - ALTER
Remoo de dados - DROP

Instrues para definio do esquema da base de dados:


CREATE TABLE: cria uma nova tabela na base de dados,
especificando nome, atributos e restries
ALTER TABLE: altera definies de uma tabela
DROP TABLE: remove uma tabela, quando suas
definies no so mais necessrias

CREATE TABLE
- Colunas so especificadas primeiro, sob a forma:
<nomeCol> <domnio> <restrio>
- Depois chaves, integridade referencial e restries
de
integridade
CREATE TABLE <nome_da_tabela>
( <nome_da_col1> <tipo_da_col1> NOT NULL,
<nome_da_col2> <tipo_da_col2> NOT NULL,
...
PRIMARY KEY <lista_de_nomes_de_col>,
FOREIGN KEY <nomes_de_col>
REFERENCES <nome_tab_ref> (<nome_da_col_ref>)

);
10

Exemplo:
CREATE TABLE Fornecedor
( Fcod
INTEGER
Fnome
VARCHAR(20)
Status
INTEGER,
Cidade
VARCHAR(20)
);

NOT NULL,
NOT NULL,

Tabela Fornecedor:
Fcod

Fnome

Status

Cidade

11

Tipos para definio de colunas


SQL Padro
CHAR(tamanho)
CHARACTER(tamanho)
INT
INTEGER
SMALLINT
NUMERIC(preciso, escala)
DECIMAL(preciso, escala)
DEC(preciso, escala)
FLOAT(preciso)
REAL

SQL2 + SQL 3
VARCHAR(tamanho)
CHAR VARYING(tamanho)
CHARACTES VARYING(tamanho)
NCHAR(tamanho)
NATIONAL CHAR(tamanho)
NATIONAL CHARACTER(tamanho)
VARYING(tamanho)
BIT(tamanho)
BIT VARYING(tamanho)
DATE
TIME(preciso)
TIMESTAMP(preciso)
INTERVAL

DOUBLE PRECISION

12

Especificao de chaves:
- Primria:
PRIMARY KEY(<nomeColuna>),
- Estrangeira:
FOREIGN KEY(<nomeCol>) REFERENCES
<NomeTabRef>,
- Alternativa:
UNIQUE KEY(CPF),

(SQL2)

13

Exemplo com chave primria:


CREATE TABLE Departamento
( Dcod
INTEGER
NOT NULL,
Dnome
VARCHAR(20)
NOT NULL,
Cidade
VARCHAR(20),
PRIMARY KEY(Dcod));
Tabela Departamento
Dcod

Dnome

Cidade

14

Exemplo com chave primria composta:


CREATE TABLE Empregado
( Ecod
INTEGER
Enome
VARCHAR(40)
CPF
VARCHAR(15)
Salario
DECIMAL(7,2),
Cod_Dept
INTEGER
PRIMARY KEY(Ecod, Enome));

NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,

Tabela Empregado
Ecod

Enome

CPF

Salario

Cod_Dept

15

Exemplo com chave estrangeira (tabela Empregados):


CREATE TABLE Empregado
Opcional
(...
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept) REFERENCES
Departamento(Dcod),
Definido no SQL2
...
);
Tabela Empregado
Ecod

Enome

CPF

Salario

Cod_Dept

16

Assim, a tabela Empregado fica:


CREATE TABLE Empregado
( Ecod
INTEGER
NOT NULL,
Enome
VARCHAR(40)
NOT NULL,
CPF
VARCHAR(15)
NOT NULL,
Salario
DECIMAL(7,2),
Cod_Dept
INTEGER
NOT NULL,
PRIMARY KEY(Ecod, Enome),
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept) REFERENCES
Departamento(Dcod),
);

17

Restries - Constraint
O SQL2 trata as restries de forma uniforme: chave
primria, chave estrangeira, chave alternativa).
CREATE TABLE Produto
( Pcod
INTEGER
NOT NULL,
Pnome
VARCHAR(40)
NOT NULL,
Modelo
INTEGER
NOT NULL,
Cod_Dept
INTEGER
NOT NULL,
Nomes para
CONSTRAINT
ChPrimariaProd
PRIMARY KEY(Pcod),
CONSTRAINT
PertenceAo
FOREIGN KEY(Cod_Dept)
REFERENCES
Departamento(Dcod),
);

as restries

18

Restries e Valores Default:


Restries:
- NOT NULL: restries podem ser aplicadas a colunas
cujos valores no podem ser nulos
Valores Default:
- Adiciona-se a clusula DEFAULT <valor> logo aps a
restrio:
CREATE TABLE Empregado
(...
Esexo
CHAR(1)
...
);

NOT NULL DEFAULT F

Restrio
Definio do valor Default

19

Integridade Referencial
Cuidados:
- Quando colunas so excludas ou alteradas
- Quando o valor do atributo da chave estrangeira
modificado na tabela referenciada
Aes disparadas quando ocorrem violaes:
- SET NULL
- CASCADE

ON DELETE
ON UPDATE

20

Exemplo na tabela Empregado


CREATE TABLE Empregado
(...
FOREIGN KEY(Cod_Dept) REFERENCES
Departamento(Dcod)
ON DELETE SET NULL
ON UPDATE CASCADE,
...
);
Na remoo da linha que contm o valor da chave estrangeira,
setar nulo coluna (se a coluna admitir NULL)
Na alterao do valor da chave estrangeira, alterar em cascata as
chaves que referenciam este valor

21

Remoo de Tabelas:
DROP TABLE: elimina completamente a tabela, vazia
ou no
DROP TABLE <nome_da_tabela>
Ex: DROP TABLE Empregado;
Ateno: No h como recuperar uma tabela
removida

22

SQL2 inclui clusulas:


CASCADE: se existirem outros objetos que dependam
da tabela excluda sero excludos tambm
RESTRICT: exclui a tabela somente se no existirem
objetos do banco de dados que dependam da tabela
DROP TABLE Empregado CASCADE;

23

Alterao de Tabela:
ALTER TABLE <nome_da_tabela> <alterao>
EXEMPLOS:
ALTER TABLE Empregado
ADD Telefone VARCHAR(30),
ADD Sexo CHAR(1) SET DEFAULT F;
ALTER TABLE Departamento
ALTER Cidade VARCHAR(50);

24

ALTER TABLE Empregado


DROP PRIMARY KEY;
ALTER TABLE Empregado
DROP FOREIGN KEY TrabalhaEm;
Obs: A excluso de uma chave estrangeira s poder
ser feita se ela recebeu um nome quando foi definida
atravs de da diretiva CONSTRAINT

25

ALTER TABLE Empregado


ADD FOREIGN KEY(CodProf)
CONSTRAINT TemProfissoes
REFERENCES Profissoes;
ALTER TABLE Empregado
ALTER Sexo DROP DEFAULT;
ALTER TABLE Empregado
ALTER Sexo SET DEFAULT M;

26

SQL como Linguagem de Modelagem de


Dados (DML - Data Modelage Language)
Linguagem de Consulta
Linguagem de Atualizao

27

Sintaxe bsica de uma instruo de consulta:


SELECT
FROM
WHERE

<Lista_de_colunas>
<Lista_de_tabelas>
<Condio>

O resultado de uma consulta SQL uma relao ou


uma tabela (resultset)

28

Esquema dos exemplos:


Fornecedor
Cidade
Peca
Projeto
Fornecimento

(Fcod, Fnome, Status, Cidcod, fone)


(Ccod, Cnome, uf)
(Pcod, Pnome, Cor, Peso, Ccod)
(Prcod, Prnome, Ccod)
(Fcod, Pcod, Prcod, Quantidade)

29

Instrues bsicas da linguagem de consulta:


Recuperar cores utilizadas para peas
SELECT
FROM

Cor
Peca

30

Pcod
P1
P2
P3
P4
P5
P6

Pnome
cala
blusa
blusa
camiseta
saia
saia
Cor
branco
branco
azul
branco
azul
vermelho

Cor
branco
branco
azul
branco
azul
vermelho

Peso
1
0,6
0,6
0,8
0,3
0,3

Ccod
C4
C5
C1
C4
C4
C5

Tabela no banco
Resultado da consulta

Muita redundncia

31

Soluo para o problema: clusula DISTINCT


SELECT DISTINCT Cor
FROM
Peca

Cor
branco
azul
vermelho

A clusula DISTINCT executa a


operao da lgebra relacional
PROJEO, onde no h replicaes
dos dados: Cor (Peca)

32

Uso da expresso WHERE:


Operadores Lgicos: =, <>, <, <=, >, >=
<coluna> BETWEEN valor AND valor
<coluna> LIKE %banco de%
<coluna> LIKE 19_ _
- = um caracter
% = seqncia de caracteres

33

Exemplo:
Recuperar nomes de cidades fluminenses
Tabela com seu contedo
SELECT Cnome
Ccod
Cnome
uf
FROM Cidade
C1
Rio de Janeiro RJ
C2
Resende
RJ
WHERE uf = RJ;
C3
C4
C5
C6

Resultado

So Paulo
Terespolis
Porto Alegre
Manaus

SP
RJ
RS
AM

Cnome
Rio de Janeiro
Resende
Terespolis

34

SQL - Junes:
Quando a consulta SQL envolver duas tabelas
No SQL padro no h operao de juno natural, o
usurio especifica os atributos da juno
A clusula WHERE especifica os atributos usados para a
juno das duas tabelas

35

SQL - Exemplos de Junes


Selecionar os nomes e status de fornecedores do Rio de
Janeiro
SELECT Fnome, Status
FROM Fornecedor, Cidade
WHERE Cnome=Porto Alegre AND Ccod=Cidcod;
Quando h mais de uma tabela envolvida, na clusula WHERE,
deve aparecer uma condio de equivalncia entre as chaves destas
tabelas, isto indica os atributos de juno das tabelas

36

Exemplo:
Tabelas do Banco
Fcod
F3
F4
F1
F2
F5

Fnome
Ana
Pedro
Joo
Maria
Jos

Status
30
22
10
20
40

fone
12345678
12345679
12345671
12345672
12345673

Cidcod
C1
C3
C4
C4
C6

Ccod
C1
C2
C3
C4
C5
C6

Cnome
Rio de Janeiro
Resende
So Paulo
Terespolis
Porto Alegre
Manaus

uf
RJ
RJ
SP
RJ
RS
AM

Resultado
Fnome
Joo
Maria

Status
10
20

37

SQL - Exemplos de Junes


Nomes de fornecedores de Camiseta
SELECT Fnome
FROM Fornecedor, Peca, Fornecimento
WHERE Peca.Pcod=Fornecimento.Pcod AND
Fornecedor.Fcod=Fornecimento.Fcod
AND Pnome=Camiseta;
Atributos com o mesmo nome devem ser qualificados

38

SQL - Uso de aliases


Funcionario (Fcod, Fnome, Fsupervisor)
Selecionar nomes dos funcionrios e nomes de seus
clientes

SELECT F1.Fnome, F2.Fnome


FROM Funcionario F1, Funcionario F2,
WHERE F1.Fcod=F2.Fsupervisor

39

SQL - Uso do operador *


SELECT Fcod, Fnome, Status, Cidade
FROM Fornecedor
o mesmo que
SELECT *
FROM Fornecedor

40

Consultas aninhadas:
Uso da clusula IN ( ou NOT IN)
Indica se um valor est no resultado de outra consulta:
SELECT Prnome
FROM Prijeto
WHERE Icod
IN
(SELECT Icod
FROM Instituicao
WHERE I.nome=Empresa X);

41

Corresponde a:
SELECT Prnome
FROM Projeto P, Instituicao I
WHERE P.Icod = I.Icod AND I.Inome=Empresa X;

42

Campos Vazios
Pode-se testar atributos nulos
Uso de IS NULL (ou IS NOT NULL)
Recuperar os nomes de fornecedores cujo status foi
informado
SELECT Fnome
FROM Fornecedor
WHERE Status IS NOT NULL

43

Comparao de Strings
Uso do operador LIKE (ou NOT LIKE)
Selecionar o Status dos fornecedores da famlia Silva
SELECT Status
FROM

Fornecedor

WHERE Fnome LIKE %Silva%;


% = nr indeterminado de caracteres
_ = nr fixo de caracteres

44

Operadores Aritmticos
Adio
Subtrao
Multiplicao
Diviso

+
*
/

Aplicados diretamente a valores numricos ou a atributos


com domnio numrico

45

Operadores Aritmticos - Exemplo:


Mostrar os pesos das peas acrescidas de 10%

SELECT Pnome, 1.1 * Peso


FROM Peca

46

Funes Agregadas:
Mdia - AVG: Calcula a mdia dos valores no nulos de
uma coluna. O domnio da coluna deve ser numrico
Mximo e Mnimo - MAX e MIN: Encontra o valor mais alto
e mais baixo (respectivamente) de uma coluna. O domnio
da coluna deve ser numrico
Total - SUM: Soma os valores no nulos de uma coluna. O
domnio da coluna deve ser numrico

47

Funes Agregadas:
Contagem - COUNT: Conta o nmero de linhas no nulas
de uma coluna. COUNT(*) conta o nmero de linhas no
nulas de uma tabela.
Exemplo: Obter o nmero de peas no BD
SELECT COUNT(*)
FROM Peca
As funes podem ser aplicadas sobre toda a tabela
ou sobre grupos de linhas com a diretiva GROUP BY

48

SQL - Modelo estendido de consultas:


SELECT
<Lista_de_colunas>
FROM
<Lista_de_tabelas>
[WHERE
<Condio> ]
[GROUP BY <Lista_de_Colunas> ]
[HAVING
<Critrio> ]
[ORDER BY <Lista_de_colunas> ]

49

Agrupamento:
GROUP BY
Divide o resultado de uma consulta em grupos de tuplas
cujos valores das colunas especificadas so iguais
Obter o nmero de peas fornecidas para cada fornecedor
SELECT
Fcod, COUNT(Pcod)
FROM
Fornecimento
GROUP BY Fcod

50

Condio:
HAVING
Especifica uma condio que cada grupo deve satisfazer
Obter o nmero de peas fornecidas para cada fornecedor,
desde que a quantidade fornecida seja maior que 600
SELECT
Fcod, COUNT(Pcod)
FROM
Fornecimento
GROUP BY Fcod
HAVING
Quantidade > 600;

51

Ordenao:
ORDER BY
Ordena as linhas da tabela resultante, por defaullt, ordem
crescente, ou uso de DESC
SELECT Pnome, Peso, Cor
FROM Peca
WHERE Cor = vermelha
ORDER BY Pnome DESC

52

SQL - Comandos de Atualizao:


Instrues de atualizao do contedo
Inserir linhas na tabela: INSERT
Alterar dados na tabela: UPDATE
Excluir linhas da tabela: DELETE

53

Inserir linhas na tabela:


Comando INSERT
INSERT INTO <nome_tabela> [ ( <colunas> ) ]
VALUES ( <lista_de_valores> )
Exemplo:
INSERT INTO Peca
VALUES (P9, meia, azul, 0.3, Queimados);
INSERT INTO Peca (Pcod, Pnome, Cor, Peso, Cidade
VALUES (P10, cala, preta, 1.2, Petrpolis);

54

Alterar linhas da tabela:


Comando UPDATE
UPDATE <nome_tabela>
SET
<atrinuio>
WHERE <condio>
UPDATE Peca
SET Peso = 0.6
WHERE Pnome = Camiseta;

55

Excluir linhas das tabela:


Comando DELETE
DELETE FROM <nome_tabela>
[ WHERE <condio> ]
DELETE FROM Peca
DELETE FROM Peca
WHERE CIDADE = So Paulo;

56

Você também pode gostar