Você está na página 1de 256

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos


de SQL I

Guia do Aluno • Volume II

D64258BP10
Edição 1.0
Outubro de 2011
D74863
Autores Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos
reservados.
Salome Clement
Isenção de Responsabilidade
Brian Pottle
Puja Singh Este documento contém informações de propriedade da Oracle Corporation e está
protegido pela legislação de direitos autorais e outras leis de propriedade intelectual,
Revisores e podendo ser copiado e impresso somente para uso individual em um curso de
treinamento Oracle. O documento não pode ser modificado nem alterado de forma
Colaboradores Técnicos alguma. Exceto em situações que constituam "uso justo" de acordo com a legislação
de direitos autorais, não será permitido utilizar, compartilhar, descarregar, carregar,
Anjulaponni Azhagulekshmi
copiar, imprimir, executar, reproduzir, publicar, licenciar, divulgar, transmitir nem
Clair Bennett distribuir este documento - total ou parcialmente - sem a expressa autorização da
Zarko Cesljas Oracle.
Yanti Chang
Gerlinde Frenzen As informações contidas neste documento estão sujeitas a alterações sem aviso
prévio. Se você encontrar algum problema no documento, envie à Oracle Corporation
Steve Friedberg ou à Oracle do Brasil Sistemas Ltda. uma descrição de tal problema por escrito.
Joel Goodman Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065 USA. A
Nancy Greenberg Oracle Corporation não garante que este documento esteja isento de erros.

Oracle Internal & Oracle Academy Use Only


Pedro Neves
Aviso de Direitos Restritos
Manish Pawar
Surya Rekha Se esta documentação for entregue / distribuída ao Governo dos Estados Unidos ou
Helen Robertson a qualquer outra parte que a licencie ou utilize em nome daquele governo, a seguinte
Lauran Serhal legenda será aplicável:
Hilda Simon U.S. GOVERNMENT RIGHTS
Tulika Srivastava The U.S. Government’s rights to use, modify, reproduce, release, perform, display, or
disclose these training materials are restricted by the terms of the applicable Oracle
Redatora license agreement and/or the applicable U.S. Government contract.

Amitha Narayan Aviso de Marca Comercial

Oracle é uma marca comercial da Oracle Corporation e/ou de suas empresas


Designer Gráfico afiliadas. Outros nomes podem ser marcas comerciais de seus respectivos
proprietários.
Rajiv Chandrabhanu

Editor
Jobi Varghese
Conteúdo

I Introdução
Objetivos da Lição I-2
Agenda de Lições I-3
Objetivos do Curso I-4
Agenda de Lições I-5
Apêndices Usados no Curso I-7

Oracle Internal & Oracle Academy Use Only


Agenda de Lições I-8
Oracle Database 11g: Áreas de Foco I-9
Oracle Database 11g I-10
Oracle Fusion Middleware I-12
Oracle Enterprise Manager Grid Control I-13
Oracle BI Publisher I-14
Agenda de Lições I-15
Sistemas de Gerenciamento de Banco de Dados Relacional e de Objeto
Relacional I-16
Armazenamento de Dados em Tipos de Mídia Diferentes I-17
Conceito de Banco de Dados Relacional I-18
Definição de um Banco de Dados Relacional I-19
Modelos de Dados I-20
Modelo de Relacionamento entre Entidades I-21
Convenções de Modelagem de Relacionamentos entre Entidades I-23
Relacionando Várias Tabelas I-25
Terminologia de Banco de Dados Relacional I-27
Agenda de Lições I-29
Usando SQL para Consultar Seu Banco de Dados I-30
Instruções SQL I-31
Ambientes de Desenvolvimento para SQL I-32
Agenda de Lições I-33
Esquema de Human Resources (HR) I-34
Tabelas Usadas no Curso I-35
Agenda de Lições I-36
Documentação do Oracle Database I-37
Recursos Adicionais I-38
Sumário I-39
Exercício I: Visão Geral I-40

iii
1 Recuperando dados por meio da instrução SQL SELECT
Objetivos 1-2
Agenda de Lições 1-3
Recursos das instruções SQL SELECT 1-4
Instrução SELECT básica 1-5
Selecionando todas as colunas 1-6
Selecionando colunas específicas 1-7
Criando instruções SQL 1-8
Padrões de cabeçalho de coluna 1-9
Agenda de Lições 1-10

Oracle Internal & Oracle Academy Use Only


Expressões aritméticas 1-11
Usando operadores aritméticos 1-12
Precedência de operadores 1-13
Definindo um valor nulo 1-14
Valores nulos em expressões aritméticas 1-15
Agenda de Lições 1-16
Definindo um apelido de coluna 1-17
Usando apelidos de coluna 1-18
Agenda de Lições 1-19
Operador de concatenação 1-20
Strings de caracteres de literal 1-21
Usando strings de caracteres de literal 1-22
Operador de cotação (q) alternativo 1-23
Linhas duplicadas 1-24
Agenda de Lições 1-25
Exibindo a Estrutura da Tabela 1-26
Usando o comando DESCRIBE 1-27
Questionário 1-28
Sumário 1-29
Exercício 1: Visão Geral 1-30

2 Restringindo e Classificando Dados


Objetivos 2-2
Agenda de Lições 2-3
Limitando linhas com uma seleção 2-4
Limitando as linhas selecionadas 2-5
Usando a cláusula WHERE 2-6
Strings de caracteres e datas 2-7
Operadores de comparação 2-8

iv
Usando operadores de comparação 2-9
Condições de intervalo usando o operador BETWEEN 2-10
Condição de associação usando o operador IN 2-11
Correspondência de padrões usando o operador LIKE 2-12
Combinando caracteres curinga 2-13
Usando as condições NULL 2-14
Definindo condições usando os operadores lógicos 2-15
Usando o operador AND 2-16
Usando o operador OR 2-17
Usando o operador NOT 2-18
Agenda de Lições 2-19

Oracle Internal & Oracle Academy Use Only


Regras de precedência 2-20
Agenda de Lições 2-22
Usando a cláusula ORDER BY 2-23
Classificando 2-24
Agenda de Lições 2-26
Variáveis de Substituição 2-27
Usando a variável de substituição E comercial simples 2-29
Valores de caracteres e datas com variáveis de substituição 2-31
Especificando nomes de coluna, expressões e texto 2-32
Usando a variável de substituição E comercial duplo 2-33
Agenda de Lições 2-34
Usando o comando DEFINE 2-35
Usando o comando VERIFY 2-36
Questionário 2-37
Sumário 2-38
Exercício 2: Visão Geral 2-39

3 Usando funções de uma única linha para Personalizar a Saída


Objetivos 3-2
Agenda de Lições 3-3
Funções SQL 3-4
Dois tipos de funções SQL 3-5
Funções de uma única linha 3-6
Agenda de Lições 3-8
Funções de caracteres 3-9
Funções de conversão de capitalização 3-11
Usando funções de conversão de capitalização 3-12
Funções de manipulação de caracteres 3-13
Usando as funções de manipulação de caracteres 3-14

v
Agenda de Lições 3-15
Funções de números 3-16
Usando a função ROUND 3-17
Usando a função TRUNC 3-18
Usando a função MOD 3-19
Agenda de Lições 3-20
Trabalhando com datas 3-21
Formato de datas RR 3-22
Usando a função SYSDATE 3-24
Aritmética com datas 3-25
Usando operadores aritméticos com datas 3-26

Oracle Internal & Oracle Academy Use Only


Agenda de Lições 3-27
Funções de manipulação de datas 3-28
Usando funções de datas 3-29
Usando as funções ROUND e TRUNC com datas 3-30
Questionário 3-31
Sumário 3-32
Exercício 3: Visão Geral 3-33

4 Usando as funções de conversão e expressões condicionais


Objetivos 4-2
Agenda de Lições 4-3
Funções de conversão 4-4
Conversão implícita de tipo de dados 4-5
Conversão explícita de tipo de dados 4-7
Agenda de Lições 4-10
Usando a função TO_CHAR com datas 4-11
Elementos do modelo de formato de data 4-12
Usando a função TO_CHAR com datas 4-16
Usando a função TO_CHAR com números 4-17
Usando as funções TO_NUMBER e TO_DATE 4-20
Usando a função TO_CHAR e TO_DATE com o formato de data RR 4-22
Agenda de Lições 4-23
Aninhando funções 4-24
Aninhando Funções: Exemplo 1 4-25
Aninhando Funções: Exemplo 2 4-26
Agenda de Lições 4-27
Funções gerais 4-28
Função NVL 4-29
Usando a função NVL 4-30

vi
Usando a função NVL2 4-31
Usando a função NULLIF 4-32
Usando a função COALESCE 4-33
Agenda de Lições 4-36
Expressões condicionais 4-37
Expressão CASE 4-38
Usando a expressão CASE 4-39
Função DECODE 4-40
Usando a função DECODE 4-41
Questionário 4-43
Sumário 4-44

Oracle Internal & Oracle Academy Use Only


Exercício 4: Visão Geral 4-45

5 Relatório de dados agregados usando funções de grupo


Objetivos 5-2
Agenda de Lições 5-3
O que são funções de grupo? 5-4
Tipos de funções de grupo 5-5
Funções de grupo: Sintaxe 5-6
Usando as funções AVG a e SUM 5-7
Usando as funções MIN e MAX 5-8
Usando a função COUNT 5-9
Usando a palavra-chave DISTINCT 5-10
Funções de grupo e valores nulos 5-11
Agenda de Lições 5-12
Criando grupos de dados 5-13
Criando grupos de dados: Sintaxe da cláusula GROUP BY 5-14
Usando a cláusula GROUP BY 5-15
Agrupando por Mais de Uma Coluna 5-17
Usando a cláusula GROUP BY em várias colunas 5-18
Consultas ilegais usando funções de grupo 5-19
Restringindo resultados de grupo 5-21
Restringindo os resultados de grupo com a cláusula HAVING 5-22
Usando a cláusula HAVING 5-23
Agenda de Lições 5-25
Aninhando funções de grupo 5-26
Questionário 5-27
Sumário 5-28
Exercício 5: Visão Geral 5-29

vii
6 Exibindo Dados de Várias Tabelas Usando Joins
Objetivos 6-2
Agenda de Lições 6-3
Obtendo Dados de Várias Tabelas 6-4
Tipos de Joins 6-5
Unindo tabelas com a sintaxe SQL:1999 6-6
Qualificando Nomes de Coluna Ambíguos 6-7
Agenda de Lições 6-8
Criando joins natural 6-9
Recuperando registros com joins natural 6-10
Criando joins com a cláusula USING 6-11

Oracle Internal & Oracle Academy Use Only


Unindo nomes de colunas 6-12
Recuperando registros com a cláusula USING 6-13
Usando apelidos de tabela com a cláusula USING 6-14
Criando Joins com a Cláusula ON 6-15
Recuperando registros com a cláusula ON 6-16
Criando three-way joins com a cláusula ON 6-17
Aplicando condições adicionais em uma join 6-18
Agenda de Lições 6-19
Unindo uma Tabela a Ela Mesma 6-20
Self-Joins usando a cláusula ON 6-21
Agenda de Lições 6-22
Não-equijoins 6-23
Recuperando Registros com Não-equijoins 6-24
Agenda de Lições 6-25
Retornando registros sem correspondência direta usando OUTER joins 6-26
Joins INNER comparadas com OUTER 6-27
LEFT OUTER JOIN 6-28
RIGHT OUTER JOIN 6-29
FULL OUTER JOIN 6-30
Agenda de Lições 6-31
Produtos Cartesianos 6-32
Gerando um Produto Cartesiano 6-33
Criando joins cruzadas 6-34
Questionário 6-35
Sumário 6-36
Exercício 6: Visão Geral 6-37

viii
7 Usando subconsultas para solucionar consultas
Objetivos 7-2
Agenda de Lições 7-3
Usando uma subconsulta para solucionar um problema 7-4
Sintaxe de subconsulta 7-5
Usando uma subconsulta 7-6
Diretrizes para usar subconsultas 7-7
Tipos de subconsultas 7-8
Agenda de Lições 7-9
Subconsultas de uma única linha 7-10
Executando as subconsultas de uma única linha 7-11

Oracle Internal & Oracle Academy Use Only


Usando funções de grupo em uma subconsulta 7-12
Cláusula HAVING com subconsultas 7-13
O que está errado com esta instrução? 7-14
Nenhuma linha retornada pela consulta interna 7-15
Agenda de Lições 7-16
Subconsultas de várias linhas 7-17
Usando o operador ANY em subconsultas de várias linhas 7-18
Usando o operador ALL em subconsultas de várias linhas 7-19
Usando o Operador EXISTS 7-20
Agenda de Lições 7-21
Valores nulos em uma subconsulta 7-22
Questionário 7-24
Sumário 7-25
Exercício 7: Visão Geral 7-26

8 Usando os operadores de conjunto


Objetivos 8-2
Agenda de Lições 8-3
Operadores de conjunto 8-4
Diretrizes do operador de conjunto 8-5
O servidor Oracle e os Operadores Set 8-6
Agenda de Lições 8-7
Tabelas usadas nesta lição 8-8
Agenda de Lições 8-12
Operador UNION 8-13
Uso do operador UNION 8-14
Operador UNION ALL 8-16
Uso do operador UNION ALL 8-17
Agenda de Lições 8-18

ix
Operador INTERSECT 8-19
Uso do operador INTERSECT 8-20
Agenda de Lições 8-21
Operador MINUS 8-22
Uso do operador MINUS 8-23
Agenda de Lições 8-24
Correspondência às instruções SELECT 8-25
Correspondência à instrução SELECT: Exemplo 8-26
Agenda de Lições 8-27
Uso da cláusula ORDER BY nas operações de conjunto 8-28
Questionário 8-29

Oracle Internal & Oracle Academy Use Only


Sumário 8-30
Exercício 8: Visão Geral 8-31

9 Manipulando dados
Objetivos 9-2
Agenda de Lições 9-3
Data Manipulation Language 9-4
Adicionando uma nova linha a uma tabela 9-5
Sintaxe da instrução INSERT 9-6
Inserindo novas linhas 9-7
Inserindo linhas com valores nulos 9-8
Inserindo valores especiais 9-9
Inserindo valores de data e horário específicos 9-10
Criando um script 9-11
Copiando linhas de outra tabela 9-12
Agenda de Lições 9-13
Alterando dados em uma tabela 9-14
Sintaxe da instrução UPDATE 9-15
Atualizando linhas em uma tabela 9-16
Atualizando duas colunas com uma subconsulta 9-17
Atualizando linhas baseadas em outra tabela 9-18
Agenda de Lições 9-19
Removendo uma linha de uma tabela 9-20
Instrução DELETE 9-21
Excluindo linhas de uma tabela 9-22
Excluindo linhas baseadas em outra tabela 9-23
Instrução TRUNCATE 9-24
Agenda de Lições 9-25
Transações do banco de dados 9-26

x
Transações do banco de dados: início e fim 9-27
Vantagens das instruções COMMIT e ROLLBACK 9-28
Instruções explícitas do controle de transações 9-29
Efetuando rollback das alterações para um marcador 9-30
Processamento implícito de transações 9-31
Estado dos dados antes do COMMIT ou ROLLBACK 9-33
Estado dos dados depois do COMMIT 9-34
Efetuando commit de dados 9-35
Estado dos dados depois do ROLLBACK 9-36
Estado dos dados depois do ROLLBACK: Exemplo 9-37
Rollback no nível da instrução 9-38

Oracle Internal & Oracle Academy Use Only


Agenda de Lições 9-39
Consistência na leitura 9-40
Implementando consistência na leitura 9-41
Agenda de Lições 9-42
Cláusula FOR UPDATE em uma instrução SELECT 9-43
Cláusula FOR UPDATE: Exemplos 9-44
Questionário 9-46
Sumário 9-47
Exercício 9: Visão Geral 9-48

10 Usando instruções DDL para criar e gerenciar tabelas


Objetivos 10-2
Agenda de Lições 10-3
Objetos do banco de dados 10-4
Regras de nomeação 10-5
Agenda de Lições 10-6
Instrução CREATE TABLE 10-7
Fazendo Referência a Tabelas de Outro Usuário 10-8
Opção DEFAULT 10-9
Criando tabelas 10-10
Agenda de Lições 10-11
Tipos de dados 10-12
Tipos de dados datetime 10-14
Agenda de Lições 10-15
Incluindo restrições 10-16
Diretrizes da restrição 10-17
Definindo restrições 10-18
Restrição NOT NULL 10-20
Restrição UNIQUE 10-21

xi
Restrição PRIMARY KEY 10-23
Restrição FOREIGN KEY 10-24
Restrição FOREIGN KEY: palavras-chave 10-26
Restrição CHECK 10-27
CREATE TABLE: Exemplo 10-28
Violando restrições 10-29
Agenda de Lições 10-31
Criando uma tabela usando uma subconsulta 10-32
Agenda de Lições 10-34
Instrução ALTER TABLE 10-35
Tabelas somente para leitura 10-36

Oracle Internal & Oracle Academy Use Only


Agenda de Lições 10-37
Eliminando uma tabela 10-38
Questionário 10-39
Sumário 10-40
Exercício 10: Visão Geral 10-41

11 Criando outros objetos de esquema


Objetivos 11-2
Agenda de Lições 11-3
Objetos do banco de dados 11-4
O que é uma view? 11-5
Vantagens das views 11-6
Views simples e views complexas 11-7
Criando uma view 11-8
Recuperando dados de uma view 11-11
Modificando uma view 11-12
Criando uma view complexa 11-13
Regras para execução das operações DML em uma view 11-14
Usando a cláusula WITH CHECK OPTION 11-17
Negando operações DML 11-18
Removendo uma view 11-20
Exercício 11: visão geral da parte 1 11-21
Agenda de Lições 11-22
Sequências 11-23
Instrução CREATE SEQUENCE: Sintaxe 11-25
Criando uma sequência 11-26
Pseudocolunas NEXTVAL e CURRVAL 11-27
Usando uma sequência 11-29
Armazenando em cache os valores da sequência 11-30

xii
Modificando uma sequência 11-31
Diretrizes para modificação de uma sequência 11-32
Agenda de Lições 11-33
Índices 11-34
Como são criados os índices? 11-36
Criando um índice 11-37
Diretrizes de criação de índice 11-38
Removendo um índice 11-39
Agenda de Lições 11-40
Sinônimos 11-41
Criando um sinônimo para um objeto 11-42

Oracle Internal & Oracle Academy Use Only


Criando e removendo sinônimos 11-43
Questionário 11-44
Sumário 11-45
Exercício 11: Visão Geral of Part 2 11-46

Apêndice A: Exercícios e Soluções

Apêndice AP: Exercícios e Soluções Adicionais

Apêndice B: Descrição das Tabelas

Apêndice C: Usando o SQL Developer


Objetivos C-2
O que É o Oracle SQL Developer? C-3
Especificações do SQL Developer C-4
Interface do SQL Developer 1.5 C-5
Criando uma Conexão de Banco de Dados C-7
Navegando por Objetos de Banco de Dados C-10
Exibindo a Estrutura da Tabela C-11
Procurando Arquivos C-12
Criando um Objeto de Esquema C-13
Criando uma Nova Tabela: Exemplo C-14
Usando a Planilha SQL C-15
Executando Instruções SQL C-18
Salvando Scripts SQL C-19
Executando Arquivos de Script Salvos: Método 1 C-20
Executando Arquivos de Script Salvos: Método 2 C-21
Formatando o Código SQL C-22
Usando Snippets C-23
Usando Snippets: Exemplo C-24

xiii
Depurando Procedures e Funções C-25
Geração de Relatórios de Banco de Dados C-26
Criando um Relatório Definido pelo Usuário C-27
Mecanismos de Pesquisa e Ferramentas Externas C-28
Definindo Preferências C-29
Redefinindo o Layout do SQL Developer C-30
Sumário C-31

Apêndice D: Usando o SQL*Plus


Objetivos D-2
Interação entre SQL e SQL*Plus D-3

Oracle Internal & Oracle Academy Use Only


Instruções SQL Versus Comandos do SQL*Plus D-4
Visão Geral do SQL*Plus D-5
Efetuando Login no SQL*Plus D-6
Displaying the Table Structure D-7
Exibindo a Estrutura da Tabela D-9
Usando LIST, n e APPEND D-11
Usando o Comando CHANGE D-12
Comandos de Arquivo do SQL*Plus D-13
Usando os Comandos SAVE e START D-14
Comando SERVEROUTPUT D-15
Usando o Comando SPOOL do SQL*Plus D-16
Usando o Comando AUTOTRACE D-17
Sumário D-18

Apêndice E: Usando o JDeveloper


Objetivos E-2
Oracle JDeveloper E-3
Database Navigator E-4
Criando Conexão E-5
Navegando por Objetos de Banco de Dados E-6
Executando Instruções SQL E-7
Criando Unidades de Programa E-8
Compilando E-9
Executando uma Unidade de Programa E-10
Eliminando uma Unidade de Programa E-11
Janela Structure E-12
Janela Editor E-13
Application Navigator E-14
Implantando Procedures Java Armazenados E-15

xiv
Publicando Java em PL/SQL E-16
Como Posso Obter Mais Informações sobre o JDeveloper 11g? E-17
Sumário E-18

Apêndice F: Sintaxe Join do Oracle


Objetivos F-2
Obtendo Dados de Várias Tabelas s F-3
Produtos Cartesianos F-4
Gerando um Produto Cartesiano F-5
Tipos de Joins Proprietárias da Oracle F-6
Unindo Tabelas Usando a Sintaxe Oracle F-7

Oracle Internal & Oracle Academy Use Only


Qualificando Nomes de Coluna Ambíguos F-8
Equijoins F-9
Recuperando Registros com Equijoins F-10
Recuperando Registros com Equijoins: Exemplo F-11
Condições Adicionais de Pesquisa Usando o Operador AND F-12
Unindo Mais de Duas Tabelas F-13
Não-equijoins F-14
Recuperando Registros com Não-equijoins F-15
Retornando Registros sem Correspondência Direta com Joins Externas F-16
Joins Externas: Sintaxe F-17
Usando Joins Externas F-18
Join Externa: Outro Exemplo F-19
Unindo uma Tabela a Ela Mesma F-20
Self-Join: Exemplo F-21
Sumário F-22
Exercício F: Visão Geral F-23

Índice

xv
xvi
Oracle Internal & Oracle Academy Use Only
Apêndice A
Exercícios e Soluções

Oracle Internal & Oracle Academy Use Only


Índice
Exercícios para a Lição............................................................................................................. 4
Exercício I-1: Introdução ................................................................................................ 5
Soluções do Exercício I-1: Introdução............................................................................ 6
Exercícios para a Lição 1........................................................................................................ 12
Exercício 1-1: Recuperando dados usando a instrução SQL SELECT ........................ 13
Soluções do Exercício 1-1: Recuperando dados usando a instrução SQL SELECT.... 17
Exercícios para a Lição 2........................................................................................................ 20
Exercício 2-1: Restringindo e Classificando Dados ..................................................... 21
Soluções do Exercício 2-1: Restringindo e Classificando Dados................................. 25
Exercícios para a Lição 3........................................................................................................ 28
Exercício 3-1: Usando Funções de uma Única Linha para Personalizar o Resultado .. 29

Oracle Internal & Oracle Academy Use Only


Soluções do Exercício 3-1: Usando Funções de uma Única Linha para Personalizar
o Resultado................................................................................................................ 33
Exercícios para a Lição 4........................................................................................................ 36
Exercício 4-1: Usando Funções de Conversão e Expressões Condicionais ................. 37
Soluções do Exercício 4-1: Usando Funções de Conversão e Expressões Condicionais
....................................................................................................................................... 40
Exercícios para a Lição 5........................................................................................................ 42
Exercício 5-1: Gerando Relatórios de Dados Agregados Usando as Funções
de Grupo.................................................................................................................... 43
Soluções do Exercício 5-1: Gerando Relatórios de Dados Agregados Usando
as Funções de Grupo................................................................................................. 46
Exercícios para a Lição 6........................................................................................................ 49
Exercício 6-1: Exibindo Dados de Várias Tabelas Usando Joins................................. 50
Soluções do Exercício 6-1: Exibindo Dados de Várias Tabelas Usando Joins ............ 53
Exercícios para a Lição 7........................................................................................................ 55
Exercício 7-1: Usando Subconsultas para Solucionar Consultas ................................. 56
Soluções do Exercício 7-1: Usando Subconsultas para Solucionar Consultas ............. 59
Exercícios para a Lição 8........................................................................................................ 61
Exercício 8-1: Usando os Operadores de Conjunto...................................................... 62
Soluções do Exercício 8-1: Usando os Operadores de Conjunto ................................. 64
Exercícios para a Lição 9........................................................................................................ 66
Exercício 9-1: Manipulando Dados .............................................................................. 67
Soluções do Exercício 9-1: Manipulando Dados.......................................................... 71
Exercícios para a Lição 10...................................................................................................... 75
Exercício 10-1: Usando Instruções DDL para Criar e Gerenciar Tabelas.................... 76
Soluções do Exercício 10-1: Usando Instruções DDL para Criar e Gerenciar Tabelas 78
Exercícios para a Lição 11...................................................................................................... 81
Exercício 11-1: Criando Outros Objetos de Esquema .................................................. 82
Soluções do Exercício 11-1: Criando Outros Objetos de Esquema.............................. 84
Exercícios do Apêndice F ....................................................................................................... 86
Exercício F-1: Sintaxe Join do Oracle .......................................................................... 87
Soluções dos Exercícios F-1: Sintaxe Join do Oracle................................................... 90

Oracle Database: Fundamentos de SQL I A - 2


Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 3


Exercícios para a Lição
Neste exercício, você executará as seguintes ações:
• Iniciar o Oracle SQL Developer e criar uma nova conexão com a conta ora1.
• Usar o Oracle SQL Developer para examinar objetos de dados na conta ora1. A
conta ora1 contém as tabelas de esquema HR.

Observe a seguinte localização para os arquivos de lab:


\home\oracle\labs\sql1\labs
Caso seja solicitado que você salve algum arquivo de lab, faça isso nesse local.

Alguns exercícios podem ser antecedidos pelas expressões “Se tiver tempo” ou “Se
quiser tomar parte em mais um desafio”. Faça esses exercícios apenas se tiver concluído
todos os outros exercícios no tempo proposto e deseja um desafio maior para suas

Oracle Internal & Oracle Academy Use Only


habilidades.

Execute os exercícios de forma lenta e precisa. Você poderá experimentar o salvamento e


a execução de arquivos de comando. Em caso de dúvidas, consulte o instrutor.

Observação
1) Todos os exercícios escritos usam o Oracle SQL Developer como ambiente de
desenvolvimento. Ainda que seja recomendável que você use o Oracle SQL
Developer, você também poderá usar o SQL*Plus disponível neste curso.
2) Talvez a sequência de linhas recuperada do banco de dados seja diferente dos
screenshots mostrados para as consultas.

Oracle Database: Fundamentos de SQL I A - 4


Exercício I-1: Introdução
Este é o primeiro de vários exercícios deste curso. Se você precisar, as soluções podem
ser encontradas no fim deste exercício. Os exercícios destinam-se a abordar a maioria dos
tópicos que são apresentados na lição correspondente.

Iniciando o Oracle SQL Developer


1) Inicie o Oracle SQL Developer com o ícone SQL Developer no desktop.
Criando uma Nova Conexão com o Banco de Dados do Oracle SQL Developer
2) Para criar uma nova conexão com o banco de dados, no Connections Navigator,
clique com o botão direito do mouse em Connections. Selecione New Connection, no
menu. A caixa de diálogo New/Select Database Connection será exibida.
3) Crie uma conexão com o banco de dados utilizando as seguintes informações:

Oracle Internal & Oracle Academy Use Only


a) Nome da Conexão: myconnection
b) Nome de usuário: ora1
c) Senha: ora1
d) Nome do host: localhost
e) Porta: 1521
f) SID: ORCL
Assegure-se de marcar a caixa de seleção Save Password.

Testando e Conectando Usando a Conexão com o Banco de Dados do Oracle SQL


Developer
4) Teste a nova conexão.
5) Se o status for Bem-sucedido, estabeleça a conexão com o banco de dados usando a
nova conexão.
Pesquisando as Tabelas no Connections Navigator
6) No Connections Navigator, visualize os objetos disponíveis no nó Tables. Verifique
se as seguintes tabelas estão presentes:
COUNTRIES
DEPARTMENTS
EMPLOYEES
JOB_GRADES
JOB_HISTORY
JOBS
LOCATIONS
REGIONS
7) Navegue pela estrutura da tabela EMPLOYEES.
8) Visualize os dados da tabela DEPARTMENTS.

Oracle Database: Fundamentos de SQL I A - 5


Soluções do Exercício I-1: Introdução
Iniciando o Oracle SQL Developer
1) Inicie o Oracle SQL Developer com o ícone SQL Developer no desktop.
a) Clique duas vezes no ícone SQL Developer no desktop.

A interface do SQL Developer será exibida.

Oracle Internal & Oracle Academy Use Only


Criando uma Nova Conexão com o Banco de Dados do Oracle SQL Developer
2) Para criar uma nova conexão com o banco de dados, no Connections Navigator,
clique com o botão direito do mouse em Connections e selecione New Connection no
menu.

Oracle Database: Fundamentos de SQL I A - 6


Soluções do Exercício I-1: Introdução (continuação)

A caixa de diálogo New/Select Database Connection será exibida.

Oracle Internal & Oracle Academy Use Only


3) Crie uma conexão com o banco de dados utilizando as seguintes informações:
a) Nome da Conexão: myconnection
b) Nome de usuário: ora1
c) Senha: ora1
d) Nome do host: localhost
e) Porta: 1521
f) SID: ORCL
Assegure-se de marcar a caixa de seleção Save Password.

Oracle Database: Fundamentos de SQL I A - 7


Soluções do Exercício I-1: Introdução (continuação)

Oracle Internal & Oracle Academy Use Only


Testando e Conectando Usando a Conexão com o Banco de Dados do Oracle SQL
Developer
4) Teste a nova conexão.

5) Se o status for Bem-sucedido, estabeleça a conexão com o banco de dados usando a


nova conexão.

Oracle Database: Fundamentos de SQL I A - 8


Soluções do Exercício I-1: Introdução (continuação)

Oracle Internal & Oracle Academy Use Only


Quando você criar uma conexão, será aberta automaticamente uma planilha SQL para
essa conexão.

Pesquisando as Tabelas no Connections Navigator


6) No Connections Navigator, visualize os objetos disponíveis no nó Tables. Verifique
se as seguintes tabelas estão presentes:
COUNTRIES
DEPARTMENTS
EMPLOYEES
JOB_GRADES
JOB_HISTORY
JOBS
LOCATIONS
REGIONS

Oracle Database: Fundamentos de SQL I A - 9


Soluções do Exercício I-1: Introdução (continuação)

Oracle Internal & Oracle Academy Use Only


7) Navegue pela estrutura da tabela EMPLOYEES.

8) Visualize os dados da tabela DEPARTMENTS.

Oracle Database: Fundamentos de SQL I A - 10


Soluções do Exercício I-1: Introdução (continuação)

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 11


Exercícios para a Lição 1
Neste exercício você escreverá consultas SELECT simples. As consultas abrangem a
maioria das cláusulas e operações SELECT que você aprendeu nesta lição.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 12


Exercício 1-1: Recuperando dados usando a instrução SQL
SELECT
Parte 1

Teste seu conhecimento:


1) A seguinte instrução SELECT é executada com êxito:
SELECT last_name, job_id, salary AS Sal
FROM employees;

Verdadeiro/Falso

Oracle Internal & Oracle Academy Use Only


2) A seguinte instrução SELECT é executada com êxito:
SELECT *
FROM job_grades;

Verdadeiro/Falso

3) Há quatro erros de codificação na instrução a seguir. Você é capaz de identificá-los?


SELECT employee_id, last_name
sal x 12 ANNUAL SALARY
FROM employees;

Parte 2
Observe os seguintes pontos antes de começar os exercícios:
• Salve todos os arquivos do lab no seguinte local:
/home/oracle/labs/sql1/labs
• Digite suas instruções SQL em uma Planilha SQL. Para salvar um script no SQL
Developer, verifique se a planilha SQL está ativa e, no menu File, selecione Save
As para salvar a instrução SQL como um script
lab_<lessonno>_<stepno>.sql. Quando você estiver modificando um script
existente, assegure-se de usar a opção Save As para salvá-lo com um nome de
arquivo diferente.
• Para executar a consulta, clique no ícone Execute Statement da planilha SQL.
Alternativamente, você pode pressionar [F9]. Para instruções DML e DDL, use o
ícone Run Script ou pressione [F5].
• Após a execução da consulta, assegure-se de não inserir a próxima consulta na
mesma planilha. Abra uma nova planilha.

Oracle Database: Fundamentos de SQL I A - 13


Exercício 1-1: Recuperando dados usando a instrução SQL
SELECT (continuação)
Você foi contratado como programador SQL da Acme Corporation. Sua primeira tarefa é
criar alguns relatórios com base nos dados das tabelas de recursos humanos.
4) Sua primeira tarefa é determinar a estrutura da tabela DEPARTMENTS e seu conteúdo.

Oracle Internal & Oracle Academy Use Only


5) Determine a estrutura da tabela EMPLOYEES.

O departamento de RH precisa de uma consulta para exibir os sobrenomes, os IDs de


cargo, a data de contratação e os IDs de todos os funcionários, com o ID de
funcionário sendo exibida primeiro. Forneça um apelido STARTDATE para a coluna
HIRE_DATE. Salve sua instrução SQL em um arquivo nomeado como
lab_01_05.sql, assim, você poderá enviá-lo para o departamento de RH.
6) Teste a consulta no arquivo lab_01_05.sql para verificar se ela é executada
corretamente.
Observação: após a execução da consulta, assegure-se de não inserir sua próxima
consulta na mesma planilha. Abra uma nova planilha.

Oracle Database: Fundamentos de SQL I A - 14


