Você está na página 1de 350

Banco de Dados Oracle 10g:

Fundamentos de SQL I
Volume I Guia do Aluno
D17108BP10
Produo 1.0
Junho 2004
D39572
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Esta documentao contm informaes de propriedade da Oracle Corporation. Ela
fornecida sob um contrato de licena que contm restries quanto ao uso e
divulgao, alm de ser protegida pela legislao de direitos autorais. proibida a
engenharia reversa do software. Se esta documentao for distribuda a uma
Agncia Governamental subordinada ao Departamento de Defesa dos EUA, ela ter
direitos restritos e o seguinte aviso dever ser aplicado:
Aviso de Direitos Restritos
A utilizao, a duplicao ou a divulgao pelo governo estar sujeita s restries
impostas a um software comercial e devero ser aplicadas as leis federais relativas a
um software com direitos restritos, como definidos no subpargrafo (c)(1)(ii) de
DFARS 252.227-7013, Rights in Technical Data and Computer Software (Direitos
sobre Dados Tcnicos e Software de Computadores) (outubro de 1988).
Este material, ou parte dele, no poder ser copiado de qualquer forma ou por
qualquer meio sem a prvia permisso expressa por escrito da Oracle Corporation.
Qualquer outra cpia constituir uma violao da legislao de direitos autorais e
poder resultar em indenizaes civis e/ou criminais.
Se esta documentao for distribuda a uma Agncia Governamental que no
pertena ao Departamento de Defesa dos EUA, ela ter "direitos restritos", conforme
definido no FAR 52.227-14, Rights in Data-General (Direitos Gerais sobre Dados),
incluindo Alternate III (Alternativa III) (junho de 1987).
As informaes contidas neste documento esto sujeitas a alteraes sem aviso
prvio. Se voc encontrar algum problema na documentao, envie ao departamento
Worldwide Education Services uma descrio de tal problema por escrito. Oracle
Corporation, 500 Oracle Parkway, Box SB-6, Redwood Shores, CA 94065 - USA.
Distribuidor no Brasil: Oracle do Brasil Sistemas Ltda. Rua Jos Guerra, 127, So
Paulo, SP - 04719-030 - Brasil - CNPJ: 59.456.277/0001-76. A Oracle Corporation
no garante que esta documentao esteja isenta de erros.
Oracle e todas as referncias a produtos da Oracle so marcas comerciais ou
registradas da Oracle Corporation.
Todos os outros nomes de empresas e produtos so usados com o nico propsito
de identificao e podem ser marcas comerciais dos respectivos proprietrios.
Autor
Nancy Greenberg
Revisores e
Colaboradores Tcnicos
Wayne Abbott
Christian Bauwens
Perry Benson
Brian Boxx
Zarko Cesljas
Dairy Chan
Laszlo Czinkoczki
Marjolein Dekkers
Matthew Gregory
Stefan Grenstad
Joel Goodman
Rosita Hanoman
Sushma Jagannath
Angelika Krupp
Christopher Lawless
Marcelo Manzano
Isabelle Marchand
Malika Marghadi
Valli Pataballa
Elspeth Payne
Ligia Jasmin Robayo
Bryan Roberts
Helen Robertson
Lata Shivaprasad
John Soltani
Priya Vennapusa
Ken Woolfe
Editor
Nita K. Brozowski
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio
Introduo
Objetivos da Lio I-2
Metas do Curso I-3
Oracle10g I-4
Banco de Dados Oracle 10g I-6
Oracle Application Server 10g I-7
Oracle Enterprise Manager 10g Grid Control I-8
Sistemas de Gerenciamento de Banco de Dados Relacional e Banco de Dados
Relacional de Objeto I-9
Plataforma Oracle para a Internet I-10
Ciclo de Vida de Desenvolvimento do Sistema I-11
Armazenamento de Dados em Diferentes Mdias I-13
Conceito de Banco de Dados Relacional I-14
Definio de um Banco de Dados Relacional I-15
Modelos de Dados I-16
Modelo de Relacionamento entre Entidades I-17
Convenes de Modelagem de Relacionamento entre Entidades I-19
Relacionando Vrias Tabelas I-21
Terminologia do Banco de Dados Relacional I-23
Propriedades do Banco de Dados Relacional I-25
Comunicando-se com um RDBMS por Meio de SQL I-26
Sistema de Gerenciamento de Banco de Dados Relacional da Oracle I-27
Instrues SQL I-28
Tabelas Usadas no Curso I-29
Sumrio I-30
1 Recuperando Dados com a Instruo SQL SELECT
Objetivos 1-2
Recursos de Instrues SQL SELECT 1-3
Instruo SELECT Bsica 1-4
Selecionando Todas as Colunas 1-5
Selecionando Colunas Especficas 1-6
Criando Instrues SQL 1-7
Defaults de Cabealhos de Colunas 1-8
Expresses Aritmticas 1-9
Usando Operadores Aritmticos 1-10
Precedncia de Operadores 1-11
Definindo um Valor Nulo 1-12
Valores Nulos em Expresses Aritmticas 1-13
Definindo um Apelido de Coluna 1-14
Usando Apelidos de Colunas 1-15
Operador de Concatenao 1-16
Strings de Caracteres Literais 1-17
Usando Strings de Caracteres Literais 1-18
Contedo
iii
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Operador de Aspas (q) Alternativo 1-19
Linhas Duplicadas 1-20
Interao entre SQL e iSQL*Plus 1-21
Instrues SQL e Comandos iSQL*Plus 1-22
Viso Geral do iSQL*Plus 1-23
Efetuando Login no iSQL*Plus 1-24
Ambiente iSQL*Plus 1-25
Exibindo a Estrutura de Tabelas 1-26
Interagindo com Arquivos de Script 1-28
Pgina History do iSQL*Plus 1-32
Definindo Preferncias do iSQL*Plus 1-34
Definindo a Preferncia de Localizao da Sada 1-35
Sumrio 1-36
Exerccio 1: Viso Geral 1-37
2 Restringindo e Classificando Dados
Objetivos 2-2
Limitando Linhas por Seleo 2-3
Limitando as Linhas Selecionadas 2-4
Usando a Clusula WHERE 2-5
Strings de Caracteres e Datas 2-6
Condies de Comparao 2-7
Usando Condies de Comparao 2-8
Usando a Condio BETWEEN 2-9
Usando a Condio IN 2-10
Usando a Condio LIKE 2-11
Usando as Condies NULL 2-13
Condies Lgicas 2-14
Usando o Operador AND 2-15
Usando o Operador OR 2-16
Usando o Operador NOT 2-17
Regras de Precedncia 2-18
Usando a Clusula ORDER BY 2-20
Classificao 2-21
Variveis de Substituio 2-22
Usando a Varivel de Substituio & 2-24
Valores de Caractere e Data com Variveis de Substituio 2-26
Especificando Nomes de Colunas, Expresses e Texto 2-27
Usando a Varivel de Substituio && 2-28
Usando o Comando DEFINE do iSQL*Plus 2-29
Usando o Comando VERIFY 2-30
Sumrio 2-31
Exerccio 2: Viso Geral 2-32
iv
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
3 Usando Functions de uma nica Linha para Personalizar a Sada
Objetivos 3-2
Functions SQL 3-3
Dois Tipos de Functions SQL 3-4
Functions de uma nica Linha 3-5
Functions de Caractere 3-7
Functions de Manipulao de Maisculas e Minsculas 3-9
Usando Functions de Manipulao de Maisculas e Minsculas 3-10
Functions de Manipulao de Caracteres 3-11
Usando as Functions de Manipulao de Caracteres 3-12
Functions de Nmero 3-13
Usando a Function ROUND 3-14
Usando a Function TRUNC 3-15
Usando a Function MOD 3-16
Trabalhando com Datas 3-17
Aritmtica com Datas 3-20
Usando Operadores Aritmticos com Datas 3-21
Functions de Data 3-22
Usando Functions de Data 3-23
Exerccio 3: Viso Geral da Parte 1 3-25
Functions de Converso 3-26
Converso Implcita de Tipos de Dados 3-27
Converso Explcita de Tipos de Dados 3-29
Usando a Function TO_CHAR com Datas 3-32
Elementos do Modelo de Formato de Data 3-33
Usando a Function TO_CHAR com Datas 3-37
Usando a Function TO_CHAR com Nmeros 3-38
Usando as Functions TO_NUMBER e TO_DATE 3-41
Formato de Data RR 3-43
Exemplo do Formato de Data RR 3-44
Aninhando Functions 3-45
Functions Gerais 3-47
Function NVL 3-48
Usando a Function NVL 3-49
Usando a Function NVL2 3-50
Usando a Function NULLIF 3-51
Usando a Function COALESCE 3-52
Expresses Condicionais 3-54
Expresso CASE 3-55
Usando a Expresso CASE 3-56
Function DECODE 3-57
Usando a Function DECODE 3-58
Sumrio 3-60
Exerccio 3: Viso Geral da Parte 2 3-61
v
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
4 Gerando Relatrios de Dados Agregados com as Functions de Grupo
Objetivos 4-2
O Que So Functions de Grupo? 4-3
Tipos de Functions de Grupo 4-4
Functions de Grupo: Sintaxe 4-5
Usando as Functions AVG e SUM 4-6
Usando as Functions MIN e MAX 4-7
Usando a Function COUNT 4-8
Usando a Palavra-Chave DISTINCT 4-9
Functions de Grupo e Valores Nulos 4-10
Criando Grupos de Dados 4-11
Criando Grupos de Dados: Sintaxe da Clusula GROUP BY 4-12
Usando a Clusula GROUP BY 4-13
Agrupando por Mais de Uma Coluna 4-15
Usando a Clusula GROUP BY em Vrias Colunas 4-16
Consultas Invlidas Usando Functions de Grupo 4-17
Restringindo Resultados de Grupos 4-19
Restringindo Resultados de Grupos com a Clusula HAVING 4-20
Usando a Clusula HAVING 4-21
Aninhando Functions de Grupo 4-23
Sumrio 4-24
Exerccio 4: Viso Geral 4-25
5 Exibindo Dados de Vrias Tabelas
Objetivos 5-2
Obtendo Dados de Vrias Tabelas 5-3
Tipos de Joins 5-4
Unindo Tabelas com a Sintaxe SQL:1999 5-5
Criando Joins Naturais 5-6
Recuperando Registros com Joins Naturais 5-7
Criando Joins com a Clusula USING 5-8
Unindo Nomes de Colunas 5-9
Recuperando Registros com a Clusula USING 5-10
Qualificando Nomes de Colunas Ambguos 5-11
Usando Apelidos de Tabelas 5-12
Criando Joins com a Clusula ON 5-13
Recuperando Registros com a Clusula ON 5-14
Auto-Joins Usando a Clusula ON 5-15
Aplicando Outras Condies a uma Join 5-17
Criando Joins Tridimensionais com a Clusula ON 5-18
No-Equijoins 5-19
Recuperando Registros com No-Equijoins 5-20
Joins Externas 5-21
Joins Internas e Externas 5-22
LEFT OUTER JOIN 5-23
RIGHT OUTER JOIN 5-24
vi
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
FULL OUTER JOIN 5-25
Produtos Cartesianos 5-26
Gerando um Produto Cartesiano 5-27
Criando Joins Cruzadas 5-28
Sumrio 5-29
Exerccio 5: Viso Geral 5-30
6 Usando Subconsultas para Solucionar Consultas
Objetivos 6-2
Usando uma Subconsulta para Solucionar um Problema 6-3
Sintaxe da Subconsulta 6-4
Usando uma Subconsulta 6-5
Diretrizes de Uso de Subconsultas 6-6
Tipos de Subconsultas 6-7
Subconsultas de uma nica Linha 6-8
Executando Subconsultas de uma nica Linha 6-9
Usando Functions de Grupo em uma Subconsulta 6-10
A Clusula HAVING com Subconsultas 6-11
O Que Est Errado Nesta Instruo? 6-12
Esta Instruo Retornar Linhas? 6-13
Subconsultas de Vrias Linhas 6-14
Usando o Operador ANY em Subconsultas de Vrias Linhas 6-15
Usando o Operador ALL em Subconsultas de Vrias Linhas 6-16
Valores Nulos em uma Subconsulta 6-17
Sumrio 6-19
Exerccio 6: Viso Geral 6-20
7 Usando os Operadores de Conjunto
Objetivos 7-2
Operadores de Conjunto 7-3
Tabelas Usadas Nesta Lio 7-4
Operador UNION 7-8
Usando o Operador UNION 7-9
Operador UNION ALL 7-11
Usando o Operador UNION ALL 7-12
Operador INTERSECT 7-13
Usando o Operador INTERSECT 7-14
Operador MINUS 7-15
Diretrizes de Operadores de Conjunto 7-17
O Servidor Oracle e os Operadores de Conjunto 7-18
Correspondncia entre Instrues SELECT 7-19
Correspondncia entre Instrues SELECT: Exemplo 7-20
Controlando a Ordem das Linhas 7-21
Sumrio 7-23
Exerccio 7: Viso Geral 7-24
vii
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
8 Manipulando Dados
Objetivos 8-2
Data Manipulation Language 8-3
Adicionando uma Nova Linha a uma Tabela 8-4
Sintaxe da Instruo INSERT 8-5
Inserindo Novas Linhas 8-6
Inserindo Linhas com Valores Nulos 8-7
Inserindo Valores Especiais 8-8
Inserindo Valores de Data Especficos 8-9
Criando um Script 8-10
Copiando Linhas de Outra Tabela 8-11
Alterando Dados de uma Tabela 8-12
Sintaxe da Instruo UPDATE 8-13
Atualizando Linhas de uma Tabela 8-14
Atualizando Duas Colunas com uma Subconsulta 8-15
Atualizando Linhas com Base em Outra Tabela 8-16
Removendo uma Linha de uma Tabela 8-17
Instruo DELETE 8-18
Deletando Linhas de uma Tabela 8-19
Deletando Linhas com Base em Outra Tabela 8-20
Instruo TRUNCATE 8-21
Usando uma Subconsulta em uma Instruo INSERT 8-22
Transaes de Banco de Dados 8-24
Vantagens das Instrues COMMIT e ROLLBACK 8-26
Controlando Transaes 8-27
Fazendo Rollback de Alteraes at um Marcador 8-28
Processamento de Transao Implcita 8-29
Estado dos Dados antes de COMMIT ou ROLLBACK 8-31
Estado dos Dados aps COMMIT 8-32
Submetendo Dados a Commit 8-33
Estado dos Dados aps ROLLBACK 8-34
Rollback no Nvel de Instruo 8-36
Consistncia de Leitura 8-37
Implementao da Consistncia de Leitura 8-38
Sumrio 8-39
Exerccio 8: Viso Geral 8-40
9 Usando Instrues DDL para Criar e Gerenciar Tabelas
Objetivos 9-2
Objetos de Banco de Dados 9-3
Regras de Nomeao 9-4
Instruo CREATE TABLE 9-5
Fazendo Referncia a Tabelas de Outro Usurio 9-6
Opo DEFAULT 9-7
Criando Tabelas 9-8
Tipos de Dados 9-9
Tipos de Dados de Data/Horrio 9-11
viii
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Incluindo Constraints 9-17
Diretrizes de Constraints 9-18
Definindo Constraints 9-19
Constraint NOT NULL 9-21
Constraint UNIQUE 9-22
Constraint PRIMARY KEY 9-24
Constraint FOREIGN KEY 9-25
Constraint FOREIGN KEY: Palavras-chave 9-27
Constraint CHECK 9-28
CREATE TABLE: Exemplo 9-29
Violando Constraints 9-30
Criando uma Tabela com uma Subconsulta 9-32
Instruo ALTER TABLE 9-34
Eliminando uma Tabela 9-35
Sumrio 9-36
Exerccio 9: Viso Geral 9-37
10 Criando Outros Objetos de Esquema
Objetivos 10-2
Objetos de Banco de Dados 10-3
O Que uma View? 10-4
Vantagens das Views 10-5
Views Simples e Complexas 10-6
Criando uma View 10-7
Recuperando Dados de uma View 10-10
Modificando uma View 10-11
Criando uma View Complexa 10-12
Regras para Executar Operaes DML em uma View 10-13
Usando a Clusula WITH CHECK OPTION 10-16
Negando Operaes DML 10-17
Removendo uma View 10-19
Exerccio 10: Viso Geral da Parte 1 10-20
Seqncias 10-21
Instruo CREATE SEQUENCE: Sintaxe 10-23
Criando uma Seqncia 10-24
Pseudocolunas NEXTVAL e CURRVAL 10-25
Usando uma Seqncia 10-27
Armazenando Valores de Seqncia em Cache 10-28
Modificando uma Seqncia 10-29
Diretrizes para Modificar uma Seqncia 10-30
ndices 10-31
Como Criar ndices? 10-33
Criando um ndice 10-34
Diretrizes para Criar ndices 10-35
Removendo um ndice 10-36
ix
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Sinnimos 10-37
Criando e Removendo Sinnimos 10-39
Sumrio 10-40
Exerccio 10: Viso Geral da Parte 2 10-41
11 Gerenciando Objetos com Views de Dicionrio de Dados
Objetivos 11-2
O Dicionrio de Dados 11-3
Estrutura do Dicionrio de Dados 11-4
Como Usar as Views de Dicionrio 11-6
View USER_OBJECTS 11-7
Informaes sobre Tabelas 11-9
Informaes sobre Colunas 11-10
Informaes sobre Constraints 11-12
Informaes sobre Views 11-15
Informaes sobre Seqncias 11-16
Informaes sobre Sinnimos 11-18
Adicionando Comentrios a uma Tabela 11-19
Sumrio 11-20
Exerccio 11: Viso Geral 11-21
A Solues dos Exerccios
B Dados e Descries de Tabelas
C Sintaxe de Join Oracle
D Usando o SQL*Plus
ndice
Exerccios Adicionais
Exerccios Adicionais: Dados e Descries de Tabelas
Exerccios Adicionais: Solues
x
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio-3
Perfil
Antes de Iniciar o Curso
Antes de iniciar este curso, voc dever ser capaz de usar uma GUI (interface grfica do
usurio). Como pr-requisito, necessrio que o aluno tenha familiaridade com os conceitos
e as tcnicas de processamento de dados.
Organizao deste Curso
O curso Banco de Dados Oracle 10g: Fundamentos de SQL I orientado por instrutor e
inclui palestras e exerccios prticos. As sesses de demonstrao on-line e os exerccios
reforam as tcnicas e os conceitos apresentados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio-4
Publicaes Relacionadas
Publicaes Oracle
Ttulo Part Number
(Nmero do Componente)
Oracle Database Reference 10g Release 1 (10.1) B10755-01
Oracle Database SQL Reference 10g Release 1 (10.1) B10759-01
Oracle Database Concepts 10g Release 1 (10.1) B10743-01
Oracle Database Application Developer's Guide - Fundamentals
10g Release 1 (10.1) B10795-01
SQL*Plus User's Guide and Reference B12170-01
Publicaes Adicionais
Boletins de releases de sistemas
Guias de instalao e do usurio
Arquivos readme
Artigos do IOUG (International Oracle Users Group)
Oracle Magazine
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio-5
Convenes Tipogrficas
A seguir, so fornecidas duas listas de convenes tipogrficas usadas especificamente
no texto ou no cdigo.
Convenes Tipogrficas do Texto
Conveno Objeto ou Termo Exemplo
Letras maisculas Comandos, Use o comando SELECT para exibir
functions, informaes armazenadas na coluna
nomes de colunas, LAST_NAME da tabela EMPLOYEES.
nomes de tabelas,
objetos PL/SQL,
esquemas
Letras minsculas, Nomes de arquivos, em que: role o nome da atribuio
itlico variveis de sintaxe, a ser criada.
nomes de usurios,
senhas
Inicial maiscula Trigger e Designe um trigger When-Validate-Item
nomes de boto para o bloco ORD.
Escolha Cancel.
Itlico Livros, nomes de Para obter mais informaes sobre o
cursos e assunto, consulte o Oracle SQL Reference
manuais, Manual
palavras ou frases
enfatizadas No salve as alteraes no banco de dados.
Aspas Ttulos de mdulos Este assunto abordado na Lio 3,
da lio mencionados Trabalhando com Objetos.
em um curso
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio-6
Convenes Tipogrficas (continuao)
Convenes Tipogrficas do Cdigo
Conveno Objeto ou Termo Exemplo
Letras Comandos, SELECT employee_id
maisculas functions FROM employees;
Letras minsculas, Variveis de sintaxe CREATE ROLE role;
itlico
Inicial maiscula Triggers de forms Form module: ORD
Trigger level: S_ITEM.QUANTITY
item
Trigger name: When-Validate-Item
. . .
Letras minsculas Nomes de colunas, . . .
nomes de tabelas, OG_ACTIVATE_LAYER
nomes de arquivos, (OG_GET_LAYER (prod_pie_layer))
objetos PL/SQL . . .
SELECT last_name
FROM employees;
Negrito Texto a ser CREATE USER scott
especificado por um IDENTIFIED BY tiger;
usurio
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Introduo
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos da Lio
Ao concluir esta lio, voc ser capaz de:
Listar os recursos do Oracle10g
Discutir os aspectos tericos e fsicos de um banco
de dados relacional
Descrever a implementao Oracle do RDBMS e do
ORDBMS
Compreender as metas do curso
Objetivos
Nesta lio, voc compreender o RDBMS (Relational Database Management System) e o
ORDBMS (Object Relational Database Management System). Tambm sero apresentadas
informaes sobre:
Instrues SQL especficas do Oracle
O iSQL*Plus, que um ambiente usado para executar instrues SQL e para fins de
formatao e gerao de relatrios
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-3
Copyright 2004, Oracle. Todos os direitos reservados.
Metas do Curso
Aps concluir este curso, voc ser capaz de:
Identificar os principais componentes estruturais
do Banco de Dados Oracle 10g
Recuperar dados contidos em linhas e colunas
de tabelas com a instruo SELECT
Criar relatrios de dados classificados e restritos
Utilizar functions SQL para gerar e recuperar dados
personalizados
Executar instrues DML (data manipulation
language) para atualizar dados no Banco de Dados
Oracle 10g
Obter metadados por meio de consultas s views
de dicionrio
Metas do Curso
Este curso apresenta a tecnologia de banco de dados Oracle 10g. No curso, voc aprender
os conceitos bsicos de bancos de dados relacionais e a avanada linguagem de
programao SQL. O curso fornece as habilidades essenciais em SQL que permitem criar
consultas em uma ou mais tabelas, manipular dados em tabelas, criar objetos de banco de
dados e consultar metadados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-4
Copyright 2004, Oracle. Todos os direitos reservados.
Oracle10g
Modelo de
desenvolvimento
nico
Conjuntos de
recursos comuns
Confiabilidade
Gerenciamento
unificado
Escalabilidade
Um
fornecedor
Recursos do Oracle10g
A release Oracle10g oferece uma infra-estrutura completa e de alto desempenho
que inclui:
Escalabilidade de departamentos at sites de e-business da empresa
Arquitetura segura, disponvel, confivel e avanada
Um modelo de desenvolvimento; opes de disponibilizao fcil
Aproveitamento do conjunto de recursos atuais de uma organizao por meio da
plataforma Oracle (incluindo SQL, PL/SQL, Java e XML)
Uma interface de gerenciamento para todas as aplicaes
Tecnologias padro do setor; sem bloqueios proprietrios
Alm de oferecer as vantagens relacionadas acima, a release Oracle10g contm o banco de
dados para a grade. A computao em grade pode diminuir drasticamente o custo de
computao, aumentar a disponibilidade dos recursos de computao e proporcionar mais
produtividade e qualidade.
A idia bsica da computao em grade a noo de computao como um servio
pblico, em analogia rede de energia eltrica ou rede telefnica. Como cliente da
grade, voc no se importa com o local onde os dados so mantidos ou onde realizada a
computao. Voc deseja que a computao seja concluda e que as informaes sejam
fornecidas quando especificado. No lado servidor, a grade refere-se a virtualizao e
provisionamento. Voc agrupa todos os recursos, provisiona-os dinamicamente com base
nas necessidades da sua empresa e, como conseqncia, obtm maior eficincia na
utilizao desses recursos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-5
Copyright 2004, Oracle. Todos os direitos reservados.
Oracle10g
Oracle10g
Estes so os trs produtos da infra-estrutura em grade da release Oracle10g:
Oracle Database 10g
Oracle Application Server 10g
Oracle Enterprise Manager 10g Grid Control
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-6
Copyright 2004, Oracle. Todos os direitos reservados.
Oracle Database 10g
Multimdia
Dados relacionais de objeto
Mensagens
Documentos
Oracle Database 10g
O Oracle Database 10g foi projetado para armazenar e gerenciar informaes empresariais.
Alm de eliminar custos de gerenciamento, ele oferece um servio de alta qualidade. A
reduo dos requisitos de configurao e gerenciamento associada ao ajuste automtico de
SQL diminuram drasticamente o custo de manuteno do ambiente.
O Oracle Database 10g um dos produtos da infra-estrutura em grade da release Oracle
10g. A computao em grade est relacionada ao conceito de computao como um servio
pblico. Os clientes no precisam saber onde os dados so mantidos nem em qual
computador esto armazenados. Basta ser capaz de solicitar informaes ou a computao
dos dados e receb-los como desejado.
O Oracle Database 10g gerencia todos os seus dados. No so apenas os dados relacionais
de objeto que o banco de dados de uma empresa deve gerenciar. Ele tambm pode gerenciar
dados no estruturados como:
Planilhas
Documentos do Word
Apresentaes do PowerPoint
XML
Tipos de dados multimdia, como MP3, elementos grficos, vdeo e outros
Os dados nem precisam estar no banco de dados. O Oracle Database 10g contm servios
que permitem armazenar metadados sobre as informaes mantidas em sistemas de
arquivos. Voc pode usar o servidor de banco de dados para gerenciar e fornecer
informaes onde quer que ele esteja localizado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-7
Copyright 2004, Oracle. Todos os direitos reservados.
Oracle Application Server 10g
Estrutura de
desenvolvimento
de aplicaes
Servidor de
aplicaes
Business intelligence
Portais
Integrao
Aplicaes transacionais
Oracle Application Server 10g
O Oracle Application Server 10g fornece uma plataforma de infra-estrutura completa para o
desenvolvimento e a disponibilizao de aplicaes empresariais. Ele integra vrias
funes, incluindo um ambiente de runtime de servios Web e J2EE, um portal empresarial,
um broker de integrao empresarial, business intelligence, armazenamento em cache na
Web e servios de gerenciamento de identidades.
O Oracle Application Server 10g contm novos recursos de computao em grade, que se
baseiam no sucesso do Oracle9i Application Server, com centenas de clientes que executam
aplicaes empresariais de produo.
O Oracle Application Server 10g o nico servidor de aplicaes que contm servios para
as diversas aplicaes de servidor que voc executar, incluindo:
Portais ou Web sites
Aplicaes transacionais Java
Aplicaes de business intelligence
Ele tambm possibilita a integrao entre usurios, aplicaes e dados em toda a
organizao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-8
Copyright 2004, Oracle. Todos os direitos reservados.
Oracle Enterprise Manager 10g
Grid Control
Provisionamento de software
Monitoramento no nvel de servios de aplicaes
Oracle Enterprise Manager 10g Grid Control
O Oracle Enterprise Manager 10g Grid Control a console de gerenciamento completa,
integrada e central, bem como a estrutura subjacente que automatiza as tarefas
administrativas nos conjuntos de sistemas em um ambiente de grade. Com ele, possvel
agrupar vrios ns de hardware, bancos de dados, servidores de aplicaes e outros destinos
em entidades lgicas nicas. O Grid Control permite o escalonamento com uma grade em
crescimento por meio da execuo de jobs, da imposio de polticas padro, do
monitoramento do desempenho e da automao de vrias outras tarefas em um grupo de
destinos, e no em diversos sistemas individualmente.
Provisionamento de Software
Com o Grid Control, o Oracle 10g automatiza a instalao, a configurao e a clonagem do
Application Server 10g e do Database 10g em vrios ns. O Oracle Enterprise Manager
contm uma estrutura comum para provisionamento e gerenciamento de software,
permitindo aos administradores criar, configurar, disponibilizar e utilizar novos servidores
com novas instncias do servidor de aplicaes e do banco de dados conforme necessrio.
Monitoramento no Nvel de Servios de Aplicaes
Assim como um usurio, o Oracle Grid Control avalia a disponibilidade e o desempenho da
infra-estrutura de grade como um todo, e no como unidades de armazenamento, caixas de
processamento, bancos de dados e servidores de aplicaes isolados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-9
Copyright 2004, Oracle. Todos os direitos reservados.
Sistemas de Gerenciamento de Banco de Dados
Relacional e Banco de Dados Relacional de Objeto
Modelo relacional e modelo relacional de objeto
Tipos de dados e objetos definidos pelo usurio
Compatibilidade integral com o banco de dados
relacional
Suporte a objetos grandes e multimdia
Recursos de servidor de banco de dados de alta
qualidade
Sobre o Servidor Oracle
O servidor Oracle suporta modelos relacionais e modelos relacionais de objeto.
O servidor estende os recursos de modelagem de dados para suportar um modelo de banco
de dados relacional de objeto que inclui programao orientada a objeto, tipos de dados
complexos, objetos de negcios complexos e compatibilidade integral com o mundo
relacional.
Ele contm vrios recursos para proporcionar melhor desempenho e funcionalidade de
aplicaes OLTP (On-Line Transaction Processing), como o compartilhamento mais
eficiente de estruturas de dados durante o runtime, caches de buffer maiores e constraints
adiveis. As aplicaes de data warehouse so beneficiadas por melhorias como a execuo
paralela de operaes de insero, atualizao e deleo; o particionamento; e a otimizao
de consultas em paralelo. Operando na estrutura da NCA (Network Computing
Architecture), o modelo Oracle suporta aplicaes cliente/servidor e aplicaes baseadas na
Web distribudas e com vrias camadas.
Para obter mais informaes sobre o modelo relacional e o modelo relacional de objeto,
consulte o manual Database Concepts.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-10
Copyright 2004, Oracle. Todos os direitos reservados.
Plataforma Oracle para a Internet
G
e
r
e
n
c
i
a
m
e
n
t
o

d
o

s
i
s
t
e
m
a
Servios de rede
Bancos
de dados
Servidores de
aplicaes
Aplicaes para a Internet
Qualquer
browser
Qualquer
cliente FTP
Qualquer
cliente de e-mail
SQL
PL/SQL
Java
Clientes
F
e
r
r
a
m
e
n
t
a
s

d
e

d
e
s
e
n
v
o
l
v
i
m
e
n
t
o
Lgica de
apresentao
e negcios
Lgica de
negcios
e dados
Plataforma Oracle para a Internet
Para desenvolver uma aplicao de e-commerce, necessrio um produto que possa
armazenar e gerenciar dados, um produto que possa proporcionar um ambiente de runtime
para as aplicaes que implementam a lgica de negcios e um produto que possa monitorar
e diagnosticar a aplicao aps a sua integrao. Os produtos Oracle 10g abordados
fornecem todos os componentes necessrios ao desenvolvimento da sua aplicao.
A Oracle oferece uma plataforma completa para a Internet de alto desempenho que permite
desenvolver aplicaes de e-commerce e data warehouse. A Plataforma Oracle para a
Internet integrada contm todos os elementos necessrios ao desenvolvimento,
disponibilizao e ao gerenciamento de aplicaes para a Internet, incluindo estes trs
elementos principais:
Clientes baseados em browser para processar a apresentao
Servidores de aplicaes para executar a lgica de negcios e fornecer a lgica de
apresentao a clientes baseados em browser
Bancos de dados para executar a lgica de negcios com uso intensivo de banco de
dados e para fornecer dados
A Oracle oferece uma grande variedade de ferramentas avanadas de desenvolvimento
orientadas por GUI (interface grfica do usurio) para criar aplicaes de negcios, bem
como um amplo conjunto de aplicaes de software para diversos setores e reas de
negcios. O Oracle Developer Suite contm ferramentas para o desenvolvimento de forms e
relatrios, e para a criao de data warehouses. possvel criar stored procedures, functions
e packages com SQL, PL/SQL ou Java.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-11
Copyright 2004, Oracle. Todos os direitos reservados.
Ciclo de Vida de Desenvolvimento do Sistema
Estratgia
e anlise
Projeto
Desenvolvimento
e documentao
Transio
Produo
Ciclo de Vida de Desenvolvimento do Sistema
Do conceito produo, voc pode desenvolver um banco de dados usando o ciclo de vida
de desenvolvimento do sistema, que contm vrios estgios de desenvolvimento. Essa
abordagem sistemtica e completa do desenvolvimento de um banco de dados transforma
requisitos de informaes de negcios em um banco de dados operacional.
Fase de Estratgia e Anlise
Estude e analise os requisitos de negcios. Entreviste os usurios e os gerentes para
identificar os requisitos de informaes. Incorpore os objetivos das aplicaes e da
empresa, assim como as futuras especificaes do sistema.
Desenvolva modelos do sistema. Transforme a narrativa em uma representao grfica
das regras e necessidades de informaes de negcios. Confirme e refine o modelo
com os analistas e os especialistas.
Fase de Projeto
Projete o banco de dados com base no modelo desenvolvido na fase de estratgia e anlise.
Fase de Criao e Documentao
Desenvolva o prottipo do sistema. Crie e execute os comandos para produzir as
tabelas e os objetos de suporte do banco de dados.
Desenvolva a documentao do usurio, o texto da ajuda e os manuais de operao
para suportar o uso e a operao do sistema.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-12
Copyright 2004, Oracle. Todos os direitos reservados.
Ciclo de Vida de Desenvolvimento do Sistema
Estratgia
e anlise
Projeto
Desenvolvimento
e documentao
Transio
Produo
Ciclo de Vida de Desenvolvimento do Sistema (continuao)
Fase de Transio
Refine o prottipo. Passe uma aplicao para a fase de produo com testes de aceitao
pelos usurios, converso dos dados existentes e operaes paralelas. Faa todas as
modificaes necessrias.
Fase de Produo
Apresente o sistema aos usurios. Opere o sistema de produo. Monitore seu desempenho
e, depois, aprimore e refine o sistema.
Observao: As diversas fases do ciclo de desenvolvimento do sistema podem ser
realizadas de forma iterativa. Este curso concentra-se na fase de criao do ciclo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-13
Copyright 2004, Oracle. Todos os direitos reservados.
Armazenamento de Dados
em Diferentes Mdias
Planilha
eletrnica
Armrio de arquivo
Banco de dados
Armazenando Informaes
Toda organizao tem necessidades de informaes. Uma biblioteca mantm uma lista de
membros, livros, datas de vencimento e multas. Uma empresa precisa guardar informaes
sobre funcionrios, departamentos e salrios. Essas informaes so chamadas de dados.
As organizaes podem armazenar dados em vrias mdias e em formatos diferentes; por
exemplo, um documento impresso em um armrio de arquivo ou dados armazenados em
planilhas eletrnicas ou em bancos de dados.
Um banco de dados um conjunto organizado de informaes.
Para gerenciar bancos de dados, necessrio um DBMS (Database Management System).
Um DBMS um programa que armazena, recupera e modifica dados de bancos de dados
sob demanda. Existem quatro tipos principais de bancos de dados: hierrquico, de rede,
relacional e (recentemente) relacional de objeto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-14
Copyright 2004, Oracle. Todos os direitos reservados.
Conceito de Banco de Dados Relacional
O Dr. E. F. Codd props o modelo relacional para
sistemas de banco de dados em 1970.
Ele a base para o RDBMS.
O modelo relacional composto de:
Um conjunto de objetos ou relaes
Um conjunto de operadores para agir sobre as
relaes
Integridade de dados para preciso e consistncia
Modelo Relacional
Os princpios do modelo relacional foram descritos primeiramente pelo Dr. E. F. Codd em
um trabalho de junho de 1970 intitulado "A Relational Model of Data for Large Shared
Data Banks". Nesse trabalho, o Dr. Codd propunha o modelo relacional para sistemas de
banco de dados.
Os modelos comuns usados na poca eram o hierrquico e o de rede, ou at mesmo
estruturas de dados simples de flat files. Logo depois, o RDBMS (Relational Database
Management System) tornou-se muito popular, especialmente pela facilidade de uso e
flexibilidade em termos de estrutura. Alm disso, vrios fornecedores inovadores, como a
Oracle, complementaram o RDBMS com um conjunto de produtos eficientes para usurios
e desenvolvedores de aplicaes, que compunham uma soluo integral.
Componentes do Modelo Relacional
Conjuntos de objetos ou relaes que armazenam os dados
Um conjunto de operadores que age sobre as relaes para produzir outras relaes
Integridade de dados para preciso e consistncia
Para obter mais informaes, consulte An Introduction to Database Systems, Eighth Edition
(Addison-Wesley: 2004), escrito por Chris Date.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-15
Copyright 2004, Oracle. Todos os direitos reservados.
Definio de um Banco de Dados Relacional
Um banco de dados relacional um conjunto de
relaes ou tabelas de duas dimenses.
Servidor
Oracle
Nome da tabela:
EMPLOYEES
Nome da tabela:
DEPARTMENTS

