Documente Academic
Documente Profesional
Documente Cultură
Verso: 01
Pg. 1/134
Vigncia:
Data: 05/07/2011
Compilao
Contedo
Contedo.................................................................................................................. 2
Banco de dados relacional........................................................................................9
Modelagem de Dados...............................................................................................9
Entidade................................................................................................................9
Relacionamento....................................................................................................9
Tipos de relacionamento.....................................................................................11
Relacionamento um-para-um...........................................................................11
Relacionamento um-para-muitos.....................................................................11
Relacionamento muitos-para-muitos...............................................................11
............................................................................................................................12
Cardinalidade......................................................................................................12
Atributo............................................................................................................... 12
Chave Primria....................................................................................................13
Chave Estrangeira...............................................................................................13
Integridade Referencial.......................................................................................13
Deleo Restrita -> .........................................................................................14
Atualizao e Linha Restrita -> ......................................................................14
Operadores Relacionais..........................................................................................15
Sistema de Gerenciamento de Banco de Dados.....................................................19
O Utilitrio PL/SQL Developer.................................................................................20
Query Builder..................................................................................................... 20
A Linguagem SQL...................................................................................................21
Tipos de declaraes SQL.......................................................................................22
DDL (Data Definition Language)..........................................................................22
DML (Data Manipulation Language)....................................................................22
Funes aninhadas..............................................................................................49
Funes numricas.................................................................................................50
ROUND(coluna | literal, n)...................................................................................50
TRUNC(coluna | literal, n)....................................................................................50
CEIL(coluna | literal)............................................................................................51
FLOOR(coluna | literal)........................................................................................51
POWER(coluna | literal, n)...................................................................................51
EXP(coluna | literal).............................................................................................52
LOG(base, coluna | literal)...................................................................................52
LN(coluna | literal)...............................................................................................52
SQRT(coluna | literal)..........................................................................................52
SIGN(coluna | literal)...........................................................................................53
ABS(coluna | literal).............................................................................................53
MOD(valor1, valor2)............................................................................................54
Funes trigonomtricas.....................................................................................54
Funes hiperblicas...........................................................................................54
Funes que manipulam datas...............................................................................56
SYSDATE.............................................................................................................. 56
Aritmtica de datas.............................................................................................56
MONTHS_BETWEEN(data1,data2).......................................................................57
ADD_MONTHS(data, meses)................................................................................57
NEXT_DAY(data, dia_da_semana)........................................................................58
LAST_DAY(data)...................................................................................................58
ROUND(data).......................................................................................................58
TRUNC(data).......................................................................................................59
Funes de converso............................................................................................59
Formatos de Data................................................................................................59
TO_CHAR(nmero|data,['formato']).....................................................................61
Formatos Numricos...........................................................................................62
TO_NUMBER(cadeia_de_caracteres)....................................................................62
TO_DATE('cadeia_de_caracteres','formato')........................................................63
Funes que aceitam qualquer tipo de dado..........................................................63
DECODE(coluna|expresso,pes1,res1,[pes2,res2,...],default).............................63
NVL(coluna|valor, valor)......................................................................................65
GREATEST(coluna|valor, coluna|valor,...)............................................................66
LEAST(coluna|valor, coluna|valor,...)...................................................................66
VSIZE(coluna|valor).............................................................................................66
Funes aninhadas revisitadas...............................................................................67
Usando funes de grupo.......................................................................................68
A clusula GROUP BY...........................................................................................68
Excluindo linhas dos grupos................................................................................69
Grupos dentro de grupos.....................................................................................69
Funes disponveis de grupo.............................................................................70
Funes de grupo e resultados individuais..........................................................71
A clusula HAVING..............................................................................................72
Ordem das clusulas...........................................................................................74
Junes equivalentes..............................................................................................75
Produto................................................................................................................76
Junes no equivalentes....................................................................................77
Regra para juno de tabelas..............................................................................77
Sumrio da Sintaxe.............................................................................................77
Junes externas....................................................................................................79
Juno de uma tabela com ela mesmo................................................................79
Junes verticais................................................................................................. 80
Unio................................................................................................................... 80
Interseo........................................................................................................... 81
Subtrao............................................................................................................ 81
Combinao de operadores.................................................................................81
tabelas
colunas
linhas
Modelagem de Dados
Entidade
Pode ser entendida como uma coisa ou algo da realidade modelada onde
deseja-se manter informaes no banco de dados (BD). Por exemplo, em um
sistema escolar, algumas entidades podem ser os alunos, professores, horrio,
disciplinas e avaliaes. Note que uma entidade pode representar tanto objetos
concretos (alunos), quanto objetos abstratos (horrio). A entidade representada
por um retngulo, que contm o nome da entidade. Observe o exemplo abaixo.
Relacionamento
9
10
Tipos de relacionamento
Existem trs tipos de relacionamento entre entidades:
um-para-um
um-para-muitos
muitos-para-muitos
Relacionamento um-para-um
O relacionamento um-para-um usado quando uma entidade A se relaciona com
uma entidade B e vice-versa.
Este relacionamento representado pelo sinal: 1:1
Veja o exemplo:
Relacionamento um-para-muitos
O relacionamento um-para-muitos usado quando uma entidade A pode se
relacionar com uma ou mais entidades B.
Este relacionamento representado pelo sinal: 1:N
Veja o exemplo:
Relacionamento muitos-para-muitos
O relacionamento muitos-para-muitos usado quando vrias entidades A se
relacionam com vrias entidades B.
Este relacionamento representado pelo sinal: N:N ou N:M
11
Veja o exemplo:
Cardinalidade
A cardinalidade um conceito importante para ajudar a definir o relacionamento,
ela define o nmero de ocorrncias em um relacionamento.
Para determinar a cardinalidade, deve-se fazer a pergunta
relacionamento em ambas as direes. No exemplo a seguir, temos:
relativa
ao
Atributo
12
Cardinalidade do atributo
Observe que o modelo acima no informa se determinado aluno pode ter vrios
telefones, ou mesmo se algum aluno pode no ter telefones. Para deixar o modelo
mais preciso, costumamos expressar cardinalidade para os atributos. Observe a
cardinalidade do atributo telefone no modelo abaixo:
Dessa forma, podemos concluir que determinado aluno pode no ter telefone
(cardinalidade mnima zero) ou pode ter vrios (cardinalidade mxima N). A
cardinalidade dos atributos cdigo e nome (1,1)
Chave Primria
Em toda e qualquer tabela existente em um banco de dados relacional haver
sempre uma coluna ou um conjunto de colunas concatenadas, cujos valores so
nicos na tabela, isto e, nunca se repete aquele valor em nenhuma outra linha da
tabela.
Essa coluna ou conjunto de colunas concatenadas identifica uma nica linha da
tabela. Entao dizemos que essa coluna ou conjunto de colunas forma a chave
primaria da tabela.
Chave Estrangeira
Uma tabela relacional e uma estruturao dos dados por assunto, organizada em
tabelas com linhas e colunas, e cada linha e a representao de uma ocorrncia
de um objeto, um assunto, descrita por valores em cada coluna.
Dessas colunas j sabemos que uma ou um conjunto delas forma o que definimos
como o identificados nico de cada linha que e a chave primaria da tabela.
Integridade Referencial
13
14
Operadores Relacionais
Seleo/Restrio
Projeo
Unio
Interseo
Diferena
Produto
Juno
15
Seleo/Restrio
Projeo
Unio
16
Interseo
Diferena
17
18
19
Query Builder
A criao de declaraes SELECT ou a modificao de declaraes j existentes se
tornam rpidas e eficientes. Simplesmente clique e arraste tabelas e views,
selecione colunas, crie, de modo fcil, clausulas WHERE e ORDER BY, faa join de
tabelas baseadas em foreing key e pronto sua consulta j esta criada.
20
A Linguagem SQL
A linguagem SQL a ferramenta bsica para acesso aos dados de um
banco de dados relacional. Foi desenvolvida inicialmente nos laboratrios
da IBM (1976) sendo atualmente um padro para os SGBD relacionais.
Apesar de existirem alguns padres da linguagem SQL, a maioria dos
fabricantes de banco de dados criou suas prprias extenses para
explorar as caractersticas do banco de dados como o caso da Oracle com
o PL/SQL.
A SQL considerada como sendo uma linguagem no procedural uma
vez que ela processa conjunto de registros e fornece acesso ou navegao
automtica de dados. A base para esta linguagem a lgebra relacional,
muito embora existam diversas caractersticas importantes
que no
pertencem a lgebra relacional.
Na verdade, a SQL padro deve ser considerada como uma
sublinguagem, uma vez que no possui comandos ou declaraes que
permitam o controle de repeties ou de desvios condicionais e
incondicionais. Para este tipo de controle a Oracle desenvolveu o PL/SQL
que consiste em uma extenso da SQL padro.
21
Coman
Funo
do
Create
Table
Create
Index
Cria um ndice
Alter Table
Drop Table
Drop Index
Grant
Elimina um ndice
Concede privilgios de acesso p/a
um usurio
22
Coman
Funo
do
Select
Insert
Delete
Update
Commit
Rollback
Usar uma regra consistente para atribuir nomes. Uma regra pode ser,
todas as tabelas do sistema financeiro comeam com FIN_.
23
Contedo
CHAR(n)
VARCHAR(n)
VARCHAR2(n)
LONG
Caracteres alfanumricos com at 2 GigaBytes (2**31 1). S pode haver uma coluna LONG por tabela. No
pode ser indexada. No podem ser especificadas
restries de integridade, exceto NOT NULL.
RAW(n)
LONG RAW
ROWID
MLSLABEL
NUMBER(p,s)
DATE
FLOAT
24
Restries (constrains)
So recursos proporcionados pelo SGBD para implementar regras de
consistncia bsicas para os dados de uma tabela.
Restrio
Descrio
CONSTRAINT
nome_da_restri
o
NULL
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
(coluna...)
REFERENCES
tabela(col(s))
CHECK condio
DISABLE
(ENABLE)
EXCEPTIONS
INTO
25
SQL> SELECT *
2 FROM EMP
26
EMPNO ENAME
JOB
MGR HIREDATE
SAL COMM DEPTNO
------- ---------- --------- ------- --------- ------- ------- ------7369 SMITH
CLERK
7902 13-JUN-83
800
20
7499 ALLEN
SALESMAN
7698 15-AUG-83 1600
300
30
7521 WARD
SALESMAN
7698 26-MAR-84 1250
500
30
7566 JONES
MANAGER
7839 31-OCT-83 2975
20
7654 MARTIN
SALESMAN
7698 05-DEC-83 1250 1400
30
7698 BLAKE
MANAGER
7839 11-JUN-84 2850
30
7782 CLARK
MANAGER
7839 14-MAY-84 2450
10
7788 SCOTT
ANALYST
7566 05-MAR-84 3000
20
7839 KING
PRESIDENT
09-JUL-84 5000
10
7844 TURNER
SALESMAN
7698 04-JUN-84 1500
0
30
7876 ADAMS
CLERK
7788 04-JUN-84 1100
20
7900 JAMES
CLERK
7698 23-JUL-84
950
30
7902 FORD
ANALYST
7566 05-DEC-83 3000
20
7934 MILLER
CLERK
7782 21-NOV-83 1300
10
14 rows selected.
Expresses aritmticas
Uma expresso a combinao de um ou mais valores, operadores e funes, que
resultam em um valor calculado.
ENAME
SAL*12 COMM
---------- ------- ------SMITH
9600
ALLEN
19200
300
WARD
15000
500
JONES
35700
MARTIN
15000 1400
BLAKE
34200
CLARK
29400
SCOTT
36000
KING
60000
TURNER
18000
0
ADAMS
13200
27
JAMES
FORD
MILLER
11400
36000
15600
28
Para mostrar como ttulo da coluna SALARIO ANUAL no lugar de SAL*12, podemos
escrever:
Nota: somente na clusula SELECT o Alis pode ser usado, nas outras clusulas
no.
29
O operador de concatenao
O operador de concatenao (||) permite juntar colunas, expresses aritmticas,
ou valores constantes, para criar uma expresso do tipo caracter. Colunas dos dois
lados do operador so combinadas para formar uma s coluna.
EMPREGADO
-------------------------------------------------7369SMITH
7499ALLEN
7521WARD
7566JONES
7654MARTIN
7698BLAKE
7782CLARK
7788SCOTT
7839KING
7844TURNER
7876ADAMS
7900JAMES
7902FORD
7934MILLER
14 rows selected.
Literais
Um literal qualquer caracter, expresso, ou nmero, incluido na clusula SELECT,
que no um nome ou Alis da coluna.
30
31
ADAMS
JAMES
FORD
MILLER
14 rows selected.
Para calcular o resultado corretamente, deve ser utilizada a expresso NVL, que
converte um valor nulo em um valor no nulo, conforme mostrado abaixo:
a)
uma expresso
b)
um valor no nulo
NVL(ColunaData, 01-jan-84')
NVL(ColunaNumero, 9)
32
NVL(ColunaCaracter, alfanumrico')
Para eliminar as linhas duplicadas, deve ser includa a palavra DISTINCT aps o
SELECT.
33
10
10
20
20
20
30
30
30
MANAGER
PRESIDENT
ANALYST
CLERK
MANAGER
CLERK
MANAGER
SALESMAN
- Caracteres:
ordem alfabtica
34
Para reverter esta ordem, pode ser utilizada a palavra DESC aps o nome da
coluna, na clusula ORDER BY.
Para listarmos os funcionrios mais novos antes dos mais antigos fazemos:
possvel efetuar a ordenao por mais de uma coluna, sendo algumas em ordem
ascendente e outras em ordem descendente.
35
Critrios de pesquisa
Os critrios de pesquisa so informados na clusula WHERE, que corresponde ao
operador Restrio da lgebra relacional. Nesta clusula esto estabelecidos os
critrios necessrios para uma linha poder ser selecionada.
- Um nome de coluna
- Um operador de comparao
- Um nome de coluna, constante, ou lista de valores
igual
>
maior
>=
maior ou igual
<
menor
<=
menor ou igual
<>
36
ENAME
EMPNO JOB
---------- ------- --------- ------SMITH
7369 CLERK
ADAMS
7876 CLERK
JAMES
7900 CLERK
MILLER
7934 CLERK
DEPTNO
20
20
30
10
Para listar o nome e o nmero dos departamentos com nmero maior que 20,
usamos:
Existem quatro operadores SQL, que operam sobre todos os tipos de dados.
LIKE
IS NULL
valor nulo
37
ALLEN
WARD
MARTIN
TURNER
ADAMS
MILLER
1600
1250
1250
1500
1100
1300
SAL
MGR
------800 7902
3000 7566
1100 7788
3000 7566
Para listarmos todos os empregados cujos nomes comeam com a letra "S",
usamos:
SQL> SELECT ENAME
2 FROM EMP
3 WHERE ENAME LIKE 'S%'
ENAME
---------SMITH
SCOTT
ENAME
38
---------WARD
KING
FORD
!=
^=
<>
no igual
NOT NomeDaColuna =
no igual a
no maior do que
NOT BETWEEN
NOT IN
NOT LIKE
no semelhante ao modelo
IS NOT NULL
no nulo
Para listar os empregados com salrios fora da faixa de 1000 a 2000, usamos:
39
BLAKE
CLARK
SCOTT
KING
JAMES
FORD
2850
2450
3000
5000
950
3000
8 rows selected.
x <> NULL
x = NULL
40
sempre falso. Nulo nunca igual a nada nem diferente de nada, nem a outro
nulo.
Para listar todos os CLERKs com salrio entre 1000 e 2000, usamos:
SAL
1100
1300
Para listar os funcionrios que so CLERK, ou que recebem entre 1000 e 2000,
usamos:
41
7654
7844
7876
7900
7934
MARTIN
SALESMAN
1250
TURNER
SALESMAN
1500
ADAMS
CLERK
1100
JAMES
CLERK
950
MILLER
CLERK
1300
Quando aparecem tanto ANDs quanto ORs em uma expresso lgica, todos os
ANDs so processados antes que os ORs sejam processados.
Uma vez que AND tem precedncia sobre OR, a consulta abaixo retorna todos os
gerentes com salrio maior do que 1500, e todos os vendedores.
c) AND
d) OR
SQL> SELECT *
2 FROM EMP
3 WHERE JOB = MANAGER' OR (JOB = CLERK' AND DEPTNO = 10)
EMPNO ENAME
JOB
MGR HIREDATE
SAL COMM DEPTNO
------- ---------- --------- ------- --------- ------- ------- ------7566 JONES
MANAGER
7839 31-OCT-83 2975
20
7698 BLAKE
MANAGER
7839 11-JUN-84 2850
30
7782 CLARK
MANAGER
7839 14-MAY-84 2450
10
7934 MILLER
CLERK
7782 21-NOV-83 1300
10
FROM
tabela
WHERE
condies
ORDER BY
43
UPPER(coluna | literal)
Transforma letras minsculas em maisculas.
INITCAP(coluna | literal)
Transforma a primeira letra da palavra em maiscula e as demais
minsculas.
44
45
"A" quanto a letra "S". Na quarta coluna foram removidas as letras "A", "S", "O" e
"P" esquerda.
SOUNDEX(coluna | literal)
Retorna uma seqncia de caracteres que representa o som das palavras contidas
na coluna ou no literal.
LENGTH(coluna | literal)
Retorna o nmero de caracteres (ou dgitos) na coluna ou literal especificados.
LENGTH(DNAME)
47
12
12
12
12
2
2
2
2
10
8
5
10
No exemplo abaixo foram trocados os caracteres "C" por "P" nos nomes dos
funcionrios.
No exemplo abaixo foram trocados "A" por "I", e "R" por "T", nos cargos.
48
JOB
REPLACE(JOB,'SALESMAN','VENDEDOR')
--------- ---------------------------------------CLERK
CLERK
SALESMAN VENDEDOR
SALESMAN VENDEDOR
MANAGER MANAGER
SALESMAN VENDEDOR
MANAGER MANAGER
MANAGER MANAGER
ANALYST ANALYST
PRESIDENT PRESIDENT
SALESMAN VENDEDOR
CLERK
CLERK
CLERK
CLERK
ANALYST ANALYST
CLERK
CLERK
14 rows selected.
Funes aninhadas
As funes que operam sobre uma nica linha podem ser aninhadas, sendo que
neste caso as funes internas so executadas antes das externas.
49
Funes numricas
ROUND(coluna | literal, n)
Arredonda o valor da coluna ou do literal na n-sima casa decimal. Se n for
negativo eqivale s dezenas. Se n for omitido eqivale a um nmero inteiro.
TRUNC(coluna | literal, n)
Trunca o valor da coluna ou do literal na n-sima posio.
50
CEIL(coluna | literal)
Retorna o menor inteiro maior ou igual ao valor da coluna ou do literal.
FLOOR(coluna | literal)
Retorna o maior inteiro menor ou igual ao valor da coluna ou literal.
POWER(coluna | literal, n)
Eleva a coluna ou literal a n-sima potncia.
51
EXP(coluna | literal)
Eleva e (2.71828183...) coluna ou literal.
SELECT EXP(4)
FROM DUAL
EXP(4)
---------54.59815
1 row selected.
SELECT LOG(10,100)
FROM DUAL
LOG(10,100)
----------2
1 row selected.
LN(coluna | literal)
Calcula o logaritmo neperiano da coluna ou do literal.
SELECT LN(95)
FROM DUAL
LN(95)
---------4.55387689
SQRT(coluna | literal)
Retorna a raiz quadrada da coluna ou do literal.
52
SAL
SQRT(SAL)
SQRT(40)
SQRT(COMM)
---- ----------------- ----------------- ----------------1600
40 6.324555320336759 17.32050807568877
1250 35.35533905932738 6.324555320336759 22.3606797749979
1250 35.35533905932738 6.324555320336759 37.41657386773941
SIGN(coluna | literal)
Retorna -1 se o valor da coluna ou do literal for negativo, retorna 0 se for igual a
zero, ou retorna 1 se for maior do que zero.
SIGN(COMM-SAL)
ABS(coluna | literal)
Retorna o valor absoluto da coluna ou do literal.
53
2850
1500
950
-1500
1500
MOD(valor1, valor2)
Retorna o resto da diviso de valor1 por valor2.
Funes trigonomtricas
Calculam o seno (SIN), coseno (COS), e tangente (TAN) da coluna ou literal.
SELECT SIN(30*3.141592654/180),
COS(60*3.141592654/180),
TAN(45*3.141592654/180)
FROM DUAL
SIN(30*3.1
COS(60*3.1
TAN(45*3.1
---------------------------.5
.5
1
Funes hiperblicas
Calculam o seno hiperblico (SINH), coseno hiperblico (COSH) e tangente
hiperblica (TANH) da coluna ou literal.
-------
COSH(0)
----------
TANH(.5)
54
1.17520119
.462117157
55
Aritmtica de datas
Datas podem ser somadas ou subtradas de outras datas, ou de valores
numricos.
data+nmero
data-nmero
data-data
data+nmero/24
56
MONTHS_BETWEEN(data1,data2)
Retorna o nmero de meses decorridos entre data1 e data2.
ADD_MONTHS(data, meses)
Adiciona o nmero de meses especificados data.
57
NEXT_DAY(data, dia_da_semana)
Data do prximo dia da semana aps data.
LAST_DAY(data)
Retorna a data do ltimo dia do ms da data especificada.
ROUND(data)
ROUND(data, 'MONTH')
ROUND(data, 'YEAR')
ROUND(data) retorna a data com a indicao da hora como sendo zero horas
(meia noite). At o meio dia retorna a mesma data, aps o meio dia retorna o dia
seguinte. Esta funo til quando so comparadas datas com horas diferentes.
58
TRUNC(data)
TRUNC(data, 'MONTH')
TRUNC(data, 'YEAR')
Funes de converso
Formatos de Data
Formato
Significado
CC ou SCC
YYYY ou SYYYY
YYY, YY, Y
59
Y,YYY
YEAR ou SYEAR
BC ou AD
B.C. ou A.D.
MM
Ms
Month
MON
WW ou W
Semana do ano ou do ms
DDD, DD, D
DAY
DY
AM ou PM
Indicador de meridiano
A.M. ou P.M.
HH ou HH12
HH24
MI
Minuto
SS
Segundo
SSSS
/., etc...
"..."
Notas:
1 - O prefixo 'fm' (fill mode) antes de MONTH ou DAY suprime os espaos direita
60
4 - O sufixo 'SPTH' para nmeros ordinais por extenso ("DDSPTH" para "FOURTH")
TO_CHAR(nmero|data,['formato'])
Converte nmero ou data em caracter no formato especificado.
A funo TO_CHAR pode ser usada para extrair a hora do dia apenas.
61
TO_CHAR(SAL,'$9,999')
--------------------$800
$1,600
$1,250
$2,975
$1,250
$2,850
$2,450
$3,000
$5,000
$1,500
$1,100
$950
$3,000
$1,300
14 rows selected.
Formatos Numricos
Format
o
Significado
Exemplo
999999
1234
zeros esquerda
099999
001234
cifro esquerda
$99999
$1234
999999.99
999,999
1,234
MI
099999MI
1234-
PR
999999PR
(1234)
EEEE
notao cientfica
99.999EEE
E
1.234E+0
3
9999V99
123400
B9999.99
1234.00
1234.00
TO_NUMBER(cadeia_de_caracteres)
Converte a cadeia de caracteres, que deve conter um nmero, em um valor
numrico.
62
TO_DATE('cadeia_de_caracteres','formato')
Retorna a data contida na cadeia de caracteres conforme o formato especificado.
Se o formato for omitido ser assumido DD-MON-YY.
Argumentos:
res1
pes2
res2
pes1
pes2
default
for diferente
Notas:
O exemplo abaixo causa um erro porque ename (caracter) tem tipo diferente do
terceiro argumento sal (numrico).
NVL(coluna|valor, valor)
65
GREATEST(coluna|valor, coluna|valor,...)
Retorna o maior dos valores de uma lista de valores.
LEAST(coluna|valor, coluna|valor,...)
Retorna o menor dos valores de uma lista de valores.
SQL> SELECT LEAST(1000,2000), LEAST(SAL,COMM)
2 FROM EMP
3 WHERE DEPTNO = 30
LEAST(1000,2000) LEAST(SAL,COMM)
----------------- ----------------1000
300
1000
500
1000
1250
1000
1000
0
1000
VSIZE(coluna|valor)
66
VSIZE(ENAME)
67
Note que toda a tabela EMP foi tratada como um nico grupo.
Uma funo de grupo pode ser aplicada sobre um subconjunto das linhas usando a
clusula WHERE.
A clusula GROUP BY
A clusula GROUP BY utilizada para dividir as linhas das tabelas em grupos.
Funes de grupo podem ser utilizadas para retornar informaes sumarizadas
para cada grupo.
68
69
10
10
10
20
20
20
30
30
30
CLERK
MANAGER
PRESIDENT
ANALYST
CLERK
MANAGER
CLERK
MANAGER
SALESMAN
1300
2450
5000
3000
950
2975
950
2850
1400
9 rows selected.
Valor retornado
AVG
([DISTINCT|ALL]n)
COUNT
([DISTINCT|ALL]exp*)
MAX
([DISTINCT|ALL]exp)
MIN
([DISTINCT|ALL]exp)
STDDEV
([DISTINCT|ALL]n)
SUM
([DISTINCT|ALL]n)
VARIANCE
([DISTINCT|ALL]n)
70
Podem ser fornecidas expresses dos tipos caracter, nmero ou data quando 'exp'
estiver indicado. Quando 'n' estiver indicado, somente valores numricos so
aceitos.
A clusula HAVING
Somente os grupos que atendem as condies especificadas na clusula HAVING
so selecionados. A clusula HAVING opera sobre a clusula GROUP BY de maneira
semelhante a que a clusula WHERE opera sobre a clusula SELECT.
Para mostrar o salrio mdio dos departamento que possuem mais de trs
funcionrios:
Embora a clusula HAVING possa ser escrita antes da clusula GROUP BY, a leitura
torna-se mais fcil quando a clusula HAVING aparece aps a clusula GROUP BY.
Os grupos so formados e as funes de grupo so calculadas antes da clusula
HAVING ser aplicada.
73
lista_de_colunas
FROM
lista_de_tabelas
WHERE
condies_de_linha
GROUP BY
lista_de_colunas
HAVING
condies_de_grupo
ORDER BY
lista_de_colunas
So avaliados:
WHERE
GROUP BY
HAVING
74
Junes equivalentes
Para levantar, manualmente, o nome do departamento em que um funcionrio
trabalha, primeiro seria levantado na tabela EMP o nmero do departamento do
empregado, e, em seguida, seria levantado na tabela DEPT o nome
correspondente ao nmero do departamento. Este relacionamento entre as duas
tabelas chamado de juno equivalente (equi-join), uma vez o nmero do
departamento nas duas tabelas o mesmo.
As linhas da tabela EMP foram combinadas com as linhas da tabela DEPT para
obteno dos nmeros dos departamentos.
Todas as colunas podem ser prefixadas com o nome da tabela, porm este
procedimento s obrigatrio quando existe ambigidade.
75
Alis para nomes de tabelas podem ser usado de forma semelhante que foi
usada para alis de nomes de colunas. O nome do alis escrito aps o nome da
tabela. No exemplo abaixo foi utilizado o alis 'E' para a tabela EMP, e o alis 'D'
para a tabela DEPT.
Produto
Quando a condio de juno invlida ou omitida completamente, o resultado
um Produto Cartesiano, e todas as combinaes de linha sero retornadas.
76
Junes no equivalentes
O relacionamento entre as tabelas EMP e SALGRADE formam uma juno no
equivalente, uma vez que no existe nenhuma coluna comum s duas tabelas. No
exemplo, a funo BETWEEN ... AND ... faz o relacionamento entre as duas
tabelas.
Sumrio da Sintaxe
SELECT
FROM
tabela [alias],...
WHERE
[condio de juno]...
77
AND
[condio de linha]...
OR
GROUP BY
{expresso|coluna}
HAVING
{condio de grupo}
ORDER BY
{expresso|coluna} [ASC|DESC]
78
Junes externas
Se uma linha no satisfaz a condio de juno, ento a linha no mostrada no
resultado da consulta. De fato, quando fazemos a juno equivalente (equi-join)
das tabelas EMP e DEPT, o departamento 40 no aparece, uma vez que no h
nenhum empregado lotado neste departamento.
79
Note que EMP aparece na clusula FROM duas vezes, uma com o alis 'E', para os
empregados, e outra com o alis 'G', para os gerentes.
Junes verticais
Os operadores UNION, INTERSECT e MINUS so teis para construir consultas que
se referem a tabelas diferentes. Estes operadores combinam os resultados de dois
ou mais SELECTs em um nico resultado.
Unio
O operador UNION retorna todas as linhas distintas das consultas unidas por este
operador. No exemplo so listados todos os cargos dos departamentos 10 e 30
sem repetio.
80
--------CLERK
MANAGER
PRESIDENT
SALESMAN
Interseo
O operador INTERSECT retorna apenas as linhas comuns s duas consultas. Para
listar os cargos existentes tanto no departamento 10 quanto no departamento 30:
Subtrao
O operador MINUS retorna as linhas presentes na primeira consulta mas no
presentes na segunda consulta. Para listar os cargos existentes no departamento
10 mas no existentes no departamento 30:
Combinao de operadores
possvel a construo de consultas com operadores UNION, INTERSECT e MINUS
combinados. Quando isto feito a execuo efetuada de cima para baixo, porm
podem ser utilizados parnteses para alterar esta ordem.
81
A clusula ORDER BY
Como as colunas das tabelas podem ter nomes diferentes quando usamos UNION,
INTERSECT e MINUS, o nome da coluna no pode ser usado na clusula ORDER BY
quando estes operadores so utilizados. Ao invs do nome deve ser usado o
nmero da coluna, como mostrado abaixo:
83
Por exemplo:
SELECT
coluna1, coluna2
FROM
tabela
WHERE
Antes da consulta interna que retorna apenas um valor, podem ser usados os
operadores =, <, >, <=, >=, <>.
O cargo de BLAKE obtido pela consulta interna e utilizado pela consulta principal.
SAL DEPTNO
85
Note que a consulta interna tem uma clusula GROUP BY, e portanto retorna mais
de um valor. Neste caso o operador IN deve ser usado para tratar a lista de
valores.
Nesta nova consulta, retornado um par de colunas que comparado com um par
de colunas da consulta principal.
Note que as colunas esquerda da condio de procura esto entre parnteses e
so separadas por vrgulas.
As colunas listadas na consulta interna devem estar na mesma ordem das colunas
esquerda da condio de procura.
86
ANY compara o valor com cada valor retornado pela consulta interna.
87
WARD
MARTIN
ADAMS
1250 SALESMAN
1250 SALESMAN
1100 CLERK
30
30
20
12 rows selected.
Quando usamos ANY geralmente usamos DISTINCT para reduzir a lista de valores
a serem comparados.
ALL compara o valor com todos os valores retornados pela consulta interna.
89
Para encontrar os empregados que recebem mais do que o salrio mdio de seus
departamentos:
Consulta principal
90
Consulta Interna
O operador EXISTS
O operador EXISTS freqentemente usado com consultas aninhadas
correlacionadas, testando se o valor existe. Se o valor existir, retorna verdadeiro,
caso contrrio retorna falso.
91
7788 SCOTT
7839 KING
7902 FORD
ANALYST
PRESIDENT
ANALYST
20
10
20
6 rows selected.
Note que neste exemplo a consulta interna no precisa retornar nada, porm a
clusula SELECT precisa de uma coluna, mesmo que seja um literal.
Exemplos de restries
Tabela SAL no permitindo salrio nulo.
ALTER TABLE EMP MODIFY (SAL NUMBER CONTRAINT NN_SAL NOT NULL)
93
Tabela DEPT com nome do departamento nico definido como restrio de tabela.
CREATE TABLE DEPT (
DEPTNO
NUMBER(2) NOT NULL,
DNAME
CHAR(14),
LOC
CHAR(13),
CONSTRAINT UNQ_DNAME UNIQUE (DNAME)
USING INDEX PCTFREE 20 TABLESDPACE TBLSP_DEPT
STORAGE (INITIAL 8K NEXT 6K))
DNAME
LOC
CONSTRAINT CHECK_DEPTNO
CHECK (DEPTNO BETWEEN 10 AND 99)
DISABLE,
CHAR(14)
CONSTRAINT CHECK_DNAME
CHECK(DNAME=UPPER(DNAME))
DISABLE,
CHAR(13)
CONSTRAINT CHECK_LOC
CHECK (LOC IN ('DALLAS','BOSTON',...))
DISABLE)
94
AS SELECT...
Exemplo:
95
EMPNO ENAME
JOB
MGR HIREDATE
SAL COMM DEPTNO
------- ---------- --------- ------- --------- ------- ------- ------7369 SMITH
CLERK
7902 13-JUN-83
800
20
7499 ALLEN
SALESMAN
7698 15-AUG-83 1600
300
30
7521 WARD
SALESMAN
7698 26-MAR-84 1250
500
30
7566 JONES
MANAGER
7839 31-OCT-83 2975
20
7654 MARTIN
SALESMAN
7698 05-DEC-83 1250 1400
30
7698 BLAKE
MANAGER
7839 11-JUN-84 2850
30
7782 CLARK
MANAGER
7839 14-MAY-84 2450
10
7788 SCOTT
ANALYST
7566 05-MAR-84 3000
20
7839 KING
PRESIDENT
09-JUL-84 5000
10
7844 TURNER
SALESMAN
7698 04-JUN-84 1500
0
30
7876 ADAMS
CLERK
7788 04-JUN-84 1100
20
7900 JAMES
CLERK
7698 23-JUL-84
950
30
7902 FORD
ANALYST
7566 05-DEC-83 3000
20
7934 MILLER
CLERK
7782 21-NOV-83 1300
10
14 rows selected.
Como pode ser visto, as duas tabelas tem exatamente a mesma estrutura e o
mesmo contedo.
96
CLARK
SCOTT
FORD
KING
2450
3000
3000
5000
4
4
4
5
14 rows selected.
Para alterar a tabela empregados e garantir todos tenham salrio inferior a 5000:
97
98
Comment created.
Removendo tabelas
As tabelas podem ser removidas do banco de dados atravs do comando:
99
Table created.
100
SQL> SELECT *
2 FROM DEPARTMENT
3 ORDER BY DEPTNO
DEPTNO DNAME
LOC
------- -------------- ------------10 ACCOUNTING
NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
50 MARKETING
SAN JOSE
60
ALBERTA
70
DETROIT
80 RESEARCH
ATLANTA
90 INSURANCE
LONDON
9 rows selected.
Quando uma data inserida, o formato DD-MON-YY geralmente usado. Com este
formato, o sculo padro o sculo 20 (19xx). O campo data tambm contm
informao de hora, que quando no especificada assume o valor padro de
zero horas (00:00:00).
101
6 'ANALYST',
7 7566,
8 TO_DATE('24/06/2084 9:30','DD/MM/YYYY HH:MI'),
9 3000,
10 NULL,
11 20)
1 row created.
Para exemplo de insero de valores a partir de uma outra tabela ser criada a
tabela SALARY_GRADE a partir da tabela SALGRADE.
SQL> SELECT *
2 FROM SALARY_GRADE
no rows selected
SQL> SELECT *
2 FROM SALARY_GRADE
GRADE LOSAL HISAL
------- ------- ------1
700 1200
102
UPDATE
nome_da_tabela [alis]
SET
[WHERE
condio]
103
ALLEN
VENDEDOR
MARTIN
VENDEDOR
SCOTT
VENDEDOR
TURNER
VENDEDOR
WARD
VENDEDOR
15 rows selected.
104
Viso
O que uma viso
*0 Uma viso como uma janela atravs da qual os dados das tabelas
podem ser vistos e alterados.
*1 Uma viso derivada de uma tabela ou de outra viso, a qual
chamada de tabela ou viso base. - uma tabela real com os dados
fisicamente armazenados.
*2 Uma viso armazenada na forma de um comando SELECT apenas.
uma tabela virtual, ou seja, uma tabela que no existe fisicamente no
banco de dados, mas parece existir.
*3 Uma viso no tem dados prprios. Os dados so manipulados a
partir das tabelas base.
Vises so teis pelas seguintes razes:
Vises simples
*7 dados derivados de uma nica tabela
*8 no contm funes ou dados grupados.
Vises complexas
*9 dados derivados de mltiplas tabelas
105
*10
Para criar uma viso simples chamada D10EMP, a partir da tabela EMP, contendo
certos detalhes dos funcionrios do departamento 10:
SQL> SELECT *
2 FROM D10EMP
EMPNO ENAME
DEPTNO
------- ---------- ------7782 CLARK
10
7839 KING
10
7934 MILLER
10
Note que nomes alternativos para as colunas foram especificados na viso, o que
necessrio quando os itens da clusula Select no esto de acordo com as
regras para nomes de colunas, ou se alguma coluna derivada de uma funo ou
expresso.
107
*11
*12
*13
Converter a consulta da viso em uma operao equivalente
sobre a(s) tabela(s) base.
Atravs da viso USER_VIEWS do dicionrio de dados, a definio da viso pode
ser recuperada. Alguns parmetros SET influenciam no texto mostrado:
*14
Maxdata
*15
Arraysize
*16
Long
EMP_DATA
EMP_DETAILS
SALES
109
PRODUCT.PRODID,
DESCRIP PRODNA
*17
Juno.
*18
Funes de grupo.
*19
*20
Clusula DISTINCT.
*21
Coluna ROWNUM.
*22
Sub-consulta correlacionada.
*23
*24
*25
*26
Eliminao de vises
As vises so eliminadas atravs do comando DROP VIEW nome_da_viso.
110
111
Uma vez criado, o ndice ser utilizado pelo Oracle, sempre que for possvel, para
acelerar o acesso aos dados. Note que os ndices so utilizados automaticamente,
sem requerer qualquer ao por parte do usurio, que nem precisa saber da
existncia dos ndices.
Tipos de ndices
UNIQUE
NON UNIQUE
SINGLE COLUMN
CONCATENATED
113
SELECT
FROM
EMP
114
SELECT
FROM
EMP
WHERE
ENAME = JONES
SELECT
FROM
EMP
WHERE
UPPER(ENAME) = JONES
SELECT
FROM
EMP
WHERE
HIREDATE+7 = 01-JAN-84
ndices e Junes
Se no existirem ndices nas colunas utilizadas para realizar a juno equivalente,
o Oracle obrigado a realizar uma operao de SORT/MERGE para responder a
consulta. Isto significa que cada tabela ordenada separadamente, e depois as
duas so unidas de acordo com a condio de juno.
115
116
O gerador de seqncias
O gerador de seqncias do Oracle utilizado para gerar automaticamente
seqncias de nmeros para as linhas das tabelas.
esquema
nome-da-seqncia
INCREMENT WITH
START WITH
ascendentes.
Para um usurio poder criar uma seqncia deve possuir o privilgio de resource.
O comando mostrada abaixo cria uma seqncia para a coluna DEPTNO da tabela
DEPT.
117
INCREMENT BY 10
START WITH 10
MAXVALUE 10000
SELECT
FROM
DEPT_SEQ.NEXTVAL
SYS.DUAL
NEXTVAL
------10
SELECT
FROM
DEPT_SEQ.NEXTVAL
SYS.DUAL
NEXTVAL
------20
Notas:
118
Em vises.
Notas:
120
Listando seqncias
As vises USER_SEQUENCES ou ALL_SEQUENCES podem ser utilizadas para
descobrir as seqncias existentes.
121
COMMIT ou ROLLBACK
comando de DDL
Erros
Falha de mquina
122
Aps o fim de uma transao, a prxima declarao SQL inicia uma nova
transao automaticamente.
Efetivando as mudanas
Para tornar as mudanas no banco de dados permanentes, elas devem ser
efetivadas. O comando COMMIT utilizado para efetivar as mudanas, e o
comando ROLLBACK utilizado para descartar as mudanas.
Removendo mudanas
Mudanas no efetivadas podem ser descartadas atravs do comando ROLLBACK.
Falhas do sistema
Quando uma transao interrompida por um erro, como, por exemplo, uma falha
do sistema, toda a transao descartada (Rolled back). Este procedimento
previne que os erros causem mudanas no desejadas aos dados.
Controlando transaes
Os seguintes comandos SQL so utilizados para controlar uma transao:
COMMIT [WORK]
SAVEPOINT nome_do_savepoint
ROLLBACK [WORK]
ROLLBACK TO nome_do_savepoint
COMMIT [WORK]
Termina a transao
SAVEPOINT savepoint_name
Fim da transao
Desfaz as alteraes
Rollbacks implcitos
Rollbacks implcitos ocorrem em caso de trmino anormal
Autocommit
Commit pode ser executado automaticamente atravs do comando SET
AUTOCOMMIT ON. Neste caso, aps cada comando INSERT, UPDATE ou DELETE
executado um comando COMMIT automaticamente.
Com SET AUTOCOMMIT OFF, o prprio usurio tem que executar o comando
COMMIT manualmente.
127
SQL> COMMIT
Commit complete.
129
SQL> COMMIT
Commit complete.
SQL> ROLLBACK
Rollback complete.
Consistncia de leitura
Usurios de banco de dados realizam dois tipos de acesso ao banco de
dados:
Todos os usurios que efetuam leituras, exceto aquele que causou as mudanas,
enxergam o banco de dados como ele existia antes das mudanas, atravs da
cpia mantida nos Segmentos de Rollback.
Antes das mudanas serem efetivadas, somente o usurio que modificou os dados
enxerga o banco de dados com as modificaes incorporadas.
A declarao SQL SET TRANSACTION READ ONLY utilizada para iniciar uma
transao de leitura apenas.
132
Notas:
Exemplo:
133
134