Exercício 1-1: Recuperando dados usando a instrução SQL
SELECT (continuação)

7) O departamento de RH deseja que uma consulta exiba todos os IDs de cargo

Oracle Internal & Oracle Academy Use Only


exclusivos a partir da tabela EMPLOYEES.

Parte 3
Se você tiver tempo, faça os seguintes exercícios:
8) O departamento de RH precisa de cabeçalhos de colunas mais descritivos para o
relatório sobre os funcionários. Copie a instrução do lab_01_05.sql para uma nova
planilha SQL. Nomeie os cabeçalhos de coluna Emp #, Employee, Job e Hire
Date, respectivamente. Execute a consulta novamente.

Oracle Database: Fundamentos de SQL I A - 15


Exercício 1-1: Recuperando dados usando a instrução SQL
SELECT (continuação)

9) O departamento de RH solicitou um relatório com todos os funcionários e seus IDs de


cargo. Exiba o sobrenome concatenado com o ID de cargo (separado por uma vírgula
e espaço) e nomeie a coluna como Employee e Title.

Oracle Internal & Oracle Academy Use Only


Se quiser um desafio adicional, faça o seguinte exercício:


10) Para se familiarizar com os dados da tabela EMPLOYEES, crie uma consulta para
exibir todos os dados dessa tabela. Separe cada saída de coluna com uma vírgula.
Nomeie o título da coluna como THE_OUTPUT.

Oracle Database: Fundamentos de SQL I A - 16


Soluções do Exercício 1-1: Recuperando dados usando a
instrução SQL SELECT
Parte 1

Teste seu conhecimento:


1) A seguinte instrução SELECT é executada com êxito:
SELECT last_name, job_id, salary AS Sal
FROM employees;

Verdadeiro/Falso.

Oracle Internal & Oracle Academy Use Only


2) A seguinte instrução SELECT é executada com êxito:
SELECT *
FROM job_grades;

Verdadeiro/Falso.

3) Há quatro erros de codificação na instrução a seguir. Você é capaz de identificá-los?


SELECT employee_id, last_name
sal x 12 ANNUAL SALARY
FROM employees;

ƒ A tabela EMPLOYEES não contém uma coluna com o nome sal. O nome da
coluna é SALARY.

ƒ O operador de multiplicação é *, e não x, como mostrado na linha 2.

ƒ O apelido ANNUAL SALARY não pode conter espaços. O apelido deve ser
escrito da forma ANNUAL_SALARY ou estar dentro de aspas duplas.

ƒ Falta uma vírgula após a coluna LAST_NAME.


Parte 2
Você foi contratado como programador SQL da Acme Corporation. Sua primeira tarefa é
criar alguns relatórios com base nos dados das tabelas de recursos humanos.
4) Sua primeira tarefa é determinar a estrutura da tabela DEPARTMENTS e seu conteúdo.

a. Para determinar a estrutura da tabela DEPARTMENTS:


DESCRIBE departments

Oracle Database: Fundamentos de SQL I A - 17


Soluções do Exercício 1-1: Recuperando dados usando a
instrução SQL SELECT (continuação)
b. Para visualizar os dados contidos na tabela DEPARTMENTS:
SELECT *
FROM departments;

5) Determine a estrutura da tabela EMPLOYEES.


DESCRIBE employees

O departamento de RH precisa de uma consulta para exibir os sobrenomes, os IDs de


cargo, a data de contratação e os IDs de todos os funcionários, com o ID de
funcionário sendo exibida primeiro. Forneça um apelido STARTDATE para a coluna
HIRE_DATE. Salve sua instrução SQL em um arquivo nomeado como

Oracle Internal & Oracle Academy Use Only


lab_01_05.sql, assim, você poderá enviá-lo para o departamento de RH.
SELECT employee_id, last_name, job_id, hire_date StartDate
FROM employees;

6) Teste a consulta no arquivo lab_01_05.sql para verificar se ela é executada


corretamente.
SELECT employee_id, last_name, job_id, hire_date StartDate
FROM employees;

7) O departamento de RH deseja que uma consulta exiba todos os IDs de cargo


exclusivos a partir da tabela EMPLOYEES.
SELECT DISTINCT job_id
FROM employees;

Parte 3
Se você tiver tempo, faça os seguintes exercícios:
8) O departamento de RH precisa de cabeçalhos de colunas mais descritivos para o
relatório sobre os funcionários. Copie a instrução do lab_01_05.sql para uma nova
planilha SQL. Nomeie os cabeçalhos de coluna Emp #, Employee, Job e Hire
Date, respectivamente. Execute a consulta novamente.
SELECT employee_id "Emp #", last_name "Employee",
job_id "Job", hire_date "Hire Date"
FROM employees;

9) O departamento de RH solicitou um relatório com todos os funcionários e seus IDs de


cargo. Exiba o sobrenome concatenado com o ID de cargo (separado por uma vírgula
e espaço) e nomeie a coluna como Employee e Title.
SELECT last_name||', '||job_id "Employee and Title"
FROM employees;

Oracle Database: Fundamentos de SQL I A - 18


Soluções do Exercício 1-1: Recuperando dados usando a
instrução SQL SELECT (continuação)

Se quiser um desafio adicional, faça o seguinte exercício:


10) Para se familiarizar com os dados da tabela EMPLOYEES, crie uma consulta para
exibir todos os dados dessa tabela. Separe cada saída de coluna com uma vírgula.
Nomeie o título da coluna como THE_OUTPUT.
SELECT employee_id || ',' || first_name || ',' || last_name
|| ',' || email || ',' || phone_number || ','|| job_id
|| ',' || manager_id || ',' || hire_date || ','
|| salary || ',' || commission_pct || ',' ||

Oracle Internal & Oracle Academy Use Only


department_id
THE_OUTPUT
FROM employees;

Oracle Database: Fundamentos de SQL I A - 19


Exercícios para a Lição 2
Neste exercício, você criará mais relatórios, incluindo instruções que usam a cláusula
WHERE e a cláusula ORDER BY. Você tornará as instruções SQL mais reutilizáveis e
genéricas, incluindo a substituição do E comercial.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 20


Exercício 2-1: Restringindo e Classificando Dados
O departamento de RH precisa de seu auxílio para a criação de algumas consultas.
1) Por questões de orçamento, o departamento de RH precisa de um relatório que exiba
o sobrenome e o salário dos funcionário que recebem mais de US$ 12.000. Salve sua
instrução SQL em um arquivo denominado lab_02_01.sql. Execute a consulta.

Oracle Internal & Oracle Academy Use Only


2) Abra uma nova Planilha SQL. Crie um relatório que exiba o sobrenome e o número
de departamento para o número de funcionário 176. Execute a consulta.

3) O departamento de RH precisa localizar funcionários com salários altos e baixos.


Modifique o arquivo lab_02_01.sql para exibir o sobrenome e o salário de
qualquer funcionário cujo salário esteja fora do intervalo de US$ 5.000 a US$ 12.000.
Salve sua instrução SQL como lab_02_03.sql.

4) Crie um relatório para exibir os sobrenomes, os IDs de cargo e a data de contratação


dos funcionários com os sobrenomes Matos e Taylor. Organize a consulta na ordem
crescente pela data de admissão.

Oracle Database: Fundamentos de SQL I A - 21


Exercício 2-1: Restringindo e Classificando Dados (continuação)
5) Mostre os sobrenomes e os IDs de departamento de todos os funcionários dos
departamentos 20 ou 50 em ordem alfabética crescente por nome.

Oracle Internal & Oracle Academy Use Only


6) Modifique lab_02_03.sql para exibir o sobrenome e o salário dos funcionários
que ganham entre US$ 5.000 e US$ 12.000 e estão no departamento 20 ou 50.
Atribua às colunas os labels Employee e Monthly Salary, respectivamente. Salve
o arquivo lab_02_03.sql como lab_02_06.sql. Execute a instrução no
lab_02_06.sql.

7) O departamento de RH precisa de um relatório mostrando os sobrenomes e a data de


contratação de todos os funcionários que foram contratados em 1994.

8) Crie um relatório para exibir os sobrenomes e os cargos de todos os funcionários que


não têm um gerente.

9) Crie um relatório para exibir o sobrenome, o salário e a comissão de todos os


funcionários que ganham comissão. Classifique os dados na ordem descendente de
salário e comissões.
Use a posição numérica da coluna na cláusula ORDER BY.

Oracle Database: Fundamentos de SQL I A - 22


Exercício 2-1: Restringindo e Classificando Dados (continuação)

10) Os membros do departamento de RH desejam ter mais flexibilidade com as consultas


que você está criando. Eles gostariam de um relatório que exibisse o sobrenome e o
salário dos funcionários que recebem mais que um valor especificado pelo usuário
após uma solicitação. Salve essa consulta em um arquivo denominado
lab_02_10.sql. Se você informar 12000 quando a quantia for solicitada, o
relatório exibirá estes resultados:

Oracle Internal & Oracle Academy Use Only


11) O departamento de RH quer executar relatórios com base em um gerente. Crie uma
consulta que solicite ao usuário um ID de gerente e gere o ID dos funcionários, os
sobrenomes, os salários e o departamento dos funcionários desse gerente. O
departamento de RH deseja classificar o relatório em uma coluna selecionada. Você
pode testar os dados com os seguintes valores:
manager_id = 103, classificado por last_name:

manager_id = 201, classificado por salário:

manager_id = 124, classificado por employee_id:

Se você tiver tempo, faça os seguintes exercícios:


12) Mostre todos os sobrenomes dos funcionários cuja terceira letra do nome é “a”.

Oracle Database: Fundamentos de SQL I A - 23


Exercício 2-1: Restringindo e Classificando Dados (continuação)

13) Mostre os sobrenomes de todos os funcionários que têm as letras “a” e “e” no
sobrenome.

Oracle Internal & Oracle Academy Use Only


Se desejar um desafio adicional, faça os seguintes exercícios:
14) Exiba o sobrenome, o cargo e o salário de todos os funcionários cujos cargos sejam
de representante de vendas ou de auxiliar de estoque e cujos salários sejam diferentes
de US$ 2.500, US$ 3.500 ou US$ 7.000.

15) Modifique lab_02_06.sql para exibir os sobrenomes, os salários e as comissões de


todos os funcionários que ganham uma comissão de 20%. Salve o arquivo
lab_02_06.sql como lab_02_15.sql. Execute novamente a instrução no
arquivo lab_02_15.sql.

Oracle Database: Fundamentos de SQL I A - 24


Soluções do Exercício 2-1: Restringindo e Classificando Dados
O departamento de RH precisa de seu auxílio para a criação de algumas consultas.
1) Por questões de orçamento, o departamento de RH precisa de um relatório que exiba
o sobrenome e o salário dos funcionários que recebem mais de US$ 12.000. Salve sua
instrução SQL em um arquivo denominado lab_02_01.sql. Execute a consulta.
SELECT last_name, salary
FROM employees
WHERE salary > 12000;

2) Abra uma nova Planilha SQL. Crie um relatório que mostre o sobrenome e o número
de departamento do funcionário de número 176.
SELECT last_name, department_id

Oracle Internal & Oracle Academy Use Only


FROM employees
WHERE employee_id = 176;

3) O departamento de RH precisa localizar funcionários com salários altos e baixos.


Modifique o arquivo lab_02_01.sql para exibir o sobrenome e o salário de todos
os funcionários cujo salário esteja fora do intervalo de US$ 5.000 a US$ 12.000.
Salve sua instrução SQL como lab_02_03.sql.
SELECT last_name, salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;

4) Crie um relatório para exibir os sobrenomes, os IDs de cargo e a data de contratação


dos funcionários com os sobrenomes Matos e Taylor. Organize a consulta em ordem
crescente por data de contratação.
SELECT last_name, job_id, hire_date
FROM employees
WHERE last_name IN ('Matos', 'Taylor')
ORDER BY hire_date;
5) Mostre os sobrenomes e os IDs de departamento de todos os funcionários dos
departamentos 20 ou 50 em ordem alfabética crescente por nome.
SELECT last_name, department_id
FROM employees
WHERE department_id IN (20, 50)
ORDER BY last_name ASC;

6) Modifique lab_02_03.sql para listar os sobrenomes e os salários dos funcionários


que ganham entre US$ 5.000,00 e US$ 12.000,00 e estão no departamento 20 ou 50.
Nomeie as colunas como Employee e Monthly Salary, respectivamente. Salve o
arquivo lab_02_03.sql como lab_02_06.sql. Execute a instrução no
lab_02_06.sql.
SELECT last_name "Employee", salary "Monthly Salary"
FROM employees
WHERE salary BETWEEN 5000 AND 12000

Oracle Database: Fundamentos de SQL I A - 25


Soluções do Exercício 2-1: Restringindo e Classificando Dados
(continuação)
AND department_id IN (20, 50);

7) O departamento de RH precisa de um relatório mostrando os sobrenomes e a data de


contratação de todos os funcionários que foram contratados em 1994.
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '%94';

8) Crie um relatório para exibir os sobrenomes e os cargos de todos os funcionários que


não têm um gerente.
SELECT last_name, job_id
FROM employees

Oracle Internal & Oracle Academy Use Only


WHERE manager_id IS NULL;

9) Crie um relatório para exibir os sobrenomes, os salários e as comissões de todos os


funcionários que ganham comissões. Classifique os dados em ordem decrescente de
salários e comissões. Use a posição numérica da coluna na cláusula ORDER BY.
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY 2 DESC, 3 DESC;

10) Os membros do departamento de RH desejam ter mais flexibilidade com as consultas


que você está criando. Eles gostariam de um relatório que exibisse o sobrenome e o
salário dos funcionários que recebem mais que um valor especificado pelo usuário
após uma solicitação. (Você pode usar a consulta criada no exercício 1 modificá-la.)
Salve essa consulta em um arquivo denominado lab_02_10.sql.
SELECT last_name, salary
FROM employees
WHERE salary > &sal_amt;

Digite 12000 quando for solicitado a informar um valor em uma caixa de diálogo.
Clique em OK.

Oracle Database: Fundamentos de SQL I A - 26


Soluções do Exercício 2-1: Restringindo e Classificando Dados
(continuação)
11) O departamento de RH quer executar relatórios com base em um gerente. Crie uma
consulta que solicite ao usuário um ID de gerente e gere o ID dos funcionários, os
sobrenomes, os salários e o departamento dos funcionários desse gerente. O
departamento de RH deseja classificar o relatório em uma coluna selecionada. Você
pode testar os dados com os seguintes valores:
manager _id = 103, sorted by last_name
manager_id = 201, sorted by salary
manager_id = 124, sorted by employee_id
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE manager_id = &mgr_num
ORDER BY &order_col;

Oracle Internal & Oracle Academy Use Only


Se tiver tempo, faça os seguintes exercícios:
12) Mostre todos os sobrenomes dos funcionários cuja terceira letra do nome é “a”.
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
13) Mostre os sobrenomes de todos os funcionários que têm as letras “a” e “e” no
sobrenome.
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%'
AND last_name LIKE '%e%';

Se desejar um desafio adicional, faça os seguintes exercícios:


14) Mostre os sobrenomes, cargos e salários de todos os funcionários que ocupam o cargo
de representante de vendas ou caixa de estoque e cujos salários não equivalem a US$
2.500,00, US$ 3.500,00 ou US$ 7.000,00.
SELECT last_name, job_id, salary
FROM employees
WHERE job_id IN ('SA_REP', 'ST_CLERK')
AND salary NOT IN (2500, 3500, 7000);

15) Modifique lab_02_06.sql para exibir os sobrenomes, os salários e as comissões


de todos os funcionários que ganham uma comissão de 20%. Salve o arquivo
lab_02_06.sql como lab_02_15.sql. Execute novamente a instrução no
arquivo lab_02_15.sql.
SELECT last_name "Employee", salary "Monthly Salary",
commission_pct
FROM employees
WHERE commission_pct = .20;

Oracle Database: Fundamentos de SQL I A - 27


Exercícios para a Lição 3
Este exercício fornece uma série de exercícios que usam funções diferentes disponíveis
para tipos de dados de caracteres, números e datas.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 28


Exercício 3-1: Usando Funções de uma Única Linha para
Personalizar o Resultado
1) Crie uma consulta para exibir a data do sistema. A coluna deve ter o nome Date.
Observação:Se o banco de dados estiver localizado remotamente em outro fuso
horário, o resultado será a data do sistema operacional onde o banco de dados reside.

2) O departamento de RH precisa de um relatório mostrando o número dos funcionários,


o sobrenome, o salário e o salário acrescido de 15,5% (expresso como um número
inteiro) de cada funcionário. Rotule a coluna como New Salary. Salve sua instrução
SQL em um arquivo nomeado como lab_03_02.sql.

Oracle Internal & Oracle Academy Use Only


3) Execute sua consulta no arquivo lab_03_02.sql.

4) Modifique sua consulta lab_03_02.sql para adicionar uma coluna que subtraia o
antigo salário do novo salário. Nomeie a coluna Increase. Salve o conteúdo do
arquivo como lab_03_04.sql. Execute a consulta revisada.

Oracle Database: Fundamentos de SQL I A - 29


Exercício 3-1: Usando Funções de uma Única Linha para
Personalizar o Resultado (continuação)
5) Crie uma consulta que mostre os sobrenomes (com a primeira letra em maiúscula e
todas as demais em minúscula) e o comprimento dos sobrenomes de todos os
funcionários que tenham nomes que começam com as letras “J”, “A” ou “M”.Dê um
nome apropriado a cada coluna. Classifique os resultados pelos sobrenomes dos
funcionários.

Crie novamente a consulta de forma que o usuário seja solicitado a inserir a letra que
o sobrenome começa. Por exemplo, se o usuário digitar "H" (em letra maiúscula)

Oracle Internal & Oracle Academy Use Only


quando for solicitado a digitar uma letra, o resultado deverá mostrar todos os
funcionários que têm sobrenomes que começam com a letra “H”.

Modifique a consulta para que o resultado não seja afetado pela diferenciação de
maiúsculas e minúsculas. A letra inserida deve ser colocada em maiúsculo antes de
ser processada pela consulta SELECT.

6) O departamento de RH quer saber o tempo de serviço de cada funcionário. Para cada


funcionário, exiba o sobrenome e calcule o número de meses entre hoje e a data em
que o funcionário foi admitido. Nomeie a coluna como MONTHS_WORKED. Ordene os
resultados pelo número de meses empregado. Arredonde o número de meses para o
número inteiro mais próximo.
Observação: como esta consulta depende da data em que foi executada, os valores da
coluna MONTHS_WORKED serão diferentes para você.

Oracle Database: Fundamentos de SQL I A - 30


Exercício 3-1: Usando Funções de uma Única Linha para
Personalizar o Resultado (continuação)

Oracle Internal & Oracle Academy Use Only


Se você tiver tempo, faça os seguintes exercícios:
7) Crie uma consulta para exibir os sobrenomes e os salários de todos os funcionários.
Formate o salário para ter 15 caracteres, preenchido à esquerda com o símbolo US$.
Nomeie a coluna como SALARY.

8) Crie uma consulta mostrando os primeiro oito caracteres dos sobrenomes dos
funcionários e indicando o valor dos seus respectivos salários com asteriscos. Cada
asterisco significa mil dólares. Classifique os dados na ordem descendente do salário.
A coluna deve receber o nome EMPLOYEES_AND_THEIR_SALARIES.

Oracle Database: Fundamentos de SQL I A - 31


Exercício 3-1: Usando Funções de uma Única Linha para
Personalizar o Resultado (continuação)
9) Crie uma consulta para exibir os sobrenomes e o número de semanas de serviço de
todos os funcionários do departamento 90. A coluna com o número de semanas deve
receber o nome TENURE. Trunque o valor do número de semanas para 0 casas
decimais. Mostre os registros de tempo de serviço dos funcionários em ordem
decrescente.
Observação: o valor TENURE será diferente pois dependerá da data em que você
executar a consulta.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 32


Soluções do Exercício 3-1: Usando Funções de uma Única Linha
para Personalizar o Resultado
1) Crie uma consulta para exibir a data do sistema. A coluna deve ter o nome Date.
Observação:Se o banco de dados estiver localizado remotamente em outro fuso
horário, o resultado será a data do sistema operacional onde o banco de dados reside.
SELECT sysdate "Date"
FROM dual;

2) O departamento de RH precisa de um relatório mostrando o número dos funcionários,


o sobrenome, o salário e o salário acrescido de 15,5% (expresso como um número
inteiro) de cada funcionário. Nomeie a coluna New Salary. Salve sua instrução
SQL em um arquivo nomeado como lab_03_02.sql.

Oracle Internal & Oracle Academy Use Only


SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary"
FROM employees;

3) Execute sua consulta no arquivo lab_03_02.sql.


SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary"
FROM employees;

4) Modifique sua consulta lab_03_02.sql para adicionar uma coluna que subtraia o
antigo salário do novo salário. Nomeie a coluna Increase. Salve o conteúdo do
arquivo como lab_03_04.sql. Execute a consulta revisada.
SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary",
ROUND(salary * 1.155, 0) - salary "Increase"
FROM employees;
5) Crie uma consulta que mostre os sobrenomes (com a primeira letra em maiúscula e
todas as demais em minúscula) e o comprimento dos sobrenomes de todos os
funcionários que tenham nomes que começam com as letras “J”, “A” ou “M”.Dê um
nome apropriado a cada coluna. Classifique os resultados pelos sobrenomes dos
funcionários.
SELECT INITCAP(last_name) "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE 'J%'
OR last_name LIKE 'M%'
OR last_name LIKE 'A%'
ORDER BY last_name;

Recrie a consulta para que o usuário seja solicitado a digitar a letra pela qual começa
o sobrenome. Por exemplo, se o usuário digitar H (em letra maiúscula) quando for
solicitado a digitar uma letra, o resultado deverá mostrar todos os funcionários que
têm sobrenomes que começam com a letra “H”.

Oracle Database: Fundamentos de SQL I A - 33


Soluções do Exercício 3-1: Usando Funções de uma Única Linha
para Personalizar o Resultado (continuação)
SELECT INITCAP(last_name) "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE '&start_letter%'
ORDER BY last_name;

Modifique a consulta de forma que a capitalização da letra inserida não afete a


saída. A letra inserida deve ser colocada em maiúsculo antes de ser processada pela
consulta SELECT.
SELECT INITCAP(last_name) "Name",
LENGTH(last_name) "Length"
FROM employees

Oracle Internal & Oracle Academy Use Only


WHERE last_name LIKE UPPER('&start_letter%' )
ORDER BY last_name;

6) O departamento de RH quer saber o tempo de serviço de cada funcionário. Para cada


funcionário, exiba o sobrenome e calcule o número de meses entre hoje e a data em
que o funcionário foi admitido. Nomeie a coluna como MONTHS_WORKED. Ordene
os resultados pelo número de meses empregado. Arredonde o número de meses para o
número inteiro mais próximo.

Observação: como esta consulta depende da data em que foi executada, os valores da
coluna MONTHS_WORKED serão diferentes para você.
SELECT last_name, ROUND(MONTHS_BETWEEN(
SYSDATE, hire_date)) MONTHS_WORKED
FROM employees
ORDER BY months_worked;

Se tiver tempo, faça os seguintes exercícios:


7) Crie uma consulta para exibir os sobrenomes e os salários de todos os funcionários.
Formate o salário para ter 15 caracteres, preenchido à esquerda com o símbolo US$.
Nomeie a coluna como SALARY.
SELECT last_name,
LPAD(salary, 15, '$') SALARY
FROM employees;
8) Crie uma consulta mostrando os primeiro oito caracteres dos sobrenomes dos
funcionários e indicando o valor dos seus respectivos salários com asteriscos. Cada
asterisco significa mil dólares. Classifique os dados na ordem descendente do salário.
A coluna deve receber o nome EMPLOYEES_AND_THEIR_SALARIES.
SELECT rpad(last_name, 8)||' '||
rpad(' ', salary/1000+1, '*')
EMPLOYEES_AND_THEIR_SALARIES
FROM employees
ORDER BY salary DESC;

Oracle Database: Fundamentos de SQL I A - 34


Soluções do Exercício 3-1: Usando Funções de uma Única Linha
para Personalizar o Resultado (continuação)
9) Crie uma consulta para exibir os sobrenomes e o número de semanas de serviço de
todos os funcionários do departamento 90. A coluna com o número de semanas deve
receber o nome TENURE. Trunque o valor do número de semanas para 0 casas
decimais. Mostre os registros de tempo de serviço dos funcionários em ordem
decrescente.
Observação: o valor TENURE será diferente pois dependerá da data em que você
executar a consulta.

SELECT last_name, trunc((SYSDATE-hire_date)/7) AS TENURE


FROM employees
WHERE department_id = 90
ORDER BY TENURE DESC

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 35


Exercícios para a Lição 4
Esta é uma série de exercícios usando as funções TO_CHAR e TO_DATE, e as expressões
condicionais como DECODE e CASE. Lembre-se de que, nas funções aninhadas, os
resultados são avaliados da função mais interna para a mais externa.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 36


Exercício 4-1: Usando Funções de Conversão e Expressões
Condicionais
1) Crie um relatório que produza o seguinte para cada funcionário:
<employee last name> ganha <salary> monthly but wants <3 times
salary.>. Nomeie a coluna Dream Salaries.

Oracle Internal & Oracle Academy Use Only


2) Mostre o sobrenome, a data de contratação e a data de revisão do salário de cada


funcionário, que é a primeira segunda-feira após 6 meses de serviço. Nomeie a coluna
REVIEW. Formate as datas para serem exibidas no formato semelhante a “Segunda-
feira, trinta e um de julho, 2000”.

3) Mostre o sobrenome, a data de contratação e o dia da semana em que o funcionário


começou a trabalhar. Nomeie a coluna DAY. Organize os resultados por dia da
semana, começando por segunda-feira.

Oracle Database: Fundamentos de SQL I A - 37


Exercício 4-1: Usando Funções de Conversão e Expressões
Condicionais (continuação)

4) Crie uma consulta para exibir os sobrenomes e as comissões de todos os funcionários.


Caso um funcionário não ganhe comissão, mostre “Nenhuma comissão”. Nomeie a
coluna como COMM.

Oracle Internal & Oracle Academy Use Only


Se você tiver tempo, faça os seguintes exercícios:


5) Com a função DECODE, crie uma consulta que exiba o nível de todos os funcionários
com base no valor da coluna JOB_ID. Use estes dados:
Cargo Nível
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
None of the above 0

Oracle Database: Fundamentos de SQL I A - 38


Exercício 4-1: Usando Funções de Conversão e Expressões
Condicionais (continuação)

6) Recrie a instrução no exercício anterior usando a sintaxe CASE.

Oracle Internal & Oracle Academy Use Only


Oracle Database: Fundamentos de SQL I A - 39


Soluções do Exercício 4-1: Usando Funções de Conversão e
Expressões Condicionais
1) Crie um relatório que produza o seguinte para cada funcionário:
<employee last name> ganha <salary> mensalmente, mas deseja <3 times salary.>.
Nomeie a coluna como Dream Salaries.
SELECT last_name || ' earns '
|| TO_CHAR(salary, 'fm$99,999.00')
|| ' monthly but wants '
|| TO_CHAR(salary * 3, 'fm$99,999.00')
|| '.' "Dream Salaries"
FROM employees;

2) Mostre o sobrenome, a data de contratação e a data de revisão do salário de cada

Oracle Internal & Oracle Academy Use Only


funcionário, que é a primeira segunda-feira após 6 meses de serviço. Nomeie a coluna
REVIEW. Formate as datas para serem exibidas no formato semelhante a “Segunda-
feira, trinta e um de julho, 2000”.
SELECT last_name, hire_date,
TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date, 6),'MONDAY'),
'fmDay, "the" Ddspth "of" Month, YYYY') REVIEW
FROM employees;
3) Mostre o sobrenome, a data de contratação e o dia da semana em que o funcionário
começou a trabalhar. Nomeie a coluna DAY. Organize os resultados por dia da
semana, começando por segunda-feira.
SELECT last_name, hire_date,
TO_CHAR(hire_date, 'DAY') DAY
FROM employees
ORDER BY TO_CHAR(hire_date - 1, 'd');
4) Crie uma consulta para exibir os sobrenomes e as comissões de todos os funcionários.
Caso um funcionário não ganhe comissão, mostre “Nenhuma comissão”. Nomeie a
coluna como COMM.
SELECT last_name,
NVL(TO_CHAR(commission_pct), 'No Commission') COMM
FROM employees;

5) Com a função DECODE, crie uma consulta que exiba o nível de todos os funcionários
com base no valor da coluna JOB_ID. Use estes dados:
Cargo Nível
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
None of the above 0

Oracle Database: Fundamentos de SQL I A - 40


Soluções do Exercício 4-1: Usando Funções de Conversão e
Expressões Condicionais (continuação)
SELECT job_id, decode (job_id,
'ST_CLERK', 'E',
'SA_REP', 'D',
'IT_PROG', 'C',
'ST_MAN', 'B',
'AD_PRES', 'A',
'0')GRADE
FROM employees;

6) Recrie a instrução no exercício anterior usando a sintaxe CASE.


SELECT job_id, CASE job_id
WHEN 'ST_CLERK' THEN 'E'
WHEN 'SA_REP' THEN 'D'

Oracle Internal & Oracle Academy Use Only


WHEN 'IT_PROG' THEN 'C'
WHEN 'ST_MAN' THEN 'B'
WHEN 'AD_PRES' THEN 'A'
ELSE '0' END GRADE
FROM employees;

Oracle Database: Fundamentos de SQL I A - 41


Exercícios para a Lição 5
No final deste exercício, você deverá estar familiarizado com o uso das funções de grupo
e seleção de grupos de dados.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 42


Exercício 5-1: Gerando Relatórios de Dados Agregados Usando
as Funções de Grupo
Determine a validade das três afirmações a seguir. Envolva a opção Verdadeiro ou Falso.
1) As funções de agrupamento agem em várias linhas para gerar um resultado por grupo.
Verdadeiro/Falso
2) As funções de grupo incluem valores nulos nos cálculos.
Verdadeiro/Falso
3) A cláusula WHERE restringe as linhas antes de sua inclusão em um cálculo de grupo .
Verdadeiro/Falso

Oracle Internal & Oracle Academy Use Only


O departamento de RH precisa dos seguintes relatórios:
4) Encontre o maior e o menor salário bem como a soma e a média do salário de todos
os funcionários. Nomeie as colunas como Máximo, Mínimo, Soma e Média,
respectivamente. Arredonde os resultados para o número inteiro mais próximo. Salve
a instrução SQL como lab_05_04.sql. Execute a consulta.

5) Modifique a consulta em lab_05_04.sql para exibir os salários mínimo e máximo,


bem como a soma e a média do salário, para cada tipo de cargo. Salve o arquivo
lab_02_06.sql como lab_02_15.sql novamente. Execute a instrução em
lab_05_05.sql.

Oracle Database: Fundamentos de SQL I A - 43


Exercício 5-1: Gerando Relatórios de Dados Agregados Usando
as Funções de Grupo (continuação)

6) Crie uma consulta para exibir o número de pessoas com o mesmo cargo.

Oracle Internal & Oracle Academy Use Only


Generalize a consulta para que o usuário no departamento de RH seja solicitado a
informar um cargo. Salve o script em um arquivo com o nome de lab_05_06.sql.
Execute a consulta. Informe IT_PROG, quando solicitado.

7) Determine o número de gerentes sem listá-los. Nomeie a coluna como Number of


Managers.
Dica:Use a coluna MANAGER_ID para determinar o número de gerentes.

8) Encontre a diferença entre os salários mais altos e os mais baixos. Nomeie a coluna
como DIFFERENCE.

Se você tiver tempo, faça os seguintes exercícios:


9) Crie um relatório para exibir o número do gerente e quanto ganha o funcionário com
o menor salário que trabalha para esse gerente. Exclua todos os funcionários cujo
gerente é desconhecido. Exclua quaisquer grupos onde o salário mínimo seja US$
6.000 ou menos. Organize os resultados por ordem decrescente de salários.

Oracle Database: Fundamentos de SQL I A - 44


Exercício 5-1: Gerando Relatórios de Dados Agregados Usando
as Funções de Grupo (continuação)

Se desejar um desafio adicional, faça os seguintes exercícios:


10) Crie uma consulta para exibir o número total de funcionários e, desse total, o número
de funcionários admitidos em 1995, 1996, 1997 e 1998. Crie os cabeçalhos de coluna
adequados.

Oracle Internal & Oracle Academy Use Only


11) Crie uma consulta matriz que exiba o cargo, o salário relativo a esse cargo com base
no número do departamento e o salário total desse cargo para os departamentos 20,
50, 80 e 90, atribuindo um cabeçalho apropriado a cada coluna.

Oracle Database: Fundamentos de SQL I A - 45


Soluções do Exercício 5-1: Gerando Relatórios de Dados
Agregados Usando as Funções de Grupo
Determine a validade das três afirmações a seguir. Envolva a opção Verdadeiro ou Falso.
1) As funções de agrupamento agem em várias linhas para gerar um resultado por grupo.
Verdadeiro/Falso
2) As funções de grupo incluem valores nulos nos cálculos.
Verdadeiro/Falso
3) A cláusula WHERE restringe as linhas antes de sua inclusão em um cálculo de grupo .
Verdadeiro/Falso

O departamento de RH precisa dos seguintes relatórios:

Oracle Internal & Oracle Academy Use Only


4) Encontre o maior e o menor salário bem como a soma e a média do salário de todos
os funcionários. Nomeie as colunas como
Máximo, Mínimo, Soma e Média, respectivamente. Arredonde os resultados para o
número inteiro mais próximo. Salve a instrução SQL como lab_05_04.sql.
Execute a consulta.
SELECT ROUND(MAX(salary),0) "Maximum",
ROUND(MIN(salary),0) "Minimum",
ROUND(SUM(salary),0) "Sum",
ROUND(AVG(salary),0) "Average"
FROM employees;

5) Modifique a consulta em lab_05_04.sql para exibir os salários mínimo e