Definio de um Banco de Dados Relacional
Um banco de dados relacional usa relaes ou tabelas de duas dimenses para armazenar
informaes.
Por exemplo, possvel armazenar informaes sobre todos os funcionrios de uma
empresa. Em um banco de dados relacional, voc cria diversas tabelas para armazenar
diferentes informaes sobre os funcionrios, como uma tabela de funcionrios, uma tabela
de departamentos e uma tabela de salrios.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-16
Copyright 2004, Oracle. Todos os direitos reservados.
Modelos de Dados
Modelo de
sistema
imaginado
pelo cliente
Modelo de entidade
do modelo do cliente
Tabelas em disco
Servidor
Oracle
Modelo de tabela
do modelo de entidade
Modelos de Dados
Os modelos constituem a base do projeto. Os engenheiros desenvolvem o modelo de um
carro para aperfeioar os detalhes antes de produzi-lo. Da mesma forma, os designers de
sistemas desenvolvem modelos para explorar idias e compreender melhor o projeto do
banco de dados.
Finalidade dos Modelos
Os modelos ajudam a comunicar os conceitos imaginados pelas pessoas. possvel us-los
com os seguintes objetivos:
Comunicar
Categorizar
Descrever
Especificar
Investigar
Desenvolver
Analisar
Imitar
O objetivo produzir um modelo que atenda a vrios desses usos, seja compreendido por
um usurio final e contenha detalhes suficientes para que um desenvolvedor crie um sistema
de banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-17
Copyright 2004, Oracle. Todos os direitos reservados.
Modelo de Relacionamento entre Entidades
Crie um diagrama de relacionamento entre entidades
a partir de especificaes de negcios ou narrativas:
Cenrio
". . . Designe um ou mais funcionrios a um
departamento. . ."
". . . Ainda no foram designados funcionrios a
alguns departamentos. . ."
EMPLOYEE
#* number
* name
o job title
DEPARTMENT
#* number
* name
o location
designado a
composto de
Modelagem de ER
Em um sistema eficiente, os dados so divididos em entidades ou categorias discretas. Um
modelo de ER (Entity Relationship) uma ilustrao de vrias entidades em uma empresa e
dos relacionamentos entre elas. Um modelo de ER derivado de especificaes de negcios
ou narrativas e criado durante a fase de anlise do ciclo de vida de desenvolvimento do
sistema. Os modelos de ER separam as informaes necessrias a uma empresa das
atividades realizadas por ela. Embora as empresas possam mudar de atividades, o tipo de
informaes tende a permanecer constante. Portanto, as estruturas de dados tambm tendem
a permanecer constantes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-18
Modelagem de ER (continuao)
Vantagens da Modelagem de ER
Documenta as informaes para a organizao em um formato simples e preciso
Possibilita uma viso clara do escopo dos requisitos de informaes
Fornece um mapa ilustrado e de fcil compreenso do projeto do banco de dados
Oferece uma estrutura eficiente para integrar vrias aplicaes
Componentes Principais
Entidade: Algo importante sobre o qual so necessrias informaes. Como exemplos,
podemos citar departamentos, funcionrios e pedidos.
Atributo: Algo que descreve ou qualifica uma entidade. Por exemplo, para a entidade
de funcionrio, os atributos sero o nmero, o nome, o cargo, a data de admisso, o
nmero do departamento e outros dados sobre o funcionrio. Cada um desses atributos
obrigatrio ou opcional. Esse estado denominado opcionalidade.
Relacionamento: Uma associao nomeada entre entidades que exibe a opcionalidade
e o grau. Como exemplos, podemos citar as associaes entre funcionrios e
departamentos, e entre pedidos e itens.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-19
Copyright 2004, Oracle. Todos os direitos reservados.
Convenes de Modelagem de
Relacionamento entre Entidades
Entidade
Nome exclusivo, singular
Letras maisculas
Caixa editvel
Sinnimo entre parnteses
UID (Unique Identifier)
Principal marcado com "#"
Secundrio marcado com "(#)"
EMPLOYEE
#* number
* name
o job title
DEPARTMENT
#* number
* name
o location
Atributo
Nome singular
Letras minsculas
Obrigatrio marcado com *
Opcional marcado com "o"
designado a
composto de
Convenes da Modelagem de ER
Entidades
Para representar uma entidade em um modelo, use as seguintes convenes:
Nome de entidade exclusivo, singular
Nome de entidade em maisculas
Caixa editvel
Nomes de sinnimos opcionais em maisculas entre parnteses: ( )
Atributos
Para representar um atributo em um modelo, use as seguintes convenes:
Nome singular em minsculas
Tag de asterisco (*) para atributos obrigatrios (isto , valores que devem ser
conhecidos)
Tag de letra "o" para atributos opcionais (isto , valores que podem ser conhecidos)
Relacionamentos
Smbolo Descrio
Linha tracejada Elemento opcional que indica probabilidade
Linha slida Elemento necessrio que indica obrigatoriedade
P-de-galinha Elemento de grau que indica um ou mais
Linha nica Elemento de grau que indica apenas um

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-20
Copyright 2004, Oracle. Todos os direitos reservados.
Convenes de Modelagem de
Relacionamento entre Entidades
Entidade
Nome exclusivo, singular
Letras maisculas
Caixa editvel
Sinnimo entre parnteses
UID (Unique Identifier)
Principal marcado com #
Secundrio marcado com (#)
EMPLOYEE
#* number
* name
o job title
DEPARTMENT
#* number
* name
o location
Atributo
Nome singular
Letras minsculas
Obrigatrio marcado com *
Opcional marcado com "o"
designado a
composto de
Convenes de Modelagem de ER (continuao)
Relacionamentos
Cada direo do relacionamento contm:
Um label: por exemplo, taught by ou assigned to
Uma opcionalidade: must be ou may be
Um grau: one and only one ou one or more
Observao: O termo cardinalidade sinnimo do termo grau.
Cada entidade de origem {may be | must be} nome de relacionamento {one and only one |
one or more} entidade de destino.
Observao: A conveno a leitura no sentido horrio.
Identificadores Exclusivos
Um UID (Unique Identifier, Identificador Exclusivo) uma combinao de atributos e/ou
relacionamentos utilizada para distinguir ocorrncias de uma entidade. Cada ocorrncia de
entidade deve ser identificada com exclusividade.
Marque cada atributo que compe o UID com um smbolo de nmero: #
Marque os UIDs secundrios com um smbolo de nmero entre parnteses: (#)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-21
Copyright 2004, Oracle. Todos os direitos reservados.
Relacionando Vrias Tabelas
Cada linha de dados de uma tabela identificada
com exclusividade por uma PK (Primary Key, Chave
Primria).
possvel relacionar logicamente dados de vrias
tabelas por meio de FKs (Foreign Keys, Chaves
Estrangeiras).
Nome da tabela: EMPLOYEES
Nome da tabela: DEPARTMENTS
Chave primria Chave primria Chave estrangeira

Relacionando Vrias Tabelas


Cada tabela contm dados que descrevem exatamente uma entidade. Por exemplo, a tabela
EMPLOYEES contm informaes sobre funcionrios. As categorias de dados so listadas
na parte superior de cada tabela e, em casos especficos, na parte inferior. Com um formato
de tabela, voc pode visualizar imediatamente, compreender e usar as informaes.
Como os dados sobre entidades distintas so armazenados em tabelas diferentes, talvez seja
necessrio combinar duas ou mais tabelas para responder a determinada pergunta. Por
exemplo, talvez voc queira saber a localizao do departamento onde um funcionrio
trabalha. Nesse caso, voc precisar de informaes da tabela EMPLOYEES (que contm
dados sobre funcionrios) e da tabela DEPARTMENTS (que contm informaes sobre
departamentos). Um RDBMS permite relacionar os dados de uma tabela aos de outra por
meio das chaves estrangeiras. Uma chave estrangeira uma coluna (ou um conjunto de
colunas) que faz referncia a uma chave primria na mesma tabela ou em outra tabela.
Voc pode usar a capacidade de relacionar dados de uma tabela a dados de outra para
organizar informaes em unidades gerenciveis separadas. possvel manter os dados
sobre funcionrios logicamente separados dos dados sobre departamentos armazenando
estes ltimos em outra tabela.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-22
Relacionando Vrias Tabelas (continuao)
Diretrizes de Chaves Primrias e Chaves Estrangeiras
No possvel usar valores duplicados em uma chave primria.
Em geral, no possvel alterar chaves primrias.
As chaves estrangeiras baseiam-se em valores de dados e so ponteiros lgicos (e no
fsicos).
Um valor de chave estrangeira deve corresponder a um valor de chave primria
existente ou a um valor de chave exclusiva; ou ento, deve ser nulo.
Uma chave estrangeira deve fazer referncia a uma coluna de chave primria ou
exclusiva.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-23
Copyright 2004, Oracle. Todos os direitos reservados.
Terminologia do Banco de Dados Relacional
1
2
3
4
6
5
Terminologia Usada em um Banco de Dados Relacional
Um banco de dados relacional pode conter uma ou muitas tabelas. A tabela a estrutura
bsica de armazenamento de um RDBMS. Ela pode conter todos os dados necessrios sobre
algo relativo ao mundo real, como funcionrios, NFFs ou clientes.
O slide mostra o contedo da relao ou da tabela EMPLOYEES. Os nmeros indicam:
1. Uma nica linha (ou tupla) que representa todos os dados necessrios a um
funcionrio especfico. Cada linha de uma tabela deve ser identificada por uma chave
primria, que impede linhas duplicadas. A ordem das linhas no importante;
especifique essa ordem quando os dados forem recuperados.
2. Uma coluna ou um atributo que contm o nmero do funcionrio. O nmero do
funcionrio identifica um funcionrio com exclusividade na tabela EMPLOYEES.
Neste exemplo, a coluna contendo o nmero do funcionrio designada como a chave
primria. Uma chave primria deve conter um valor, que deve ser exclusivo.
3. Uma coluna que no um valor-chave. Uma coluna representa um tipo de dados em
uma tabela; no exemplo, os dados representam os salrios de todos os funcionrios. A
ordem das colunas no importante durante o armazenamento de dados; especifique
essa ordem quando os dados forem recuperados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-24
Terminologia Usada em um Banco de Dados Relacional (continuao)
4. Uma coluna com o nmero dos departamentos, que tambm uma chave
estrangeira. Uma chave estrangeira uma coluna que define o relacionamento entre
tabelas. Uma chave estrangeira faz referncia a uma chave primria ou exclusiva na
mesma tabela ou em outra. No exemplo, DEPARTMENT_ID identifica com
exclusividade um departamento na tabela DEPARTMENTS.
5. A localizao de um campo a interseo entre uma linha e uma coluna. Um campo
s pode conter um valor.
6. Um campo pode no conter um valor. Nesse caso, seu valor nulo. Na tabela
EMPLOYEES, somente os funcionrios com a atribuio de representante de vendas
possuem um valor no campo COMMISSION_PCT (comisso).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-25
Copyright 2004, Oracle. Todos os direitos reservados.
Propriedades do Banco de Dados Relacional
Um banco de dados relacional:
Pode ser acessado e modificado com a execuo de
instrues SQL (Structured Query Language)
Contm um conjunto de tabelas sem ponteiros
fsicos
Usa um conjunto de operadores
Propriedades de um Banco de Dados Relacional
Em um banco de dados relacional, voc no especifica a rota de acesso s tabelas e no
precisa saber como os dados esto organizados fisicamente.
Para acessar o banco de dados, execute uma instruo SQL (Structured Query Language),
que a linguagem padro ANSI (American National Standards Institute) de operao de
bancos de dados relacionais. Essa linguagem contm um amplo conjunto de operadores para
particionar e combinar relaes. possvel usar instrues SQL para modificar o banco de
dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-26
Copyright 2004, Oracle. Todos os direitos reservados.
Comunicando-se com um RDBMS
por Meio de SQL
A instruo SQL
informada.
A instruo enviada
ao servidor Oracle.
Servidor
Oracle
SELECT department_name
FROM departments;
SQL (Structured Query Language)
O uso de SQL permite a comunicao com o servidor Oracle. A linguagem SQL apresenta
estas vantagens:
Eficiente
Fcil de aprender e usar
Funcionalmente completa (permite definir, recuperar e manipular os dados das tabelas)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-27
Copyright 2004, Oracle. Todos os direitos reservados.
Sistema de Gerenciamento de Banco
de Dados Relacional da Oracle
Tabelas de usurios
Dicionrio
de dados
Servidor
Oracle
Sistema de Gerenciamento de Banco de Dados Relacional da Oracle
A Oracle fornece um RDBMS flexvel denominado Banco de Dados Oracle 10g. Com os
recursos desse produto, voc pode armazenar e gerenciar dados com todas as vantagens de
uma estrutura relacional e de PL/SQL, um mecanismo que possibilita o armazenamento e a
execuo de unidades de programa. O Banco de Dados Oracle 10g tambm suporta Java e
XML. O servidor Oracle oferece opes de recuperao de dados com base em tcnicas de
otimizao. Ele contm recursos de segurana que controlam a forma como um banco de
dados acessado e usado. Outros recursos incluem a consistncia e a proteo de dados por
meio de mecanismos de bloqueio.
A release Oracle10g apresenta um mtodo aberto, completo e integrado para o
gerenciamento de informaes. Um servidor Oracle consiste em um banco de dados Oracle
e uma instncia de servidor Oracle. Sempre que um banco de dados iniciado, uma SGA
(System Global Area) alocada e os processos de background do Oracle so iniciados. A
SGA uma rea da memria usada para as informaes de banco de dados compartilhadas
pelos usurios de banco de dados. A combinao dos processos de background e dos buffers
de memria chamada de instncia Oracle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-28
Copyright 2004, Oracle. Todos os direitos reservados.
Instrues SQL
DML (Data Manipulation Language)
DDL (Data Definition Language)
Controle de transaes
DCL (Data Control Language)
SELECT
INSERT
UPDATE
DELETE
MERGE
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMENT
COMMIT
ROLLBACK
SAVEPOINT
GRANT
REVOKE
Instrues SQL
O Oracle SQL adota os padres aceitos pelo setor. Para assegurar a compatibilidade
futura com os padres em desenvolvimento, a Oracle Corporation mantm ativamente
uma equipe especializada nos comits de padres SQL. Os comits aceitos pelo setor so
o ANSI (American National Standards Institute) e o ISO (International Standards
Organization). Os dois comits aceitam SQL como a linguagem padro para os bancos de
dados relacionais.
Instruo Descrio
SELECT
INSERT
UPDATE
DELETE
MERGE
Recupera dados do banco de dados, informa novas linhas, altera linhas
existentes e remove linhas indesejadas das tabelas do banco de dados,
respectivamente. Conhecida coletivamente como DML (Data Manipulation
Language).
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMENT
Configura, altera e remove estruturas de dados das tabelas. Conhecida
coletivamente como DDL (Data Definition Language).
COMMIT
ROLLBACK
SAVEPOINT
Gerencia as alteraes feitas por instrues DML. As alteraes nos dados
podem ser agrupadas em transaes lgicas.
GRANT
REVOKE
Concede ou revoga direitos de acesso ao banco de dados Oracle e s estruturas
contidas nele. Conhecida coletivamente como DCL (Data Control Language).


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-29
Copyright 2004, Oracle. Todos os direitos reservados.
Tabelas Usadas no Curso
EMPLOYEES
DEPARTMENTS JOB_GRADES
Tabelas Usadas no Curso
Estas so as principais tabelas usadas neste curso:
Tabela EMPLOYEES: Fornece detalhes de todos os funcionrios
Tabela DEPARTMENTS: Fornece detalhes de todos os departamentos
Tabela JOB_GRADES: Fornece detalhes de salrios para diversos nveis
Observao: A estrutura e os dados de todas as tabelas so fornecidos no Apndice B.0
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I I-30
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
O Banco de Dados Oracle 10g o banco de dados
utilizado para a computao em grade.
Ele se baseia no sistema de gerenciamento de banco
de dados relacional de objeto.
Os bancos de dados relacionais so compostos de
relaes, gerenciados por operaes relacionais e
regidos por constraints de integridade de dados.
Com o servidor Oracle, voc pode armazenar e
gerenciar informaes com a linguagem SQL e o
mecanismo PL/SQL.
Sumrio
Os sistemas de gerenciamento de banco de dados relacional so compostos de objetos
ou relaes. Eles so gerenciados por operaes e regidos por constraints de integridade de
dados.
A Oracle Corporation cria produtos e servios para atender s suas necessidades de
RDBMS. Os principais produtos so:
Oracle Database 10g, com o qual voc armazena e gerencia informaes por meio de
SQL
Oracle Application Server 10g, com o qual voc executa todas as aplicaes
Oracle Enterprise Manager 10g Grid Control, usado para gerenciar e automatizar
tarefas administrativas nos conjuntos de sistemas de um ambiente de grade.
SQL
O servidor Oracle suporta instrues SQL com o padro ANSI e contm extenses. Com a
linguagem SQL, possvel estabelecer comunicao com o servidor para acessar, manipular
e controlar dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Recuperando Dados com
a Instruo SQL SELECT
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Listar os recursos das instrues SQL SELECT
Executar uma instruo SELECT bsica
Diferenciar instrues SQL de comandos iSQL*Plus
Objetivos
Para extrair dados do banco de dados, necessrio usar a instruo SQL (Structured Query
Language) SELECT. Talvez voc precise restringir as colunas exibidas. Esta lio descreve
todas as instrues SQL necessrias para executar essas aes. Voc pode criar instrues
SELECT para usar mais de uma vez.
Esta lio tambm aborda o ambiente iSQL*Plus no qual as instrues SQL so executadas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-3
Copyright 2004, Oracle. Todos os direitos reservados.
Recursos de Instrues SQL SELECT
Seleo Projeo
Tabela 1 Tabela 2
Tabela 1 Tabela 1
Join
Recursos de Instrues SQL SELECT
Uma instruo SELECT recupera informaes do banco de dados. Com essa instruo,
possvel usar os seguintes recursos:
Projeo: Escolha as colunas de uma tabela a serem retornadas por uma consulta.
Escolha quantas colunas forem necessrias
Seleo: Escolha as linhas de uma tabela a serem retornadas por uma consulta.
possvel usar vrios critrios para restringir as linhas recuperadas.
Join: Una os dados armazenados em diferentes tabelas especificando o vnculo entre
elas. As joins SQL so abordadas com mais detalhes em uma lio posterior.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-4
Copyright 2004, Oracle. Todos os direitos reservados.
Instruo SELECT Bsica
SELECT identifica as colunas a serem exibidas
FROM identifica a tabela contendo essas colunas
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
Instruo SELECT Bsica
Em sua forma mais simples, uma instruo SELECT deve incluir:
Uma clusula SELECT, que especifica as colunas a serem exibidas
Uma clusula FROM, que identifica a tabela com as colunas listadas na clusula
SELECT
Na sintaxe:
SELECT uma lista de uma ou mais colunas
* seleciona todas as colunas
DISTINCT suprime as colunas duplicadas
column|expression seleciona a coluna nomeada ou a expresso
alias fornece cabealhos distintos s colunas selecionadas
FROM table especifica a tabela que contm as colunas
Observao: Neste curso, os termos palavra-chave, clusula e instruo so usados da
seguinte maneira:
Uma palavra-chave um elemento individual de SQL.
Por exemplo, SELECT e FROM so palavras-chave.
Uma clusula uma parte de uma instruo SQL.
Por exemplo, SELECT employee_id, last_name, ... uma clusula.
Uma instruo uma combinao de duas ou mais clusulas.
Por exemplo, SELECT * FROM employees uma instruo SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-5
Copyright 2004, Oracle. Todos os direitos reservados.
Selecionando Todas as Colunas
SELECT *
FROM departments;
Selecionando Todas as Colunas de Todas as Linhas
Voc pode exibir todas as colunas de dados de uma tabela inserindo um asterisco (*) aps a
palavra-chave SELECT. No exemplo do slide, a tabela departments contm quatro colunas:
DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID e LOCATION_ID. A tabela
contm sete linhas, uma para cada departamento.
Voc tambm pode exibir todas as colunas da tabela listando-as aps a palavra-chave
SELECT. Por exemplo, a instruo SQL a seguir (como o exemplo do slide) exibe todas as
colunas e linhas da tabela DEPARTMENTS:
SELECT department_id, department_name, manager_id, location_id
FROM departments;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-6
Copyright 2004, Oracle. Todos os direitos reservados.
Selecionando Colunas Especficas
SELECT department_id, location_id
FROM departments;
Selecionando Colunas Especficas de Todas as Linhas
Para exibir colunas especficas de uma tabela, voc pode usar a instruo SELECT com os
nomes das colunas separados por vrgulas. O exemplo do slide exibe todos os nmeros de
departamentos e locais da tabela DEPARTMENTS.
Na clusula SELECT, especifique as colunas desejadas na ordem em que devero aparecer
na sada. Por exemplo, para exibir o local antes do nmero do departamento da esquerda
para a direita, use a seguinte instruo:
SELECT location_id, department_id
FROM departments;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-7
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Instrues SQL
As instrues SQL no fazem distino entre
maisculas e minsculas.
As instrues SQL podem ocupar uma ou mais linhas.
No possvel abreviar palavras-chave ou dividi-las
em duas linhas.
As clusulas geralmente so colocadas em linhas
separadas.
Os recuos so usados para melhorar a legibilidade.
No iSQL*Plus, o encerramento das instrues SQL
com ponto-e-vrgula (;) opcional. A utilizao de
ponto-e-vrgula ser obrigatria se voc executar
vrias instrues SQL.
No SQL*Plus, voc dever encerrar cada instruo
SQL com ponto-e-vrgula (;).
Criando Instrues SQL
Com estas diretrizes e regras simples, voc pode criar instrues vlidas de fcil leitura e
edio:
As instrues SQL no fazem distino entre maisculas e minsculas (a menos que
essa distino seja indicada).
possvel informar instrues SQL em uma ou vrias linhas.
No possvel dividir palavras-chave em duas linhas ou abrevi-las.
As clusulas normalmente so colocadas em linhas separadas por questes de
legibilidade e facilidade de edio.
Devem ser usados recuos para tornar o cdigo mais legvel.
Em geral, as palavras-chave so informadas em maisculas; todas as outras palavras,
como nomes de tabelas e colunas, so informadas em minsculas.
Executando Instrues SQL
No iSQL*Plus, clique no boto Execute para executar os comandos na janela de edio.
No SQL*Plus, encerre a instruo SQL com ponto-e-vrgula e pressione a tecla Enter para
executar o comando.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-8
Copyright 2004, Oracle. Todos os direitos reservados.
Defaults de Cabealhos de Colunas
iSQL*Plus:
Alinhamento de cabealho default: centralizado
Exibio de cabealho default: letras maisculas
SQL*Plus:
Os cabealhos das colunas de caractere e data so
alinhados esquerda
Os cabealhos das colunas de nmero so alinhados
direita
Exibio de cabealho default: letras maisculas
Defaults de Cabealhos de Colunas
No iSQL*Plus, os cabealhos das colunas so exibidos em maisculas e centralizados.
SELECT last_name, hire_date, salary
FROM employees;
Voc pode substituir o cabealho da coluna por um apelido. Os apelidos de colunas so
abordados posteriormente nesta lio.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-9
Copyright 2004, Oracle. Todos os direitos reservados.
Expresses Aritmticas
Crie expresses com dados de nmero e data usando
operadores aritmticos.
Multiplicar *
Dividir /
Subtrair -
Somar +
Descrio Operador
Expresses Aritmticas
Talvez voc precise modificar a forma como os dados so exibidos, realizar clculos ou
examinar cenrios hipotticos. Todas essas aes so possveis com o uso de expresses
aritmticas. Uma expresso aritmtica pode conter nomes de colunas, valores numricos
constantes e operadores aritmticos.
Operadores Aritmticos
O slide lista os operadores aritmticos disponveis em SQL. Voc pode usar operadores
aritmticos em qualquer clusula de uma instruo SQL (exceto na clusula FROM).
Observao: Nos tipos de dados DATE e TIMESTAMP, s possvel usar os operadores de
adio e subtrao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-10
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary, salary + 300
FROM employees;
Usando Operadores Aritmticos

Usando Operadores Aritmticos


O exemplo do slide usa o operador de adio para calcular um aumento de salrio de US$
300 para todos os funcionrios. O slide tambm exibe uma coluna SALARY+300 na sada.
Observe que a coluna SALARY+300 calculada resultante no uma nova coluna da tabela
EMPLOYEES; ela existe apenas para fins de exibio. Por default, o nome de uma nova
coluna origina-se do clculo que a gerou neste caso, salary+300.
Observao: O servidor Oracle ignora os espaos em branco antes e depois do operador
aritmtico.
Precedncia de Operadores
Se uma expresso aritmtica contiver mais de um operador, a multiplicao e a diviso
sero avaliadas primeiro. Se os operadores de uma expresso tiverem a mesma prioridade, a
avaliao ser realizada da esquerda para a direita.
Voc pode usar parnteses para impor a avaliao da expresso entre parnteses primeiro.
Regras de Precedncia:
A multiplicao e a diviso ocorrem antes da adio e da subtrao.
Os operadores com a mesma prioridade so avaliados da esquerda para a direita.
So usados parnteses para sobrepor a precedncia default ou tornar a instruo mais
clara.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-11
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary, 12*salary+100
FROM employees;
Precedncia de Operadores
SELECT last_name, salary, 12*(salary+100)
FROM employees;

1
2
Precedncia de Operadores (continuao)
O primeiro exemplo do slide exibe o sobrenome, o salrio e a remunerao anual dos
funcionrios. Para calcular a remunerao anual, ele multiplica o salrio mensal por 12 e
acrescenta um bnus nico de US$ 100. Observe que a multiplicao executada antes da
adio.
Observao: Use parnteses para reforar a ordem padro de precedncia e para tornar a
expresso mais clara. Por exemplo, a expresso do slide pode ter a forma
(12*salary)+100 sem alteraes no resultado.
Usando Parnteses
Voc pode sobrepor as regras de precedncia usando parnteses para especificar a ordem na
qual os operadores devem ser executados.
O segundo exemplo do slide exibe o sobrenome, o salrio e a remunerao anual dos
funcionrios. Ele calcula a remunerao anual da seguinte forma: adiciona um bnus
mensal de US$ 100 ao salrio mensal e multiplica esse subtotal por 12. Em funo dos
parnteses, a adio tem prioridade sobre a multiplicao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-12
Copyright 2004, Oracle. Todos os direitos reservados.
Definindo um Valor Nulo
Um valor nulo no est disponvel nem designado
e no conhecido ou aplicvel.
Um valor nulo diferente de zero ou de um espao
em branco.
SELECT last_name, job_id, salary, commission_pct
FROM employees;

Valores Nulos
Se, em uma coluna especfica, uma linha no contiver um valor de dados, o valor ser nulo
ou conter um valor nulo.
Um valor nulo no est disponvel nem designado e no conhecido ou aplicvel. Um valor
nulo diferente de zero ou de um espao. Zero um nmero e um espao um caractere.
As colunas de qualquer tipo de dados podem conter valores nulos. No entanto, algumas
constraints (NOT NULL e PRIMARY KEY) impedem o uso de valores nulos em colunas.
Na coluna COMMISSION_PCT da tabela EMPLOYEES, observe que apenas um gerente de
vendas ou um representante de vendas pode receber comisso. Os outros funcionrios no
tm direito a comisses. Um valor nulo representa essa situao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-13
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, 12*salary*commission_pct
FROM employees;
Valores Nulos
em Expresses Aritmticas
As expresses aritmticas que contm um valor nulo
so avaliadas como nulas.

Valores Nulos em Expresses Aritmticas


Se o valor de uma coluna na expresso aritmtica for nulo, o resultado ser nulo. Por
exemplo, se voc tentar realizar uma diviso por zero, ser gerado um erro. Entretanto, se
voc dividir um nmero por um valor nulo, o resultado ser nulo ou desconhecido.
No exemplo do slide, o funcionrio King no recebe comisso. Como a coluna
COMMISSION_PCT na expresso aritmtica nula, o resultado ser nulo.
Para obter mais informaes, consulte "Basic Elements of SQL" no manual SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-14
Copyright 2004, Oracle. Todos os direitos reservados.
Definindo um Apelido de Coluna
Um apelido de coluna:
Renomeia um cabealho de coluna
til em clculos
Aparece imediatamente aps o nome da coluna
(Tambm possvel incluir a palavra-chave opcional
AS entre o nome e o apelido da coluna.)
Requer aspas duplas quando contm espaos ou
caracteres especiais, ou quando faz distino entre
maisculas e minsculas
Apelidos de Colunas
Quando exibe o resultado de uma consulta, o iSQL*Plus geralmente usa o nome da coluna
selecionada como seu cabealho. Como esse cabealho pode no ser descritivo, talvez seja
difcil compreend-lo. Para alterar um cabealho de coluna, use um apelido.
Especifique o apelido aps a coluna na lista SELECT usando um espao como separador.
Por default, os cabealhos de apelidos aparecem em maisculas. Se o apelido contiver
espaos ou caracteres especiais (como # ou $), ou se fizer distino entre maisculas e
minsculas, delimite-o por aspas duplas (" ").
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-15
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Apelidos de Colunas
SELECT last_name "Name" , salary*12 "Annual Salary"
FROM employees;
SELECT last_name AS name, commission_pct comm
FROM employees;

Apelidos de Colunas (continuao)


O primeiro exemplo exibe os nomes e os percentuais de comisso de todos os funcionrios.
Observe que a palavra-chave opcional AS foi usada antes do apelido de coluna name. O
resultado da consulta ser o mesmo com ou sem a incluso da palavra-chave AS. Observe
tambm que, na instruo SQL, os apelidos das colunas, name e comm, esto em
minsculas, enquanto o resultado da consulta exibe os cabealhos das colunas em
maisculas. Como mencionado em um slide anterior, os cabealhos das colunas aparecem
em maisculas por default.
O segundo exemplo exibe os sobrenomes e os salrios anuais de todos os funcionrios.
Como Annual Salary contm um espao, ele foi delimitado por aspas duplas. Observe
que o cabealho da coluna na sada exatamente igual ao apelido da coluna.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-16
Copyright 2004, Oracle. Todos os direitos reservados.
Operador de Concatenao
Um operador de concatenao:
Vincula colunas ou strings de caracteres a outras
colunas
representado por duas barras verticais (||)
Cria uma coluna resultante que uma expresso de
caracteres
SELECT last_name||job_id AS "Employees"
FROM employees;

Operador de Concatenao
Voc pode vincular uma coluna a outras colunas, expresses aritmticas ou valores de
constantes para criar uma expresso de caracteres usando o operador de concatenao (||).
As colunas nos dois lados do operador so combinadas para formar uma nica coluna de
sada.
No exemplo, LAST_NAME e JOB_ID so concatenadas e recebem o apelido Employees.
Observe que o sobrenome do funcionrio e o cdigo do cargo so combinados para formar
uma nica coluna de sada.
A palavra-chave AS antes do apelido facilita a leitura da clusula SELECT.
Valores Nulos com o Operador de Concatenao
Se voc concatenar um valor nulo com uma string de caracteres, o resultado ser uma string
de caracteres. LAST_NAME || NULL resulta em LAST_NAME.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-17
Copyright 2004, Oracle. Todos os direitos reservados.
Strings de Caracteres Literais
Um literal um caractere, uma data ou um nmero
includo na instruo SELECT.
necessrio delimitar os valores dos literais de
caractere e data por aspas simples.
Cada string de caracteres da sada corresponde
a apenas uma linha retornada.
Strings de Caracteres Literais
Um literal um caractere, uma data ou um nmero includo na lista SELECT que no
constitui um nome ou um apelido de coluna. Ele impresso para cada linha retornada.
possvel incluir strings de literais de texto em formato livre no resultado da consulta. Essas
strings so tratadas como uma coluna na lista SELECT.
Os literais de caractere e data devem ser delimitados por aspas simples (' '); em literais de
nmero, as aspas no so necessrias.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-18
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Strings de Caracteres Literais

SELECT last_name ||' is a '||job_id


AS "Employee Details"
FROM employees;
Strings de Caracteres Literais (continuao)
O exemplo do slide exibe os sobrenomes e os cdigos dos cargos de todos os funcionrios.
O cabealho da coluna Employee Details. Observe os espaos entre as aspas simples na
instruo SELECT. Esses espaos melhoram a legibilidade da sada.
No exemplo a seguir, o sobrenome e o salrio de cada funcionrio so concatenados com
um literal para que as linhas retornadas sejam mais significativas:
SELECT last_name ||': 1 Month salary = '||salary Monthly
FROM employees;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-19
Copyright 2004, Oracle. Todos os direitos reservados.
Operador de Aspas (q) Alternativo
Especifique seu prprio delimitador de aspas
Escolha qualquer delimitador
Melhore a legibilidade e a utilizao
SELECT department_name ||
q'[, it's assigned Manager Id: ]'
|| manager_id
AS "Department and Manager"
FROM departments;

Operador de Aspas (q) Alternativo


Vrias instrues SQL usam literais de caractere em expresses ou condies. Se o prprio
literal contiver aspas simples, voc poder usar o operador de aspas (q) e escolher o
delimitador de aspas que desejar.
Voc pode escolher qualquer delimitador conveniente, single-byte ou multi-byte, ou um
destes pares de caracteres: [ ], { }, ( ) ou < >.
No exemplo mostrado, a string contm aspas simples, que normalmente interpretada como
um delimitador de uma string de caracteres. Entretanto, o uso do operador q requer a
utilizao de colchetes [] como o delimitador de aspas. A string entre os delimitadores de
colchetes interpretada como uma string de caracteres literais.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-20
Copyright 2004, Oracle. Todos os direitos reservados.
Linhas Duplicadas
A exibio default de consultas mostra todas as linhas,
inclusive as linhas duplicadas.
SELECT department_id
FROM employees;

SELECT DISTINCT department_id


FROM employees;

1
2
Linhas Duplicadas
A menos que seja feita outra especificao, o iSQL*Plus exibe os resultados de uma
consulta sem eliminar as linhas duplicadas. O primeiro exemplo do slide exibe todos os
nmeros de departamentos da tabela EMPLOYEES. Observe que os nmeros de
departamentos so repetidos.
Para eliminar linhas duplicadas do resultado, inclua a palavra-chave DISTINCT na clusula
SELECT logo aps a palavra-chave SELECT. No segundo exemplo do slide, a tabela
EMPLOYEES contm, na verdade, 20 linhas, mas existem apenas sete nmeros de
departamentos exclusivos na tabela.
Voc pode especificar vrias colunas aps o qualificador DISTINCT. Esse qualificador
afeta todas as colunas selecionadas e o resultado so todas as combinaes distintas das
colunas.
SELECT DISTINCT department_id, job_id
FROM employees;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-21
Copyright 2004, Oracle. Todos os direitos reservados.
Interao entre SQL e iSQL*Plus
Instrues SQL
Resultados de consultas
Comandos
iSQL*Plus
Cliente
Relatrio formatado
Browser de
Internet
Servidor
Oracle
SQL e iSQL*Plus
SQL uma linguagem de comandos para a comunicao com o servidor Oracle a partir de
qualquer ferramenta ou aplicao. O Oracle SQL contm vrias extenses.
iSQL*Plus uma ferramenta Oracle que reconhece e submete instrues SQL ao servidor
Oracle para execuo e contm sua prpria linguagem de comandos.
Recursos de SQL
Pode ser usada por vrios usurios, incluindo aqueles com pouca ou nenhuma
experincia em programao
uma linguagem no procedural
uma linguagem semelhante ao idioma ingls
Recursos de iSQL*Plus
acessado de um browser
Aceita instrues SQL
Possibilita a edio on-line para modificar instrues SQL
Controla definies de ambiente
Formata resultados de consultas em um relatrio bsico
Acessa bancos de dados locais e remotos
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-22
Copyright 2004, Oracle. Todos os direitos reservados.
Instrues SQL e Comandos iSQL*Plus
Instrues
SQL
SQL
Uma linguagem
Padro ANSI
No possvel abreviar
palavras-chave.
As instrues
manipulam dados e
definies de tabelas no
banco de dados.
iSQL*Plus
Um ambiente
Propriedade Oracle
possvel abreviar palavras-
chave.
Os comandos no permitem
a manipulao de valores no
banco de dados.
Executado em um browser
Carregado centralmente; no
precisa ser implementado em
cada mquina
Comandos
iSQL*Plus
SQL e iSQL*Plus (continuao)
A seguinte tabela compara SQL e iSQL*Plus:
SQL iSQL*Plus
uma linguagem para a comunicao com o
servidor Oracle a fim de acessar os dados
Reconhece instrues SQL e as envia ao
servidor
baseada no padro ANSI (American
National Standards Institute) SQL
a interface proprietria da Oracle para a
execuo de instrues SQL
Recupera dados; manipula dados e
definies de tabelas no banco de dados
No permite a manipulao de valores no
banco de dados
No tem um caractere de continuao Utiliza um trao () como caractere de
continuao se o comando ultrapassa uma
linha
No pode ser abreviada Pode ser abreviado
Utiliza functions para aplicar formatao Utiliza comandos para formatar dados

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-23
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral do iSQL*Plus
Depois de efetuar login no iSQL*Plus, voc pode:
Descrever estruturas de tabelas
Informar, executar e editar instrues SQL
Salvar ou incluir instrues SQL em arquivos
Executar ou editar instrues armazenadas em
arquivos de script salvos
iSQL*Plus
O iSQL*Plus um ambiente no qual voc pode:
Executar instrues SQL para recuperar, modificar, adicionar e remover dados no
banco de dados
Formatar, armazenar e imprimir resultados de consultas na forma de relatrios, bem
como realizar clculos com base nesses resultados
Criar arquivos de script a fim de armazenar instrues SQL para uso futuro
possvel dividir os comandos iSQL*Plus nestas principais categorias:
Categoria Objetivo
Ambiente Afeta o comportamento geral das instrues SQL na sesso
Formato Formata os resultados da consulta
Manipulao de
arquivos
Salva instrues em arquivos de script de texto e executa
instrues a partir desses arquivos
Execuo Envia instrues SQL do browser para o servidor Oracle
Edio Modifica instrues SQL na janela Edit
Interao Permite criar e especificar variveis para instrues SQL,
imprimir valores de variveis e imprimir mensagens na tela
Diversos Tem vrios comandos para estabelecer conexo com o banco de
dados, manipular o ambiente iSQL*Plus e exibir definies de
colunas


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-24
Copyright 2004, Oracle. Todos os direitos reservados.
Efetuando Login no iSQL*Plus
No ambiente de browser:
Efetuando Login no iSQL*Plus
Para efetuar login em um ambiente de browser:
1. Inicie o browser.
2. Informe o endereo URL do ambiente iSQL*Plus.
3. Na pgina Login, informe os valores apropriados nos campos Username, Password e
Connect Identifier.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-25
Copyright 2004, Oracle. Todos os direitos reservados.
Ambiente iSQL*Plus
6
3 4 5
1
2
8 9
7
Ambiente iSQL*Plus
No browser, a pgina Workspace do iSQL*Plus tem as seguintes reas principais:
1. Caixa de texto: rea em que voc digita os comandos iSQL*Plus e as instrues SQL
2. Boto Execute: Clique neste boto para executar os comandos e as instrues da caixa
de texto
3. Boto Load Script: Exibe um form que permite identificar um caminho e um nome de
arquivo, ou um URL, com os comandos SQL, PL/SQL ou SQL*Plus a serem inseridos
na caixa de texto
4. Boto Save Script: Salva o contedo da caixa de texto em um arquivo
5. Boto Cancel: Interrompe a execuo do comando na caixa de texto
6. Boto Clear Screen: Clique neste boto para remover o texto contido na caixa
7. cone Logout: Clique nele para encerrar a sesso do iSQL*Plus e retornar pgina
Login do iSQL*Plus
8. cone Preferences: Clique nele para alterar a configurao da interface, a
configurao do sistema ou a senha
9. cone Help: Permite acesso documentao de ajuda do iSQL*Plus
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-26
Copyright 2004, Oracle. Todos os direitos reservados.
Exibindo a Estrutura de Tabelas
Use o comando iSQL*Plus DESCRIBE para exibir a
estrutura de uma tabela:
DESC[RIBE] tablename
Exibindo a Estrutura de Tabelas
No iSQL*Plus, possvel exibir a estrutura de uma tabela com o comando DESCRIBE. O
comando exibe os nomes de colunas e os tipos de dados, alm de mostrar se uma coluna
deve conter dados (ou seja, se apresenta uma constraint NOT NULL).
Na sintaxe, tablename o nome de uma tabela, view ou sinnimo existente que esteja
acessvel ao usurio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-27
Copyright 2004, Oracle. Todos os direitos reservados.
Exibindo a Estrutura de Tabelas
DESCRIBE employees
Exibindo a Estrutura de Tabelas (continuao)
O exemplo do slide exibe as informaes sobre a estrutura da tabela DEPARTMENTS.
Na exibio resultante, Null? indica que os valores dessa coluna podem ser desconhecidos.
NOT NULL indica que uma coluna deve conter dados. Type exibe o tipo de dados de uma
coluna.
Os tipos de dados so descritos nesta tabela:
Tipo de Dados

Descrio
NUMBER(p,s)

Valor numrico com um nmero mximo de p dgitos e s
dgitos direita da vrgula decimal
VARCHAR2(s)
Valor de caractere de tamanho varivel cujo tamanho mximo
igual a s
DATE
Valor de data e horrio entre 1 de janeiro de 4712 A.C. e 31
de dezembro de 9999 D.C.

CHAR(s)
Valor de caractere de tamanho fixo cujo tamanho igual a s

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-28
Copyright 2004, Oracle. Todos os direitos reservados.
Interagindo com Arquivos de Script
SELECT last_name, hire_date, salary
FROM employees;
1
2
Interagindo com Arquivos de Script
Incluindo Instrues e Comandos em um Arquivo de Script de Texto
Voc pode salvar comandos e instrues da caixa de texto do iSQL*Plus em um arquivo de
script de texto da seguinte forma:
1. Digite as instrues SQL na caixa de texto do iSQL*Plus.
2. Clique no boto Save Script. Essa ao abre a caixa de dilogo File Save do Windows.
Identifique o nome do arquivo. A extenso .uix usada como default. possvel
alterar o tipo de arquivo para um arquivo de texto ou salv-lo como um arquivo .sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-29
Copyright 2004, Oracle. Todos os direitos reservados.
Interagindo com Arquivos de Script
Interagindo com Arquivos de Script (continuao)
No exemplo mostrado, a instruo SQL SELECT especificada na caixa de texto salva no
arquivo emp_data.sql. Voc pode escolher o tipo do arquivo, o nome do arquivo e o
local em que deseja salvar o arquivo de script.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-30
Copyright 2004, Oracle. Todos os direitos reservados.
Interagindo com Arquivos de Script
1
Interagindo com Arquivos de Script (continuao)
Usando Instrues e Comandos de um Arquivo de Script no iSQL*Plus
Voc pode usar os comandos e as instrues salvos anteriormente em um arquivo de script
do iSQL*Plus da seguinte forma:
1. Clique no boto Load Script. Essa ao abre um form que permite digitar o nome do
arquivo ou um URL com os comandos SQL, PL/SQL ou SQL*Plus a serem
informados na caixa de texto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-31
Copyright 2004, Oracle. Todos os direitos reservados.
Interagindo com Arquivos de Script
2
3
D:\TEMP\emp_data.sql
Interagindo com Arquivos de Script (continuao)
2. Informe o nome e o caminho do script ou a localizao do URL. Se preferir, voc
poder clicar no boto Browse para procurar o nome e a localizao do script.
3. Clique no boto Load para incluir o contedo do arquivo ou a localizao do URL na
caixa de texto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-32
Copyright 2004, Oracle. Todos os direitos reservados.
Pgina History do iSQL*Plus
1
2
3
Executando Instrues Anteriores
A pgina History do iSQL*Plus permite executar instrues anteriores na sesso. Essa
pgina mostra as instrues SQL e os comandos iSQL*Plus executados mais recentemente.
Para reexecutar as instrues:
1. Selecione a instruo que deseja executar.
2. Clique no boto Load.
Observao
possvel controlar o nmero de instrues mostradas na pgina History com as
configuraes de Preferences.
Voc pode optar por deletar as instrues selecionadas clicando no boto Delete.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-33
Copyright 2004, Oracle. Todos os direitos reservados.
Pgina History do iSQL*Plus
3
4
Executando Instrues Anteriores (continuao)
3. Retorne pgina Workspace.
4. Clique no boto Execute para executar os comandos especificados na caixa de texto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-34
Copyright 2004, Oracle. Todos os direitos reservados.
Definindo Preferncias do iSQL*Plus
2
3
1
Preferncias do iSQL*Plus
Para definir preferncias relativas sesso do iSQL*Plus, clique no cone Preferences.
As preferncias so divididas em categorias. possvel definir preferncias
relacionadas formatao e execuo de scripts, bem como administrao de banco
de dados. Voc tambm pode alterar sua senha.
Quando voc escolhe uma categoria de preferncia, um form exibido e permite
definir as preferncias dessa categoria.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-35
Copyright 2004, Oracle. Todos os direitos reservados.
Definindo a Preferncia de
Localizao da Sada
1
2
Alterando a Localizao da Sada
possvel enviar os resultados gerados por uma instruo SQL ou um comando iSQL*Plus
para a tela (default), um arquivo ou outra janela do browser.
Na pgina Preferences:
1. Selecione uma opo em Output Location.
2. Clique no boto Apply.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-36
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a:
Criar uma instruo SELECT que:
Retorna todas as linhas e colunas de uma tabela
Retorna as colunas especificadas de uma tabela
Usa apelidos para exibir cabealhos de colunas mais
descritivos
Usar o ambiente iSQL*Plus para criar, salvar e
executar instrues SQL e comandos iSQL*Plus
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
Instruo SELECT
Nesta lio, voc aprendeu a recuperar dados de uma tabela do banco de dados com a
instruo SELECT.
SELECT *|{[DISTINCT] column [alias],...}
FROM table;
Na sintaxe:
SELECT uma lista de uma ou mais colunas
* seleciona todas as colunas
DISTINCT suprime as colunas duplicadas
column|expression seleciona a coluna nomeada ou a expresso
alias fornece cabealhos distintos s colunas selecionadas
FROM table especifica a tabela que contm as colunas
iSQL*Plus
iSQL*Plus um ambiente de execuo que permite enviar instrues SQL ao servidor de
banco de dados, bem como editar e salvar essas instrues. possvel executar as instrues
no prompt SQL ou em um arquivo de script.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-37
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 1: Viso Geral
Este exerccio aborda os seguintes tpicos:
Selecionando todos os dados de tabelas diferentes
Descrevendo a estrutura de tabelas
Realizando clculos aritmticos e especificando
nomes de colunas
Usando o iSQL*Plus
Exerccio 1: Viso Geral
Este o primeiro de vrios exerccios deste curso. As solues (se forem necessrias) esto
no Apndice A. Os exerccios tm como objetivo abordar todos os tpicos apresentados na
lio correspondente.
Observe o seguinte local dos arquivos de laboratrio:
E:\labs\\SQL1\labs
Se voc receber uma solicitao para salvar esses arquivos, salve-os nesse local.
Para iniciar o iSQL*Plus, inicie o browser. necessrio informar um URL para acessar o
iSQL*Plus. O URL requer o nome do host, que ser fornecido pelo instrutor. Informe o
comando a seguir, substituindo o nome do host pelo valor fornecido pelo instrutor:
http://<HOSTNAME:5561>/isqlplus
Alguns exerccios podem ser antecedidos pelas expresses "Se tiver tempo" ou "Se quiser
tomar parte em mais um desafio". Faa esses exerccios somente quando terminar todos os
outros no tempo designado e se desejar mais um desafio para testar suas habilidades.
Desenvolva os exerccios devagar e com preciso. Como teste, voc pode salvar e executar
arquivos de comandos Em caso de dvidas, consulte o instrutor.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-38
Exerccio 1
Parte 1
Teste seu conhecimento:
1. Inicie uma sesso do iSQL*Plus com o ID de usurio e a senha fornecidos pelo
instrutor.
2. Os comandos iSQL*Plus acessam o banco de dados.
Verdadeiro/Falso
3. Esta instruo SELECT executada com xito:
SELECT last_name, job_id, salary AS Sal
FROM employees;
Verdadeiro/Falso
4. Esta instruo SELECT executada com xito:
SELECT *
FROM job_grades;
Verdadeiro/Falso
5. H quatro erros de codificao na instruo a seguir. Voc consegue identific-los?
SELECT employee_id, last_name
sal x 12 ANNUAL SALARY
FROM employees;
Parte 2
Observe o seguinte local dos arquivos de laboratrio:
E:\labs\\SQL1\labs
Se voc receber uma solicitao para salvar esses arquivos, salve-os nesse local
Para iniciar o iSQL*Plus, inicie o browser. necessrio informar um URL para acessar o
iSQL*Plus. O URL requer o nome do host, que ser fornecido pelo instrutor. Informe o
comando a seguir, substituindo o nome do host pelo valor fornecido pelo instrutor:
http://<HOSTNAME:5561>/isqlplus
Voc foi admitido como programador SQL da Acme Corporation. Sua primeira tarefa
criar alguns relatrios com base nos dados das tabelas de recursos humanos.
6. Sua primeira tarefa determinar a estrutura da tabela DEPARTMENTS e seu
contedo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-39
Exerccio 1 (continuao)
7. Voc precisa determinar a estrutura da tabela EMPLOYEES.
O departamento de recursos humanos deseja executar uma consulta para exibir o
sobrenome, o cdigo do cargo, a data de admisso e o telefone de cada funcionrio,
com o nmero do funcionrio exibido primeiro. Fornea o apelido STARTDATE
para a coluna HIRE_DATE. Salve a instruo SQL no arquivo lab_01_07.sql
para encaminhar esse arquivo ao departamento de recursos humanos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-40
Exerccio 1 (continuao)
8. Teste a consulta no arquivo lab_01_07.sql para verificar se executada
corretamente.
9. O departamento de recursos humanos precisa de uma consulta para exibir todos os
cdigos de cargo exclusivos da tabela EMPLOYEES.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-41
Exerccio 1 (continuao)
Parte 3
Se tiver tempo, faa os seguintes exerccios:
10. O departamento de recursos humanos deseja cabealhos de coluna mais
descritivos em seu relatrio sobre funcionrios. Copie a instruo de
lab_01_07.sql para a caixa de texto do iSQL*Plus. Nomeie os cabealhos
de coluna como Emp #, Employee, Job e Hire Date, respectivamente.
Execute a consulta novamente.
11. O departamento de recursos humanos solicitou um relatrio de todos os funcionrios
e os respectivos IDs de cargo. Exiba o sobrenome concatenado com o ID do cargo
(separado por uma vrgula e um espao) e nomeie a coluna como Employee and
Title.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 1-42
Exerccio 1 (continuao)
Se quiser tomar parte em mais um desafio, faa este exerccio:
12. Para se familiarizar com os dados da tabela EMPLOYEES, crie uma consulta para
exibir todos os dados dessa tabela. Separe cada sada de coluna com uma vrgula.
Nomeie o ttulo da coluna como THE_OUTPUT.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Restringindo e Classificando Dados
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Limitar as linhas recuperadas por uma consulta
Classificar as linhas recuperadas por uma consulta
Usar a substituio com E comercial no iSQL*Plus
para restringir e classificar a sada em runtime
Objetivos
Durante a recuperao de dados do banco de dados, talvez seja necessrio:
Restringir as linhas de dados a serem exibidas
Especificar a ordem de exibio das linhas
Esta lio explica as instrues SQL usadas para executar essas aes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-3
Copyright 2004, Oracle. Todos os direitos reservados.
Limitando Linhas por Seleo
"recuperar todos
os funcionrios do
departamento 90"
EMPLOYEES

Limitando Linhas por Seleo


No exemplo do slide, suponha que voc queira exibir todos os funcionrios do
departamento 90. As linhas com o valor 90 na coluna DEPARTMENT_ID so as nicas
retornadas. Esse mtodo de restrio a base da clusula WHERE em SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-4
Copyright 2004, Oracle. Todos os direitos reservados.
Limitando as Linhas Selecionadas
Restrinja as linhas retornadas com a clusula WHERE:
A clusula WHERE especificada aps a clusula FROM.
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
Limitando as Linhas Selecionadas
possvel restringir as linhas retornadas por uma consulta com a clusula WHERE. Essa
clusula contm uma condio a ser atendida e inserida imediatamente aps a clusula
FROM. Se a condio for verdadeira, a linha que atender a essa condio ser retornada.
Na sintaxe:
WHERE restringe a consulta s linhas que atendem a uma condio
condition composta de nomes de colunas, expresses, constantes
e um operador de comparao
A clusula WHERE pode comparar valores em colunas, valores literais, expresses
aritmticas ou functions. Ela consiste em trs elementos:
Nome de coluna
Condio de comparao
Nome de coluna, constante ou lista de valores
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-5
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
Usando a Clusula WHERE
Usando a Clusula WHERE
No exemplo, a instruo SELECT recupera o ID, o nome, o ID do cargo e o nmero do
departamento de todos os funcionrios do departamento 90.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-6
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'Whalen' ;
Strings de Caracteres e Datas
As strings de caracteres e os valores de data so
delimitados por aspas simples.
Os valores de caractere fazem distino entre
maisculas e minsculas, e os valores de data fazem
distino de formato.
O formato default de data DD-MON-RR.
Strings de Caracteres e Datas
Na clusula WHERE, as strings de caracteres e as datas devem ser delimitadas por aspas
simples (''), mas no as constantes numricas.
Todas as pesquisas de caracteres fazem distino entre maisculas e minsculas. No
exemplo a seguir, no so retornadas linhas, pois a tabela EMPLOYEES armazena todos os
sobrenomes em maisculas e minsculas:
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'WHALEN';
Os bancos de dados Oracle armazenam datas em um formato numrico interno, que
representa o sculo, o ano, o ms, o dia, as horas, os minutos e os segundos. A exibio
default de data DD-MON-RR.
Observao: Para obter detalhes sobre o formato RR e como alterar o formato de data
default, consulte a prxima lio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-7
Copyright 2004, Oracle. Todos os direitos reservados.
Condies de Comparao
Diferente de <>
Entre dois valores (inclusivo)
BETWEEN
...AND...
Corresponde a qualquer
valor de uma lista
IN(set)
Corresponde a um padro de
caractere
LIKE
um valor nulo
IS NULL
Menor que <
Menor que ou igual a <=
Maior que ou igual a >=
Maior que >
Igual a =
Significado Operador
Condies de Comparao
As condies de comparao so usadas em condies que comparam uma expresso a
outro valor ou expresso. Elas so usadas na clusula WHERE no seguinte formato:
Sintaxe
... WHERE expr operator value
Exemplo
... WHERE hire_date='01-JAN-95'
... WHERE salary >=6000
... WHERE last_name='Smith'
No possvel usar um apelido na clusula WHERE.
Observao: Os smbolos != e ^= tambm podem representar a condio diferente de.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-8
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Condies de Comparao
SELECT last_name, salary
FROM employees
WHERE salary <= 3000 ;
Usando Condies de Comparao
No exemplo, a instruo SELECT recupera, com base na tabela EMPLOYEES, o sobrenome
e o salrio de todos os funcionrios cujo salrio menor que US$ 3.000 ou igual a esse
valor. Observe que foi fornecido um valor explcito na clusula WHERE. O valor explcito
3000 comparado ao valor do salrio na coluna SALARY da tabela EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-9
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500 ;
Usando a Condio BETWEEN
Use a condio BETWEEN para exibir linhas com base
em uma faixa de valores:
Limite inferior Limite superior
Usando a Condio BETWEEN
possvel exibir linhas com base em uma faixa de valores usando a condio de faixa
BETWEEN. A faixa especificada contm os limites inferior e superior.
A instruo SELECT do slide retorna as linhas da tabela EMPLOYEES relativas aos
funcionrios cujo salrio est contido na faixa entre US$ 2.500 e US$ 3.500.
Os valores especificados com a condio BETWEEN so inclusivos. Especifique o limite
inferior primeiro.
Tambm possvel usar a condio BETWEEN em valores de caractere:
SELECT last_name
FROM employees
WHERE last_name BETWEEN 'King' AND 'Smith';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-10
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201) ;
Usando a Condio IN
Use a condio de associao IN para testar os valores
de uma lista:
Usando a Condio IN
Para testar os valores de um conjunto de valores especificado, use a condio IN. Essa
condio tambm conhecida como condio de associao.
O exemplo do slide exibe nmeros de funcionrios, sobrenomes, salrios e nmeros de
funcionrio de gerentes relativos a todos os funcionrios cujo nmero de funcionrio do
gerente seja 100, 101 ou 201.
possvel usar a condio IN com qualquer tipo de dados. O exemplo a seguir retorna uma
linha da tabela EMPLOYEES para cada funcionrio cujo sobrenome est includo na lista de
nomes da clusula WHERE:
SELECT employee_id, manager_id, department_id
FROM employees
WHERE last_name IN ('Hartstein', 'Vargas');
Se forem usados caracteres ou datas na lista, eles devero ser delimitados por aspas simples
('').
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-11
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%' ;
Usando a Condio LIKE
Use a condio LIKE para executar pesquisas com
curinga de valores vlidos de strings de pesquisa.
As condies de pesquisa podem conter nmeros
ou caracteres literais:
% indica zero ou vrios caracteres.
_ indica um caractere.
Usando a Condio LIKE
Nem sempre voc sabe o valor exato a ser pesquisado. possvel selecionar linhas que
correspondam a um padro de caracteres usando a condio LIKE. A operao de
correspondncia a um padro de caracteres conhecida como pesquisa com curinga.
possvel usar dois smbolos para criar a string de pesquisa.
A instruo SELECT do slide retorna, com base na tabela EMPLOYEES, os nomes de todos
os funcionrios que comeam com a letra S. Observe o S maisculo. Os nomes que
comeam com s no so retornados.
possvel usar a condio LIKE como um atalho para algumas comparaes BETWEEN. O
exemplo a seguir exibe os sobrenomes e as datas de admisso de todos os funcionrios
admitidos entre janeiro de 1995 e dezembro de 1995:
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '%95';
Smbolo Descrio
%
Representa qualquer seqncia de zero ou mais caracteres
_
Representa qualquer caractere simples

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-12
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Condio LIKE
Voc pode combinar caracteres com padres
correspondentes:
Voc pode usar o identificador ESCAPE para
pesquisar os smbolos % e _ verdadeiros.
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%' ;
Combinando Caracteres Curinga
possvel usar os smbolos % e _ em qualquer combinao com caracteres literais. O
exemplo do slide exibe os nomes de todos os funcionrios cujo sobrenome inclui a letra o
como o segundo caractere.
Opo ESCAPE
Quando voc precisar de uma correspondncia exata para os caracteres % e _ verdadeiros,
use a opo ESCAPE. Essa opo especifica o que o caractere de escape. Para procurar
strings contendo 'SA_', voc poder usar a seguinte instruo SQL:
SELECT employee_id, last_name, job_id
FROM employees WHERE job_id LIKE '%SA\_%' ESCAPE '\';
A opo ESCAPE identifica a barra invertida (\) como o caractere de escape. No padro, o
caractere de escape precede o sublinhado (_). Isso faz com que o Oracle Server interprete o
sublinhado literalmente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-13
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL ;
Usando as Condies NULL
Teste valores nulos com o operador IS NULL.
Usando as Condies NULL
As condies NULL incluem IS NULL e IS NOT NULL.
A condio IS NULL testa valores nulos. Um valor nulo aquele que no est disponvel
nem designado e no conhecido ou aplicvel. Portanto, no possvel test-lo com =, pois
no pode ser igual a um valor ou diferente dele. O exemplo do slide recupera os sobrenomes
e os gerentes de todos os funcionrios que no esto subordinados a um gerente.
Veja outro exemplo: Para exibir o sobrenome, o ID do cargo e a comisso de todos os
funcionrios sem direito a comisso, use a seguinte instruo SQL:
SELECT last_name, job_id, commission_pct
FROM employees
WHERE commission_pct IS NULL;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-14
Copyright 2004, Oracle. Todos os direitos reservados.
Condies Lgicas
Retornar TRUE se a condio seguinte
for falsa
NOT
Retornar TRUE se uma das condies
componentes for verdadeira
OR
Retornar TRUE se as duas condies
componentes forem verdadeiras
AND
Significado Operador
Condies Lgicas
Uma condio lgica combina o resultado de duas condies componentes para produzir
um nico resultado com base nessas condies, ou inverte o resultado de uma nica
condio. S ser retornada uma linha se o resultado geral da condio for verdadeiro.
Trs operadores lgicos esto disponveis em SQL:
AND
OR
NOT
Todos os exemplos at ento especificaram apenas uma condio na clusula WHERE. Voc
pode usar vrias condies em uma clusula WHERE com os operadores AND e OR.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-15
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE '%MAN%' ;
Usando o Operador AND
AND exige que as duas condies sejam verdadeiras:
Usando o Operador AND
No exemplo, as duas condies devero ser verdadeiras para que sejam selecionados
registros. Portanto, somente os funcionrios cujos cargos contiverem a string 'MAN' e que
receberem US$ 10.000 ou mais sero selecionados.
Todas as pesquisas de caracteres fazem distino entre maisculas e minsculas. No sero
retornadas linhas se a string 'MAN' no estiver em maisculas. As strings de caracteres
devem ser delimitadas por aspas.
Tabela de Valores Verdadeiros com AND
A tabela a seguir mostra os resultados da combinao de duas expresses com AND:
AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-16
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%' ;
Usando o Operador OR
OR exige que uma das condies seja verdadeira:
Usando o Operador OR
No exemplo, uma das duas condies poder ser verdadeira para que sejam selecionados
registros. Portanto, os funcionrios cujos IDs de cargo contiverem a string 'MAN' ou que
receberem US$ 10.000 ou mais sero selecionados.
Tabela de Valores Verdadeiros com OR
A tabela a seguir mostra os resultados da combinao de duas expresses com OR:
OR TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-17
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id
FROM employees
WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;
Usando o Operador NOT
Usando o Operador NOT
O exemplo do slide exibe o sobrenome e o ID do cargo de todos os funcionrios cujo ID de
cargo diferente de IT_PROG, ST_CLERK ou SA_REP.
Tabela de Valores Verdadeiros com NOT
A tabela a seguir mostra o resultado da aplicao do operador NOT a uma condio:
Observao: Tambm possvel usar o operador NOT com outros operadores SQL, como
BETWEEN, LIKE e NULL.
... WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')
... WHERE salary NOT BETWEEN 10000 AND 15000
... WHERE last_name NOT LIKE '%A%'
... WHERE commission_pct IS NOT NULL
NOT TRUE FALSE NULL
FALSE TRUE NULL

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-18
Copyright 2004, Oracle. Todos os direitos reservados.
Regras de Precedncia
Voc pode usar parnteses para sobrepor as regras de precedncia.
Diferente de 6
Condio lgica NOT 7
Condio lgica AND
8
Condio lgica OR
9
IS [NOT] NULL, LIKE, [NOT] IN 4
[NOT] BETWEEN
5
Condies de comparao 3
Operador de concatenao 2
Operadores aritmticos 1
Significado Operador
Regras de Precedncia
As regras de precedncia determinam a ordem de avaliao e clculo das expresses. A
tabela relaciona a ordem de precedncia default. Voc pode sobrepor a ordem default
usando parnteses para delimitar as expresses a serem calculadas primeiro.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-19
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = 'SA_REP'
OR job_id = 'AD_PRES'
AND salary > 15000;
Regras de Precedncia
SELECT last_name, job_id, salary
FROM employees
WHERE (job_id = 'SA_REP'
OR job_id = 'AD_PRES')
AND salary > 15000;
1
2
1. Exemplo da Precedncia do Operador AND
Neste exemplo, existem duas condies:
A primeira condio que o ID do cargo seja AD_PRES e o salrio seja maior que
US$ 15.000.
A segunda condio que o ID do cargo seja SA_REP.
Portanto, a leitura da instruo SELECT ser esta:
"Selecione a linha se o funcionrio for presidente e receber mais de US$15.000, ou se ele
for representante de vendas".
2. Exemplo da Utilizao de Parnteses
Neste exemplo, existem duas condies:
A primeira condio que o ID do cargo seja AD_PRES ou SA_REP.
A segunda condio que o salrio seja maior que US$ 15.000.
Portanto, a leitura da instruo SELECT ser esta:
"Selecione a linha se o funcionrio for presidente ou representante de vendas e receber mais
de US$15.000".
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-20
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Clusula ORDER BY
Classifique as linhas recuperadas com a clusula
ORDER BY:
ASC: ordem crescente, default
DESC: ordem decrescente
A clusula ORDER BY inserida por ltimo na
instruo SELECT:
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date;

Usando a Clusula ORDER BY


A ordem das linhas retornadas no resultado de uma consulta indefinida. possvel usar a
clusula ORDER BY para classificar as linhas. Se voc usar essa clusula, ela dever ser a
ltima da instruo SQL. Voc pode especificar uma expresso, um apelido ou uma posio
de coluna como a condio de classificao.
Sintaxe
SELECT expr
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, numeric_position} [ASC|DESC]];
Na sintaxe:
ORDER BY especifica a ordem na qual as linhas recuperadas so exibidas
ASC ordena as linhas em ordem crescente (essa a ordem default)
DESC ordena as linhas em ordem decrescente
Se a clusula ORDER BY no for usada, a ordem de classificao ser indefinida e o
servidor Oracle poder no extrair (fetch) as linhas na mesma ordem para consultas
idnticas. Use a clusula ORDER BY para exibir as linhas em uma ordem especfica.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-21
Copyright 2004, Oracle. Todos os direitos reservados.
Classificao
Classificao em ordem decrescente:
Classificao por apelido de coluna:
Classificao por vrias colunas:
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC;
1
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal ;
2
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
3
Ordenao de Dados Default
A ordem de classificao default crescente:
Os valores numricos so exibidos com os menores valores primeiro (por exemplo, 1 a
999).
Os valores de data so exibidos em ordem cronolgica (por exemplo, 01-JAN-92 antes
de 01-JAN-95).
Os valores de caractere so exibidos em ordem alfabtica (por exemplo, de A a Z).
Os valores nulos so exibidos por ltimo em seqncias crescentes e no incio em
seqncias decrescentes.
Voc pode classificar por uma coluna no includa na lista SELECT.
Exemplos
1. Para inverter a ordem de exibio das linhas, especifique a palavra-chave DESC aps o
nome da coluna na clusula ORDER BY. O exemplo do slide classifica o resultado de
acordo com o funcionrio admitido mais recentemente.
2. Voc pode usar um apelido de coluna na clusula ORDER BY. O exemplo do slide
classifica os dados por salrio anual.
3. Voc pode classificar resultados de consultas por mais de uma coluna. O limite de
classificao o nmero de colunas da tabela. Na clusula ORDER BY, especifique as
colunas e separe os nomes correspondentes por vrgulas. Para inverter a ordem de uma
coluna, especifique DESC aps seu nome.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-22
Copyright 2004, Oracle. Todos os direitos reservados.
Variveis de Substituio
... salary = ?
department_id = ?
... last_name = ? ...
Desejo
consultar
valores
diferentes.
Variveis de Substituio
At o momento, foram apresentados exemplos codificados. Em uma aplicao concluda, o
usurio acionaria o relatrio, que seria executado sem outros prompts. A faixa de dados
seria predeterminada pela clusula WHERE fixa no arquivo de script do iSQL*Plus.
Com o iSQL*Plus, possvel criar relatrios que solicitam aos usurios seus prprios
valores para restringir a faixa de dados retornados com variveis de substituio. possvel
incorporar variveis de substituio a um arquivo de comandos ou a uma nica instruo
SQL. Uma varivel pode ser considerada como um container no qual os valores so
armazenados temporariamente. Quando a instruo executada, o valor substitudo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-23
Copyright 2004, Oracle. Todos os direitos reservados.
Variveis de Substituio
Use as variveis de substituio do iSQL*Plus para:
Armazenar temporariamente valores com substituio
de E comercial nico (&) e duplo (&&)
Use as variveis de substituio para complementar:
Condies WHERE
Clusulas ORDER BY
Expresses de coluna
Nomes de tabelas
Instrues SELECT inteiras
Variveis de Substituio (continuao)
No iSQL*Plus, possvel usar variveis de substituio com E comercial nico (&) para
armazenar valores temporariamente.
Voc pode predefinir variveis no iSQL*Plus com o comando DEFINE. Esse comando cria
e designa um valor a uma varivel.
Exemplos de Faixas de Dados Restritas
Gerar relatrio sobre valores relativos apenas ao trimestre atual ou a uma faixa de datas
especificada
Gerar relatrio sobre dados relacionados apenas ao usurio que o solicitou
Exibir pessoal apenas de um departamento especfico
Outros Efeitos Interativos
Os efeitos interativos no se restringem interao direta do usurio com a clusula
WHERE. Os mesmos princpios podem ser usados para atingir outras metas, como:
Obteno de valores de entrada de um arquivo, e no de uma pessoa
Transmisso de valores de uma instruo SQL para outra
O iSQL*Plus no suporta verificaes de validao (exceto no caso de tipo de dados) na
entrada do usurio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-24
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &employee_num ;
Usando a Varivel de Substituio &
Use uma varivel que tenha como prefixo o smbolo E
comercial (&) para solicitar um valor ao usurio:
Varivel de Substituio com E Comercial nico
Durante a execuo de um relatrio, os usurios geralmente desejam restringir os dados
retornados de forma dinmica. O iSQL*Plus permite essa flexibilidade com variveis de
usurio. Use o smbolo E comercial (&) para identificar cada varivel na instruo SQL.
No necessrio definir o valor de cada varivel.
O exemplo do slide cria uma varivel de substituio do iSQL*Plus para um nmero de
funcionrio. Quando a instruo executada, o iSQL*Plus solicita ao usurio um nmero de
funcionrio e, em seguida, exibe o nmero, o sobrenome, o salrio e o nmero do
departamento desse funcionrio.
Com o smbolo E comercial nico, o usurio solicitado a especificar essa informao a
cada execuo do comando caso a varivel no exista.
Notao Descrio
&user_variable Indica uma varivel em uma instruo SQL; se a
varivel no existir, o iSQL*Plus solicitar um valor ao
usurio (o iSQL*Plus descartar uma nova varivel
depois que ela for utilizada.)

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-25
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Varivel de Substituio &
101
1
2
Varivel de Substituio com E Comercial nico (continuao)
Quando o iSQL*Plus detecta que a instruo SQL contm o smbolo de E comercial, voc
solicitado a informar um valor para a varivel de substituio citada na instruo SQL.
Depois que voc informa um valor e clica no boto Continue, os resultados so exibidos na
rea de sada da sesso do iSQL*Plus.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-26
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, department_id, salary*12
FROM employees
WHERE job_id = '&job_title' ;
Valores de Caractere e Data
com Variveis de Substituio
Use aspas simples para valores de data e caractere:
Especificando Valores de Caractere e Data com Variveis de Substituio
Em uma clusula WHERE, necessrio delimitar os valores de data e caractere por aspas
simples. A mesma regra se aplica s variveis de substituio.
Delimite a varivel por aspas simples na prpria instruo SQL.
O slide mostra uma consulta para recuperar os nomes de funcionrios, os nmeros de
departamentos e os salrios anuais de todos os funcionrios com base no valor de cargo da
varivel de substituio do iSQL*Plus.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-27
Copyright 2004, Oracle. Todos os direitos reservados.
Especificando Nomes de Colunas,
Expresses e Texto
SELECT employee_id, last_name, job_id,&column_name
FROM employees
WHERE &condition
ORDER BY &order_column ;
salary
salary > 15000
last_name
Especificando Nomes de Colunas, Expresses e Texto
Voc pode usar as variveis de substituio no apenas na clusula WHERE de uma
instruo SQL, mas tambm nos casos em que deseja substituir nomes de colunas,
expresses ou texto.
Exemplo
O exemplo do slide exibe o nmero, o nome e o cargo do funcionrio, bem como qualquer
outra coluna especificada pelo usurio durante o runtime, com base na tabela EMPLOYEES.
Para cada varivel de substituio na instruo SELECT, um valor ser solicitado. Aps
informar esse valor, clique no boto Continue para prosseguir.
Se voc no informar um valor para a varivel de substituio, receber um erro quando
executar a instruo anterior.
Observao: Uma varivel de substituio pode ser usada em qualquer local na instruo
SELECT, exceto como a primeira palavra especificada no prompt de comando.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-28
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, &&column_name
FROM employees
ORDER BY &column_name ;

