Buscar

Banco de dados Oracle 11g volume 2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 299 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 299 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 299 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Banco de dados Oracle 11g: SQL Fundamentals I
Volume II • Guia do Estudante
D49996GC10
Edição 1.0
agosto de 2007 D52129
®
Autor
Vá até Singh
Colaboradores Técnicos e Revisores
Claire Bennett Tom Melhor Purjanti Chang Ken Cooper
László Czinkóczki Burt Demchick Mark Fleming Gerlinde Frenzen Nancy Greenberg
Chaitanya Koratamaddi Wendy Lo
Timothy Mcglue Alan Paulson Bryan Roberts Abhishek Singh Lori Tritz Michael Versaci Lex van der Werff
 Designers Gráficos
Satish Bettegowda Samir Mozumdar
Editores
Amitha Narayan Vijayalakshmi Narasimhan
Editor
Sujatha Nagendra
Copyright © 2007, Oracle. Todos os direitos reservados. Disclaimer
Este curso fornece uma visão geral dos recursos e melhorias planejados no lançamento 11g. Destina-se apenas a ajudá-lo a avaliar os benefícios do negócio de atualizar para 11g e planejar seus projetos de TI.
Este curso de qualquer forma, incluindo seus laboratórios de curso e matéria impressa, contém informações proprietárias que são propriedade exclusiva da Oracle. Este curso e as informações aqui contidas não podem ser divulgadas, copiadas, reproduzidas ou distribuídas a qualquer pessoa fora da Oracle sem o consentimento prévio por escrito da Oracle. Este curso e seu conteúdo não fazem parte do seu contrato de licença, nem podem ser incorporados em qualquer acordo contratual com a Oracle ou suas subsidiárias ou afiliadas.
Este curso é apenas para fins informativos e destina-se exclusivamente a ajudá-lo no planejamento para a implementação e atualização dos recursos do produto descritos. Não é um compromisso de entregar qualquer material, código ou funcionalidade, e não deve ser confiado na tomada de decisões de compra. O desenvolvimento, o lançamento e o tempo de quaisquer recursos ou funcionalidades descritos neste documento permanecem a critério exclusivo da Oracle.
Este documento contém informações proprietárias e é protegido por direitos autorais e outras leis de propriedade intelectual. Você pode copiar e imprimir este documento solely para seu próprio uso em um curso de treinamento Oracle. O documento não pode ser modificado ou alterado de forma alguma. Exceto quando seu uso constitui "uso justo" sob a lei de direitos autorais, você não pode usar, compartilhar, baixar, carregar, copiar, imprimir, exibir, executar, reproduzir, publicar, licenciar, postar, transmitir ou distribuir este documento total ou parcialmente sem a autorização expressa da Oracle.
As informações contidas neste documento estão sujeitas a alterações sem aviso prévio. Se você encontrar algum problema no documento, por favor, denuncie-os por escrito para: Oracle University, 500 Oracle Parkway, Redwood Shores, Califórnia 94065 EUA. Este documento não é garantido como livre de erros.
 Aviso de Direitos Restritos
 Se esta documentação for entregue ao Governo dos Estados Unidos ou a qualquer pessoa que use a documentação em nome do Governo dos Estados Unidos, o seguinte aviso é aplicável: 
 DIREITOS DO GOVERNO DOS EUA
Os EUA. Os direitos do governo de usar, modificar, reproduzir, liberar, executar, exibir ou divulgar esses materiais de treinamento são restritos pelos termos do contrato de licença Oracle aplicável e/ou pelos EUA aplicáveis. Contrato do governo.
Aviso de marca comercial
Oracle é uma marca registrada da Oracle Corporation e/ou de suas afiliadas. Outros nomes podem ser marcas comerciais de seus respectivos proprietários.
Índice
Um
Alias 1-17
ALL Operator 7-19, 8-16, 8-17
 ALTERAR TABELA Declaração 10-35 Cotação Alternativa (q) Operador 1-23
American National Standards Institute (ANSI) i-30, 4-4, 6-5 Ampersand Replacement 2-29, 2-30, 2-33
E Operador 2-16, 2-21, C-12
QUALQUER Operador 7-18
 Expressões Aritméticas 1-11, 1-15, 1-19
 Operadores aritméticos 1-11, 1-12, 3-26 Atributos i-23
B
ENTRE Operadora 2-10 BI Publisher i-14
C
Produto cartesiano 6-33, C-5 CASE Expression 4-37, 4-38
 Cordas de caracteres 2-7
 RESTRIÇÃO DE VERIFICAÇÃO 10-27
 Função COALESCE 4-32, 4-33, 4-34
Coluna Alias 1-17
 Operadores de comparação 2-8, 2-9
 Operador de Concatenação 1-20
Restrições 9-4, 10-2, 10-16, 10-17, 10-18, 10-19, 10-29, 10-30, E-6
 Funções de conversão i-5, 3-7, 3-11, 3-12, 3-28, 4-1, 4-4,
4-9
 Função COUNT 5-9
CRIAR A declaração de sequência 11-25
CRIAR A declaração de tabela 10-7
Criando uma conexão de banco de dados i-37, i-38, i-39, i-58 Cross junta-se 6-34
CURRENT_DATE 3-24, 9-9
CURRVAL 10-9, 10-27, 11-3, 11-22, 11-27, 11-28, 11-29, 11-33, 11-40
Oráculo Base de dados 11g: Fundamentos SQL I Índice - 2
D
 Tipos de dados 4-28, 10-12, 10-13, 10-14
Banco de dados 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-27, i-28, i-29, i-30, i-33,
i-35, i-37, i-38, i-39, i-40, i-47, i-49, i-50, i-53, i-54, i-55,
i-56, i-58, i-59, 1-14, 1-15, 3-4, 3-5, 3-10, 3-16, 3-24, 4-9,
4-27, 5-27, 6-2, 6-6, 7-8, 9-3, 9-13, 9-15, 9-19, 9-21, 9-25,
9-26, 9-27, 9-31, 9-39, 9-40, 9-42, 10-3, 10-4, 10-5, 10-6, 10-11,
10-14, 10-15, 10-17, 10-31, 10-34, 10-36, 10-37, 10-38, 11-4, 11-6, 11-16,
11-26, 11-28, 11-31, 11-35, 11-37, 11-42, 11-43, C-2, D-17, D-19, E-3, E-13, E-15, E-19, E-20
 Transações de banco de dados 9-26, 9-27
Data i-18, 1-9, 1-21, 1-33, 2-24, 2-31, 3-3, 3-5, 3-7, 3-8,
3-15, 3-20, 3-22, 3-23, 3-24, 3-27, 3-28, 3-29, 3-31, 3-33, 4-12,
4-13, 4-14, 4-22, 9-10, 10-12, 10-14
Datatime Data Types 10-14 DBMS i-17, D-17, D-19
 FUNÇÃO DECODE 4-39, 4-40, 4-41
 Opção PADRÃO 10-9
EXCLUIR Declaração 9-21
DESCREVER o comando 1-27
 Palavra-chave distinta 5-10
 Tabela DUAL 3-17
 Linhas Duplicadas 1-24
E
Relacionamento com entidade i-21, i-22, i-23, B-3 Equijoins 6-12, 6-35, C-9, C-10, C-11, C-22
Executar SQL D-5, D-20
Execute o ícone de Declaração i-44, i-47, 1-8, 1-30, 9-48, 10-40
 Conversão de tipo de dados explícito 4-7, 4-8, 4-9
F
PARA ATUALIZAÇÃO cláusula 9-3, 9-13, 9-19, 9-25, 9-39, 9-42, 9-43, 9-44,
9-46
 Modelo de formato 4-12, 4-14
F
Funções i-5, 2-7, 3-1, 3-2, 3-4, 3-5, 3-6, 3-7, 3-9,
3-10, 3-11, 3-12, 3-13, 3-14, 3-15, 3-16, 3-28, 3-29, 3-30, 4-1,
4-4, 4-9, 4-20, 4-21, 4-24, 4-25, 4-27, 5-1, 5-4, 5-5, 5-6,
5-7, 5-8, 5-11, 5-19, 5-20, 5-26, 7-12, E-17
G
GRUPO POR Cláusula 5-14, 5-15, 5-16, 5-18
 Funções de grupo i-5, 3-5, 5-1, 5-4, 5-5, 5-6, 5-11, 5-19,
5-20, 5-26, 7-12
 Funções de grupo em um Subquery 7-12
H
TENDO Cláusula 5-22, 5-23, 5-24, 7-13
Eu
 Conversão do tipo de dados implícito 4-5, 4-6
IN Operador 2-11
Índice 10-4, 11-23, 11-34, 11-37, 11-38, 11-39, 11-41, E-14
Instrução INSERT 9-6
International Standards Organization (ISO) i-31 INTERSECT Operator 8-19, 8-20
INTERVALO ANO A MÊS 10-14
J
Java i-9, i-35, i-56 Juntando Mesas 6-6, C-7
K
Palavras-chave 1-8, 10-26, D-4
L
COMO Operador 2-12
Literal 1-21, 1-22, 10-9
M
 Operador MENOS 8-22, 8-23
 Função MOD 3-19
N
Nomeando 10-3, 10-5, 10-6, 10-11, 10-15, 10-31, 10-34, 10-37
NEXTVAL 10-9, 10-27, 11-3, 11-22, 11-27, 11-28, 11-29, 11-33, 11-40
NEXTVAL e CURRVAL Pseudocolumns 11-27, 11-28
N
Nonequijoins 6-3, 6-8, 6-19, 6-22, 6-23, 6-24, 6-25, 6-35, C-14, C-15, C-22
NÃO RESTRIÇÃO NULA 10-20 NÃO Operador 2-18
 Condições NULAs 2-14
 Valor Nulo 1-14
 Valores Nulos 1-15, 1-20, 5-11, 7-21, 7-22, 9-8
 NullIF Função 4-31
 Funções numésias 3-16
 Função NVL 4-28, 4-29
 Função NVL2 4-30