máximo, bem como a soma e a média do salário, para cada tipo de cargo. Salve o
arquivo lab_02_06.sql como lab_02_15.sql novamente. Execute a
instrução em lab_05_05.sql.
SELECT job_id, ROUND(MAX(salary),0) "Maximum",
ROUND(MIN(salary),0) "Minimum",
ROUND(SUM(salary),0) "Sum",
ROUND(AVG(salary),0) "Average"
FROM employees
GROUP BY job_id;
6) Crie uma consulta para exibir o número de pessoas com o mesmo cargo.
SELECT job_id, COUNT(*)
FROM employees
GROUP BY job_id;

Generalize a consulta para que o usuário no departamento de RH seja solicitado a


informar um cargo. Salve o script em um arquivo com o nome de lab_05_06.sql.
Execute a consulta. Informe IT_PROG quando solicitado e clique em OK.
SELECT job_id, COUNT(*)
FROM employees

Oracle Database: Fundamentos de SQL I A - 46


Soluções do Exercício 5-1: Gerando Relatórios de Dados
Agregados Usando as Funções de Grupo (continuação)
WHERE job_id = '&job_title'
GROUP BY job_id;

7) Determine o número de gerentes sem listá-los. Nomeie a coluna como Number of


Managers.
Dica: Use a coluna MANAGER_ID para determinar o número de gerentes.
SELECT COUNT(DISTINCT manager_id) "Number of Managers"
FROM employees;
8) Encontre a diferença entre os salários mais altos e os mais baixos. Nomeie a coluna
como DIFFERENCE.
SELECT MAX(salary) - MIN(salary) DIFFERENCE

Oracle Internal & Oracle Academy Use Only


FROM employees;

Se tiver tempo, faça os seguintes exercícios:


9) Crie um relatório para exibir o número do gerente e quanto ganha o funcionário com
o menor salário que trabalha para esse gerente. Exclua todos os funcionários cujo
gerente é desconhecido. Exclua quaisquer grupos onde o salário mínimo seja US$
6.000 ou menos. Organize os resultados por ordem decrescente de salários.
SELECT manager_id, MIN(salary)
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary) > 6000
ORDER BY MIN(salary) DESC;

Se desejar um desafio adicional, faça os seguintes exercícios:


10) Crie uma consulta para exibir o número total de funcionários e, desse total, o número
de funcionários contratados em 1995, 1996, 1997 e 1998. Crie cabeçalhos
apropriados para as colunas.
SELECT COUNT(*) total,
SUM(DECODE(TO_CHAR(hire_date,
'YYYY'),1995,1,0))"1995",
SUM(DECODE(TO_CHAR(hire_date,
'YYYY'),1996,1,0))"1996",
SUM(DECODE(TO_CHAR(hire_date,
'YYYY'),1997,1,0))"1997",
SUM(DECODE(TO_CHAR(hire_date, 'YYYY'),1998,1,0))"1998"
FROM employees;

Oracle Database: Fundamentos de SQL I A - 47


Soluções do Exercício 5-1: Gerando Relatórios de Dados
Agregados Usando as Funções de Grupo (continuação)
11) Crie uma consulta matriz para exibir o cargo, o salário desse cargo baseado no
número do departamento e o salário total desse cargo nos departamentos 20,50, 80 e
90, nomeando cada coluna com um cabeçalho apropriado.
SELECT job_id "Job",
SUM(DECODE(department_id , 20, salary)) "Dept 20",
SUM(DECODE(department_id , 50, salary)) "Dept 50",
SUM(DECODE(department_id , 80, salary)) "Dept 80",
SUM(DECODE(department_id , 90, salary)) "Dept 90",
SUM(salary) "Total"
FROM employees
GROUP BY job_id;

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 48


Exercícios para a Lição 6
Este exercício tem como objetivo proporcionar a você um treinamento prático de como
extrair dados de mais de uma tabela com joins compatíveis com o padrão SQL:1999.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 49


Exercício 6-1: Exibindo Dados de Várias Tabelas Usando Joins
1) Crie uma consulta para o departamento de RH, obtendo os endereços de todos os
departamentos. Use as tabelas LOCATIONS e COUNTRIES. Mostre o ID do local, o
endereço, a cidade, o estado ou província e o país no resultado. Use um NATURAL
JOIN para produzir os resultados.

2) O departamento de RH precisa de um relatório somente dos funcionários com


departamentos correspondentes. Crie uma consulta para exibir o sobrenome, o

Oracle Internal & Oracle Academy Use Only


número e o nome do departamento desses funcionários.

3) O departamento de RH precisa de um relatório dos funcionários de Toronto. Exiba o


sobrenome, o cargo, o número e o nome do departamento de todos os funcionários
que trabalham em Toronto.

4) Crie um relatório para exibir o sobrenome e o número dos funcionários, bem como o
sobrenome e o número dos respectivos gerentes. O label das colunas deverá ser
Employee, Emp#, Manager e Mgr#, respectivamente. Salve sua instrução SQL como
lab_06_04.sql. Execute a consulta.

Oracle Database: Fundamentos de SQL I A - 50


Exercício 6-1: Exibindo Dados de Várias Tabelas Usando Joins
(continuação)

5) Modifique lab_06_04.sql para exibir todos os funcionários, incluindo King, que


não tem um gerente. Organize os resultados por número de funcionário. Salve sua
instrução SQL como lab_06_05.sql. Execute a consulta em lab_06_05.sql.

Oracle Internal & Oracle Academy Use Only


6) Crie um relatório para o departamento de RH, mostrando os sobrenomes dos


funcionários, os números de departamento e todos os funcionários que trabalham no
mesmo departamento que um determinado funcionário. Dê um label apropriado a
cada coluna. Salve o script em um arquivo nomeado como lab_06_06.sql.

7) O departamento de RH precisa de um relatório com os graus e salários dos cargos.


Para se familiarizar com a tabela JOB_GRADES, primeiro mostre a estrutura da tabela
JOB_GRADES. Em seguida, crie uma consulta para exibir os nomes, os cargos, o
nome do departamento, os salários e os graus de todos os funcionários.

Oracle Database: Fundamentos de SQL I A - 51


Exercício 6-1: Exibindo Dados de Várias Tabelas Usando Joins
(continuação)

Se desejar um desafio adicional, faça os seguintes exercícios:

Oracle Internal & Oracle Academy Use Only


8) O departamento de RH precisa determinar os nomes de todos os funcionários que
foram contratados depois de Davies. Crie uma consulta para exibir o nome e a data de
contratação de todos os funcionários que foram contratados após o funcionário
Davies.

9) O departamento de RH precisa obter os nomes e as datas de admissão de todos os


funcionários admitidos antes dos respectivos gerentes, além dos nomes e das datas de
admissão desses gerentes. Salve o script em um arquivo nomeado como
lab_06_09.sql.

Oracle Database: Fundamentos de SQL I A - 52


Soluções do Exercício 6-1: Exibindo Dados de Várias Tabelas
Usando Joins
1) Crie uma consulta para o departamento de RH, obtendo os endereços de todos os
departamentos. Use as tabelas LOCATIONS e COUNTRIES. Mostre o ID do local, o
endereço, a cidade, o estado ou província e o país no resultado. Use um NATURAL
JOIN para produzir os resultados.
SELECT location_id, street_address, city, state_province,
country_name
FROM locations
NATURAL JOIN countries;

2) O departamento de RH precisa de um relatório de todos os funcionários. Crie uma


consulta para exibir o sobrenome, o número e o nome do departamento de todos os

Oracle Internal & Oracle Academy Use Only


funcionários.
SELECT last_name, department_id, department_name
FROM employees
JOIN departments
USING (department_id);
3) O departamento de RH precisa de um relatório dos funcionários de Toronto. Mostre o
sobrenome, o cargo, o número e o nome do departamento de todos os funcionários
que trabalham em Toronto.
SELECT e.last_name, e.job_id, e.department_id,
d.department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
JOIN locations l
ON (d.location_id = l.location_id)
WHERE LOWER(l.city) = 'toronto';
4) Crie um relatório para exibir os sobrenomes e os números dos funcionários,
juntamente com os sobrenomes e números dos seus gerentes. O label das colunas
deverá ser Employee, Emp#, Manager e Mgr#, respectivamente. Salve sua instrução
SQL como lab_06_04.sql. Execute a consulta.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w join employees m
ON (w.manager_id = m.employee_id);

5) Modifique lab_06_04.sql para exibir todos os funcionários, incluindo King, que


não tem um gerente. Organize os resultados por número de funcionário. Salve sua
instrução SQL como lab_06_05.sql. Execute a consulta em lab_06_05.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w
LEFT OUTER JOIN employees m
ON (w.manager_id = m.employee_id)

Oracle Database: Fundamentos de SQL I A - 53


Soluções do Exercício 6-1: Exibindo Dados de Várias Tabelas
Usando Joins (continuação)
ORDER BY 2;

6) Crie um relatório para o departamento de RH, mostrando os sobrenomes dos


funcionários, os números de departamento e todos os funcionários que trabalham no
mesmo departamento que um determinado funcionário. Dê um label apropriado a
cada coluna. Salve o script em um arquivo nomeado como lab_06_06.sql.
Execute a consulta.
SELECT e.department_id department, e.last_name employee,
c.last_name colleague
FROM employees e JOIN employees c
ON (e.department_id = c.department_id)
WHERE e.employee_id <> c.employee_id

Oracle Internal & Oracle Academy Use Only


ORDER BY e.department_id, e.last_name, c.last_name;

7) O departamento de RH precisa de um relatório com os graus e salários dos cargos.


Para se familiarizar com a tabela JOB_GRADES, primeiro mostre a estrutura da tabela
JOB_GRADES. Em seguida, crie uma consulta para exibir os nomes, os cargos, o
nome do departamento, os salários e os graus de todos os funcionários.
DESC JOB_GRADES

SELECT e.last_name, e.job_id, d.department_name,


e.salary, j.grade_level
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
JOIN job_grades j
ON (e.salary BETWEEN j.lowest_sal AND j.highest_sal);
Se desejar um desafio adicional, faça os seguintes exercícios:
8) O departamento de RH precisa determinar os nomes de todos os funcionários que
foram contratados depois de Davies. Crie uma consulta para exibir o nome e a data de
contratação de todos os funcionários que foram contratados após o funcionário
Davies.
SELECT e.last_name, e.hire_date
FROM employees e JOIN employees davies
ON (davies.last_name = 'Davies')
WHERE davies.hire_date < e.hire_date;

9) O departamento de RH precisa determinar os nomes e as datas de contratação de


todos os funcionários que foram contratados antes dos seus gerentes, juntamente
como os nomes dos seus gerentes e as datas de contratação. Salve o script em um
arquivo nomeado como lab_06_09.sql.
SELECT w.last_name, w.hire_date, m.last_name, m.hire_date
FROM employees w JOIN employees m
ON (w.manager_id = m.employee_id)
WHERE w.hire_date < m.hire_date;

Oracle Database: Fundamentos de SQL I A - 54


Exercícios para a Lição 7
Neste exercício, você criará consultas complexas com instruções SELECT aninhadas.
Por questões práticas, é recomendável criar a consulta interna primeiro. Certifique-se de
que ela seja executada e gere os dados previstos antes de você codificar a consulta
externa.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 55


Exercício 7-1: Usando Subconsultas para Solucionar Consultas
1) O departamento de RH precisa de uma consulta que solicite ao usuário o sobrenome
de um funcionário. A consulta, então, exibe o sobrenome e a data de admissão de
qualquer funcionário no mesmo departamento que o funcionário cujo nome foi
fornecido (excluindo aquele funcionário). Por exemplo, se o usuário inserir Zlotkey,
localize todos os funcionários que trabalham com Zlotkey (excluindo Zlotkey).

Oracle Internal & Oracle Academy Use Only


2) Crie um relatório que exiba o número do funcionário, o sobrenome e o salário de
todos os funcionários que recebem mais do que a média salarial. Organize os
resultados por ordem crescente de salários.

3) Crie uma consulta exibindo o número do funcionário e o sobrenome de todos os


funcionários que trabalham em um departamento com quaisquer funcionários cujo
sobrenome contenha a letra “u”. Salve a instrução SQL como lab_07_03.sql.
Execute a consulta.

Oracle Database: Fundamentos de SQL I A - 56


Exercício 7-1: Usando Subconsultas para Solucionar Consultas
(continuação)

4) O departamento de RH precisa de um relatório que exiba o sobrenome, o número do


departamento e a ID de cargo de todos os funcionários cuja ID de local de

Oracle Internal & Oracle Academy Use Only


departamento seja 1700.

Modifique a consulta para que o usuário seja solicitado a informar um ID de


localização. Salve o trabalho em um arquivo denominado lab_07_04.sql.
5) Crie um relatório para o departamento de RH exibindo os sobrenomes e os salários de
todos os funcionários subordinados a King.

6) Crie um relatório para o departamento de RH exibindo o número do departamento, os


sobrenomes e o ID de cargo de todos os funcionários do departamento Executivo.

7) Crie um relatório que exiba uma lista de todos os funcionários cujo salário seja maior
que o salário de qualquer funcionário do departamento 60.
Se tiver tempo, faça o seguinte exercício:

Oracle Database: Fundamentos de SQL I A - 57


Exercício 7-1: Usando Subconsultas para Solucionar Consultas
(continuação)
8) Modifique a consulta em lab_07_03.sql para exibir o número, sobrenome e salário
de todos os funcionários que ganham mais que o salário médio e que trabalham em
um departamento com qualquer funcionário cujo sobrenome contenha uma letra "u".
Salve lab_07_03.sql como lab_07_08.sql novamente. Execute a instrução em
lab_07_08.sql.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 58


Soluções do Exercício 7-1: Usando Subconsultas para
Solucionar Consultas
1) O departamento de RH precisa de uma consulta que solicite ao usuário o sobrenome
de um funcionário. A consulta, então, exibe o sobrenome e a data de admissão de
qualquer funcionário no mesmo departamento que o funcionário cujo nome foi
fornecido (excluindo aquele funcionário). Por exemplo, se o usuário inserir Zlotkey,
localize todos os funcionários que trabalham com Zlotkey (excluindo Zlotkey).
UNDEFINE Enter_name

SELECT last_name, hire_date


FROM employees
WHERE department_id = (SELECT department_id

Oracle Internal & Oracle Academy Use Only


FROM employees
WHERE last_name = '&&Enter_name')
AND last_name <> '&Enter_name';
2) Crie um relatório que exiba o número do funcionário, o sobrenome e o salário de
todos os funcionários que recebem mais do que a média salarial. Organize os
resultados por ordem crescente de salários.
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees)
ORDER BY salary;

3) Crie uma consulta exibindo o número do funcionário e o sobrenome de todos os


funcionários que trabalham em um departamento com quaisquer funcionários cujo
sobrenome contenha a letra “u”. Salve a instrução SQL como lab_07_03.sql.
Execute a consulta.
SELECT employee_id, last_name
FROM employees
WHERE department_id IN (SELECT department_id
FROM employees
WHERE last_name like '%u%');

4) O departamento de RH precisa de um relatório mostrando os sobrenomes, o número


do departamento e o ID do cargo de todos os funcionários cuja ID de localização seja
1700.
SELECT last_name, department_id, job_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = 1700);

Modifique a consulta para que o usuário seja solicitado a informar um ID de


localização. Salve o trabalho em um arquivo denominado lab_07_04.sql.

Oracle Database: Fundamentos de SQL I A - 59


Soluções do Exercício 7-1: Usando Subconsultas para
Solucionar Consultas (continuação)
SELECT last_name, department_id, job_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id =
&Enter_location);

5) Crie um relatório para o departamento de RH exibindo os sobrenomes e os salários de


todos os funcionários subordinados a King.
SELECT last_name, salary
FROM employees
WHERE manager_id = (SELECT employee_id
FROM employees

Oracle Internal & Oracle Academy Use Only


WHERE last_name = 'King');

6) Crie um relatório para o departamento de RH exibindo o número do departamento, os


sobrenomes e o ID de cargo de todos os funcionários do departamento Executivo.
SELECT department_id, last_name, job_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE department_name =
'Executivo');
7) Crie um relatório que exiba uma lista de todos os funcionários cujo salário seja maior
que o salário de qualquer funcionário do departamento 60.
SELECT last_name FROM employees
WHERE salary > ANY (SELECT salary
FROM employees
WHERE department_id=60);
Se tiver tempo, faça o seguinte exercício:
8) Modifique a consulta em lab_07_03.sql para exibir o número, sobrenome e salário
de todos os funcionários que ganham mais que o salário médio e que trabalham em
um departamento com qualquer funcionário cujo sobrenome contenha uma letra "u".
Salve lab_07_03.sql como lab_07_08.sql novamente. Execute a instrução em
lab_07_08.sql.
SELECT employee_id, last_name, salary
FROM employees
WHERE department_id IN (SELECT department_id
FROM employees
WHERE last_name like '%u%')
AND salary > (SELECT AVG(salary)
FROM employees );

Oracle Database: Fundamentos de SQL I A - 60


Exercícios para a Lição 8
Neste exercício, você escreverá consultas usando os operadores de conjunto.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 61


Exercício 8-1: Usando os Operadores de Conjunto
1) O departamento de RH precisa de uma lista dos IDs de departamento dos
departamentos que não contêm o ID de cargo ST_CLERK. Use os operadores de
conjunto para criar o relatório.

Oracle Internal & Oracle Academy Use Only


2) O departamento de RH precisa de uma lista dos países que não têm departamentos.
Exiba o ID do país e os nomes dos países. Use os operadores de conjunto para criar o
relatório.

3) Gere uma lista de cargos dos departamentos 10, 50 e 20, nessa ordem. Exiba o ID do
cargo e o ID do departamento usando os operadores de conjunto.

4) Crie um relatório listando os IDs dos funcionários e os IDs de cargo dos funcionários
que atualmente ocupam um cargo igual ao que ocupavam quando foram contratados
pela empresa (ou seja, mudaram de cargo mas agora voltaram para seus cargos
originais).

5) O departamento de RH precisa de um relatório com as seguintes especificações:


• Sobrenome e ID de departamento de todos os funcionários da tabela EMPLOYEES,
independentemente de eles pertencerem ou não a um departamento
• O ID e o nome de todos os departamentos da tabela DEPARTMENTS,
independentemente de haver ou não funcionários trabalhando neles
Escreva uma consulta composta para realizar essa tarefa.

Oracle Database: Fundamentos de SQL I A - 62


Exercício 8-1: Usando os Operadores de Conjunto (continuação)

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 63


Soluções do Exercício 8-1: Usando os Operadores de Conjunto
1) O departamento de RH precisa de uma lista dos IDs de departamento dos
departamentos que não contêm o ID de cargo ST_CLERK. Use os operadores de
conjunto para criar o relatório.
SELECT department_id
FROM departments
MINUS
SELECT department_id
FROM employees
WHERE job_id = 'ST_CLERK';
2) O departamento de RH precisa de uma lista dos países que não têm departamentos.
Exiba o ID do país e os nomes dos países. Use os operadores de conjunto para criar o

Oracle Internal & Oracle Academy Use Only


relatório.
SELECT country_id,country_name
FROM countries
MINUS
SELECT l.country_id,c.country_name
FROM locations l JOIN countries c
ON(l.country_id = c.country_id)
JOIN departments d
ON d.location_id=l.location_id;

3) Gere uma lista de cargos dos departamentos 10, 50 e 20, nessa ordem. Mostre o ID de
cargo e o ID do departamento usando os operadores de conjunto.
SELECT distinct job_id, department_id
FROM employees
WHERE department_id = 10
UNION ALL
SELECT DISTINCT job_id, department_id
FROM employees
WHERE department_id = 50
UNION ALL
SELECT DISTINCT job_id, department_id
FROM employees
WHERE department_id = 20

4) Crie um relatório listando os IDs dos funcionários e os IDs de cargo dos funcionários
que atualmente ocupam um cargo igual ao que ocupavam quando foram contratados
pela empresa (ou seja, mudaram de cargo mas agora voltaram para seus cargos
originais).
SELECT employee_id,job_id
FROM employees
INTERSECT
SELECT employee_id,job_id
FROM job_history;

Oracle Database: Fundamentos de SQL I A - 64


Soluções do Exercício 8-1: Usando os Operadores de Conjunto
(continuação)

5) O departamento de RH precisa de um relatório com as seguintes especificações:


• Sobrenome e ID de departamento de todos os funcionários da tabela EMPLOYEES,
independentemente de eles pertencerem ou não a um departamento
• O ID e o nome de todos os departamentos da tabela DEPARTMENTS,
independentemente de haver ou não funcionários trabalhando neles
Escreva uma consulta composta para realizar essa tarefa.
SELECT last_name,department_id,TO_CHAR(null)
FROM employees
UNION

Oracle Internal & Oracle Academy Use Only


SELECT TO_CHAR(null),department_id,department_name
FROM departments;

Oracle Database: Fundamentos de SQL I A - 65


Exercícios para a Lição 9
Neste exercício, você adicionará linhas à tabela MY_EMPLOYEE, atualizará e deletará
dados na tabela e controlará as transações. Executará um script para criar a tabela
MY_EMPLOYEE.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 66


Exercício 9-1: Manipulando Dados
O departamento de RH precisa que você crie instruções SQL para inserir, atualizar e
deletar dados de funcionários. Você usa a tabela MY_EMPLOYEE como protótipo antes de
passar as instruções para o departamento de RH.
Observação: para todas as instruções DML, use o ícone Executar Script (ou pressione
[F5]) para executar a consulta. Dessa forma, você poderá ver as mensagens de feedback
na página com a tab Script Output. Para as consultas SELECT, continue a usar o ícone
Execute Statement ou pressione [F9] para obter a saída formatada na página com a tab
Results.
Insira dados na tabela MY_EMPLOYEE.
1) Execute a instrução no script lab_09_01.sql para criar a tabela MY_EMPLOYEE

Oracle Internal & Oracle Academy Use Only


usada neste exercício.
2) Descreva a estrutura da tabela MY_EMPLOYEE para identificar os nomes das colunas.

Oracle Database: Fundamentos de SQL I A - 67


Exercício 9-1: Manipulando Dados (continuação)
3) Crie uma instrução INSERT para adicionar a primeira linha de dados à tabela
MY_EMPLOYEE a partir do exemplo de dados a seguir. Não liste as colunas na cláusula

ID LAST_NAME FIRST_NAME USERID SALARY

1 Patel Ralph rpatel 895

2 Dancs Betty bdancs 860

3 Biri Ben bbiri 1100

Oracle Internal & Oracle Academy Use Only


4 Newman Chad cnewman 750

5 Ropeburn Audrey aropebur 1550

INSERT. Não informe todas as linhas ainda.


4) Preencha a tabela MY_EMPLOYEE com a segunda linha do exemplo de dados a partir
da lista precedente. Agora, liste as colunas explicitamente na cláusula INSERT.
5) Confirme a adição à tabela.

6) Escreva uma instrução INSERT em um arquivo de script dinâmico reutilizável para


carregar as linhas remanescentes na tabela MY_EMPLOYEE. Este script deve apresentar
um prompt para todas as colunas (ID, LAST_NAME, FIRST_NAME, USERID e
SALARY). Salve esse script para um arquivo lab_09_06.sql.
7) Preencha a tabela com as duas linhas de dados de amostra e seguida, listadas na etapa
3, executando a instrução INSERT no script que você criou.
8) Confirme as adições à tabela.

9) Torne as adições de dados permanentes.

Oracle Database: Fundamentos de SQL I A - 68


Exercício 9-1: Manipulando Dados (continuação)
Atualize e exclua dados na tabela MY_EMPLOYEE.
10) Altere o sobrenome do funcionário 3 para Drexler.
11) Altere o salário de todos os funcionários com salário inferior a US$ 900 para US$
1.000.
12) Verifique as alterações feitas na tabela.

Oracle Internal & Oracle Academy Use Only


13) Exclua Betty Dancs da tabela MY_EMPLOYEE.
14) Confirme as alterações feitas na tabela.

15) Confirme todas as alterações pendentes.

Transação de dados de controle para a tabela MY_EMPLOYEE.


16) Preencha a tabela com as últimas duas linhas de dados de amostra, listadas na etapa 3,
usando as instruções no script que você criou na etapa 6. Execute as instruções no
script.
17) Confirme a inclusão feita na tabela.

18) Marque um ponto intermediário no processamento da transação.


19) Exclua todas as linhas da tabela MY_EMPLOYEE.
20) Confirme que a tabela está vazia.
21) Descarte a operação DELETE mais recente sem descartar a operação INSERT anterior.

Oracle Database: Fundamentos de SQL I A - 69


Exercício 9-1: Manipulando Dados (continuação)
22) Confirme se a nova linha ainda está intacta.

23) Torne a adição de dados permanente.


Se tiver tempo, faça o seguinte exercício:

Oracle Internal & Oracle Academy Use Only


ID LAST_NAME FIRST_NAME USERID SALARY

6 Anthony Mark manthony 1230


24) Modifique o script lab_09_06.sql de modo que o USERID seja gerado
automaticamente pela concatenação da primeira letra do nome com os sete primeiros
caracteres do sobrenome. O USERID gerado deve ter caracteres minúsculos. Portanto,
o script não deve apresentar um prompt para o USERID. Salve esse script para um
arquivo denominado lab_09_24.sql.

25) Execute o script lab_09_24.sql para inserir o seguinte registro:

26) Confirme que a nova linha foi adicionada com o USERID correto.

Oracle Database: Fundamentos de SQL I A - 70


Soluções do Exercício 9-1: Manipulando Dados
Insira dados na tabela MY_EMPLOYEE.
1) Execute a instrução no script lab_09_01.sql para criar a tabela MY_EMPLOYEE
usada neste exercício.
a) No menu File, selecione Open. Na caixa de diálogo Open, navegue até a pasta
/home/oracle/labs/sql1/labs e clique duas vezes em lab_09_01.sql.
b) Quando a instrução estiver aberta em uma Planilha SQL, clique no ícone Run
Script para executar o script. Na página com a tab Script Output, você receberá a
mensagem de êxito da ação Create Table.
2) Descreva a estrutura da tabela MY_EMPLOYEE para identificar os nomes das colunas.
DESCRIBE my_employee

Oracle Internal & Oracle Academy Use Only


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

3) Crie uma instrução INSERT para adicionar a primeira linha de dados à tabela
MY_EMPLOYEE a partir do exemplo de dados a seguir. Não liste as colunas na cláusula
INSERT.

INSERT INTO my_employee


VALUES (1, 'Patel', 'Ralph', 'rpatel', 895);

4) Preencha a tabela MY_EMPLOYEE com a segunda linha do exemplo de dados a partir


da lista precedente. Agora, liste as colunas explicitamente na cláusula INSERT.
INSERT INTO my_employee (id, last_name, first_name,
userid, salary)
VALUES (2, 'Dancs', 'Betty', 'bdancs', 860);
5) Confirme as adições à tabela.

Oracle Database: Fundamentos de SQL I A - 71


Soluções do Exercício 9-1: Manipulando Dados (continuação)
SELECT *
FROM my_employee;

6) Escreva uma instrução INSERT em um arquivo de script dinâmico reutilizável para


carregar as linhas remanescentes na tabela MY_EMPLOYEE. Este script deve apresentar
um prompt para todas as colunas (ID, LAST_NAME, FIRST_NAME, USERID e
SALARY). Salve esse script em um arquivo denominado lab_09_06.sql.
INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);

7) Preencha a tabela com as duas linhas de dados de amostra e seguida, listadas na etapa
3, executando a instrução INSERT no script que você criou.

Oracle Internal & Oracle Academy Use Only


INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);
8) Confirme as adições à tabela.
SELECT *
FROM my_employee;
9) Torne as adições de dados permanentes.
COMMIT;

Atualize e exclua dados na tabela MY_EMPLOYEE.


10) Altere o sobrenome do funcionário 3 para Drexler.
UPDATE my_employee
SET last_name = 'Drexler'
WHERE id = 3;
11) Altere o salário de todos os funcionários que ganham menos de US$ 900,00 para US$
1.000,00.
UPDATE my_employee
SET salary = 1000
WHERE salary < 900;

12) Verifique as alterações feitas na tabela.


SELECT *
FROM my_employee;

13) Exclua Betty Dancs da tabela MY_EMPLOYEE.


DELETE
FROM my_employee
WHERE last_name = 'Dancs';
14) Confirme as alterações feitas na tabela.

Oracle Database: Fundamentos de SQL I A - 72


Soluções do Exercício 9-1: Manipulando Dados (continuação)
SELECT *
FROM my_employee;

15) Confirme todas as alterações pendentes.


COMMIT;

Transação de dados de controle para a tabela MY_EMPLOYEE.


16) Preencha a tabela com as últimas duas linhas de dados de amostra, listadas na etapa 3,
usando as instruções no script que você criou na etapa 6. Execute as instruções no
script.
INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);

Oracle Internal & Oracle Academy Use Only


17) Confirme a adição à tabela.
SELECT *
FROM my_employee;

18) Marque um ponto intermediário no processamento da transação.


SAVEPOINT step_17;

19) Exclua todas as linhas da tabela MY_EMPLOYEE.


DELETE
FROM my_employee;
20) Confirme que a tabela está vazia.
SELECT *
FROM my_employee;

21) Descarte a operação DELETE mais recente sem descartar a operação INSERT anterior.
ROLLBACK TO step_17;

22) Confirme que a nova linha ainda está intacta.


SELECT *
FROM my_employee;

23) Torne a adição de dados permanente.


COMMIT;

Oracle Database: Fundamentos de SQL I A - 73


Soluções do Exercício 9-1: Manipulando Dados (continuação)

Se tiver tempo, faça o seguinte exercício:


24) Modifique o script lab_09_06.sql de modo que o USERID seja gerado
automaticamente pela concatenação da primeira letra do nome com os sete primeiros
caracteres do sobrenome. O USERID gerado deve ter caracteres minúsculos. Portanto,
o script não deve apresentar um prompt para o USERID. Salve esse script para um
arquivo denominado lab_09_24.sql.
SET ECHO OFF
SET VERIFY OFF
INSERT INTO my_employee
VALUES (&p_id, '&&p_last_name', '&&p_first_name',
lower(substr('&p_first_name', 1, 1) ||

Oracle Internal & Oracle Academy Use Only


substr('&p_last_name', 1, 7)), &p_salary);
SET VERIFY ON
SET ECHO ON
UNDEFINE p_first_name
UNDEFINE p_last_name

25) Execute o script lab_09_24.sql para inserir o seguinte registro:

ID LAST_NAME FIRST_NAME USERID SALARY

6 Anthony Mark manthony 1230


26) Confirme que a nova linha foi adicionada com o USERID correto.
SELECT *
FROM my_employee
WHERE ID='6';

Oracle Database: Fundamentos de SQL I A - 74


Exercícios para a Lição 10
Crie novas tabelas com a instrução CREATE TABLE. Confirme que a nova tabela foi
incluída ao banco de dados. Você também aprendeu a configurar o status de uma tabela
como READ ONLY e reverter para READ/WRITE.
Observação: para todas as instruções DDL e DML, clique no ícone Executar Script (ou
pressione [F5]) para executar a consulta no SQL Developer. Dessa forma, você poderá
ver as mensagens de feedback na página com a tab Script Output. Para as consultas
SELECT, continue e clique no ícone Execute Statement ou pressione [F9] para obter a
saída formatada na página com a tab Results.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 75


Exercício 10-1: Usando Instruções DDL para Criar e Gerenciar
Tabelas
1) Crie a tabela DEPT com base nas informações a seguir sobre a instância da tabela.
Salve a instrução em um script denominado lab_10_01.sql e execute a instrução
no script para criar a tabela. Confirme que a tabela foi criada.
Column Name ID NAME
Key Type Primary key
Nulls/Unique
FK Table
FK Column

Oracle Internal & Oracle Academy Use Only


Data type NUMBER VARCHAR2
Length 7 25

2) Preencha a tabela DEPT com os dados da tabela DEPARTMENTS. Inclua somente as


colunas necessárias.
3) Crie a tabela EMP com base no seguinte gráfico de instâncias da tabela. Salve a
instrução em um script denominado lab_10_03.sql e execute a instrução no script
para criar a tabela. Confirme que a tabela foi criada.
Column Name ID LAST_NAME FIRST_NAME DEPT_ID
Key Type
Nulls/Unique
FK Table DEPT
FK Column ID
Data type NUMBER VARCHAR2 VARCHAR2 NUMBER
Length 7 25 25 7

Oracle Database: Fundamentos de SQL I A - 76


Exercício 10-1: Usando Instruções DDL para Criar e Gerenciar
Tabelas (continuação)
4) Crie a tabela EMPLOYEES2 com base na estrutura da tabela EMPLOYEES. Inclua
apenas as colunas EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY e
DEPARTMENT_ID. Atribua um nome às colunas na nova tabela ID, FIRST_NAME,
LAST_NAME, SALARY e DEPT_ID, respectivamente.
5) Altere o status da tabela EMPLOYEES2 para somente para leitura. Observe que esta
opção é suportada no Oracle Database 11g.

ID FIRST_NAME LAST_NAME SALARY DEPT_ID


34 Grant Marcie 5678 10

Oracle Internal & Oracle Academy Use Only


6) Tente inserir a seguinte linha na tabela EMPLOYEES2:
Você obtém a seguinte mensagem de erro:

7) Reverta a tabela EMPLOYEES2 para o status leitura/gravação. Agora, tente inserir a


mesma linha novamente. Observe que esta opção é suportada no Oracle Database
11g.
Você deve obter as seguintes mensagens:

8) Elimine a tabela EMPLOYEES2.

Oracle Database: Fundamentos de SQL I A - 77


Soluções do Exercício 10-1: Usando Instruções DDL para Criar e
Gerenciar Tabelas
1) Crie a tabela DEPT com base nas informações a seguir sobre a instância da tabela.
Salve a instrução em um script denominado lab_10_01.sql e execute a instrução
no script para criar a tabela. Confirme que a tabela foi criada.
Column Name ID NAME
Key Type Primary key
Nulls/Unique
FK Table
FK Column
Data type NUMBER VARCHAR2