Usando a Varivel de Substituio &&


Use o smbolo de E comercial duplo (&&) para reutilizar
o valor da varivel sem solicitar sempre um valor ao
usurio.
Varivel de Substituio com E Comercial Duplo
possvel usar a varivel de substituio com E comercial duplo (&&) para reutilizar o
valor da varivel sem solicitar sempre um valor ao usurio. O valor solicitado ao usurio
apenas uma vez. No exemplo do slide, o valor da varivel column_name solicitado
apenas uma vez ao usurio. O valor fornecido por ele (department_id) usado para
exibir e ordenar os dados.
O iSQL*Plus armazena o valor fornecido com o comando DEFINE e reutiliza esse valor
sempre que feita referncia ao nome da varivel. Aps a definio de uma varivel de
usurio, necessrio usar o comando UNDEFINE para delet-la da seguinte forma:
UNDEFINE column_name
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-29
Copyright 2004, Oracle. Todos os direitos reservados.
Usando o Comando DEFINE do iSQL*Plus
Use o comando DEFINE do iSQL*Plus para criar e
designar um valor a uma varivel.
Use o comando UNDEFINE do iSQL*Plus para
remover uma varivel.
DEFINE employee_num = 200
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &employee_num ;
UNDEFINE employee_num
Usando o Comando DEFINE do iSQL*Plus
O exemplo mostrado cria uma varivel de substituio do iSQL*Plus para um nmero de
funcionrio com o comando DEFINE. Durante o runtime, so exibidos o nmero, o nome, o
salrio e o nmero do departamento desse funcionrio.
Como a varivel criada com o comando DEFINE do iSQL*Plus, no solicitado ao
usurio um valor relativo ao nmero de funcionrio. Nesse caso, o valor definido da
varivel substitudo automaticamente na instruo SELECT.
A varivel de substituio EMPLOYEE_NUM estar presente na sesso at que o usurio
remova sua definio ou saia da sesso do iSQL*Plus.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-30
Copyright 2004, Oracle. Todos os direitos reservados.
old 3: WHERE employee_id = &employee_num
new 3: WHERE employee_id = 200
SET VERIFY ON
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &employee_num;
Usando o Comando VERIFY
Use o comando VERIFY para alternar a exibio da
varivel de substituio, antes e depois de o iSQL*Plus
substituir as variveis por valores:
Usando o Comando VERIFY
Para confirmar as alteraes na instruo SQL, use o comando VERIFY do iSQL*Plus. A
definio de SET VERIFY ON fora o iSQL*Plus a exibir o texto de um comando antes e
depois de substituir as variveis por valores.
O exemplo do slide exibe os valores antigo e novo da coluna EMPLOYEE_ID.
Variveis de Sistema do iSQL*Plus
O iSQL*Plus usa diversas variveis de sistema que controlam o ambiente de trabalho. Uma
delas VERIFY. Para obter uma lista completa de todas as variveis de sistema, execute o
comando SHOW ALL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-31
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]] ;
Sumrio
Nesta lio, voc aprendeu a:
Usar a clusula WHERE para restringir as linhas
da sada:
Usar as condies de comparao
Usar as condies BETWEEN, IN, LIKE e NULL
Aplicar os operadores lgicos AND, OR e NOT
Usar a clusula ORDER BY para classificar as linhas
da sada:
Usar a substituio com E comercial no iSQL*Plus
para restringir e classificar a sada durante o runtime
Sumrio
Nesta lio, voc aprendeu a restringir e classificar as linhas retornadas pela instruo
SELECT. Voc tambm aprendeu a implementar diversos operadores e condies.
Com as variveis de substituio do iSQL*Plus, possvel obter mais flexibilidade nas
instrues SQL. Voc pode consultar usurios durante o runtime e permitir que
especifiquem critrios.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-32
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 2: Viso Geral
Este exerccio aborda os seguintes tpicos:
Selecionando dados e alterando a ordem de
exibio das linhas
Restringindo linhas com a clusula WHERE
Classificando linhas com a clusula ORDER BY
Usando variveis de substituio para obter mais
flexibilidade nas instrues SQL SELECT
Exerccio 2: Viso Geral
Neste exerccio, voc criar mais relatrios, inclusive instrues que utilizam as clusulas
WHERE e ORDER BY. Para tornar as instrues SQL mais reutilizveis e genricas, use a
substituio com o smbolo de E comercial.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-33
Exerccio 2
O departamento de recursos humanos precisa da sua ajuda para criar algumas consultas.
1. Em funo de questes oramentrias, o departamento precisa de um relatrio com
o sobrenome e o salrio dos funcionrios que ganham mais de US$ 12.000. Inclua
a instruo SQL no arquivo de texto lab_02_01.sql. Execute a consulta.
2. Crie um relatrio que exiba o sobrenome e o nmero do departamento do funcionrio
176.
3. O departamento de recursos humanos precisa localizar funcionrios com altos
e baixos salrios. Modifique lab_02_01.sql para exibir o sobrenome e o salrio
de todos os funcionrios cuja faixa salarial no esteja entre US$ 5.000 e US$ 12.000.
Inclua a instruo SQL no arquivo de texto lab_02_03.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-34
Exerccio 2 (continuao)
4. Crie um relatrio para exibir o sobrenome, o ID do cargo e a data de admisso dos
funcionrios cujos sobrenomes sejam Matos e Taylor. Organize a consulta em
ordem crescente por data de admisso.
5. Exiba o sobrenome e o nmero do departamento de todos os funcionrios nos
departamentos 20 e 50 em ordem alfabtica crescente por nome.
6. Modifique lab_02_03.sql para exibir o sobrenome e o salrio dos funcionrios
que ganham entre US$ 5.000 e US$ 12.000 e esto no departamento 20 ou 50.
Atribua s colunas os labels Employee e Monthly Salary, respectivamente.
Salve novamente lab_02_03.sql como lab_02_06.sql. Execute a instruo
em lab_02_06.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-35
Exerccio 2 (continuao)
7. O departamento de recursos humanos precisa de um relatrio que exiba o sobrenome
e a data de admisso de todos os funcionrios admitidos em 1994.
8. Crie um relatrio que exiba o sobrenome e o cargo de todos os funcionrios no
subordinados a um gerente.
9. Crie um relatrio para exibir o sobrenome, o salrio e a comisso de todos os
funcionrios que ganham comisso. Classifique os dados em ordem decrescente de
salrio e comisses.
10. Os membros do departamento de recursos humanos desejam ter mais flexibilidade
em relao s consultas criadas. Eles desejam um relatrio que exiba o sobrenome
e o salrio dos funcionrios que ganham mais do que uma quantia especificada
pelo usurio aps o prompt. (Voc pode usar a consulta criada no exerccio 1
e modific-la.) Salve essa consulta no arquivo lab_02_10.sql. Se voc
informar 12000 quando a quantia for solicitada, o relatrio exibir estes
resultados:
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-36
Exerccio 2 (continuao)
11. O departamento de recursos humanos deseja executar relatrios baseados em um
gerente. Crie uma consulta que solicite um ID de gerente ao usurio e gere o ID de
funcionrio, o sobrenome, o salrio e o departamento dos funcionrios desse
gerente. O departamento de recursos humanos deseja ter permisso para classificar o
relatrio em uma coluna selecionada. Voc pode testar os dados com os seguintes
valores:
ID do gerente = 103, classificado pelo sobrenome do funcionrio:
ID do gerente = 201, classificado pelo salrio:
ID do gerente = 124, classificado pelo ID do funcionrio:
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 2-37
Exerccio 2 (continuao)
Se tiver tempo, faa os seguintes exerccios:
12. Exiba todos os sobrenomes dos funcionrios cuja terceira letra do nome seja a.
13. Exiba o sobrenome de todos os funcionrios que contenha a e e.
Se quiser tomar parte em mais um desafio, faa estes exerccios:
14. Exiba o sobrenome, o cargo e o salrio de todos os funcionrios cujo cargo seja
representante de vendas ou estoquista e cujo salrio seja diferente de US$ 2.500,
US$ 3.500 ou US$ 7.000.
15. Modifique lab_02_06.sql para exibir o sobrenome, o salrio e a comisso
de todos os funcionrios cuja comisso seja de 20%. Salve novamente
lab_02_06.sql como lab_02_15.sql. Reexecute a instruo em
lab_02_15.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Functions de uma nica
Linha para Personalizar a Sada
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Descrever vrios tipos de functions disponveis em
SQL
Usar functions de caractere, nmero e data em
instrues SELECT
Descrever o uso de functions de converso
Objetivos
As functions tornam o bloco bsico da consulta mais eficiente e so usadas para manipular
valores de dados. Esta a primeira das duas lies que descrevem o uso de functions. Ela
concentra-se em functions de caractere, nmero e data de uma nica linha, bem como em
functions que convertem os dados de um tipo em outro (por exemplo, dados de caractere em
dados numricos).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-3
Copyright 2004, Oracle. Todos os direitos reservados.
Functions SQL
Function
Entrada
arg 1
arg 2
arg n
A function
executa a ao
Sada
Valor
resultante
Functions SQL
As functions constituem um recurso eficiente de SQL. possvel us-las com os seguintes
objetivos:
Executar clculos em dados
Modificar itens individuais de dados
Manipular a sada de grupos de linhas
Formatar datas e nmeros para exibio
Converter tipos de dados de colunas
As functions SQL s vezes aceitam argumentos e sempre retornam um valor.
Observao: A maioria das functions descritas nesta lio so especficas da verso de
SQL do Oracle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-4
Copyright 2004, Oracle. Todos os direitos reservados.
Dois Tipos de Functions SQL
Functions de
uma nica linha
Functions de
vrias linhas
Retornam um resultado
por linha
Retornam um resultado
por conjunto de linhas
Functions
Functions SQL (continuao)
H dois tipos de functions:
Functions de uma nica linha
Functions de vrias linhas
Functions de uma nica Linha
Estas functions s operam em linhas isoladas e retornam um resultado por linha. Existem
tipos diferentes de functions de uma nica linha. Esta lio aborda as seguintes functions:
Caractere
Nmero
Data
Converso
Geral
Functions de Vrias Linhas
As functions podem manipular grupos de linhas para fornecer um resultado por grupo. Essas
functions tambm so conhecidas como functions de grupo (e sero abordadas em uma lio
posterior).
Observao: Para obter mais informaes e uma lista completa das functions disponveis e
a sintaxe correspondente, consulte o manual Oracle SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-5
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de uma nica Linha
Functions de uma nica linha:
Manipulam itens de dados
Aceitam argumentos e retornam um valor
Agem sobre cada linha retornada
Retornam um resultado por linha
Podem modificar o tipo de dados
Podem ser aninhadas
Aceitam argumentos, como uma coluna ou uma
expresso
function_name [(arg1, arg2,...)]
Functions de uma nica Linha
As functions de uma nica linha so usadas para manipular itens de dados. Elas aceitam um
ou mais argumentos e retornam um valor para cada linha retornada pela consulta. Um
argumento pode ser:
Uma constante fornecida pelo usurio
Um valor varivel
Um nome de coluna
Uma expresso
Os recursos de functions de uma nica linha so:
Agir sobre cada linha retornada pela consulta
Retornar um resultado por linha
Possibilitar o retorno de um valor de dados de um tipo diferente do referenciado
Possibilitar a incluso de um ou mais argumentos
Ser usada em clusulas SELECT, WHERE e ORDER BY; ser aninhada
Na sintaxe:
function_name o nome da function
arg1, arg2 um argumento a ser usado pela function. Pode ser
representado por um nome de coluna ou uma expresso.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-6
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de uma nica Linha
Converso
Caractere
Nmero
Data
Geral
Functions de
uma nica linha
Functions de uma nica Linha (continuao)
Esta lio aborda as seguintes functions de uma nica linha:
Functions de caractere: Aceitam a entrada de caracteres e podem retornar valores
numricos ou de caractere
Functions numricas: Aceitam a entrada numrica e retornam valores numricos
Functions de data: Operam em valores do tipo de dados DATE (Todas as functions de
data retornam um valor de tipo de dados DATE, com exceo da function
MONTHS_BETWEEN, que retorna um nmero.)
Functions de converso: Convertem um valor de um tipo de dados em outro
Functions gerais:
NVL
NVL2
NULLIF
COALESCE
CASE
DECODE
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-7
Function Objetivo
LOWER(column|expression)
Converte valores de caractere alfa em minsculas
UPPER(column|expression)
Converte valores de caractere alfa em maisculas
INITCAP(column|expression)
Converte valores de caractere alfa em maisculas (apenas a
primeira letra de cada palavra; todas as outras letras
permanecem minsculas)
CONCAT(column1|expression1,
column2|expression2)
Concatena o primeiro valor de caractere para o segundo valor
de caractere; equivalente ao operador de concatenao (||)
SUBSTR(column|expression,m[
,n])
Retorna caracteres especificados a partir do valor de
caractere que inicia na posio m, n caracteres (Se m for
negativo, a contagem iniciar a partir do final do valor do
caractere. Se n for omitido, todos os caracteres do final da
string sero retornados.)

Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Caractere
Functions de
caractere
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
Functions de manipulao
de maisculas e minsculas
Functions de
manipulao de caracteres
Functions de Caractere
As functions de caractere de uma nica linha aceitam dados de caractere como entrada e
podem retornar valores numricos ou de caractere. possvel dividir as functions de
caractere em:
Functions de manipulao de maisculas e minsculas
Functions de manipulao de caracteres
Observao: Nesta lio, so abordadas apenas algumas functions disponveis.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-8
Function Objetivo
LENGTH(column|expression)
Retorna o nmero de caracteres na expresso
INSTR(column|expression,
string, [,m], [n] )
Retorna a posio numrica de uma string nomeada. Como
opo, voc pode fornecer uma posio m para iniciar a
pesquisa e a ocorrncia n da string. O default de m e n 1,
ou seja, comear a pesquisa desde o incio e reportar a
primeira ocorrncia.
LPAD(column|expression, n,
'string')
RPAD(column|expression, n,
'string')
Insere o valor de caractere justificado direita com uma
largura total de n posies de caractere
Insere o valor do caractere justificado esquerda com uma
largura total de n posies de caractere
TRIM(leading|trailing|both,
trim_character FROM
trim_source)
Permite reduzir os caracteres direita ou esquerda (ou nas
duas direes) de uma string de caracteres. Se
trim_character ou trim_source for um literal de
caractere, delimite-o com aspas simples.
Esse recurso est disponvel no Oracle8i e em verses
posteriores.
REPLACE(text,
search_string,
replacement_string)
Procura uma string de caracteres em uma expresso de texto
e substitui essa string por uma string de substituio
especificada quando a encontra