O
Objeto Relacional i-16 OLTP i-11, i-16
Na cláusula 6-3, 6-5, 6-6, 6-8, 6-15, 6-16, 6-18, 6-19, 6-21,
6-22, 6-25, 6-31
EM EXCLUIR CASCADE 10-26 EM EXCLUIR CONJUNTO NULO 10-26
OU Operador 2-17
Oracle Database 11g i-2, i-3, i-4, i-8, i-9, i-10, i-11,
i-14, i-15, i-29, i-33, i-49, i-50, i-53, i-54, i-55, i-56, 3-24, 7-8, 10-14, 10-36, 10-38
Oracle Enterprise Manager Grid Control 10g i-13, i-56 Oracle Fusion Middleware i-12, i-13, i-56
Servidor Oracle 8-6
Oracle SQL Developer i-2, i-3, i-7, i-8, i-15, i-29, i-32,
i-33, i-34, i-35, i-36, i-37, i-38, i-40, i-41, i-45, i-47, i-48, i-49, i-50, i-53, i-57, i-58, i-59, E-2
ORDBMS i-2, i-56
 Ordem 2-40, 3-35, 4-25, 4-45, 6-39, B-2, C-26
ORDEM PELA Cláusula 2-23, 8-28
P
Restrição DA CHAVE PRIMÁRIA10-23 Projeção 1-4
P
Pseudocólumns 11-27, 11-28
Q
q operador 1-23
Consultas i-5, 5-19, 5-20, 6-2, 7-1, 7-8, 8-4, 8-5, 10-27, C-2
Consulta i-30, 7-15, D-3, E-11
R
RDBMS i-2, i-18, i-25, i-27, i-56, 9-43
Leia Consistência 9-40, 9-41
 Tabelas somente leitura 10-3, 10-6, 10-11, 10-15, 10-31, 10-34, 10-37
REFERÊNCIAS 10-25, 10-26, 10-28
 Banco de dados relacional i-16, i-18, i-19, i-27, i-28 FUNÇÕES ROUND e TRUNC 3-30 ROUND Function 3-17
 Formato de data RR 3-22, 4-22
Regras de Precedência 1-12, 2-20, 2-21
S
Esquema i-6, i-51, 10-5, 10-8, 11-1, 11-35, B-2, E-4
SELECT Statement i-5, 1-1, 1-5, 1-19, 1-28, 8-26, 9-43
Seleção 1-4, 2-4
Sequências 11-23, 11-24, E-13
Definir operadores 8-4, 8-5 SET VERIFY ON 2-36
Classificação i-5, 2-1, 2-3, 2-19, 2-22, 2-24, 2-25, 2-26, 2-34,
2-38
SQL Developer i-2, i-3, i-7, i-8, i-9, i-15, i-29, i-32,
i-33, i-34, i-35, i-36, i-37, i-38, i-40, i-41, i-45, i-47, i-48,
i-49, i-50, i-53, i-54, i-57, i-58, i-59, 1-6, 1-8, 1-9, 1-14,
1-17, 1-26, 1-30, 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-40, 11-8, C-10, E-1, E-2, E-3, E-4, E-16, E-18, E-19, E-20, E-21
Subquery 7-3, 7-4, 7-5, 7-6, 7-8, 7-9, 7-12, 7-15, 7-16,
7-20, 7-21, 7-22, 9-17, 10-32, 10-33
 Variáveis de Substituição 2-27, 2-28, 2-31
S
Sinônimo i-23, 10-4, 11-23, 11-34, 11-41, 11-42, 11-43, E-15
 Função SYSDATE 3-24
T
TO_CHAR Função 4-11, 4-16, 4-17, 4-18, 4-19
Transações 9-26, 9-27
 Função TRUNC 3-18
No
UNION ALL Operador 8-16, 8-17
 Union Operator 8-13, 8-14, 8-15
 Unique Constraint 10-21, 10-22 Identificador Único i-23
 Declaração de ATUALIZAÇÃO 9-15
USANDO a Cláusula 6-11, 6-13, 6-14
Usando trechos E-16, E-17
Em
 VARIÂNCIA 5-5, 5-8, 5-27
VERIFICAR comando 2-36
Views i-40, 11-6, 11-7, E-3, E-11, E-12
Em
 Quando criar um índice 11-38 ONDE cláusula 2-6, 6-10
COM OPÇÃO DE VERIFICAÇÃO 11-8, 11-9, 11-17
X
XML i-9, i-14, i-37, i-38, i-56
Usando subcastes durante resolver Consultas
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Objectivos
Depois de completar esta lição, você deve ser capaz de fazer o seguinte:
· Definir subqueries
· Descreva os tipos de problemas que os subqueries podem resolver
· Liste os tipos de subqueries
· Escreva subqueries de linha única e várias linhas
7 - 2
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Objectivos
Nesta lição, você aprende sobre os recursos mais avançados da instrução SELECT. Você pode escrever sub queries na cláusula WHERE de outra declaração SQL para obter valores com base em um valor condicional desconhecido . Esta lição também abrange sub queries de linha única e sub queries de várias linhas.
Oráculo Base de dados 11g: SQL Fundamentos I 7 - 10
 Agenda de Aulas
· Subquery: Tipos, sintaxe e diretrizes
· Subqueries de linha única:
· Funções de grupo em em subquery
· TER cláusula com subqueries
· Subqueries de várias linhas
· Usar TODO ou QUALQUER operador
· Nulos em em subquery
7 - 3
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Usando em subquery durante resolver em problema
Quem tem um salário maior que o do Abel?
7 - 4
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Consulta principal:
Quais funcionários têm salários maiores que o salário do Abel?
Subquery:
Qual é o salário do Abel?
Usando um subquery para resolver um problema
Suponha que você queira escrever uma consulta para descobrir quem ganha um salário maior que o salário de Abel.
Para resolver esse problema, você precisa de duas consultas: uma para descobrir quanto Abel ganha, e uma segunda consulta para encontrar quem ganha mais do que esse valor.
Você pode resolver esse problema combinando as duas consultas, colocando uma consulta dentro da outra consulta.
A consulta interna (ou subquery) retorna um valor que é usado pela consulta externa (ou consulta main). O uso de um subquery equivale a realizar duas consultas sequenciais e usar o resultado da primeira consulta como valor de pesquisa na segunda consulta.
	SELECIONE 	SELECT_LIST
	FROMTABLE
	 OPERADOR WHEREEXPR
	
	(SELECT 	select_list
	FROMTABLE);
	
Subquery Sintaxe Sintaxe subquery
· O subquery (consulta interna) é executado antes da consulta principal (consulta externa ).
· O resultado do subquery é usado pela consulta principal.
7 - 5
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Um subquery é uma instrução SELECT que está incorporada na cláusula de outra instrução SELECT. Você pode construir declarações poderosas a partir de simples usando subqueries. Eles podem ser muito úteis quando você precisa selecionar linhas de uma tabela com uma condição que depende dos dados na própria tabela.
Você pode colocar o subquery em uma série de cláusulas SQL , incluindo o seguinte:
· ONDE cláusula
· TER cláusula
· Cláusula NA sintaxe:
o operador inclui uma condição de comparação , como >, =ou IN
Nota: As condições de comparação se enquadram em duas classes: operadores de linha única (>, =, >=, <, <>, <=) e operadores de várias linhas (IN, ANY, ALL).
O subquery é frequentemente referido como uma instrução SELECT, sub-SELECT ou inermida SELECT. O subquery geralmente executa primeiro, e sua saída é usada para completar a condição de consulta para a consulta principal (ou externa).
SELECIONE o t_name, salário
DE ONDE
 > salarial dos funcionários
11000
(SELECIONAR salário 	FROMempresa
ONDE last_name = 'Abel');
Usando em Subquery
7 - 6
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Usando um Subquery
No slide, a consulta interna determina o salário do empregado Abel. A consulta externa leva o resultado da consulta interna e usa este resultado para exibir todos os funcionários que ganham mais do que o empregado Abel.
Diretrizes durante o uso de subqueries
· Inclua subqueries entre parênteses.
· Coloque subqueries no lado direito da condição de comparação para legibilidade (No entanto, o subquery pode aparecer em ambos os lados do operador de comparação .).
· Use operadores de linha única com subqueries de linha única e operadores de várias linhas com subqueries de várias linhas.
7 - 7
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Diretrizes para o uso de subqueries
· Um subquery deve ser fechado entre parênteses.
· Coloque o subquery no lado direito da condição de comparação para legibilidade. No entanto, o subquery pode aparecer em ambos os lados do operador de comparação.
· Duas classes de condições de comparação são usadas em subqueries: operadores de linha única e operadores de várias linhas.
	Consulta principal
	
	Subquery
	
Tipos de SubqueriesTipos de Subqueries
· Subquery de linha única
Retorna
ST_CLERK
· Subquery de várias linhas
Retorna
ST_CLERK SA_MAN
7 - 8
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Consulta principal
Subquery
· Subqueries de linha única: Consultas que retornam apenas uma linha da instrução SELECT interna 
· Subqueries de várias linhas: Consultas que retornam mais de uma linha do SELECT interno
declaração
Nota: Há também subqueries de várias colunas, que são consultas que retornam mais de uma coluna da instrução SELECT interna . Estes estão cobertos no curso Oracle Database 11g: SQL Fundamentals II.
 Agenda de Aulas
· Subquery: Tipos, sintaxe e diretrizes
· Subqueries de linha única:
· Funções de grupo em em subquery
· TER cláusula com subqueries
· Subqueries de várias linhas
· Usar TODO ou QUALQUER operador
· Nulos em em subquery
7 - 9
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
	Operador
	Significado
	=
	Igual a
	>
	Maior do que
	>=
	Maior ou igual a
	<
	 Menos do que
	<=
	Menos ou igual a
	<>
	Não é igual a
Linha única Subqueries Subqueries de linha única
· Retorne apenas uma linha
· Usar Operadores de comparação de linha única
7 - 10
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Um subquery de uma linha única é aquele que retorna uma linha dainstrução SELECT interna. Este tipo de subquery usa um operador de linha única. O slide dá uma lista de operadores de linha única.
Exemplo:
Exibir os funcionários cujo carteira de trabalho é o mesmo do empregado 141:
SELECIONE last_name, job_id DE 	FUNCIONÁRIOS
ONDE job_id =
(TRABALHO SELECT_id 	FROMempresos 
ONDE employee_id = 141);
SELECIONE last_name, job_id, salário
DE ONDE
funcionários job_id =
SA_REP
E
 > salário