Oracle Internal & Oracle Academy Use Only


Length 7 25

CREATE TABLE dept


(id NUMBER(7)CONSTRAINT department_id_pk PRIMARY KEY,
name VARCHAR2(25));
Para confirmar que a tabela foi criada e visualizar sua estrutura, execute o seguinte
comando:
DESCRIBE dept

2) Preencha a tabela DEPT com os dados da tabela DEPARTMENTS. Inclua somente as


colunas necessárias.
INSERT INTO dept
SELECT department_id, department_name
FROM departments;

3) Crie a tabela EMP com base no seguinte gráfico de instâncias da tabela. Salve a
instrução em um script denominado lab_10_03.sql e execute a instrução no script
para criar a tabela. Confirme que a tabela foi criada.
Column Name ID LAST_NAME FIRST_NAME DEPT_ID
Key Type
Nulls/Unique
FK Table DEPT
FK Column ID
Data type NUMBER VARCHAR2 VARCHAR2 NUMBER
Length 7 25 25 7

Oracle Database: Fundamentos de SQL I A - 78


Soluções do Exercício 10-1: Usando Instruções DDL para Criar e
Gerenciar Tabelas (continuação)
CREATE TABLE emp
(id NUMBER(7),
last_name VARCHAR2(25),
first_name VARCHAR2(25),
dept_id NUMBER(7)
CONSTRAINT emp_dept_id_FK REFERENCES dept (id)
);

Para confirmar que a tabela foi criada e visualizar sua estrutura:


DESCRIBE emp

4) Crie a tabela EMPLOYEES2 com base na estrutura da tabela EMPLOYEES. Inclua


apenas as colunas EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY e

Oracle Internal & Oracle Academy Use Only


DEPARTMENT_ID. Atribua um nome às colunas na nova tabela ID, FIRST_NAME,
LAST_NAME, SALARY e DEPT_ID, respectivamente.
CREATE TABLE employees2 AS
SELECT employee_id id, first_name, last_name, salary,
department_id dept_id
FROM employees;

5) Altere o status da tabela EMPLOYEES2 para somente para leitura.


ALTER TABLE employees2 READ ONLY

6) Tente inserir a seguinte linha na tabela EMPLOYEES2:


ID FIRST_NAME LAST_NAME SALARY DEPT_ID
34 Grant Marcie 5678 10

Você receberá a mensagem de erro “Update operation not allowed on table”


(Operação de atualização não permitida na tabela). Portanto, você não poderá inserir
nenhuma linha na tabela porque ela foi atribuída ao status de somente leitura.
INSERT INTO employees2
VALUES (34, 'Grant','Marcie',5678,10)

7) Reverta a tabela EMPLOYEES2 para o status leitura/gravação. Tente inserir a mesma


linha, novamente.
Desta vez, você poderá inserir a linha na tabela porque ela foi atribuída ao status
READ WRITE.
ALTER TABLE employees2 READ WRITE

INSERT INTO employees2


VALUES (34, 'Grant','Marcie',5678,10)

Oracle Database: Fundamentos de SQL I A - 79


Soluções do Exercício 10-1: Usando Instruções DDL para Criar e
Gerenciar Tabelas (continuação)
8) Elimine a tabela EMPLOYEES2.
Observação:Você pode até mesmo remover uma tabela que está no modo READ
ONLY. Para testar esse processo, altere a tabela novamente para o status READ ONLY e
execute o comando DROP TABLE. A tabela EMPLOYEES2 será removida.
DROP TABLE employees2;

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 80


Exercícios para a Lição 11
A Parte 1 do exercício desta lição contém várias atividades que permitem criar, utilizar e
remover views. Conclua as perguntas 1 a 6 desta lição.
A Parte 2 do exercício desta lição contém várias atividades que permitem criar e usar
uma seqüência, um índice e um sinônimo. Conclua as perguntas 7 a 10 desta lição.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 81


Exercício 11-1: Criando Outros Objetos de Esquema
Parte 1
1) A equipe do departamento de RH precisa ocultar alguns dos dados na tabela
EMPLOYEES. Eles querem uma view denominada EMPLOYEES_VU com base nos
números dos funcionários, sobrenomes dos funcionários e números dos
departamentos na tabela EMPLOYEES. O título do nome do funcionário deve ser
EMPLOYEE.
2) Confirme o funcionamento da view. Exiba o conteúdo da view EMPLOYEES_VU.

Oracle Internal & Oracle Academy Use Only


3) Com a view EMPLOYEES_VU, escreva uma consulta para o departamento de RH a fim


de exibir todos os nomes dos funcionários e números de departamentos.

4) O departamento 50 precisa acessar os dados dos seus funcionários. Crie uma view
denominada DEPT50 contendo os números dos funcionários, os sobrenomes dos
funcionários e os números dos departamentos para todos os funcionários no
departamento 50. Você foi solicitado a rotular as colunas da view EMPNO, EMPLOYEE
e DEPTNO. Para fins de segurança, não permita que um funcionário seja reatribuído a
outro departamento por meio da view.
5) Exiba a estrutura e o conteúdo da view DEPT50.

Oracle Database: Fundamentos de SQL I A - 82


Exercício 11-1: Criando Outros Objetos de Esquema
(continuação)

Oracle Internal & Oracle Academy Use Only


6) Teste a sua view. Tente reatribuir Matos ao departamento 80.

Parte 2
7) Você precisa de uma sequência que possa ser usada com a coluna PRIMARY KEY da
tabela DEPT. A sequência deve começar em 200 e ter um valor máximo de 1.000.
Incremente a sequência em 10. Ela deve se chamar DEPT_ID_SEQ.
8) Para testar sua sequência, escreva um script para inserir duas linhas na tabela DEPT.
Atribua o nome lab_11_08.sql ao script. Não se esqueça de usar a sequência
criada para a coluna ID. Inclua dois departamentos: Education e Administration.
Confirme suas inclusões. Execute os comandos no script.
9) Crie um índice não exclusivo na coluna NAME na tabela DEPT.
10) Crie um sinônimo para a tabela EMPLOYEES. Chame-a de EMP.

Oracle Database: Fundamentos de SQL I A - 83


Soluções do Exercício 11-1: Criando Outros Objetos de
Esquema
Parte 1
1) A equipe do departamento de RH precisa ocultar alguns dos dados na tabela
EMPLOYEES. Eles querem uma view denominada EMPLOYEES_VU com base nos
números dos funcionários, sobrenomes dos funcionários e números dos
departamentos na tabela EMPLOYEES. O título do nome do funcionário deve ser
EMPLOYEE.
CREATE OR REPLACE VIEW employees_vu AS
SELECT employee_id, last_name employee, department_id
FROM employees;

Oracle Internal & Oracle Academy Use Only


2) Confirme o funcionamento da view. Exiba o conteúdo da view EMPLOYEES_VU.
SELECT *
FROM employees_vu;

3) Com a view EMPLOYEES_VU, escreva uma consulta para o departamento de RH a fim


de exibir todos os nomes dos funcionários e números de departamentos.
SELECT employee, department_id
FROM employees_vu;

4) O departamento 50 precisa acessar os dados dos seus funcionários. Crie uma view
denominada DEPT50 contendo os números dos funcionários, os sobrenomes dos
funcionários e os números dos departamentos de todos os funcionários do
departamento 50. Você foi solicitado a rotular as colunas da view EMPNO, EMPLOYEE
e DEPTNO. Para fins de segurança, não permita que um funcionário seja reatribuído a
outro departamento por meio da view.
CREATE VIEW dept50 AS
SELECT employee_id empno, last_name employee,
department_id deptno
FROM employees
WHERE department_id = 50
WITH CHECK OPTION CONSTRAINT emp_dept_50;

5) Exiba a estrutura e o conteúdo da view DEPT50.


DESCRIBE dept50

SELECT *
FROM dept50;
6) Teste a sua view. Tente reatribuir Matos ao departamento 80.
UPDATE dept50
SET deptno = 80
WHERE employee = 'Matos';

Oracle Database: Fundamentos de SQL I A - 84


Soluções do Exercício 11-1: Criando Outros Objetos de
Esquema (continuação)
O erro ocorre porque a view DEPT50 foi criada com a restrição WITH CHECK
OPTION. Isso garante que a coluna DEPTNO na view fique protegida contra alterações.

Parte 2
7) Você precisa de uma sequência que possa usada com a coluna de chave primária da
tabela DEPT. A sequência deve começar em 200 e ter um valor máximo de 1.000.
Incremente a sequência em 10. Ela deve se chamar DEPT_ID_SEQ.
CREATE SEQUENCE dept_id_seq
START WITH 200
INCREMENT BY 10

Oracle Internal & Oracle Academy Use Only


MAXVALUE 1000;

8) Para testar sua sequência, escreva um script para inserir duas linhas na tabela DEPT.
Atribua o nome lab_11_08.sql ao script. Não se esqueça de usar a sequência
criada para a coluna ID. Inclua dois departamentos: Education e Administration.
Confirme suas inclusões. Execute os comandos no script.
INSERT INTO dept
VALUES (dept_id_seq.nextval, 'Education');

INSERT INTO dept


VALUES (dept_id_seq.nextval, 'Administration');

9) Crie um índice não exclusivo na coluna NAME na tabela DEPT.


CREATE INDEX dept_name_idx ON dept (name);

10) Crie um sinônimo para a tabela EMPLOYEES. Chame-a de EMP.


CREATE SYNONYM emp FOR EMPLOYEES;

Oracle Database: Fundamentos de SQL I A - 85


Exercícios do Apêndice F
Este exercício pretende proporcionar uma experiência prática de extração de dados de
mais de uma tabela usando a sintaxe de join da Oracle.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 86


Exercício F-1: Sintaxe Join do Oracle
1) Crie uma consulta para o departamento de RH, obtendo os endereços de todos os
departamentos. Use as tabelas LOCATIONS e COUNTRIES. Mostre o ID do local, o
endereço, a cidade, o estado ou província e o país no resultado. Execute a consulta.

2) O departamento de RH precisa de um relatório de todos os funcionários. Crie uma


consulta para exibir o sobrenome, o número e o nome do departamento de todos os
funcionários. Execute a consulta.

Oracle Internal & Oracle Academy Use Only


3) O departamento de RH precisa de um relatório dos funcionários de Toronto. Mostre o


sobrenome, o cargo, o número e o nome do departamento de todos os funcionários
que trabalham em Toronto.

4) Crie um relatório para exibir os sobrenomes e os números dos funcionários,


juntamente com os sobrenomes e números dos seus gerentes. O label das colunas
deverá ser Employee, Emp#, Manager e Mgr#, respectivamente. Salve sua instrução
SQL como lab_f_04.sql.

Oracle Database: Fundamentos de SQL I A - 87


Exercício F-1: Sintaxe Join do Oracle (continuação)

5) Modifique lab_06_04.sql para exibir todos os funcionários, incluindo King, que


não têm um gerente. Organize os resultados por número de funcionário. Salve sua
instrução SQL como lab_f_05.sql. Execute a consulta em lab_f_05.sql.

Oracle Internal & Oracle Academy Use Only


6) Crie um relatório para o departamento de RH, mostrando os sobrenomes dos


funcionários, os números de departamento e todos os funcionários que trabalham no
mesmo departamento que um determinado funcionário. Dê um label apropriado a
cada coluna. Salve o script em um arquivo nomeado como lab_f_06.sql.

7) O departamento de RH precisa de um relatório com os graus e salários dos cargos.


Para se familiarizar com a tabela JOB_GRADES, primeiro mostre a estrutura da tabela
JOB_GRADES. Em seguida, crie uma consulta para exibir os nomes, os cargos, o
nome do departamento, os salários e os graus de todos os funcionários.

Oracle Database: Fundamentos de SQL I A - 88


Exercício F-1: Sintaxe Join do Oracle (continuação)

Oracle Internal & Oracle Academy Use Only


Se desejar um desafio adicional, faça os seguintes exercícios:
8) O departamento de RH precisa determinar os nomes de todos os funcionários que
foram contratados depois de Davies. Crie uma consulta para exibir o nome e a data
de contratação de todos os funcionários que foram contratados após o funcionário
Davies.

9) O departamento de RH precisa determinar os nomes e as datas de contratação de


todos os funcionários que foram contratados antes dos seus gerentes, juntamente
como os nomes dos seus gerentes e as datas de contratação. Salve o script em um
arquivo nomeado como lab_f_09.sql.

Oracle Database: Fundamentos de SQL I A - 89


Soluções dos Exercícios F-1: Sintaxe Join do Oracle
1) Crie uma consulta para o departamento de RH, obtendo os endereços de todos os
departamentos. Use as tabelas LOCATIONS e COUNTRIES. Mostre o ID do local, o
endereço, a cidade, o estado ou província e o país no resultado. Execute a consulta.
SELECT location_id, street_address, city, state_province,
country_name
FROM locations, countries
WHERE locations.country_id = countries.country_id;

2) O departamento de RH precisa de um relatório de todos os funcionários. Crie uma


consulta para exibir o sobrenome, o número e o nome do departamento de todos os
funcionários. Execute a consulta.

Oracle Internal & Oracle Academy Use Only


SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;
3) O departamento de RH precisa de um relatório dos funcionários de Toronto. Mostre o
sobrenome, o cargo, o número e o nome do departamento de todos os funcionários
que trabalham em Toronto.
SELECT e.last_name, e.job_id, e.department_id,
d.department_name
FROM employees e, departments d , locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id
AND LOWER(l.city) = 'toronto';
4) Crie um relatório para exibir os sobrenomes e os números dos funcionários,
juntamente com os sobrenomes e números dos seus gerentes. O label das colunas
deverá ser Employee, Emp#, Manager e Mgr#, respectivamente. Salve sua instrução
SQL como lab_f_04.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w, employees m
WHERE w.manager_id = m.employee_id;

5) Modifique lab_06_04.sql para exibir todos os funcionários, incluindo King, que


não têm um gerente. Organize os resultados por número de funcionário. Salve sua
instrução SQL como lab_f_05.sql. Execute a consulta em lab_f_05.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w, employees m
WHERE w.manager_id = m.employee_id (+);

Oracle Database: Fundamentos de SQL I A - 90


Soluções dos Exercícios F-1: Sintaxe Join do Oracle
(continuação)

6) Crie um relatório para o departamento de RH, mostrando os sobrenomes dos


funcionários, os números de departamento e todos os funcionários que trabalham no
mesmo departamento que um determinado funcionário. Dê um label apropriado a
cada coluna. Salve o script em um arquivo nomeado como lab_f_06.sql.
SELECT e1.department_id department, e1.last_name employee,
e2.last_name colleague
FROM employees e1, employees e2
WHERE e1.department_id = e2.department_id
AND e1.employee_id <> e2.employee_id
ORDER BY e1.department_id, e1.last_name, e2.last_name;

Oracle Internal & Oracle Academy Use Only


7) O departamento de RH precisa de um relatório com os graus e salários dos cargos.
Para se familiarizar com a tabela JOB_GRADES, primeiro mostre a estrutura da tabela
JOB_GRADES. Em seguida, crie uma consulta para exibir os nomes, os cargos, o
nome do departamento, os salários e os graus de todos os funcionários.
DESC JOB_GRADES

SELECT e.last_name, e.job_id, d.department_name,


e.salary, j.grade_level
FROM employees e, departments d, job_grades j
WHERE e.department_id = d.department_id
AND e.salary BETWEEN j.lowest_sal AND j.highest_sal;

Se desejar um desafio adicional, faça os seguintes exercícios:


8) O departamento de RH precisa determinar os nomes de todos os funcionários que
foram contratados depois de Davies. Crie uma consulta para exibir o nome e a data
de contratação de todos os funcionários que foram contratados após Davies.
SELECT e.last_name, e.hire_date
FROM employees e , employees davies
WHERE davies.last_name = 'Davies'
AND davies.hire_date < e.hire_date;
9) O departamento de RH precisa determinar os nomes e as datas de contratação de
todos os funcionários que foram contratados antes dos seus gerentes, juntamente
como os nomes dos seus gerentes e as datas de contratação. O label das colunas
deverá ser Employee, Emp Hired, Manager e Mgr Hired, respectivamente. Salve
o script em um arquivo nomeado como lab_f_09.sql.
SELECT w.last_name, w.hire_date, m.last_name, m.hire_date
FROM employees w, employees m
WHERE w.manager_id = m.employee_id
AND w.hire_date < m.hire_date;

Oracle Database: Fundamentos de SQL I A - 91


Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I A - 92


Apêndice AP
Exercícios e Soluções Adicionais

Oracle Internal & Oracle Academy Use Only


Índice
Exercícios Adicionais ......................................................................................................... 3
Exercício 1-1................................................................................................................... 4
Soluções do Exercício 1-1 ............................................................................................ 12
Estudo de Caso.................................................................................................................. 17
Exercício 2-1................................................................................................................. 19
Soluções do Exercício 2-1 ............................................................................................ 27

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I AP - 2


Exercícios Adicionais

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I AP - 3


Exercício 1-1
Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: instrução SQL SELECT básica, comandos SQL Developer básicos e
funções SQL.
1) O departamento de RH precisa localizar os dados de todos os funcionários que foram
contratados a partir de 1997.

2) O departamento de RH precisa de um relatório dos funcionários que ganham


comissão. Mostre o sobrenome, o cargo, o salário e a comissão desses funcionários.
Organize os dados por salário em ordem descendente.

Oracle Internal & Oracle Academy Use Only


3) Para fins orçamentários, o departamento de RH precisa de um relatório sobre os
aumentos estimados. O relatório deve exibir os funcionários que não ganham
comissão, mas que obtiveram um aumento de 10% no salário (salários arredondados).

Oracle Database: Fundamentos de SQL I AP - 4


Exercício 1-1 (continuação)
4) Crie um relatório dos funcionários e seus respectivos tempos de serviço. Coloque os
sobrenomes de todos os funcionários juntamente com o total de anos e meses de
serviço que eles já completaram. Organize o relatório pelo tempo de serviço de cada
um. O funcionário com o maior tempo de serviço deve aparecer em primeiro lugar na
lista.

Oracle Internal & Oracle Academy Use Only


5) Mostre os funcionários com sobrenomes que começam pelas letras “J,” “K,” “L,” ou
“M.”

Oracle Database: Fundamentos de SQL I AP - 5


Exercício 1-1 (continuação)
6) Crie um relatório com todos os funcionários e indique se eles recebem uma comissão,
utilizando as palavras Sim ou Não. Use a expressão DECODE na consulta.

Oracle Internal & Oracle Academy Use Only


Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instrução SQL SELECT básica, comandos básicos do SQL Developer,
funções SQL, joins e funções de grupo.
7) Crie um relatório com o nome do departamento, ID do local, sobrenome, cargo e
salário dos funcionários que trabalham em determinado local. Solicite que o usuário
informe o local. Por exemplo, se o usuário digitar 1800, estes serão os resultados:

8) Calcule o número de funcionários com sobrenomes que terminam com a letra “n”.
Crie duas soluções possíveis.

Oracle Database: Fundamentos de SQL I AP - 6


Exercício 1-1 (continuação)
9) Crie um relatório com o nome, local e número de funcionários de cada departamento.
Certifique-se de que o relatório também inclua departamentos sem funcionários.

10) O departamento de RH precisa descobrir quais são os cargos existentes nos

Oracle Internal & Oracle Academy Use Only


departamentos 10 e 20. Crie um relatório mostrando as IDs dos cargos desses
departamentos.

11) Crie um relatório que mostre os cargos encontrados nos departamentos de


Administração e Executivo. Mostre também o número de funcionários que ocupam
esses cargos. Mostre o cargo com a maior quantidade de funcionários, primeiro.

Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instruções SQL SELECT básicas, comandos básicos do SQL
Developer, funções SQL, joins, funções de grupo de subconsultas.
12) Mostre todos os funcionários que foram contratados na primeira metade do mês
(antes do dia 16).

Oracle Database: Fundamentos de SQL I AP - 7


Exercício 1-1 (continuação)

13) Crie um relatório que mostre as seguintes informações sobre todos os funcionários:
Sobrenome, salário e salário expresso em milhares de dólares.

Oracle Internal & Oracle Academy Use Only


14) Mostre todos os funcionários cujos gerentes ganham salários superiores a US$
15.000,00. Mostre os seguintes dados: nome do funcionário, nome do gerente, salário
do gerente e nível salarial do gerente.

Oracle Database: Fundamentos de SQL I AP - 8


Exercício 1-1 (continuação)

15) Mostre o número e o nome do departamento, a quantidade de funcionários, o salário


médio de todos os departamentos, juntamente com os nomes, salários e cargos dos
funcionários que trabalham em cada departamento.

Oracle Internal & Oracle Academy Use Only


16) Crie um relatório para exibir o número do departamento e o menor salário do
departamento com a média salarial mais alta.

17) Crie um relatório que mostre os departamentos que não contam com o trabalho de
representantes de vendas. Inclua o número do departamento, o nome do
departamento, o ID do gerente e seu respectivo local.

Oracle Database: Fundamentos de SQL I AP - 9


Exercício 1-1 (continuação)

18) Crie os seguintes relatórios de estatísticas para o departamento de RH: Inclua o


número do departamento, o nome do departamento e o número de funcionários que
trabalham nos departamentos que:
a) tenham menos de três funcionários:

b) tenha a maior quantidade de funcionários:

Oracle Internal & Oracle Academy Use Only


c) tenha a menor quantidade de funcionários:

19) Crie um relatório mostrando o número dos funcionários, o sobrenome, o salário, o


número do departamento e a média salarial de todos os funcionários do departamento.

Oracle Database: Fundamentos de SQL I AP - 10


Exercício 1-1 (continuação)

20) Mostre todos os funcionários que foram contratados no dia da semana em que houve
o maior número de contratações de funcionários.

21) Crie um aniversário com base na data de contratação dos funcionários. Organize os

Oracle Internal & Oracle Academy Use Only


aniversários em ordem ascendente.

Oracle Database: Fundamentos de SQL I AP - 11


Soluções do Exercício 1-1
Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: instrução SQL SELECT básica, comandos SQL Developer básicos e
funções SQL.
1) O departamento de RH precisa localizar os dados de todos os funcionários que foram
contratados a partir de 1997.
SELECT *
FROM employees
WHERE job_id = 'ST_CLERK'
AND hire_date > '31-DEC-1997';

2) O departamento de RH precisa de um relatório dos funcionários que ganham


comissão. Mostre o sobrenome, o cargo, o salário e a comissão desses funcionários.

Oracle Internal & Oracle Academy Use Only


Organize os dados por salário em ordem descendente.
SELECT last_name, job_id, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC;
3) Para fins orçamentários, o departamento de RH precisa de um relatório sobre os
aumentos estimados. O relatório deve exibir os funcionários que não ganham
comissão, mas que obtiveram um aumento de 10% no salário (salários arredondados).
SELECT 'The salary of '||last_name||' after a 10% raise is '
|| ROUND(salary*1.10) "New salary"
FROM employees
WHERE commission_pct IS NULL;
4) Crie um relatório dos funcionários e seus respectivos tempos de serviço. Coloque os
sobrenomes de todos os funcionários juntamente com o total de anos e meses de
serviço que eles já completaram. Organize o relatório pelo tempo de serviço de cada
um. O funcionário com o maior tempo de serviço deve aparecer em primeiro lugar na
lista.
SELECT last_name,
TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date) / 12) YEARS,
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hire_date), 12))
MONTHS
FROM employees
ORDER BY years DESC, MONTHS desc;

5) Mostre os funcionários com sobrenomes que começam pelas letras “J,” “K,” “L,” ou
“M.”
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1,1) IN ('J', 'K', 'L', 'M');

Oracle Database: Fundamentos de SQL I AP - 12


Soluções do Exercício 1-1 (continuação)
6) Crie um relatório com todos os funcionários e indique se eles recebem uma comissão,
utilizando as palavras Sim ou Não. Use a expressão DECODE na consulta.
SELECT last_name, salary,
decode(commission_pct, NULL, 'No', 'Yes') commission
FROM employees;

Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instrução SQL SELECT básica, comandos básicos do SQL Developer,
funções SQL, joins e funções de grupo.
7) Crie um relatório com o nome do departamento, ID do local, nome, cargo e salário
dos funcionários que trabalham em um determinado local. Solicite que o usuário

Oracle Internal & Oracle Academy Use Only


informe o local.
a) Informe 1800 em location_id, quando solicitado.
SELECT d.department_name, d.location_id, e.last_name,
e.job_id, e.salary
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.location_id = &location_id;

8) Calcule o número de funcionários com sobrenomes que terminam com a letra “n”.
Crie duas soluções possíveis.
SELECT COUNT(*)
FROM employees
WHERE last_name LIKE '%n';
--or
SELECT COUNT(*)
FROM employees
WHERE SUBSTR(last_name, -1) = 'n';
9) Crie um relatório com o nome, local e número de funcionários de cada departamento.
Certifique-se de que o relatório também inclua departamentos sem funcionários.
SELECT d.department_id, d.department_name,
d.location_id, COUNT(e.employee_id)
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name, d.location_id;

10) O departamento de RH precisa descobrir quais são os cargos existentes nos


departamentos 10 e 20. Crie um relatório mostrando as IDs dos cargos desses
departamentos.
SELECT DISTINCT job_id
FROM employees
WHERE department_id IN (10, 20);

Oracle Database: Fundamentos de SQL I AP - 13


Soluções do Exercício 1-1 (continuação)
11) Crie um relatório que mostre os cargos encontrados nos departamentos de
Administração e Executivo. Mostre também o número de funcionários que ocupam
esses cargos. Mostre o cargo com a maior quantidade de funcionários, primeiro.
SELECT e.job_id, count(e.job_id) FREQUENCY
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_name IN ('Administration', 'Executive')
GROUP BY e.job_id
ORDER BY FREQUENCY DESC;

Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instruções SQL SELECT básicas, comandos básicos do SQL

Oracle Internal & Oracle Academy Use Only


Developer, funções SQL, joins, funções de grupo de subconsultas.
12) Mostre todos os funcionários que foram contratados na primeira metade do mês
(antes do dia 16).
SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'DD') < 16;
13) Crie um relatório que mostre as seguintes informações sobre todos os funcionários:
Sobrenome, salário e salário expresso em milhares de dólares.
SELECT last_name, salary, TRUNC(salary, -3)/1000 Thousands
FROM employees;
14) Mostre todos os funcionários cujos gerentes ganham salários superiores a US$
15.000,00. Mostre os seguintes dados: nome do funcionário, nome do gerente, salário
do gerente e nível salarial do gerente.
SELECT e.last_name, m.last_name manager, m.salary,
j.grade_level
FROM employees e JOIN employees m
ON e.manager_id = m.employee_id
JOIN job_grades j
ON m.salary BETWEEN j.lowest_sal AND j.highest_sal
AND m.salary > 15000;

Oracle Database: Fundamentos de SQL I AP - 14


Soluções do Exercício 1-1 (continuação)
15) Mostre o número e o nome do departamento, a quantidade de funcionários, o salário
médio de todos os departamentos, juntamente com os nomes, salários e cargos dos
funcionários que trabalham em cada departamento.
SELECT d.department_id, d.department_name,
count(e1.employee_id) employees,
NVL(TO_CHAR(AVG(e1.salary), '99999.99'), 'No average'
) avg_sal,
e2.last_name, e2.salary, e2.job_id
FROM departments d RIGHT OUTER JOIN employees e1
ON d.department_id = e1.department_id
RIGHT OUTER JOIN employees e2
ON d.department_id = e2.department_id
GROUP BY d.department_id, d.department_name, e2.last_name,

Oracle Internal & Oracle Academy Use Only


e2.salary,
e2.job_id
ORDER BY d.department_id, employees;

16) Crie um relatório para exibir o número do departamento e o menor salário do


departamento com a média salarial mais alta.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id);
17) Crie um relatório que mostre os departamentos que não contam com o trabalho de
representantes de vendas. Inclua o número do departamento, o nome do departamento
e seu respectivo local.
SELECT *
FROM departments
WHERE department_id NOT IN(SELECT department_id
FROM employees
WHERE job_id = 'SA_REP'
AND department_id IS NOT NULL);

18) Crie os seguintes relatórios de estatísticas para o departamento de RH: Inclua o


número do departamento, o nome do departamento e o número de funcionários que
trabalham nos departamentos que:
a) tenham menos de três funcionários:
SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) < 3;

Oracle Database: Fundamentos de SQL I AP - 15


Soluções do Exercício 1-1 (continuação)
b) tenha a maior quantidade de funcionários:
SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY department_id);

c) tenha a menor quantidade de funcionários:


SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e

Oracle Internal & Oracle Academy Use Only


ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY department_id);
19) Crie um relatório mostrando o número dos funcionários, o sobrenome, o salário, o
número do departamento e a média salarial de todos os funcionários do departamento.
SELECT e.employee_id, e.last_name, e.department_id, e.salary,
AVG(s.salary)
FROM employees e JOIN employees s
ON e.department_id = s.department_id
GROUP BY e.employee_id, e.last_name, e.department_id,
e.salary;
20) Mostre todos os funcionários que foram contratados no dia da semana em que houve
o maior número de contratações de funcionários.
SELECT last_name, TO_CHAR(hire_date, 'DAY') day
FROM employees
WHERE TO_CHAR(hire_date, 'Day') =
(SELECT TO_CHAR(hire_date, 'Day')
FROM employees
GROUP BY TO_CHAR(hire_date, 'Day')
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY TO_CHAR(hire_date,
'Day')));
21) Crie um aniversário com base na data de contratação dos funcionários. Organize os
aniversários em ordem ascendente.
SELECT last_name, TO_CHAR(hire_date, 'Month DD') BIRTHDAY
FROM employees
ORDER BY TO_CHAR(hire_date, 'DDD');

Oracle Database: Fundamentos de SQL I AP - 16


Estudo de Caso
Neste estudo de caso, você deve criar um conjunto de tabelas de banco de dados para
uma aplicação de vídeo. Após a criação das tabelas, você deverá inserir, atualizar e
deletar registros no banco de dados de uma videolocadora e gerar um relatório. O banco
de dados contém somente as tabelas essenciais.
Veja, a seguir, um diagrama das entidades e atributos para a aplicação de vídeo:

TÍTULO
loop #* id
RESERVATION * título
#* res date o assunto * descrição
de classificação o

Oracle Internal & Oracle Academy Use Only


configurada categoria o
data de liberação 0

disponível

uma
responsável cópia
loop
TITLE_COPY
MEMBRO #* id
#* id * status
* sobrenome
nome o o assunto de
endereço o responsável
cidade o loop em relação a
telefone o
* data de admissão LOCAÇÃO
criada #* data de reserva
loop data de dev real o
data de dev prev o

Observação:Se você quiser criar as tabelas, poderá executar os comandos no script


buildtab.sql no SQL Developer. Se você quiser eliminar as tabelas, poderá executar
os comandos no script dropvid.sql no SQL Developer. Em seguida, é possível
executar os comandos no script buildvid.sql no SQL Developer para criar e
preencher as tabelas.
Todos os três scripts SQL estão presentes na pasta
/home/oracle/labs/sql1/labs.
• Se você usar o script buildtab.sql para criar as tabelas, comece pela etapa 4.

Oracle Database: Fundamentos de SQL I AP - 17


Soluções do Exercício 1-1 (continuação)
• Se você usar o script dropvid.sql para remover as tabelas de vídeo, comece
pela etapa 1.
• Se você usar o script buildvid.sql para criar e preencher as tabelas, comece
pela etapa 6(b).

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I AP - 18


Exercício 2-1
1) Crie as tabelas com base nos seguintes gráficos de instância de tabelas. Escolha os
tipos de dados apropriados e certifique-se de adicionar restrições de integridade.
a) Nome da tabela: MEMBRO
Column_ MEMBER_ LAST_ FIRST_NAME ADDRESS CITY PHONE JOIN
Name ID NAME _
DATE
Key PK
Type
Null/ NN,U NN NN
Unique
Default System
Value Date

Oracle Internal & Oracle Academy Use Only


Data NUMBER VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 DATE
Type
Length 10 25 25 100 30 15

b) Nome da tabela: TÍTULO

Column_ TITLE_ID TITLE DESCRIPTION RATING CATEGORY RELEASE_


Name DATE
Key PK
Type
Null/ NN,U NN NN
Unique
Check G, PG, R, DRAMA,
NC17, NR COMEDY,
ACTION,
CHILD,
SCIFI,
DOCUMEN
TARY
Data Type NUMBER VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 DATE

Length 10 60 400 4 20

Oracle Database: Fundamentos de SQL I AP - 19


Exercício 2-1 (continuação)

c) Nome da tabela: TITLE_COPY


Column COPY_ID TITLE_ID STATUS
Name
Key PK PK,FK
Type
Null/ NN,U NN,U NN
Unique
Check AVAILABLE,
DESTROYED,
RENTED,
RESERVED

Oracle Internal & Oracle Academy Use Only


FK Ref TITLE
Table
FK Ref TITLE_ID
Col
Data NUMBER NUMBER VARCHAR2
Type
Length 10 10 15

d) Nome da tabela: LOCAÇÃO


Column BOOK_ MEMBER_ COPY_ ACT_RET_ EXP_RET_ TITLE_
Name DATE ID ID DATE DATE ID
Key PK PK,FK1 PK,FK2 PK,FK2
Type
Default System System Date
Value Date + 2 days
FK Ref MEMBER TITLE_ TITLE_
Table COPY COPY
FK Ref MEMBER_I COPY_ TITLE_ID
Col D ID
Data DATE NUMBER NUMBER DATE DATE NUMBER
Type
Length 10 10 10

Oracle Database: Fundamentos de SQL I AP - 20


Exercício 2-1 (continuação)
e) Nome da tabela: RESERVATION
2) Verifique se a tabela foi criada corretamente por meio do Connections Navigator no
SQL Developer.

Oracle Internal & Oracle Academy Use Only