Functions de Caractere (continuao)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-9
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Manipulao
de Maisculas e Minsculas
Estas functions convertem letras maisculas em
minsculas e vice-versa em strings de caracteres:
sql course LOWER('SQL Course')
Sql Course INITCAP('SQL Course')
SQL COURSE UPPER('SQL Course')
Resultado Function
Functions de Manipulao de Maisculas e Minsculas
LOWER, UPPER e INITCAP so as trs functions de converso entre maisculas e
minsculas.
LOWER: Converte strings de caracteres em maisculas ou em maisculas e minsculas
em strings de caracteres em minsculas
UPPER: Converte strings de caracteres em minsculas ou em maisculas e minsculas
em strings de caracteres em maisculas
INITCAP: Converte a primeira letra de cada palavra em maiscula e as letras restantes
em minsculas
SELECT 'The job id for '||UPPER(last_name)||' is '
||LOWER(job_id) AS "EMPLOYEE DETAILS"
FROM employees;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-10
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'higgins';
Usando Functions de Manipulao
de Maisculas e Minsculas
Exiba o nmero, o nome e o nmero de departamento
do funcionrio Higgins:
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';
no rows selected
Usando Functions de Manipulao de Maisculas e Minsculas
O exemplo do slide exibe o nmero, o nome e o nmero de departamento do funcionrio
Higgins.
A clusula WHERE da primeira instruo SQL especifica o nome do funcionrio como
higgins. Como todos os dados da tabela EMPLOYEES esto armazenados com as iniciais
das palavras em letras maisculas, o nome higgins no detecta uma correspondncia na
tabela e, como resultado, nenhuma linha selecionada.
A clusula WHERE da segunda instruo SQL especifica que o nome do funcionrio na
tabela EMPLOYEES seja comparado a higgins, convertendo a coluna LAST_NAME em
letras minsculas para fins de comparao. Como agora os dois nomes esto em letras
minsculas, uma correspondncia detectada e uma linha selecionada. possvel recriar a
clusula WHERE da seguinte maneira para produzir o mesmo resultado:
...WHERE last_name = 'Higgins'
O nome na sada aparece como foi armazenado no banco de dados. Para exibir o nome
apenas com a primeira letra maiscula, use a function UPPER na instruo SELECT.
SELECT employee_id, UPPER(last_name), department_id
FROM employees
WHERE INITCAP(last_name) = 'Higgins';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-11
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Manipulao de Caracteres
Estas functions manipulam strings de caracteres:
BLACK and BLUE REPLACE
('JACK and JUE','J','BL')
10 LENGTH('HelloWorld')
6 INSTR('HelloWorld', 'W')
*****24000 LPAD(salary,10,'*')
24000***** RPAD(salary, 10, '*')
HelloWorld CONCAT('Hello', 'World')
elloWorld TRIM('H' FROM 'HelloWorld')
Hello SUBSTR('HelloWorld',1,5)
Resultado Function
Functions de Manipulao de Caracteres
CONCAT, SUBSTR, LENGTH, INSTR, LPAD, RPAD e TRIM so as functions de
manipulao de caracteres abordadas nesta lio.
CONCAT: Une valores (Voc est limitado a usar dois parmetros com CONCAT.)
SUBSTR: Extrai uma string de tamanho determinado
LENGTH: Mostra o tamanho de uma string como um valor numrico
INSTR: Localiza a posio numrica de um caractere nomeado
LPAD: Preenche o valor do caractere direita
RPAD: Preenche o valor do caractere esquerda
TRIM: Reduz os caracteres direita ou esquerda (ou nas duas direes) de uma string
de caracteres (Se trim_character ou trim_source for um literal de caractere,
delimite-o por aspas simples.)
Observao: possvel usar functions como UPPER e LOWER com a substituio de E
comercial. Por exemplo, use UPPER('&job_title') para que o usurio no precise
especificar o cargo em letras maisculas ou minsculas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-12
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(job_id, 4) = 'REP';
Usando as Functions de
Manipulao de Caracteres
2
3 1 2
1
3
Usando as Functions de Manipulao de Caracteres
O exemplo do slide exibe os nomes e os sobrenomes dos funcionrios unidos, o tamanho do
sobrenome do funcionrio e a posio numrica da letra a no sobrenome de todos os
funcionrios cujo ID de cargo contm a string REP a partir da quarta posio.
Exemplo
Modifique a instruo SQL no slide para exibir os dados relativos aos funcionrios cujos
sobrenomes terminam com a letra n.
SELECT employee_id, CONCAT(first_name, last_name) NAME,
LENGTH (last_name), INSTR(last_name, 'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(last_name, -1, 1) = 'n';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-13
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Nmero
ROUND: Arredonda o valor at o decimal especificado
TRUNC: Trunca o valor at o decimal especificado
MOD: Retorna o resto da diviso
100 MOD(1600, 300)
45.93 ROUND(45.926, 2)
45.92 TRUNC(45.926, 2)
Resultado Function
Functions de Nmero
As functions de nmero aceitam a entrada numrica e retornam valores numricos. Esta
seo descreve algumas functions de nmero.
Observao: Esta lista contm somente algumas das functions de nmero disponveis.
Para obter mais informaes, consulte "Number Functions" no manual Oracle SQL
Reference.
Function Objetivo
ROUND(column|expression, n)
Arredonda a coluna, a expresso ou o valor para n
casas decimais; se n for omitido, no haver casas
decimais (Se n for negativo, os nmeros esquerda
da vrgula decimal sero arredondados.)
TRUNC(column|expression, n)
Trunca a coluna, a expresso ou o valor para n
casas decimais; se n for omitido, n assumir o
default zero
MOD(m,n)
Retorna o restante de m dividido por n

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-14
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT ROUND(45.923,2), ROUND(45.923,0),
ROUND(45.923,-1)
FROM DUAL;
Usando a Function ROUND
DUAL uma tabela fictcia que pode ser usada para
exibir resultados de functions e clculos.
3
3 1 2
1 2
Function ROUND
A function ROUND arredonda a coluna, a expresso ou o valor at n casas decimais. Se o
segundo argumento for 0 ou no estiver presente, o valor ser arredondado at zero casas
decimais. Se o segundo argumento for 2, o valor ser arredondado at duas casas decimais.
Por outro lado, se o segundo argumento for -2, o valor ser arredondado at duas casas
decimais esquerda (arredondado para a unidade mais prxima de 10).
Tambm possvel usar a function ROUND com functions de data. So fornecidos exemplos
posteriormente nesta lio.
Tabela DUAL
A tabela DUAL pertence ao usurio SYS e pode ser acessada por todos os usurios. Ela
contm uma coluna, DUMMY, e uma linha com o valor X. A tabela DUAL til quando voc
deseja retornar um valor apenas uma vez (por exemplo, o valor de uma constante, de uma
pseudocoluna ou de uma expresso no derivado de uma tabela com dados do usurio). A
tabela DUAL usada geralmente para completar a sintaxe da clusula SELECT, pois as
clusulas SELECT e FROM so obrigatrias e diversos clculos no precisam de selees
das tabelas reais.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-15
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Function TRUNC
SELECT ROUND(45.923,2), ROUND(45.923),
ROUND(45.923,-1)
FROM DUAL;
3
3 1 2
1 2
Function TRUNC
A function TRUNC trunca a coluna, a expresso ou o valor at n casas decimais.
Essa function opera com argumentos semelhantes aos da function ROUND. Se o segundo
argumento for 0 ou no estiver presente, o valor ser truncado at zero casas decimais. Se o
segundo argumento for 2, o valor ser truncado at duas casas decimais. Por outro lado, se o
segundo argumento for -2, o valor ser truncado at duas casas decimais esquerda. Se o
segundo argumento for -1, o valor ser truncado at uma casa decimal esquerda.
Assim como a function ROUND, possvel usar a function TRUNC com functions de data.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-16
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary, MOD(salary, 5000)
FROM employees
WHERE job_id = 'SA_REP';
Usando a Function MOD
Para todos os funcionrios com o cargo de
representante de vendas, calcule o resto do salrio
aps dividi-lo por 5.000.
Function MOD
A function MOD localiza o resto do primeiro argumento dividido pelo segundo argumento. O
exemplo do slide calcula o resto do salrio aps a diviso por 5.000 para todos os
funcionrios cujo ID de cargo SA_REP.
Observao: A function MOD usada com freqncia para determinar se o valor par ou
mpar.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-17
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, hire_date
FROM employees
WHERE hire_date < '01-FEB-88';
Trabalhando com Datas
O banco de dados Oracle armazena datas em um
formato numrico interno: sculo, ano, ms, dia,
horas, minutos e segundos.
O formato default de exibio de data DD-MON-RR.
Permite armazenar as datas do sculo XXI no
sculo XX especificando apenas os ltimos dois
dgitos do ano
Permite armazenar as datas do sculo XX no
sculo XXI da mesma forma
Formato de Datas do Oracle
O banco de dados Oracle armazena datas em um formato numrico interno, que representa
o sculo, o ano, o ms, o dia, as horas, os minutos e os segundos.
A exibio e o formato de entrada default de qualquer data correspondem a DD-MON-RR.
As datas vlidas no Oracle so de 1 de janeiro de 4712 A.C. a 31 de dezembro 9999 D.C.
No exemplo do slide, a sada da coluna HIRE_DATE exibida no formato default DD-
MON-RR. No entanto, as datas no so armazenadas no banco de dados nesse formato.
Todos os componentes da data e do horrio so armazenados. Portanto, embora um valor de
HIRE_DATE como 17-JUN-87 seja exibido no formato dia, ms e ano, tambm h
informaes sobre horrio e sculo associadas data. Os dados completos so 17 de junho
de 1987, 5:10:43 p.m.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-18
Formato de Datas do Oracle (continuao)
Estes dados so armazenados internamente da seguinte maneira:
CENTURY YEAR MONTH DAY HOUR MINUTE
SECOND
19 87 06 17 17 10
43
Sculos e o Ano 2000
Quando um registro com uma coluna de data inserido em uma tabela, as informaes
sobre o sculo so obtidas da function SYSDATE. No entanto, quando a coluna de data
exibida na tela, o componente de sculo no mostrado (por default).
O tipo de dados DATE sempre armazena internamente as informaes sobre o ano como um
nmero de quatro dgitos: dois dgitos para o sculo e dois para o ano. Por exemplo, o banco
de dados Oracle armazena o ano como 1987 ou 2004, e no apenas como 87 ou 04.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-19
Copyright 2004, Oracle. Todos os direitos reservados.
Trabalhando com Datas
SYSDATE uma function que retorna:
Data
Horrio
Function SYSDATE
SYSDATE uma function de data que retorna a data e o horrio atuais do servidor de banco
de dados. Voc pode usar SYSDATE como qualquer outro nome de coluna. Por exemplo,
para exibir a data atual, selecione SYSDATE em uma tabela. comum selecionar
SYSDATE em uma tabela fictcia denominada DUAL.
Exemplo
Exiba a data atual usando a tabela DUAL.
SELECT SYSDATE
FROM DUAL;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-20
Copyright 2004, Oracle. Todos os direitos reservados.
Aritmtica com Datas
Some um nmero a uma data ou subtraia-o dessa
data para obter um valor de data resultante.
Subtraia uma data de outra para descobrir o nmero
de dias entre elas.
Some horas a uma data dividindo o nmero de horas
por 24.
Aritmtica com Datas
Como o banco de dados armazena datas como nmeros, voc pode realizar clculos usando
operadores aritmticos como os de adio e subtrao. possvel somar e subtrair
constantes de nmeros e datas.
Voc pode executar as seguintes operaes:
Operao Resultado Descrio
data + nmero Data Adiciona um nmero de dias a uma data
data nmero Data Subtrai um nmero de dias de uma data
data data Nmero de dias Subtrai uma data de outra
data + nmero/24 Data Adiciona um nmero de horas a uma data

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-21
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Operadores Aritmticos com Datas
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM employees
WHERE department_id = 90;
Aritmtica com Datas (continuao)
O exemplo do slide exibe o sobrenome e o nmero de semanas desde a admisso de todos
os funcionrios do departamento 90. Ele subtrai a data na qual o funcionrio foi admitido da
data atual (SYSDATE) e divide o resultado por 7 para calcular h quantas semanas a pessoa
est admitida.
Observao: SYSDATE uma function SQL que retorna a data e o horrio atuais. Os
resultados podem diferir do exemplo.
Se uma data mais recente for subtrada de uma data mais antiga, a diferena ser um
nmero negativo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-22
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Data
Dia seguinte ao da data especificada NEXT_DAY
ltimo dia do ms
LAST_DAY
Arredonda a data
ROUND
Trunca a data
TRUNC
Nmero de meses entre duas datas
MONTHS_BETWEEN
Adiciona meses do calendrio data
ADD_MONTHS
Resultado Function
Functions de Data
As functions de data operam em datas Oracle. Todas as functions de data retornam um valor
do tipo de dados DATE, com exceo de MONTHS_BETWEEN, que retorna um valor
numrico.
MONTHS_BETWEEN(date1, date2): Obtm o nmero de meses entre date1 e
date2. O resultado pode ser positivo ou negativo. Se date1 for posterior a date2,
o resultado ser positivo; caso contrrio, o resultado ser negativo. A parte decimal do
resultado representa uma parte do ms.
ADD_MONTHS(date, n): Adiciona n meses do calendrio data. O valor n deve
ser inteiro e pode ser negativo.
NEXT_DAY(date, 'char'): Obtm a data do prximo dia especificado da
semana ('char') aps a data em questo. O valor de char pode ser um nmero
que represente um dia ou uma string de caracteres.
LAST_DAY(date): Obtm a data do ltimo dia do ms que contm a data em
questo.
ROUND(date[,'fmt']): Retorna a data arredondada at a unidade especificada
pelo modelo de formato fmt. Se o modelo de formato fmt for omitido, a data ser
arredondada at o dia mais prximo.
TRUNC(date[, 'fmt']): Retorna a data com a parte do horrio do dia truncada
at a unidade especificada pelo modelo de formato fmt. Se o modelo de formato fmt
for omitido, a data ser truncada at o dia mais prximo.
A lista um subconjunto de functions de data disponveis. Os modelos de formato so
abordados posteriormente nesta lio. Os exemplos de modelos de formato so month e
year.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-23
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Functions de Data
'08-SEP-95' NEXT_DAY ('01-SEP-95','FRIDAY')
'28-FEB-95' LAST_DAY ('01-FEB-95')
19.6774194 MONTHS_BETWEEN
('01-SEP-95','11-JAN-94')
'11-JUL-94' ADD_MONTHS ('11-JAN-94',6)
Resultado Function
Functions de Data (continuao)
Por exemplo, exiba o nmero de funcionrio, a data de admisso, o nmero de meses desde
a admisso, a data da reviso semestral, a primeira sexta-feira aps a data de admisso e o
ltimo dia do ms da admisso relativos a todos os funcionrios admitidos h menos de 36
meses.
SELECT employee_id, hire_date,
MONTHS_BETWEEN (SYSDATE, hire_date) TENURE,
ADD_MONTHS (hire_date, 6) REVIEW,
NEXT_DAY (hire_date, 'FRIDAY'), LAST_DAY(hire_date)
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) < 36;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-24
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Functions de Data
Suponha que SYSDATE = '25-JUL-03':
01-JUL-03 TRUNC(SYSDATE ,'MONTH')
01-JAN-03 TRUNC(SYSDATE ,'YEAR')
01-AUG-03 ROUND(SYSDATE,'MONTH')
01-JAN-04 ROUND(SYSDATE ,'YEAR')
Resultado Function
Functions de Data (continuao)
possvel usar as functions ROUND e TRUNC para valores de nmero e data. Quando
usadas com datas, essas functions arredondam ou truncam o valor at o modelo de formato
especificado. Portanto, voc pode arredondar as datas at o ms ou o ano mais prximo.
Exemplo
Compare as datas de admisso de todos os funcionrios admitidos em 1997. Exiba o nmero
do funcionrio, a data de admisso e o ms da admisso usando as functions ROUND e
TRUNC.
SELECT employee_id, hire_date,
ROUND(hire_date, 'MONTH'), TRUNC(hire_date, 'MONTH')
FROM employees
WHERE hire_date LIKE '%97';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-25
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 3: Viso Geral da Parte 1
Este exerccio aborda os seguintes tpicos:
Criao de uma consulta para exibir a data atual
Criao de consultas que exigem o uso de functions
numricas, de caractere e de data
Clculo do nmero de anos e meses de servio de
um funcionrio
Exerccio 3: Viso Geral da Parte 1
A Parte 1 do exerccio desta lio contm vrias atividades que utilizam diferentes functions
disponveis para os tipos de dados de caractere, nmero e data.
Para a Parte 1, faa as questes de 1 a 6 no final desta lio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-26
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Converso
Converso implcita
de tipos de dados
Converso explcita
de tipos de dados
Converso de
tipos de dados
Functions de Converso
Alm dos tipos de dados do Oracle, possvel definir as colunas das tabelas de um banco de
dados Oracle usando os tipos de dados ANSI, DB2 e SQL/DS. No entanto, o servidor
Oracle converte internamente esses tipos de dados nos tipos de dados do Oracle.
Em alguns casos, ele usa dados de um tipo diferente do esperado. Quando isso acontece, o
servidor Oracle pode convert-los automaticamente no tipo de dados esperado. Essa
converso de tipo de dados pode ser efetuada implicitamente pelo servidor Oracle ou
explicitamente pelo usurio.
As converses implcitas de tipos de dados funcionam de acordo com as regras explicadas
nos prximos dois slides.
As converses explcitas de tipos de dados so feitas por meio das functions de converso.
As functions de converso convertem um valor de um tipo de dados em outro. Em geral, a
forma dos nomes das functions segue a conveno tipo de dados TO tipo de
dados. O primeiro tipo de dados o da entrada, e o segundo, o da sada.
Observao: Embora a converso implcita de tipos de dados esteja disponvel,
recomendvel usar a converso explcita para garantir a confiabilidade das instrues SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-27
Copyright 2004, Oracle. Todos os direitos reservados.
Converso Implcita de Tipos de Dados
No caso de designaes, o servidor Oracle pode
converter automaticamente:
VARCHAR2 NUMBER
VARCHAR2 DATE
NUMBER VARCHAR2 ou CHAR
DATE VARCHAR2 ou CHAR
Em De
Converso Implcita de Tipos de Dados
A designao ser bem-sucedida se o servidor Oracle conseguir converter o tipo de dados
do valor usado na designao no tipo de dados de destino da designao.
Por exemplo, a expresso hire_date > '01-JAN-90' resulta na converso implcita
da string '01-JAN-90' em uma data.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-28
Copyright 2004, Oracle. Todos os direitos reservados.
Converso Implcita de Tipos de Dados
No caso de avaliao de expresses, o Oracle Server
pode converter automaticamente:
NUMBER VARCHAR2 ou CHAR
DATE VARCHAR2 ou CHAR
Em De
Converso Implcita de Tipos de Dados (continuao)
Em geral, o servidor Oracle usa a regra para expresses quando necessria uma converso
de tipos de dados em casos no previstos por uma regra para converses de designaes.
Por exemplo, a expresso salary = '20000' resulta na converso implcita da string
'20000' no nmero 20000.
Observao: As converses de CHAR em NUMBER s sero bem-sucedidas se a string de
caracteres representar um nmero vlido.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-29
Copyright 2004, Oracle. Todos os direitos reservados.
Converso Explcita de Tipos de Dados
NUMBER
CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
Converso Explcita de Tipos de Dados
O SQL fornece trs functions para converter um valor de um tipo de dados em outro:
Function Objetivo
TO_CHAR(number|date,[ fmt],
[nlsparams])
Converte um valor de nmero ou data em uma
string de caracteres VARCHAR2 com o modelo de
formato fmt
Converso de nmero: O parmetro
nlsparams especifica os seguintes caracteres,
que so retornados pelos elementos de formato
numrico:
Caractere decimal
Separador de grupos
Smbolo de moeda local
Smbolo de moeda internacional
Se nlsparams ou qualquer outro parmetro for
omitido, esta function utilizar os valores de
parmetro default para a sesso.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-30
Copyright 2004, Oracle. Todos os direitos reservados.
Converso Explcita de Tipos de Dados
NUMBER
CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
Converso Explcita de Tipos de Dados (continuao)
Function Objetivo
TO_CHAR(number|date,[
fmt], [nlsparams])
Converso de data: O parmetro nlsparams especifica o
idioma em que so retornados as abreviaes e os nomes de dias
e meses. Se esse parmetro for omitido, esta function usar os
idiomas de data default para a sesso.
TO_NUMBER(char,[fmt],
[nlsparams])
Converte uma string de caracteres com dgitos em um nmero
no formato especificado pelo modelo de formato opcional fmt.
Nesta function, o parmetro nlsparams desempenha o mesmo
papel que na function TO_CHAR no que diz respeito converso
de nmero.
TO_DATE(char,[fmt],[nls
params])
Converte uma string de caracteres que representa uma data em
um valor de data de acordo com o fmt especificado. Se o fmt
for omitido, o formato ser DD-MON-YY.
Nesta function, o parmetro nlsparams desempenha o mesmo
papel que na function TO_CHAR no que diz respeito converso
de data.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-31
Converso Explcita de Tipos de Dados (continuao)
Observao: A lista de functions mencionada nesta lio contm apenas algumas das
functions de converso disponveis.
Para obter mais informaes, consulte "Conversion Functions" no manual Oracle SQL
Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-32
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Function TO_CHAR com Datas
O modelo de formato:
Deve ser delimitado por aspas simples
Faz distino entre maisculas e minsculas
Pode incluir qualquer elemento de formato de data
vlido
Tem um elemento fm para remover os espaos
vazios preenchidos ou para suprimir os zeros
esquerda
separado do valor da data por vrgula
TO_CHAR(date, 'format_model')
Exibindo uma Data em um Formato Especfico
Anteriormente, todos os valores de data do Oracle eram exibidos no formato DD-MS-AA.
Voc pode usar a function TO_CHAR para converter uma data desse formato default em um
formato especificado.
Diretrizes
O modelo de formato deve ser delimitado por aspas simples e fazer distino entre
maisculas e minsculas.
O modelo de formato pode incluir qualquer elemento de formato de data vlido. Separe
o valor da data do modelo de formato por vrgula.
Os espaos vazios em nomes de dias e meses na sada sero preenchidos
automaticamente.
Para remover os espaos vazios preenchidos ou suprimir os zeros esquerda, use o
elemento fm do modo de preenchimento.
Voc pode formatar o campo de caracteres resultante com o comando iSQL*Plus
COLUMN (abordado em uma lio posterior).
SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired
FROM employees
WHERE last_name = 'Higgins';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-33
Copyright 2004, Oracle. Todos os direitos reservados.
Elementos do Modelo de Formato de Data
Abreviao de trs letras do dia da
semana
DY
Nome completo do dia da semana
DAY
Valor de dois dgitos para o ms MM
Nome completo do ms
MONTH
Abreviao de trs letras do ms
MON
Dia numrico do ms
DD
Ano completo em nmeros
YYYY
Ano por extenso (em ingls)
YEAR
Resultado Elemento
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-34
Exemplo de Elementos de Formatos de Data Vlidos
Elemento Descrio
SCC ou CC Sculo; o servidor prefixa a data A.C. com -
Anos em datas YYYY ou
SYYYY
Ano; o servidor prefixa a data A.C. com -
YYY ou YY ou Y ltimos trs ou dois dgitos do ano, ou apenas o ltimo dgito
Y.YYY Ano com ponto nesta posio
IYYY, IYY, IY, I Ano de quatro, trs, dois ou um dgito baseado no padro ISO
SYEAR ou YEAR Ano por extenso; o servidor prefixa a data A.C. com -
BC ou AD Indica o ano A.C. ou D.C.
B.C. ou A.D. Indica o ano A.C. ou D.C. usando pontos
Q Trimestre do ano
MM Ms: valor de dois dgitos
MONTH Nome do ms preenchido com espaos em branco (at nove
caracteres)
MON Nome do ms; abreviao de trs letras
RM Ms em numeral romano
WW ou W Semana do ano ou ms
DDD ou DD ou D Dia do ano, do ms ou da semana
DAY Nome do dia preenchido com espaos em branco (at nove
caracteres)
DY Nome do dia; abreviao de trs letras
J Dia juliano; o nmero de dias desde 31 de dezembro de 4713
A.C.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-35
Copyright 2004, Oracle. Todos os direitos reservados.
Elementos do Modelo de Formato de Data
Os elementos de horrio formatam a parte relativa
ao horrio da data:
Adicione strings de caracteres delimitando-as por
aspas duplas:
Os sufixos de nmeros exibem os nmeros por
extenso:
DD "of" MONTH 12 of OCTOBER
ddspth fourteenth
HH24:MI:SS AM 15:45:32 PM
Elementos de Formato de Data: Formatos de Horrio
Use os formatos listados nas tabelas a seguir para exibir informaes sobre horrio e literais,
bem como alterar numerais para nmeros por extenso.
Elemento Descrio
AM or PM Indicador de meridiano
A.M. or P.M. Indicador de meridiano com pontos
HH or HH12 or HH24 Hora do dia, hora (112) ou hora (023)
MI Minuto (059)
SS Segundo (059)
SSSSS Segundos aps meia-noite (086399)

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-36
Outros Formatos
Especificando Sufixos para Influenciar a Exibio de Nmeros
Elemento Descrio
/ . , Pontuao reproduzida no resultado.
of the String entre aspas reproduzida no resultado.