8600
Execução de subqueries de linha única
7 - 11
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
(SELECIONAR salário 	FROMempresa
ONDE last_name = 'Taylor');
(SELECIONE JOB_ID DE 	FUNCIONÁRIOS
ONDE last_name = 'Taylor')
Execução de subqueries de linha única
Uma instrução SELECT pode ser considerada como um bloco de consulta. O exemplo no slide mostra funcionários que fazem o mesmo trabalho que "Taylor", mas ganham mais salário do que ele.
O exemplo consiste em três blocos de consulta: a consulta externa e duas consultas internas. Os blocos de consulta interna são executados primeiro, produzindo os resultados de consulta SA_REP e 8600, respectivamente. O bloco de consulta externa é então processado e usa os valores que foram revertidos pelas consultas internas para completar suas condições de pesquisa.
Ambas as consultas internas retornam valores únicos (SA_REP e 8600, respectivamente), de modo que esta instrução SQL é chamada de subqueria de linha única.
Nota: As consultas externas e internas podem obter dados de diferentes tabelas.
	SELECIONE last_name, job_id, salário 	FROMempresa2500	
ONDE salário =
	
	(SELECT MIN(salário) DE 	EMPREGADOS);
	
Usando funções de grupo em um Subquery Usando funções de grupo em em subquery
7 - 12
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Você pode exibir dados de uma consulta principal usando uma função de grupo em um subquery para retornar uma única linha. O subquery está entre parênteses e é colocado após a condição de comparação.
O exame no slide mostra o sobrenome do empregado, carteira de trabalho e salário de todos os funcionários cujo salário é igual ao salário mínimo. A função grupo MIN retorna um único valor (2500) à consulta externa.
SELECIONE ENTRE
department_id, funcionários da MIN(salário)
GRUPO POR department_id
>	 DE SALÁRIO
2500
(SELECT MIN(salário)
	FUNCIONÁRIOS DOM
ONDE department_id = 50);
Um Cláusula TER com Subqueries
· O servidor Oracle executa os subqueries primeiro.
· O servidor Oráculo retorna Resultados em cláusula TER da consulta principal.
...
7 - 13
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
A Cláusula TER com Subqueries
Você pode usar subqueries não apenas na cláusula WHERE, mas também na cláusula TER. O servidor Oracle executa o subquery e os resultados são devolvidos à cláusula HAVING da consulta principal.
A declaração sql no slide exibe todos os departamentos que têm um salário mínimo maior que o do departamento 50.
Exemplo:
Encontre o emprego com o menor salário médio.
SELECT 	job_id, AVG(salário) 	FROMemployees
GRUPO POR job_id
	HAVINGAVG(salário) = (	SELECTMIN(AVG(salário))
GRUPO DE 	FUNCIONÁRIOS POR job_id);
(SELECIONE De
Funcionários do MIN(salário)
GRUPO POR department_id);
O que há de errado com essa declaração?
Operador de linha único com subqueria de várias linhas
7 - 14
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE employee_id, last_name de 	funcionários
ONDE	=
salário
O que há de errado com essa declaração?
Um erro comum com subqueries ocorre quando mais de uma linha é devolvida para um subquery de uma linha única.
Na instrução SQL no slide, o subquery contém uma cláusula GROUP BY, o que implica que o subquery retornará várias linhas, uma para cada grupo que encontrar. Neste caso, os resultados do subquery são 4400, 6000, 2500, 4200, 7000, 17000 e 8300.
A consulta externa pega esses resultados e os usa em sua cláusula WHERE. A cláusula WHERE contém um operador igual (=) operador de comparação de uma linha que espera apenas um valor. O operador = não pode aceitar mais de um valor do subquery e, portanto, generates o erro.
Para corrigir este erro, altere o = operador para IN.
Sem linhas devolvidas pela consulta interno
Subquery não retorna nenhuma fila porque não há nenhum empregado chamado "Haas". 
7 - 15
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE last_name, job_id DE 	FUNCIONÁRIOS
ONDE job_id =
(SELECIONE JOB_ID DE 	FUNCIONÁRIOS
ONDE last_name = 'Haas');
Sem linhas devolvidas pela consulta interna
Um problema comum com subqueries ocorre quando nenhuma linha é devolvida pela consulta interna.
Na instrução SQL no slide, o subquery contém uma cláusula WHERE. Presumivelmente, o intention é encontrar o empregado cujo nome é Haas. A instrução está correta, mas não seleciona linhas quando executadas.
Porque não há nenhum empregado chamado Haas. Então o subquery não retorna nenhuma linha. A consulta externa pega os resultados do subquery (nulo) e usa esses resultados em sua cláusula WHERE. A consulta externa não encontra nenhum funcionário com um ID de trabalho igual a nulo, e por isso não retorna nenhuma linha. Se existia um trabalho com um valor nulo, a linha não é devolvida porque a comparação de dois valores null rende nulo; portanto, a condição DE ONDE não é verdadeira.
 Agenda de Aulas
· Subquery: Tipos, sintaxe e diretrizes
· Subqueries de linha única:
· Funções de grupo em em subquery
· TER cláusula com subqueries
· Subqueries de várias linhas
· Usar TODO ou QUALQUER operador
· Nulos em em subquery
7 - 16
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
	Operador
	Significado
	EM
	Igual a qualquer membro da lista
	QUALQUER
	Deve ser precedido por =, !=, >, <, <=, >=. Compara um valor a cada valor em uma lista ou retornado por uma consulta. Avalia para FALSE se a consulta não retornar nenhuma linha.
	TODO
	Deve ser precedido por =, !=, >, <, <=, >=. Compara um valor a cada valor de uma lista ou retornado por uma consulta. Avalia para TRUE se o
consulta não retorna linhas .
Várias linhas Subqueries Subqueries de várias linhas
· Retorne mais de uma linha
· Use operadores de comparação de várias linhas
7 - 17
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Subqueries que retornam mais de uma linha são chamados subqueries de várias linhas. Você usa um operador de várias linhas, em vez de um operador de linha única, com um subquery de várias linhas. O operador de várias linhas espera um ou mais valores:
SELECIONE last_name, salário, department_id funcionários	
ONDE O SALÁRIO IN (SELECTMIN	(salário)
	FUNCIONÁRIOS DOM
GRUPO POR department_id);
Exemplo:
Encontre os funcionários que ganham o mesmo salário que o salário mínimo para cada departamento.
A consulta interna é executada primeiro, produzindo um resultado de consulta. O bloco de consulta principal é então processado e usa os valores que foram devolvidos pela consulta interna para completar sua condição de pesquisa. Na verdade, a consulta principal aparece no servidor Oracle da seguinte forma:
SELECIONE last_name, salário, department_id funcionários	
ONDE o salário IN (2500, 4200, 4400, 6000, 7000, 8300,
8600, 17000);
EMPLOYEE_ID , last_name, job_id, salário
DE ONDE
 < salarial dos funcionários
9000, 6000, 4200
E
job_id <> 'IT_PROG';
Usando o QUALQUER operador em subqueries de várias linhas
...
7 - 18
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
(SELECIONAR salário 	FROMempresa
ONDE job_id = 'IT_PROG')
QUALQUER
Usando o operador ANY em subqueries de várias linhas
O operador ANY (e seu sinônimo, o operador SOME) compara um valor a cada valor devolvido por um subquery. O exemplo de slides exibe funcionários que não são programadores de TI e cujo salário é menor do que o de qualquer programador de TI. O salário máximo que um programador ganha é de $9.000.
<ANY significa menos que o máximo. >ANY significa mais do que o mínimo. =ANY é equivalente a
PARA DENTRO.
EMPLOYEE_ID, last_name, job_id, salário
DE ONDE
 < salarial dos funcionários
9000, 6000, 4200
E
job_id <> 'IT_PROG';
Usando o OPERADOR ALL em subqueries de várias linhas
7 - 19
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
(SELECIONAR salário 	FROMempresa
ONDE job_id = 'IT_PROG')
TODO
Usando o operador ALL em subqueries de várias linhas
O operador ALL compara um valor a cada valor devolvido por um subquery. O exemplo no slide mostra funcionários cujo salário é menor que o salário de todos os funcionários com carteira de trabalho de IT_PROG e cujo trabalho não é IT_PROG.
>ALL significa mais do que o máximo e <ALL significa menos do que o mínimo. O operador NOT pode ser usado com operadores IN, ANY e ALL.
 Agenda de Aulas
· Subquery: Tipos, sintaxe e diretrizes
· Subqueries de linha única:
· Funções de grupo em em subquery
· TER cláusula com subqueries
· Subqueries de várias linhas
· Usar TODO ou QUALQUER operador
· Nulos em em subquery
7 - 20
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Nulos em em Subquery
7 - 21
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE emp.last_name DE 	FUNCIONÁRIOS PEM
ONDE NÃO emp.employee_id 
(SELECIONAR mgr.manager_id 	Fromempreyees mgr);
Valores Nulos em um Subquery
A instrução SQL no slide tenta exibir todos os funcionários que não possuem subordinados. Logicamente, esta instrução SQL deveria ter retornado 12 linhas. No entanto, a instrução SQL não retorna nenhuma linha. Um dos valores devolvidos pela consulta interna é um valor nulo e, portanto, toda a consulta não retorna nenhuma linha.
A razão é que todas as condições que comparam um valor nulo resultam em nulo. Portanto, sempre que os valores nulos provavelmente fazem parte do conjunto de resultados de um subquery, não utilize o operador NÃO IN. O operador NÃO IN é equivalente a <> ALL.
Observe que o valor nulo como parte do conjunto de resultados de um subquery não é um problema se você usar o operador IN. O operador IN é equivalente a =ANY. Por exemplo, para exibir os funcionários que possuem subordinados, use a seguinte instrução SQL:
SELECIONE emp.last_name DE 	FUNCIONÁRIOS EMP
ONDE emp.employee_id 
(SELECIONAR mgr.manager_id 	FROMempreyees mgr);
 Valores Nulos em um Subquery (continuado)