3) Crie sequências que forneçam identificação exclusiva a cada linha nas tabelas
MEMBER e TITLE.
a) Número do sócio da tabela MEMBER: Comece por 101; não permita o
armazenamento em cache dos valores. Dê um nome à sequência
MEMBER_ID_SEQ.
b) Número do título na tabela TITLE: Comece por 92; não permita o armazenamento
em cache dos valores. Dê um nome à sequência TITLE_ID_SEQ.
c) Verifique a existência das sequências por meio do Connections Navigator no SQL
Developer.

Oracle Database: Fundamentos de SQL I AP - 21


Exercício 2-1 (continuação)

Oracle Internal & Oracle Academy Use Only


4) Adicione dados às tabelas. Crie um script para cada conjunto de dados a ser
adicionado.
a) Adicione títulos de filmes à tabela TITLE. Crie um script para inserir as
informações dos filmes. Salve as instruções em script com o nome
lab_apcs_4a.sql. Use as sequências para fornecer identificação exclusiva a
cada título. Insira as datas de lançamento no formato DD-MMM-AAAA. Lembre-
se que as aspas simples exigem condições especiais em um campo de caracteres.
Verifique as adições realizadas.

Oracle Database: Fundamentos de SQL I AP - 22


Exercício 2-1 (continuação)

Título Descrição Rating Categoria Release_date


Willie and All of Willie’s friends G CHILD 05-OCT-1995
Christmas Too make a Christmas list for
Santa, but Willie has yet
to add his own wish list.
Alien Again Yet another installation of R SCIFI 19-MAY-1995
science fiction history.
Can the heroine save the
planet from the alien life
form?
The Glob A meteor crashes near a NR SCIFI 12-AUG-1995
small American town and
unleashes carnivorous goo

Oracle Internal & Oracle Academy Use Only


in this classic.
My Day Off With a little luck and a lot PG COMEDY 12-JUL-1995
of ingenuity, a teenager
skips school for a day in
New York.
Miracles on Ice A six-year-old has doubts PG DRAMA 12-SEP-1995
about Santa Claus, but she
discovers that miracles
really do exist.
Soda Gang After discovering a cache NR ACTION 01-JUN-1995
of drugs, a young couple
find themselves pitted
against a vicious gang.
b) Adicione dados à tabela MEMBER. Salve as instruções inseridas em um script com
o nome lab_apcs_4b.sql. Execute comandos no script. Certifique-se de usar a
sequência para adicionar os números dos sócios.
First_
Nome Last_Name Endereço City Phone Join_Date
Carmen Velasquez 283 King Seattle 206-899- 08-MAR-
Street 6666 1990
LaDoris Ngao 5 Modrany Bratislava 586-355- 08-MAR-
8882 1990
Midori Nagayama 68 Via Sao Paolo 254-852- 17-JUN-
Centrale 5764 1991
Mark Quick-to-See 6921 King Lagos 63-559-7777 07-APR-1990
Street
Audry Ropeburn 86 Chu Street Hong Kong 41-559-87 18-JAN-
1991
Molly Urguhart 3035 Laurier Quebec 418-542- 18-JAN-
9988 1991

Oracle Database: Fundamentos de SQL I AP - 23


Exercício 2-1 (continuação)
c) Adicione as seguintes cópias de filmes à tabela TITLE_COPY:
Observação:Utilize os números em TITLE_ID para este exercício.
Título Copy_Id Status Título Copy_Id

Willie and 1 DISPONÍVEL Willie and Christmas 1


Christmas Too Too
Alien Again 1 DISPONÍVEL Alien Again 1

2 RENTED 2

The Glob 1 DISPONÍVEL The Glob 1

My Day Off 1 DISPONÍVEL My Day Off 1

Oracle Internal & Oracle Academy Use Only


2 DISPONÍVEL 2

3 RENTED 3

Miracles on Ice 1 DISPONÍVEL Miracles on Ice 1

Soda Gang 1 DISPONÍVEL Soda Gang 1

d) Adicione os seguintes aluguéis à tabela RENTAL:


Observação:O número do título pode variar, dependendo do número sequencial.
Title_ Id Copy_ Member_Id
Id Book_date Exp_Ret_Date
92 1 101 3 days ago 1 day ago

93 2 101 1 day ago 1 day from now

95 3 102 2 days ago Today

97 1 106 4 days ago 2 days ago

Oracle Database: Fundamentos de SQL I AP - 24


Exercício 2-1 (continuação)
5) Crie uma view com o nome TITLE_AVAIL para mostrar os títulos dos filmes, a
disponibilidade de cada cópia e a data de retorno estimado, caso estejam alugados.
Consulte todas as linhas na view. Organize os resultados por título.
Observação:Os resultados podem variar.

Oracle Internal & Oracle Academy Use Only


6) Faça alterações nos dados das tabelas.
a) Adicione um novo título. O nome do filme é “Interstellar Wars,” classificado
como PG, do gênero ficção científica. A data de lançamento é 07-JUL-77. A
descrição é “Futuristic interstellar action movie. Can the rebels save the humans
from the evil empire?” Certifique-se de adicionar um registro de cópia do título a
duas cópias.
b) Insira duas reservas. Uma reserva é para Carmen Velasquez, que deseja alugar
“Interstellar Wars”. A outra reserva é para Mark Quick-to-See, que deseja alugar
“Soda Gang”.

Oracle Database: Fundamentos de SQL I AP - 25


Exercício 2-1 (continuação)
7) Faça uma modificação em uma das tabelas.
a) Execute o script lab_apcs_7a.sql localizado na pasta
/home/oracle/labs/sql1/labs para adicionar uma coluna PRICE à tabela
TITLE e registrar o preço de compra do vídeo. Verifique as modificações.

Oracle Internal & Oracle Academy Use Only


Título Price
Willie and Christmas Too 25
Alien Again 35
The Glob 35
My Day Off 35
Miracles on Ice 30
Soda Gang 35
Interstellar Wars 29

b) Crie um script com o nome lab_apcs_7b.sql contendo instruções de


atualização para atualizar cada vídeo com o preço de acordo com a lista anterior.
Execute os comandos no script.
Observação:Utilize os números em TITLE_ID para este exercício.
8) Crie um relatório com o histórico de aluguéis de vídeos de cada cliente. Certifique-se
de incluir o nome do cliente, os filmes alugados, as datas dos aluguéis e a duração dos
aluguéis. Calcule o número de aluguéis de todos os clientes durante o período que
consta no relatório. Salve os comandos que geram o relatório em um arquivo de script
com o nome lab_apcs_8.sql.
Observação:Os resultados podem variar.

Oracle Database: Fundamentos de SQL I AP - 26


Soluções do Exercício 2-1
1) Crie as tabelas com base nos seguintes gráficos de instância de tabelas. Escolha os
tipos de dados apropriados e certifique-se de adicionar restrições de integridade.
a) Nome da tabela: MEMBRO
CREATE TABLE member
(member_id NUMBER(10)
CONSTRAINT member_member_id_pk PRIMARY KEY,
last_name VARCHAR2(25)
CONSTRAINT member_last_name_nn NOT NULL,
first_name VARCHAR2(25),
address VARCHAR2(100),
city VARCHAR2(30),

Oracle Internal & Oracle Academy Use Only


phone VARCHAR2(15),
join_date DATE DEFAULT SYSDATE
CONSTRAINT member_join_date_nn NOT NULL);

b) Nome da tabela: TÍTULO


CREATE TABLE title
(title_id NUMBER(10)
CONSTRAINT title_title_id_pk PRIMARY KEY,
title VARCHAR2(60)
CONSTRAINT title_title_nn NOT NULL,
description VARCHAR2(400)
CONSTRAINT title_description_nn NOT NULL,
rating VARCHAR2(4)
CONSTRAINT title_rating_ck CHECK
(rating IN ('G', 'PG', 'R', 'NC17', 'NR')),
category VARCHAR2(20)
CONSTRAINT title_category_ck CHECK
(category IN ('DRAMA', 'COMEDY', 'ACTION',
'CHILD', 'SCIFI', 'DOCUMENTARY')),
release_date DATE);

c) Nome da tabela: TITLE_COPY


CREATE TABLE title_copy
(copy_id NUMBER(10),
title_id NUMBER(10)
CONSTRAINT title_copy_title_if_fk REFERENCES
title(title_id),
status VARCHAR2(15)
CONSTRAINT title_copy_status_nn NOT NULL
CONSTRAINT title_copy_status_ck CHECK (status IN
('AVAILABLE', 'DESTROYED','RENTED', 'RESERVED')),
CONSTRAINT title_copy_copy_id_title_id_pk
PRIMARY KEY (copy_id, title_id));

Oracle Database: Fundamentos de SQL I AP - 27


Soluções do Exercício 2-1 (continuação)
d) Nome da tabela: LOCAÇÃO
CREATE TABLE rental
(book_date DATE DEFAULT SYSDATE,
member_id NUMBER(10)
CONSTRAINT rental_member_id_fk REFERENCES
member(member_id),
copy_id NUMBER(10),
act_ret_date DATE,
exp_ret_date DATE DEFAULT SYSDATE + 2,
title_id NUMBER(10),
CONSTRAINT rental_book_date_copy_title_pk
PRIMARY KEY (book_date, member_id, copy_id,title_id),
CONSTRAINT rental_copy_id_title_id_fk

Oracle Internal & Oracle Academy Use Only


FOREIGN KEY (copy_id, title_id)
REFERENCES title_copy(copy_id, title_id));

e) Nome da tabela: RESERVATION


CREATE TABLE reservation
(res_date DATE,
member_id NUMBER(10)
CONSTRAINT reservation_member_id REFERENCES
member(member_id),
title_id NUMBER(10)
CONSTRAINT reservation_title_id REFERENCES
title(title_id),
CONSTRAINT reservation_resdate_mem_tit_pk PRIMARY KEY
(res_date, member_id, title_id));
2) Verifique se a tabela foi criada corretamente por meio do Connections Navigator no
SQL Developer.
a) No Connections Navigator, expanda Connections > myconnection > Tables.
3) Crie sequências que forneçam identificação exclusiva a cada linha nas tabelas
MEMBER e TITLE.
a) Número do sócio da tabela MEMBER: Comece por 101; não permita o
armazenamento em cache dos valores. Dê um nome à sequência
MEMBER_ID_SEQ.
CREATE SEQUENCE member_id_seq
START WITH 101
NOCACHE;

b) Número do título na tabela TITLE: Comece por 92; não permita o armazenamento
em cache dos valores. Dê um nome à sequência TITLE_ID_SEQ.
CREATE SEQUENCE title_id_seq
START WITH 92
NOCACHE;

Oracle Database: Fundamentos de SQL I AP - 28


Soluções do Exercício 2-1 (continuação)
c) Verifique a existência das sequências por meio do Connections Navigator no SQL
Developer.
i) No Connections Navigator, pressupondo que o nó myconnection esteja
expandido, expanda Sequences.
4) Adicione dados às tabelas. Crie um script para cada conjunto de dados a ser
adicionado.
a) Adicione títulos de filmes à tabela TITLE. Crie um script para inserir as
informações dos filmes. Salve as instruções em script com o nome
lab_apcs_4a.sql. Use as sequências para fornecer identificação exclusiva a
cada título. Insira as datas de lançamento no formato DD-MMM-AAAA. Lembre-
se que as aspas simples exigem condições especiais em um campo de caracteres.

Oracle Internal & Oracle Academy Use Only


Verifique as adições realizadas.
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Willie and Christmas Too',
'All of Willie''s friends make a Christmas list for
Santa, but Willie has yet to add his own wish list.',
'G', 'CHILD', TO_DATE('05-OCT-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Alien Again', 'Yet another
installment of science fiction history. Can the
heroine save the planet from the alien life form?',
'R', 'SCIFI', TO_DATE( '19-MAY-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'The Glob', 'A meteor crashes
near a small American town and unleashes carnivorous
goo in this classic.', 'NR', 'SCIFI',
TO_DATE( '12-AUG-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'My Day Off', 'With a little
luck and a lot ingenuity, a teenager skips school
for
a day in New York.', 'PG', 'COMEDY',
TO_DATE( '12-JUL-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Miracles on Ice', 'A six-
year-old has doubts about Santa Claus, but she discovers
that miracles really do exist.', 'PG', 'DRAMA',
TO_DATE('12-SEP-1995','DD-MON-YYYY'))
/

Oracle Database: Fundamentos de SQL I AP - 29


Soluções do Exercício 2-1 (continuação)

INSERT INTO title(title_id, title, description, rating,


category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Soda Gang', 'After
discovering a cache of drugs, a young couple find themselves
pitted against a vicious gang.', 'NR', 'ACTION', TO_DATE('01-
JUN-1995','DD-MON-YYYY'))
/
COMMIT
/
SELECT title
FROM title;

Oracle Internal & Oracle Academy Use Only


b) Adicione dados à tabela MEMBER. Coloque as instruções inseridas em um script
com o nome lab_apcs_4b.sql. Execute os comandos no script. Certifique-se
de usar a sequência para adicionar os números dos sócios.
SET VERIFY OFF
INSERT INTO member(member_id, last_name, first_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Carmen', 'Velasquez',
'283 King Street', 'Seattle', '206-899-6666',
TO_DATE('08-MAR-1990',
'DD-MM-AAAA'))
/

INSERT INTO member(member_id, last_name, first_name,


address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'LaDoris', 'Ngao',
'5 Modrany', 'Bratislava', '586-355-8882',
TO_DATE('08-MAR-1990',
'DD-MM-AAAA'))
/

INSERT INTO member(member_id, last_name, first_name,


address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Midori', 'Nagayama',
'68 Via Centrale', 'Sao Paolo', '254-852-5764',
TO_DATE('17-JUN-1991',
'DD-MM-AAAA'))
/

INSERT INTO member(member_id, last_name, first_name,


address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Mark', 'Quick-to-See',
'6921 King Way', 'Lagos', '63-559-7777', TO_DATE('07-
APR-1990',
'DD-MM-AAAA'))
/

Oracle Database: Fundamentos de SQL I AP - 30


Soluções do Exercício 2-1 (continuação)

INSERT INTO member(member_id, last_name, first_name,


address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Audry', 'Ropeburn',
'86 Chu Street', 'Hong Kong', '41-559-87',
TO_DATE('18-JAN-1991',
'DD-MM-AAAA'))
/

INSERT INTO member(member_id, last_name, first_name,


address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Molly', 'Urguhart',
'3035 Laurier', 'Quebec', '418-542-9988', TO_DATE('18-

Oracle Internal & Oracle Academy Use Only


JAN-1991',
'DD-MM-YYYY'));
/

COMMIT
SET VERIFY ON

c) Adicione as seguintes cópias de filmes à tabela TITLE_COPY:


Observação:Utilize os números em TITLE_ID para este exercício.
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (1, 92, 'AVAILABLE')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (1, 93, 'AVAILABLE')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (2, 93, 'RENTED')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (1, 94, 'AVAILABLE')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (1, 95, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (2, 95, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (3, 95, 'RENTED')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (1, 96, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (1, 97, 'AVAILABLE')
/

Oracle Database: Fundamentos de SQL I AP - 31


Soluções do Exercício 2-1 (continuação)
d) Adicione os seguintes aluguéis à tabela RENTAL:
Observação:O número do título pode variar, dependendo do número sequencial.
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (92, 1, 101, sysdate-3, sysdate-1, sysdate-2)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (93, 2, 101, sysdate-1, sysdate-1, NULL)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (95, 3, 102, sysdate-2, sysdate, NULL)

Oracle Internal & Oracle Academy Use Only


/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date,act_ret_date)
VALUES (97, 1, 106, sysdate-4, sysdate-2, sysdate-2)
/
COMMIT
/

5) Crie uma view com o nome TITLE_AVAIL para mostrar os títulos dos filmes, a
disponibilidade de cada cópia e a data de retorno estimado, caso estejam alugados.
Consulte todas as linhas na view. Organize os resultados por título.
Observação:Os resultados podem variar.
CREATE VIEW title_avail AS
SELECT t.title, c.copy_id, c.status, r.exp_ret_date
FROM title t JOIN title_copy c
ON t.title_id = c.title_id
FULL OUTER JOIN rental r
ON c.copy_id = r.copy_id
AND c.title_id = r.title_id;

SELECT *
FROM title_avail
ORDER BY title, copy_id;

Oracle Database: Fundamentos de SQL I AP - 32


Soluções do Exercício 2-1 (continuação)
6) Faça alterações nos dados das tabelas.
a) Adicione um novo título. O nome do filme é “Interstellar Wars,” classificado
como PG, do gênero ficção científica. A data de lançamento é 07-JUL-77. A
descrição é “Futuristic interstellar action movie. Can the rebels save the humans
from the evil empire?” Certifique-se de adicionar um registro de cópia do título a
duas cópias.
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Interstellar Wars',
'Futuristic interstellar action movie. Can the
rebels save the humans from the evil empire?',
'PG', 'SCIFI', '07-JUL-77')

Oracle Internal & Oracle Academy Use Only


/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (1, 98, 'AVAILABLE')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (2, 98, 'AVAILABLE')
/
b) Insira duas reservas. Uma reserva é para Carmen Velasquez, que deseja alugar
“Interstellar Wars”. A outra reserva é para Mark Quick-to-See, que deseja alugar
“Soda Gang”.
INSERT INTO reservation (res_date, member_id, title_id)
VALUES (SYSDATE, 101, 98)
/
INSERT INTO reservation (res_date, member_id, title_id)
VALUES (SYSDATE, 104, 97)
/
7) Faça uma modificação em uma das tabelas.
a) Execute o script lab_apcs_7a.sql localizado na pasta
/home/oracle/labs/sql1/labs para adicionar uma coluna PRICE à tabela
TITLE e registrar o preço de compra do vídeo. Verifique as modificações.
ALTER TABLE title
ADD (price NUMBER(8,2));

DESCRIBE title

Oracle Database: Fundamentos de SQL I AP - 33


Soluções do Exercício 2-1 (continuação)
b) Crie um script com o nome lab_apcs_7b.sql contendo instruções de
atualização para atualizar cada vídeo com o preço de acordo com a lista fornecida.
Execute os comandos no script.
Observação:Utilize os números em TITLE_ID para este exercício.
SET ECHO OFF
SET VERIFY OFF
UPDATE title
SET price = &price
WHERE title_id = &title_id;
SET VERIFY OFF
SET ECHO OFF

8) Crie um relatório com o histórico de aluguéis de vídeos de cada cliente. Certifique-se

Oracle Internal & Oracle Academy Use Only


de incluir o nome do cliente, os filmes alugados, as datas dos aluguéis e a duração dos
aluguéis. Calcule o número de aluguéis de todos os clientes durante o período que
consta no relatório. Salve os comandos que geram o relatório em um arquivo de script
com o nome lab_apcs_8.sql.
Observação:Os resultados podem variar.
SELECT m.first_name||' '||m.last_name MEMBER, t.title,
r.book_date, r.act_ret_date - r.book_date DURATION
FROM member m
JOIN rental r
ON r.member_id = m.member_id
JOIN title t
ON r.title_id = t.title_id
ORDER BY member;

Oracle Database: Fundamentos de SQL I AP - 34


Descrição das Tabelas

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Descrição do esquema
Descrição Geral
Os esquemas de amostra do Oracle Database ilustram uma empresa fictícia que opera em todo o
mundo e atende pedidos de diversos produtos diferentes. A empresa contém três divisões:
• Human Resources: controla informações sobre funcionários e instalações
• Order Entry: controla inventários de produtos e vendas por meio de vários canais
• Sales History: controla as estatísticas dos negócios para facilitar a tomada de decisões
Cada uma dessas divisões é representada por um esquema. Neste curso, você tem acesso aos
objetos de todos os esquemas. No entanto, a ênfase dos exemplos, das demonstrações e das
práticas está no esquema Human Resources (HR).
Todos os scripts necessários para criar os exemplos de esquemas estão na pasta
$ORACLE_HOME/demo/schema/.

Oracle Internal & Oracle Academy Use Only


Human Resources (HR)
Este é o esquema utilizado neste curso. Nos registros de Human Resource (HR), cada
funcionário apresenta um número de identificação, um endereço de e-mail, um código de
identificação do cargo, um salário e um gerente. Além do salário, alguns funcionários recebem
comissões.
A empresa também rastreias as informações sobre os cargos na organização. Há um código de
identificação, um título e uma faixa salarial com os valores mínimo e máximo para cada cargo.
Alguns funcionários estão na empresa há muito tempo e já ocuparam várias posições. Quando
um funcionário sai, são registrados o tempo de permanência na empresa, o número de
identificação do cargo e o departamento.
A empresa fictícia é regionalmente diversa, assim ela controla as localizações de armazéns e
departamentos. Cada funcionário está atribuído a um departamento e cada departamento é
identificado por um número de departamento exclusivo ou nome abreviado. Cada departamento
está associado a um local e cada local tem um endereço completo que inclui o nome da rua, o
código postal, a cidade, o estado, ou província, e o código do país.
Nos lugares onde os departamentos e armazéns estão localizados, os detalhes dos registros da
empresa contêm, por exemplo, nome do país, símbolo monetário, nome da moeda e região de
localização geográfica do país.

Oracle Database: Fundamentos de SQL I B - 2


O Diagrama de Relacionamento entre Entidades de HR

HR DEPARTAMENTS LOCATION
department_id location_id
department_name street_address
manager_id postal_code
location_id cidade
state_province
country_id
JOB_HISTORY
employee_id
start_date EMPLOYEES
end_date employee_id
job_id first_name COUNTRY
department_id last_name country_id

Oracle Internal & Oracle Academy Use Only


email country_name
phone_number region_id
hire_date
job_id
JOBS salário
job_id commission_pct
job_title manager_id
min_salary REGION
department_id
max_salary region_id
region_name

Oracle Database: Fundamentos de SQL I B - 3


Human Resources (HR) Tabela Descriptions
DESCRIBE countries

SELECT * FROM countries;

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I B - 4


Human Resources (HR) Tabela Descriptions (continuação)
DESCRIBE departments

SELECT * FROM departments;

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I B - 5


Human Resources (HR) Tabela Descriptions (continuação)
DESCRIBE employees

Oracle Internal & Oracle Academy Use Only


SELECT * FROM employees;

Oracle Database: Fundamentos de SQL I B - 6


Human Resources (HR) Tabela Descriptions (continuação)
DESCRIBE job_history

SELECT * FROM job_history

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I B - 7


Human Resources (HR) Tabela Descriptions (continuação)
DESCRIBE jobs

SELECT * FROM jobs

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I B - 8


Human Resources (HR) Tabela Descriptions (continuação)
DESCRIBE locations

SELECT * FROM locations

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I B - 9


Human Resources (HR) Tabela Descriptions (continuação)
DESCRIBE regions

SELECT * FROM regions

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I B - 10


Usando o SQL Developer

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos

Ao concluir este apêndice, você será capaz de:


• Listar os principais recursos do Oracle SQL Developer
• Identificar os itens de menu do Oracle SQL Developer
• Criar uma conexão de banco de dados
• Gerenciar objetos de banco de dados
• Usar a Planilha SQL

Oracle Internal & Oracle Academy Use Only


• Salvar e executar scripts SQL
• Criar e salvar relatórios

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Objetivos
Neste apêndice, você será apresentado à ferramenta gráfica chamada SQL Developer. Você
aprenderá a usar o SQL Developer nas tarefas de desenvolvimento de seu banco de dados. Você
aprenderá a usar a Planilha SQL para executar instruções e scripts SQL.

Oracle Database: Fundamentos de SQL I C2


O que É o Oracle SQL Developer?
• O Oracle SQL Developer é uma ferramenta gráfica que
melhora a produtividade e simplifica as tarefas de
desenvolvimento de banco de dados.
• Você pode se conectar a qualquer esquema de banco de
dados Oracle de destino usando a autenticação de banco
de dados padrão Oracle.

Oracle Internal & Oracle Academy Use Only


SQL Developer

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

O que É o Oracle SQL Developer?


O Oracle SQL Developer é uma ferramenta gráfica gratuita projetada para melhorar sua
produtividade e simplificar o desenvolvimento das tarefas diárias de banco de dados. Com
apenas alguns cliques, você poderá criar e depurar com facilidade procedures armazenados,
testar instruções SQL e exibir planos do otimizador.
O SQL Developer, a ferramenta visual para o desenvolvimento de banco de dados, simplifica as
seguintes tarefas:
• Pesquisa e gerenciamento de objetos de banco de dados
• Execução de scripts e instruções SQL
• Edição e depuração de instruções PL/SQL
• Criação de relatórios
Você pode se conectar a qualquer esquema de banco de dados Oracle de destino usando a
autenticação padrão de banco de dados Oracle. Quando estiver conectado, você poderá executar
operações em objetos no banco de dados.
O SQL Developer release 1.2 está totalmente integrado ao Developer Migration Workbench, que
oferece aos usuários um único ponto para navegar pelos dados e objetos de bancos de dados em
bancos de dados de terceiros e para migrar desses bancos de dados para o Oracle. Você também
pode se conectar a esquemas de bancos de dados de terceiros (não Oracle) como, MySQL,
Microsoft SQL Server e Microsoft Access e pode também exibir dados e metadados nesses
bancos de dados.
Além disso, o SQL Developer inclui suporte para o Oracle Application Express 3.0.1 (Oracle
APEX).
Oracle Database: Fundamentos de SQL I C3
Especificações do SQL Developer

• É fornecido com o Oracle Database 11g Release 2


• Desenvolvido em Java
• Suporta as plataformas Windows, Linux e Mac OS X
• Permite conectividade default usando o driver JDBC Thin
• Conecta-se ao Oracle Database versão 9.2.0.1 e posterior
• O download pode ser executado gratuitamente no link a

Oracle Internal & Oracle Academy Use Only


seguir:
– http://www.oracle.com/technology/products/database/
sql_developer/index.html

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Especificações do SQL Developer


O Oracle SQL Developer 1.5 é fornecido com o Oracle Database 11g Release 2. O SQL
Developer é desenvolvido em Java e utiliza o IDE (Integrated Development Environment) do
Oracle JDeveloper . Portanto, é uma ferramenta multiplataforma. A ferramenta funciona nas
plataformas X de sistema operacional (OS) Windows, Linux e Mac.
A conectividade default para o banco de dados se dá pelo driver Java Database Connectivity
(JDBC) Thin e, portanto, não há a necessidade de um Oracle Home. O SQL Developer não
necessita de um instalador e você precisa apenas descompactar o arquivo transferido por
download. Com o SQL Developer, os usuários podem se conectar a Oracle Databases 9.2.0.1 e
posteriores e a todas as versões de banco de dados Oracle, incluindo a Express Edition.
Observação
Em versões do Oracle Database anteriores à Oracle Database 11g Release 2, você deverá fazer o
download e instalar o SQL Developer. O SQL Developer 1.5 está disponível para download
gratuito a partir do seguinte link:
http://www.oracle.com/technology/products/database/sql_developer/index.html.
Para obter instruções sobre como instalar o S QL Developer, consulte o site em:
http://download.oracle.com/docs/cd/E12151_01/index.htm

Oracle Database: Fundamentos de SQL I C4


Interface do SQL Developer 1.5

Você precisa definir


uma conexão para

Oracle Internal & Oracle Academy Use Only


começar a usar o SQL
Developer para a
execução de consultas
SQL em um esquema
de banco de dados.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Interface do SQL Developer 1.5


A interface do SQL Developer 1.5 contém três tabs principais de navegação, da esquerda para a
direita:
• Tab Connections: Com esta tab, você pode navegar pelos objetos e usuários de banco de
dados aos quais tem acesso.
• Tab Files: Identificada pelo ícone da pasta Files, essa tab permite o acesso aos arquivos na
máquina local sem que seja necessário usar o menu File > Open.
• Tab Reports: Identificada pelo ícone Reports, essa tab permite que você execute relatórios
predefinidos ou crie e adicione seus próprios relatórios.
Uso e Navegação Geral
O SQL Developer usa o lado esquerdo de navegação para localizar e selecionar objetos e o lado
direito para exibir informações sobre objetos selecionados. Você pode personalizar diversos
aspectos da aparência e do comportamento do SQL Developer configurando preferências.
Observação: Você precisa definir pelo menos uma conexão para poder conectar-se a um
esquema de banco de dados e emitir consultas SQL ou executar procedimentos/funções.

Oracle Database: Fundamentos de SQL I C5


Interface do SQL Developer 1.5 (continuação)
Menus
Os menus a seguir contêm entradas padrão, além de entradas para recursos específicos do SQL
Developer:
• View: Contém opções que afetam o que é exibido na interface do SQL Developer
• Navigate: Contém opções para navegar para painéis e para executar subprogramas
• Run: Contém as opções Run File e Execution Profile que são relevantes quando uma
função ou um procedimento são selecionados, além de operações de depuração.
• Source: Contém opções para serem usadas quando você editar funções e procedures
• Versioning: Oferece suporte integrado para os seguintes sistemas de controle de origem e
de versão: CVS (Concurrent Versions System) e Subversion.
• Migration: Contém opções relacionadas à migração de bancos de dados de terceiros para
o Oracle

Oracle Internal & Oracle Academy Use Only


• Tools: Chama as ferramentas do SQL Developer como, por exemplo, SQL*Plus,
Preferences e Planilha SQL
Observação: O menu Run também contém opções que são relevantes quando uma função ou
um procedure é selecionado para depuração. Essas são as mesmas opções encontradas no menu
Debug na versão 1.2.

Oracle Database: Fundamentos de SQL I C6


Criando uma Conexão de Banco de Dados

• Você precisa ter pelo menos uma conexão de banco


de dados para usar o SQL Developer.
• Você pode criar e testar conexões com:
– Vários bancos de dados
– Vários esquemas
• O SQL Developer importa automaticamente as conexões

Oracle Internal & Oracle Academy Use Only


definidas no arquivo tnsnames.ora em seu sistema.
• Você pode exportar conexões para um arquivo XML
(Extensible Markup Language).
• Cada conexão adicional com o banco de dados que é
criada é listada na hierarquia do Connections Navigator.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando uma Conexão de Banco de Dados


Uma conexão é um objeto do SQL Developer que especifica as informações necessárias para
conexão com determinado banco de dados como um usuário específico desse banco de dados.
Para usar o SQL Developer, será necessário ter ao menos uma conexão de banco de dados, que
poderá ser existente, criada ou importada.
Você pode criar e testar conexões com vários bancos de dados e vários esquemas.
Por default, o arquivo tnsnames.ora está localizado no diretório
$ORACLE_HOME/network/admin, mas ele também pode estar no diretório especificado
pelo valor de Registro ou pela variável de ambiente TNS_ADMIN. Quando você iniciar o SQL
Developer e exibir a caixa de diálogo Database Connections, o SQL Developer importará
automaticamente as conexões definidas no arquivo tnsnames.ora do sistema.
Observação: No Windows, se existir o arquivo tnsnames.ora, mas suas conexões não
estiverem sendo usadas pelo SQL Developer, defina TNS_ADMIN como uma variável de
ambiente do sistema.
Você pode exportar conexões para um arquivo XML para que você possa reutilizá-las.
Você pode criar conexões adicionais como usuários diferentes do mesmo banco de dados ou
para conectar-se aos diferentes bancos de dados.

Oracle Database: Fundamentos de SQL I C7


Criando uma Conexão de Banco de Dados

1 2

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando uma Conexão de Banco de Dados (continuação)


Para criar uma conexão de banco de dados, faça o seguinte:
1. Na página com a tab Connections, clique com o botão direito do mouse em Connections e
selecione New Connection.
2. Na janela New/Select Database Connection, informe o nome da conexão. Informe o nome
de usuário e a senha do esquema ao qual deseja se conectar.
a) Na lista drop-down Role, você pode selecionar default ou SYSDBA. (Você pode
escolher SYSDBA para o usuário sys ou qualquer usuário com privilégios de
administrador do banco de dados).
b) Você pode selecionar o tipo de conexão como:
Basic:Nesse tipo, digite o nome do host e o SID para o banco de dados ao qual
deseja se conectar. A porta já foi configurada como 1521. Como alternativa, você
pode digitar o nome do serviço em Service name diretamente, se usar uma conexão
remota de banco de dados.
TNS: Você pode selecionar qualquer apelido de banco de dados importado do
arquivo tnsnames.ora.
LDAP: Você pode pesquisar serviços de bancos de dados no Oracle Internet
Directory, que é um componente do Oracle Identity Management.
Advanced: Você pode definir um URL JDBC (Java Database Connectivity)
personalizado para se conectar ao banco de dados.
Oracle Database: Fundamentos de SQL I C8
Criando uma Conexão de Banco de Dados (continuação)
c) Clique em Test para garantir que a conexão foi definida corretamente.
d) Clique em Connect.
Se você marcar a caixa de seleção Save Password, a senha será salva em um arquivo XML.
Assim, depois que você fechar a conexão com o SQL Developer e abri-la novamente, a
senha não será solicitada.
3. A conexão será adicionada ao Connections Navigator. Você pode expandir a conexão para
exibir os objetos de banco de dados e exibir as definições de objeto, por exemplo,
dependências, detalhes, estatísticas e assim por diante.
Observação: Na mesma janela New/Select Database Connection, você poderá definir conexões
com origens de dados não Oracle usando as tabs Access, MySQL e SQL Server. No entanto,
essas conexões são somente para leitura, as quais permitem que você navegue por objetos e
dados nessa origem de dados.

Oracle Internal & Oracle Academy Use Only

Oracle Database: Fundamentos de SQL I C9


Navegando por Objetos de Banco de Dados
Use o Connections Navigator para:
• Navegar por vários objetos em um esquema de banco
de dados
• Analisar rapidamente as definições de objetos

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Navegando por Objetos de Banco de Dados


