Professional Documents
Culture Documents
Paulo André
PÁG. 1
Neste curso você aprenderá a usar o SQL*Plus para:
Paulo André
PÁG. 2
I.2 - O QUE É BANCO DE DADOS?
Paulo André
PÁG. 3
I.3 - RDBMS (RELATIONAL DATABASE MANAGEMENT SYSTEM)
• Hierárquico
• Lista invertida
• Rede
• Relacional
Paulo André
PÁG. 4
I.4 - MODELO RELACIONAL
• Tabelas
• Colunas
• Linhas
• Campos
TABELA
Campo
Coluna
Uma relação pode ser vista como uma tabela. A recuperação de dados
é feita através de operações relacionais sobre estas tabelas.
Paulo André
PÁG. 5
RELAÇÃO DESCRIÇÃO
UNION
Paulo André
PÁG. 6
INTERSECTION
DIFFERENCE
PRODUTO
Paulo André
PÁG. 7
O formato linha/coluna de uma tabela é a maneira usual de visualizar
os dados.
Paulo André
PÁG. 8
• A ordem de uma linha é insignificante;
SQL*Plus
Forms
Reports
Case
Pro*Oracle SQL ORACLE
Card KERNEL
Graphics
SQL*Net
SQL*Loader
Paulo André
PÁG. 9
• Controlar e restringir o acesso e concorrência aos dados;
• Permitir “back-up” e recuperação de dados;
• Interpretar SQL.
Paulo André
PÁG. 10
I.9 - SQL
Paulo André
PÁG. 11
SQL é uma linguagem “English-like”. Ela utiliza palavras como select,
insert, delete como parte de seu conjunto de comandos.
Paulo André
PÁG. 12
I.11 - O QUE É SQL*Plus
SQL*PLUS
SQL + Parâmetros de DB
controle de ORACLE
comandos Formatação
de controle
Características principais:
Paulo André
PÁG. 13
I.12 - PL/SQL
• Declaração de variáveis.
• Atribuições ( X := Y + Z).
• Controles condicionais ( IF, THEN, ELSE, ELSIF, GO TO).
• Repetições de comandos - looping ( FOR, WHILE, EXIT, WHEN).
• Gerenciamento de exceções.
• Aumenta a performance (operações processadas junto aos dados).
• Aumenta produtividade.
O PL/SQL oferece:
• Aumento de Performance
⇒ Quando você utiliza SQL, seus comandos são enviados e
processados pelo RDBMS um por vez, enquanto um bloco de
comandos PL/SQL que contém um número de comandos SQL
combinados com construtores PL/SQL são enviados e
processados pelo RDBMS uma única vez. Esta característica
aumenta a performance especialmente em sistemas
cliente/servidor.
• Aumento de Produtividade
⇒ PL/SQL adiciona o poder do processamento procedural no
desenvolvimento de aplicativos. Adicionalmente aplicativos
Paulo André
PÁG. 14
escritos em PL/SQL são portáveis para qualquer computador ou
sistema operacional que execute o ORACLE RDBMS.
Paulo André
PÁG. 15
ORACLE RDBMS
Bloco PL/SQL Mecanismo
Paulo André
PÁG. 16
I.14 - CONJUNTO DE COMANDOS SQL
INSERT / UPDATE / DELETE Estes comandos são utilizados para entrar com
novas linhas, alterar as linhas já existentes e
remove-lás das tabelas em um específico
Banco de Dados. São também conhecidos
como comandos DML (Data Manipulation
Language).
Paulo André
PÁG. 17
II - COMANDOS SQL e SQL*Plus
II.1 - CONTEÚDOS
Paulo André
PÁG. 18
1. Ativação do SQL*Plus
2. Criação de tabelas
3. Manipulação de tabelas
4. Formatação de relatórios
5. Edição de comandos
6. Outros comandos
Paulo André
PÁG. 19
$ sqlplus <ENTER>
SQL*Plus: Release 3.1.1.9.1 - Production on Wed Apr 3 08:56 …
Copyright (c) ORACLE Corporation 1979, 1992, All …
Enter user-name: oral1
Enter password: _________ a senha não é exibida
Connected to:
ORACLE7 Server Release 7.0.12.1.0 - Production
With the procedural option
PL/SQL Release 2.0.14.0.1 - Production
SQL>
ou a senha é exibida
$ sqlplus ora1/senha1
SQL*Plus: Release 3.1.1.9.1 - Production on Wed Apr 3 08:56 …
Copyright (c) ORACLE Corporation 1979,1992. All …
Connected to:
ORACLE7 Server Release 7.0.12.1.0 - Production
With the procedural option
PL/SQL Release 2.0.14.0.1 - Production
SQL>
SQL> exit
SQL> SELECT
2 *
3 FROM
4 emp
Paulo André
PÁG. 21
5;
SQL> SELECT *
2 FROM emp;
Paulo André
PÁG. 22
II.4 - CRIAÇÃO DE TABELAS
Campos
Paulo André
PÁG. 23
Para criar a tabela de empregados:
somente o cabeçalho
VALUES ( expr )
,
( column ) subquery_2
Onde:
Para você inserir linhas em uma tabela, a tabela tem que ser sua ou
você tem que ter privilégios sobre ela.
Paulo André
PÁG. 25
O privilégio de sistema INSERT ANY TABLE também permite a você
inserir linhas em qualquer tabela de qualquer usuário.
ou
É possível incluir uma nova linha com valores atribuídos para cada
coluna, neste caso os nomes das colunas podem ser omitidos. Recomenda-se que
a lista de colunas seja sempre especificada.
Paulo André
PÁG. 26
O exemplo abaixo insere um linha na tabela DEPT.
O exemplo abaixo insere uma linha com seis colunas na tabela EMP.
Uma dessas colunas está atribuída com valor nulo e outra está atribuída com
notação científica.
Exemplo:
Paulo André
PÁG. 27
II.6 - ALTERANDO LINHAS DE UMA TABELA
Para você atualizar linhas em uma tabela, a tabela tem que ser sua ou
você tem que ter privilégios sobre ela.
Sintaxe:
UPDATE
,
table
snapshot
( subquery_1 )
,
,
column = expr
( subquery_3 )
WHERE condição
Paulo André
PÁG. 28
Onde:
Paulo André
PÁG. 29
UPDATE emp
SET job = ‘VENDEDOR’,
sal = sal * 1.1
WHERE ename = ‘SCOTT’;
UPDATE emp
SET comm = NULL
WHERE job = ‘SALESMAN’;
Paulo André
PÁG. 30
SQL> UPDATE emp
2 SET sal = sal*1.10
3 WHERE deptno = 10;
Sintaxe:
Paulo André
PÁG. 31
DELETE table
( subquery )
WHERE condição
Onde:
Para você apagar linhas em uma tabela, a tabela tem que ser sua ou
você tem que ter privilégios sobre ela.
Paulo André
PÁG. 32
SQL> DELETE FROM emp WHERE deptno = 20;
Paulo André
PÁG. 33
TRUCANTE {TABLE | CLUSTER} tabela
[ {DROP | REUSE} STORAGE]
Observações:
• A opção DROP STORAGE libera o espaço físico alocado à tabela para o banco de
dados.
Exemplos:
SQL> list
qualquer um desses comandos
ou pode ser utilizado
Paulo André
PÁG. 34
SQL> l
1 SELECT
2 empno, ename
3 FROM emp
4* WHERE empno = 7902
SQL> del
SQL> l
1 SELECT
2 empno, ename
3* FROM emp
SQL> list 2
2* empno, ename
SQL> imput
ou
SQL> list
Paulo André
PÁG. 35
1 SELECT
2 empno, ename
3 job,
4 sal
5* FROM emp;
SQL> list 2
2* empno, ename
SQL> append, mgr,
ou
SQL> a, mgr,
SQL> list
1 SELELCT
2 empno, ename, mgr,
3 job,
4 sal
5* FROM emp;
SQL> list 2
2* empno, ename, mgr,
SQL> change/mgr/sal/
ou
SQL> c/mgr/sal/
SQL> list
1 SELECT
2 empno, ename, sal,
3 job,
4 sal
5* FROM emp
Paulo André
PÁG. 36
Para executar o comando existente no buffer:
SQL> run
ou
SQL> r
ou
SQL> /
SQL> edit
Paulo André
PÁG. 37
Para recuperar um comando SQL armazenado num arquivo:
ou
SQL> @arquivo
SQL> host is - al
ou
SQL> ! Is - al
total 20
Paulo André
PÁG. 38
Para obter ajuda sobre um comando SQL ou SQL*Plus:
nome do comando
II.11 - EXERCÍCIOS
2. Insira dados sobre você e algum membro da sua família na tabela ALUNO.
Paulo André
PÁG. 39
5. Salve o comando anterior no arquivo “ex24.sql”, saia do SQL*Plus, entre
novamente e execute o comando contido no arquivo gerado.
Paulo André
PÁG. 40
III.1 - CONTEÚDO
1. Seleção de colunas
2. Uso de expressões
3. Ordenação de resultados
4. Agrupamento
5. Operações de conjunto
6. Junção de tabelas
Paulo André
PÁG. 41
III.2 - SELEÇÃO DE COLUNAS
Paulo André
PÁG. 42
Sintaxe:
SELECT *
,
DISTINCT
ALL table .*
schema. View
snapshot
expr
c_alias
AS
,
FROM table
snapshot
, INTERSECT
HAVING condição
Paulo André
PÁG. 43
,
ORDER BY expr
position ASC
c_alias DESC
Onde:
SQL> SELECT *
2 FROM emp
3 WHERE deptno = 30;
ENAME EMPNO
SMITH 7369
ALLEN 7499
Paulo André
PÁG. 46
Para indicar as colunas a serem recuperadas de uma tabela:
EMPNO ENAME
7369 SMITH
7499 ALLEN
Paulo André
PÁG. 47
III.3 - OPERADORES ARITMÉTICOS
SELECT 2*X+10
... WHERE X > Y / 2
SELECT 2 * X + 1
... WHERE X > Y - Z
Paulo André
PÁG. 48
III.4 - USO DE EXPRESSÕES
ENAME 12*SAL
SMITH 9600
ALLEN 19200
WARD 15000
JONES 35700
MARTIN 15000
BLAKE 34200
CLARK 29400
SCOTT 36000
KING 60000
TURNER 18000
ADAMS 13200
JANES 11400
FORD 36000
MILLER 15600
sinônimo para a
coluna
SQL> SELECT
2 length (ename) +
3 length(job) “Comprimento Total”
4 FROM emp;
Comprimento Total
10
13
12
12
14
12
12
12
13
14
10
10
11
11
Paulo André
PÁG. 50
III.5 - OPERADORES DE CARACTERES
Paulo André
PÁG. 51
Para saber os nomes dos empregados que trabalham no
departamento 20.
ENAME
SMITH
JONES
SCOTT
ADAMS
FORD
Paulo André
PÁG. 52
Para saber o tempo de serviço dos funcionários cuja comissão é maior
que 50% do salário:
ENAME MESES
MARTIN 187.5371
Paulo André
PÁG. 53
III.6 - OPERADORES DE COMPARAÇÃO
NOT BETWEEN Validam uma expressão como sendo maior ou igual ao valor que
- AND segue BETWEEN e menor ou igual ao valor que segue AND.
NOT LIKE Este operador é usado para comparar duas strings de caracteres
e verificar se elas são parecidas.
• Podem ser utilizados caracteres % e _ . O caracter
percentual (%) é utilizado para comparar um ou mesmo
nenhum caracter, entretanto não pode comparar um valor
nulo. O caracter sublinhado (_) é utilizado para comparar
exatamente um caracter.
• Função UPPER: utilizada para fazer com que as
expressões sejam avaliadas corretamente comparando letras
minúsculas e maiúsculas.
IS NOT NULL Este operador deve ser usado quando for necessário testar uma
condição para verificar se ela é nula ou não.
Paulo André
PÁG. 55
Os operadores lógicos são usados para afetar o resultado de múltiplas
condições. O operador AND requer que a linha satisfaça todas as duas condições
comparadas. Pôr sua vez, o operador OR requer que a linha satisfaça pelo menos
uma das duas condições comparadas.
Paulo André
PÁG. 56
III.8 - OUTROS OPERADORES
(+) Indica que a coluna precedida pelo sinal (+) está relacionada à
coluna anterior da declaração e faz parte de outra tabela. Este
operador é utilizado para especificar os relacionamentos entre as
colunas.
Paulo André
PÁG. 57
Você pode utilizar variáveis nos arquivos de comandos ou nos
comandos SQL para representar valores que serão entrados em tempo de
execução.
Exemplo:
Paulo André
PÁG. 59
5 ORDER BY job, sal desc;
Paulo André
PÁG. 60
III.11 - A CLÁUSULA WHERE
SELECT *
FROM emp
WHERE deptno = 30;
Paulo André
PÁG. 61
A cláusula GROUP BY pode ser usada para dividir as linhas de uma
tabela em pequenos grupos. Funções de grupos podem ser utilizadas para retornar
uma informação sumarizada de cada grupo.
DEPTNO COUNT(*)
10 3
20 5
30 6
Paulo André
PÁG. 63
SELECT deptno, avg(sal)
FROM emp
GROUP BY deptno
HAVING count (*) > 3;
selecione os grupos
(“where” de grupo) função de grupo
Tabela
Paulo André
PÁG. 65
Col. 1 Col. 2
A 1
B 1
D 2
(A,1)
elementos
(B,1) do
conjunto
(D,2)
Conjunto
• União (UNION)
• Intersecção (INTERSECT)
• Diferença (MINUS)
União
TABELAS
Paulo André
PÁG. 66
D 2
union
Col1 Col2
A 1
A 2
B 1
D 2
E 2
Intersecção
TABELAS
Paulo André
PÁG. 67
colunas com tipo igual
intersect
Col1 Col2
B 1
D 2
Diferença
Paulo André
PÁG. 68
select col1, col2 from tab1
minus
Col1 Col2
A 1
A,
B, C X 1,2
Paulo André
PÁG. 69
(A,1), (A,2),
(B,1), (B,2),
(C,1), (C,2)
tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E
produto cartesiano
ENAME DNAME
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
Paulo André
PÁG. 70
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
especifica um tipo
de junção
Paulo André
PÁG. 72
ENAME SAL GRADE
SMITH 800 1
ADAMS 1100 1
JAMES 950 1
WARD 1250 2
MARTIN 1250 2
MILLER 1300 2
ALLEN 1600 3
TURNER 1500 3
JONES 2975 4
BLAKE 2850 4
CLARK 2450 4
SCOTT 3000 4
FORD 3000 4
KING 5000 5
Paulo André
PÁG. 73
O comando abaixo retorna o nome e cargo do empregado e o número
do e nome do departamento
III.16 - EXERCÍCIOS
4. Obtenha a soma dos salários dos empregados que não trabalham nos
departamentos 10 ou 30.
IV - CONSULTAS AVANÇADAS
Paulo André
PÁG. 75
IV.1 - CONTEÚDO
1. Pseudo - colunas
2. Junção externa
3. Auto-Junção
4. Consultas encaixadas
5. Consultas hierárquicas
Paulo André
PÁG. 76
IV.2 - PSEUDO-COLUNAS
T Nome Descrição
N nome_seq.CURRVAL Valor corrente da sequência nome_seq
N nome_seq.NEXTVAL Próximo valor da sequência nome_seq
N LEVEL Usada no comando SELCT … CONNECT
BY; é igual a 1 para o nó raíz de uma
árvore, 2 para seus filhos e assim por
diante
- NULL Valor nulo
R ROWID Identificação interna de uma linha
N ROWNUM Número que indica a ordem de seqüência
da linha selecionada em uma consulta
Paulo André
PÁG. 77
ROWNUM ROWID
1 00000984.0001.0001
Paulo André
PÁG. 78
ENAME DEPTNO EMP.DEPTNO DEPT.DEPTNO
SMITH ACCOUNTING 20 10
ALLEN ACCOUNTING 30 10
WARD ACCOUNTING 30 10
JONES ACCOUNTING 20 10
MARTIN ACCOUNTING 30 10
BLAKE ACCOUNTING 30 10
CLARK ACCOUNTING 10 10
SCOTT ACCOUNTING 20 10
KING ACCOUNTING 10 10
TURNER ACCOUNTING 30 10
ADAMS ACCOUNTING 20 10
JAMES ACCOUNTING 30 10
FORD ACCOUNTING 20 10
MILLER ACCOUNTING 10 10
SMITH RESEARCH 20 20
ALLEN RESEARCH 30 20
WARD RESEARCH 30 20
JONES RESEARCH 20 20
MARTIN RESEARCH 30 20
BLAKE RESEARCH 30 20
CLARK RESEARCH 10 20
SCOTT RESEARCH 20 20
KING RESEARCH 10 20
TURNER RESEARCH 30 20
ADAMS RESEARCH 20 20
JAMES RESEARCH 30 20
FORD RESEARCH 20 20
MILLER RESEARCH 10 20
SMITH SALES 20 30
ALLEN SALES 30 30
WARD SALES 30 30
JONES SALES 20 30
MARTIN SALES 30 30
BLAKE SALES 30 30
CLARK SALES 10 30
SCOTT SALES 20 30
KING SALES 10 30
TURNER SALES 30 30
ADAMS SALES 20 30
JAMES SALES 30 30
FORD SALES 20 30
MILLER SALES 10 30
SMITH OPERATIONS 20 40
ALLEN OPERATIONS 30 40
Paulo André
PÁG. 79
WARD OPERATIONS 30 40
JONES OPERATIONS 20 40
MARTIN OPERATIONS 30 40
BLAKE OPERATIONS 30 40
CLARK OPERATIONS 10 40
SCOTT OPERATIONS 20 40
KING OPERATIONS 10 40
TURNER OPERATIONS 30 40
ADAMS OPERATIONS 20 40
JAMES OPERATIONS 30 40
FORD OPERATIONS 20 40
MILLER OPERATIONS 10 40
Não existem empregados no departamento 40
Solução: fazer de conta que existe uma linha fictícia, totalmente nula,
na tabela de empregados, para que ela seja associada à linha do departamento 40
(junção externa):
Paulo André
PÁG. 80
DEPTNO DNAME LOC
40 OPERATIONS BOSTON
Paulo André
PÁG. 81
IV.5 - CONSULTAS ENCAIXADAS
Subqueries podem:
Para saber quais empregados ganham mais que a média dos salários:
Paulo André
PÁG. 82
Para saber quais funcionários trabalham com o SCOTT.
operador de exclusão
de conjunto
DEPTNO DNAME
40 OPERATONS
Paulo André
PÁG. 83
Para recuperar os empregados que ganham mais que a média de
salário do seu departamento:
Paulo André
PÁG. 84
Para que todos os empregados mais novos de cada cargo ganhem o
melhor salário e a média das comissões de seu cargo:
Paulo André
PÁG. 85
IV.6 - CONSULTAS HIERÁRQUICAS
Paulo André
PÁG. 86
75 / PRESIDENTE
Paulo André
PÁG. 87
Para saber o nome do Presidente e de seus subordinados, exceto
aqueles que são também subordinados de JONES:
Paulo André
PÁG. 88
SQL> SELECT level, lpad(‘ ’,2*level ) | | ename nome
2 FROM emp
3 CONNECT BY PRIOR empno = mgr
4 START WITH job = ‘PRESIDENT’;
LEVEL NOME
1 KING
2 JONES
3 SCOTT
4 ADAMS
3 FORD
4 SMITH
2 BLAKE
3 ALLEN
3 WARD
3 MARTIN
3 TURNER
3 JAMES
2 CLARK
3 MILLER
IV.7 - EXERCÍCIOS
Paulo André
PÁG. 90
VI - ESTRUTURA DE DADOS
Paulo André
PÁG. 92
VI.2 - CRIANDO UMA TABELA
Paulo André
PÁG. 93
VI.3 - DIRETRIZES PARA CRIAÇÃO DE NOMES DE TABELAS
Paulo André
PÁG. 94
VI.4 - TIPOS DE COLUNAS
Quando criar uma tabela, você deve especificar os tipos das colunas.
Os mais utilizados são:
VARCHAR2(n) São valores tipo CHAR com no máximo 2000 posições. Usa
armazenamento dinâmico.
DATE São valores tipo data. Ex.: December 31, 4712 BC. Usa 7
bytes.
Paulo André
PÁG. 95
VI.5 - A OPÇÃO NULL E NOT NULL
NULL Esta opção define que a coluna pode possuir valores nulos.
Esta opção é default e pode ser omitida.
NOT NULL Esta opção assegura que a coluna sempre tenha valores
diferentes de nulo. Se tentar incluir uma linha com a coluna
que tem essa opção sem valor, o ORACLE enviará uma
mensagem de erro.
Paulo André
PÁG. 96
VI.6 - CLÁUSULA CONSTRAINT
Paulo André
PÁG. 97
• Constraints de tabela
• Constraints de coluna
Estes tipos são idênticos, a não ser que as constraint de coluna
refereciem a uma coluna enquanto a de tabela refereciem a uma ou mais colunas
da tabela.
Paulo André
PÁG. 98
VI.7 - PARÂMETROS DA CONSTRAINT
FOREIGN KEY ( coluna ...)/ Identifica que essa é uma chave estrangeira da tabela
REFERENCES do usuário definida. Deve sempre estar referenciada a
usuário.tabela(colunas) uma tabela e não a uma visão.
Paulo André
PÁG. 99
O comando CREATE TABLE é usado para criar novas tabelas no
banco de dados.
Sintaxe:
( coluna tipo )
table_constraint
AS subquery
Onde:
Paulo André
PÁG. 101
Criando a tabela EMP.
DESCRIBE EMP;
Paulo André
PÁG. 102
O número de colunas no comando SELECT deve ser igual ao do
comando CREATE TABLE.
Table created.
• Exemplo:
DNAME Media_Salario
ACCOUNTING 2916.6667
RESEARCH 2175
SALES 1566.6667
Paulo André
PÁG. 103
VI.10 - ALTERAÇÃO DE UMA TABELA
• Só é possível alterar o tipo de uma coluna para “NOT NULL” se nenhum dos seus
valores for nulo;
• Não é possível remover uma coluna de uma tabela com o comando ALTER TABLE.
Para conseguir este efeito deve-se criar outra tabela sem a coluna a ser removida.
Por exemplo, para apagar a coluna DIRETOR:
Paulo André
PÁG. 104
O comando ALTER TABLE serve para alterar a estrutura de uma
tabela.
O parâmetro ADD deve ser utilizado para adicionar uma coluna e/ou
constraint para uma tabela existente.
ADD ( column_datatype )
DEFAULT exp column_constraint
table_constraint
,
MODIFY ( column )
datatype DEFAULT expr column_contraint
Onde:
Paulo André
PÁG. 106
O comando abaixo adiciona a constraint CHECK na coluna SAL da tabela
EMP.
Paulo André
PÁG. 107
RENAME OLD TO NEW ;
Sintaxe:
Paulo André
PÁG. 109
VI.15 - DOCUMENTANDO UMA TABELA
Paulo André
PÁG. 110
Adicionando um comentário em uma coluna:
Eliminando um comentário:
Paulo André
PÁG. 111