Alternativamente, uma cláusula WHERE pode ser incluída no subquery para exibir todos os funcionários que não possuem subordinados:
SELECIONE last_name DE FUNCIONÁRIOS ONDE NÃO EMPLOYEE_ID IN
(SELECIONE manager_id DE 	FUNCIONÁRIOS
ONDE MANAGER_ID NÃO É NULO);
	SELECIONE 	SELECT_LIST
	FROMTABLE
	 OPERADOR WHEREEXPR
	
	(SELECIONE select_list
	FROMTABLE);
	
ResumoResumo
 Nesta lição, você deveria ter aprendido a:
· Identifique quando um subquery pode ajudar a resolver um problema
· Escreva subcastes quando uma consulta é baseada em valores desconhecidos
7 - 23
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Nesta lição, você deveria ter aprendido a usar subqueries. Um subquery é uma instrução SELECT que está incorporada na cláusula de outra instrução SQL. Subqueries são úteis quando uma consulta é baseada em um critério de pesquisa com valores intermediários desconhecidos.
Os subqueries têm as seguintes características:
· Pode passar uma linha de dados para uma declaração principal que contains um operador de linha única, como =, <>,
>, >=, < ou <=
· Pode passar várias linhas de dados para uma instrução principal que contém um operador de várias linhas, como o IN
· São processados primeiro pelo servidor Oracle, após o qual a cláusula WHERE ou HAVING usa os resultados
· Pode conter funções de grupo
Prática 7: Visão geral
Esta prática abrange os seguintes tópicos:
· Criação de subqueries para consultar valores com base em critérios desconhecidos
· Usando subqueries para descobrir os valores que existem em um conjunto de dados e não em outro
7 - 24
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Prática 7: Visão geral
Nesta prática, você escreve consultas complexas usando instruções SELECT aninhadas .
Para perguntas práticas, você pode querer criar a consulta interna primeiro. Certifique-se de que ele é executado e produz os dados que você antecipa antes de codificar a consulta externa.
Prática 7
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 contratação de qualquer funcionário no mesmo período que o empregado cujo nome eles fornecem (excluindo aquele funcionário). Por exemplo, se o usuário entrar no Zlotkey, encontre todos os funcionários que trabalham com zlotkey (excluindo Zlotkey).
2. Crie um relatório que exiba o número do empregado , sobrenome e salário de todos os funcionários que ganham mais do que a média salarial. Classifique os resultados por ordem de aumento salarial.
3. Escreva uma consulta que exiba o número do funcionário e o sobrenome de todos os funcionários que trabalham em um departamento com qualquer funcionário cujo sobrenome contenha a letra "u". Salve sua declaração SQL como lab_07_03.sql. Execute sua consulta.
4. O departamento de RH precisa de um relatório que mostre o sobrenome, número do departamento e identificação de todos os funcionários cujo departamento de localização é 1700.
Modifique a consulta para que o usuário seja solicitado para um ID de localização. Guarde isso para um arquivo chamado
lab_07_04.sql.
5. Crie um relatório para o RH que exiba o sobrenome e o salário de cada funcionário que se reporta ao King.
Prática 7 (continuou)
Oráculo Base de dados 11g: SQL Fundamentos I 7 - 26
6. Crie um relatório para o RH que exiba o número do departamento, sobrenome e carteira de trabalho para cada funcionário do departamento Executivo.
Se você tiver tempo, complete o seguinte exercício:
7. Modifique a consulta em lab_07_03.sql para exibir o número do funcionário , sobrenome e salário de todos os funcionários que ganham mais do que o salário médio, e que trabalham em um departamento com qualquer funcionário cujo sobrenome contenha um "u". Resave lab_07_03.sql como lab_07_07.sql. Execute a declaração em lab_07_07.sql.
Usando os operadores de montagem 
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Objectivos
Depois de completar esta lição, você deve ser capaz de fazer o seguinte:
· Descreva os operadores de conjunto
· Use um operador de conjunto para combinar várias consultas em uma única consulta
· Controle a ordem das linhas devolvidas 
8 - 2
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Objectivos
Nesta lição, você aprende a escrever consultas usando operadores de conjunto.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 2
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Correspondendo às instruções SELECIONAR
· Usando um cláusula ORDEM POR em operações definidas 
8 - 3
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 3
Definir Operadores
Em
B
Em
B
UNIÃO/UNIÃO TODO
Em
B
CROSS-SE
Em
B
MENOS
8 - 4
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Definir operadores
Os operadores de conjunto combinam os resultados de duas ou mais consultas de componentes em um único resultado. Consultas que contenham operadores definidos são chamadas consultas compostas.
	Operador
	Retorna
	UNIÃO
	Linhas de ambas as consultas após a eliminação de duplicações
	UNIÃO TODOS
	Linhas de ambas as consultas, incluindo todas as duplicações
	CRUZAR-SE
	Linhas que são comuns a ambas as consultas
	MENOS
	Linhas na primeira consulta que não estão presentes na segunda consulta
Todos os operadores definidos têm igual precedência. Se uma instrução SQL contiver vários operadores de conjunto, o servidor Oracle os avaliará da esquerda (superior) para a direita (inferior) — se nenhum parêntese especificarexplicitamente outra ordem. Você deve usar parênteses para especificar a ordem de avaliação explicitamente em consultas que usam o operador INTERSECT com outros operadores de conjunto.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 4
Definir diretrizes do operador 
· Como expressões nas Listas SELECIONAR devem coincidir em número.
· O tipo de dados de cada coluna na segunda consulta deve corresponder ao tipo de dados de sua coluna correspondente na primeira consulta.
· Parênteses podem ser usados para alterar a sequência de execução.
· ORDEM POR cláusula só pode aparecer no final do declaração.
8 - 5
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Definir diretrizes do operador 
· As expressões nas listas SELECT das consultas devem coincidir em número e tipo de dados. As consultas que utilizam operadores UNION, UNION ALL, INTERSECT e MINUS em sua cláusula WHERE devem ter o mesmo número e tipo de dados de colunas em sua lista SELECT. O tipo de dados das colunas na lista SELECT das consultas na consulta composta pode não ser exatamente o mesmo. A coluna em segunda consulta deve estar no mesmo grupo de tipo de dados (como numeric ou caractere) como a coluna correspondente na primeira consulta.
· Os operadores de conjunto podem ser usados em subqueries.
· Você deve usar parênteses para especificar a ordem de avaliação em consultas que usam o operador INTERSECT com outros operadores de conjunto. Isso garante o cumprimento das normas SQL emergentes que darão ao operador INTERSECT maior precedência do que os outros operadores do conjunto.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 5
O Servidor Oracle e os Operadores de Grupo
· As linhas duplicadas são automaticamente Eliminado , exceto em UNIÃO TODO.
· Os nomes das colunas da primeira consulta aparecem no resultado.
· A saída é classificada em ordem ascendente por padrão, exceto em
UNIÃO TODO.
8 - 6
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
O Servidor Oracle e os Operadores de Conjunto
Quando uma consulta usa operadores definidos, o servidor Oracle elimina linhas duplicadas automaticamente, exceto no caso do operador UNION ALL. Os nomes das colunas na saída são decididos pela lista de colunas na primeira instrução SELECT. Por padrão, a saída é classificada em ordem ascendente da primeira coluna da cláusula SELECT.
As expressões correspondentes nas listas SELECT das queries componentes de uma consulta composta devem coincidir em número e tipo de dados. Se as consultas de componentes selecionarem dados de caracteres, o tipo de dados dos valores de retorno será determinado da seguinte forma:
· Se ambas as consultas selecionarem valores do tipo de dados CHAR, de igual comprimento, os valores devolvidos terão o tipo de dados CHAR desse comprimento. Se as consultas selecionarem valores de CHAR com diferentes comprimentos, então o valor devolvido será VARCHAR2 com o comprimento do valor CHAR maior .
· Se uma ou ambas as consultas selecionarem valores do tipo de dados VARCHAR2, os valores devolvidos terão o tipo de dados VARCHAR2.
Se as consultas de componentes selecionarem dados numéricos, o tipo de dados dos valores de retorno será determinado por precedência numérica. Se todas as consultas selecionarem valores do tipo NUMBER, os valores retornados terão o tipo de dados NÚMERO. Em consultas usando operadores de conjunto, o servidor Oracle não realiza conversão implícita entre grupos de tipos de dados. Portanto, se as expressões correspondentes de consultas de componentes se resolverem tanto para dados character quanto para dados numéricos, o servidor Oracle retorna um erro.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 6
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Correspondendo às instruções SELECIONAR
· Usando um cláusula ORDEM POR em operações definidas 
8 - 7
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 7
Tabelas usadas nesta lição
As tabelas utilizadas nesta aula são:
· FUNCIONÁRIOS: Fornece detalhes sobre todos os funcionários atuais
· JOB_HISTORY: Registra os detalhes da data de início e término do trabalho anterior, e o número de identificação do trabalho e departamento quando em funcionário troca de emprego
8 - 8
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Tabelas usadas nesta lição
Duas mesas são usadas nesta lição. Eles são a mesa dos funcionários e a mesa JOB_HISTORY.
Você já está familiarizado com a tabela DE FUNCIONÁRIOS que armazena detalhes dos funcionários, como um número de identificação exclusivo, endereço de e-mail, identificação de trabalho (como ST_CLERK, SA_REP, e assim por diante), salário, gerente e assim por diante.
Alguns funcionários estão na empresa há muito tempo e mudaram para diferentes empregos. Este é monitorado usando a tabela JOB_HIS TORY. Quando um funcionário troca de emprego, os detalhes da data de início e data de término do trabalho anterior, o job_id (como ST_CLERK, SA_REP, e assim por diante), e o departamento é registrado na tabela JOB_HISTORY.
A estrutura e os dados das tabelas de funcionários e JOB_HISTORY são mostrados nas páginas a seguir.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 8
Houve casos na empresa, de pessoas que ocuparam o mesmo cargo mais de uma vez durante seu mandato na empresa. Por exemplo, considere o empregado Taylor, que entrou na empresa em 24-MAR-1998. Taylor ocupou o cargo SA_REP para o período 24-MAR-98 a 31-DEC-98 e o cargo SA_MAN para o período 01-JAN-99 a 31-DEC-99. Taylor voltou ao cargo de SA_REP, que é seu atual cargo.
DESCREVER funcionários
Tabelas Usado em Este Lição (continuou)
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 10
SELECIONAR employee_id, last_name, job_id, hire_date, department_id DE funcionários;...
DESCREVA job_history
SELECIONE * A PARTIR de job_history;
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Correspondendo às instruções SELECIONAR
· Usando um cláusula ORDEM POR em operações definidas 
8 - 12
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 14
 Operador sindical