Após criar uma conexão de banco de dados, você poderá usar o Connections Navigator para
procurar dentre vários objetos em um esquema de banco de dados, incluindo Tabelas, Views,
Índices, Pacotes, Procedures, Triggers e Tipos.
O SQL Developer usa o lado esquerdo de navegação para localizar e selecionar objetos e o lado
direito para exibir informações sobre objetos selecionados. Você pode personalizar diversos
aspectos da aparência do SQL Developer configurando preferências.
Você pode visualizar a definição dos objetos dividida em tabs de informações que são obtidas do
dicionário de dados. Por exemplo, se você tiver selecionado uma tabela no Navigator, os
detalhes sobre colunas, constraints, grants, estatísticas, triggers e assim por diante serão exibidos
em uma página com tabs fácil de ler.
Se desejar visualizar a definição da tabela EMPLOYEES conforme mostrada no slide, execute as
seguintes etapas:
1. Expanda o nó Connections no Connections Navigator.
2. Expanda Tables.
3. Clique em EMPLOYEES. Por default, a tab Columns é selecionada. Ela mostra a descrição
da coluna da tabela. Usando a tab Data, você poderá exibir os dados da tabela, assim como
incluir novas linhas, atualizar dados e fazer commit dessas alterações no banco de dados.

Oracle Database: Fundamentos de SQL I C10


Exibindo a Estrutura da Tabela

Use o comando DESCRIBE para exibir a estrutura de uma tabela:

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Exibindo a Estrutura da Tabela


No SQL Developer, também é possível exibir a estrutura de uma tabela usando o comando
DESCRIBE. O resultado do comando é uma exibição de nomes de colunas e tipos de dados,
assim como uma indicação informando se a coluna deve conter dados.

Oracle Database: Fundamentos de SQL I C11


Procurando Arquivos

Use o File Navigator para explorar o sistema de arquivos


e abrir os arquivos do sistema.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Navegando por Objetos de Banco de Dados


Você pode usar o File Navigator para procurar e abrir os arquivos do sistema.
• Para exibir o Files Navigator, clique na tab Files ou selecione View > Files.
• Para exibir o conteúdo de um arquivo, clique duas vezes no nome de um arquivo para
exibir seu conteúdo na área da Planilha SQL.

Oracle Database: Fundamentos de SQL I C12


Criando um Objeto de Esquema

• O SQL Developer oferece suporte para a criação de


qualquer objeto de esquema:
– Executando uma instrução SQL em uma Planilha SQL
– Usando o menu de contexto
• Edite os objetos usando uma caixa de diálogo de edição
ou um dos muitos menus contextuais.
• Exiba a DDL (data definition language) referente aos

Oracle Internal & Oracle Academy Use Only


ajustes como, por exemplo, a criação de um novo objeto
ou a edição de um objeto de esquema existente.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando um Objeto de Esquema


O SQL Developer oferece suporte para a criação de qualquer objeto de esquema com a execução
de uma instrução SQL em uma planilha SQL. Como alternativa, você poderá criar objetos
usando os menus de contexto. Depois de criados, você poderá editar os objetos usando uma
caixa de diálogo de edição ou um dos muitos menus contextuais.
À medida que os novos objetos são criados ou que os objetos existentes são editados, a DDL
referente a esses ajustes se torna disponível para análise. A opção Export DDL estará disponível
se você quiser criar a DDL completa para um ou mais objetos no esquema.
As apresentações de slides mostram como criar uma tabela usando o menu de contexto. Para
abrir uma caixa de diálogo a fim de criar uma nova tabela, clique com o botão direito do mouse
em Tables e selecione New Table. As caixas de diálogo para criar e editar objetos de banco de
dados possuem diversas tabs, cada uma delas refletindo um agrupamento lógico de propriedades
para esse tipo de objeto.

Oracle Database: Fundamentos de SQL I C13


Criando uma Nova Tabela: Exemplo

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando uma Nova Tabela: Exemplo


Na caixa de diálogo Create Table, se você não marcar a caixa de seleção Advanced, poderá criar
uma tabela rapidamente especificando colunas e alguns recursos usados com frequência.
Se você marcar a caixa de seleção Advanced, a caixa de diálogo Create Table será alterada para
outra com diversas opções, na qual será possível especificar um amplo conjunto de recursos
durante a criação da tabela.
O exemplo do slide mostra como criar a tabela DEPENDENTS, marcando a caixa de seleção
Advanced.
Para criar uma nova tabela, execute as seguintes etapas:
1. No Connections Navigator, clique com o botão direito do mouse em Tables.
2. Selecione Create TABLE.
3. Na caixa de diálogo Create Table, selecione Advanced.
4. Especifique as informações da coluna.
5. Clique em OK.
Ainda que não seja obrigatório, você deve especificar também uma chave primária usando a tab
Primary Key na caixa de diálogo. Às vezes, talvez você queira editar a tabela que criou. Para
fazê-lo, clique com o botão direito do mouse na tabela no Connections Navigator e selecione
Edit.

Oracle Database: Fundamentos de SQL I C14


Usando a Planilha SQL

• Use a Planilha SQL para inserir e executar instruções


SQL, PL/SQL e SQL *Plus.
• Especifique as ações que podem ser processadas pela
conexão de banco de dados associada à planilha.

Oracle Internal & Oracle Academy Use Only


Selecione SQL Worksheet
no menu Tools. Ou clique no ícone
Open SQL Worksheet.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando a Planilha SQL


Quando você estabelecer uma conexão com um banco de dados, uma janela da Planilha SQL
será aberta automaticamente para essa conexão. Você pode usar a Planilha SQL para informar e
executar instruções SQL, PL/SQL e SQL*Plus. A Planilha SQL oferece suporte a instruções
SQL*Plus até determinado ponto. As instruções SQL*Plus que não são compatíveis com a
Planilha SQL serão ignoradas e não passarão para o banco de dados.
Você pode especificar as ações que podem ser processadas pela conexão de banco de dados
associada à planilha, como:
• Criar uma tabela
• Inserir dados
• Criar e editar um trigger
• Selecionando dados de uma tabela
• Salvar os dados selecionados em um arquivo
Você pode exibir uma Planilha SQL usando uma das seguintes opções:
• Selecione Tools > SQL Worksheet.
• Clique no ícone Open SQL Worksheet.

Oracle Database: Fundamentos de SQL I C15


Usando a Planilha SQL

2 4 6 8

Oracle Internal & Oracle Academy Use Only


1 3 5 7 9

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando a Planilha SQL (continuação)


Você poderá usar as teclas de atalho ou os ícones para executar determinadas tarefas como a
execução de uma instrução SQL, de um script e a exibição do histórico de instruções SQL
executadas por você. Você poderá usar a barra de ferramentas da Planilha SQL que contém
ícones para a execução das seguintes tarefas:
1. Execute Statement: Executa a instrução no local onde o cursor está na caixa Enter SQL
Statement. Você poderá usar variáveis de bind nas instruções SQL, mas não poderá usar
variáveis de substituição.
2. Run Script: Executa todas as instruções na caixa Enter SQL Statement usando o Script
Runner. Você poderá usar variáveis de substituição nas instruções SQL, mas não poderá
usar variáveis de bind.
3. Commit: Grava as alterações no banco de dados e finaliza a transação
4. Rollback: Descarta as alterações no banco de dados sem gravá-las e finaliza a transação.
5. Cancel: Interrompe as instruções em execução no momento.
6. SQL History: Exibe uma caixa de diálogo com informações sobre instruções SQL
executadas por você
7. Execute Explain Plan: Gera o plano de execução, que você pode visualizar clicando na
tab Explain.
8. Autotrace: Gera informações de rastreamento da instrução.
9. Clear: Apaga a(s) instrução(ões) na caixa Enter SQL Statement.
Oracle Database: Fundamentos de SQL I C16
Usando a Planilha SQL

Informe
instruções SQL.

Oracle Internal & Oracle Academy Use Only


Os resultados
são mostrados
aqui.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando a Planilha SQL (continuação)


Quando você estabelecer uma conexão com um banco de dados, uma janela da Planilha SQL
será aberta automaticamente para essa conexão. Você pode usar a Planilha SQL para informar e
executar instruções SQL, PL/SQL e SQL*Plus. Todos os comandos SQL e PL/SQL são
suportados, já que passam diretamente da Planilha SQL para o banco de dados Oracle. Os
comandos SQL*Plus usados no SQL Developer precisam ser interpretados pela Planilha SQL
antes de passarem para o banco de dados.
Atualmente, a Planilha SQL oferece suporte a diversos comandos do SQL*Plus. Os comandos
não suportados pela Planilha SQL serão ignorados e não serão enviados para o banco de dados
Oracle. Com a Planilha SQL, você pode executar instruções SQL e alguns dos comandos do
SQL*Plus.
Você pode exibir uma Planilha SQL usando uma das opções a seguir:
• Selecione Tools > SQL Worksheet.
• Clique no ícone Open SQL Worksheet.

Oracle Database: Fundamentos de SQL I C17


Executando Instruções SQL

Use a caixa Enter SQL Statement para informar uma ou várias


instruções SQL.

F9 F5

Oracle Internal & Oracle Academy Use Only


F5
F9

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Executando Instruções SQL


O exemplo no slide mostra a diferença no resultado da mesma consulta quando a tecla [F9] ou
Execute Statement é usada em vez de [F5] ou Run Script.

Oracle Database: Fundamentos de SQL I C18


Salvando Scripts SQL
Clique no ícone Save
1 para salvar sua instrução
SQL em um arquivo.

Identifique um local,
2 informe um nome de

Oracle Internal & Oracle Academy Use Only


O conteúdo do arquivo
3 salvo estará visível e arquivo e clique em Save.
poderá ser editado na
janela da Planilha SQL.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Salvando Scripts SQL


Você pode salvar as instruções SQL da Planilha SQL em um arquivo de texto. Para salvar o
conteúdo da caixa Enter SQL Statement, execute as seguintes etapas:
1. Clique no ícone Save ou use o item de menu File > Save.
2. Na caixa de diálogo Salvar, informe um nome de arquivo e o local no qual deseja salvar o
arquivo.
3. Clique em Save.
Depois de salvar o conteúdo em um arquivo, a janela Enter SQL Statement exibirá uma página
com uma tab do conteúdo do arquivo. Você pode abrir vários arquivos ao mesmo tempo. Cada
arquivo será exibido como uma página com tab.
Script Pathing
Você pode selecionar um caminho default no qual poderá procurar e salvar scripts. Em Tools >
Preferences > Database > Worksheet Parameters, informe um valor no campo “Select default
path to look for scripts” .

Oracle Database: Fundamentos de SQL I C19


Executando Arquivos de Script Salvos: Método 1

1. Use a tab Files para localizar o


arquivo de script que deseja abrir.
2. Clique duas vezes no script para
exibir o código na Planilha SQL.
1

Para executar o código, clique em: 2


• Execute Script (F9) ou
3 Selecione uma conexão
• Run Script (F5) na lista drop-down.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Executando Arquivos de Script Salvos: Método 1


Para abrir um arquivo de script e exibir o código na área da Planilha SQL, siga estas etapas:
1. No Files Navigator, selecione (ou navegue até) o arquivo de script que deseja abrir.
2. Clique duas vezes no arquivo para abri-lo. O código do arquivo de script será exibido na
área da Planilha SQL.
3. Selecione uma conexão na lista drop-down.
4. Para executar o código, clique no ícone Run Script (F5) na barra de ferramentas da
Planilha SQL. Se você não tiver selecionado uma conexão na lista drop-down, uma caixa
de diálogo de conexão será exibida. Selecione a conexão que deseja usar na execução do
script.
Como alternativa, você também pode fazer o seguinte:
1. Selecionar File > Open. A caixa de diálogo Open será exibida.
2. Na caixa de diálogo Open, selecione (ou navegue até) o arquivo de script que deseja abrir.
3. Clique em Open. O código do arquivo de script será exibido na área da Planilha SQL.
4. Selecione uma conexão na lista drop-down.
5. Para executar o código, clique no ícone Run Script (F5) na barra de ferramentas da
Planilha SQL. Se você não tiver selecionado uma conexão na lista drop-down, uma caixa
de diálogo de conexão será exibida. Selecione a conexão que deseja usar na execução do
script.

Oracle Database: Fundamentos de SQL I C20


Executando Arquivos de Script Salvos: Método 2

Use o comando @ seguido


pelo local e pelo nome do
arquivo que deseja executar e
clique no ícone Run Script.

Oracle Internal & Oracle Academy Use Only


A saída do script é
exibida na página com
a tab Script Output.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Executando Arquivos de Script Salvos: Método 2


Para executar um script SQL salvo, siga estas etapas:
1. Use o comando @ seguido pelo local e pelo nome do arquivo que deseja executar na janela
Enter SQL Statement.
2. Clique no ícone Run Script.
Os resultados da execução do arquivo são exibidos na página com a tab Script Output. Você
também poderá salvar a saída do script clicando no ícone Save na página com a tab Script
Output. A caixa de diálogo Salvar arquivo será exibida e você poderá identificar um nome e um
local para o arquivo.

Oracle Database: Fundamentos de SQL I C21


Formatando o Código SQL

Antes da
formatação

Oracle Internal & Oracle Academy Use Only


Depois da
formatação

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Formatando o Código SQL


Você poderá formatar a endentação, o espaçamento, o uso de maiúsculas e minúsculas e a
separação de linha do código SQL. O SQL Developer possui um recurso para a formatação do
código SQL.
Para formatar o código SQL, clique com o botão direito do mouse na área da instrução e
selecione Format SQL.
No exemplo do slide, antes da formatação, as palavras-chave do código SQL não estão
capitalizadas e a endentação adequada não foi aplicada à instrução. Após a formatação, o código
SQL é aprimorado com a capitalização das palavras-chave e a endentação adequada.

Oracle Database: Fundamentos de SQL I C22


Usando Snippets

Snippets são fragmentos de códigos que podem ser apenas


sintaxe ou exemplos.
Quando você posiciona o cursor
aqui, ele mostra a janela Snippets.
Na lista drop-down, é possível
selecionar a categoria de função
desejada.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando Snippets
Você poderá usar determinados fragmentos de códigos quando usar a Planilha SQL ou criar ou
editar uma função ou um procedure PL/SQL. O SQL Developer possui o recurso chamado
Snippets. Snippets são fragmentos de códigos como funções SQL, dicas do Optimizer e diversas
técnicas de programação de PL/SQL. Você pode arrastar snippets para a janela Editor.
Para exibir os Snippets, selecione View > Snippets.
A janela Snippets é exibida à direita. Você poderá usar a lista drop-down para selecionar um
grupo. O botão Snippets é exibido na margem da janela à direita para que você possa exibir a
janela Snippets se ela ficar oculta.

Oracle Database: Fundamentos de SQL I C23


Usando Snippets: Exemplo

Inserindo
um snippet

Oracle Internal & Oracle Academy Use Only


Editando o
snippet

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando Snippets: Exemplo


Para inserir um Snippet em seu código em uma Planilha SQL ou em uma função ou um
procedure PL/SQL, arraste o snippet da janela Snippets para o local desejado no código. Em
seguida, você poderá editar a sintaxe para que a função SQL seja válida no contexto atual. Para
exibir uma breve descrição de uma função SQL em uma dica de ferramenta, posicione o cursor
sobre o nome da função.
O exemplo no slide mostra que CONCAT(char1, char2)é arrastado do grupo Character
Functions na janela Snippets. Em seguida, a sintaxe de função CONCAT é editada e o restante da
instrução é adicionado conforme a seguir:
SELECT CONCAT(first_name, last_name)
FROM employees;

Oracle Database: Fundamentos de SQL I C24


Depurando Procedures e Funções

• Use o SQL Developer para


depurar procedures e funções
PL/SQL.
• Use a opção Compile for Debug
para executar uma compilação
PL/SQL de modo que o
procedure possa ser depurado.

Oracle Internal & Oracle Academy Use Only


• Use as opções do menu Debug
para definir pontos de
interrupção e para executar
tarefas step into, step over.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Depurando Procedures e Funções


No SQL Developer, você pode depurar procedures e funções PL/SQL. Usando as opções do
menu Debug, você pode executar as seguintes tarefas de depuração:
• Find Execution Point vai para o próximo ponto de execução.
• Resume continua a execução.
• Step Over ignora o próximo método e vai para a instrução seguinte após o método.
• Step Into vai para a primeira instrução no próximo método.
• Step Out deixa o método atual e vai para a próxima instrução.
• Step to End of Method vai para a última instrução do método atual.
• Pause interrompe a execução, mas não sai, permitindo que a execução seja retomada.
• Terminate interrompe e sai da execução. Não é possível retomar a execução a partir deste
ponto. Em vez disso, para iniciar a execução ou a depuração no início da função ou do
procedure, clique no ícone Run ou Debug, na barra de ferramentas da tab Source.
• Garbage Collection remove objetos inválidos do cache para armazenar objetos acessados
com mais frequência e mais válidos.
Essas opções também estão disponíveis como ícones na barra de ferramentas de depuração.

Oracle Database: Fundamentos de SQL I C25


Geração de Relatórios de Banco de Dados

O SQL Developer oferece diversos relatórios predefinidos


sobre o banco de dados e seus objetos.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Geração de Relatórios de Banco de Dados


O SQL Developer oferece diversos relatórios sobre o banco de dados e seus objetos. Esses
relatórios podem ser agrupados nas seguintes categorias:
• About Your Database
• Database Administration
• Table
• PL/SQL
• Security
• XML
• Jobs
• Streams
• All Objects
• Data Dictionary
• Relatórios Definidos pelo Usuário
Para exibir os relatórios, clique na tab Reports à esquerda da janela. Os relatórios individuais são
exibidos em painéis com tab à direita da janela. Para cada relatório, você poderá selecionar
(usando uma lista suspensa) a conexão de banco de dados para a qual exibir o relatório. Nos
relatórios sobre objetos, aqueles mostrados são apenas os objetos visíveis para o usuário do
banco de dados associado à conexão com o banco de dados selecionada, e as linhas são
normalmente ordenadas por Owner. Você também pode criar seus próprios relatórios definidos
pelo usuário.
Oracle Database: Fundamentos de SQL I C26
Criando um Relatório Definido pelo Usuário

Crie e salve relatórios definidos pelo usuário para reutilização.

Oracle Internal & Oracle Academy Use Only


Organize os relatórios em pastas.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando um Relatório Definido pelo Usuário


Os relatórios definidos pelo usuário são aqueles criados pelos usuários do SQL Developer. Para
criar um relatório definido pelo usuário, faça o seguinte:
1. Clique com o botão direito do mouse no nó User Defined Reports em Reports e selecione
Add Report.
2. Na caixa de diálogo Create Report, especifique o nome do relatório e a consulta SQL para
recuperar as informações do relatório. Em seguida, clique em Apply.
No exemplo do slide, o nome do relatório foi especificado como emp_sal. Uma descrição
opcional é oferecida, indicando que o relatório contém detalhes de funcionários com salary
>= 10000. A instrução SQL completa para a recuperação das informações a serem exibidas no
relatório definido pelo usuário está especificada na caixa SQL. Você também poderá incluir uma
dica de ferramenta opcional, a ser exibida quando o cursor for posicionado brevemente sobre o
nome do relatório na opção Reports do navegador.
Você pode organizar os relatórios definidos pelo usuário em pastas e pode criar uma hierarquia
de pastas e subpastas. Para criar uma pasta para os relatórios definidos pelo usuário, clique com
o botão direito do mouse no nó User Defined Reports ou em qualquer nome de pasta nesse nó e
selecione Add Folder. As informações sobre os relatórios definidos pelo usuário, incluindo as
pastas desses relatórios, são armazenadas em um arquivo chamado UserReports.xml no
diretório de informações específicas do usuário.

Oracle Database: Fundamentos de SQL I C27


Mecanismos de Pesquisa e Ferramentas Externas

Atalhos para
ferramentas usadas
com frequência
1

Oracle Internal & Oracle Academy Use Only


Links para
mecanismos de
pesquisa e fóruns de
discussão populares

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Mecanismos de Pesquisa e Ferramentas Externas


Para melhorar a produtividade dos desenvolvedores de SQL, o SQL Developer adicionou links
rápidos para mecanismos de pesquisa e fóruns de discussão populares como AskTom, Google e
assim por diante. Além disso, você tem disponíveis ícones de atalho para algumas das
ferramentas usadas com mais frequência, como Bloco de Notas, Microsoft Word e
Dreamweaver.
Você pode adicionar ferramentas externas à lista existente ou até mesmo deletar atalhos para
ferramentas que não usa com frequência. Para fazer isso, execute estas etapas:
1. No menu Tools, selecione External Tools.
2. Na caixa de diálogo External Tools, selecione New para adicionar novas ferramentas.
Selecione Delete para remover qualquer ferramenta da lista.

Oracle Database: Fundamentos de SQL I C28


Definindo Preferências

• Personalize a interface e o ambiente do SQL Developer.


• No menu Tools, selecione Preferences.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Definindo Preferências
Você pode personalizar muitos aspectos da interface e do ambiente do SQL Developer
modificando as preferências do SQL Developer de acordo com suas preferências e necessidades.
Para modificar as preferências do SQL Developer, selecione Tools e Preferences.
As preferências estão agrupadas nas seguintes categorias:
• Environment
• Accelerators (atalhos do teclado)
• Code Editors
• Database
• Debugger
• Documentation
• Extensions
• File Types
• Migration
• PL/SQL Compilers
• PL/SQL Debugger

Oracle Database: Fundamentos de SQL I C29


Redefinindo o Layout do SQL Developer

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Redefinindo o Layout do SQL Developer


Ao trabalhar com o SQL Developer, se o Connections Navigator desaparecer, ou se você não
puder encaixar a janela Log em seu local original, execute as seguintes etapas para corrigir o
problema:
1. Saia do SQL Developer.
2. Abra uma janela de terminal e use o comando locate para encontrar o local de
windowinglayout.xml.
3. Vá para o diretório em que windowinglayout.xml está e delete esse arquivo.
4. Reinicie o SQL Developer.

Oracle Database: Fundamentos de SQL I C30


Sumário

Neste apêndice, você aprendeu a usar o SQL Developer para:


• Criar, editar e navegar por objetos de banco de dados
• Executar scripts e instruções SQL na Planilha SQL
• Criar e salvar relatórios personalizados

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Sumário
O SQL Developer é uma ferramenta gráfica gratuita que simplifica as tarefas de
desenvolvimento de banco de dados. Com o SQL Developer, você pode criar, editar e navegar
por objetos de banco de dados. Você pode usar a Planilha SQL para executar scripts e instruções
SQL. O SQL Developer permite que você crie e salve seu próprio conjunto especial de relatórios
para reutilização.

Oracle Database: Fundamentos de SQL I C31


Oracle Internal & Oracle Academy Use Only
Usando o SQL*Plus

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos

Ao concluir este apêndice, você será capaz de:


• Efetuar login no SQL*Plus
• Editar comandos SQL
• Formatar a saída usando comandos do SQL*Plus
• Interagir com arquivos de script

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Objetivos
É possível criar instruções SELECT que possam ser usadas indefinidamente. Este apêndice
também aborda o uso de comandos do SQL*Plus para executar instruções SQL. Você aprenderá
a formatar a saída usando comandos do SQL*Plus, a editar comandos SQL e a salvar scripts no
SQL*Plus.

Oracle Database: Fundamentos de SQL I D - 2


Interação entre SQL e SQL*Plus

Instruções SQL
Servidor
SQL*Plus

Resultados da consulta

Oracle Internal & Oracle Academy Use Only


Buffer

SQL
SQL

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

SQL e SQL*Plus
SQL é uma linguagem de comando usada para comunicação com o servidor Oracle por meio de
qualquer ferramenta ou aplicativo. O Oracle SQL contém diversas extensões. Quando você
informa uma instrução SQL, ela é armazenada em uma parte da memória chamada de buffer
SQL e permanece lá até que você especifique uma nova instrução SQL. O SQL*Plus é uma
ferramenta da Oracle que reconhece e envia instruções SQL para o Oracle9i Server para serem
executadas. Ele contém sua própria linguagem de comandos.
Recursos da linguagem SQL
• Ela pode ser usada por diferentes usuários, incluindo aqueles com pouca ou nenhuma
experiência em
programação
• É uma linguagem não procedural
• Reduz a quantidade de tempo necessária para a criação e a manutenção de sistemas
• É uma linguagem semelhante ao idioma inglês
Recursos do SQL*Plus
• Aceita a entrada ad hoc de instruções
• Aceita a entrada SQL de arquivos
• Oferece um editor de linha para a modificação de instruções SQL
• Controla as configurações do ambiente
• Formata os resultados da consulta em relatórios básicos
• Acessa bancos de dados locais e remotos
Oracle Database: Fundamentos de SQL I D - 3
Instruções SQL Versus Comandos do SQL*Plus

SQL SQL*Plus
• Uma linguagem • Um ambiente
• Padrão ANSI • Proprietário da Oracle
• Palavras-chave não • Palavras-chave podem
podem ser abreviadas. ser abreviadas.
• Instruções manipulam • Os comandos não

Oracle Internal & Oracle Academy Use Only


dados permitem a manipulação
e definições de tabela no de valores no banco de
banco de dados. dados.

SQL SQL SQL*Plus SQL*Plus


SQL SQL*Plus do SQL*Plus SQL*Plus

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

SQL e SQL*Plus (continuação)


A tabela a seguir compara o SQL e o SQL*Plus:

SQL SQL*Plus
É uma linguagem para a comunicação com o Reconhece instruções SQL e as envia ao servidor
servidor Oracle a fim de acessar os dados
É baseada no padrão ANSI (American É a interface proprietária da Oracle para a
National Standards Institute) SQL execução de instruções SQL
Manipula dados e definições de tabelas no Não permite a manipulação de valores no banco
banco de dados de dados
É incluída no buffer SQL em uma ou mais É incluído em uma linha de cada vez; não é
linhas armazenado no buffer SQL
Não tem um caractere de continuação Utiliza um traço (–) como caractere de
continuação se o comando ultrapassa uma linha
Não pode ser abreviada Pode ser abreviado
Utiliza um caractere de finalização para Não requer caracteres de finalização; executa os
executar os comandos imediatamente comandos imediatamente
Utiliza funções para aplicar formatação Utiliza comandos para formatar dados

Oracle Database: Fundamentos de SQL I D - 4


Visão Geral do SQL*Plus

• Efetue login no SQL*Plus.


• Descreva a estrutura da tabela.
• Edite sua instrução SQL.
• Execute o SQL pelo SQL*Plus.
• Salve as instruções SQL em arquivos e anexe instruções
SQL a arquivos.

Oracle Internal & Oracle Academy Use Only


• Execute os arquivos salvos.
• Carregue comandos do arquivo para o buffer, para edição.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

SQL*Plus
O SQL*Plus é um ambiente no qual você pode:
• Executar instruções SQL para recuperar, modificar, adicionar e remover dados do banco de
dados
• Formatar, executar cálculos, armazenar e imprimir resultados de consultas no formato de
relatórios
• Criar arquivos de script para armazenar instruções SQL para uso repetido no futuro
Os comandos do SQL*Plus podem ser divididos nas seguintes categorias principais:
Categoria Objetivo
Environment Afeta o comportamento geral das instruções SQL na sessão
Format Formata os resultados da consulta
File manipulation Salva, carrega e executa arquivos de script
Execution Envia instruções SQL do buffer SQL para o servidor Oracle
Edit Modifica as instruções SQL no buffer
Interaction Cria e especifica variáveis para instruções SQL, imprime valores de
variáveis e imprime mensagens na tela
Miscellaneous Conecta-se ao banco de dados, manipula o ambiente SQL*Plus e exibe
definições de colunas

Oracle Database: Fundamentos de SQL I D - 5


Efetuando Login no SQL*Plus

Oracle Internal & Oracle Academy Use Only


sqlplus [username[/password[@database]]]

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Efetuando Login no SQL*Plus


O modo como você chama o SQL*Plus depende do tipo de sistema operacional no qual você
está executando o Oracle Database.
Para efetuar login em um ambiente Linux, execute as seguintes etapas:
1. Clique com o botão direito do mouse na área de trabalho Linux e selecione o terminal.
2. Digite o comando sqlplus mostrado no slide.
3. Digite o nome do usuário, a senha e o nome do banco de dados.
Na sintaxe:
username Seu nome de usuário do banco de dados
password Sua senha do banco de dados (Ela estará visível se você digitá-la aqui).
@database A string de conexão do banco de dados
Observação: Para assegurar a integridade de sua senha, não digite-a no prompt do sistema
operacional. Em vez disso, digite apenas seu nome de usuário. Digite a senha no prompt de
senha.

Oracle Database: Fundamentos de SQL I D - 6


Exibindo a Estrutura da Tabela

Use o comando DESCRIBE do SQL*Plus para exibir a estrutura


de uma tabela:

DESC[RIBE] tablename

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Exibindo a Estrutura da Tabela


No SQL*Plus, você pode exibir a estrutura de uma tabela usando o comando DESCRIBE. O
resultado do comando é uma exibição de nomes de colunas e tipos de dados, assim como uma
indicação informando se a coluna deve conter dados.
Na sintaxe:
tablename O nome de qualquer tabela, view ou sinônimo acessível para o
o usuário
Para descrever a tabela DEPARTMENTS, use este comando:
SQL> DESCRIBE DEPARTMENTS
Name Null? Type
----------------------- -------- ---------------

DEPARTMENT_ID NOT NULL NUMBER(4)


DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)

Oracle Database: Fundamentos de SQL I D - 7


Exibindo a Estrutura da Tabela

DESCRIBE departments

Name Null? Type

Oracle Internal & Oracle Academy Use Only


----------------------- -------- ------------
DEPARTMENT_ID NOT NULL NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Exibindo a Estrutura da Tabela (continuação)


O exemplo no slide exibe informações sobre a estrutura da tabela DEPARTMENTS. No
resultado:
Null?: Especifica se uma coluna deve conter dados (NOT NULL indica que a coluna deve
conter dados.)
Type: Exibe o tipo de dados de uma coluna

Oracle Database: Fundamentos de SQL I D - 8


Comandos de Edição do SQL*Plus

• A[PPEND] text
• C[HANGE] / old / new
• C[HANGE] / text /
• CL[EAR] BUFF[ER]
• DEL
• DEL n

Oracle Internal & Oracle Academy Use Only


• DEL m n

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Comandos de Edição do SQL*Plus


Os comandos do SQL*Plus são inseridos em uma linha por vez e não são armazenados no buffer
SQL.
Comando Descrição
A[PPEND] text Adiciona texto ao final da linha atual
C[HANGE] / old / new Altera o texto old para o texto new na linha atual
C[HANGE] / text / Deleta text da linha atual
CL[EAR] BUFF[ER] Deleta todas as linhas do buffer SQL
DEL Deleta a linha atual
DEL n Deleta a linha n
DEL m n Deleta as linhas m a n inclusive
Diretrizes
• Se você pressionar Enter antes da conclusão de um comando, o SQL*Plus solicitará um
número de linha.
• Você pode finalizar o buffer SQL digitando um dos caracteres finalizadores (ponto e
vírgula ou barra) ou pressionando [Enter] duas vezes. O prompt SQL será exibido.

Oracle Database: Fundamentos de SQL I D - 9


Comandos de Edição do SQL*Plus

• I[NPUT]
• I[NPUT] text
• L[IST]
• L[IST] n
• L[IST] m n
• R[UN]

Oracle Internal & Oracle Academy Use Only


• n
• n text
• 0 text

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Comandos de Edição do SQL*Plus (continuação)


Comando Descrição
I[NPUT] Insere um número indefinido de linhas
I[NPUT] text Insere uma linha que consiste em text
L[IST] Lista todas as linhas no buffer SQL
L[IST] n Lista uma linha (especificada por n)
L[IST] m n Lista uma faixa de linhas (m a n) inclusive
R[UN] Exibe e executa a instrução SQL atual no buffer
n Especifica a linha que se tornará a atual
n text Substitui a linha n por text
0 text Insere uma linha antes da linha 1

Observação: Você pode informar apenas um comando do SQL*Plus para cada prompt SQL. Os
comandos do SQL*Plus não são armazenados no buffer. Para continuar um comando do
SQL*Plus na linha seguinte, finalize a primeira linha com um hífen (-).

Oracle Database: Fundamentos de SQL I D - 10


Usando LIST, n e APPEND

LIST
1 SELECT last_name
2* FROM employees

1
1* SELECT last_name

Oracle Internal & Oracle Academy Use Only


A , job_id
1* SELECT last_name, job_id

LIST
1 SELECT last_name, job_id
2* FROM employees

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando LIST, n e APPEND


• Use o comando L[IST] para exibir o conteúdo do buffer SQL. O asterisco (*) ao lado da
linha 2 no buffer indica que a linha 2 é a linha atual. Quaisquer edições feitas se aplicam à
linha atual.
• Altere o número da linha atual digitando o número (n) da linha que você deseja editar. A
nova linha atual será exibida.
• Use o comando A[PPEND] para adicionar texto à linha atual. A linha recém-editada será
exibida. Verifique o novo conteúdo do buffer usando o comando LIST.
Observação: Muitos comandos do SQL*Plus, incluindo LIST e APPEND, podem ser
abreviados para apenas sua primeira letra. LIST pode ser abreviado para L; APPEND pode ser
abreviado para A.

Oracle Database: Fundamentos de SQL I D - 11


Usando o Comando CHANGE

LIST
1* SELECT * from employees

c/employees/departments

Oracle Internal & Oracle Academy Use Only


1* SELECT * from departments

LIST
1* SELECT * from departments

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando o Comando CHANGE


• Use o comando L[IST] para exibir o conteúdo do buffer.
• Use o comando C[HANGE] para alterar o conteúdo da linha atual no buffer SQL. Neste
caso, substitua a tabela employees pela tabela departments. A nova linha atual será
exibida.
• Use o comando L[IST] para verificar o novo conteúdo do buffer.

Oracle Database: Fundamentos de SQL I D - 12


Comandos de Arquivo do SQL*Plus

• SAVE nome de arquivo


• GET nome de arquivo
• START nome de arquivo
• @ nome de arquivo
• EDIT nome de arquivo
• SPOOL nome de arquivo