Elemento Descrio
TH Nmero ordinal (por exemplo, DDTH para 4TH)
SP Nmeros por extenso (por exemplo, DDSP para FOUR)
SPTH or THSP Nmero ordinal por extenso (por exemplo, DDSPTH para
FOURTH)

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-37
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name,
TO_CHAR(hire_date, 'fmDD Month YYYY')
AS HIREDATE
FROM employees;
Usando a Function TO_CHAR com Datas

Usando a Function TO_CHAR com Datas


A instruo SQL do slide exibe os sobrenomes e as datas de admisso de todos os
funcionrios. A data de admisso aparece como 17 June 1987.
Exemplo
Modifique o exemplo do slide para exibir as datas em um formato que aparea como
"Seventeenth of June 1987 12:00:00 AM".
SELECT last_name,
TO_CHAR(hire_date,
'fmDdspth "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
FROM employees;
Observe que o ms segue o modelo de formato especificado, ou seja, a primeira letra
maiscula e as outras so minsculas.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-38
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Function TO_CHAR com Nmeros
Estes so alguns dos elementos de formato que voc
pode usar com a function TO_CHAR para exibir um valor
de nmero como um caractere:
Imprime uma casa decimal
.
Imprime uma vrgula como indicador de milhar
,
Insere um sinal de dlar flutuante
$
Usa o smbolo da moeda local flutuante
L
Representa um nmero
9
Impe a exibio de um zero
0
Resultado Elemento
TO_CHAR(number, 'format_model') ddspth
Usando a Function TO_CHAR com Nmeros
Quando estiver trabalhando com valores de nmeros como strings de caracteres, converta
esses nmeros no tipo de dados de caractere usando a function TO_CHAR, que converte um
valor do tipo de dados NUMBER no tipo de dados VARCHAR2. Essa tcnica especialmente
til com a concatenao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-39
Usando a Function TO_CHAR com Nmeros (continuao)
Elementos de Formato de Nmero
Se voc estiver convertendo um nmero no tipo de dados de caractere, poder usar os
seguintes elementos de formato:
Elemento Descrio Exemplo Resultado
9 Posio numrica (o nmero de 9s determina a
largura da exibio)
999999 1234
0 Exibe zeros esquerda 099999 001234
$ Smbolo de dlar flutuante $999999 $1234
L Smbolo de moeda local flutuante L999999 FF1234
D Retorna o caractere decimal na posio
especificada. O default uma vrgula (,).
99,99
99D99
. Vrgula decimal na posio especificada 999999,99 1234,00
G
Retorna o separador de grupos na posio
especificada. Voc pode especificar vrios
separadores de grupos em um modelo de formato
numrico.
9.999 9G999
, Ponto na posio especificada 999.999 1.234
MI Sinal de subtrao direita (valores negativos) 999999MI 1234-
PR Nmeros negativos entre colchetes 999999PR <1234>
EEEE Notao cientfica (o formato deve especificar
quatro Es)
99,999EEEE 1,234E+03
U
Retorna o smbolo monetrio dual "Euro" (ou
outro) na posio especificada
U9999
1234
V Multiplica por 10 n vezes (n = nmero de 9s
aps V)
9999V99 123400
S Retorna o valor negativo ou positivo S9999 -1234 ou
+1234
B Exibe valores zero em branco, e no 0 B9999,99 1234,00

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-40
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT TO_CHAR(salary, '$99,999.00') SALARY
FROM employees
WHERE last_name = 'Ernst';
Usando a Function TO_CHAR com Nmeros
Diretrizes
O servidor Oracle exibe uma string de smbolos de nmero (#) no lugar de um nmero
inteiro cujos dgitos ultrapassam o nmero de dgitos fornecido no modelo de formato.
O servidor Oracle arredonda o valor decimal armazenado at o nmero de casas
decimais do modelo de formato.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-41
Copyright 2004, Oracle. Todos os direitos reservados.
Usando as Functions TO_NUMBER e TO_DATE
Converta uma string de caracteres em um formato
de nmero usando a function TO_NUMBER:
Converta uma string de caracteres em um formato
de data usando a function TO_DATE:
Estas functions tm um modificador fx. Esse
modificador especifica a correspondncia exata para
o argumento de caractere e o modelo de formato de
data de uma function TO_DATE.
TO_NUMBER(char[, 'format_model'])
TO_DATE(char[, 'format_model'])
Usando as Functions TO_NUMBER e TO_DATE
possvel converter uma string de caracteres em um nmero ou uma data. Para realizar essa
tarefa, use a function TO_NUMBER ou TO_DATE. O modelo de formato escolhido baseia-se
nos elementos de formato demonstrados anteriormente.
O modificador fx especifica a correspondncia exata para o argumento de caractere e o
modelo de formato de data de uma function TO_DATE:
A pontuao e o texto no argumento de caractere devem corresponder exatamente
(exceto em relao a maisculas e minsculas) s partes associadas do modelo de
formato.
O argumento de caractere no pode conter espaos em branco adicionais. Sem fx, o
Oracle ignora os espaos em branco adicionais.
Os dados numricos no argumento de caractere devem ter o mesmo nmero de dgitos
do elemento correspondente no modelo de formato. Sem fx, os nmeros no argumento
de caractere podem omitir os zeros esquerda.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-42
Usando as Functions TO_NUMBER e TO_DATE (continuao)
Exemplo
Exiba o nome e a data de admisso de todos os funcionrios admitidos em 24 de maio de
1999. Como o modificador fx usado, uma correspondncia exata necessria e os
espaos aps a palavra May no so reconhecidos:
SELECT last_name, hire_date
FROM employees
WHERE hire_date = TO_DATE('May 24, 1999', 'fxMonth DD, YYYY');
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-43
Copyright 2004, Oracle. Todos os direitos reservados.
Formato de Data RR
Ano Atual
1995
1995
2001
2001
Data Especificada
27.10.95
27.10.17
27.10.17
27.10.95
Formato RR
1995
2017
2017
1995
Formato YY
1995
1917
2017
2095
Se os dois
dgitos do
ano atual
forem:
049
049 5099
5099
A data retornada
estar contida no
sculo atual
A data retornada
estar contida no
sculo imediatamente
posterior ao atual
A data retornada
estar contida no
sculo imediatamente
anterior ao atual
A data retornada
estar contida no
sculo atual
Se o ano de dois dgitos especificado for:
Elemento de Formato de Data RR
O formato de data RR semelhante ao elemento YY, mas pode ser usado para especificar
sculos diferentes. Use o elemento de formato de data RR, em vez de YY, para que o
sculo do valor retornado varie de acordo com o ano de dois dgitos especificado e com
os ltimos dois dgitos do ano atual. A tabela do slide resume o comportamento do
elemento RR.
Ano Atual Data Especificada Interpretao (RR) Interpretao (YY)
1994
27-OUT-95
1995 1995
1994
27-OUT-17
2017 1917
2001
27-OUT-17
2017 2017

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-44
Copyright 2004, Oracle. Todos os direitos reservados.
Exemplo do Formato de Data RR
Para localizar os funcionrios admitidos antes de 1990,
use o formato de data RR, que produz os mesmos
resultados quer o comando seja executado em 1999
ou agora:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');
Exemplo do Formato de Data RR
Para localizar os funcionrios admitidos antes de 1990, voc poder usar o formato RR.
Como o ano atual maior que 1999, o formato RR interpretar a parte da data relativa ao
ano de 1950 a 1999.
O comando a seguir, por outro lado, no resultar na seleo de linhas porque o formato YY
interpretar a parte da data relativa ao ano de acordo com o sculo atual (2090).
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-yyyy')
FROM employees
WHERE TO_DATE(hire_date, 'DD-Mon-yy') < '01-Jan-1990';
no rows selected
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-45
Copyright 2004, Oracle. Todos os direitos reservados.
Aninhando Functions
possvel aninhar as functions de uma nica linha
em quantos nveis forem necessrios.
As functions aninhadas so avaliadas do nvel mais
profundo para o nvel mais superficial.
F3(F2(F1(col,arg1),arg2),arg3)
Etapa 1 = Resultado 1
Etapa 2 = Resultado 2
Etapa 3 = Resultado 3
Aninhando Functions
possvel aninhar as functions de uma nica linha em quantos nveis forem necessrios. As
functions aninhadas so avaliadas do nvel mais interno para o nvel mais externo. Veja a
seguir alguns exemplos que mostram a flexibilidade dessas functions.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-46
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name,
UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM employees
WHERE department_id = 60;
Aninhando Functions
Aninhando Functions (continuao)
O exemplo do slide exibe os sobrenomes dos funcionrios do departamento 60. A avaliao
da instruo SQL abrange trs etapas:
1. A function interna recupera os oito primeiros caracteres do sobrenome.
Result1 = SUBSTR (LAST_NAME, 1, 8)
2. A function externa concatena o resultado com _US.
Result2 = CONCAT(Result1, '_US')
3. A function mais externa converte os resultados em letras maisculas.
A expresso inteira torna-se o cabealho da coluna, pois no foi fornecido um apelido para
essa coluna.
Exemplo
Exiba a data da prxima sexta-feira que est a seis meses da data de admisso. A data
resultante dever aparecer como Friday, August 13th, 1999. Ordene os resultados por data
de admisso.
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS
(hire_date, 6), 'FRIDAY'),
'fmDay, Month DDth, YYYY')
"Next 6 Month Review"
FROM employees
ORDER BY hire_date;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-47
Copyright 2004, Oracle. Todos os direitos reservados.
Functions Gerais
As functions a seguir agem com qualquer tipo de
dados e esto relacionadas ao uso de valores nulos:
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
Functions Gerais
Essas functions agem com qualquer tipo de dados e esto relacionadas ao uso de valores
nulos na lista de expresses.
Observao: Para obter mais informaes sobre as centenas de functions disponveis,
consulte "Functions" no manual Oracle SQL Reference.
Function Descrio
NVL Converte um valor nulo em um valor real
NVL2 Se expr1 no for nulo, NVL2 retornar expr2. Se expr1 for nulo,
NVL2 retornar expr3. possvel expressar o argumento expr1 em
qualquer tipo de dados.
NULLIF Compara duas expresses; se elas forem iguais, retornar um valor
nulo e, se forem diferentes, retornar a primeira expresso
COALESCE Retorna a primeira expresso no nula da lista de expresses

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-48
Copyright 2004, Oracle. Todos os direitos reservados.
Function NVL
Converte um valor nulo em um valor real:
possvel usar os tipos de dados de data, caractere
e nmero.
A correspondncia entre os tipos de dados
necessria:
NVL(commission_pct,0)
NVL(hire_date,'01-JAN-97')
NVL(job_id,'No Job Yet')
Function NVL
Para converter um valor nulo em um valor real, use a function NVL.
Sintaxe
NVL (expr1, expr2)
Na sintaxe:
expr1 o valor de origem ou a expresso que poder conter um valor nulo
expr2 o valor de destino para a converso do valor nulo
Voc pode usar a function NVL para converter qualquer tipo de dados, mas o valor
retornado sempre igual ao do tipo de dados de expr1.
Converses NVL de Vrios Tipos de Dados
Tipo de Dados Exemplo de Converso
NUMBER NVL(number_column,9)
DATE NVL(date_column, '01-JAN-95')
CHAR or VARCHAR2 NVL(character_column, 'Unavailable')

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-49
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary, NVL(commission_pct, 0),
(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;
Usando a Function NVL

1
1 2
2
Usando a Function NVL
Para calcular a remunerao anual de todos os funcionrios, voc precisa multiplicar o
salrio mensal por 12 e adicionar o percentual de comisso ao resultado:
SELECT last_name, salary, commission_pct,
(salary*12) + (salary*12*commission_pct) AN_SAL
FROM employees;
Observe que a remunerao anual calculada apenas para os funcionrios que recebem
comisso. Se o valor de uma coluna da expresso for nulo, o resultado ser nulo. Para
calcular valores relativos a todos os funcionrios, converta o valor nulo em um nmero
antes de aplicar o operador aritmtico. No exemplo do slide, a function NVL usada para
converter valores nulos em zero.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-50
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary, commission_pct,
NVL2(commission_pct,
'SAL+COMM', 'SAL') income
FROM employees WHERE department_id IN (50, 80);
Usando a Function NVL2
1 2
2
1
Usando a Function NVL2
A function NVL2 examina a primeira expresso. Se a primeira expresso no for nula, a
function NVL2 retornar a segunda expresso. Se a primeira expresso for nula, a terceira
expresso ser retornada.
Sintaxe
NVL2 (expr1, expr2, expr3)
Na sintaxe:
expr1 o valor de origem ou a expresso que poder conter um valor nulo
expr2 o valor retornado quando expr1 no nulo
expr3 o valor retornado quando expr2 nulo
No exemplo mostrado no slide, a coluna COMMISSION_PCT examinada. Se for
detectado um valor, a segunda expresso SAL+COMM ser retornada. Se a coluna
COMMISSION_PCT contiver um valor nulo, a terceira expresso SAL ser retornada.
possvel expressar o argumento expr1 em qualquer tipo de dados. Os argumentos
expr2 e expr3 podem ser expressos em qualquer tipo de dados, exceto LONG. Se os tipos
de dados de expr2 e expr3 forem diferentes, o servidor Oracle converter expr3 no
tipo de dados de expr2 antes de compar-los, a menos que expr3 seja uma constante
nula. No ltimo caso, no ser necessria uma converso de tipo de dados. O tipo de dados
do valor retornado ser sempre igual ao tipo de dados de expr2, a menos que expr2 seja
expresso em dados de caractere; nesse caso, o tipo de dados do valor retornado ser
VARCHAR2.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-51
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT first_name, LENGTH(first_name) "expr1",
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM employees;
Usando a Function NULLIF

1
2
3
1 2 3
Usando a Function NULLIF
A function NULLIF compara duas expresses. Se elas forem iguais, a function retornar um
valor nulo. Se elas forem diferentes, a function retornar a primeira expresso. No
possvel especificar o literal NULL para a primeira expresso.
Sintaxe
NULLIF (expr1, expr2)
Na sintaxe:
expr1 o valor de origem comparado a expr2
expr2 o valor de origem comparado a expr1 (Se ele no for igual a expr1,
expr1 ser retornado.)
No exemplo do slide, o tamanho do nome na tabela EMPLOYEES comparado ao tamanho
do sobrenome nessa mesma tabela. Quando os tamanhos dos nomes so iguais, um valor
nulo exibido. Quando eles so diferentes, exibido o tamanho do nome.
Observao: A function NULLIF equivale logicamente expresso CASE a seguir. A
expresso CASE ser abordada em uma pgina adiante:
CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-52
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Function COALESCE
A vantagem da function COALESCE em relao
function NVL que a primeira pode assumir diversos
valores alternativos.
Se a primeira expresso no for nula, a function
COALESCE retornar essa expresso; caso contrrio,
ser usada a function COALESCE para as expresses
restantes.
Usando a Function COALESCE
A function COALESCE retorna a primeira expresso no nula da lista.
Sintaxe
COALESCE (expr1, expr2, ... exprn)
Na sintaxe:
expr1 retornar essa expresso se ela no for nula
expr2 retornar essa expresso se ela no for nula e a primeira expresso for nula
exprn retornar essa expresso se as expresses anteriores forem nulas
Todas as expresses devem ter o mesmo tipo de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-53
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name,
COALESCE(manager_id,commission_pct, -1) comm
FROM employees
ORDER BY commission_pct;
Usando a Function COALESCE

Usando a Function COALESCE (continuao)


No exemplo mostrado no slide, se o valor de MANAGER_ID no for nulo, ele ser exibido.
Se o valor de MANAGER_ID for nulo, COMMISSION_PCT ser exibido. Se os valores de
MANAGER_ID e COMMISSION_PCT forem nulos, ser exibido o valor 1.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-54
Copyright 2004, Oracle. Todos os direitos reservados.
Expresses Condicionais
Permitem usar a lgica IF-THEN-ELSE em uma
instruo SQL
Usam dois mtodos:
Expresso CASE
Function DECODE
Expresses Condicionais
Os dois mtodos usados para implementar o processamento condicional (a lgica IF-THEN-
ELSE) em uma instruo SQL so a expresso CASE e a function DECODE.
Observao: A expresso CASE est de acordo com o padro ANSI SQL. A function
DECODE especfica da sintaxe do Oracle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-55
Copyright 2004, Oracle. Todos os direitos reservados.
Expresso CASE
Facilita consultas condicionais executando o trabalho
de uma instruo IF-THEN-ELSE:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
Expresso CASE
As expresses CASE permitem usar a lgica IF-THEN-ELSE em instrues SQL sem
acionar procedures.
Em uma expresso CASE simples, o servidor Oracle pesquisa o primeiro par WHEN ...
THEN no qual expr igual a comparison_expr e retorna return_expr. Se nenhum
par WHEN ... THEN atender a essa condio e existir uma clusula ELSE, o servidor
Oracle retornar else_expr. Caso contrrio, ele retornar um valor nulo. No possvel
especificar o literal NULL para todos os valores de return_exprs e else_expr.
Todas as expresses (expr, comparison_expr e return_expr) devem ter o mesmo
tipo de dados, que pode ser CHAR, VARCHAR2, NCHAR ou NVARCHAR2.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-56
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP' THEN 1.20*salary
ELSE salary END "REVISED_SALARY"
FROM employees;
Usando a Expresso CASE
Facilita consultas condicionais executando o trabalho
de uma instruo IF-THEN-ELSE:

Usando a Expresso CASE


Na instruo SQL do slide, o valor de JOB_ID decodificado. Se o valor de JOB_ID for
IT_PROG, o aumento de salrio ser de 10%; se esse valor for ST_CLERK, o aumento de
salrio ser de 15%; se o valor for SA_REP, o aumento de salrio ser de 20%. Para todos
os outros cargos, no haver aumento de salrio.
possvel criar a mesma instruo com a function DECODE.
Este um exemplo de uma expresso CASE pesquisada. Nessa expresso, a pesquisa feita
da esquerda para a direita at que seja localizada uma ocorrncia da condio listada. Em
seguida, obtm-se a expresso de retorno. Se nenhuma condio for considerada verdadeira
e existir uma clusula ELSE, a expresso de retorno nessa clusula ser exibida; caso
contrrio, ser retornado NULL.
SELECT last_name,salary,
(CASE WHEN salary<5000 THEN 'Low'
WHEN salary<10000 THEN 'Medium'
WHEN salary<20000 THEN 'Good'
ELSE 'Excellent'
END) qualified_salary
FROM employees;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-57
Copyright 2004, Oracle. Todos os direitos reservados.
Function DECODE
Facilita consultas condicionais executando o trabalho
de uma expresso CASE ou de uma instruo
IF-THEN-ELSE:
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
Function DECODE
A function DECODE decodifica uma expresso de maneira semelhante lgica IF-THEN-
ELSE usada em vrias linguagens. Essa function decodifica a expresso depois de
compar-la a cada valor da pesquisa. Se a expresso for igual da pesquisa, o
resultado ser retornado.
Se o valor default for omitido, um valor nulo ser retornado quando um valor da pesquisa
no corresponder a nenhum dos valores do resultado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-58
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id, salary,
DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP', 1.20*salary,
salary)
REVISED_SALARY
FROM employees;
Usando a Function DECODE

Usando a Function DECODE


Na instruo SQL do slide, o valor de JOB_ID testado. Se o valor de JOB_ID for
IT_PROG, o aumento de salrio ser de 10%; se esse valor for ST_CLERK, o aumento de
salrio ser de 15%; se o valor for SA_REP, o aumento de salrio ser de 20%. Para todos
os outros cargos, no haver aumento de salrio.
possvel expressar a mesma instruo em pseudocdigo como uma instruo IF-THEN-
ELSE:
IF job_id = 'IT_PROG' THEN salary = salary*1.10
IF job_id = 'ST_CLERK' THEN salary = salary*1.15
IF job_id = 'SA_REP' THEN salary = salary*1.20
ELSE salary = salary
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-59
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, salary,
DECODE (TRUNC(salary/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45) TAX_RATE
FROM employees
WHERE department_id = 80;
Usando a Function DECODE
Exiba a alquota de imposto aplicvel para cada
funcionrio do departamento 80:
Usando a function DECODE (continuao)
Este slide mostra outro exemplo com a function DECODE. Nesse exemplo, determinamos a
alquota de imposto de cada funcionrio do departamento 80 com base no salrio mensal.
As alquotas de imposto so as seguintes:
Faixa de Salrio Mensal Alquota de Imposto
US$ 0,00 1.999,99 00%
US$ 2.000,00 3.999,99 09%
US$ 4.000,00 5.999,99 20%
US$ 6.000,00 7.999,99 30%
US$ 8.000,00 9.999,99 40%
US$ 10.000,00 11.999,99 42%
US$ 12.200,00 13.999,99 44%
US$14.000,00 ou mais 45%
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-60
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a:
Executar clculos em dados usando functions
Modificar itens de dados individuais usando functions
Manipular a sada de grupos de linhas usando
functions
Alterar os formatos de data para exibio usando
functions
Converter tipos de dados de colunas usando functions
Usar functions NVL
Usar a lgica IF-THEN-ELSE
Sumrio
possvel aninhar as functions de uma nica linha em quantos nveis forem necessrios. As
functions de uma nica linha podem manipular:
Dados de caractere: LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR,
LENGTH
Dados de nmero: ROUND, TRUNC, MOD
Dados de data: MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY,
ROUND, TRUNC
Lembre-se do seguinte:
Os valores de data tambm podem usar operadores aritmticos.
As functions de converso podem converter valores numricos, de caractere e data:
TO_CHAR, TO_DATE, TO_NUMBER
Vrias functions esto relacionadas ao uso de valores nulos, incluindo NVL, NVL2,
NULLIF e COALESCE.
possvel aplicar a lgica IF-THEN-ELSE em uma instruo SQL com a expresso
CASE ou a function DECODE.
SYSDATE e DUAL
SYSDATE uma function de data que retorna a data e o horrio atuais. comum selecionar
SYSDATE em uma tabela fictcia denominada DUAL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-61
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 3: Viso Geral da Parte 2
Este exerccio aborda os seguintes tpicos:
Criao de consultas que exigem o uso de functions
numricas, de caractere e data
Uso de concatenao com functions
Criao de consultas sem distino entre
maisculas e minsculas para testar a utilidade das
functions de caractere
Clculos dos anos e meses de servio de um
funcionrio
Obteno da data de reviso de um funcionrio
Exerccio 3: Viso Geral da Parte 2
A Parte 2 do exerccio desta lio contm vrias atividades que utilizam diferentes functions
disponveis para os tipos de dados de caractere, nmero e data. Faa as questes de 7 a 14
relativas a essa parte.
Lembre-se de que, nas functions aninhadas, os resultados so avaliados da function mais
interna para a mais externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-62

Exerccio 3
Parte 1
1. Crie uma consulta para exibir a data atual. Atribua o label Date coluna.
2. O departamento de recursos humanos precisa de um relatrio para exibir
o nmero do funcionrio, o sobrenome, o salrio e o salrio com 15,5%
de aumento (especificado como um nmero inteiro) de cada funcionrio.
Atribua o label New Salary coluna. Inclua a instruo SQL no arquivo
de texto lab_03_02.sql.
3. Execute a consulta no arquivo lab_03_02.sql.
4. Modifique a consulta lab_03_02.sql para adicionar uma coluna que subtraia
o salrio antigo do novo salrio. Atribua o label Increase coluna. Salve o
contedo do arquivo como lab_03_04.sql. Execute a consulta revisada.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-63
Exerccio 3 (continuao)
5. Crie uma consulta que exiba o sobrenome (com a primeira letra maiscula e todas as
outras minsculas) e o tamanho do sobrenome de todos os funcionrios cujos nomes
comecem com a letra J, A ou M. Atribua um label apropriado a cada coluna.
Classifique os resultados pelos sobrenomes dos funcionrios.
Recrie a consulta para que o usurio seja solicitado a informar a letra inicial do
sobrenome. Por exemplo, se o usurio informar H quando uma letra for solicitada, a
sada dever mostrar todos os funcionrios cujos sobrenomes comeam com a letra
H.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-64
Exerccio 3 (continuao)
6. O departamento de recursos humanos deseja saber qual o tempo de emprego de
cada funcionrio. Para cada funcionrio, exiba o sobrenome e calcule o nmero de
meses entre hoje e a data de admisso do funcionrio. Atribua o label
MONTHS_WORKED coluna. Ordene os resultados pelo nmero de meses em que o
funcionrio est empregado. Arredonde o nmero de meses para o nmero inteiro
mais prximo.
Observao: Os resultados sero diferentes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-65
Exerccio 3 (continuao)
Parte 2
7. Crie um relatrio que produza estas informaes para cada funcionrio:
<sobrenome do funcionrio> recebe <salrio> mensalmente,
mas deseja <3 vezes o salrio>. Atribua o label Dream Salaries
coluna.
Se tiver tempo, faa os seguintes exerccios:
8. Crie uma consulta que exiba o sobrenome e o salrio de todos os funcionrios.
Formate o salrio para defini-lo com um tamanho de 15 caracteres e preench-lo
esquerda com o smbolo $. Atribua o label SALARY coluna.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-66
Exerccio 3 (continuao)
9. Exiba o sobrenome, a data de admisso e a data de reviso de salrio de cada
funcionrio, que a primeira segunda-feira aps seis meses de servio. Atribua o
label REVIEW coluna. Formate as datas para que sejam exibidas no formato
semelhante a "Monday, the Thirty-First of July, 2000".
10. Exiba o sobrenome, a data de admisso e o dia da semana em que o funcionrio
comeou a trabalhar. Atribua o label DAY coluna. Ordene os resultados pelo dia da
semana, comeando por segunda-feira.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-67
Exerccio 3 (continuao)
Se quiser tomar parte em mais um desafio, faa estes exerccios:
11. Crie uma consulta que exiba os sobrenomes e as comisses dos funcionrios. Se um
funcionrio no ganhar comisso, a informao "No Commission" dever ser
exibida. Atribua o label COMM coluna.
12. Crie uma consulta que exiba os oito primeiros caracteres dos sobrenomes dos
funcionrios e indique os valores dos salrios com asteriscos. Cada asterisco
representa mil dlares. Classifique os dados em ordem decrescente de salrio.
Atribua o label EMPLOYEES_AND_THEIR_SALARIES coluna.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 3-68
Exerccio 3 (continuao)
13. Com a function DECODE, crie uma consulta que exiba o nvel de todos os
funcionrios com base no valor da coluna JOB_ID. Use estes dados:
Cargo Nvel
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Nenhuma das opes anteriores 0
14. Recrie a instruo no exerccio anterior usando a sintaxe CASE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Gerando Relatrios de Dados
Agregados com as Functions de Grupo
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Identificar as functions de grupo disponveis
Descrever o uso de functions de grupo
Agrupar dados com a clusula GROUP BY
Incluir ou excluir linhas agrupadas com a clusula
HAVING
Objetivos
Esta lio aborda o uso de functions com mais detalhes. Ela concentra-se na obteno de
informaes sumariadas (como mdias) relativas a grupos de linhas. A lio mostra como
agrupar as linhas de uma tabela em conjuntos menores e como especificar critrios de
pesquisa para grupos de linhas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-3
Copyright 2004, Oracle. Todos os direitos reservados.
O Que So Functions de Grupo?
As functions de grupo operam em conjuntos de linhas
para fornecer um resultado por grupo.
EMPLOYEES
Salrio mximo na
tabela EMPLOYEES

Functions de Grupo
Diferentemente das functions de uma nica linha, as functions de grupo operam em
conjuntos de linhas para fornecer um resultado por grupo. Esses conjuntos podem abranger
a tabela inteira ou a tabela dividida em grupos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-4
Copyright 2004, Oracle. Todos os direitos reservados.
Tipos de Functions de Grupo
AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE
Functions
de Grupo
Tipos de Functions de Grupo
Cada function aceita um argumento. Esta tabela identifica as opes que voc pode usar na
sintaxe:
Function Descrio
AVG([DISTINCT|ALL]n)
Valor mdio de n; ignora valores nulos
COUNT({*|[DISTINCT|ALL]expr
})

Nmero de linhas, em que expr avaliado
como um valor diferente de nulo (conta todas
as linhas selecionadas usando *, inclusive
valores duplicados e linhas com valores nulos)
MAX([DISTINCT|ALL]expr) Valor mximo de expr; ignora valores nulos
MIN([DISTINCT|ALL]expr)
Valor mnimo de expr; ignora valores nulos
STDDEV([DISTINCT|ALL]x)
Desvio padro de n; ignora valores nulos
SUM([DISTINCT|ALL]n)
Valores somados de n; ignora valores nulos
VARIANCE([DISTINCT|ALL]x)
Variao de n; ignora valores nulos

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-5
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
Functions de Grupo: Sintaxe
Diretrizes para a Utilizao de Functions de Grupo
Com DISTINCT, a function considera apenas valores no duplicados; com ALL, ela
considera todos os valores, inclusive os duplicados. Como o default, ALL no precisa
ser especificado.
Os tipos de dados das functions com um argumento expr podem ser CHAR,
VARCHAR2, NUMBER ou DATE.
Todas as functions de grupo ignoram valores nulos. Para substituir um valor por
valores nulos, use as functions NVL, NVL2 ou COALESCE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-6
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';
Usando as Functions AVG e SUM
possvel usar as functions AVG e SUM para dados
numricos.
Usando as Functions de Grupo
possvel usar as functions AVG, SUM, MIN e MAX em colunas que podem armazenar dados
numricos. O exemplo do slide mostra os salrios mdio, mximo e mnimo, bem como a
soma dos salrios mensais, de todos os representantes de vendas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-7
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT MIN(hire_date), MAX(hire_date)
FROM employees;
Usando as Functions MIN e MAX
possvel usar MIN e MAX para tipos de dados
numricos, de caractere e de data.
Usando as Functions de Grupo (continuao)
possvel usar as functions MAX e MIN para os tipos de dados numricos, de caractere e de
data. O exemplo do slide mostra o funcionrio mais recente e o mais antigo.
O exemplo a seguir mostra o primeiro e o ltimo sobrenome de funcionrio em uma lista
em ordem alfabtica de todos os funcionrios:
SELECT MIN(last_name), MAX(last_name)
FROM employees;
Observao: S possvel usar as functions AVG, SUM, VARIANCE e STDDEV com tipos
de dados numricos. MAX e MIN no podem ser usadas com o tipo de dados LOB ou LONG.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-8
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Function COUNT
COUNT(*) retorna o nmero de linhas de uma tabela:
COUNT(expr) retorna o nmero de linhas com valores
no nulos para expr:
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
1
2
Function COUNT
A function COUNT tem trs formatos:
COUNT(*)
COUNT(expr)
COUNT(DISTINCT expr)
COUNT(*) retorna o nmero de linhas de uma tabela que atendem aos critrios da
instruo SELECT, incluindo as linhas duplicadas e as linhas com valores nulos de qualquer
uma das colunas. Se uma clusula WHERE estiver includa na instruo SELECT,
COUNT(*) retornar o nmero de linhas que atendem condio especificada nessa
clusula.
Por outro lado, COUNT(expr) retorna o nmero de valores no nulos na coluna
identificada por expr.
COUNT(DISTINCT expr) retorna o nmero de valores exclusivos e no nulos na coluna
identificada por expr.
Exemplos
1. O exemplo do slide mostra o nmero de funcionrios do departamento 50.
2. O exemplo do slide mostra o nmero de funcionrios do departamento 80 que podem
receber comisso.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-9
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT COUNT(DISTINCT department_id)
FROM employees;
Usando a Palavra-Chave DISTINCT
COUNT(DISTINCT expr) retorna o nmero de
valores no nulos e distintos de expr.
Para exibir os valores de nmeros de departamentos
distintos da tabela EMPLOYEES:
Palavra-chave DISTINCT
Use a palavra-chave DISTINCT para suprimir a contagem de valores duplicados em uma
coluna.
O exemplo do slide mostra os valores de nmeros de departamentos distintos da tabela
EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-10
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Grupo e Valores Nulos
As functions de grupo ignoram valores nulos na
coluna:
A function NVL determina que as functions de grupo
incluam valores nulos:
SELECT AVG(commission_pct)
FROM employees;
SELECT AVG(NVL(commission_pct, 0))
FROM employees;
1
2
Functions de Grupo e Valores Nulos
Todas as functions de grupo ignoram valores nulos na coluna.
A function NVL determina que as functions de grupo incluam valores nulos.
Exemplos
1. A mdia calculada com base apenas nas linhas da tabela com valores vlidos
armazenados na coluna COMMISSION_PCT. A mdia calculada como a comisso
total paga a todos os funcionrios dividida pelo nmero de funcionrios que recebem
comisso (quatro).
2. A mdia calculada com base em todas as linhas da tabela, mesmo que valores nulos
estejam armazenados na coluna COMMISSION_PCT. A mdia calculada como a
comisso total paga a todos os funcionrios dividida pelo nmero total de funcionrios
da empresa (20).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-11
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Grupos de Dados
EMPLOYEES

4400
9500
3500
6400
10033
Salrio mdio
na tabela
EMPLOYEES
para cada
departamento
Criando Grupos de Dados
At esta etapa do nosso estudo, todas as functions de grupo trataram a tabela como um
grande grupo de informaes.
Entretanto, s vezes necessrio dividir a tabela de informaes em grupos menores.
possvel efetuar essa diviso com a clusula GROUP BY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-12
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Grupos de Dados:
Sintaxe da Clusula GROUP BY
possvel dividir as linhas de uma tabela em grupos
menores com a clusula GROUP BY.
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Clusula GROUP BY
Voc pode usar a clusula GROUP BY para dividir as linhas de uma tabela em grupos.
Depois, pode usar as functions de grupo para retornar informaes sumariadas de cada
grupo.
Na sintaxe:
group_by_expression especifica colunas cujos valores determinam a base
do agrupamento de linhas
Diretrizes
Se incluir uma function de grupo em uma clusula SELECT, voc no poder
selecionar resultados individuais, a menos que a coluna individual aparea na clusula
GROUP BY. Se no conseguir incluir a lista de colunas na clusula GROUP BY, voc
receber uma mensagem de erro.
Com uma clusula WHERE, voc poder excluir linhas antes de dividi-las em grupos.
Inclua as colunas na clusula GROUP BY.
No possvel usar um apelido de coluna na clusula GROUP BY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-13
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
Usando a Clusula GROUP BY
Todas as colunas da lista SELECT que no so
functions de grupo devem estar includas na clusula
GROUP BY.
Usando a Clusula GROUP BY
Ao usar a clusula GROUP BY, verifique se todas as colunas da lista SELECT que no so
functions de grupo esto includas nessa clusula. O exemplo do slide mostra o nmero e o
salrio mdio de cada departamento. A instruo SELECT com uma clusula GROUP BY
avaliada da seguinte maneira:
A clusula SELECT especifica as colunas a serem recuperadas da seguinte forma:
A coluna de nmero de departamento da tabela EMPLOYEES
A mdia de todos os salrios no grupo especificado na clusula GROUP BY
A clusula FROM especifica as tabelas que o banco de dados deve acessar: a tabela
EMPLOYEES.
A clusula WHERE especifica as linhas a serem recuperadas. Como no h clusula
WHERE, todas as linhas so recuperadas por default.
A clusula GROUP BY especifica como as linhas devem ser agrupadas. As linhas so
agrupadas por nmero de departamento, portanto, a function AVG aplicada coluna de
salrio calcular o salrio mdio de cada departamento.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-14
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Clusula GROUP BY
A clusula GROUP BY seguida pelo nome da coluna no
precisa estar na lista SELECT.
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
Usando a Clusula GROUP BY (continuao)
A clusula GROUP BY seguida pelo nome da coluna no precisa estar na clusula SELECT.
Por exemplo, a instruo SELECT do slide mostra os salrios mdios de cada departamento
sem exibir os respectivos nmeros de departamento. No entanto, sem os nmeros de
departamento, os resultados parecem no fazer sentido.
possvel usar a function de grupo na clusula ORDER BY:
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-15
Copyright 2004, Oracle. Todos os direitos reservados.
Agrupando por Mais de Uma Coluna
EMPLOYEES
Adicione os
salrios tabela
EMPLOYEES
para cada cargo,
agrupados por
departamento

Grupos Contidos em Outros Grupos


s vezes, voc precisa ver os resultados de grupos contidos em outros grupos. O slide
mostra um relatrio que exibe o salrio total pago a cada cargo, em cada departamento.
A tabela EMPLOYEES agrupada primeiro por nmero de departamento e, nesse
agrupamento, por cargo. Por exemplo, os quatro estoquistas do departamento 50 so
agrupados e um nico resultado (salrio total) fornecido para todos os estoquistas do
grupo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-16
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;
Usando a Clusula GROUP BY
em Vrias Colunas
Grupos Contidos em Outros Grupos (continuao)
possvel obter resultados sumariados de grupos e subgrupos listando mais de uma coluna
na clusula GROUP BY. Voc pode determinar a ordem de classificao default dos
resultados pela ordem das colunas na clusula GROUP BY. No exemplo do slide, a
instruo SELECT com uma clusula GROUP BY avaliada da seguinte maneira:
A clusula SELECT especifica a coluna a ser recuperada:
O nmero do departamento na tabela EMPLOYEES
O ID do cargo na tabela EMPLOYEES
A soma de todos os salrios no grupo especificado na clusula GROUP BY
A clusula FROM especifica as tabelas que o banco de dados deve acessar: a tabela
EMPLOYEES.
A clusula GROUP BY especifica como voc deve agrupar as linhas:
Primeiro, as linhas so agrupadas por nmero de departamento.
Depois, as linhas so agrupadas por ID de cargo nos grupos de nmeros de
departamento.
Portanto, a function SUM aplicada coluna de salrio para todos os IDs de cargo em cada
grupo de nmeros de departamento.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-17
Copyright 2004, Oracle. Todos os direitos reservados.
Consultas Invlidas
Usando Functions de Grupo
Qualquer coluna ou expresso da lista SELECT que no
seja uma function agregada dever estar na clusula
GROUP BY:
SELECT department_id, COUNT(last_name)
FROM employees;
SELECT department_id, COUNT(last_name)
*
ERROR at line 1:
ORA-00937: not a single-group group function
Coluna ausente na clusula GROUP BY
Consultas Invlidas Usando Functions de Grupo
Sempre que usar uma combinao de itens individuais (DEPARTMENT_ID) e functions de
grupo (COUNT) na mesma instruo SELECT, inclua uma clusula GROUP BY que
especifique os itens individuais (neste caso, DEPARTMENT_ID). Se a clusula GROUP BY
no for includa, a mensagem de erro "not a single-group group function" ser exibida e um
asterisco (*) indicar a coluna afetada. Para corrigir o erro no slide, adicione a clusula
GROUP BY:
SELECT department_id, count(last_name)
FROM employees
GROUP BY department_id;
Qualquer coluna ou expresso da lista SELECT que no seja uma function agregada dever
estar na clusula GROUP BY.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-18
Copyright 2004, Oracle. Todos os direitos reservados.
Consultas Invlidas
Usando Functions de Grupo
No possvel usar a clusula WHERE para restringir
grupos.
Use a clusula HAVING para restringir grupos.
No possvel usar functions de grupo na clusula
WHERE.
SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;
WHERE AVG(salary) > 8000
*
ERROR at line 3:
ORA-00934: group function is not allowed here
No possvel usar a clusula WHERE para restringir grupos
Consultas Invlidas Usando Functions de Grupo (continuao)
No possvel usar a clusula WHERE para restringir grupos. A instruo SELECT do
exemplo do slide resulta em erro, pois utiliza a clusula WHERE para restringir a exibio
dos salrios mdios dos departamentos cujo salrio mdio superior a US$ 8.000.
Para corrigir o erro do exemplo, use a clusula HAVING para restringir grupos:
SELECT department_id, AVG(salary)
FROM employees
HAVING AVG(salary) > 8000
GROUP BY department_id;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-19
Copyright 2004, Oracle. Todos os direitos reservados.
Restringindo Resultados de Grupos
EMPLOYEES

O salrio
mximo por
departamento
quando for
maior que
US$ 10.000
Restringindo Resultados de Grupos
Da mesma maneira que voc utiliza a clusula WHERE para restringir as linhas selecionadas,
use a clusula HAVING para restringir grupos. Para obter o salrio mximo de cada
departamento cujo salrio mximo superior a US$ 10.000, voc precisa fazer o seguinte:
1. Obtenha o salrio mdio de cada departamento agrupando por nmero de
departamento.
2. Restrinja os grupos aos departamentos com um salrio mximo maior que US$10.000.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-20
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Restringindo Resultados de Grupos
com a Clusula HAVING
Quando a clusula HAVING utilizada, o servidor
Oracle restringe os grupos da seguinte forma:
1. As linhas so agrupadas.
2. A function de grupo aplicada.
3. Os grupos que correspondem clusula HAVING
so exibidos.
Restringindo Resultados de Grupos com a Clusula HAVING
Use a clusula HAVING para especificar quais grupos devem ser exibidos e, dessa forma,
restringir ainda mais os grupos com base nas informaes agregadas.
Na sintaxe, group_condition restringe os grupos de linhas retornados aos grupos cuja
condio especificada verdadeira.
Quando voc usa a clusula HAVING, o servidor Oracle executa as seguintes etapas:
1. As linhas so agrupadas.
2. A function de grupo aplicada ao grupo.
3. Os grupos que correspondem aos critrios na clusula HAVING so exibidos.
A clusula HAVING pode anteceder a clusula GROUP BY, mas recomendvel usar a
clusula GROUP BY primeiro por razes lgicas. Os grupos so formados e as functions de
grupo so calculadas antes de a clusula HAVING ser aplicada aos grupos na lista SELECT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-21
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
Usando a Clusula HAVING
Usando a Clusula HAVING
O exemplo do slide mostra os nmeros e os salrios mximos dos departamentos cujo
salrio mximo maior que US$ 10.000.
possvel usar a clusula GROUP BY sem uma function de grupo na lista SELECT.
Se voc restringir as linhas com base no resultado de uma function de grupo, especifique as
clusulas GROUP BY e HAVING.
Este exemplo mostra os nmeros e os salrios mdios dos departamentos cujo salrio
mximo ultrapassa US$ 10.000:
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING max(salary)>10000;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-22
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT job_id, SUM(salary) PAYROLL
FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary);
Usando a Clusula HAVING
Usando a Clusula HAVING (continuao)
O exemplo do slide mostra o ID do cargo e o salrio mensal total de cada cargo com uma
folha de pagamento total que ultrapassa US$ 13.000. O exemplo exclui representantes de
vendas e classifica a lista pelo salrio mensal total.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-23
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
Aninhando Functions de Grupo
Exiba a mdia de salrio mximo:
Aninhando Functions de Grupo
possvel aninhar at duas functions de grupo. O exemplo do slide mostra a mdia de
salrio mximo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-24
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Sumrio
Nesta lio, voc aprendeu a:
Usar as functions de grupo COUNT, MAX, MIN e AVG
Criar consultas que utilizam a clusula GROUP BY
Criar consultas que utilizam a clusula HAVING
Sumrio
Vrias functions de grupo esto disponveis em SQL, como estas:
AVG, COUNT, MAX, MIN, SUM, STDDEV e VARIANCE
Para criar subgrupos, use a clusula GROUP BY. possvel restringir grupos com a
clusula HAVING.
Especifique as clusulas HAVING e GROUP BY aps a clusula WHERE em uma instruo.
A ordem na qual voc especifica essas clusulas aps a clusula WHERE no importante.
Informe a clusula ORDER BY por ltimo.
O servidor Oracle avalia as clusulas na seguinte ordem:
1. Se a instruo contiver uma clusula WHERE, o servidor estabelecer as linhas
candidatas.
2. O servidor identifica os grupos especificados na clusula GROUP BY.
3. A clusula HAVING restringe os grupos de resultados que no atendem aos critrios de
grupo especificados na clusula HAVING.
Observao: Para obter uma lista completa das functions de grupo, consulte o manual
Oracle SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-25
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 4: Viso Geral
Este exerccio aborda os seguintes tpicos:
Criao de consultas que utilizam as functions
de grupo
Agrupamento por linhas para obter mais de um
resultado
Restrio de grupos usando a clusula HAVING
Exerccio 4: Viso Geral
No final deste exerccio, voc dever estar familiarizado com a utilizao de functions de
grupo e a seleo de grupos de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-26
Exerccio 4
Determine a validade das trs instrues a seguir. Circule Verdadeiro ou Falso.
1. As functions de grupo trabalham com vrias linhas para produzir um resultado por
grupo.
Verdadeiro/Falso
2. As functions de grupo incluem valores nulos em clculos.
Verdadeiro/Falso
3. A clusula WHERE restringe as linhas antes da incluso em um clculo de grupo.
Verdadeiro/Falso
O departamento de RH necessita dos seguintes relatrios:
4. Obtenha o salrio mximo, o salrio mnimo, a soma dos salrios e o salrio
mdio de todos os funcionrios. Atribua os labels Maximum, Minimum, Sum
e Average, respectivamente, s colunas. Arredonde os resultados para o nmero
inteiro mais prximo. Inclua a instruo SQL no arquivo de texto
lab_04_04.sql.
5. Modifique a consulta em lab_04_04.sql para exibir o salrio mnimo,
o salrio mximo, a soma dos salrios e o salrio mdio de cada tipo de cargo.
Salve novamente lab_04_04.sql como lab_04_05.sql. Execute a
instruo em lab_04_05.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-27
Exerccio 4 (continuao)
6. Crie uma consulta para exibir o nmero de pessoas com o mesmo cargo.
Generalize a consulta para que o usurio do departamento de RH seja solicitado
a informar um cargo. Salve o script no arquivo lab_04_06.sql.
7. Determine o nmero de gerentes sem list-los. Atribua o label Number of
Managers coluna. Dica: Use a coluna MANAGER_ID para determinar
o nmero de gerentes.
8. Descubra a diferena entre o salrio mais alto e o mais baixo. Atribua o label
DIFFERENCE coluna.
Se tiver tempo, faa os seguintes exerccios:
9. Crie um relatrio para exibir o nmero do gerente e o salrio do funcionrio com
menor remunerao desse gerente. Exclua todas as pessoas cujo gerente seja
desconhecido. Exclua todos os grupos em que o salrio mnimo seja US$ 6.000 ou
inferior. Classifique a sada em ordem decrescente de salrio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 4-28
Exerccio 4 (continuao)
Se quiser tomar parte em mais um desafio, faa estes exerccios:
10. Crie uma consulta que exiba o nmero total de funcionrios e, desse total, mostre o
nmero de funcionrios admitidos em 1995, 1996, 1997 e 1998. Crie cabealhos de
colunas apropriados.
11. Crie uma consulta matriz que exiba o cargo, o salrio relativo a esse cargo com base
no nmero do departamento e o salrio total desse cargo para os departamentos 20,
50, 80 e 90, atribuindo um cabealho apropriado a cada coluna.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Exibindo Dados
de Vrias Tabelas
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Criar instrues SELECT para acessar dados de mais
de uma tabela com equijoins e no-equijoins
Juntar uma tabela a si prpria com uma auto-join
Exibir dados que normalmente no atendem a uma
condio de join usando joins externas
Gerar um produto cartesiano de todas as linhas de
duas ou mais tabelas
Objetivos
Esta lio explica como obter dados de mais de uma tabela. Uma join usada para exibir
informaes de vrias tabelas. Portanto, voc pode juntar tabelas para exibir informaes de
mais de uma tabela.
Observao: Para obter informaes sobre joins, consulte "SQL Queries and Subqueries:
Joins" no manual Oracle SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-3
Copyright 2004, Oracle. Todos os direitos reservados.
Obtendo Dados de Vrias Tabelas
EMPLOYEES DEPARTMENTS