Em
B
O operador fazer UNIÃO retorna linhas de ambas as Consultas após a eliminação de duplicações.
8 - 13
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Operador sindical
O operador do UNION retorna todas as linhas selecionadas por qualquer consulta. Use o operador UNION para retornar todas as linhas de várias tabelas e eliminar quaisquer linhas duplicadas.
Diretrizes
· O número de colunas selecionadas deve ser o mesmo.
· Os tipos de dados das colunas selecionadas devem estar no mesmo grupo de tipo de dados (como numérico ou caractere).
· Os nomes das colunas não precisam ser idênticos.
· A UNION opera em todas as colunas que estão sendo selecionadas.
· Os valores NULL não são ignorados durante a verificação duplicada.
· Por padrão, a saída é classificada em ordem ascendente das colunas da cláusula SELECT.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 13
Usando o Operador sindical 
Exibir os detalhes de trabalho atuais e anteriores de todos os funcionários. Exiba cada funcionário apenas uma vez.
...
...
8 - 14
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE employee_id, job_id de 	funcionários
SELECIONE employee_id, job_id DE 	job_history.
UNIÃO
Usando o Operador sindical 
O operador da UNIÃO elimina todos os registros duplicados. Se os registros que ocorrem tanto nos FUNCIONÁRIOS quanto nas tabelas JOB_HISTORY forem idênticos, os registros apenas uma vez. Observe na saída mostrada no slide que o registro para o empregado com o EMPLOYEE_ID 200 aparece duas vezes porque o JOB_ID é diferente em cada linha.
Considere o seguinteexame:
SELECIONE employee_id, job_id department_id 	FUNCIONÁRIOS
UNIÃO
SELECIONAR employee_id, job_id, department_id DE	job_history.
...
...
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 14
 Utilizando o Operador sindical (continuado)
Na saída anterior, o funcionário 200 aparece três vezes. Por que? Observe os valores DEPARTMENT_ID para o empregado 200. Uma linha tem um DEPARTMENT_ID de 90, outras 10, e a terceira 90. Por causa dessas combinações únicas de IDs de trabalho e IDs de afastamento, cada linha para funcionário 200 é única e, portanto, não considerada uma duplicata. Observe que a saída é classificada em ordem ascendente da primeira coluna da cláusula SELECT (neste caso, EMPLOYEE_ID).
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 15
UNIÃO TODO Operador
Em
B
O operador UNIÃO TODO retorna linhas de ambas as Consultas incluindo todas as duplicações.
8 - 16
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
UNION ALL Operador
Use o operador UNION ALL para retornar todas as linhas de várias consultas.
Diretrizes
As diretrizes para a UNIÃO e a UNIÃO SÃO as mesmas, com as duas exceções seguintes que dizem respeito à UNIÃO ALL: Ao contrário da UNIÃO, as linhas duplicadas não são eliminadas e a saída não é classificada por padrão.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 16
 Utilizando o UNIÃO TODO Operador
Exiba os departamentos atuais e anteriores de todos os funcionários.
...
...
8 - 17
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE employee_id, job_id department_id 	FUNCIONÁRIOS
SELECIONE EMPLOYEE_ID, job_id department_id job_history	
ORDEM POR EMPLOYEE_ID;
UNIÃO TODO
 Utilizando o UNION ALL Operator
No exemplo, 30 linhas são selecionadas. A combinação das duas mesas totaliza 30 linhas. O operador UNION ALL não elimina linhas duplicadas. O UNION retorna todas as linhas distintas selecionadas por qualquer consulta. O UNION ALL retorna todas as linhas selecionadas por qualquer consulta, incluindo todas as duplicatas. Considere a consulta no slide, agora escrita com a cláusula da UNIÃO:
SELECT 	employee_id, job_id department_id 	FROMEmpresos
UNIÃO
SELECT 	employee_id, job_id,department_id FROM 	job_history
ORDEM POR EMPLOYEE_ID;
A consulta anterior retorna 29 linhas. Isso porque elimina a seguinte linha (porque é uma duplicata):
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 17
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Correspondendo às instruções SELECIONAR
· Usando a cláusula ORDER POR em operações definidas 
8 - 18
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 18
 Operador CRUZAR-SE
Em
B
O operador CRUZAR-SE retorna linhas comuns um ambas as Consultas.
8 - 19
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Operador INTERSECT
Use o operador INTERSECT para retornar todas as linhas comuns a várias consultas.
Diretrizes
· O número de colunas e os tipos de dados das colunas selecionadas pelas instruções SELECT nas consultas devem ser idênticos em todas as estojos SELECIONADOs utilizados na consulta. Os nomes das colunas, no entanto, não precisam ser idênticos.
· Reverter a ordem das tabelas intersetoriadas não altera o resultado.
· INTERSECT não ignora values NULL.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 19
Usando o Operador INTERSECT 
Exibir as carteiras de trabalho e como carteiras de trabalho daqueles funcionários que atualmente têm um cargo que é o mesmo que o anterior (ou seja, eles mudaram de emprego, mas agora voltaram a fazer o mesmo trabalho que fizeram anteriormente).
8 - 20
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE employee_id, job_id de 	funcionários
SELECIONE employee_id, job_id DE 	job_history.
CROSS-SE
Usando o Operador INTERSECT 
No exemplo deste slide, a consulta retorna apenas os registros que possuem os mesmos valores nas colunas selecionadas em ambas as tabelas.
Quais serão os resultados se você adicionar o DEPARTMENT_ID column à instrução SELECT da tabela EMPLOYEES e adicionar a coluna DEPARTMENT_ID à instrução SELECT da tabela JOB_HISTORY e executar essa consulta? Os resultados podem ser diferentes devido à introdução de outra coluna cujos valores podem ou não ser duplicados.
Exemplo:
SELECIONE employee_id, job_id department_id 	FUNCIONÁRIOS
CRUZAR-SE
SELECIONAR employee_id, job_id department_id DE JOB_HISTORY	;
O empregado 200 não faz mais parte dos resultados porque os funcionários. DEPARTMENT_ID valor é diferente do JOB_HISTORY. DEPARTMENT_ID valor.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 20
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Correspondendo às instruções SELECIONAR
· Usando um cláusula ORDEM POR em operações definidas 
8 - 21
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 21
 OPERADOR MENOS
Em
B
O operador MENOS retorna todo como linhas distintas selecionadas pela primeira consulta mas não está presente Não grupo de resultados de segundo consulta. 
8 - 22
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Operador MENOS
Use o operador MINUS para retornar todas as linhas distintas selecionadas pela primeira consulta, mas não presente no conjunto de resultados de segunda consulta (a primeira instrução SELECT MENOS a segunda instrução SELECT).
Nota: O número de colunas deve ser o mesmo e os tipos de dados das colunas selecionadas pelas instruções SELECT nas consultas devem pertencer ao mesmo grupo de tipo de dados em todas as instruções SELECT utilizadas na consulta. Os nomes das colunas, no entanto, não precisam ser idênticos.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 22
Usando o Operador MENOS 
Exibir as IDs dos funcionários daqueles funcionários que não mudaram de emprego Não uma vez.
...
8 - 23
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE EMPLOYEE_ID DE 	FUNCIONÁRIOS
SELECIONE EMPLOYEE_ID DE 	job_history.
MENOS
Usando o Operador MINUS 
No exemplo no slide, as IDs dos funcionários na tabela JOB_HISTORY são subtraídas das da tabela employees. O conjunto de resultados exibe os funcionários restantes após a subtração; they são representados por linhas que existem na tabela EMPLOYEES, mas não existem na tabela JOB_HISTORY. Estes são os registros dos funcionários que não mudaram de emprego nem uma vez.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 23
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Correspondendo às instruções SELECIONAR
· Usando a cláusula ORDER POR em operações definidas 
8 - 24
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 24
Correspondendo às instruções SELECT
· Usando o operador fazer UNIÃO , exiba o ID de localização, o nome do departamento e o estado onde está localizado.
· Você deve corresponder ao tipo de dados (usando a função TO_CHAR ou quaisquer outras funções de conversão) quando as colunas não existem em uma ou outra tabela.
8 - 25
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE location_id, department_name "Departamento", TO_CHAR(NULL) "Localização do armazém "
DA UNIÃO DEPARTAMENTOS
SELECIONE location_id, TO_CHAR(NULL) "Departamento", state_province
DE locais;
Correspondendo às instruções SELECT
Como as expressões nas listas SELECT das consultas devem coincidir em número, você pode usar as colunas fictícias e as funções de conversão do tipo de dados para cumprir essa regra. No slide, o nome, Localização do Depósito, é dado como a posição da coluna falsa. A função TO_CHARé usada na primeira consulta para corresponder ao tipo de dados VARCHAR2 da coluna state_province que é recuperada pela segunda consulta. Da mesma forma, a função TO_CHAR na segunda consulta é usada para corresponder ao tipo de dados VARCHAR2 da coluna department_name que é recuperada pela primeira consulta.
A saída da consulta é mostrada:...
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 25
Correspondendo em instrução SELECT: Exemplo
Usando o operador do SINDICATO, exiba um carteira de trabalho, a carteira de trabalho e o salário de todos os funcionários.
...
8 - 26
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
SELECIONE employee_id, job_id,salário 	FROMempresos
UNIÃO
SELECIONE employee_id, job_id,0 DE 	job_history.
Correspondendo à instrução SELECT: Exemplo
 Os funcionários e JOB_HISTORY têm várias colunas em comum (por exemplo, EMPLOYEE_ID, JOB_ID e DEPARTMENT_ID). Mas e se você quiser que a consulta exiba a carteira de trabalho, carteira de trabalho e salário utilizando o operador do SINDICATO, sabendo que o salário só existe na tabela dos funcionários?