Oracle Internal & Oracle Academy Use Only


• EXIT

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Comandos de Arquivo do SQL*Plus


As instruções SQL se comunicam com o servidor Oracle. Os comandos do SQL*Plus controlam
o ambiente, formatam os resultados das consultas e gerenciam arquivos. Você pode usar os
comandos descritos na seguinte tabela:
Comando Descrição
SAV[E] filename Salva o conteúdo atual do buffer SQL em um arquivo. Use APPEND
[.ext] para adicionar o conteúdo a um arquivo existente e REPLACE para
[REP[LACE]APP[END]]
sobregravar um arquivo existente. A extensão default é .sql.
GET filename [.ext] Grava o conteúdo de um arquivo salvo anteriormente no buffer SQL. A
extensão default do nome do arquivo é .sql.
STA[RT] filename Executa um arquivo de comandos salvo anteriormente
[.ext]
@ filename Executa um arquivo de comandos salvo anteriormente (igual a START)
ED[IT] Acessa o editor e salva o conteúdo do buffer no arquivo afiedt.buf
ED[IT] Acessa o editor para editar o conteúdo de um arquivo salvo
[filename[.ext]]
SPO[OL] Armazena os resultados da consulta em um arquivo. OFF fecha o
[filename[.ext]| arquivo de spool. OUT fecha o arquivo de spool e envia os resultados
OFF|OUT]
do arquivo para a impressora.
EXIT Encerra o SQL*Plus

Oracle Database: Fundamentos de SQL I D - 13


Usando os Comandos SAVE e START

LIST
1 SELECT last_name, manager_id, department_id
2* FROM employees

SAVE my_query
Created file my_query

Oracle Internal & Oracle Academy Use Only


START my_query

LAST_NAME MANAGER_ID DEPARTMENT_ID


------------------------- ---------- -------------
King 90
Kochhar 100 90
...
107 rows selected.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando os Comandos SAVE, START e EDIT


SAVE
Use o comando SAVE para armazenar o conteúdo atual do buffer em um arquivo. Dessa
maneira, você pode armazenar scripts usados frequentemente para emprego futuro.
START
Use o comando START para executar um script no SQL*Plus. Você também pode, como
alternativa, usar o símbolo @ para executar um script.
@my_query

Oracle Database: Fundamentos de SQL I D - 14


Comando SERVEROUTPUT
• Use o comando SET SERVEROUT[PUT] para controlar se
o resultado dos procedimentos armazenados ou os blocos
PL/SQL deverão ser exibidos no SQL*Plus.
• O limite de comprimento da linha DBMS_OUTPUT
é aumentado de 255 bytes para 32767 bytes.
• O tamanho default agora é ilimitado.
• Os recursos não são pré-alocados quando
SERVEROUTPUT está definido.

Oracle Internal & Oracle Academy Use Only


• Como não há penalidades de desempenho, use
UNLIMITED, a não ser que você deseje preservar
a memória física.

SET SERVEROUT[PUT] {ON | OFF} [SIZE {n | UNL[IMITED]}]


[FOR[MAT] {WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]}]

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Comando SERVEROUTPUT
A maioria dos programas PL/SQL executa entrada e saída por meio de instruções SQL, para
armazenar dados em tabelas de banco de dados ou consultar essas tabelas. Toda a entrada/saída
PL/SQL restante é feita por meio de APIs que interagem com outros programas. Por exemplo, o
pacote DBMS_OUTPUT possui procedures como PUT_LINE. Para ver o resultado fora do
código PL/SQL, é necessário outro programa, como o SQL*Plus, para ler e exibir os dados
passados para DBMS_OUTPUT.
O SQL*Plus não exibirá os dados de DBMS_OUTPUT a não ser que você primeiro envie o
comando SET SERVEROUTPUT ON do SQL*Plus conforme a seguir:
SET SERVEROUTPUT ON
Observação
• SIZE define o número de bytes da saída, que pode ser armazenado em buffer no servidor
do Oracle Database. O default é UNLIMITED. n não pode ser menor que 2000 ou mais
que 1.000.000.
• Para obter informações adicionais sobre SERVEROUTPUT, consulte o Oracle Database
PL/SQL User's Guide and Reference 11g.

Oracle Database: Fundamentos de SQL I D - 15


Usando o Comando SPOOL do SQL*Plus

SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] |


APP[END]] | OFF | OUT]

Opção Descrição
file_name[.ext] Envia a saída para o nome de arquivo especificado

CRE[ATE] Cria um novo arquivo com o nome especificado

Oracle Internal & Oracle Academy Use Only


REP[LACE] Substitui o conteúdo de um arquivo existente. Se o
arquivo não existir, REPLACE criará o arquivo.

APP[END] Adiciona o conteúdo do buffer ao final do arquivo


especificado

OFF Interrompe o spooling

OUT Para o spooling e envia o arquivo para a impressora


padrão (default) do computador

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando o Comando SPOOL do SQL*Plus


O comando SPOOL armazena os resultados da consulta em um arquivo ou, como opção, envia o
arquivo para uma impressora. O comando SPOOL foi aprimorado. Você agora pode anexar ou
substituir um arquivo existente; anteriormente, só era possível usar o comando SPOOL para criar
(e substituir) um arquivo. REPLACE é o default.
Para enviar a saída gerada pelos comandos em um script sem exibir a saída na tela, use SET
TERMOUT OFF. SET TERMOUT OFF não afeta a saída de comandos executados de forma
interativa.
Você deve usar aspas nos nomes de arquivos que contêm espaço em branco. Para criar um
arquivo HTML válido usando os comandos SPOOL APPEND, você deve usar PROMPT ou um
comando similar para criar o cabeçalho e o rodapé da página HTML. O comando SPOOL
APPEND não efetua parse de tags HTML. SET SQLPLUSCOMPAT[IBILITY] para 9,2 ou
anterior para desativar os parâmetros CREATE, APPEND e SAVE.

Oracle Database: Fundamentos de SQL I D - 16


Usando o Comando AUTOTRACE

• Ele exibe um relatório depois da execução bem-sucedida


das instruções SQL DML, como SELECT, INSERT,
UPDATE ou DELETE.
• Agora, o relatório pode incluir estatísticas de execução
e o caminho de execução da consulta.

Oracle Internal & Oracle Academy Use Only


SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]]
[STAT[ISTICS]]

SET AUTOTRACE ON
-- The AUTOTRACE report includes both the optimizer
-- execution path and the SQL statement execution
-- statistics

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando o Comando AUTOTRACE


EXPLAIN mostra o caminho de execução da consulta executando EXPLAIN PLAN.
STATISTICS exibe as estatísticas da instrução SQL. A formatação do relatório AUTOTRACE
poderá variar dependendo da versão do servidor ao qual você está conectado e da configuração
desse servidor. O pacote DBMS_XPLAN oferece uma maneira fácil de exibir o resultado do
comando EXPLAIN PLAN em vários formatos predefinidos.
Observação
• Para obter informações adicionais sobre o pacote e os subprogramas, consulte o Oracle
Database PL/SQL Packages and Types Reference 11g.
• Para obter informações adicionais sobre EXPLAIN PLAN, consulte Oracle Database SQL
Reference 11g.
• Para obter informações adicionais sobre Planos de Execução e estatísticas, consulte Oracle
Database Performance Tuning Guide 11g.

Oracle Database: Fundamentos de SQL I D - 17


Sumário

Neste apêndice, você aprendeu a usar o SQL*Plus como um


ambiente para:
• Executar instruções SQL
• Editar instruções SQL
• Formatar a saída
• Interagir com arquivos de script

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Sumário
O SQL*Plus é um ambiente de execução que pode ser usado para enviar comandos SQL para o
servidor de banco de dados e para editar e salvar comandos SQL. Você pode executar comandos
no prompt do SQL ou em um arquivo de script.

Oracle Database: Fundamentos de SQL I D - 18


Usando o JDeveloper

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos

Ao concluir este apêndice, você será capaz de:


• Listar os principais recursos do Oracle JDeveloper
• Criar uma conexão de banco de dados no JDeveloper
• Gerenciar objetos de banco de dados no JDeveloper
• Usar o JDeveloper para executar Comandos do SQL
• Criar e executar Unidades de Programa PL/SQL

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Objetivos
Neste apêndice, você será apresentado ao JDeveloper. Você aprenderá a usar o JDeveloper nas
tarefas de desenvolvimento de seu banco de dados.

Oracle Database: Fundamentos de SQL I E - 2


Oracle JDeveloper

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Oracle JDeveloper
O Oracle JDeveloper é um IDE (Integrated Development Environment) para o desenvolvimento
e a disponibilização de aplicações Java e serviços Web. Ele suporta todos os estágios do SDLC
(Software Development Life Cycle), desde a modelagem até a implantação. Também dispõe dos
recursos que permitem usar os padrões mais recentes do setor para Java, XML e SQL no
desenvolvimento de aplicações.
O Oracle JDeveloper 11g introduz uma nova abordagem para o desenvolvimento em J2EE ao
oferecer recursos que permitem desenvolvimento visual e declarativo. Essa abordagem
inovadora torna o desenvolvimento em J2EE simples e eficiente.

Oracle Database: Fundamentos de SQL I E - 3


Database Navigator

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Database Navigator
Usando o Oracle JDeveloper, é possível armazenar em um objeto denominado “connection”
(conexão) as informações necessárias para se conectar a um banco de dados. Uma conexão é
armazenada como parte das definições do IDE e pode ser exportada e importada, a fim de
facilitar o compartilhamento entre grupos de usuários. As conexões são usadas para várias
finalidades, desde a navegação no banco de dados e a criação de aplicações até a implantação.

Oracle Database: Fundamentos de SQL I E - 4


Criando Conexão

Clique no ícone New Connection


1 no Database Navigator.

2 Na janela Create Database

Oracle Internal & Oracle Academy Use Only


Connection, preencha os campos
Username, Password e SID.

3 Clique em Test Connection.

4 Clique em OK.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando Conexão
Uma conexão é um objeto que especifica as informações necessárias para se conectar com um
determinado banco de dados como um usuário específico desse banco de dados. Você pode criar
e testar conexões com vários bancos de dados e vários esquemas.
Para criar uma conexão de banco de dados, execute as seguintes etapas:
1. Clique no ícone New Connection no Database Navigator.
2. Na janela Create Database Connection, informe o nome da conexão. Informe o nome de
usuário e a senha do esquema ao qual deseja se conectar. Informe o SID do Banco de
Dados com o qual deseja se conectar.
3. Clique em Test para garantir que a conexão foi definida corretamente.
4. Clique em OK.

Oracle Database: Fundamentos de SQL I E - 5


Navegando por Objetos de Banco de Dados
Use o Database Navigator para:
• Navegar por vários objetos em um esquema de banco de
dados
• Analisar rapidamente as definições de objetos

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Navegando por Objetos de Banco de Dados


Após criar uma conexão de banco de dados, você poderá usar o Database Navigator para
procurar dentre vários objetos em um esquema de banco de dados, incluindo Tabelas, Views,
Índices, Pacotes, Procedures, Triggers e Tipos.
Você pode visualizar a definição dos objetos dividida em tabs de informações que são obtidas do
dicionário de dados. Por exemplo, se você tiver selecionado uma tabela no Navigator, os
detalhes sobre colunas, restrições, grants, estatísticas, triggers e assim por diante serão exibidos
em um Database Navigator fácil de ler.

Oracle Database: Fundamentos de SQL I E - 6


Executando Instruções SQL

Oracle Internal & Oracle Academy Use Only


3

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Executando Instruções SQL


Para executar uma instrução SQL, siga estas etapas:
1. Clique no ícone Open SQL Worksheet.
2. Selecione a conexão.
3. Execute o comando SQL:
1. Clicando no botão Execute statement ou pressionando F9. A saída é a seguinte:

2. Clicando no botão Run Script ou pressionando F5. A saída é a seguinte:

Oracle Database: Fundamentos de SQL I E - 7


Criando Unidades de Programa

Oracle Internal & Oracle Academy Use Only


1

3
Esqueleto da função

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Criando Unidades de Programa


Para criar uma unidade de programa PL/SQL, faça o seguinte:
1. Selecione View > Database Navigator. Selecione e expanda uma conexão com o banco de
dados. Clique com o botão direito do mouse na pasta correspondente ao tipo de objeto
(Procedures, Pacotes, Funções). Escolha “New [Procedures|Packages|Functions]”.
2. Informe um nome válido para a função, o pacote ou o procedure e clique em OK.
3. Uma definição de esqueleto é criada e aberta no Code Editor. Em seguida, você poderá
editar o subprograma para adequá-lo às suas necessidades.

Oracle Database: Fundamentos de SQL I E - 8


Compilando

Compilação com erros

Oracle Internal & Oracle Academy Use Only


Compilação sem erros

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Compilando
Após editar a definição de esqueleto, você precisa compilar a unidade de programa. Clique com
o botão direito do mouse no objeto PL/SQL a ser compilado no Connection Navigator e
selecione Compile. Como alternativa, também é possível pressionar [Ctrl] + [Shift] + [F9] para
fazer a compilação.

Oracle Database: Fundamentos de SQL I E - 9


Executando uma Unidade de Programa

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Executando uma Unidade de Programa


Para executar uma unidade de programa, clique com o botão direito do mouse no objeto e,
depois, clique em Run. A caixa de diálogo Run PL/SQL será exibida. Talvez seja preciso alterar
os valores NULL para valores aceitáveis que serão especificados na unidade de programa. Após
alterar os valores, clique em OK. A saída será exibida na janela Message-Log.

Oracle Database: Fundamentos de SQL I E - 10


Eliminando uma Unidade de Programa

Oracle Internal & Oracle Academy Use Only


1

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Eliminando uma Unidade de Programa


Para eliminar uma unidade de programa, clique com o botão direito do mouse no objeto e
selecione Drop. A caixa de diálogo Drop Confirmation será exibida. Clique em Apply. O objeto
será eliminado do banco de dados.

Oracle Database: Fundamentos de SQL I E - 11


Janela Structure

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Janela Structure
A janela Structure permite uma visão estrutural dos dados contidos no documento selecionado
na janela ativa, que pode ser um dos elementos que formam a estrutura: navegadores, editores,
modos de exibição e o Property Inspector.
Clique na janela View > Structure para exibir a janela Structure.
Na janela Structure, é possível exibir os dados do documento de várias maneiras. As estruturas
disponíveis para exibição se baseiam no tipo do documento. No caso de um arquivo Java, é
possível exibir a estrutura de código, a estrutura da interface do usuário ou os dados de modelo
da interface do usuário. No caso de um arquivo XML, é possível exibir a estrutura XML, a
estrutura do projeto ou os dados de modelo da interface do usuário.
A janela Structure é dinâmica, controlando sempre a seleção atual da janela ativa (a menos que
você congele o conteúdo da janela em uma view específica), como acontece com o editor ativo
no momento. Quando a seleção atual é um nó no navegador, o editor default é utilizado. Se
quiser alterar a view da estrutura para a seleção atual, clique em outra tab de estrutura.

Oracle Database: Fundamentos de SQL I E - 12


Janela Editor

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Janela Editor
Quando você clica duas vezes no nome de uma unidade de programa, ela é aberta na janela
Editor. É possível exibir todos os arquivos de projeto em apenas uma janela do editor, abrir
várias views do mesmo arquivo ou abrir várias views de arquivos diferentes.
Na parte superior da janela do editor, encontram-se as tabs de documentos. Clicar em uma tab de
documento coloca esse arquivo em destaque, trazendo-o para o primeiro plano da janela do
editor atual.
Na parte inferior da janela do editor referente a um determinado arquivo, estão as tabs de editor.
A seleção de uma dessas tabs abre o arquivo no editor correspondente.

Oracle Database: Fundamentos de SQL I E - 13


Application Navigator

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Application Navigator
O Applications - Navigator oferece uma visão lógica da aplicação e dos dados contidos nela.
Esse navegador fornece uma infraestrutura à qual as diversas extensões podem se conectar.
Essas extensões também podem usar a infraestrutura para organizar seus dados e menus de
forma consistente e abstrata. Embora o Applications - Navigator possa conter arquivos
individuais (como arquivos-fonte Java), ele foi projetado para consolidar dados complexos.
Nesse navegador, os tipos de dados complexos, como objetos de entidades, diagramas UML,
EJB ou serviços Web, aparecem como nós únicos. Os arquivos brutos que compõem esses nós
abstratos são exibidos na janela Structure.

Oracle Database: Fundamentos de SQL I E - 14


Implantando Procedures Java Armazenados

Antes de implantar procedures Java armazenados, execute as


seguintes etapas:
1. Crie uma conexão de banco de dados.
2. Crie um perfil de implantação.
3. Implante os objetos.

Oracle Internal & Oracle Academy Use Only


1 2 3

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Implantando Procedures Java Armazenados


Crie um perfil de implantação para os procedures Java armazenados e implante as classes. Se
quiser, você também poderá implantar métodos estáticos públicos no JDeveloper usando as
definições do perfil.
A implantação no banco de dados usa as informações fornecidas no Deployment Profile Wizard,
além de dois utilitários do Oracle Database:
• loadjava carrega em um banco de dados Oracle a classe Java que contém os procedures
armazenados.
• publish gera os encapsuladores específicos de chamada PL/SQL para os métodos
estáticos públicos carregados. A publicação permite que os métodos Java sejam chamados
como funções ou procedures PL/SQL.

Oracle Database: Fundamentos de SQL I E - 15


Publicando Java em PL/SQL

Oracle Internal & Oracle Academy Use Only


2

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Publicando Java em PL/SQL


O slide mostra o código Java e ilustra como publicá-lo em um procedure PL/SQL.

Oracle Database: Fundamentos de SQL I E - 16


Como Posso Obter Mais Informações
sobre o JDeveloper 11g?

Tópico Web site


Página de Produto do Oracle
JDeveloper http://www.oracle.com/technology/products/jdev/index.html

Tutoriais do Oracle http://www.oracle.com/technology/obe/obe11jdev/11/index


JDeveloper 11g .html

Oracle Internal & Oracle Academy Use Only


Documentação do
Produto doOracle http://www.oracle.com/technology/documentation/jdev.html
JDeveloper 11g
Fórum de Discussão do http://forums.oracle.com/forums/forum.jspa?forumID=83
Oracle JDeveloper 11g

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Oracle Database: Fundamentos de SQL I E - 17


Sumário

Neste apêndice, você aprendeu a:


• Listar os principais recursos do Oracle JDeveloper
• Criar uma conexão de banco de dados no JDeveloper
• Gerenciar objetos de banco de dados no JDeveloper
• Usar o JDeveloper para executar Comandos do SQL
• Criar e executar Unidades de Programa PL/SQL

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Oracle Database: Fundamentos de SQL I E - 18


Sintaxe Join do Oracle

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos

Ao concluir este apêndice, você será capaz de:


• Escrever instruções SELECT para acessar os dados de
mais de uma tabela usando equijoins e não-equijoins
• Unir uma tabela a ela mesma usando uma self-join
• Visualizar os dados que normalmente não atendem a uma
condição de join usando joins externas

Oracle Internal & Oracle Academy Use Only


• Gerar um Produto Cartesiano de todas as linhas de duas
ou mais tabelas

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Objetivos
Esta lição explica como obter dados de mais de uma tabela. Uma join é usada para visualizar
informações de diversas tabelas. Portanto, você pode join as tabelas para visualizar informações
de mais de uma tabela.
Observação: Informações sobre joins podem ser encontradas na seção “SQL Queries and
Subqueries: Joins” em Oracle Database SQL Language Reference 11g, Release 1 (11.1).

Oracle Database: Fundamentos de SQL I F 2


Obtendo Dados de Várias Tabelas

EMPLOYEES DEPARTMENT

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Obtendo Dados de Várias Tabelas


Em alguns casos, poderá ser necessário usar dados de mais de uma tabela. No exemplo do slide,
o relatório exibe dados de duas tabelas separadas:
• IDs de Funcionários existem na tabela EMPLOYEES.
• IDs de Departamento existem tanto na tabela EMPLOYEES quanto na tabela
DEPARTMENTS.
• Nomes de Departmento existem na tabela DEPARTMENTS.
Para produzir o relatório, será necessário vincular as tabelas EMPLOYEES e DEPARTMENTS e
acessar os dados de ambas.

Oracle Database: Fundamentos de SQL I F 3


Produtos Cartesianos

• Um Produto Cartesiano é formado quando:


– Uma condição de join é omitida
– Uma condição de join é inválida
– Todas as linhas da primeira tabela são unidas a todas as
linhas na segunda tabela
• Para evitar o Produto Cartesiano, sempre inclua uma
condição de join válida em uma cláusula WHERE.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Produtos Cartesianos
Quando uma condição de join é inválida ou omitida completamente, o resultado é um Produto
Cartesiano, no qual todas as combinações de linha são exibidas. Em outras palavras, todas as
linhas na primeira tabela são unidas a todas as linhas da segunda tabela.
Um Produto Cartesiano tende a gerar um grande número de linhas e o resultado raramente é útil.
Portanto, você deverá sempre incluir uma condição de join válida a não ser que você precise
especificamente combinar todas as linhas de todas as tabelas.
No entanto, os Produtos Cartesianos são úteis para alguns testes, quando você precisa gerar um
grande número de linhas para simular uma quantidade razoável de dados.

Oracle Database: Fundamentos de SQL I F 4


Gerando um Produto Cartesiano

EMPLOYEES (20 linhas) DEPARTMENTS (8 linhas)

Oracle Internal & Oracle Academy Use Only


Produto
Cartesiano:
20 x 8 = 160 linhas …

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Gerando um Produto Cartesiano


Um Produto Cartesiano é gerado quando uma condição de join é omitida. O exemplo do slide
exibe os sobrenomes e o departamento do funcionário das tabelas EMPLOYEES e
DEPARTMENTS, respectivamente. Como uma condição de join não foi especificada, todas as
linhas (20 linhas) da tabela EMPLOYEES serão unidas a todas as linhas (8 linhas) da tabela
DEPARTMENTS, gerando, portanto 160 linhas no resultado.
SELECT last_name, department_name dept_name
FROM employees, departments;

Oracle Database: Fundamentos de SQL I F 5


Tipos de Joins Proprietárias da Oracle

• Equijoin
• Não-equijoin
• Join externa
• Self-join

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Tipos de Joins
Para unir tabelas, você pode usar a sintaxe de join da Oracle.
Observação: Antes do lançamento do Oracle9i , a sintaxe de join era proprietária. A sintaxe join
compatível com SQL:1999– não oferece nenhum benefício de desempenho em relação à sintaxe
join proprietária da Oracle.
A Oracle não possui uma sintaxe equivalente para oferecer suporte à FULL OUTER JOIN da
sintaxe join compatível com SQL:1999.

Oracle Database: Fundamentos de SQL I F 6


Unindo Tabelas Usando a Sintaxe Oracle

Use uma condição de join para consultar dados de mais de


uma tabela:

SELECT table1.column, table2.column


FROM table1, table2
WHERE table1.column1 = table2.column2;

• Escreva a condição de join na cláusula WHERE.

Oracle Internal & Oracle Academy Use Only


• Adicione um prefixo ao nome da coluna com o nome da
tabela quando o mesmo nome de coluna aparecer em
mais de uma tabela.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Unindo Tabelas Usando a Sintaxe Oracle


Quando os dados de mais de uma tabela do banco de dados forem necessários, uma condição de
join será usada. As linhas em uma tabela podem ser unidas a linhas em outra tabela de acordo
com valores comuns que existam nas colunas correspondentes (isto é, normalmente colunas de
chave principal e estrangeira).
Para exibir os dados de duas ou mais tabelas relacionadas, escreva uma condição de join simples
na cláusula WHERE.
Na sintaxe:
table1.column Denota a tabela e a coluna das quais os dados são recuperados
table1.column1 = É a condição que une (ou relaciona) as tabelas
table2.column2
Diretrizes
• Ao escrever uma instrução SELECT que une tabelas, coloque o nome da tabela antes do
nome da coluna para fins de clareza e para aprimorar o acesso ao banco de dados.
• Se o mesmo nome de coluna aparece em mais de uma tabela, o nome da coluna deverá ser
antecedido pelo nome da tabela.
• Para unir n tabelas, será necessário um mínimo de n-1 condições de join. Por exemplo,
para unir quatro tabelas, será necessário um mínimo de três joins. Essa regra poderá não se
aplicar se sua tabela possuir uma chave principal concatenada. Nesse caso, mais de uma
coluna será necessária para identificar cada linha de forma exclusiva.
Oracle Database: Fundamentos de SQL I F 7
Qualificando Nomes de Coluna Ambíguos

• Use prefixos de tabela para qualificar nomes de colunas


que estejam presentes em várias tabelas.
• Use prefixos de tabelas para melhorar o desempenho.
• Em vez de usar o nome completo da tabela nos prefixos,
use apelidos.
• Os apelidos fazem com que a tabela tenha um nome mais

Oracle Internal & Oracle Academy Use Only


curto.
– Mantém o código SQL menor, usa menos memória
• Use apelidos de colunas para distinguir colunas que têm
nomes idênticos, mas residem em tabelas diferentes.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Qualificando Nomes de Coluna Ambíguos


Ao unir duas ou mais tabelas, será necessário qualificar s nomes das colunas com o nome da
tabela para evitar ambiguidade. Sem os prefixos de tabela, a coluna DEPARTMENT_ID na lista
SELECT pode ser tanto da tabela DEPARTMENTS quanto da tabela EMPLOYEES. Portanto, é
necessário adicionar o prefixo de tabela para executar a consulta. Caso não haja nomes de coluna
em comum entre as duas tabelas, não há necessidade de qualificá-las. No entanto, o uso de um
prefixo de tabela melhora o desempenho, pois você informa ao servidor Oracle exatamente onde
as colunas deverão ser encontradas.
A qualificação de nomes de colunas com nomes de tabelas pode levar bastante tempo,
particularmente se os nomes das tabelas forem grandes. Portanto, você poderá usar apelidos de
tabela em vez de nomes de tabelas. Assim como um apelido de coluna dá outro nome à coluna,
o apelido de tabela dá outro nome à tabela. Os apelidos de tabela ajudam a manter o código SQL
menor usando, portanto, menos memória.
O nome da tabela é especificado na forma completa, seguido por um espaço e pelo apelido da
tabela. Por exemplo, a tabela EMPLOYEES pode receber o apelido e e a tabela DEPARTMENTS
pode receber o apelido d.
Diretrizes
• Os apelidos de tabela podem ter até 30 caracteres, mas apelidos menores são melhores do
que os maiores.
• Se um apelido for usado para um determinado nome de tabela na cláusula FROM, o apelido
da tabela deverá ser substituído pelo nome da tabela durante a instrução SELECT.
• Apelidos de tabela devem ser significativos.
• Um apelido de tabela será válido apenas para a instrução SELECT atual.
Oracle Database: Fundamentos de SQL I F 8
Equijoins

EMPLOYEES DEPARTMENT

Oracle Internal & Oracle Academy Use Only



Chave primária
Chave estrangeira

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Equijoins
Para determinar o nome do departamento de um funcionário, você compara o valor na coluna
DEPARTMENT_ID na tabela EMPLOYEES aos valores DEPARTMENT_ID na tabela
DEPARTMENTS. O relacionamento entre as tabelas EMPLOYEES e DEPARTMENTS é uma
equijoin; ou seja, os valores nas colunas DEPARTMENT_ID em ambas as tabelas devem ser
iguais. Com frequência, esse tipo de join envolve complementos de chaves primárias e
estrangeiras.
Observação: Equijoins também são chamadas de joins simples ou joins internas.

Oracle Database: Fundamentos de SQL I F 9


Recuperando Registros com Equijoins

SELECT e.employee_id, e.last_name, e.department_id,


d.department_id, d.location_id
FROM employees e, departments d
WHERE e.department_id = d.department_id;

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Recuperando Registros com Equijoins


No exemplo do slide:
• A cláusula SELECT especifica os nomes de coluna a serem recuperados:
- O sobrenome do funcionário, o número do funcionário e o número do departamento,
que são colunas na tabela EMPLOYEES
- O número e o nome do departamento e o ID do local, que são colunas na tabela
DEPARTMENTS
• A cláusula FROM especifica as duas tabelas que deverão ser acessadas pelo banco de
dados:
- Tabela EMPLOYEES
- Tabela DEPARTMENTS
• A cláusula WHERE especifica como as tabelas deverão ser unidas:
e.department_id = d.department_id
Como a coluna DEPARTMENT_ID é comum a ambas as tabelas, ela deverá possuir um prefixo
com o apelido da tabela para evitar ambiguidade. Outras colunas que não estão presentes em
ambas as tabelas não precisam ser qualificadas por um apelido de tabela, mas é recomendável
que isso seja feito para a obtenção de um melhor desempenho.
Observação: Quando você usa o ícone Execute Statement para executar a consulta, o SQL
Developer inclui um sufixo “_1” para diferenciar entre os dois DEPARTMENT_IDs.
Oracle Database: Fundamentos de SQL I F 10
Recuperando Registros com Equijoins: Exemplo

SELECT d.department_id, d.department_name,


d.location_id, l.city
FROM departments d, locations l
WHERE d.location_id = l.location_id;

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Recuperando Registros com Equijoins: Exemplo


No exemplo do slide, a tabela LOCATIONS está unida à tabela DEPARTMENTS pela coluna
LOCATION_ID, que é a única coluna de mesmo nome em ambas as tabelas. Os apelidos de
tabela são usados para qualificar as colunas e evitar ambiguidade.

Oracle Database: Fundamentos de SQL I F 11


Condições Adicionais de Pesquisa
Usando o Operador AND

SELECT d.department_id, d.department_name, l.city


FROM departments d, locations l
WHERE d.location_id = l.location_id
AND d.department_id IN (20, 50);

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Condições Adicionais de Pesquisa Usando o Operador AND


Além da join, você poderá ter critérios em sua cláusula WHERE para restringir as linhas a serem
analisadas em uma ou em mais tabelas da join. O exemplo no slide limita as linhas de resultado
àquelas nas quais o ID do departamento é igual a 20 ou 50:
Por exemplo, para exibir o número e o nome do departamento do funcionário Matos, você
precisará adicionar uma condição adicional na cláusula WHERE.
SELECT e.last_name, e.department_id,
d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND last_name = 'Matos';

Oracle Database: Fundamentos de SQL I F 12


Unindo Mais de Duas Tabelas

EMPLOYEES DEPARTMENTS LOCATIONS

Oracle Internal & Oracle Academy Use Only


Para unir n tabelas, será necessário um mínimo de n–1


condições de join. Por exemplo, para unir três tabelas,
um mínimo de duas condições de join é necessário.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Unindo Mais de Duas Tabelas


Em alguns casos, você precisará unir mais de duas tabelas. Por exemplo, para exibir o
sobrenome, o nome do departamento e a cidade de cada funcionário, você precisará unir as
tabelas EMPLOYEES, DEPARTMENTS e LOCATIONS.
SELECT e.last_name, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;

Oracle Database: Fundamentos de SQL I F 13


Não-equijoins

EMPLOYEE JOB_GRADES

Oracle Internal & Oracle Academy Use Only


A tabela JOB_GRADES define os
intervalos de valor de LOWEST_SAL e
… HIGHEST_SAL para cada
GRADE_LEVEL. Portanto, a coluna
GRADE_LEVEL poderá ser usada para
atribuir graus a cada funcionário.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Não-equijoins
Uma não-equijoin é uma condição de join que contém algo além de um operador de igualdade.
A relação entre as tabelas EMPLOYEES e JOB_GRADES é um exemplo de não-equijoin. A
coluna SALARY na tabela EMPLOYEES contém intervalos entre os valores nas colunas
LOWEST_SAL e HIGHEST_SAL da tabela JOB_GRADES. Portanto, cada funcionário poderá
ser classificado com base no salário. A relação é obtida com o uso de um operador diferente do
operador de igualdade (=).

Oracle Database: Fundamentos de SQL I F 14


Recuperando Registros com Não-equijoins

SELECT e.last_name, e.salary, j.grade_level


FROM employees e, job_grades j
WHERE e.salary
BETWEEN j.lowest_sal AND j.highest_sal;

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Recuperando Registros com Não-equijoins


O exemplo no slide cria uma não-equijoin para avaliar o grau do salário de um funcionário. O
salário deverá estar entre qualquer par do intervalo do salário mais baixo e do salário mais alto.
É importante observar que todos os funcionários aparecem exatamente uma vez quando essa
consulta é executada. Nenhum funcionário é repetido na lista. Há duas razões para isso:
• Nenhuma das linhas na tabela de grau de cargo contém graus que se sobreponham. Ou
seja, o valor do salário de um funcionário poderá estar apenas entre os valores de salário
baixo e de salário alto de uma das linhas na tabela de grau de salário.
• Os salários de todos os funcionários estão compreendidos entre os limites fornecidos pela
tabela de níveis de cargos. Ou seja, nenhum funcionário ganha menos do que o menor
valor presente na coluna LOWEST_SAL ou mais do que o maior valor presente na coluna
HIGHEST_SAL.
Observação: Outras condições (como <= e >=) podem ser usadas, mas BETWEEN é a mais
simples. Lembre-se de especificar o valor baixo antes do valor alto ao usar a condição
BETWEEN. O servidor Oracle converte a condição BETWEEN em um par de condições AND.
Portanto, usar BETWEEN não oferece benefícios de desempenho, mas deverá ser usada para fins
de simplicidade lógica.
Os apelidos de tabela foram especificados no exemplo do slide para fins de desempenho, não
porque representam uma possível ambiguidade.
Oracle Database: Fundamentos de SQL I F 15
Retornando Registros sem Correspondência
Direta com Joins Externas

DEPARTMENT EMPLOYEE

Oracle Internal & Oracle Academy Use Only


Não há funcionários no
departamento 190.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Retornando Registros sem Correspondência Direta com Joins Externas