Obtendo Dados de Vrias Tabelas


s vezes, necessrio usar dados de mais de uma tabela. No exemplo do slide, o relatrio
exibe dados de duas tabelas distintas:
Os IDs de funcionrio esto na tabela EMPLOYEES.
Os IDs de departamento esto nas tabelas EMPLOYEES e DEPARTMENTS.
Os nomes de departamento esto na tabela DEPARTMENTS.
Para gerar o relatrio, voc precisa vincular as tabelas EMPLOYEES e DEPARTMENTS e
acessar os dados dessas duas tabelas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-4
Copyright 2004, Oracle. Todos os direitos reservados.
Tipos de Join
Estas so as joins compatveis com o padro
SQL:1999:
Joins cruzadas
Joins naturais
Clusula USING
Joins externas integrais (ou de dois lados)
Condies arbitrrias de join para joins externas
Tipos de Join
Para juntar tabelas, voc pode usar a sintaxe de join compatvel com o padro SQL:1999.
Observao: Antes da release Oracle9i, a sintaxe de join era diferente dos padres ANSI. A
sintaxe de join compatvel com o SQL:1999 no oferece benefcios de desempenho em
relao sintaxe de join de propriedade Oracle existente nas releases anteriores. Para obter
informaes detalhadas sobre a sintaxe de join proprietria, consulte o Apndice C.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-5
Copyright 2004, Oracle. Todos os direitos reservados.
Unindo Tabelas com a Sintaxe SQL:1999
Use uma join para consultar dados de mais de
uma tabela:
SELECT table1.column, table2.column
FROM table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];
Definindo Joins
Na sintaxe:
table1.column indica a tabela e a coluna das quais os dados so recuperados
NATURAL JOIN junta duas tabelas com base no mesmo nome de coluna
JOIN table USING column_name executa uma operao de equijoin com base no
nome da coluna
JOIN table ON table1.column_name executa uma operao de equijoin com
base na condio da clusula ON, = table2.column_name
LEFT/RIGHT/FULL OUTER executa joins externas
CROSS JOIN retorna um produto cartesiano das duas tabelas
Para obter mais informaes, consulte "SELECT" no manual Oracle SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-6
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Joins Naturais
A clusula NATURAL JOIN baseia-se em todas as
colunas das duas tabelas que tm o mesmo nome.
Ela seleciona linhas das duas tabelas que tm
valores iguais em todas as colunas
correspondentes.
Se as colunas com nomes idnticos tiverem tipos de
dados distintos, ser retornado um erro.
Criando Joins Naturais
possvel unir tabelas automaticamente com base nas colunas das duas tabelas com tipos
de dados e nomes correspondentes. Para uni-las, use as palavras-chave NATURAL JOIN.
Observao: A operao de join s pode ocorrer em colunas com os mesmos nomes e tipos
de dados nas duas tabelas. Se as colunas tiverem nomes idnticos, mas tipos de dados
distintos, a sintaxe NATURAL JOIN causar um erro.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-7
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations ;
Recuperando Registros com Joins Naturais
Recuperando Registros com Joins Naturais
No exemplo do slide, a tabela LOCATIONS unida tabela DEPARTMENT pela coluna
LOCATION_ID, que a nica coluna com o mesmo nome nas duas tabelas. Se houvesse
outras colunas comuns, a join usaria todas elas.
Joins Naturais com uma Clusula WHERE
Para implementar outras restries a uma join natural, use uma clusula WHERE. O exemplo
a seguir limita as linhas da sada quelas com um ID de departamento igual a 20 ou 50:
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations
WHERE department_id IN (20, 50);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-8
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Joins com a Clusula USING
Se diversas colunas tiverem os mesmos nomes, mas
os tipos de dados no forem coincidentes, a
clusula NATURAL JOIN poder ser modificada com
a clusula USING para especificar as colunas a
serem usadas em uma equijoin.
Use a clusula USING para estabelecer uma
correspondncia com apenas uma coluna quando
houver correspondncia com mais de uma coluna.
No use um nome ou apelido de tabela nas colunas
referenciadas.
As clusulas NATURAL JOIN e USING so
mutuamente exclusivas.
Clusula USING
As joins naturais usam todas as colunas com nomes e tipos de dados correspondentes para
unir as tabelas. possvel usar a clusula USING para especificar apenas as colunas que
devero ser usadas em uma equijoin. As colunas referenciadas na clusula USING no
devem ter um qualificador (nome ou apelido de tabela) em qualquer ponto da instruo
SQL.
Por exemplo, esta instruo vlida:
SELECT l.city, d.department_name
FROM locations l JOIN departments d USING (location_id)
WHERE location_id = 1400;
A instruo a seguir invlida, pois LOCATION_ID qualificado na clusula WHERE:
SELECT l.city, d.department_name
FROM locations l JOIN departments d USING (location_id)
WHERE d.location_id = 1400;
ORA-25154: column part of USING clause cannot have qualifier
A mesma restrio tambm aplicada s joins naturais. Portanto, as colunas com o
mesmo nome nas duas tabelas devem ser usadas sem qualificadores.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-9
Copyright 2004, Oracle. Todos os direitos reservados.
Unindo Nomes de Colunas
EMPLOYEES DEPARTMENTS
Chave estrangeira Chave primria

A Clusula USING para Equijoins


Para determinar o nome do departamento de um funcionrio, compare o valor da coluna
DEPARTMENT_ID na tabela EMPLOYEES com os valores de DEPARTMENT_ID na tabela
DEPARTMENTS. O relacionamento entre as tabelas EMPLOYEES e DEPARTMENTS uma
equijoin, isto , os valores da coluna DEPARTMENT_ID nas duas tabelas devem ser iguais.
Com freqncia, esse tipo de join abrange complementos de chave primria e estrangeira.
Observao: As equijoins tambm so chamadas de joins simples ou joins internas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-10
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employees.employee_id, employees.last_name,
departments.location_id, department_id
FROM employees JOIN departments
USING (department_id) ;
Recuperando Registros com a Clusula USING

Recuperando Registros com a Clusula USING


O exemplo do slide une a coluna DEPARTMENT_ID das tabelas EMPLOYEES e
DEPARTMENTS e indica o local de trabalho de um funcionrio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-11
Copyright 2004, Oracle. Todos os direitos reservados.
Qualificando Nomes de Colunas Ambguos
Use prefixos de tabela para qualificar nomes de
colunas presentes em vrias tabelas.
Use prefixos de tabela para melhorar o desempenho.
Use apelidos de coluna para distinguir as colunas
com nomes idnticos, mas que residem em tabelas
diferentes.
No use apelidos em colunas identificadas na
clusula USING e listadas em alguma parte da
instruo SQL.
Qualificando Nomes de Colunas Ambguos
necessrio qualificar os nomes das colunas com o nome da tabela para evitar
ambigidades. Sem os prefixos das tabelas, a coluna DEPARTMENT_ID na lista SELECT
poder ser da tabela DEPARTMENTS ou EMPLOYEES. necessrio adicionar o prefixo da
tabela para executar a consulta:
SELECT employees.employee_id, employees.last_name,
departments.department_id, departments.location_id
FROM employees JOIN departments
ON employees.department_id = departments.department_id;
Se no houver nomes de colunas comuns entre as duas tabelas, no ser preciso qualificar as
colunas. No entanto, o uso do prefixo da tabela melhora o desempenho, pois voc informa
ao servidor Oracle exatamente onde localizar as colunas.
Observao: Ao efetuar uma operao de join com a clusula USING, voc no poder
qualificar uma coluna usada nessa prpria clusula. Alm disso, se essa coluna for usada em
alguma parte da instruo SQL, ela no poder ser utilizada como apelido.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-12
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.employee_id, e.last_name,
d.location_id, department_id
FROM employees e JOIN departments d
USING (department_id) ;
Usando Apelidos de Tabelas
Use apelidos de tabelas para simplificar consultas.
Use apelidos de tabelas para melhorar o desempenho.
Usando Apelidos de Tabelas
A qualificao dos nomes de colunas com nomes de tabelas pode consumir muito tempo,
especialmente se os nomes das tabelas forem longos. Voc pode usar os apelidos das
tabelas em vez dos nomes. Assim como um apelido de coluna fornece outro nome a uma
coluna, um apelido de tabela fornece outro nome a uma tabela. Os apelidos de tabelas
ajudam a reduzir o tamanho do cdigo SQL, utilizando menos memria.
Observe como os apelidos de tabelas so identificados na clusula FROM do exemplo. O
nome da tabela especificado por inteiro, seguido por um espao e, depois, o apelido da
tabela. A tabela EMPLOYEES recebeu o apelido e, e a tabela DEPARTMENTS, o apelido d.
Diretrizes
Um apelido de tabela pode conter at 30 caracteres, mas recomendvel especificar o
menor nome possvel.
Se um apelido de tabela for usado para um nome de tabela especfico na clusula
FROM, ele dever ser substitudo pelo nome da tabela em toda a instruo SELECT.
Os apelidos de tabelas devem ser significativos.
O apelido de tabela vlido somente para a instruo SELECT atual.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-13
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Joins com a Clusula ON
A condio de join para a join natural
basicamente uma equijoin de todas as colunas
com o mesmo nome.
Use a clusula ON para especificar condies
arbitrrias ou colunas a serem utilizadas em
operaes de join.
A condio de join separada de outras condies
de pesquisa.
A clusula ON facilita a compreenso do cdigo.
Clusula ON
Use a clusula ON para especificar uma condio de join. Assim, voc pode especificar
condies de join separadas de condies de filtro e pesquisa na clusula WHERE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-14
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
Recuperando Registros com a Clusula ON

Criando Joins com a Clusula ON


Neste exemplo, as colunas DEPARTMENT_ID das tabelas EMPLOYEES e DEPARTMENTS
so unidas com a clusula ON. Sempre que um ID de departamento na tabela EMPLOYEES
for igual ao ID de departamento na tabela DEPARTMENTS, a linha ser retornada.
Tambm possvel usar a clusula ON para unir colunas com nomes distintos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-15
Copyright 2004, Oracle. Todos os direitos reservados.
Auto-Joins Usando a Clusula ON
MANAGER_ID na tabela WORKER igual a
EMPLOYEE_ID na tabela MANAGER.
EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

Unindo uma Tabela a Ela Prpria


s vezes, necessrio unir uma tabela a ela prpria. Para descobrir o nome do gerente de
cada funcionrio, voc precisa unir a tabela EMPLOYEES a ela prpria ou executar uma
auto-join. Por exemplo, para descobrir o nome do gerente de Lorentz, voc precisa:
Localizar Lorentz na tabela EMPLOYEES examinando a coluna LAST_NAME.
Localizar o nmero do gerente de Lorentz examinando a coluna MANAGER_ID. O
nmero do gerente de Lorentz 103.
Localizar o nome do gerente com o valor de EMPLOYEE_ID 103 examinando a
coluna LAST_NAME. O nmero de funcionrio de Hunold 103, portanto, Hunold o
gerente de Lorentz.
Nesse processo, voc examinar a tabela duas vezes. Na primeira vez, voc examinar a
tabela para localizar Lorentz na coluna LAST_NAME e o valor 103 relativo a
MANAGER_ID. Na segunda vez, voc examinar a coluna EMPLOYEE_ID para localizar
103 e a coluna LAST_NAME para localizar Hunold.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-16
Copyright 2004, Oracle. Todos os direitos reservados.
Auto-Joins Usando a Clusula ON
SELECT e.last_name emp, m.last_name mgr
FROM employees e JOIN employees m
ON (e.manager_id = m.employee_id);

Unindo uma Tabela a Ela Prpria (continuao)


Tambm possvel usar a clusula ON para unir colunas com nomes distintos na mesma
tabela ou em uma tabela diferente.
O exemplo mostrado uma auto-join da tabela EMPLOYEES, com base nas colunas
EMPLOYEE_ID e MANAGER_ID.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-17
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149 ;
Aplicando Outras Condies a uma Join
Aplicando Outras Condies a uma Join
Voc pode aplicar outras condies join.
O exemplo mostrado executa uma operao de join nas tabelas EMPLOYEES e
DEPARTMENTS, alm de exibir apenas os funcionrios com o ID de gerente 149. Para
adicionar outras condies clusula ON, especifique clusulas AND. Como opo, voc
pode usar uma clusula WHERE para aplicar outras condies:
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
WHERE e.manager_id = 149;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-18
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, city, department_name
FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;
Criando Joins Tridimensionais com a
Clusula ON

Joins Tridimensionais
Uma join tridimensional uma join de trs tabelas. Na sintaxe compatvel com o padro
SQL:1999, as joins so executadas da esquerda para a direita. Portanto, a primeira join a ser
executada EMPLOYEES JOIN DEPARTMENTS. A primeira condio de join pode fazer
referncia a colunas de EMPLOYEES e DEPARTMENTS, mas no a colunas de
LOCATIONS. A segunda condio de join pode fazer referncia a colunas de todas as trs
tabelas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-19
Copyright 2004, Oracle. Todos os direitos reservados.
No-Equijoins
EMPLOYEES JOB_GRADES
O salrio na tabela EMPLOYEES
deve estar compreendido entre
o menor e o maior salrio na
tabela JOB_GRADES.

No-Equijoins
Uma no-equijoin uma condio de join que contm algo diferente de um operador de
igualdade.
O relacionamento entre as tabelas EMPLOYEES e JOB_GRADES um exemplo de uma
no-equijoin. Em um relacionamento entre as duas tabelas, os valores da coluna SALARY
da tabela EMPLOYEES devem estar compreendidos entre os valores das colunas
LOWEST_SALARY e HIGHEST_SALARY da tabela JOB_GRADES. O relacionamento
obtido com um operador diferente de igualdade (=).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-20
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.last_name, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON e.salary
BETWEEN j.lowest_sal AND j.highest_sal;
Recuperando Registros com No-Equijoins

No-Equijoins (continuao)
O exemplo do slide cria uma no-equijoin para avaliar o nvel salarial de um funcionrio. O
salrio deve estar compreendido entre qualquer par de faixas de salrio mais baixo e mais
alto.
importante observar que todos os funcionrios aparecem uma nica vez quando essa
consulta executada. Os funcionrios no so repetidos na lista. Existem dois motivos para
isso:
Nenhuma das linhas da tabela de nveis de cargos contm nveis sobrepostos. Isto , o
valor do salrio de um funcionrio somente pode estar entre os valores de salrio mais
alto e mais baixo de uma das linhas da tabela de nveis salariais.
Os salrios de todos os funcionrios esto compreendidos entre os limites fornecidos
pela tabela de nveis de cargos. Isto , nenhum funcionrio recebe menos que o valor
mais baixo contido na coluna LOWEST_SAL ou mais que o valor mais alto contido na
coluna HIGHEST_SAL.
Observao: possvel usar outras condies (como <= e >=), mas BETWEEN a mais
simples. Quando usar BETWEEN, lembre-se de informar primeiro o valor mais baixo e
depois o valor mais alto.
Foram especificados apelidos de tabelas no exemplo do slide por questes de desempenho,
e no para evitar uma possvel ambigidade.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-21
Copyright 2004, Oracle. Todos os direitos reservados.
Joins Externas
EMPLOYEES DEPARTMENTS
No h funcionrios no
departamento 190.

Retornando Registros sem Correspondncia Direta com Joins Externas


Se no atender a uma condio de join, a linha no aparecer no resultado da consulta. Por
exemplo, na condio de equijoin das tabelas EMPLOYEES e DEPARTMENTS, o ID de
departamento 190 no exibido, pois no existem funcionrios com esse ID registrado na
tabela EMPLOYEES. Em vez de conter 20 funcionrios, o conjunto de resultados conter 19
registros.
Para retornar o registro de um departamento sem funcionrios, use uma join externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-22
Copyright 2004, Oracle. Todos os direitos reservados.
Joins Internas e Externas
No padro SQL:1999, a join de duas tabelas que
retorna apenas as linhas correspondentes uma
join interna.
Uma join entre duas tabelas que retorna os
resultados da join interna, bem como as linhas no
correspondentes da tabela esquerda (ou direita),
chamada de join externa esquerda (ou direita).
Uma join entre duas tabelas que retorna os
resultados de uma join interna, bem como os
resultados de uma join esquerda e direita, uma join
externa integral.
Joins Internas e Externas
A unio de tabelas com as clusulas NATURAL JOIN, USING ou ON resulta em uma join
interna. As linhas no correspondentes no so exibidas na sada. Para retornar as linhas no
correspondentes, use uma join externa. Uma join externa retorna todas as linhas que
atendem condio de join, bem como algumas ou todas as linhas de uma tabela para as
quais nenhuma linha da outra tabela atende condio de join.
H trs tipos de joins externas:
Externa Esquerda (LEFT OUTER JOIN)
Externa Direita (RIGHT OUTER JOIN)
Externa Integral (FULL OUTER JOIN)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-23
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
LEFT OUTER JOIN

Exemplo de Join Externa Esquerda (LEFT OUTER JOIN)


Esta consulta recupera todas as linhas da tabela EMPLOYEES, que a tabela esquerda,
mesmo quando no h correspondncia na tabela DEPARTMENTS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-24
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
RIGHT OUTER JOIN

Exemplo de Join Externa Direita (RIGHT OUTER JOIN)


Esta consulta recupera todas as linhas da tabela DEPARTMENTS, que a tabela direita,
mesmo quando no h correspondncia na tabela EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-25
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT e.last_name, d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
FULL OUTER JOIN

Exemplo de Join Externa Integral (FULL OUTER JOIN)


Esta consulta recupera todas as linhas da tabela EMPLOYEES, mesmo quando no h
correspondncia na tabela DEPARTMENTS. Ela tambm recupera todas as linhas da tabela
DEPARTMENTS, mesmo quando no h correspondncia na tabela EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-26
Copyright 2004, Oracle. Todos os direitos reservados.
Produtos Cartesianos
Um produto cartesiano ser formado quando:
Uma condio de join for omitida
Uma condio de join for invlida
Todas as linhas da primeira tabela se unirem a todas
as linhas da segunda tabela
Para evitar um produto cartesiano, inclua sempre
uma condio de join vlida.
Produtos Cartesianos
Quando uma condio de join invlida ou completamente omitida, o resultado um
produto cartesiano, no qual todas as combinaes de linhas so exibidas. Todas as linhas da
primeira tabela so unidas a todas as linhas da segunda tabela.
Um produto cartesiano tende a gerar um grande nmero de linhas e o resultado raramente
til. Inclua sempre uma condio de join vlida, a menos que exista uma necessidade
especfica de combinar todas as linhas de todas as tabelas.
Os produtos cartesianos so teis em alguns testes quando necessrio gerar muitas linhas
para simular um volume razovel de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-27
Copyright 2004, Oracle. Todos os direitos reservados.
Gerando um Produto Cartesiano
Produto cartesiano:
20 x 8 = 160 linhas
EMPLOYEES (20 linhas) DEPARTMENTS (8 linhas)

Produtos Cartesianos (continuao)


Um produto cartesiano ser gerado se uma condio de join for omitida. O exemplo do slide
exibe o sobrenome e o nome do departamento dos funcionrios com base nas tabelas
EMPLOYEES e DEPARTMENTS. Como no foi especificada uma condio de join, todas as
linhas (20) da tabela EMPLOYEES so unidas a todas as linhas (8) da tabela
DEPARTMENTS, gerando 160 linhas na sada.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-28
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;
Criando Joins Cruzadas
A clusula CROSS JOIN gera o produto cruzado de
duas tabelas.
Ele tambm chamado de produto cartesiano entre
as duas tabelas.

Criando Joins Cruzadas


