Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
Dnome
Cidade
14
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
Tabela Empregado
Ecod
Enome
CPF
Salario
Cod_Dept
15
Enome
CPF
Salario
Cod_Dept
16
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
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
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
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
25
26
27
<Lista_de_colunas>
<Lista_de_tabelas>
<Condio>
28
29
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
Cor
branco
azul
vermelho
32
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
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
38
39
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
44
Operadores Aritmticos
Adio
Subtrao
Multiplicao
Diviso
+
*
/
45
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
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
53
54
55
56