Se uma linha não satisfizer uma condição de join, ela não será exibida no resultado da consulta.
Por exemplo, na condição equijoin das tabelas EMPLOYEES e DEPARTMENTS, o ID de
departamento 190 não aparece, pois não há funcionários com esse ID registrados na tabela
EMPLOYEES. Da mesma forma, há um funcionário cuja DEPARTMENT_ID está definida como
NULL, sendo assim, essa linha também não será exibida no resultado da consulta de uma
equijoin. Para retornar o registro do departamento que não contém funcionários, ou para retornar
o registro do funcionário que não pertence a nenhum departamento, você poderá usar a join
externa.

Oracle Database: Fundamentos de SQL I F 16


Joins Externas: Sintaxe

• Você usa uma join externa para ver linhas que não
atendem à condição de join.
• O operador de join externa é o sinal de mais (+).

SELECT table1.column, table2.column


FROM table1, table2
WHERE table1.column(+) = table2.column;

Oracle Internal & Oracle Academy Use Only


SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column(+);

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Joins Externas: Sintaxe


Linhas ausentes poderão ser retornadas se um operador de join externa for usado na condição de
join. O operador é um sinal de mais entre parênteses (+) e é colocado ao “lado” da join com
deficiência de informações. Esse operador tem o efeito de criar uma ou mais linhas nulas, às
quais uma ou mais linhas da tabela não deficiente poderão ser unidas.
Na sintaxe:
table1.column = É a condição que une (ou relaciona) as tabelas
table2.column (+) É o símbolo de join externa, que pode ser colocado em qualquer lado
da condição de cláusula WHERE, mas não nos dois lados (Coloque o
símbolo externo da joinapós o nome da coluna da tabela sem
as linhas correspondentes.)

Oracle Database: Fundamentos de SQL I F 17


Usando Joins Externas

SELECT e.last_name, e.department_id, d.department_name


FROM employees e, departments d
WHERE e.department_id(+) = d.department_id ;

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Usando Joins Externas


O exemplo do slide exibe o sobrenome, o ID de departamento e o nome de departamento do
funcionário. O departamento Contracting não possui funcionários. O valor vazio é mostrado no
resultado.
Restrições de Join Externa
• O operador de join externa poderá aparecer apenas em um lado da expressão—o lado no
qual a informação está ausente. Ele retornará as linhas de uma tabela que não possuem
correspondência direta na outra tabela.
• Uma condição que envolve uma join externa não pode usar o operador IN ou ser vinculada
a outra condição pelo operador OR
.Observação: A sintaxe de join da Oracle não possui equivalentes para FULL OUTER JOIN da
sintaxe de join compatível com SQL:1999.

Oracle Database: Fundamentos de SQL I F 18


Join Externa: Outro Exemplo

SELECT e.last_name, e.department_id, d.department_name


FROM employees e, departments d
WHERE e.department_id = d.department_id(+) ;

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Join Externa: Outro Exemplo


A consulta no exemplo do slide recupera todas as linhas na tabela EMPLOYEES, mesmo que não
haja correspondência na tabela DEPARTMENTS.

Oracle Database: Fundamentos de SQL I F 19


Unindo uma Tabela a Ela Mesma

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

Oracle Internal & Oracle Academy Use Only


… …

MANAGER_ID na tabela WORKER é igual a


EMPLOYEE_ID na tabela MANAGER.

Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Unindo uma Tabela a Ela Mesma


Em alguns casos, você precisará unir uma tabela a ela mesma. Para localizar o nome do gerente
de cada funcionário, será necessário unir a tabela EMPLOYEES a ela mesma ou executar uma
self-join. Por exemplo, para descobrir o nome do gerente de Lorentz, você precisa:
• Localizar Lorentz na tabela EMPLOYEES olhando a coluna LAST_NAME
• Localizar o número do gerente de Lorentz olhando a coluna MANAGER_ID. O número do
gerente de Lorentz é 103.
• Localizar o nome do gerente com o EMPLOYEE_ID 103 olhando na coluna LAST_NAME.
O número de funcionário de Hunold é 103, portanto, Hunold é o gerente de Lorentz.
Nesse processo, você olhou a tabela duas vezes. A primeira vez, você olhou para localizar
Lorentz na coluna LAST_NAME e o valor MANAGER_ID de 103. Na segunda vez, você olhou a
coluna EMPLOYEE_ID para localizar 103 e a coluna LAST_NAME para localizar Hunold.

Oracle Database: Fundamentos de SQL I F 20


Self-Join: Exemplo

SELECT worker.last_name || ' works for '


|| manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Self-Join: Exemplo
O exemplo do slide une a tabela EMPLOYEES a ela mesma. Para simular duas tabelas na
cláusula FROM, há dois apelidos (worker e manager) na mesma tabela, EMPLOYEES.
Neste exemplo, a cláusula WHERE contém a join que significa “onde o número do gerente de um
trabalhador corresponde ao número de funcionário do gerente”.

Oracle Database: Fundamentos de SQL I F 21


Sumário

Neste apêndice, você aprendeu a usar joins para exibir dados


de várias tabelas usando a sintaxe proprietária da Oracle.

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Sumário
Há várias maneiras de unir as tabelas.
Tipos de Joins
• Equijoins
• Não-equijoins
• Joins externas
• Self-joins
Produtos Cartesianos
Um Produto Cartesiano resulta na exibição de todas as combinações de linhas. Isso é feito pela
omissão da cláusula WHERE.
Apelidos de Tabela
• Apelidos de tabela aceleram o acesso ao banco de dados.
• Os apelidos de tabela podem ajudar a manter o código SQL menor, poupando memória.

Oracle Database: Fundamentos de SQL I F 22


Exercício F: Visão Geral

Este exercício aborda os seguintes tópicos:


• Unindo tabelas usando uma equijoin
• Executando self-joins e joins externas
• Adicionando condições

Oracle Internal & Oracle Academy Use Only


Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.

Exercício F: Visão Geral


Este exercício pretende proporcionar uma experiência prática de extração de dados de mais de
uma tabela usando a sintaxe de join da Oracle.

Oracle Database: Fundamentos de SQL I F 23


Oracle Internal & Oracle Academy Use Only
Índice

Oracle Internal & Oracle Academy Use Only


A
ANSI (American National Standards Institute) 4-4, 6-5, I-30
Apelidos 1-3, 1-5, 1-9, 1-10, 1-16, 1-17, 1-18, 1-19, 1-20, 1-21,
1-25, 1-29, 2-5, 2-6, 2-8, 2-23, 2-24, 2-38, 4-25, 5-14, 5-27,
6-7, 6-14, 6-16, 6-24, 6-36, 8-28, 10-33, C-8, F-8, F-10, F-11,
F-15, F-21, F-22
Apelidos da coluna 1-3, 1-9, 1-10, 1-16, 1-17, 1-18, 1-19, 1-21, 1-25,
1-29, 2-6, 2-24, 4-25, 5-14, 5-27, 6-7, 10-33, F-8
Atributos I-22, I-23, I-24
AVG 5-3, 5-5, 5-7, 5-8, 5-11, 5-12, 5-15, 5-16, 5-20, 5-23,
5-25, 5-26, 5-28, 7-13

Oracle Internal & Oracle Academy Use Only


B
Banco de Dados Oracle 11g 3-24, 7-8, 10-10, 10-14, 10-36, 10-38, C-4,
I-2, I-3, I-4, I-8, I-9, I-10, I-11, I-14, I-15, I-29, I-32,
I-33, I-36, I-37, I-38, I-39
Banco de dados 1-2, 1-4, 1-14, 1-15, 1-29, 2-2, 2-7, 3-4, 3-5,
3-10, 3-12, 3-16, 3-21, 3-24, 3-25, 3-26, 4-4, 4-9, 4-28, 5-15,
5-18, 5-28, 6-2, 6-6, 6-36, 7-8, 9-3, 9-4, 9-9, 9-13, 9-15,
9-19, 9-21, 9-25, 9-26, 9-27, 9-31, 9-33, 9-34, 9-39, 9-40, 9-41,
9-42, 9-43, 9-44, 9-45, 9-47, 10-2, 10-3, 10-4, 10-5, 10-6, 10-7,
10-8, 10-10, 10-11, 10-14, 10-15, 10-17, 10-31, 10-33, 10-34, 10-36, 10-37,
10-38, 10-40, 10-41, B-2, C-2, C-3, C-4, C-5, C-6, C-7, C-8,
C-9, C-10, C-12, C-13, C-15, C-16, C-17, C-19, C-26, C-29, C-31,
D-3, D-4, D-5, D-6, D-15, D-17, D-18, E-2, E-4, E-5, E-6,
E-8, E-11, E-15, E-18, F-2, F-7, F-10, F-22, I-2, I-3, I-4,
I-8, I-9, I-10, I-11, I-12, I-13, I-14, I-15, I-16, I-17, I-18,
I-19, I-20, I-22, I-27, I-28, I-29, I-30, I-31, I-32, I-33, I-34,
I-36, I-37, I-38, I-39, I-40
Banco de Dados Realacional 9-43, I-2, I-3, I-4, I-8, I-15, I-16,
I-18, I-19, I-27, I-28, I-29, I-30, I-31, I-33, I-36, I-39
BI Publisher I-14
C
Classificando 2-1, 2-3, 2-19, 2-22, 2-24, 2-25, 2-26, 2-34, 2-38,
2-39, I-5

Oracle Database: Fundamentos de SQL I Índice - 2


C
Cláusula GROUP BY 5-2, 5-3, 5-12, 5-13, 5-14, 5-15, 5-16, 5-18,
5-19, 5-22, 5-23, 5-25, 5-26, 5-27, 5-28, 7-14
Cláusula FOR UPDATE 9-3, 9-13, 9-19, 9-25, 9-39, 9-42, 9-43, 9-44,
9-45, 9-47
Cláusula HAVING 5-2, 5-3, 5-12, 5-20, 5-21, 5-22, 5-23, 5-24,
5-25, 5-28, 5-29, 7-3, 7-5, 7-9, 7-13, 7-16, 7-21, 7-25
Cláusula ON 6-3, 6-5, 6-6, 6-8, 6-15, 6-16, 6-17, 6-18, 6-19,
6-21, 6-22, 6-25, 6-27, 6-31, 8-17
Cláusula ORDER BY 2-3, 2-19, 2-22, 2-23, 2-24, 2-25, 2-26, 2-28,
2-34, 2-38, 2-39, 3-6, 5-15, 5-16, 5-18, 5-28, 8-3, 8-5, 8-7,

Oracle Internal & Oracle Academy Use Only


8-12, 8-18, 8-21, 8-24, 8-27, 8-28, 8-29, 8-30, 10-13
Cláusula USING 6-3, 6-5, 6-8, 6-11, 6-13, 6-14, 6-17, 6-19, 6-22, 6-25, 6-31
Cláusula WHERE 2-3, 2-4, 2-5, 2-6, 2-7, 2-8, 2-9, 2-11, 2-15,
2-19, 2-22, 2-26, 2-27, 2-28, 2-31, 2-32, 2-34, 2-37, 2-38, 2-39,
3-12, 5-9, 5-14, 5-15, 5-18, 5-20, 5-21, 5-22, 5-27, 5-28, 6-10,
6-14, 6-15, 6-18, 6-36, 7-2, 7-5, 7-13, 7-14, 7-15, 7-23, 8-5,
9-15, 9-16, 9-22, F-4, F-7, F-10, F-12, F-17, F-21, F-22
Comando DESCRIBE 1-3, 1-10, 1-16, 1-19, 1-25, 1-26, 1-27, 9-8,
10-10, 10-33, C-11, D-7
Comando VERIFY 2-3, 2-19, 2-22, 2-26, 2-34, 2-36
COMPRIMENTO 3-9, 3-10, 3-13, 3-14, 3-32, 4-32, 6-7, 8-6, 10-7, 10-12,
10-18, D-15, F-8
Condições NULL 2-3, 2-14
Consistência de Leitura 9-3, 9-13, 9-19, 9-25, 9-33, 9-39, 9-40, 9-41, 9-42
Constraint UNIQUE 10-21, 10-22
Consulta 1-4, 1-8, 1-17, 1-18, 1-21, 1-24, 2-2, 2-5, 2-23, 2-25,
2-27, 2-31, 2-33, 3-2, 3-6, 3-26, 3-33, 4-21, 4-35, 5-15, 6-6,
6-7, 6-14, 6-16, 6-24, 6-26, 6-28, 6-29, 6-30, 7-3, 7-4, 7-5,
7-6, 7-7, 7-8, 7-9, 7-10, 7-11, 7-12, 7-13, 7-14, 7-15, 7-16,
7-17, 7-18, 7-19, 7-20, 7-21, 7-22, 7-23, 7-24, 7-25, 7-26, 8-2,
8-5, 8-6, 8-13, 8-17, 8-19, 8-20, 8-22, 8-25, 8-26, 8-28, 8-29,
8-30, 9-12, 9-15, 9-17, 9-23, 9-33, 9-43, 9-44, 9-47, 10-3, 10-6,
10-10, 10-11, 10-13, 10-15, 10-27, 10-31, 10-32, 10-33, 10-34, 10-37, 10-40,
10-41, C-18, C-27, D-3, D-5, D-13, D-14, D-15, D-16, D-17, F-7,
F-8, F-10, F-15, F-16, F-19, I-4, I-16, I-30

Oracle Database: Fundamentos de SQL I Índice - 3


C
Conversão explícita do tipo de dados 4-3, 4-4, 4-7, 4-8, 4-9, 4-10,
4-23, 4-27, 4-36
Conversão Implícita de Tipo de Dados 4-4, 4-5, 4-6
Criando uma Conexão com o Banco de Dados C-7, C-8, C-9
CURRENT_DATE 3-24, 9-9
CURRVAL 10-9, 10-27
D
Data 1-9, 1-11, 1-20, 1-21, 2-7, 2-8, 2-11, 2-12, 2-23, 2-24,
2-25, 2-28, 2-31, 3-2, 3-3, 3-4, 3-5, 3-7, 3-8, 3-15, 3-17,

Oracle Internal & Oracle Academy Use Only


3-18, 3-20, 3-21, 3-22, 3-23, 3-24, 3-25, 3-26, 3-27, 3-28, 3-29,
3-30, 3-32, 3-33, 4-2, 4-3, 4-5, 4-6, 4-7, 4-8, 4-9, 4-10,
4-11, 4-12, 4-13, 4-14, 4-15, 4-16, 4-20, 4-21, 4-22, 4-23, 4-25,
4-27, 4-29, 4-36, 4-43, 4-44, 4-45, 5-6, 5-8, 5-28, 8-8, 8-10,
9-2, 9-3, 9-4, 9-7, 9-9, 9-10, 9-13, 9-14, 9-15, 9-16, 9-17,
9-18, 9-19, 9-25, 9-29, 9-30, 9-35, 9-39, 9-40, 9-41, 9-42, 9-43,
9-44, 9-45, 9-47, 9-48, 10-9, 10-10, 10-12, 10-14, 10-16, 10-20, 10-22,
10-25, 10-26, 10-27, 10-28, 10-29, 10-33, 10-36, 10-38, 10-39, B-3, C-10,
D-17, E-14, I-4, I-9, I-16, I-17, I-18, I-22, I-31, I-34
DBMS 9-43, D-15, D-17, I-2, I-17, I-18, I-25, I-27, I-39
E
Esquema 10-2, 10-5, 10-7, 10-8, 10-18, 10-28, 10-40, B-2, C-3, C-5,
C-7, C-8, C-10, C-13, E-5, E-6, I-2, I-3, I-4, I-6, I-8,
I-15, I-29, I-33, I-34, I-36, I-40
Equijoins 6-2, 6-3, 6-8, 6-12, 6-19, 6-22, 6-23, 6-24, 6-25,
6-35, 6-36, F-2, F-9, F-10, F-11, F-14, F-15, F-22
Expressões Aritméticas 1-3, 1-10, 1-11, 1-15, 1-16, 1-19, 1-20,
1-25, 2-5
Expressão CASE 4-32, 4-37, 4-38, 4-39, 4-40, 4-44
Executar SQL C-2, C-15, C-17, C-31, D-2, D-5, D-18, E-2, E-18
F
Formato de Data 3-22, 3-23, 4-22
Formatar Modelo 3-28, 3-30, 4-11, 4-12, 4-14, 4-15, 4-16, 4-19, 4-20, 4-43
Função COUNT 5-9
Função COALESCE 4-33, 4-34, 4-35

Oracle Database: Fundamentos de SQL I Índice - 4


F
Função DECODE 4-37, 4-39, 4-40, 4-41, 4-42, 4-44, 5-6
Funções 2-5, 2-7, 3-1, 3-2, 3-3, 3-4, 3-5, 3-6, 3-7,
3-8, 3-9, 3-10, 3-11, 3-12, 3-13, 3-14, 3-15, 3-16, 3-17, 3-18,
3-20, 3-24, 3-27, 3-28, 3-29, 3-30, 3-31, 3-32, 3-33, 4-1, 4-2,
4-3, 4-4, 4-7, 4-9, 4-10, 4-20, 4-21, 4-23, 4-24, 4-25, 4-26,
4-27, 4-28, 4-36, 4-44, 4-45, 5-1, 5-2, 5-3, 5-4, 5-5, 5-6,
5-7, 5-8, 5-11, 5-12, 5-13, 5-14, 5-15, 5-19, 5-20, 5-22, 5-25,
5-26, 5-27, 5-28, 5-29, 7-3, 7-9, 7-12, 7-16, 7-21, 7-25, 8-25,
9-9, 10-9, 10-27, C-5, C-6, C-23, C-24, C-25, E-8, E-15, I-4, I-5
Funções de Conversão 3-7, 3-9, 3-11, 3-12, 3-28, 4-1, 4-2,

Oracle Internal & Oracle Academy Use Only


4-4, 4-9, 4-44, 8-25, I-5
Funções de Grupo 3-5, 5-1, 5-2, 5-3, 5-4, 5-5, 5-6, 5-11,
5-12, 5-13, 5-14, 5-15, 5-19, 5-20, 5-22, 5-25, 5-26, 5-27, 5-28,
5-29, 7-3, 7-9, 7-12, 7-16, 7-21, 7-25, I-5
Funções de Grupo em uma Subconsulta 7-3, 7-9, 7-12, 7-16, 7-21
Funções de Número 3-3, 3-7, 3-8, 3-15, 3-16, 3-20, 3-27, 3-28,
4-3, 4-10, 4-23, 4-27, 4-36
Função MOD 3-19
Função NULLIF 4-32
Função NVL 4-29, 4-30, 4-33, 4-44, 5-11
Função NVL2 4-31
Funções ROUND e TRUNC 3-30, 3-32
Função ROUND 3-17, 3-18, 4-26
Função SYSDATE 3-23, 3-24, 9-9
I
Icone Execute Statement 1-8, 6-16, 10-41, F-10
Identificador Exclusivo I-23, I-24
Índice 10-4, 10-8, 10-10, 10-22, 10-23, 10-36, 10-38, C-4, C-10, E-6, I-38
Instrução ALTER TABLE 10-35, 10-36
Instruçaõ CREATE TABLE 9-12, 10-3, 10-6, 10-7, 10-11, 10-15, 10-31,
10-32, 10-34, 10-37, 10-40, 10-41
Instrução DELETE 9-3, 9-13, 9-19, 9-21, 9-22, 9-23, 9-24, 9-25,
9-39, 9-40, 9-42
Instrução INSERT 9-3, 9-6, 9-8, 9-12, 9-13, 9-19, 9-25, 9-39,
9-42, 10-10, 10-18

Oracle Database: Fundamentos de SQL I Índice - 5


I
Instrução SELECT 1-1, 1-2, 1-3, 1-4, 1-5, 1-7, 1-10, 1-16,
1-19, 1-21, 1-22, 1-25, 1-28, 1-29, 2-6, 2-9, 2-10, 2-12, 2-21,
2-23, 2-28, 2-32, 2-35, 2-38, 2-39, 3-2, 3-12, 4-2, 4-44, 5-9,
5-15, 5-16, 5-17, 5-18, 5-19, 5-20, 6-2, 6-7, 7-2, 7-5, 7-8,
7-10, 7-11, 7-25, 7-26, 8-3, 8-6, 8-7, 8-12, 8-18, 8-19, 8-20,
8-21, 8-22, 8-24, 8-25, 8-26, 8-27, 9-3, 9-13, 9-19, 9-22, 9-25,
9-33, 9-39, 9-40, 9-41, 9-42, 9-43, 9-44, 9-47, 10-32, D-2, F-2,
F-7, F-8, I-4, I-5
Instrução UPDATE 9-3, 9-13, 9-15, 9-16, 9-17, 9-18, 9-19, 9-25,
9-39, 9-42, 9-43, 10-36

Oracle Internal & Oracle Academy Use Only


International Standards Organization I-31
INTERVAL YEAR TO MONTH 10-14
J
Java C-4, C-8, E-3, E-12, E-14, E-15, E-16, I-9, I-12, I-39
Joins Cruzadas 6-5, 6-34, 6-36
L
Linhas Duplicadas 1-24, 5-9, 8-6, 8-13, 8-16, 8-17, 8-30, I-27
Literal 1-3, 1-10, 1-14, 1-16, 1-19, 1-21, 1-22, 1-23, 1-25,
2-5, 2-12, 2-13, 3-13, 4-11, 4-14, 4-31, 4-32, 4-38, 8-26, 10-9
LPAD 3-9, 3-13
M
MÁX 5-3, 5-4, 5-5, 5-7, 5-8, 5-12, 5-21, 5-23, 5-25, 5-26,
5-28, 7-18, 7-19, B-2, B-3, I-10, I-34
MÍN 1-8, 1-24, 1-30, 2-7, 2-20, 2-27, 3-13, 3-19, 3-21, 3-23,
3-33, 4-31, 4-35, 4-42, 5-3, 5-5, 5-7, 5-8, 5-12, 5-14, 5-25,
5-28, 6-7, 6-12, 6-37, 7-4, 7-6, 7-12, 7-13, 7-14, 7-17, 7-18,
7-19, 7-24, 8-3, 8-4, 8-5, 8-6, 8-7, 8-12, 8-13, 8-14, 8-16,
8-17, 8-18, 8-21, 8-22, 8-23, 8-24, 8-27, 8-30, 8-31, 9-9, 9-16,
9-20, 9-31, 9-38, 9-43, 10-3, 10-5, 10-6, 10-7, 10-11, 10-14, 10-15,
10-17, 10-27, 10-31, 10-34, 10-37, B-2, B-3, C-7, C-8, C-23, C-25,
C-26, C-30, D-3, D-6, D-9, D-17, F-7, F-8, F-9, F-13, F-23,
I-3, I-4, I-8, I-10, I-12, I-13, I-15, I-16, I-20, I-27, I-28,
I-29, I-33, I-34, I-36, I-39, I-40

Oracle Database: Fundamentos de SQL I Índice - 6


N
Não-equijoins 6-2, 6-3, 6-8, 6-19, 6-22, 6-23, 6-24, 6-25, 6-35,
6-36, F-2, F-14, F-15, F-22
NEXTVAL 10-9, 10-27
Nomeação 10-3, 10-5, 10-6, 10-11, 10-15, 10-17, 10-31, 10-34, 10-37
O
Objeto Relacional I-2, I-16, I-17
OLTP I-11, I-16
ON DELETE CASCADE 10-26
ON DELETE SET NULL 10-26

Oracle Internal & Oracle Academy Use Only


Opção DEFAULT 10-3, 10-6, 10-9, 10-11, 10-15, 10-31, 10-34, 10-37
Operador ALL 7-19, 8-3, 8-6, 8-7, 8-12, 8-16, 8-17, 8-18, 8-21,
8-24, 8-27, 8-29, 8-30
Operador AND 2-16, 2-21, F-12
Operador ANY 7-3, 7-9, 7-18, 7-21
Operador BETWEEN 2-10
Operador de concatenação 1-3, 1-10, 1-16, 1-19, 1-20, 1-25, 2-20
Operador IN 2-11, 7-22, F-17, F-18
Operador INTERSECT 8-3, 8-4, 8-5, 8-7, 8-12, 8-18, 8-19, 8-20,
8-21, 8-24, 8-27, 8-30, 8-31
Operador LIKE 2-12
Operador MINUS 8-3, 8-5, 8-7, 8-12, 8-18, 8-21, 8-22, 8-23,
8-24, 8-27, 8-30, 8-31
Operador NOT 2-3, 2-18, 2-19, 2-22, 2-26, 2-34, 2-38, 7-19
Operador OR 2-3, 2-15, 2-17, 2-19, 2-22, 2-26, 2-34, F-18
operador q 1-23
Operador Quote Alternativo (q) 1-23
Operador UNION 8-13, 8-14, 8-15, 8-25, 8-26, 8-30, 8-31

Oracle Database: Fundamentos de SQL I Índice - 7


O
Operadores Aritméticos 1-11, 1-12, 2-20, 3-25, 3-26, 3-32
Operadores de comparação 2-8, 2-9, 7-10, 7-17, 9-15, 9-21
Operadores Set 8-1, 8-2, 8-3, 8-4, 8-5, 8-6, 8-7, 8-12,
8-18, 8-21, 8-24, 8-27, 8-31, I-5
Oracle Enterprise Manager Grid Control I-13, I-39
Oracle Fusion Middleware i-12, i-13, i-39
Oracle Server 1-12, 2-11, 2-13, 2-23, 4-4, 4-5, 4-6, 4-19,
4-20, 4-38, 5-22, 5-28, 6-7, 6-24, 7-13, 7-17, 7-25, 8-4, 8-6,
9-4, 9-8, 9-26, 9-32, 9-33, 9-38, 9-41, 9-43, 9-47, 10-5, 10-16,
10-17, 10-22, 10-23, D-3, D-13, F-8, F-15, I-2, I-16, I-39

Oracle Internal & Oracle Academy Use Only


Oracle SQL Developer C-2, C-3, C-4, I-2, I-32, I-40
ORDBMS I-2, I-39
P
Palavra-chave DISTINCT 1-3, 1-10, 1-16, 1-19, 1-24, 1-25, 5-3, 5-10, 5-12, 5-25
Palavras-chaves 1-5, 1-8, 2-23, 6-9, 10-25, 10-26, C-22, D-4
Pedido 1-7, 1-13, 2-2, 2-3, 2-11, 2-19, 2-20, 2-22, 2-23, 2-24,
2-25, 2-26, 2-28, 2-32, 2-33, 2-34, 2-38, 2-39, 3-6, 4-25, 5-6,
5-14, 5-15, 5-16, 5-17, 5-18, 5-22, 5-24, 5-27, 5-28, 8-2, 8-3,
8-4, 8-5, 8-6, 8-7, 8-12, 8-13, 8-15, 8-17, 8-18, 8-19, 8-21,
8-24, 8-27, 8-28, 8-29, 8-30, 9-7, 9-8, 9-43, 9-44, 9-45, 10-13,
B-2, C-26, I-14, I-22, I-27
Produto Cartesiano 6-2, 6-3, 6-6, 6-8, 6-19, 6-22, 6-25, 6-31,
6-32, 6-33, 6-34, 6-35, 6-36, F-2, F-4, F-5, F-22
Projeção 1-4
Pseudocolunas 10-27
R
RDBMS 9-43, I-2, I-18, I-25, I-27, I-39
REFERÊNCIAS 1-14, 9-31, 10-24, 10-25, 10-26, 10-27, 10-28, C-5, C-6,
C-10, C-19, C-29
Regras de Precedência 1-12, 1-13, 2-3, 2-19, 2-20, 2-21, 2-22,
2-26, 2-34
Relacionamento entre Entidades B-3, I-21, I-22, I-23
Restrição CHECK 9-8, 10-3, 10-6, 10-11, 10-15, 10-27, 10-31, 10-34, 10-37

Oracle Database: Fundamentos de SQL I Índice - 8


R
Restrição NÃO NULA 1-26, 10-18, 10-20, 10-21, 10-32
Restrição PRIMARY KEY 9-8, 10-19, 10-20, 10-23
Restrições 1-14, 9-4, 9-8, 9-20, 9-24, 10-2, 10-3, 10-6, 10-11,
10-13, 10-15, 10-16, 10-17, 10-18, 10-19, 10-20, 10-21, 10-22, 10-25, 10-27,
10-29, 10-30, 10-31, 10-32, 10-34, 10-37, 10-39, 10-40, C-10, E-6, I-16, I-39
RPAD 3-9, 3-13

S
Seleção 1-4, 2-4, E-12

Oracle Internal & Oracle Academy Use Only


Self-join 6-35
SET VERIFY ON 2-36
Seqüências 2-24, 10-8
Sinônimo 1-24, 1-26, 7-18, 10-4, 10-8, 10-38, D-7, I-23, I-24
SQL Developer 1-6, 1-8, 1-9, 1-14, 1-17, 1-26, 2-28, 2-29,
2-30, 2-31, 2-33, 2-35, 2-36, 6-16, 9-4, 9-21, 9-27, 9-31, 9-32,
9-43, 10-9, 10-41, C-1, C-2, C-3, C-4, C-5, C-6, C-7, C-9,
C-10, C-11, C-13, C-17, C-22, C-23, C-25, C-26, C-27, C-28, C-29,
C-30, C-31, F-10, I-2, I-7, I-9, I-32, I-37, I-40
Strings de caractere 1-3, 1-10, 1-16, 1-19, 1-20, 1-21, 1-22, 1-25,
2-7, 2-16, 3-11, 3-13, 4-14, 4-17, 4-43
SUBSTR 3-9, 3-10, 3-13, 3-14, 3-32, 4-25
Substituição do E comercial 2-2, 2-29, 2-30, 2-33, 2-38, 2-39, 3-13
SUBSTITUIR 2-36, 3-9, 3-13, D-12, D-16
subconsulta 7-3, 7-4, 7-5, 7-6, 7-7, 7-8, 7-9, 7-10, 7-11,
7-12, 7-13, 7-14, 7-15, 7-16, 7-17, 7-18, 7-19, 7-20, 7-21, 7-22,
7-23, 7-24, 7-25, 9-12, 9-15, 9-17, 9-23, 10-3, 10-6, 10-11, 10-13,
10-15, 10-31, 10-32, 10-33, 10-34, 10-37, 10-40

Oracle Database: Fundamentos de SQL I Índice - 9


T
Tabela DUAL 3-17
Tabelas somente leitura 10-3, 10-6, 10-11, 10-15, 10-31, 10-34, 10-36, 10-37
Tipos de Dados 1-11, 1-26, 1-27, 3-4, 3-33, 4-4, 4-29, 4-31, 4-44,
5-6, 5-8, 6-9, 6-11, 8-13, 8-19, 8-22, 9-8, 9-12, 10-2, 10-3,
10-6, 10-11, 10-12, 10-13, 10-14, 10-15, 10-31, 10-34, 10-37, 10-40, C-11,
D-7, E-14, I-9, I-16
Tipos de Dados de Data/Horário 10-14
TO_CHAR 4-2, 4-3, 4-7, 4-8, 4-9, 4-10, 4-11, 4-16, 4-17,
4-18, 4-19, 4-22, 4-23, 4-25, 4-26, 4-27, 4-34, 4-36, 4-44, 4-45,
8-25

Oracle Internal & Oracle Academy Use Only


TO_DATE 4-2, 4-3, 4-7, 4-8, 4-9, 4-10, 4-20, 4-21, 4-22,
4-23, 4-27, 4-36, 4-44, 4-45, 9-10
TO_NUMBER 4-2, 4-3, 4-7, 4-8, 4-9, 4-10, 4-20, 4-21, 4-23,
4-27, 4-36, 4-43, 4-44
Transação 9-2, 9-3, 9-4, 9-13, 9-19, 9-25, 9-26, 9-27, 9-29,
9-30, 9-31, 9-32, 9-33, 9-34, 9-38, 9-39, 9-41, 9-42, 9-48, 10-38,
C-16, I-11, I-31
Transações de bancos de dados 9-3, 9-13, 9-19, 9-25, 9-26, 9-27, 9-39,
9-42
TRIM 3-9, 3-10, 3-13
TRUNC 3-16, 3-18, 3-28, 3-30, 3-32, 4-42, 9-3, 9-13, 9-19, 9-24,
9-25, 9-39, 9-42, 9-46, 9-47, I-31
U
Unindo Tabelas 6-6, 6-27, 6-37, F-7, F-23
UNION ALL 8-3, 8-4, 8-5, 8-6, 8-7, 8-12, 8-16, 8-17, 8-18,
8-21, 8-24, 8-27, 8-29, 8-30
Usando Snippets C-23, C-24

Oracle Database: Fundamentos de SQL I Índice - 10


V
Valor Nulo 1-3, 1-10, 1-14, 1-15, 1-16, 1-19, 1-20, 1-25, 2-8,
2-14, 2-23, 2-24, 4-28, 4-29, 4-30, 4-31, 4-32, 4-40, 5-3, 5-6,
5-9, 5-10, 5-11, 5-12, 5-25, 7-3, 7-9, 7-15, 7-16, 7-21, 7-22,
7-23, 8-13, 8-19, 9-8, 10-9, 10-20, 10-23, E-10, I-28
Valores Nulos 1-3, 1-10, 1-14, 1-15, 1-16, 1-19, 1-20, 1-25, 2-23,
2-24, 4-28, 4-30, 5-3, 5-6, 5-9, 5-10, 5-11, 5-12, 5-25, 7-3,
7-9, 7-15, 7-16, 7-21, 7-22, 7-23, 8-13, 8-19, 9-8, 10-9, 10-20,
E-10
VARIANCE 5-5, 5-8, 5-28
Variáveis de Substituição 2-3, 2-19, 2-22, 2-26, 2-27, 2-28, 2-31,

Oracle Internal & Oracle Academy Use Only


2-32, 2-34, 2-36, 2-38, 2-39, 9-11, C-16
Views 10-8, 10-10, 10-38, C-10, E-6, E-13

X
XML C-7, C-9, C-26, C-27, C-30, E-3, E-12, I-9, I-14, I-39

Oracle Database: Fundamentos de SQL I Índice - 11


Oracle Internal & Oracle Academy Use Only

Você também pode gostar