O exemplo do slide resulta em um produto cartesiano das tabelas EMPLOYEES e
DEPARTMENTS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-29
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a usar joins para exibir
dados de vrias tabelas por meio de:
Equijoins
No-equijoins
Joins externas
Auto-joins
Joins cruzadas
Joins naturais
Joins externas integrais (ou de dois lados)
Sumrio
H vrias maneiras de unir tabelas.
Tipos de Join
Equijoins
No-equijoins
Joins externas
Auto-joins
Joins cruzadas
Joins naturais
Joins externas integrais (ou de dois lados)
Produtos Cartesianos
Um produto cartesiano resulta na exibio de todas as combinaes de linhas. Para obter
esse resultado, omita a clusula WHERE ou especifique a clusula CROSS JOIN.
Apelidos de Tabelas
Os apelidos de tabelas aceleram o acesso ao banco de dados.
Eles podem ajudar a reduzir o cdigo SQL, preservando a memria.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-30
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 5: Viso Geral
Este exerccio aborda os seguintes tpicos:
Unio de tabelas com uma equijoin
Execuo de auto-joins e joins externas
Incluso de condies
Exerccio 5: Viso Geral
Este exerccio tem como objetivo proporcionar a voc um treinamento prtico de como
extrair dados de mais de uma tabela com joins compatveis com o padro SQL:1999.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-31
Exerccio 5
1. Crie uma consulta para o departamento de recursos humanos a fim de gerar os
endereos de todos os departamentos. Use as tabelas LOCATIONS e COUNTRIES.
Mostre o ID do local, o endereo, a cidade, o estado e o pas na sada. Use
NATURAL JOIN para gerar os resultados.
2. O departamento de recursos humanos precisa de um relatrio de todos os
funcionrios. Crie uma consulta para exibir o sobrenome, o nmero do departamento
e o nome do departamento de todos os funcionrios.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-32
Exerccio 5 (continuao)
3. O departamento de recursos humanos precisa de um relatrio dos funcionrios em
Toronto. Exiba o sobrenome, o cargo, o nmero do departamento e o nome do
departamento de todos os funcionrios que trabalham em Toronto.
4. Crie um relatrio para exibir o sobrenome e o nmero dos funcionrios, bem como o
sobrenome e o nmero dos respectivos gerentes. Atribua s colunas os labels
Employee, Emp#, Manager e Mgr#, respectivamente. Inclua a instruo SQL no
arquivo de texto lab_05_04.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-33
Exerccio 5 (continuao)
5. Modifique lab_05_04.sql para exibir todos os funcionrios, inclusive King, que
no possui gerente. Ordene os resultados pelo nmero do funcionrio. Inclua a
instruo SQL no arquivo de texto lab_05_05.sql. Execute a consulta em
lab_05_05.sql.
6. Crie um relatrio para o departamento de recursos humanos que exiba os
sobrenomes e os nmeros de departamento dos funcionrios, bem como todos os
funcionrios que trabalham no mesmo departamento como um funcionrio
especfico. Atribua um label apropriado a cada coluna. Salve o script no arquivo
lab_05_06.sql.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-34
Exerccio 5 (continuao)
7. O departamento de recursos humanos precisa de um relatrio sobre nveis de cargos
e salrios. Para se familiarizar com a tabela JOB_GRADES, primeiro mostre a
estrutura dessa tabela. Em seguida, crie uma consulta que exiba o nome, o cargo, o
nome do departamento, o salrio e o nvel de todos os funcionrios.
Se quiser tomar parte em mais um desafio, faa estes exerccios:
8. O departamento de recursos humanos deseja determinar os nomes de todos os
funcionrios admitidos aps Davies. Crie uma consulta para exibir o nome e a data
de admisso de todos os funcionrios admitidos aps Davies.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 5-35
Exerccio 5 (continuao)
9. O departamento de recursos humanos precisa obter os nomes e as datas de
admisso de todos os funcionrios admitidos antes dos respectivos gerentes,
alm dos nomes e das datas de admisso desses gerentes. Salve o script no
arquivo lab5_09.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Subconsultas
para Solucionar Consultas
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Definir subconsultas
Descrever os tipos de problemas que as
subconsultas podem solucionar
Listar os tipos de subconsultas
Criar subconsultas de uma nica linha e de
vrias linhas
Objetivos
Nesta lio, voc conhecer os recursos mais avanados da instruo SELECT. possvel
criar subconsultas na clusula WHERE de outra instruo SQL para obter valores baseados
em um valor condicional desconhecido. Esta lio aborda subconsultas de uma nica linha e
de vrias linhas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-3
Copyright 2004, Oracle. Todos os direitos reservados.
Usando uma Subconsulta
para Solucionar um Problema
Quem tem um salrio maior que o salrio de Abel?
Quais funcionrios tm um salrio maior
que o salrio de Abel?
Consulta principal:
Qual o salrio de Abel?
Subconsulta:
Usando uma Subconsulta para Solucionar um Problema
Suponha que voc queira criar uma consulta para saber quem ganha um salrio maior que o
salrio de Abel.
Para solucionar esse problema, so necessrias duas consultas: uma para saber quanto Abel
ganha e outra para saber quem ganha uma quantia maior.
Voc pode solucionar esse problema com a combinao das duas consultas, inserindo uma
na outra.
A consulta interna (ou subconsulta) retorna um valor usado pela consulta externa (ou
consulta principal). Usar uma subconsulta o mesmo que executar duas consultas em
seqncia e utilizar o resultado da primeira como o valor de pesquisa na segunda.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-4
Copyright 2004, Oracle. Todos os direitos reservados.
A subconsulta (consulta interna) executada uma
vez antes da consulta principal (consulta externa).
O resultado da subconsulta usado pela consulta
principal.
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Sintaxe da Subconsulta
Sintaxe da Subconsulta
Uma subconsulta uma instruo SELECT incorporada a uma clusula de outra instruo
SELECT. possvel criar instrues complexas a partir de instrues simples usando
subconsultas. Elas podero ser muito teis quando for necessrio selecionar linhas de uma
tabela com uma condio que dependa dos dados da prpria tabela.
possvel inserir a subconsulta em vrias clusulas SQL, inclusive nestas:
Clusula WHERE
Clusula HAVING
Clusula FROM
Na sintaxe:
operator inclui uma condio de comparao, como >, = ou IN
Observao: As condies de comparao esto includas em duas classes: operadores
de uma nica linha (>, =, >=, <, <>, <=) e de vrias linhas (IN, ANY, ALL).
Em geral, a subconsulta denominada instruo SELECT interna, sub-SELECT ou
SELECT aninhada. A subconsulta normalmente executada primeiro e o seu resultado
usado para concluir a condio da consulta principal (ou externa).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-5
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name
FROM employees
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = 'Abel');
Usando uma Subconsulta
11000
Usando uma Subconsulta
No slide, a consulta interna determina o salrio do funcionrio Abel. A consulta externa
recebe o resultado da consulta interna e o utiliza para exibir todos os funcionrios que
ganham mais que essa quantia.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-6
Copyright 2004, Oracle. Todos os direitos reservados.
Diretrizes de Uso de Subconsultas
Delimite subconsultas por parnteses.
Posicione subconsultas direita da condio de
comparao.
A clusula ORDER BY no ser necessria na
subconsulta, a menos que uma anlise Top-N seja
executada.
Use operadores de uma nica linha com
subconsultas de uma nica linha e operadores de
vrias linhas com
subconsultas de vrias linhas.
Diretrizes de Uso de Subconsultas
Uma subconsulta deve ser delimitada por parnteses.
Posicione a subconsulta direita da condio de comparao para fins de legibilidade.
No Oracle8i e em releases mais recentes, uma clusula ORDER BY pode ser usada,
alm de ser obrigatria na subconsulta para executar uma anlise Top-N.
Entretanto, antes do Oracle8i, as subconsultas no podiam conter uma clusula
ORDER BY. Apenas uma clusula ORDER BY era permitida em uma instruo
SELECT e, se fosse especificada, deveria ser a ltima clusula na instruo
SELECT principal.
Duas classes de condies de comparao so usadas em subconsultas: operadores de
uma nica linha e operadores de vrias linhas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-7
Copyright 2004, Oracle. Todos os direitos reservados.
Tipos de Subconsultas
Subconsulta de uma nica linha
Subconsulta de vrias linhas
Consulta principal
Subconsulta
retorna
ST_CLERK
ST_CLERK
SA_MAN
Consulta principal
Subconsulta
retorna
Tipos de Subconsultas
Subconsultas de uma nica linha: consultas que retornam somente uma linha da
instruo SELECT interna
Subconsultas de vrias linhas: consultas que retornam mais de uma linha da instruo
SELECT interna
Observao: H tambm subconsultas de vrias colunas, ou seja, consultas que retornam
mais de uma coluna da instruo SELECT interna. Elas so abordadas no curso Banco de
Dados Oracle 10g: Fundamentos de SQL II.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-8
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsultas de uma nica Linha
Retornam somente uma linha
Usam operadores de comparao de uma nica linha
Maior que ou igual a
>=
Menor que
<
Menor que ou igual a
<=
Igual a
=
Diferente de
<>
Maior que
>
Significado Operador
Subconsultas de uma nica Linha
Uma subconsulta de uma nica linha retorna uma linha da instruo SELECT interna. Esse
tipo de subconsulta usa um operador de uma nica linha. O slide fornece uma lista de
operadores de uma nica linha.
Exemplo
Exiba os funcionrios cujo ID de cargo igual ao do funcionrio 141:
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-9
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141)
AND salary >
(SELECT salary
FROM employees
WHERE employee_id = 143);
Executando Subconsultas de uma nica Linha
ST_CLERK
2600
Executando Subconsultas de uma nica Linha
Uma instruo SELECT pode ser considerada um bloco de consulta. O exemplo do slide
mostra os funcionrios cujo ID de cargo igual ao do funcionrio 141 e cujo salrio maior
que o do funcionrio 143.
O exemplo consiste em trs blocos de consulta: a consulta externa e duas consultas internas.
Os blocos de consulta interna so executados primeiro, produzindo os resultados
ST_CLERK e 2600, respectivamente. O bloco de consulta externa processado depois e
usa os valores retornados pelas consultas internas para concluir suas condies de pesquisa.
As duas consultas internas retornam valores nicos (ST_CLERK e 2600, respectivamente);
por isso, essa instruo SQL denominada subconsulta de uma nica linha.
Observao: As consultas internas e externas podem obter dados de tabelas distintas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-10
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees);
Usando Functions de
Grupo em uma Subconsulta
2500
Usando Functions de Grupo em uma Subconsulta
possvel exibir dados de uma consulta principal usando uma function de grupo em uma
subconsulta para retornar uma nica linha. A subconsulta delimitada por parnteses e
posicionada aps a condio de comparao.
O exemplo do slide mostra o sobrenome, o ID do cargo e o salrio de todos os funcionrios
cujo salrio igual ao salrio mnimo. A function de grupo MIN retorna um nico valor
(2500) para a consulta externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-11
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
A Clusula HAVING com Subconsultas
O servidor Oracle executa primeiro as subconsultas.
Ele retorna os resultados para a clusula HAVING da
consulta principal.
2500
A Clusula HAVING com Subconsultas
possvel usar subconsultas tanto na clusula WHERE como na clusula HAVING. O
servidor Oracle executa a subconsulta, e os resultados so retornados para a clusula
HAVING da consulta principal.
A instruo SQL do slide mostra todos os departamentos cujo salrio mnimo maior
que o do departamento 50.
Exemplo
Localize o cargo com o menor salrio mdio.
SELECT job_id, AVG(salary)
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (SELECT MIN(AVG(salary))
FROM employees
GROUP BY job_id);

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-12
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
O Que Est Errado Nesta Instruo?
ERROR at line 4:
ORA-01427: single-row subquery returns more than
one row
Operador de uma nica linha com
uma subconsulta de vrias linhas
Erros com Subconsultas
Um erro comum com subconsultas ocorre quando mais de uma linha retornada para uma
subconsulta de uma nica linha.
Na instruo SQL do slide, a subconsulta contm uma clusula GROUP BY, o que significa
que ela retornar vrias linhas, uma para cada grupo localizado. Nesse caso, os resultados da
subconsulta so 4400, 6000, 2500, 4200, 7000, 17000 e 8300.
A consulta externa recebe esses resultados e os utiliza em sua clusula WHERE. A clusula
WHERE contm um operador de igual a (=), que um operador de comparao de uma
nica linha que espera apenas um valor. Esse operador no pode aceitar mais de um valor
da subconsulta e, portanto, gera o erro.
Para corrigir esse erro, altere o operador = para IN.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-13
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Haas');
Esta Instruo Retornar Linhas?
no rows selected
A subconsulta no retorna nenhum valor.
Problemas com Subconsultas
Um problema comum com subconsultas ocorre quando nenhuma linha retornada pela
consulta interna.
Na instruo SQL do slide, a subconsulta contm uma clusula WHERE. Presumivelmente, o
objetivo localizar o funcionrio cujo nome Haas. A instruo est correta, mas no
seleciona nenhuma linha quando executada.
No h nenhum funcionrio com esse nome. Por isso, a subconsulta no retorna nenhuma
linha. A consulta externa recebe o resultado da subconsulta (nulo) e o utiliza em sua
clusula WHERE. Ela no encontra nenhum funcionrio com o ID de cargo igual a nulo e,
portanto, no retorna nenhuma linha. Se existisse um cargo com o valor nulo, a linha no
seria retornada porque a comparao de dois valores nulos resulta em um valor nulo; assim,
a condio WHERE no verdadeira.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-14
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsultas de Vrias Linhas
Retornam mais de uma linha
Usam operadores de comparao de vrias linhas
Compara o valor com todos os valores
retornados pela subconsulta
ALL
Igual a qualquer membro da lista
IN
Compara o valor com cada valor retornado
pela subconsulta
ANY
Significado Operador
Subconsultas de Vrias Linhas
As subconsultas que retornam mais de uma linha so denominadas subconsultas de vrias
linhas. Com uma subconsulta de vrias linhas, voc usa um operador de vrias linhas, em
vez de um operador de uma nica linha. O operador de vrias linhas espera um ou mais
valores:
SELECT last_name, salary, department_id
FROM employees
WHERE salary IN (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
Exemplo
Localize os funcionrios cujo salrio igual ao salrio mnimo em cada departamento.
A consulta interna executada primeiro e produz um resultado. O bloco de consulta
principal processado depois e usa os valores retornados pela consulta interna para concluir
sua condio de pesquisa. Na verdade, a consulta principal aparece para o servidor Oracle
da seguinte forma:
SELECT last_name, salary, department_id
FROM employees
WHERE salary IN (2500, 4200, 4400, 6000, 7000, 8300,
8600, 17000);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-15
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
Usando o Operador ANY
em Subconsultas de Vrias Linhas
9000, 6000, 4200

Subconsultas de Vrias Linhas (continuao)


O operador ANY (e seu sinnimo, o operador SOME) compara um valor a cada valor
retornado por uma subconsulta. O exemplo do slide mostra os funcionrios que no so
programadores de computao e cujo salrio menor que o de qualquer programador de
computao. O salrio mximo de um programador US$9.000.
<ANY significa menor que o mximo. >ANY significa maior que o mnimo. =ANY equivale a
IN.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-16
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
Usando o Operador ALL
em Subconsultas de Vrias Linhas
9000, 6000, 4200
Subconsultas de Vrias Linhas (continuao)
O operador ALL compara um valor com todos os valores retornados por uma subconsulta. O
exemplo do slide mostra os funcionrios cujo salrio menor que o salrio de todos os
funcionrios com o ID de cargo IT_PROG e cujo cargo no IT_PROG.
>ALL significa maior que o mximo e <ALL significa menor que o mnimo.
possvel usar o operador NOT com os operadores IN, ANY e ALL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-17
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM employees mgr);
no rows selected
Valores Nulos em uma Subconsulta
Retornando Valores Nulos no Conjunto Resultante de uma Subconsulta
A instruo SQL do slide tenta exibir todos os funcionrios sem subordinados.
Logicamente, essa instruo deveria ter retornado 12 linhas. No entanto, ela no retorna
nenhuma linha. Um dos valores retornados pela consulta interna um valor nulo e, por isso,
a consulta inteira no retorna nenhuma linha.
O motivo que todas as condies que comparam um valor nulo resultam em um valor
nulo. Dessa forma, sempre que houver a possibilidade de valores nulos integrarem o
conjunto de resultados de uma subconsulta, no use o operador NOT IN. Esse operador
corresponde a <> ALL.
Observe que o valor nulo como parte do conjunto de resultados de uma subconsulta no
representa um problema se voc usa o operador IN. Esse operador corresponde a =ANY. Por
exemplo, para exibir os funcionrios com subordinados, use a seguinte instruo SQL:
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id IN
(SELECT mgr.manager_id
FROM employees mgr);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-18
Retornando Valores Nulos no Conjunto Resultante de uma Subconsulta
(continuao)
Como alternativa, possvel incluir uma clusula WHERE na subconsulta para exibir todos
os funcionrios sem subordinados:
SELECT last_name FROM employees
WHERE employee_id NOT IN
(SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-19
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Sumrio
Nesta lio, voc aprendeu a:
Identificar quando uma subconsulta pode ajudar a
solucionar um problema
Criar subconsultas quando uma consulta se basear
em valores desconhecidos
Sumrio
Nesta lio, voc aprendeu a usar subconsultas. Uma subconsulta uma instruo SELECT
incorporada a uma clusula de outra instruo SQL. As subconsultas so teis quando uma
consulta se baseia em um critrio de pesquisa com valores intermedirios desconhecidos.
As subconsultas apresentam as seguintes caractersticas:
Podem passar uma linha de dados para uma instruo principal que contm um
operador de uma nica linha, como =, <>, >, >=, < ou <=
Podem passar vrias linhas de dados para uma instruo principal que contm um
operador de vrias linhas, como IN
So processadas primeiro pelo servidor Oracle. Em seguida, a clusula WHERE ou
HAVING utiliza os resultados
Podem conter functions de grupo
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-20
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 6: Viso Geral
Este exerccio aborda os seguintes tpicos:
Criao de subconsultas para consultar valores
baseados em critrios desconhecidos
Utilizao de subconsultas para descobrir os valores
existentes em um conjunto de dados, e no em outro
Exerccio 6: Viso Geral
Neste exerccio, voc criar consultas complexas com instrues SELECT aninhadas.
Perguntas Impressas
Convm criar a consulta interna primeiro para estas perguntas. Certifique-se de que ela seja
executada e gere os dados previstos antes de voc codificar a consulta externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-21
Exerccio 6
1. O departamento de recursos humanos precisa de uma consulta que solicite ao
usurio o sobrenome de um funcionrio. A consulta exibe o sobrenome e a data de
admisso de todos os funcionrios no mesmo departamento do funcionrio cujo
nome foi fornecido (excluindo esse funcionrio). Por exemplo, se o usurio informar
Zlotkey, sero exibidos todos os funcionrios que trabalham com Zlotkey
(excluindo ele prprio).
2. Crie um relatrio que exiba o nmero e o sobrenome de todos os funcionrios cujo
salrio maior que o salrio mdio. Classifique os resultados em ordem crescente de
salrio.
3. Crie uma consulta que exiba o nmero e o sobrenome de todos os funcionrios que
trabalham em um departamento com funcionrios cujos sobrenomes contm a letra
u. Inclua a instruo SQL no arquivo de texto lab_06_03.sql. Execute a
consulta.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 6-22
Exerccio 6 (continuao)
4. O departamento de recursos humanos precisa de um relatrio que exiba o
sobrenome, o nmero do departamento e o ID do cargo de todos os funcionrios
cujo ID de local do departamento 1700.
Modifique a consulta para que um ID de local seja solicitado ao usurio. Salve-a no
arquivo lab_06_04.sql.
5. Crie um relatrio para o departamento de recursos humanos que exiba o sobrenome
e o salrio de todos os funcionrios subordinados a King.
6. Crie um relatrio para o departamento de recursos humanos que exiba o nmero do
departamento, o sobrenome e o ID do cargo de todos os funcionrios no
departamento executivo.
Se tiver tempo, faa o seguinte exerccio:
7. Modifique a consulta em lab_06_03.sql para exibir o nmero, o sobrenome,
bem como o salrio de todos os funcionrios que ganham mais que o salrio mdio e
trabalham em um departamento com funcionrios cujos sobrenomes contm a letra
u. Salve novamente lab_06_03.sql como lab_06_07.sql. Execute a
instruo em lab_06_07.sql.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Usando os Operadores de Conjunto
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Descrever os operadores de conjunto
Usar um operador de conjunto para combinar vrias
consultas em uma s
Controlar a ordem das linhas retornadas
Objetivos
Nesta lio, voc aprender a criar consultas com os operadores de conjunto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-3
Copyright 2004, Oracle. Todos os direitos reservados.
Operadores de Conjunto
UNION/UNION ALL
A B A B
A B
INTERSECT
A B
MINUS
Operadores de Conjunto
Os operadores de conjunto combinam os resultados de duas ou mais consultas componentes
em um resultado. As consultas que contm operadores de conjunto so denominadas
consultas compostas.
Todos os operadores de conjunto tm a mesma precedncia. Se uma instruo SQL contiver
vrios operadores de conjunto, o servidor Oracle os avaliar da esquerda (superior) para a
direita (inferior) caso no haja parnteses especificando explicitamente outra ordem. Use
parnteses para especificar explicitamente a ordem de avaliao nas consultas que utilizam
o operador INTERSECT com outros operadores de conjunto.
Operador Retorna
UNION
Todas as linhas distintas selecionadas por qualquer uma das consultas
UNION ALL
Todas as linhas selecionadas por qualquer uma das consultas, inclusive
as linhas duplicadas
INTERSECT
Todas as linhas distintas selecionadas pelas duas consultas
MINUS
Todas as linhas distintas selecionadas pela primeira instruo SELECT
e no selecionadas na segunda instruo SELECT

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-4
Copyright 2004, Oracle. Todos os direitos reservados.
Tabelas Usadas Nesta Lio
As tabelas usadas nesta lio so:
EMPLOYEES: Fornece detalhes sobre todos os
funcionrios atuais
JOB_HISTORY: Registra os detalhes relativos s
datas inicial e final do cargo antigo, ao nmero de
identificao do cargo e ao departamento quando
um funcionrio muda de cargo
Tabelas Usadas Nesta Lio
Duas tabelas so usadas nesta lio: EMPLOYEES e JOB_HISTORY.
A tabela EMPLOYEES armazena detalhes dos funcionrios. Nos registros de recursos
humanos, essa tabela armazena um nmero de identificao exclusivo e um endereo de e-
mail para cada funcionrio. Tambm so armazenados os detalhes do nmero de
identificao de cargo, salrio e gerente do funcionrio. Alm do salrio, alguns
funcionrios recebem comisso, e essa informao tambm rastreada. A empresa organiza
as atribuies dos funcionrios em cargos. Alguns funcionrios trabalham h muito tempo
na empresa e passaram por cargos diferentes. Essas informaes so monitoradas com a
tabela JOB_HISTORY. Quando um funcionrio muda de cargo, os detalhes relativos s
datas inicial e final do cargo antigo, ao nmero de identificao do cargo e ao departamento
so registrados na tabela JOB_HISTORY.
A estrutura e os dados das tabelas EMPLOYEES e JOB_HISTORY so mostrados nas
pginas seguintes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-5
Tabelas Usadas Nesta Lio (continuao)
Houve casos na empresa de pessoas que ocuparam o mesmo cargo mais de uma vez durante
a sua permanncia nesse estabelecimento. Por exemplo, considere o funcionrio Taylor,
admitido na empresa em 24-MAR-1998. Taylor ocupou o cargo SA_REP de 24-MAR-98 a
31-DEC-98 e o cargo SA_MAN de 01-JAN-99 a 31-DEC-99. Ele voltou para o cargo
SA_REP, que o seu cargo atual.
Da mesma forma, considere o funcionrio Whalen, admitido na empresa em 17-SEP-1987.
Whalen ocupou o cargo AD_ASST de 17-SEP-87 a 17-JUN-93 e o cargo AC_ACCOUNT de
01-JUL-94 a 31-DEC-98. Ele voltou para o cargo AD_ASST, que o seu cargo atual.
DESCRIBE employees
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-6
Tabelas Usadas Nesta Lio (continuao)
SELECT employee_id, last_name, job_id, hire_date, department_id
FROM employees;
DESCRIBE job_history

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-7
Tabelas Usadas Nesta Lio (continuao)
SELECT * FROM job_history;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-8
Copyright 2004, Oracle. Todos os direitos reservados.
Operador UNION
A B
O operador UNION retorna resultados das duas
consultas aps eliminar os valores duplicados.
Operador UNION
O operador UNION retorna todas as linhas selecionadas pelas consultas. Utilize-o para
retornar todas as linhas de vrias tabelas e eliminar linhas duplicadas.
Diretrizes
O nmero de colunas e os tipos de dados das colunas selecionadas devem ser idnticos
em todas as instrues SELECT usadas na consulta. Os nomes das colunas no
precisam ser idnticos.
UNION opera em todas as colunas selecionadas.
Os valores nulos no so ignorados durante a verificao de valores duplicados.
O operador IN tem precedncia em relao ao operador UNION.
Por default, a sada classificada em ordem crescente da primeira coluna da clusula
SELECT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-9
Copyright 2004, Oracle. Todos os direitos reservados.
Usando o Operador UNION
Exiba os detalhes dos cargos atual e anterior de todos
os funcionrios. Exiba cada funcionrio apenas uma vez.
SELECT employee_id, job_id
FROM employees
UNION
SELECT employee_id, job_id
FROM job_history;

Usando o Operador UNION


O operador UNION elimina registros duplicados. Se houver registros idnticos nas tabelas
EMPLOYEES e JOB_HISTORY, eles sero exibidos apenas uma vez. Na sada mostrada no
slide, observe que o registro para o funcionrio com EMPLOYEE_ID 200 aparece duas
vezes, j que o valor em JOB_ID diferente em cada linha.
Considere o seguinte exemplo:
SELECT employee_id, job_id, department_id
FROM employees
UNION
SELECT employee_id, job_id, department_id
FROM job_history;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-10
Usando o Operador UNION (continuao)
Na sada anterior, o funcionrio 200 aparece trs vezes. Por qu? Observe os valores de
DEPARTMENT_ID relativos a esse funcionrio. O valor de DEPARTMENT_ID em uma
linha 90, em outra 10 e na terceira 90. Em funo dessas combinaes exclusivas de
IDs de cargo e IDs de departamento, cada linha relativa ao funcionrio 200 exclusiva e,
por isso, no considerada duplicada. Observe que a sada classificada em ordem
crescente da primeira coluna da clusula SELECT (nesse caso, EMPLOYEE_ID).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-11
Copyright 2004, Oracle. Todos os direitos reservados.
Operador UNION ALL
A B
O operador UNION ALL retorna resultados das duas
consultas, inclusive todos os valores duplicados.
Operador UNION ALL
Use o operador UNION ALL para retornar todas as linhas de vrias consultas.
Diretrizes
As diretrizes para UNION e UNION ALL so as mesmas, apenas com duas excees
relativas a UNION ALL:
Ao contrrio de UNION, as linhas duplicadas no so eliminadas e, por default, a sada
no classificada.
A palavra-chave DISTINCT no pode ser usada.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-12
Copyright 2004, Oracle. Todos os direitos reservados.
Usando o Operador UNION ALL
Exiba os departamentos anterior e atual de todos os
funcionrios.
SELECT employee_id, job_id, department_id
FROM employees
UNION ALL
SELECT employee_id, job_id, department_id
FROM job_history
ORDER BY employee_id;

Operador UNION ALL (continuao)


No exemplo, so selecionadas 30 linhas. A combinao das duas tabelas totaliza 30 linhas.
O operador UNION ALL no elimina linhas duplicadas. UNION retorna todas as linhas
distintas selecionadas pelas consultas. UNION ALL retorna todas as linhas selecionadas
pelas consultas, inclusive todas as duplicadas. Considere a consulta do slide, criada agora
com a clusula UNION:
SELECT employee_id, job_id,department_id
FROM employees
UNION
SELECT employee_id, job_id,department_id
FROM job_history
ORDER BY employee_id;
A consulta anterior retorna 29 linhas. Isso porque ela elimina a seguinte linha (j que ela
duplicada):
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-13
Copyright 2004, Oracle. Todos os direitos reservados.
Operador INTERSECT
A B
O operador INTERSECT retorna linhas
comuns s duas consultas.
Operador INTERSECT
Use o operador INTERSECT para retornar todas as linhas comuns a vrias consultas.
Diretrizes
O nmero de colunas e os tipos de dados das colunas selecionadas pelas instrues
SELECT nas consultas devem ser idnticos em todas as instrues SELECT usadas na
consulta. Os nomes das colunas no precisam ser idnticos.
O resultado no alterado quando invertida a ordem das tabelas de interseo.
INTERSECT no ignora valores nulos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-14
Copyright 2004, Oracle. Todos os direitos reservados.
Usando o Operador INTERSECT
Exiba os IDs de funcionrio e os IDs de cargo dos
funcionrios que, no momento, esto no mesmo cargo
que ocupavam quando foram admitidos pela empresa
(ou seja, eles mudaram de cargo, mas agora voltaram
para o cargo original).
SELECT employee_id, job_id
FROM employees
INTERSECT
SELECT employee_id, job_id
FROM job_history;
Operador INTERSECT (continuao)
No exemplo do slide, a consulta retorna apenas os registros com os mesmos valores nas
colunas selecionadas das duas tabelas.
Quais sero os resultados se voc adicionar a coluna DEPARTMENT_ID instruo
SELECT da tabela EMPLOYEES, adicionar a coluna DEPARTMENT_ID instruo
SELECT da tabela JOB_HISTORY e executar essa consulta? Os resultados podero ser
diferentes em funo da incluso de outra coluna cujos valores podem ou no ser
duplicados.
Exemplo
SELECT employee_id, job_id, department_id
FROM employees
INTERSECT
SELECT employee_id, job_id, department_id
FROM job_history;
O funcionrio 200 no est mais includo nos resultados, pois o valor de
EMPLOYEES.DEPARTMENT_ID diferente do valor de
JOB_HISTORY.DEPARTMENT_ID.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-15
Copyright 2004, Oracle. Todos os direitos reservados.
Operador MINUS
A B
O operador MINUS retorna as linhas da primeira consulta
que no esto presentes na segunda consulta.
Operador MINUS
Use o operador MINUS para exibir as linhas retornadas pela primeira consulta que no esto
presentes na segunda consulta (a primeira instruo SELECT subtrada da segunda instruo
SELECT).
Diretrizes
O nmero de colunas e os tipos de dados das colunas selecionadas pelas instrues
SELECT nas consultas devem ser idnticos em todas as instrues SELECT usadas na
consulta. Os nomes das colunas no precisam ser idnticos.
Todas as colunas da clusula WHERE devem estar presentes na clusula SELECT para
que o operador MINUS seja executado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-16
Copyright 2004, Oracle. Todos os direitos reservados.
Operador MINUS
Exiba os IDs dos funcionrios que nunca mudaram
de cargo.
SELECT employee_id,job_id
FROM employees
MINUS
SELECT employee_id,job_id
FROM job_history;

Operador MINUS (continuao)


No exemplo do slide, os IDs de funcionrio e os IDs de cargo na tabela JOB_HISTORY so
subtrados dos IDs correspondentes na tabela EMPLOYEES. O conjunto de resultados exibe
os funcionrios restantes aps a subtrao; eles so representados pelas linhas existentes na
tabela EMPLOYEES, mas que no esto presentes na tabela JOB_HISTORY. Esses registros
so relativos aos funcionrios que nunca mudaram de cargo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-17
Copyright 2004, Oracle. Todos os direitos reservados.
Diretrizes de Operadores de Conjunto
As expresses das listas SELECT devem
corresponder em nmero e tipo de dados.
possvel usar parnteses para alterar a seqncia
de execuo.
A clusula ORDER BY:
S pode aparecer no final da instruo
Aceitar o nome da coluna, os apelidos da primeira
instruo SELECT ou a notao posicional
Diretrizes de Operadores de Conjunto
As expresses nas listas de seleo das consultas devem corresponder em nmero e
tipo de dados. As consultas que usam operadores UNION, UNION ALL, INTERSECT
e MINUS na clusula WHERE devem ter o mesmo nmero e tipo das colunas da lista
SELECT. Por exemplo:
SELECT employee_id, department_id
FROM employees
WHERE (employee_id, department_id)
IN (SELECT employee_id, department_id
FROM employees
UNION
SELECT employee_id, department_id
FROM job_history);
A clusula ORDER BY:
S pode aparecer no final da instruo
Aceitar o nome da coluna, um apelido ou a notao posicional
O nome ou o apelido da coluna, se usado em uma clusula ORDER BY, dever
originar-se da primeira lista SELECT.
possvel usar operadores de conjunto em subconsultas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-18
Copyright 2004, Oracle. Todos os direitos reservados.
O Servidor Oracle e os Operadores de Conjunto
As linhas duplicadas so eliminadas
automaticamente, exceto em UNION ALL.
Os nomes das colunas da primeira consulta
aparecem no resultado.
Por default, a sada classificada em ordem
crescente, exceto em UNION ALL.
O Servidor Oracle e os Operadores de Conjunto
Quando uma consulta usa operadores de conjunto, o servidor Oracle elimina as linhas
duplicadas automaticamente, exceto no caso do operador UNION ALL. Os nomes das
colunas na sada so decididos pela lista de colunas da primeira instruo SELECT. Por
default, a sada classificada em ordem crescente da primeira coluna da clusula SELECT.
As expresses correspondentes nas listas de seleo das consultas componentes de uma
consulta composta devem coincidir em nmero e tipo de dados. Se as consultas
componentes selecionarem dados de caractere, o tipo de dados dos valores retornados ser
determinado da seguinte maneira:
Se as duas consultas selecionarem valores do tipo de dados CHAR, os valores
retornados tero esse tipo de dados.
Se uma ou as duas consultas selecionarem valores do tipo de dados VARCHAR2, os
valores retornados tero esse tipo de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-19
Copyright 2004, Oracle. Todos os direitos reservados.
Correspondncia entre Instrues SELECT
Com o operador UNION, exiba o ID de departamento, a
localizao e a data de admisso de todos os funcionrios.
SELECT department_id, TO_NUMBER(null)
location, hire_date
FROM employees
UNION
SELECT department_id, location_id, TO_DATE(null)
FROM departments;

Correspondncia entre Instrues SELECT


Como as expresses nas listas de seleo das consultas devem corresponder em nmero,
voc pode usar colunas fictcias e as functions de converso de tipos de dados para seguir
essa regra. No slide, a localizao do nome fornecida como o cabealho da coluna
fictcia. A function TO_NUMBER usada na primeira consulta para corresponder ao tipo de
dados NUMBER da coluna LOCATION_ID recuperada pela segunda consulta. Da mesma
forma, a function TO_DATE na segunda consulta usada para corresponder ao tipo de
dados DATE da coluna HIRE_DATE recuperada pela primeira consulta.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-20
Copyright 2004, Oracle. Todos os direitos reservados.
Correspondncia entre Instrues SELECT:
Exemplo
Com o operador UNION, exiba o ID de funcionrio, o ID
do cargo e o salrio de todos os funcionrios.
SELECT employee_id, job_id,salary
FROM employees
UNION
SELECT employee_id, job_id,0
FROM job_history;

Correspondncia entre Instrues SELECT: Exemplo


As tabelas EMPLOYEES e JOB_HISTORY tm vrias colunas em comum (por exemplo,
EMPLOYEE_ID, JOB_ID e DEPARTMENT_ID). Mas e se voc quiser que a consulta
exiba o ID de funcionrio, o ID de cargo e o salrio com o operador UNION, sabendo que o
salrio existe apenas na tabela EMPLOYEES?
O exemplo de cdigo do slide estabelece a correspondncia entre as colunas
EMPLOYEE_ID e JOB_ID das tabelas EMPLOYEES e JOB_HISTORY. Um valor literal 0
adicionado instruo SELECT de JOB_HISTORY para corresponder coluna numrica
SALARY na instruo SELECT de EMPLOYEES.
Nos resultados anteriores, cada linha da sada que corresponde a um registro da tabela
JOB_HISTORY contm 0 na coluna SALARY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-21
Copyright 2004, Oracle. Todos os direitos reservados.
Controlando a Ordem das Linhas
Produza uma frase em ingls usando dois operadores
UNION.
COLUMN a_dummy NOPRINT
SELECT 'sing' AS "My dream", 3 a_dummy
FROM dual
UNION
SELECT 'I''d like to teach', 1 a_dummy
FROM dual
UNION
SELECT 'the world to', 2 a_dummy
FROM dual
ORDER BY a_dummy;
Controlando a Ordem das Linhas
Por default, a sada classificada em ordem crescente na primeira coluna. Voc pode usar a
clusula ORDER BY para alterar essa classificao.
S possvel usar a clusula ORDER BY uma vez em uma consulta composta. Se usada,
essa clusula dever ser inserida no final da consulta. A clusula ORDER BY aceita o nome
da coluna ou um apelido. Sem a clusula ORDER BY, o exemplo de cdigo do slide produz
a seguinte sada na ordem alfabtica da primeira coluna:
Observao: Considere uma consulta composta em que o operador de conjunto UNION
usado mais de uma vez. Nesse caso, a clusula ORDER BY s pode usar posies em vez de
expresses explcitas.
O Comando iSQL*Plus COLUMN
possvel usar o comando iSQL*Plus COLUMN para personalizar cabealhos de colunas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-22
O Comando iSQL*Plus COLUMN (continuao)
Sintaxe:
COL[UMN] [{column|alias} [option]]
Em que OPTION :
CLE[AR]: Remove todos os formatos de coluna
HEA[DING] texto: Define o cabealho da coluna
FOR[MAT] formato: Altera a exibio da coluna usando um modelo de formato
NOPRINT | PRINT: Suprime ou exibe os dados e os cabealhos de colunas
NULL
A instruo a seguir suprime os dados e o cabealho da coluna A_DUMMY. Observe que a
primeira clusula SELECT do slide anterior cria uma coluna fictcia denominada
A_DUMMY.
COLUMN a_dummy NOPRINT
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-23
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a:
Usar UNION para retornar todas as linhas distintas
Usar UNION ALL para retornar todas as linhas,
inclusive as duplicadas
Usar INTERSECT para retornar todas as linhas
compartilhadas pelas duas consultas
Usar MINUS para retornar todas as linhas distintas
selecionadas pela primeira consulta, mas no pela
segunda
Usar ORDER BY somente no final da instruo
Sumrio
O operador UNION retorna todas as linhas selecionadas pelas consultas. Utilize-o para
retornar todas as linhas de vrias tabelas e eliminar linhas duplicadas.
Use o operador UNION ALL para retornar todas as linhas de vrias consultas. Ao
contrrio do que ocorre com o operador UNION, as linhas duplicadas no so
eliminadas e, por default, a sada no classificada.
Use o operador INTERSECT para retornar todas as linhas comuns a vrias consultas.
Use o operador MINUS para exibir as linhas retornadas pela primeira consulta que no
esto presentes na segunda consulta.
Lembre-se de usar a clusula ORDER BY somente no final da instruo composta.
Certifique-se de que as expresses correspondentes nas listas SELECT coincidem em
nmero e tipo de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-24
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 7: Viso Geral
Neste exerccio, voc usar os operadores de conjunto
para criar relatrios:
Usando o operador UNION
Usando o operador INTERSECTION
Usando o operador MINUS
Exerccio 7: Viso Geral
Neste exerccio, voc criar consultas com os operadores de conjunto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-25
Exerccio 7
1. O departamento de recursos humanos precisa de uma lista de IDs dos departamentos
que no contm o ID de cargo ST_CLERK. Use os operadores de conjunto para criar
esse relatrio.
2. O departamento de recursos humanos precisa de uma lista de pases nos quais no h
departamentos. Exiba o ID e o nome dos pases. Use os operadores de conjunto para
criar esse relatrio.
3. Produza uma lista de cargos dos departamentos 10, 50 e 20, nessa ordem. Exiba o ID
de cargo e o ID de departamento usando operadores de conjunto.
4. Crie um relatrio que liste os IDs de funcionrio e os IDs de cargo dos funcionrios
que, no momento, esto no mesmo cargo que ocupavam quando foram admitidos
pela empresa (ou seja, eles mudaram de cargo, mas agora voltaram para o cargo
original).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 7-26
Exerccio 7 (continuao)
5. O departamento de recursos humanos precisa de um relatrio com as seguintes
especificaes:
Sobrenome e ID do departamento de todos os funcionrios da tabela
EMPLOYEES, mesmo que no pertenam a um departamento
ID e nome de todos os departamentos da tabela DEPARTMENTS, mesmo que no
tenham funcionrios
Crie uma consulta composta para isso.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Manipulando Dados
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Descrever cada instruo DML (Data Manipulation
Language)
Inserir linhas em uma tabela
Atualizar linhas em uma tabela
Deletar linhas de uma tabela
Controlar transaes
Objetivo
Nesta lio, voc aprender a usar instrues DML para inserir linhas em uma tabela,
atualizar as linhas existentes em uma tabela e deletar as linhas existentes de uma tabela.
Voc tambm aprender a controlar transaes com as instrues COMMIT, SAVEPOINT e
ROLLBACK.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-3
Copyright 2004, Oracle. Todos os direitos reservados.
Data Manipulation Language
Uma instruo DML executada quando voc:
Adiciona novas linhas a uma tabela
Modifica as linhas existentes de uma tabela
Remove as linhas existentes de uma tabela
Uma transao consiste em um conjunto de
instrues DML que formam uma unidade lgica de
trabalho.
Data Manipulation Language
A DML (Data Manipulation Language) uma parte essencial de SQL. Para adicionar,
atualizar ou deletar dados no banco de dados, execute uma instruo DML. Um conjunto de
instrues DML que formam uma unidade lgica de trabalho chamado de transao.
Considere um banco de dados de uma instituio bancria. Quando um cliente do banco
transfere dinheiro da poupana para a conta corrente, a transao pode consistir em trs
operaes distintas: diminuio da poupana, aumento da conta corrente e registro da
transao no dirio de transaes. O servidor Oracle deve garantir a execuo de todas as
trs instrues SQL para manter as contas com os saldos corretos. Quando algo impedir a
execuo de uma das instrues da transao, ser necessrio desfazer as outras.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-4
Copyright 2004, Oracle. Todos os direitos reservados.
Adicionando uma Nova Linha a uma Tabela
DEPARTMENTS
Nova
linha
Insira uma nova
linha na tabela
DEPARTMENTS
Adicionando uma Nova Linha a uma Tabela
O slide mostra a adio de um novo departamento tabela DEPARTMENTS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-5
Copyright 2004, Oracle. Todos os direitos reservados.
Sintaxe da Instruo INSERT
Adicione novas linhas a uma tabela usando a
instruo INSERT:
Com esta sintaxe, apenas uma linha inserida
por vez.
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
Adicionando uma Nova Linha a uma Tabela (continuao)
possvel adicionar novas linhas a uma tabela executando a instruo INSERT.
Na sintaxe:
table o nome da tabela
column o nome da coluna da tabela a ser preenchida
value o valor correspondente da coluna
Observao: Esta instruo com a clusula VALUES adiciona somente uma linha por vez a
uma tabela.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-6
Copyright 2004, Oracle. Todos os direitos reservados.
Inserindo Novas Linhas
Insira uma nova linha com valores para cada coluna.
Liste os valores na ordem default das colunas na
tabela.
Como alternativa, liste as colunas na clusula
INSERT.
Delimite os valores de caractere e data com aspas
simples.
INSERT INTO departments(department_id,
department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
1 row created.
Adicionando uma Nova Linha a uma Tabela (continuao)
Como possvel inserir uma nova linha com valores para cada coluna, a lista de colunas
no necessria na clusula INSERT. No entanto, se voc no usar a lista de colunas, os
valores devero ser listados de acordo com a ordem default das colunas na tabela e um valor
dever ser fornecido para cada coluna.
DESCRIBE departments
Para fins de clareza, use a lista de colunas na clusula INSERT.
Delimite os valores de caractere e data com aspas simples; no recomendvel delimitar
valores numricos com aspas simples.
Os valores numricos no devem ser delimitados com aspas simples, j que poder ocorrer
converso implcita dos valores numricos designados s colunas com o tipo de dados
NUMBER se forem includas aspas simples.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-7
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);
1 row created.
INSERT INTO departments (department_id,
department_name )
VALUES (30, 'Purchasing');
1 row created.
Inserindo Linhas com Valores Nulos
Mtodo implcito: omita a coluna da lista de colunas.
Mtodo explcito: especifique a palavra-chave NULL
na clusula VALUES.
Mtodos para Inserir Valores Nulos
Certifique-se de que a coluna de destino permita valores nulos verificando o status Null?
com o comando DESCRIBE do iSQL*Plus.
O servidor Oracle impe automaticamente todos os tipos de dados, faixas de dados e
constraints de integridade de dados. Todas as colunas no listadas explicitamente obtm um
valor nulo na nova linha.
Erros comuns que podem ocorrer durante a entrada do usurio:
Valor obrigatrio ausente para uma coluna NOT NULL
Constraint de exclusividade violada por valor duplicado
Constraint de chave estrangeira violada
Constraint CHECK violada
Incompatibilidade de tipo de dados
Valor muito extenso para caber na coluna
Mtodo Descrio
Implcito Omita a coluna da
lista de colunas.
Explcito Especifique a palavra-chave NULL na lista VALUES;
especifique a string vazia ('') na lista VALUES para strings de
caracteres e datas.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-8
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 100);
1 row created.
Inserindo Valores Especiais
A function SYSDATE registra a data e o horrio atuais.
Inserindo Valores Especiais com Functions SQL
possvel usar functions para especificar valores especiais em uma tabela.
O exemplo do slide registra informaes sobre o funcionrio Popp na tabela EMPLOYEES.
So fornecidos a data e o horrio atuais na coluna HIRE_DATE. A function SYSDATE
usada para a data e o horrio atuais.
Voc tambm pode usar a function USER ao inserir linhas em uma tabela. Essa function
registra o nome do usurio atual.
Confirmando Adies Tabela
SELECT employee_id, last_name, job_id, hire_date, commission_pct
FROM employees
WHERE employee_id = 113;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-9
Copyright 2004, Oracle. Todos os direitos reservados.
Inserindo Valores de Data Especficos
Adicione um novo funcionrio.
Verifique a adio.
INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'AC_ACCOUNT', 11000, NULL, 100, 30);
1 row created.
Inserindo Valores Especficos de Data e Horrio
O formato DD-MON-YY normalmente usado para inserir um valor de data. Com esse
formato, lembre-se de que o sculo usado como default o atual. Como a data tambm
contm informaes sobre horrio, o horrio default meia-noite (00:00:00).
Se for necessrio informar uma data em um formato diferente do default (por exemplo, com
outro sculo ou um horrio especfico), use a function TO_DATE.
O exemplo do slide registra informaes sobre o funcionrio Raphealy na tabela
EMPLOYEES. Ele define a coluna HIRE_DATE como February 3, 1999. Se voc usar a
instruo a seguir em vez da mostrada no slide, o ano de admisso ser interpretado como
2099.
INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
'03-FEB-99',
'AC_ACCOUNT', 11000, NULL, 100, 30);
Se o formato RR for usado, o sistema fornecer o sculo correto automaticamente, mesmo
que no seja o atual.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-10
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT INTO departments
(department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);
Criando um Script
Use a varivel de substituio & em uma instruo
SQL para solicitar valores.
& um marcador de espao para o valor da varivel.
1 row created.
Criando um Script para Manipular Dados
possvel salvar comandos com variveis de substituio em um arquivo e executar os
comandos no arquivo. O exemplo do slide registra informaes de um departamento na
tabela DEPARTMENTS.
Ao executar o arquivo de script, voc ser solicitado a especificar informaes para as
variveis de substituio &. Os valores especificados sero aplicados instruo. Isso
permite executar vrias vezes o mesmo arquivo de script, mas fornecer um conjunto de
valores diferente a cada execuo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-11
Copyright 2004, Oracle. Todos os direitos reservados.
Copiando Linhas de Outra Tabela
Crie a instruo INSERT com uma subconsulta:
No use a clusula VALUES.
Estabelea uma correspondncia entre o nmero de
colunas na clusula INSERT e o nmero de colunas
na subconsulta.
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
4 rows created.
Copiando Linhas de Outra Tabela
possvel usar a instruo INSERT para adicionar linhas a uma tabela cujos valores so
provenientes de tabelas existentes. No lugar da clusula VALUES, use uma subconsulta.
Sintaxe
INSERT INTO table [ column (, column) ] subquery;
Na sintaxe:
table o nome da tabela
column o nome da coluna da tabela a ser preenchida
subquery a subconsulta que retorna linhas para a tabela
O nmero de colunas e os respectivos tipos de dados na lista de colunas da clusula
INSERT devem corresponder ao nmero de valores e aos respectivos tipos de dados na
subconsulta. Para criar uma cpia das linhas de uma tabela, use SELECT * na subconsulta:
INSERT INTO copy_emp
SELECT *
FROM employees;
Para obter mais informaes, consulte "SELECT" (seo "subqueries") no manual Oracle
Database SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-12
Copyright 2004, Oracle. Todos os direitos reservados.
Alterando os Dados de uma Tabela
EMPLOYEES
Atualize as linhas da tabela EMPLOYEES:
Alterando os Dados de uma Tabela
O slide mostra a alterao do nmero de departamento dos funcionrios do departamento 60
para o departamento 30.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-13
Copyright 2004, Oracle. Todos os direitos reservados.
Sintaxe da Instruo UPDATE
Modifique as linhas existentes com a instruo
UPDATE:

Atualize mais de uma linha por vez (se necessrio).


UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
Atualizando Linhas
possvel modificar linhas existentes com a instruo UPDATE.
Na sintaxe:
table o nome da tabela
column o nome da coluna da tabela a ser preenchida
value o valor correspondente ou a subconsulta da coluna
condition identifica as linhas a serem atualizadas e composta de nomes
de colunas, expresses, constantes, subconsultas e operadores
de comparao
Para confirmar a operao de atualizao, consulte a tabela para exibir as linhas atualizadas.
Para obter mais informaes, consulte "UPDATE" no manual Oracle Database SQL
Reference.
Observao: Em geral, use a chave primria para identificar uma nica linha. O uso de
outras colunas pode resultar na atualizao inesperada de vrias linhas. Por exemplo,
identificar uma nica linha da tabela EMPLOYEES por nome perigoso, pois mais de um
funcionrio pode ter o mesmo nome.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-14
Copyright 2004, Oracle. Todos os direitos reservados.
Atualizando Linhas em uma Tabela
Uma ou mais linhas especficas so modificadas
quando a clusula WHERE especificada:
Se voc omitir a clusula WHERE, todas as linhas da
tabela sero modificadas:
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
1 row updated.
UPDATE copy_emp
SET department_id = 110;
22 rows updated.
Atualizando Linhas (continuao)
A instruo UPDATE modifica linhas especficas quando a clusula WHERE especificada.
O exemplo do slide transfere o funcionrio 113 (Popp) para o departamento 70.
Se voc omitir a clusula WHERE, todas as linhas da tabela sero modificadas.
SELECT last_name, department_id
FROM copy_emp;
Observao: A tabela COPY_EMP tem os mesmos dados que a tabela EMPLOYEES.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-15
Copyright 2004, Oracle. Todos os direitos reservados.
UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 114;
1 row updated.
Atualizando Duas Colunas
com uma Subconsulta
Atualize o cargo e o salrio do funcionrio 114 para que
correspondam aos do funcionrio 205.
Atualizando Duas Colunas com uma Subconsulta
possvel atualizar diversas colunas na clusula SET de uma instruo UPDATE criando
vrias subconsultas.
Sintaxe
UPDATE table
SET column =
(SELECT column
FROM table
WHERE condition)
[ ,
column =
(SELECT column
FROM table
WHERE condition)]
[WHERE condition] ;
Observao: Se nenhuma linha for atualizada, a mensagem "0 rows updated" ser
exibida.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-16
Copyright 2004, Oracle. Todos os direitos reservados.
UPDATE copy_emp
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.
Atualizando Linhas com Base em Outra Tabela
Use subconsultas em instrues UPDATE para atualizar
as linhas de uma tabela com base nos valores de outra
tabela:
Atualizando Linhas com Base em Outra Tabela
possvel usar subconsultas em instrues UPDATE para atualizar as linhas de uma tabela.
O exemplo do slide atualiza a tabela COPY_EMP com base nos valores da tabela
EMPLOYEES. Ele altera o nmero do departamento de todos os funcionrios com o ID de
cargo do funcionrio 200 para o nmero do departamento atual do funcionrio 100.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-17
Copyright 2004, Oracle. Todos os direitos reservados.
Delete uma linha da tabela DEPARTMENTS:
Removendo uma Linha de uma Tabela
DEPARTMENTS
Removendo uma Linha de uma Tabela
O exemplo do slide remove o departamento Finance da tabela DEPARTMENTS
(pressupondo que no haja constraints definidas nessa tabela).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-18
Copyright 2004, Oracle. Todos os direitos reservados.
Instruo DELETE
possvel remover as linhas existentes de uma tabela
com a instruo DELETE:
DELETE [FROM] table
[WHERE condition];
Deletando Linhas
possvel remover linhas existentes com a instruo DELETE.
Na sintaxe:
table o nome da tabela
condition identifica as linhas a serem deletadas e composta de nomes
de colunas, expresses, constantes, subconsultas e operadores
de comparao
Observao: Se nenhuma linha for deletada, a mensagem "0 rows deleted" ser
exibida.
Para obter mais informaes, consulte "DELETE" no manual Oracle Database SQL
Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-19
Copyright 2004, Oracle. Todos os direitos reservados.
Deletando Linhas de uma Tabela
Se voc usar a clusula WHERE, as linhas especficas
sero deletadas:
Se voc omitir a clusula WHERE, todas as linhas da
tabela sero deletadas:
DELETE FROM departments
WHERE department_name = 'Finance';
1 row deleted.
DELETE FROM copy_emp;
22 rows deleted.
Deletando Linhas (continuao)
possvel deletar linhas especficas usando a clusula WHERE na instruo DELETE. O
exemplo do slide deleta o departamento Finance da tabela DEPARTMENTS. Para confirmar
a operao de deleo, exiba as linhas deletadas com a instruo SELECT.
SELECT *
FROM departments
WHERE department_name = 'Finance';
no rows selected.
Se voc omitir a clusula WHERE, todas as linhas da tabela sero deletadas. O segundo
exemplo do slide deleta todas as linhas da tabela COPY_EMP porque nenhuma clusula
WHERE foi especificada.
Exemplo
Remova as linhas identificadas na clusula WHERE.
DELETE FROM employees WHERE employee_id = 114;
1 row deleted.
DELETE FROM departments WHERE department_id IN (30, 40);
2 rows deleted.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-20
Copyright 2004, Oracle. Todos os direitos reservados.
Deletando Linhas com Base em Outra Tabela
Use subconsultas em instrues DELETE para remover
linhas de uma tabela com base nos valores de outra
tabela:
DELETE FROM employees
WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Public%');
1 row deleted.
Deletando Linhas com Base em Outra Tabela
possvel usar subconsultas para deletar linhas de uma tabela com base nos valores de
outra tabela. O exemplo do slide deleta todos os funcionrios que trabalham em um
departamento cujo nome contm a string Public. A subconsulta pesquisa a tabela
DEPARTMENTS para localizar o nmero do departamento com base no nome do
departamento que contm essa string. Em seguida, a subconsulta informa o nmero do
departamento para a consulta principal, que deleta as linhas de dados da tabela
EMPLOYEES com base nesse nmero de departamento.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-21
Copyright 2004, Oracle. Todos os direitos reservados.
Instruo TRUNCATE
Remove todas as linhas de uma tabela, esvaziando a
tabela e mantendo a estrutura intacta
uma instruo DDL (Data Definition Language), e
no DML; no pode ser desfeita facilmente
Sintaxe:
Exemplo:
TRUNCATE TABLE table_name;
TRUNCATE TABLE copy_emp;
Instruo TRUNCATE
Um mtodo mais eficiente de esvaziar uma tabela a utilizao da instruo TRUNCATE.
possvel usar essa instruo para remover rapidamente todas as linhas de uma tabela ou
cluster. A remoo de linhas com a instruo TRUNCATE mais rpida do que com a
instruo DELETE pelos seguintes motivos:
A instruo TRUNCATE uma instruo DDL (Data Definition Language) e no gera
informaes de rollback. As informaes de rollback so abordadas posteriormente
nesta lio.
Truncar uma tabela no dispara os triggers de deleo dessa tabela.
Se a tabela for me de uma constraint de integridade referencial, voc no poder
trunc-la. necessrio desativar a constraint antes de executar a instruo TRUNCATE.
A desativao de constraints abordada em uma lio posterior.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-22
Copyright 2004, Oracle. Todos os direitos reservados.
Usando uma Subconsulta
em uma Instruo INSERT
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);
1 row created.
Usando uma Subconsulta em uma Instruo INSERT
possvel usar uma subconsulta no lugar do nome da tabela na clusula INTO da instruo
INSERT.
A lista de seleo da subconsulta deve ter o mesmo nmero de colunas que a lista de
colunas da clusula VALUES. Para a execuo bem-sucedida da instruo INSERT, todas
as regras nas colunas da tabela-base devem ser cumpridas. Por exemplo, no possvel
especificar um ID de funcionrio duplicado ou omitir um valor de uma coluna no nula
obrigatria.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-23
Copyright 2004, Oracle. Todos os direitos reservados.
Usando uma Subconsulta em uma
Instruo INSERT
Verifique os resultados:
SELECT employee_id, last_name, email, hire_date,
job_id, salary, department_id
FROM employees
WHERE department_id = 50;
Usando uma Subconsulta em uma Instruo INSERT (continuao)
O exemplo mostra os resultados da subconsulta usada a fim de identificar a tabela para a
instruo INSERT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-24
Copyright 2004, Oracle. Todos os direitos reservados.
Transaes de Banco de Dados
Uma transao de banco de dados consiste em uma
das seguintes instrues:
Instrues DML que constituem uma alterao
consistente nos dados
Uma instruo DDL
Uma instruo DCL (Data Control Language)
Transaes de Banco de Dados
O servidor Oracle garante a consistncia de dados com base em transaes. As transaes
permitem mais flexibilidade e controle durante a alterao de dados e garantem a
consistncia de dados em caso de falha de processo do usurio ou falha do sistema.
As transaes consistem em instrues DML que formam uma alterao consistente dos
dados. Por exemplo, uma transferncia de fundos entre duas contas deve incluir o dbito em
uma conta e o crdito em outra conta no mesmo valor. As duas aes devero apresentar
falha ou ser bem-sucedidas; o crdito no dever ser submetido a commit sem o dbito.
Tipos de Transao
Tipo Descrio
DML (Data
Manipulation
Language)
Consiste em qualquer nmero de instrues DML que o
servidor Oracle trata como uma entidade nica ou uma
unidade de trabalho lgica
(Data Definition
Language)
Consiste em uma nica instruo DDL
DCL (Data Control
Language)
Consiste em uma nica instruo DCL

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-25
Copyright 2004, Oracle. Todos os direitos reservados.
Transaes de Banco de Dados
Comeam quando a primeira instruo SQL DML
executada
Terminam com um destes eventos:
Uma instruo COMMIT ou ROLLBACK executada.
Uma instruo DDL ou DCL executada (commit
automtico).
O usurio sai do iSQL*Plus.
Ocorre uma falha do sistema.
Quando uma Transao Comea e Termina?
Uma transao comea quando a primeira instruo DML encontrada e termina quando
uma destas aes ocorre:
Uma instruo COMMIT ou ROLLBACK executada.
Uma instruo DDL, como CREATE, executada.
Uma instruo DCL executada.
O usurio sai do iSQL*Plus.
Ocorre uma falha de mquina ou do sistema.
Aps o trmino de uma transao, a prxima instruo SQL executvel inicia
automaticamente a transao seguinte.
Uma instruo DDL ou DCL submetida a commit automaticamente e, portanto, encerra
uma transao de forma implcita.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-26
Copyright 2004, Oracle. Todos os direitos reservados.
Vantagens de Instrues COMMIT e ROLLBACK
Com as instrues COMMIT e ROLLBACK, possvel:
Garantir a consistncia de dados
Visualizar alteraes de dados antes de torn-las
permanentes
Agrupar operaes relacionadas logicamente
Vantagens de COMMIT e ROLLBACK
As instrues COMMIT e ROLLBACK permitem controlar as alteraes permanentes nos
dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-27
Copyright 2004, Oracle. Todos os direitos reservados.
Controlando Transaes
SAVEPOINT B
SAVEPOINT A
DELETE
INSERT
UPDATE
INSERT
COMMIT
Horrio
Transao
ROLLBACK at o
PONTO DE SALVAMENTO B
ROLLBACK at o
PONTO DE SALVAMENTO A
ROLLBACK
Instrues de Controle de Transao Explcita
possvel controlar a lgica de transaes com as instrues COMMIT, SAVEPOINT e
ROLLBACK.
Observao: SAVEPOINT no uma instruo SQL que segue o padro ANSI.
Instruo Descrio
COMMIT

Termina a transao atual, tornando permanentes todas as
alteraes de dados pendentes
SAVEPOINT name Marca um ponto de salvamento na transao atual
ROLLBACK ROLLBACK termina a transao atual e descarta todas as
alteraes de dados pendentes.
ROLLBACK TO
SAVEPOINT name
ROLLBACK TO SAVEPOINT efetua rollback da transao
atual para o ponto de salvamento especificado e, como
conseqncia, descarta todas as alteraes e/ou pontos de
salvamento criados aps o ponto de salvamento do rollback
atual. Se voc omitir a clusula TO SAVEPOINT, a instruo
ROLLBACK efetuar rollback de toda a transao. Como os
pontos de salvamento so lgicos, no h como listar os
pontos de salvamento criados.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-28
Copyright 2004, Oracle. Todos os direitos reservados.
Fazendo Rollback de
Alteraes at um Marcador
Crie um marcador em uma transao atual usando a
instruo SAVEPOINT.
Faa rollback at esse marcador usando a instruo
ROLLBACK TO SAVEPOINT.
UPDATE...
SAVEPOINT update_done;
Savepoint created.
INSERT...
ROLLBACK TO update_done;
Rollback complete.
Fazendo Rollback de Alteraes at um Marcador
possvel criar um marcador na transao atual usando a instruo SAVEPOINT, que
divide a transao em sees menores. Depois, possvel descartar as alteraes pendentes
at esse marcador usando a instruo ROLLBACK TO SAVEPOINT.
Se voc criar um segundo ponto de salvamento com o mesmo nome do ponto de salvamento
anterior, o ponto de salvamento anterior ser deletado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-29
Copyright 2004, Oracle. Todos os direitos reservados.
Processamento de Transao Implcita
Um commit automtico ocorre nas seguintes
circunstncias:
Uma instruo DDL executada
Uma instruo DCL executada
Sada normal do iSQL*Plus, sem a execuo implcita
de instrues COMMIT ou ROLLBACK
Um rollback automtico ocorre em decorrncia do
encerramento anormal do iSQL*Plus ou de uma falha
do sistema.
Processamento de Transao Implcita
Observao: Um terceiro comando est disponvel no iSQL*Plus. possvel alternar o
comando AUTOCOMMIT entre os estados ativado e desativado. Se ele for ativado, cada
instruo DML ser submetida a commit logo aps sua execuo. No possvel fazer
rollback das alteraes. Se ele for desativado, a instruo COMMIT ainda poder ser
executada explicitamente. Alm disso, a instruo COMMIT ser executada quando uma
instruo DDL for executada ou quando voc sair do iSQL*Plus.
Status Circunstncias
Automatic commit A instruo DDL ou DCL executada.
O iSQL*Plus foi encerrado normalmente, sem a execuo
explcita dos comandos COMMIT ou ROLLBACK.
Automatic rollback Encerramento anormal do iSQL*Plus ou falha do sistema.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-30
Processamento de Transao Implcita (continuao)
Falhas do Sistema
Quando uma transao for interrompida por uma falha do sistema, ser feito rollback
automaticamente de toda a transao. Isso impede que o erro cause alteraes indesejadas
nos dados e retorna as tabelas para o estado em que se encontravam no momento do ltimo
commit. Dessa forma, o servidor Oracle protege a integridade das tabelas.
No iSQL*Plus, para sair normalmente da sesso, voc deve clicar no boto Exit. No
SQL*Plus, para executar essa mesma ao, voc deve digitar o comando EXIT no prompt.
O fechamento da janela interpretado como uma sada anormal.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-31
Copyright 2004, Oracle. Todos os direitos reservados.
Estado dos Dados antes de
COMMIT ou ROLLBACK
possvel recuperar o estado anterior dos dados.
O usurio atual pode verificar os resultados das
operaes DML usando a instruo SELECT.
Outros usurios no podem visualizar os resultados
das instrues DML executadas pelo usurio atual.
As linhas afetadas so bloqueadas; outros usurios
no podem alterar os dados nessas linhas.
Submetendo Alteraes a Commit
Todas as alteraes de dados feitas durante a transao sero temporrias at que ela seja
submetida a commit.
O estado dos dados antes da execuo da instruo COMMIT ou ROLLBACK pode ser
descrito da seguinte forma:
As operaes de manipulao de dados afetam principalmente o buffer de banco de
dados; portanto, possvel recuperar o estado anterior dos dados.
O usurio atual pode visualizar os resultados das operaes de manipulao de dados
consultando as tabelas.
Outros usurios no podem visualizar os resultados das operaes de manipulao de
dados executadas pelo usurio atual. O servidor Oracle institui a consistncia de leitura
para garantir que cada usurio veja os dados da forma como se encontravam no ltimo
commit.
As linhas afetadas so bloqueadas; outros usurios no podem alterar os dados nessas
linhas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-32
Copyright 2004, Oracle. Todos os direitos reservados.
Estado dos Dados aps COMMIT
As alteraes de dados tornam-se permanentes no
banco de dados.
O estado anterior dos dados perdido
permanentemente.
Todos os usurios podem visualizar os resultados.
Os bloqueios nas linhas afetadas so liberados;
essas linhas esto disponveis para manipulao
por outros usurios.
Todos os pontos de salvamento so apagados.
Submetendo Alteraes a Commit (continuao)
Use a instruo COMMIT para tornar permanentes todas as alteraes pendentes. Veja o que
acontece aps uma instruo COMMIT:
As alteraes de dados so gravadas no banco de dados.
O estado anterior dos dados no est mais disponvel nas consultas SQL comuns.
Todos os usurios podem visualizar os resultados da transao.
Os bloqueios nas linhas afetadas so liberados; agora, as linhas esto disponveis para
que outros usurios efetuem novas alteraes de dados.
Todos os pontos de salvamento so apagados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-33
Copyright 2004, Oracle. Todos os direitos reservados.
COMMIT;
Commit complete.
Submetendo Dados a Commit
Efetue as alteraes:
Submeta as alteraes a commit:
DELETE FROM employees
WHERE employee_id = 99999;
1 row deleted.
INSERT INTO departments
VALUES (290, 'Corporate Tax', NULL, 1700);
1 row created.
Submetendo Alteraes a Commit (continuao)
O exemplo do slide deleta uma linha da tabela EMPLOYEES e insere uma nova linha na
tabela DEPARTMENTS. Em seguida, ele torna a alterao permanente executando a
instruo COMMIT.
Exemplo
Remova os departamentos 290 e 300 da tabela DEPARTMENTS e atualize uma linha da
tabela COPY_EMP. Torne a alterao de dados permanente.
DELETE FROM departments
WHERE department_id IN (290, 300);
1 row deleted.
UPDATE employees
SET department_id = 80
WHERE employee_id = 206;
1 row updated.
COMMIT;
Commit Complete.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-34
Copyright 2004, Oracle. Todos os direitos reservados.
Estado dos Dados aps ROLLBACK
Descarte todas as alteraes pendentes com a
instruo ROLLBACK:
As alteraes de dados so desfeitas.
O estado anterior dos dados restaurado.
Os bloqueios nas linhas afetadas so liberados.
DELETE FROM copy_emp;
22 rows deleted.
ROLLBACK ;
Rollback complete.
Fazendo Rollback de Alteraes
Descarte todas as alteraes pendentes com a instruo ROLLBACK. O resultado ser:
As alteraes de dados so desfeitas.
O estado anterior dos dados restaurado.
Os bloqueios nas linhas afetadas so liberados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-35
Copyright 2004, Oracle. Todos os direitos reservados.
Estado dos Dados aps ROLLBACK
DELETE FROM test;
25,000 rows deleted.
ROLLBACK;
Rollback complete.
DELETE FROM test WHERE id = 100;
1 row deleted.
SELECT * FROM test WHERE id = 100;
No rows selected.
COMMIT;
Commit complete.
Exemplo
Ao tentar remover um registro da tabela TEST, voc poder esvaziar a tabela
acidentalmente. possvel corrigir o erro, reexecutar a instruo correta e tornar a alterao
de dados permanente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-36
Copyright 2004, Oracle. Todos os direitos reservados.
Rollback no Nvel de Instruo
Se houver falha de uma nica instruo DML durante
a execuo, ser feito rollback somente dessa
instruo.
O servidor Oracle implementa um ponto de
salvamento implcito.
Todas as outras alteraes so retidas.
O usurio deve encerrar as transaes
explicitamente executando uma instruo COMMIT
ou ROLLBACK.
Rollback no Nvel de Instruo
Parte de uma transao poder ser descartada por um rollback implcito se for detectado um
erro de execuo de instruo. Se houver falha de uma nica instruo DML durante a
execuo de uma transao, seu efeito ser anulado por um rollback no nvel de instruo,
mas as alteraes feitas pelas instrues DML anteriores na transao no sero descartadas.
Elas podero ser submetidas a commit ou rollback explicitamente pelo usurio.
O servidor Oracle executa um commit implcito antes e depois de qualquer instruo DDL.
Portanto, mesmo que a instruo DDL no seja executada com xito, voc no poder fazer
rollback da instruo anterior porque o servidor executou um commit.
Encerre as transaes explicitamente executando uma instruo COMMIT ou ROLLBACK.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-37
Copyright 2004, Oracle. Todos os direitos reservados.
Consistncia de Leitura
A consistncia de leitura garante uma view
consistente dos dados em todos os momentos.
As alteraes feitas por um usurio no entram em
conflito com as alteraes feitas por outro usurio.
A consistncia de leitura garante que nos mesmos
dados:
Os usurios que efetuam operaes de leitura no
precisem aguardar os usurios que efetuam operaes
de gravao
Os usurios que efetuam operaes de gravao no
precisem aguardar os usurios que efetuam operaes
de leitura
Consistncia de Leitura
Os usurios acessam o banco de dados de duas maneiras:
Operaes de leitura (instruo SELECT)
Operaes de gravao (instrues INSERT, UPDATE, DELETE)
A consistncia de leitura necessria para permitir que:
Os usurios que efetuam operaes de leitura e gravao no banco de dados tenham
uma view consistente dos dados.
Os usurios que efetuam operaes de leitura no vejam dados que esto sendo
alterados.
Os usurios que efetuam operaes de gravao tenham certeza de que as alteraes no
banco de dados so feitas de maneira consistente.
As alteraes feitas por usurios que efetuam operaes de gravao no interrompam
umas s outras nem sejam conflitantes.
O objetivo da consistncia de leitura garantir que cada usurio veja os dados no estado em
que se encontravam no momento do ltimo commit, antes de ser iniciada uma operao
DML.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-38
Copyright 2004, Oracle. Todos os direitos reservados.
Implementao da Consistncia de Leitura
SELECT *
FROM userA.employees;
UPDATE employees
SET salary = 7000
WHERE last_name = 'Goyal';
Blocos
de dados
Segmentos
de undo
Dados
alterados e
inalterados
Antes da
alterao
(dados
antigos)
Usurio A
Usurio B
Imagem
com leitura
consistente
Implementao da Consistncia de Leitura
A implementao da consistncia de leitura automtica. Ela mantm uma cpia parcial do
banco de dados em segmentos de undo. A imagem com leitura consistente criada a partir
dos dados submetidos a commit da tabela e dos dados antigos que esto sendo alterados e
ainda no foram submetidos a commit do segmento de undo.
Quando ocorre uma operao de insero, atualizao ou deleo no banco de dados, o
servidor Oracle obtm uma cpia dos dados antes da sua alterao e grava essa cpia em um
segmento de undo.
Todos os usurios que esto efetuando uma operao de leitura, exceto o usurio que
executou a alterao, ainda vem o banco de dados no estado em que se encontrava antes do
incio das alteraes; eles vem um snapshot dos dados no segmento de undo.
Antes do commit das alteraes no banco de dados, somente o usurio que est modificando
os dados v o banco de dados com as alteraes. Todos os outros usurios vem o snapshot
no segmento de undo. Isso garante que os usurios leiam dados consistentes que no esto
sendo alterados no momento.
Quando uma instruo DML for submetida a commit, a alterao feita no banco de dados se
tornar visvel a todos os usurios que executarem uma instruo select aps o commmit. O
espao ocupado pelos dados antigos no arquivo de segmento de undo estar liberado para
reutilizao.
Se a transao for submetida a rollback, as alteraes sero desfeitas:
A verso mais antiga original dos dados no segmento de undo ser gravada novamente
na tabela.
Todos os usurios vero o banco de dados no estado em que se encontrava antes do
incio da transao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-39
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a usar as seguintes
instrues:
Adiciona uma nova linha tabela
INSERT
Modifica as linhas existentes da tabela
UPDATE
Remove as linhas existentes da tabela
DELETE
Torna permanentes todas as alteraes pendentes
COMMIT
Descarta todas as alteraes de dados pendentes
ROLLBACK
Usada para efetuar rollback at o marcador de
ponto de salvamento
SAVEPOINT
Descrio Function
Sumrio
Nesta lio, voc aprendeu a manipular dados no banco de dados Oracle com as instrues
INSERT, UPDATE e DELETE, bem como controlar alteraes nos dados com as instrues
COMMIT, SAVEPOINT e ROLLBACK.
O servidor Oracle garante uma view consistente dos dados em todos os momentos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-40
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 8: Viso Geral
Este exerccio aborda os seguintes tpicos:
Insero de linhas nas tabelas
Atualizao e deleo de linhas na tabela
Controle de transaes
Exerccio 8: Viso Geral
Neste exerccio, voc adicionar linhas tabela MY_EMPLOYEE, atualizar e deletar dados
na tabela e controlar as transaes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-41
Exerccio 8
O departamento de recursos humanos deseja criar instrues SQL para inserir, atualizar
e deletar dados de funcionrios. Como prottipo, use a tabela MY_EMPLOYEE antes de
fornecer as instrues ao departamento de recursos humanos.
Insira dados na tabela MY_EMPLOYEE.
1. Execute a instruo no script lab_08_01.sql para criar a tabela MY_EMPLOYEE
a ser usada no exerccio.
2. Descreva a estrutura da tabela MY_EMPLOYEE para identificar os nomes de colunas.
3. Crie uma instruo INSERT para adicionar a primeira linha de dados tabela
MY_EMPLOYEE usando estes dados de amostra. No liste as colunas na clusula
INSERT. No informe todas as linhas ainda.
4. Preencha a tabela MY_EMPLOYEE com a segunda linha de dados de amostra da lista
anterior. Desta vez, liste as colunas explicitamente na clusula INSERT.
5. Confirme a adio tabela.
ID LAST_NAME FIRST_NAME USERID SALARY
1 Patel Ralph rpatel 895
2 Dancs Betty bdancs 860
3 Biri Ben bbiri 1100
4 Newman Chad cnewman 750
5 Ropeburn Audrey aropebur 1550


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-42
Exerccio 8 (continuao)
6. Crie uma instruo insert no arquivo de script dinmico reutilizvel loademp.sql
para carregar linhas na tabela MY_EMPLOYEE. Concatene a primeira letra do
primeiro nome e os sete primeiros caracteres do sobrenome para gerar o ID do
usurio. Salve esse script no arquivo lab_08_06.sql.
7. Para preencher a tabela com as prximas duas linhas dos dados de amostra, execute
a instruo insert no script criado.
8. Confirme as adies tabela.
9. Torne as adies de dados permanentes.
Atualize e delete dados na tabela MY_EMPLOYEE.
10. Altere o sobrenome do funcionrio 3 para Drexler.
11. Altere o salrio de todos os funcionrios com salrio inferior a US$ 900 para US$
1.000.
12. Verifique as alteraes na tabela.
13. Delete Betty Dancs da tabela MY_EMPLOYEE.
14. Confirme as alteraes na tabela.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL I 8-43
Exerccio 8 (continuao)
15. Submeta todas as alteraes pendentes a commit.
Controle a transao de dados na tabela MY_EMPLOYEE.
16. Preencha a tabela com a ltima linha dos dados de amostra usando as instrues no
script criado na etapa 6. Execute as instrues no script.
17. Confirme a adio tabela.
18. Marque um ponto intermedirio no processamento da transao.
19. Esvazie a tabela inteira.
20. Confirme se a tabela est vazia.
21. Descarte a operao DELETE mais recente sem descartar a operao INSERT
anterior.
22. Confirme se a nova linha permanece intacta.
23. Torne a adio de dados permanente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.