O exemplo de código no slide corresponde às colunas EMPLOYEE_ID e JOB_ID nas tabelas EMPLOYEES e JOB_HISTORY. Um valor literal de 0 é adicionado à JOB_HISTORY declaração SELECT para corresponder à coluna salário numérica na instrução EMPLOYEES SELECT.
Nos resultados mostrados no slide, cada linha na saída que corresponde a um registro do 
JOB_HISTORY tabela contém um 0 na coluna SALÁRIO.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 26
 Agenda de Aulas
· Definir Operadores: Tipos e diretrizes
· Tabelas usadas nesta lição
· UNIÃO e UNIÃO TODO operador
· Operador CRUZAR-SE
· Operador MENOS
· Combine como instruções SELECIONAR
· Usando um cláusula ORDEM POR em operações definidas 
8 - 27
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 27
Usando um cláusula de ordem por norma em operações definidas 
· Uma cláusula ORDEM POR ORDEM só pode aparecer uma vez no final da consulta composta.
· Como consultas componentes não podem ter ordem individual POR
Cláusulas.
· ORDEM POR cláusula reconhece apenas as colunas da primeira
SELECIONE consulta.
· Por padrão, a primeira coluna da primeira consulta SELECIONAR é usada Para classificar a saída em uma ordem ascendente.
8 - 28
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Usando a cláusula de ordem por norma em operações definidas
A cláusula ORDEM POR cláusula só pode ser usada uma vez em uma consulta composta. Se utilizada, a cláusula ORDEM POR ORDEM deve ser colocada no final da consulta. A cláusula ORDEM POR CLÁUSULA aceita o nome da coluna ou um pseudônimo. Por padrão, a saída é classificada em ordem ascendente na primeira coluna da primeira consulta SELECT.
Nota: A cláusula ORDEM POR NÃO reconhece os nomes das colunas da segunda consulta SELECT. Para evitar confusão sobre nomes de colunas, é uma prática comum às posições da coluna ORDER BY .
Por exemplo, na seguinte instrução, a saída será mostrada em ordem ascendente do job_id.
SELECIONE employee_id, job_id,salário 	FROMemployees
UNIÃO
SELECIONE emplo yee_id, job_id,0 FROM 	job_history
ORDEM POR 2;
Se você omitir a ORDEM BY, então por padrão a saída será classificada na ordem ascendente de
employee_id. Não é possível usar as colunas da segunda consulta para classificar a saída.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 28
Resumo
 Nesta lição, você deveria ter aprendido a usar:
· UNIÃO para retornar todas as linhas distintas
· UNIÃO TUDO para retornar todas as linhas, incluindo duplicatas
· CRUZAR-SE durante retornar todas as linhas que são compartilhadas por ambas as Consultas
· MENOS para retornar todas as linhas distintas que são selecionadas pela primeira consulta, mas não pela segunda
· ORDEM POR apenas Não final da declaração
8 - 29
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Resumo
· O operador union retorna todas as linhas distintas selecionadas por cada consulta na consulta composta. Use o operador UNION para retornar todas as linhas de várias tabelas e eliminar quaisquer linhas duplicadas.
· Use o operador UNION ALL para retornar todas as linhas de várias consultas. Ao contrário do caso com o
 Operador union, as linhas duplicadas não são eliminadas e a saída não é classificada por padrão.
· Use o operador INTERSECT para retornar todas as linhas comuns a várias consultas.
· Use o operador MINUS para retornar linhas retornadas pela primeira consulta que não estão presentes na segunda consulta.
· Lembre-se de usar a cláusula ORDER BY somente no final da declaração composta.
· Certifique-se de que as expressões correspondentes nas listas SELECT correspondem em número e tipo de dados .
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 29
Prática 8: Visão geral
Nesta prática, você cria relatórios usando:
· O operador da UNIÃO
· O operador de INTERSECÇÃO
· O operador MENOS
8 - 30
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Prática 8: Visão geral
Nesta prática, você escreve consultas usando os operadores de conjunto.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 30
Prática 8
1. O departamento de RH precisa de uma lista de documentos do departamento para departamentos que não contenham a carteira de trabalho ST_CLERK. Use os operadores de conjunto para criar este relatório.
2. O departamento de RH precisa de uma lista de países que não têm departamentos localizados neles. Mostre a ID do país e o nome dos países. Use os operadores de conjunto para criar este relatório.
3. Produzir uma lista de empregos para os departamentos 10, 50 e 20, nessa ordem. Exibir o ID de trabalho e o ID do departamento usando os operadores de conjunto.
4. Crie um relatório que liste as carteiras de trabalho e as carteiras de trabalho daqueles funcionários que atualmente possuem um cargo que é o mesmo que seu cargo quando foram contratados inicialmente pela empresa (ou seja, mudaram de emprego, mas agora voltaram a fazer seu trabalho original).
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 31
Prática 8 (continuação)
5. O departamento de RH precisa de um relatório com as seguintes especificações:
· Sobrenome e departamento de todos os funcionários da tabela de funcionários, independentemente de pertencerem ou não a um departamento
· ID do departamento e nome do departamento de todos os departamentos da tabela departments, independentemente de terem ou não funcionários trabalhando neles
Escreva uma consulta composta para conseguir isso.
Oráculo Base de dados 11g: SQL Fundamentos I 8 - 32
Manipulação de Dados
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Objectivos
Depois de completar esta lição, você deve ser capaz de fazer o seguinte:
· Descreva cada instrução dml (data manipulation language, linguagem de manipulação de dados)
· Insira linhas em uma tabela
· Atualizar linhas em uma tabela
· Excluir linhas de uma tabela
· Controlar transações
9 - 2
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Objetivo
Nesta lição, você aprende a usar as instruções de linguagem de manipulação de dados (DML) para inserir linhas em uma tabela, atualizar linhas existentes em uma tabela e excluir linhas existentes de uma tabela. Você também aprende como controlar transações com as instruções COMMIT, SAVEPOINT e ROLLBACK.
Oráculo Base de dados 11g: Fundamentos SQL I 9 - 2
 Agenda de Aulas
· Adicionando novas linhas em uma tabela
· Instrução INSERIR
· Alterando dados em uma tabela
· Declaração ATUALIZAÇÃO
· Removendo linhas de uma tabela:
· Declaração de EXCLUSão
· Declaração de TRUNCAR
· Controle de transações de banco de dados usando COMETER, REVERSÃO e SAVEPOINT
· Leia consistência
· DURANTE ATUALIZAÇÃO cláusula em uma declaração SELECIONAR
9 - 3
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 10
Linguagem de manipulaçãode dados
· Uma instrução DML é executada quando você:
· Adicione novas linhas um uma mesa
· Modificar as linhas Existente em uma tabela
· Remova as linhas Existente de uma tabela
· Uma transação consiste em uma coleção de declarações DML que formam uma unidade lógica de trabalho.
9 - 4
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Linguagem de manipulação de dados
A linguagem de manipulação de dados (DML) é uma parte central do SQL. Quando você deseja adicionar, atualizar ou excluir dados no banco de dados, você executa uma instrução DML. Uma coleção de declarações DML que formam uma unidade lógica de trabalho é chamada de transação.
Considere um banco de dados bancário. Quando um cliente do banco transfere dinheiro de uma conta poupança para uma conta corrente, a transação pode consistir em três operações distintas: diminuir a conta poupança, aumentar a conta corrente e registrar a transação no diário de transações. O servidor Oracle deve garantir que todas as três instruções SQL sejam executadas para manter as contas em bom equilíbrio. Quando algo impede que uma das declarações da transação seja executada, as outras demonstrações da transação devem ser desfeitas.
Nota: A maioria das declarações de DML nesta aula assumem que nenhuma restrição na tabela é violada. As restrições são discutidas mais tarde neste curso.
Nota: No SQL Developer, clique no ícone Executar script ou pressione [F5] para executar as instruções DML. As mensagens de feedback serão mostradas na página da saída do script.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 4
Adicionando uma nova linha um uma mesa
DEPARTAMENTOS
Nova linha
Insira nova linha Não 
Tabela Departamentos.
9 - 5
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Adicionando uma nova linha a uma mesa
O gráfico no slide ilustra a adição de um novo departamento à tabela DEPARTMENTS.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 5
 Sintaxe de declaração inserir
· Adicione novas linhas um uma tabela usando um instrução INSERIR:
· Com esta sintaxe, apenas uma linha é inserida por Hora.
9 - 6
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 INSERIR NA tabela [(coluna [, coluna... ])] VALORES 	(valor [, valor... ]);
 Sintaxe de declaração insert
Você pode adicionar novas linhas a uma tabela emitindo a instrução INSERT. Na sintaxe:
tabela 	é o nome da mesa
coluna 	é o nome da coluna na tabela para povoar
valor 	é o valor correspondente para a coluna
Nota: Esta declaração com a cláusula VALORES adiciona apenas uma linha de cada vez a uma tabela.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 6
Inserção de novas linhas
· Insira uma nova linha contendo valores para cada coluna.
· Liste valores na ordem padrão das colunas na tabela.
· Opcionalmente , lista como colunas em cláusula INSERIR.
· Inclua valores de caracteres e datas entre aspas únicas.
9 - 7
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
INSERÇÃO em departamentos (department_id, department_name, manager_id, location_id)
VALORES (70, 'Relações Públicas ', 100, 1700);
Inserção de novas linhas
Como você pode inserir uma nova linha que contenha valores para cada coluna, a lista de colunas não é necessária na cláusula INSERT. No entanto, se você não usar a lista de colunas, os valores devem ser listados de acordo com a ordem padrão das colunas na tabela, e um valor deve ser fornecido para cada coluna.
DESCREVER departamentos
 Para obter clareza, use a lista de colunas na cláusula INSERT.
Incluir valores de caracteres e datas entre aspas únicas; no entanto, não é recomendável que você inclua valores numéricos dentro de aspas únicas.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 7
 Inserção de linhas com Nulos 
· Método implícito: Pular um coluna da lista de colunas.
· Método explícito: Especificar um palavra-chave ZERO nos VALORES
cláusula.
9 - 8
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 INSERÇÃO EM Departamentos
VALORES	(100, 'Finanças', ZERO NULO);
 INSERÇÃO EM Departamentos (department_id,
department_name)
VALORES	(30, 'Compras');
Inserção de linhas com valores nulos
	Método
	Descrição
	Implícito
	Omitir a coluna da lista da coluna.
	Explícito
	Especifique a palavra-chave NULL na lista VALORES;
especificar a sequência vazia ('') na lista VALORES para sequências e datas de caracteres . 
Certifique-se de que você pode usar valores nulos na coluna alvo, verificando o status Nulo com o
 DEScreva o comando.
O servidor Oracle aplica automaticamente todos os tipos de dados, intervalos de dados e restrições de integridade de dados. Qualquer column que não esteja listado obtém explicitamente um valor nulo na nova linha.
Erros comuns que podem ocorrer durante a entrada do usuário são verificados na seguinte ordem:
· Valor obrigatório faltando para uma coluna NÃO NULL
· Valor duplicado violando qualquer constraint chave única ou primária
· Qualquer valor que viole uma restrição DE CHECK
· Integridade referencial mantida para restrição de chave estrangeira
· Incompatibilidades ou valores do tipo de dados muito amplos para caber na coluna
Nota: O uso da lista de colunas é recomendado, pois torna a instrução INSERT mais legível e confiável, ou menos propensa a erros. 
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 8
Inserção de Valores Especiais
Um função SYSDATE registrar-se até o momento e a hora atuais.
9 - 9
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 INSERÇÃO NOS funcionários (employee_id,
first_name, last_name, e-mail, phone_number, hire_date, job_id, salário, commission_pct, manager_id, department_id)
VALORES	(113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
'AC_ACCOUNT', 6900,
ZERO 205, 110);
SYSDATE,
Inserção de Valores Especiais
Você pode usar funções para inserir valores especiais em sua tabela.
O exemplo de slide registra informações para o funcionário Popp na tabela EMPLOYEES. Fornece a data e a hora atuais na coluna HIRE_DATE. Ele usa a função SYSDATE que retorna a data e a hora atuais do servidor de banco de dados. Você também pode usar a função CURRENT_DATE para obter a data atual no fuso horário da sessão. Você também pode usar a função USER ao inserir linhas em uma tabela. A função USER registra o nome de usuário atual.
Confirmando adições à Mesa
EMPLOYEE_ID, last_name, job_id, hire_date commission_pct DE 	FUNCIONÁRIOS
ONDE employee_id = 113;
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 9
 INSERÇÃO NOS funcionários
VALORES
(114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE 3, 1999', "MEU DD YYYY'),
'SA_REP', 11000, 0,2, 100, 60);
Inserindo Valores Específico de data e hora
· Adicione em novo empregado.
· Verifique sua adição .
9 - 10
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Inserindo valores específicos de data e hora
O formato DD-MON-RR é geralmente usado para inserir um valor de data. Com o formato RR, o sistema fornece o século correto automaticamente.
Você também pode fornecer o valor da data no formato DD-MON-YYYY. Isso é recomendado porque especifica claramente o século e não depende da lógica do formato RR interno de especificar o século correto.
Se uma data deve ser inserida em um formato diferente do formato padrão (por exemplo, com outro século ou um tempo específico), você deve usar a função TO_DATE.
O exemplo no slide registra informações para o funcionário Raphealy na tabela EMPLOYEES. Define a coluna HIRE_DATE em 3 de fevereiro de 1999.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 10
Criando em roteiro
· Usar e substitua em uma instrução SQL durante pedir Valores.
· e é um espaço reservado para o valor variável.
 INSERÇÃO EM Departamentos
(department_id, department_name, location_id)
VALORES	(&department_id, '&department_name',&localização);
9 - 11
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Criando um script
Você pode salvar comandos com variáveis de substituição para um arquivo e executar oscomandos no arquivo. O exemplo no slide registra informações para um departamento na tabela DEPARTMENTS. 
Execute o arquivo de script e você é solicitado para entrada para cada uma das variáveis de substituição (&) ampersand (&). Depois de inserir um valor para a variável de substituição, clique no botão OK. Os valores que você inseriu são então substituídos na declaração. Isso permite que você execute o mesmo arquivo de script vári vezes, mas forneça um conjunto diferente de valores cada vez que executá-lo.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 11
Copiando linhas de outra mesa
· Escreva dele instrução INSERT com um subquery:
· Não utilize a cláusula VALORES .
· Combine o número de colunas na cláusula INSERIR com as fazer subquery.
· Insere todas como linhas devolvidas pelo subquery na tabela,
sales_reps.
9 - 12
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 INSERÇÃO em sales_reps (id, nome salário, commission_pct)
SELECIONE employee_id, last_name, salário, commission_pct
	FUNCIONÁRIOS DOM
ONDE job_id COMO '%REP%';
Copiando linhas de outra mesa
Você pode usar a instrução INSERT para adicionar linhas a uma tabela onde os valores são derivados de tabelas existentes. No exemplo de slide, para que a instrução INSERT INTO funcione, você deve ter criado a tabela sales_reps usando a instrução CRIAR TABELA. A TABELA CREATE é discutida na próxima lição intitulada "Usando declarações DDL para criar e gerenciar tabelas".
No lugar da cláusula VALORES, você usa um subquery.
Sintaxe
INSERÇÃO NA tabela [ coluna (, coluna) ] subquery;
Na sintaxe:
tabela 	é o nome da mesa
coluna 	é o nome da coluna na tabela para povoar
	subqueryis o subquery que retorna linhas para a mesa
O número de colunas e seus tipos de dados na lista de colunas da cláusula the INSERT devem corresponder ao número de valores e seus tipos de dados no subquery. Zero ou mais linhas são adicionadas dependendo do número de linhas devolvidas pelo subquery. Para criar uma cópia das linhas de uma tabela, use SELECT * no subquery:
INSERIR EM COPY_EMP SELECIONAR *
	FUNCIONÁRIOS FROMEM;
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 12
 Agenda de Aulas
· Adicionando novas linhas em uma tabela
· Instrução INSERIR
· Alterando dados em uma tabela
· Declaração ATUALIZAÇÃO
· Removendo linhas de uma tabela:
· Declaração de EXCLUSão
· Declaração de TRUNCAR
· Controle de transações de banco de dados usando COMETER, REVERSÃO e SAVEPOINT
· Leia consistência
· DURANTE ATUALIZAÇÃO cláusula em uma declaração SELECIONAR
9 - 13
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 13
Alterando dados em uma tabela
EMPREGADOS
Atualizar linhas em tabela EMPREGADOS:
9 - 14
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Alterando dados em uma tabela
O slide ilustra a alteração do número do departamento para funcionários do departamento 60 para o departamento 80.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 14
 GRUPO DE ATUALIZAÇÃO [ONDE
mesa
coluna = valor [, coluna = valor ... ] condição];
 Sintaxe de declaração de ATUALIZAÇÃO 
· Modificar os valores Existente em uma tabela com a instrução ATUALIZAÇÃO:
· Atualize mais de uma linha por vez (se necessário).
9 - 15
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Sintaxe de declaração de ATUALIZAÇÃO 
Você pode modificar os valores existentes em uma tabela usando a instrução UPDATE. Na sintaxe:
tabela 	é o nome da mesa
coluna 	é o nome da coluna na tabela para povoar
valor 	é o valor correspondente ou subquery para a coluna
a condição 	identifica as linhas a serem atualizadas e é composta de nomes de colunas, expressões, constantes, subqueries e operadores de comparação
Confirme a operação de atualização consultando a tabela para exibir linhas atualizadas.
Para obter mais informações, consulte a seção em "UPDATE" no Banco de Dados Oracle SQL Language Reference 11g, Release 1 (11.1).
Nota: Em geral, use a coluna-chave principal na cláusula WHERE para identificar uma única linha para atualização. O uso de outras colunas pode fazer com que várias linhas sejam atualizadas. Por exemplo, identificar uma única linha na tabela EMPLOYEES pelo nome é perigoso, pois mais de um funcionário pode ter o mesmo nome.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 15
 GRUPO DE ATUALIZAÇÃO
copy_emp department_id = 110;
Atualizando linhas em uma tabela
· Os valores de uma linha ou linhas específicas são modificados se você especificar um cláusula ONDE:
· Os valores para todas as linhas da tabela são modificados se você omitir um cláusula ONDE:
· Especificar SET column_name= ZERO durante atualizar o valor de uma coluna durante ZERO.
9 - 16
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
ATUALIZAR funcionários
PÔR 	department_id = 50 ONDE employee_id = 113;
Atualizando linhas em uma tabela
A instrução UPDATE modifica os valores de uma linha ou linhas específicas se a cláusula WHERE for especificada. O exemplo no slide mostra a transferência do empregado 113 (Popp) para o departamento 50.
Se você omitir a cláusula WHERE, os valores para todas as linhas da tabela ão são modificados. Examine as linhas atualizadas na tabela COPY_EMP.
SELECIONE last_name, department_id DE 	COPY_EMP;
...
Por exemplo , um empregado que era um SA_REP agora mudou seu trabalho para um IT_PROG. Portanto, sua JOB_ID precisa ser atualizada e o campo da comissão precisa ser definido como NULO.
ATUALIZAR funcionários
SET job_id = 'IT_PROG', commission_pct = NULL WHERE employee_id = 114;
Nota: A tabela COPY_EMP tem os mesmos dados da tabela EMPLOYEES.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 16
 GRUPO DE ATUALIZAÇÃO
empregados
job_id
salário
= (SELECIONAR de onde
= (SELECIONAR de onde
ONDE 	employee_id	=
job_id funcionários
employee_id = 205), salário
funcionários employee_id = 205)
113;
Atualizando duas colunas com em Subquery
Atualize o trabalho e o salário do funcionário 113 para combinar com os do funcionário 205.
9 - 17
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Atualizando duas colunas com um Subquery
Você pode atualizar várias colunas na cláusula SET de uma instrução UPDATE escrevendo vários subqueries. A sintaxe é a seguinte:
 Tabela UPDATE
	SETcolumn =
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 17
[ ,
coluna =
(SELECIONE coluna
DA mesa
ONDE condição)
(SELECIONE coluna
DA mesa
 CONDIÇÃO ONDE)]
[ONDE condição ] 	;
O exemplo no slide também pode ser escrito da seguinte forma:
ATUALIZAR funcionários
SET (job_id, salário) = (SELECT job_id, salário
	FUNCIONÁRIOS DOM
ONDE 	employee_id = 205) 	WHEREemploy ee_id	= 113;
ATUALIZAÇÃO
PÔR 	department_id =
ONDE
job_id
(SELECIONE department_id DOS funcionários
ONDE
= (SELECIONAR job_id DOS funcionários
ONDE employee_id = 200);
Atualizando linhas com base em outra tabela
Use os subqueries nas instruções UPDATE para atualizar valores de linha em uma tabela com base em valores de outra tabela:
9 - 18
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
employee_id = 100)
copy_emp
Atualizando linhas com base em outra tabela
Você pode usar os subqueries nas instruções UPDATE para atualizar valores em uma tabela. O exemplo no slide atualiza a tabela COPY_EMP com base nos valores da tabela EMPLOYEES. Ele muda o número de departamento de todos os funcionários com carteira de trabalho do funcionário 200 para o número atual do departamento do funcionário 100 .
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 18
 Agenda de Aulas
· Adicionando novas linhas em uma tabela
· Instrução INSERIR
· Alterando dados em uma tabela
· Declaração ATUALIZAÇÃO
· Removendo linhas de uma tabela:
· Declaração de EXCLUSão
· Declaração de TRUNCAR
· Controle de transações de banco de dados usando COMETER, REVERSÃO e SAVEPOINT
· Leia consistência
· DURANTE ATUALIZAÇÃO cláusula em uma declaração SELECIONAR
9 - 19
Direitos autorais © 2007, Oráculo. Todos os direitosReservado.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 19
Removendo uma linha de uma mesa
DEPARTAMENTOS
Exclua uma linha da tabela DEPARTAMENTOS:
9 - 20
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Removendo uma linha de uma mesa
O departamento de contratação foi removido da tabela DEPARTMENTS (assumindo que nenhuma restrição na tabela DEPARTMENTS seja violada), como mostrado pelo gráfico no slide.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 20
 Declaração de exclusão
Você pode remover linhas existentes de uma tabela usando o
Declaração DE EXCLUSÃO:
9 - 21
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
EXCLUIR [DA] tabela
[	CONDIÇÃO DE ONDE];
 Sintaxe de declaração de exclusão
Você pode remover linhas existentes de uma tabela usando a instrução DELETE. Na sintaxe:
tabela 	é o nome da mesa
a condição 	identifica as linhas a serem excluídas e é composta por nomes de colunas, expressões, constantes, subqueries e operadores de comparação
Nota: Se nenhuma linha for excluída, a mensagem "0 linhas excluídas" será devolvida (na guia Saída de script no desenvolvedor SQL)
Para obter mais informações, consulte a seção em "DELETE" no Banco de Dados Oracle SQL Language Reference 11g, Release 1 (11.1).
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 21
Excluindo linhas de uma mesa
· Linhas específicas são excluídas se você especificar um cláusula ONDE:
· Todas as linhas em tabela são excluídas se você omitir o ONDE 
cláusula:
9 - 22
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
EXCLUIR COPY_EMP ;
EXCLUIR DE DEPARTAMENTOS
ONDE department_name = 'Finanças';
Excluindo linhas de uma mesa
Você pode excluir linhas específicas especificando a cláusula WHERE na instrução DELETE. O primeiro exemplo no slide exclui o departamento de Accounting da tabela DEPARTMENTS. Você pode confirmar a operação de exclusão exibindo as linhas excluídas usando a instrução SELECT.
SELECIONE *
	Departamentos FROM
ONDE 	department_name = 'Finanças';
No entanto, se você omitir a cláusula WHERE, todas as linhas na tabela serão excluídas. O segundo exemplo no slide exclui todas as linhas da tabela COPY_EMP, porque nenhuma cláusula WHERE foi especificada.
Exemplo:
Remova as linhas identificadas na cláusula WHERE.
EXCLUIR DOS FUNCIONÁRIOS ONDE employee_id = 114;
EXCLUIR DOS departamentos ONDE department_id IN (30, 40);
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 22
Excluindo linhas com base em outra tabela
Usar os subqueries nas instruções EXCLUIR para remover linhas de uma tabela com base em valores de outra tabela:
9 - 23
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
EXCLUIR DOS funcionários ONDE department_id =
(SELECIONE department_id DEPARTAMENTOS	 ONDE department_name
COMO '%Público%');
Excluindo linhas com base em outra tabela
Você pode usar os subqueries para excluir linhas de uma tabela com base em valores de outra tabela. O exemplo no slide exclui todos os funcionários de um departamento onde o nome do departamento contém o administrador de strings. O subquery procura na tabela do DEPARTAMENTO para encontrar o número do departamento com base no nome do departamento contendo a sequência pública. O subquery então alimenta o número do departamento para a consulta principal, que exclui linhas de dados da tabela EMPLOYEES com base neste número de departamento.
Oraco Base de dados 11g: SQL Fundamentos I 9 - 23
 Declaração de TRUNCATE
· Remove todas as linhas de uma mesa, deixando a mesa vazia e a estrutura da tabela intacta
· É uma instrução de linguagem de definição de dados (DDL) em vez de uma instrução DML; não pode ser facilmente desfeito
· Sintaxe:
· Exemplo:
9 - 24
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
COPY_EMP MESA TRUNCAR ;
 TABLE_NAME MESA TRUNCAR;
 Declaração de TRUNCATE
Um método mais eficiente de esvaziar uma tabela é usando a instrução TRUNCATE.
Você pode usar a instrução TRUNCATE para remover rapidamente todas as linhas de uma tabela ou cluster. Remover linhas com a instrução TRUNCATE é mais rápido do que removê-las com a instrução DELETE pelas seguintes razões:
· A instrução TRUNCATE é uma instrução DDL (data definition language, linguagem de definição de dados) e não gera informações de reversão. As informações de reversão são cobertas mais tarde nesta aula.
· Truncating uma tabela não dispara os gatilhos de exclusão da tabela.
Se a tabela for o pai de uma restrição de integridade referencial , você não poderá truncar a tabela. Você precisa desativar a restrição antes de emitir a instrução TRUNCATE . As restrições desativação são cobertas por uma lição subsequente.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 24
 Agenda de Aulas
· Adicionando novas linhas em uma tabela
· Instrução INSERIR
· Alterando dados em uma tabela
· Declaração ATUALIZAÇÃO
· Removendo linhas de uma tabela:
· Declaração de EXCLUSão
· Declaração de TRUNCAR
· Controle de transações de banco de dados usando COMETER, REVERSÃO e SAVEPOINT
· Leia consistência
· DURANTE ATUALIZAÇÃO cláusula em uma declaração SELECIONAR
9 - 25
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 25
 Transações de banco de dados
Uma transação de banco de dados consiste em uma das seguintes:
· Declarações de DML que constituem uma alteração consistente nos dados
· Uma declaração DDL 
· Uma declaração de linguagem de controle de dados (DCL)
9 - 26
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Transações de banco de dados
O servidor Oracle garante a consistência dos dados com base em transações. As transações lhe dão mais flexibilidade e controle ao alterar dados, e garantem a consistência dos dados em caso de falha no processo do usuário ou falha no sistema.
As transações consistem em declarações DML que constituem uma alteração consistente nos dados. Por exemplo, uma transferência de fundos entre duas contas deve incluir o débito em uma conta e o crédito para uma conta do mesmo valor. Ambas as ações devem falhar ou ter sucesso em conjunto; o crédito não deve ser comprometido sem o débito.
Tipos de transação
	Tipo
	Descrição
	Linguagem de manipulação de dados (DML)
	Consiste em qualquer número de instruções DML que o servidor Oracle trata como uma única entidade ou uma unidade lógica de trabalho
	Linguagem de definição de dados (DDL)
	Consiste em apenas uma declaração DDL
	Linguagem de controle de dados (DCL)
	Consiste em apenas uma declaração DCL
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 26
 Transações de banco de dados: Início e Fim
· Comece quando um primeira instrução DML SQL for executada.
· Termine com um dos seguintes eventos:
· Uma declaração COMETER ou REVERSÃO é Emitido.
· Uma instrução DDL ou DCL é executada (compromisso automático ).
· O usuário sai do SQL Revelador ou SQL*Plus.
· O sistema falha.
9 - 27
Direitos autorais © 2007, Oráculo. Todos os direitos Reservado.
 Transação no banco de dados: Início e Fim
Quando uma transação de banco de dados começa e termina?
Uma transação começa quando a primeira instrução DML é encontrada e termina quando uma das seguintes ocorrências:
· Uma declaração COMMIT ou ROLLBACK é emitida.
· Uma declaração DDL , como CREATE, é emitida.
· Uma declaração do DCL é emitida.
· O usuário sai do SQL Developer ou SQL*Plus.
· Uma máquina falha ou o sistema falha.
Após o término de uma transação, a próxima instrução SQL executável inicia automaticamente a próxima transação.
Uma declaração DDL ou uma declaração DCL é automaticamente comprometida e, portanto, termina implicitamente uma transação.
Oráculo Base de dados 11g: SQL Fundamentos I 9 - 27
Vantagens do COMETER
e Declarações de REVERSÃO 
Com declarações DE COMMIT e REVERSÃO , você pode:
· Garantir a consistência dos dados
· Visualizar alterações de dados antes de tornar as alterações permanentes
· Operações relacionadas logicamente 
9 - 28
Direitos autorais © 2007, Oráculo. Todos os

Continue navegando

Outros materiais