You are on page 1of 195

Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Introduo
do
Treinamento
Objetivo

Ensinar o aluno a escrever instrues SQL


para acessar e atualizar dados em SGBDs
Oracle, e criar/gerenciar objetos, tais como:
tabelas, ndices, vises e outros;

Apesar do treinamento ser orientado para


Bancos de Dados Oracle 10G, 11G e 12C, a
maior parte do aprendizado se aplicar em
qualquer SGBD que implemente o padro
ANSI (Ex.: Mysql, SQL Server, DB2).
www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Objetivo

O treinamento abordar o contedo dos


exames 1Z0-051 (OCA/OCP 10G e 11G) e
1Z0-061 (OCA/OCP 12c);

Ao longo do treinamento, o aluno ter


exerccios preparatrios para os exames
mencionados acima.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Material

Totalmente elaborado pelo instrutor do


treinamento de acordo com a sua
experincia, conhecimentos e pesquisas;

Parte torica resumida para facilitar e


agilizar o aprendizado;

Composto adicionalmente por scripts que


aplicam todos os conceitos, tcnicas e dicas
aprendidas durante o treinamento e que
serviro para referncias futuras.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Contedo programtico
1. Introduo
2. Recuperando dados com a instruo SELECT
3. Utilizando funes em instrues SQL
4. Utilizando agrupamentos e funes de grupo
5. Recuperando dados de mltiplas tabelas
6. Utilizando operadores de conjunto
7. Atualizando dados
8. Utilizando instrues DDL
9. Utilizando instrues DCL
10. Consultando vises no Dicionrio de Dados
www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Exame 1Z0-051

http://education.oracle.com/pls/web_prod-plq-
Link oficial: dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-051

Certificaes -Oracle Database 10g Administrator Certified Associate


associadas: -Oracle Database 11g Administrator Certified Associate
-Oracle PL/SQL Developer Certified Associate
-OPN Certified Specialist
Preo: US$ 125
Durao: 120 minutos
Qtde. questes: 66
Pontuao aprovao: 60%

Formato: Mltipla escolha

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
1Z0-051 x Aprendendo SQL

Exame 1Z0-051 Aprendendo SQL


Retrieving Data Using the SQL SELECT Statement 2. Recuperando dados com a instruo SELECT

Restricting and Sorting Data 2. Recuperando dados com a instruo SELECT

Using Single-Row Functions to Customize Output 3. Utilizando funes em instrues SQL


Using Conversion Functions and Conditional Expressions 3. Utilizando funes em instrues SQL

Reporting Aggregated Data Using the Group Functions 4. Utilizando agrupamentos e funes de grupo

Displaying Data from Multiple Tables 5. Recuperando dados de mltiplas tabelas e subqueries

Using Subqueries to Solve Queries 5. Recuperando dados de mltiplas tabelas e subqueries

Using the Set Operators 6. Utilizando operadores de conjunto


Manipulating Data 7. Atualizando dados

Using DDL Statements to Create and Manage Tables 8. Utilizando instrues DDL

Creating Other Schema Objects 8. Utilizando instrues DDL

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Exame 1Z0-061

http://education.oracle.com/pls/web_prod-plq-
Link oficial: dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-061

Certificaes -OPN Certified Specialist;


associadas: -Oracle Database 12c Administrator Certified
Associate;
-ORACLE MASTER Bronze Oracle Database 12c (Japan).
Preo: US$ 125
Durao: 120 minutos
Qtde. questes: 75
Pontuao aprovao: 65%

Formato: Mltipla escolha

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
1Z0-061 x Aprendendo SQL

1Z0-061 Aprendendo SQL


Introduction 1. Introduo

Retrieving Data Using the SQL SELECT Statement 2. Recuperando dados com a instruo SELECT

Restricting and Sorting Data 2. Recuperando dados com a instruo SELECT


Using Single-Row Functions to Customize Output 3. Utilizando funes em instrues SQL
Using Conversion Functions and Conditional Expressions 3. Utilizando funes em instrues SQL

Reporting Aggregated Data Using the Group Functions 4. Utilizando agrupamentos e funes de grupo

Displaying Data from Multiple Tables Using Joins 5. Recuperando dados de mltiplas tabelas e subqueries

Using Subqueries to Solve Queries 5. Recuperando dados de mltiplas tabelas e subqueries


6. Utilizando operadores de conjunto
Manipulating Tables using DML statements 7. Atualizando dados

Introduction to Data Definition Language 8. Utilizando instrues DDL

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 1

Introduo
Introduo

Neste captulo veremos:


Conceitos de Bancos de Dados Relacionais e Bancos de Dados
Objeto-Relacionais;
Conceitos de Modelo Entidade-Relacionamento;
Conceitos de instrues SQL;
Classificao das instrues SQL;
Novos recursos do Oracle Database 12c;
Conceitos do Oracle Cloud 12c.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Banco de Dados Relacional

Edgar F. Codd, pesquisador da IBM, props o


modelo para sistemas de BD relacional em
1970 e este modelo tornou-se a base dos
SGBDRs;

Em 1979, foi lanado o Oracle 2, o primeiro BD


relacional (com SQL) comercializado no
mundo;

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Banco de Dados Relacional

A estrutura bsica de um SGBDR contm:


Coleo de objetos ou relacionamentos;
Conjunto de operadores para atuar nos relacionamentos;
Mecanismos para garantir a integridade dos dados com preciso e
consistncia.

Fonte: Oracle Corporation


www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Modelo Entidade-Relacionamento

uma representao da realidade composta


basicamente por entidades, relacionamentos
e atributos;

Pode ser representado graficamente pelo


Diagrama de Entidades e Relacionamentos
(DER) de Peter Chen, criado em 1976.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Modelo Entidade-Relacionamento

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
Banco de Dados Objeto Relacional

Um sistema de gerenciamento de BD Objeto-


relacional (SGBDOR) similar a um SGBDR;

Suporta objetos, classes e herana nos


esquemas do BD e nas instrues SQL.

Para mais informaes, consulte o link:


http://en.wikipedia.org/wiki/Object-relational_database.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
O que SQL?

SQL = Structured Query Language

Conjunto de instrues ou comandos para


manipular dados em bancos de dados
relacionais;

Foi desenvolvida em 1970 pela IBM e


padronizada pelo Instituto Americano Nacional
de Padres (ANSI) em 1986;

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
O que SQL?

Exemplos de verses SQL do padro ANSI:


SQL-86:
 1 verso da linguagem, consiste basicamente na linguagem inicial criada
pela IBM.

SQL-99:
 Verso que teve a implementao de mais recursos novos significativos,
entre eles: expresses regulares, queries recursivas, triggers, LOB;

SQL-2003:
 Incluso de suporte bsico ao padro XML, instruo MERGE, colunas
com valores auto-incrementais etc.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
Padro ANSI x dialetos
Todo SGBDR possui comandos SQL especficos que no
pertencem ao padro ANSI. Estes comandos so extenses
conhecidas como dialetos;

Evite os dialetos, utilize sempre o padro ANSI para obter


os seguintes benefcios:
Permitir portabilidade entre SGBDs distintos;
Minimizar riscos de escrever SQL ruim;
Possibilitar melhor performance em instrues SQL complexas.

O Oracle Database 11G aderente ao padro ANSI


SQL:2008. O 12c aderente ao padro ANSI SQL:2011.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
Padro ANSI x dialetos

www.fabioprado.net
janeiro de 15 Aprendendo SQL 12
2014 Fbio Prado. Todos os direitos reservados.
Grupos de instrues SQL

A linguagem SQL subdividida em 4


grupos:
DML (Data Manipulation Language):
 SELECT, INSERT, UPDATE, DELETE e MERGE;

DDL (Data Definition Language):


 CREATE, ALTER, DROP, RENAME, TRUNCATE e COMMENT;

DCL (Data Control Language):


 GRANT e REVOKE;

Transaction Control:
 COMMIT, ROLLBACK e SAVEPOINT.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 13
2014 Fbio Prado. Todos os direitos reservados.
Grupos de instrues SQL

Fonte: Oracle Corporation

www.fabioprado.net
janeiro de 15 Aprendendo SQL 14
2014 Fbio Prado. Todos os direitos reservados.
Captulo 1

Parte Final
Novos recursos do Oracle 12c
Melhorias em instrues SQL, tais como:
Queries do tipo Top N;
Funes PL/SQL na clusula WITH;
Execuo concorrente de UNION e UNION ALL;
Parallel DML em colunas LOB SecureFiles;
DDL online ao apagar, por exemplo um ndice ou constraint;
Estatsticas dinmicas, otimizao de query adaptvel, novos tipos de
histogramas;
Truncate Table Cascade.

Melhorias em operaes de backup via RMAN, tais como:


Restaurar uma ou mais tabelas;
Cross-Plataform Backup and Restore;

Arquitetura Multitenant;

Para mais detalhes, leia no blog FABIOPRADO.NET o artigo


Novidades do Oracle Database 12c (Parte 1).
www.fabioprado.net
janeiro de 15 Aprendendo SQL 16
2014 Fbio Prado. Todos os direitos reservados.
EM Cloud Control 12c
Evoluo do EM Grid Control

Fonte: Oracle Corporation

Para mais detalhes, consulte os links:


http://www.oracle.com/technetwork/oem/pdf/512028.pdf
http://www.oracle.com/technetwork/oem/cloud-mgmt/cloudmgmt12c-wp-516612.pdf

www.fabioprado.net
janeiro de 15 Aprendendo SQL 17
2014 Fbio Prado. Todos os direitos reservados.
Schema HR

Para mais informaes, leia no blog FABIOPRADO.NET o artigo:


Instalando o schema de exemplo HR.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 18
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 2

Recuperando dados
com a instruo SELECT
Introduo

Neste captulo veremos:


Conceitos de projeo e seleo;
Sintaxe bsica das instrues SELECT;
Expresses aritmticas e tratamento de valores nulos;
Operadores e literais;
Restrio e ordenao de dados.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Projeo X Seleo

Para executar uma instruo SQL importante


entender 2 conceitos bsicos:
Projeo:
 Colunas de uma ou mais tabelas a serem recuperadas;
 PROJEO = Lista de colunas.

Seleo:
 Linhas de uma ou mais tabelas a serem recuperadas;
 SELEO = Filtro de linhas.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Sintaxe bsica

SELECT * | {[DISTINCT] coluna |


expresso [alias], ...}
FROM tabela [alias]
WHERE coluna | expresso =
coluna | expresso

Observaes:
- Aps a clusula SELECT, deve ser especificada a lista de colunas a ser recuperada;
- Aps a clusula FROM, deve(m) ser especificada(s) a(s) tabela(s).

www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Caractersticas gerais

As instrues SQL no so case-sensitive;


As clusulas podem ser separadas em linhas
diferentes e identadas para facilitar o entendimento;
O terminador ; requerido somente no SQL Plus ou
quando so executadas N instrues;
Aliases ou apelidos so opcionais e no requerem os
delimitadores quando a palavra no contm:
Caracteres especiais, tais como o espao em branco;
Palavras reservadas.

A palavra reservada AS que precede um alias de uso


opcional.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Operadores aritmticos,
valores nulos, literais e
comandos bsicos
Expresses aritmticas

possvel criar expresses com valores numricos


e datas, usando operadores aritmticos;

Assim como na aritmtica, possvel utilizar


parnteses para indicar precedncia de clculo;

Operador Descrio
+ Adio
- Subtrao
* Multiplicao
/ Diviso

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Valores nulos

NULL = valor desconhecido ou inexistente

Valores nulos no so a mesma coisa que zero


ou espaos vazios ();

Quando voc v em alguma ferramenta (Ex.:


SQL Developer) a palavra (null) representando
o valor de uma coluna, entenda que a
ferramenta possui uma configurao que
substitui o valor nulo pela string (null) para
facilitar a visualizao e entendimento.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
Valores nulos

Cuidado ao efetuar clculos com valores nulos;

Qualquer clculo efetuado com um valor nulo


retornar sempre nulo.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
Operadores e literais
Use cuidadosamente os operadores de precedncia ()
para retornar o resultado esperado;
Utilize os caracteres || para concatenar valores ou
colunas (somente string), retornando-os como se fosse
uma nica coluna;

Literais podem ser concatenados nos valores ou


colunas de uma instruo. Ao concatenar datas ou
caracteres, delimite-os utilizando aspas simples ();

Quando a string possui aspas simples em seu contedo,


utilize um delimitador customizado atravs do
operador de notaes q.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
Recursos diversos

Utilize o comando DISTINCT para eliminar valores


repetidos;

Utilize o comando DESC ou DESCRIBE para ver a


estrutura (colunas, tipos de dados e constraint
NOT NULL) de uma tabela;

Utilize variveis de substituio atravs do


operador & ou && para substituir valores, em
tempo de execuo, dentro de uma instruo
SQL.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 12
2014 Fbio Prado. Todos os direitos reservados.
Restringindo dados
Restringindo dados

Para restringir dados necessrio utilizar a


clusula WHERE com um ou mais
operadores de comparao e, se
necessrio, um ou mais operadores lgicos.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 14
2014 Fbio Prado. Todos os direitos reservados.
Operadores de comparao
Operador Descrio
= Igualdade
> Maior
>= Maior ou igual
< Menor
<= Menor ou igual
<> ou != Diferente
BETWEEN ...
Entre (inclusive) 2 valores
AND ...
IN Lista de valores
LIKE Combinao de valores incluindo coringas (% ou _)
IS NULL Valor nulo
www.fabioprado.net
janeiro de 15 Aprendendo SQL 15
2014 Fbio Prado. Todos os direitos reservados.
Operadores lgicos

Operador Descrio
AND Retorna TRUE se ambas as condies so verdadeiras
OR Retorna TRUE se qualquer condio for verdadeira
NOT Retorma TRUE se a condio for falsa

www.fabioprado.net
janeiro de 15 Aprendendo SQL 16
2014 Fbio Prado. Todos os direitos reservados.
Regras de precedncia

Prioridade Operador
1 Operadores aritmticos
2 Operador de concatenao
3 Condies de comparao
4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 Desigualdade
7 Condio lgica NOT
8 Condio lgica AND
9 Condio lgica OR

Obs.: Para sobrescrever as regras de precedncia, utilize parnteses.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 17
2014 Fbio Prado. Todos os direitos reservados.
Ordenando dados
Ordenando dados
possvel ordenar os dados retornados utilizando
a clusula ORDER BY, no final da instruo
SELECT;
A ordenao pode ser realizada em modo
crescente (padro) ou decrescente, atravs dos
complementos ASC ou DESC;
A ordenao pode ser realizada atravs dos
seguintes itens:
Nome da(s) coluna(s);
Apelido da(s) coluna(s);
Ordem da(s) coluna(s);

www.fabioprado.net
janeiro de 15 Aprendendo SQL 19
2014 Fbio Prado. Todos os direitos reservados.
Ordenando dados

A ordenao pode ser realizada em uma ou


mais colunas, utilizando modos crescente e
decrescente, em cada coluna desejada;

A ordenao consome muitos recursos de


processamento do BD. Evite-a sempre que
possvel (principalmente em consultas que so
executadas frequentemente).

www.fabioprado.net
janeiro de 15 Aprendendo SQL 20
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 3

Utilizando funes
em instrues SQL
Introduo

Neste captulo veremos:


Viso geral e tipos de funes;
Single-row functions;
Formatao de datas;
Funes aninhadas;
Converses explcitas e implcitas;
Expresses condicionais.

www.fabioprado.net
janeiro de 17 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

As funes podem ser utilizadas, em geral,


para as seguintes finalidades:
Converter valores;
Transformar valores;
Realizar clculos.

Caractersticas gerais:
Podem receber 0 ou N argumentos (valor de uma coluna ou
expresso);
Retornam obrigatriamente um valor;
Podem transformar tipos de dados;
Podem ser aninhadas.
www.fabioprado.net
janeiro de 17 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Fonte: SQL Functions Oracle Site: www.dotnetspider.com

www.fabioprado.net
janeiro de 17 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Tipos de funes

Existem 2 tipos de funes SQL:


Single-row functions:
 Funes que retornam um valor por linha.

Multiple-row functions:
 Funes que retornam um valor para N linhas;
 So utilizadas com agrupamentos.

www.fabioprado.net
janeiro de 17 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Tipos de funes

Fonte: SQL Functions Oracle Site: www.dotnetspider.com

www.fabioprado.net
janeiro de 17 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
Single-row functions

Retornam um resultado por linha;

So subdivididas em funes para trabalhar com:


Caracteres:
 LOWER, UPPER, INITCAP, CONCAT, SUBSTR, LENGTH, INSTR, LPAD, RPAD,
TRIM e REPLACE;

Nmeros:
 ROUND, TRUNC e MOD;

Datas:
 SYSDATE, MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY, ROUND
e TRUNC;

www.fabioprado.net
janeiro de 17 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Single-row functions
Converses:
 TO_CHAR, TO_NUMBER e TO_DATE;

Gerais:
 NVL, NVL2, NULLIF, COALESCE e DECODE.

www.fabioprado.net
janeiro de 17 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
Funes aninhadas,
trabalhando com datas,
converses e
expresses condicionais
Funes aninhadas

Funes single-row podem ser aninhadas em


qualquer nvel;

As funes mais internas so executadas


primeiramente.

www.fabioprado.net
janeiro de 17 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
Trabalhando com datas

O Oracle armazena datas em um formato interno


numrico que contm: sculo, ano, ms, dia,
horas, minutos e segundos;

O formato de visualizao padro DD-MON-RR,


onde RR corresponde ao sculo, conforme regras
abaixo:
a) Se ano atual entre 0 e 49:
- Retorna o sculo atual se a data informada entre 0 e 49;
- Retorna o sculo anterior se a data informada entre 50 e 99.
b) Se ano atual entre 50 e 99:
- Retorna o prximo sculo se a data informada entre 0 e 49;
- Retorna o sculo atual se a data informada entre 50 e 99.

www.fabioprado.net
janeiro de 17 Aprendendo SQL 12
2014 Fbio Prado. Todos os direitos reservados.
Trabalhando com datas

possvel utilizar operadores aritmticos com datas;

Elementos de formatao de datas:


Elemento Descrio
YY ou YYYY Ano em 2 ou 4 dgitos (valor numrico)
YEAR Ano por extenso
MM Ms em 2 dgitos (valor numrico)
MONTH Ms por extenso
MON Ms por extenso em apenas 3 caracteres
DD Dia do ms (valor numrico)
DAY Dia por extenso
DY Dia por extenso em apenas 3 caracteres

www.fabioprado.net
janeiro de 17 Aprendendo SQL 13
2014 Fbio Prado. Todos os direitos reservados.
Converses explcitas X implcitas

No existe comparao entre 2 tipos de dados


diferentes;

Se uma funo de converso no for utilizada


explicitamente, o Oracle tentar fazer uma
converso implcita, quando for necessrio;

Para evitar erros e otimizar performance,


faa converses explcitas;

www.fabioprado.net
janeiro de 17 Aprendendo SQL 14
2014 Fbio Prado. Todos os direitos reservados.
Converses explcitas X implcitas

O Oracle s consegue fazer converso implcita


nas seguintes situaes:
De NUMBER para VARCHAR2 ou CHAR;
De DATE para VARCHAR2 ou CHAR;

De VARCHAR2 ou CHAR para NUMBER;


De VARCHAR2 ou CHAR para DATE;

Regras gerais de converso:


Se entre 2 valores 1 for NUMBER, o Oracle converte o outro para
NUMBER tambm;
Se entre 2 valores 1 for DATE, o Oracle converte o outro para
DATE tambm.
www.fabioprado.net
janeiro de 17 Aprendendo SQL 15
2014 Fbio Prado. Todos os direitos reservados.
Expresses condicionais

possvel utilizar a expresso condicional CASE


como alternativa funo DECODE para
implementar a lgica condicional de um IF-
THEN-ELSE;

A vantagem do CASE que ele permite


verificar qualquer condio, e no somente de
igualdade.

www.fabioprado.net
janeiro de 17 Aprendendo SQL 16
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 4

Utilizando agrupamentos
e
funes de grupo
Introduo

Neste captulo veremos:


Viso geral de agrupamentos;
Funes de grupo e funes agregadas;
Consideraes gerais sobre agrupamentos e funes de grupo;
Funes analticas.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral de Agrupamentos

Pode ser entendido como um recurso que possui a


capacidade de processar mltiplos valores e retornar
um resultado nico e muito til para realizar
clculos;

Permite agrupar o resultado de mltiplas linhas,


baseando-se nos valores da tabela inteira ou de uma
ou mais colunas;

O agrupamento normalmente utilizado com as


chamadas funes de grupo ou funes agregadas,
que operam em conjuntos de linhas para fornecer um
resultado por grupo;
www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Sintaxe

SELECT [coluna, ]
funcao_grupo(coluna),
FROM tabela
[WHERE condicao]
[GROUP BY coluna, ]
[ORDER BY coluna, ]

www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Funes de grupo
As funes de grupo mais utilizadas so:
COUNT: retorna o total de linhas;
SUM: retorna a soma de valores;
AVG: retorna a mdia de valores;
MAX: retorna o valor mximo;

MIN: retorna o valor mnimo;

VARIANCE: retorna a varincia (soma dos quadrados dos desvios /


ocorrncias);

STDDEV: retorna o desvio padro (raiz quadrada da varincia).

Obs.: Para compreender melhor desvio padro e varincia necessrio ter conhecimentos prvios de
estatstica (ver link http://educacao.uol.com.br/matematica/media-desvio-padrao-e-variancia-nocoes-de-estatistica.jhtm)

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Consideraes e
Funes Analticas
Consideraes gerais

Consideraes gerais sobre o uso de


agrupamentos e funes de grupo:
As funes de grupo ignoram valores nulos, portanto, uma boa
prtica usar NVL;

Todas as colunas da lista SELECT que no esto inclusas nas


funes de grupo devem estar includas na clusula GROUP BY;

Apelido da coluna no pode ser usado na clusula GROUP BY;

Use a clusula HAVING para restringir grupos e WHERE apenas


para restringir linhas;

possvel aninhar as funes de grupo.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Funes analticas

Pesquise sobre funes analticas para


desenvolver queries com agrupamentos mais
complexos;

Elas podem ser utilizadas em conjuntos de


linhas independentes do agrupamento;

Melhoram a produtividade e so mais


performticas do que instrues SQL com
funes similares customizadas.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 5

Recuperando dados
de mltiplas tabelas e
subqueries
Introduo

Neste captulo veremos:


Viso geral de relacionamentos;
Conceitos e consideraes gerais ao efetuar ligaes;
Conceitos e utilizao de equi-join, self-join, theta join, outer
join e produto cartesiano;
Viso geral e utilizao de subqueries;
Suqueries escalares e correlacionadas.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Para recuperar dados de mltiplas tabelas


precisamos entender os conceitos
relacionados s ligaes de tabelas (JOINs);

Tipos de ligaes (padro ANSI SQL 1999) :


Equi-joins (Natural join)

Self-joins

Theta Joins (Nonequijoins)

Outer joins

Produtos cartesianos

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Sintaxe
SELECT tabela1.coluna,
tabela2.coluna FROM
tabela1
[NATURAL JOIN tabela2] |
[JOIN tabela2 USING (coluna)] |
[JOIN tabela2
ON (tabela1.coluna = tabela2.coluna)] |
[LEFT | RIGHT | FULL OUTER JOIN tabela2]
ON (tabela1.coluna = tabela2.coluna)] |
[CROSS JOIN tabela2]
www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Consideraes gerais

Use apelidos curtos para qualificar as


tabelas, ao invs do nome delas;

Use os apelidos das tabelas para referenciar


as colunas (obrigatrio a partir do 11G
quando houver colunas com nomes ambguos);

Ao recuperar na lista de colunas, 2 ou mais


colunas que possuem o mesmo nome, atribua
um apelido diferente para cada uma delas.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Equi-join
Recupera somente as linhas que possuem valores
iguais na(s) coluna(s) de ligao;

Permite efetuar ligaes atravs das seguintes


clusulas:
NATURAL JOIN:
 Ligao automtica atravs de colunas com mesmo nome e tipo de dado;

USING:
 Ligao automtica atravs de colunas com somente mesmo nome;

ON:
 Ligao efetuada atravs de colunas especificadas (no precisa ter mesmo
nome e nem mesmo tipo de dado).

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
Self-join

Ocorre quando uma tabela ligada a ela


mesma, ou seja, quando uma tabela possui
auto-relacionamento;

Pode ser substitudo por queries hierrquicas.


Para mais informaes leia no blog
FABIOPRADO.NET o artigo Consultando dados
com queries hierrquicas.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Theta join, outer join e
produto cartesiano
Theta join

Ocorre quando uma tabela ligada a outra


atravs de uma faixa de valores;

Nonequijoins significa que a ligao vai


retornar os registros de uma tabela baseando-
se na faixa de valores de uma segunda tabela.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
Outer join

Difere-se de um Equi-Join porque retorna


alm dos registros que combinam entre as 2
tabelas, os registros que no combinam,
conforme clusulas abaixo:
LEFT [OUTER] JOIN:
 Registros que no combinam da tabela esquerda da ligao;
 Antes do 12c, somente o padro ANSI permitia LEFT JOIN de uma tabela com 2 ou
mais (outras) tabelas. No 11G ou verses anteriores, ao tentar fazer isso no
dialeto Oracle, ocorrer o erro ORA-01417;

RIGHT [OUTER] JOIN:


 Registros que no combinam da tabela direita da ligao;

FULL [OUTER] JOIN:


 Registros que no combinam de ambas as tabelas da ligao.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
Outer join

Valores nulos (NULL) retornaro nas colunas


das tabelas que contm as linhas que no
combinam;

Utilize sempre a sintaxe do padro ANSI. No


dialeto Oracle o caminho para fazer um FULL
OUTER JOIN maior e menos performtico.

Cuidado! Por questes de performance, evite


quando for possvel, Outer Joins!

www.fabioprado.net
janeiro de 15 Aprendendo SQL 12
2014 Fbio Prado. Todos os direitos reservados.
Produto cartesiano

Ocorre quando no h uma ligao entre as


tabelas;

Com a clsula CROSS JOIN, retorna qtde. de


linha da 1 tabela X qtde. de linhas da 2;

Muitas vezes consequncia de:


Ligaes omitidas (por esquecimento ou falta de
conhecimento);

Ligao invlida.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 13
2014 Fbio Prado. Todos os direitos reservados.
Consideraes finais

Existem ainda 2 outros tipos de ligaes (no

especificadas no padro ANSI SQL 99):

Semi-joins:
 Retorna somente linhas da 1 tabela que combinam com linhas de
uma 2 tabela ou conjunto;
 Pode ser implementado atravs das clusulas IN ou EXISTS.

Anti-joins:
 Retorna somente linhas da 1 tabela NO que combinam com linhas
de uma 2 tabela ou conjunto;
 Pode ser implementado atravs das clusulas NOT IN ou NOT
EXISTS.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 14
2014 Fbio Prado. Todos os direitos reservados.
Utilizando subqueries
Viso geral

Subqueries so representadas como uma query


contida em outra query;

A query principal, mais esquerda conhecida como


Outer query e a query direita (mais interna), a
subquery, conhecida como Inner query;

A Inner query sempre processada primeiro;

So conhecidas no padro ANSI como Semi-joins e


Anti-joins.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 16
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Subqueries devem estar contidas entre


parnteses;

Se a subquery retornar apenas uma linha,


utilize um operador single-row (Exs.: =, <>)
antes dos parnteses, caso contrrio, utilize
um operador multiple-row (Ex.: IN);

Valores nulos devem ser tratados para no


retornar resultado vazio.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 17
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Operadores single-row:
Igualdade: =
Maior que: >
Maior ou igual que: >=
Menor que: <
Menor ou igual que: <=
Diferente (no igual que): <> ou !=

Operadores multiple-row:
Igual a um membro da lista: IN
Compara um valor a cada valor da lista: ANY
Compara um valor a todos os valores da lista: ALL

www.fabioprado.net
janeiro de 15 Aprendendo SQL 18
2014 Fbio Prado. Todos os direitos reservados.
Subqueries escalares

Subqueries que retornam apenas um valor (1


linha e 1 coluna) so conhecidas como
subqueries escalares;

Subqueries escalares podem ser usadas:


Como parte de instrues DECODE e CASE;
Todas as clusulas da instruo SELECT, exceto GROUP BY;
Na clusula SET e WHERE de uma instruo UPDATE ou DELETE.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 19
2014 Fbio Prado. Todos os direitos reservados.
Subqueries correlacionadas

Subqueries correlacionadas possuem


relacionamento com a query principal;

So processadas linha-a-linha;

Permitem escrever consultas complexas


envolvendo valores agrupados.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 20
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 6

Utilizando operadores
de conjunto
Introduo

Neste captulo veremos:


Viso geral dos operadores de conjunto;
Operadores de conjunto UNION, UNION ALL, INTERSECT e
MINUS;
Ordenao de conjuntos.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Os operadores de conjuntos permitem unir ou


subtrair dados de instrues SQL distintas, unindo o
resultado delas;

As instrues SQL se integram e passam a compor


uma s instruo;

Todas as instrues SQL devem ter a mesma qtde. e


tipo de colunas da 1 instruo;

Os operadores de conjunto so: UNION ALL, UNION,


INTERSECT e MINUS.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
UNION ALL

Permite unir 2 ou mais conjuntos de dados;

Todos os dados (mesmo os repetidos) so


unidos;

A partir do 12c, os conjuntos podem ser


processados paralelamente.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
UNION

Permite unir 2 ou mais conjuntos de dados;

Somente os dados distintos (elimina os dados


repetidos) so unidos;

Para eliminar os dados repetidos, um


DISTINCT implcito executado na instruo
SQL;

A partir do 12c, os conjuntos podem ser


processados paralelamente.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
INTERSECT

Permite unir 2 ou mais conjuntos de dados;

Somente os dados comuns (elimina os dados


diferentes) so unidos.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
MINUS

Permite subtrair os dados de 2 ou mais


conjuntos;

Permanece os dados do 1 conjunto que no


esto contidos no 2 conjunto.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Ordenao

Por padro, a ordenao sempre realizada


na primeira coluna (exceto UNION ALL);

Se for necessrio efetuar outra ordenao


qualquer, a clusula ORDER BY deve ser
inclusa depois do ltimo conjunto;

Se for utilizar apelidos de colunas para


efetuar a ordenao, utilize os apelidos do 1
conjunto.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 7

Atualizando dados
Introduo

Neste captulo veremos:


Conceitos de instrues DML;
Instrues INSERT, UPDATE e MERGE;
INSERT Multitable;
Instrues DELETE e TRUNCATE;
Instruo SELECT FOR UPDATE;
Conceitos e utilizao de transaes.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Conceitualmente DML abrange as instrues


SELECT, INSERT, UPDATE e DELETE, porm
na documentao da Oracle, normalmente
DML se refere somente s instrues que
atualizam dados: INSERT, UPDATE e DELETE;

Uma ou N instrues DML constituem uma


transao, que finalizada sempre atravs
de um COMMIT ou ROLLBACK.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
INSERT

Para inserir dados em uma tabela, utilizamos


a instruo INSERT;

Sintaxe:
INSERT INTO tabela [(coluna [,coluna ] ) ] -- lista de colunas
VALUES (valor [,valor ] );

A lista de colunas opcional, mas uma boa


prtica sempre listar todas as colunas da
tabela para facilitar o entendimento da
instruo e evitar possveis erros futuros.
www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
INSERT

Valores nulos so inseridos nas colunas no


referenciadas na instruo;

possvel inserir mltiplas linhas substituindo a


clusula VALUES por uma subquery contendo uma
instruo SELECT;

Para inserir o valor DEFAULT de colunas, quando ele


existir, basta omitir a(s) coluna(s) desejada(s) na
instruo SQL (INSERT ou UPDATE) ou incluir a
palavra-chave DEFAULT na clusula VALUES.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
INSERT Multitable

INSERTs Multitable permitem inserir dados de uma


determinada origem, em mltiplas tabelas, em uma
nica instruo SQL, ou seja, um nico INSERT
(Multitable) substitui mltiplas instrues INSERT
convencionais;

Por executar tudo em uma s instruo, mais rpido


do que mltiplos INSERTS separados;

Principais caractersticas:
No funciona atravs de dblinks;
Sequncias no podem ser usadas;
No pode exceder 999 colunas na(s) clusula(s) INTO.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
UPDATE

Para alterar dados em uma tabela, utilizamos


a instruo UPDATE;

Sintaxe:
UPDATE tabela
SET coluna = valor [, coluna = valor, ]
[WHERE condio];

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
UPDATE

Podemos alterar 1 ou N linhas por vez;

No esquea a clsula WHERE quando quiser


restringir o conjunto de linhas a serem
alteradas;

possvel utilizar subqueries como valores ou


filtros.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
MERGE
Utilize a instruo MERGE para realizar
processamento UPSERTs: INSERT ou UPDATE;

Sintaxe:
MERGE INTO tabela_destino apelido_origem
USING (tabela_origem | viso | subquery) apelido_destino
ON (condio_de_ligao)
WHEN MATCHED THEN
UPDATE SET
apelido_destino.col1 = apelido_origem.col1
WHEN NOT MATCHED THEN
INSERT (lista_colunas_tabela_destino)
VALUES (lista_colunas_tabela_origem)

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
MERGE
Substitui mltiplas instrues SQL (SELECT e INSERT +
SELECT e UPDATE) por uma nica instruo SQL, que
mais enxuta e mais rpida;

Caractersticas do MERGE:
Pode combinar mltiplas operaes: INSERT, UPDATE e DELETE;
uma instruo determinstica, ou seja, no permite atualizar a
mesma linha de uma tabela mltiplas vezes na mesma instruo;
Na maior parte dos casos mais flexvel e eficiente que as solues
tradicionais de UPSERT.
Cuidado ao utilizar sequences! Mesmo se uma condio (Ex.: NOT
MATCHED) no for alcanada, o nmero sequencial dela ser perdido!

www.fabioprado.net
janeiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
DELETE, TRUNCATE e
SELECT FOR UPDATE
DELETE

Para apagar dados de uma tabela, utilizamos


a instruo DELETE;

Sintaxe:
DELETE [FROM] tabela
[WHERE condio];

www.fabioprado.net
janeiro de 15 Aprendendo SQL 13
2014 Fbio Prado. Todos os direitos reservados.
DELETE
Podemos apagar 1 ou N linhas por vez;

No esquea a clsula WHERE quando quiser restringir


o conjunto de linhas a serem apagadas;

possvel possvel utilizar subqueries como filtros;

Quando for necessrio apagar todas as linhas de uma


tabela, se voc tem certeza de que na precisar
mais recuper-las, prefira a instruo TRUNCATE.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 14
2014 Fbio Prado. Todos os direitos reservados.
TRUNCATE

uma instruo DDL que possui as seguintes


caractersticas:
Limpa (zera) a tabela;
No transacional, ou seja, no permite desfazer a operao;
muito mais rpida que um DELETE sem clusula WHERE;
At o 11G no se aplica em tabelas que possuem FKs. No 12c,
possvel executar TRUNCATE CASCADE se a FK for tipo ON
DELETE CASCADE.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 15
2014 Fbio Prado. Todos os direitos reservados.
SELECT FOR UPDATE

Permite bloquear as linhas durante a leitura;

Libera as linhas somente aps um COMMIT ou


ROLLBACK.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 16
2014 Fbio Prado. Todos os direitos reservados.
Controle transacional
Controle transacional

Transao uma sequncia de operaes que


so tratadas como um bloco nico e indivisvel
(atmico);

As instrues de controle transacional


permitem finalizar uma transao,
efetivando-a ou desfazendo-a;

www.fabioprado.net
janeiro de 15 Aprendendo SQL 18
2014 Fbio Prado. Todos os direitos reservados.
Controle transacional
Uma transao finalizada aps uma das seguintes situaes:
Ao executar um comando COMMIT ou ROLLBACK
 COMMIT efetiva a transao;
 ROLLBACK desfaz a transao

Ao executar uma instruo DDL ou DCL:


 Ao execut-las, ocorre um commit automtico na transao existente;

Quando o usurio finaliza a sesso:


 Finalizao normal realiza COMMIT;
 Finalizao anormal realiza ROLLBACK.

Quando o sistema falha:


 Realiza ROLLBACK.

Obs.: O comando SAVEPOINT permite marcar pontos dentro de uma transao.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 19
2014 Fbio Prado. Todos os direitos reservados.
Controle transacional

Consideraes gerais sobre transaes:


Somente o usurio atual pode ver os dados da transao em
andamento;

As linhas afetadas pela transao so bloqueadas para escrita


at a sua finalizao, portanto, outros usurios s podero
consult-las;

Quando um COMMIT executado, todos os usurios podem ver


as alteraes produzidas pela transao e as linhas bloqueadas
so liberadas;

Savepoints existentes so liberados ao final da transao.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 20
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 8

Utilizando instrues DDL


Introduo

Neste captulo veremos:


Regrais gerais para criar objetos;
Criao, deleo e alterao de tabelas;
Principais tipos de dados;
Criao e manuteno de constraints, vises, sequncias,
ndices e sinnimos.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral
Ao executar instrues DDL as transaes existentes so
commitadas automaticamente. TRUNCATE uma instruo
DDL;

Instrues DDL no so transacionais;

Evite executar instrues DDL nos BDs de produo no horrio


comercial, pois elas invalidam cursores e podem causar locks
nas tabelas;

No 12c, muitas operaes de manuteno realizadas atravs de


instrues DDL no causam mais locks na tabela, portanto, no
causam impacto nas aplicaes. Exemplos: DROP INDEX
ONLINE, DROP CONSTRAINT ONLINE, ALTER INDEX [VISIBLE |
INVISIBLE].

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

Regras gerais para compor o nome de


tabelas, colunas, ndices, constraints, vises,
sequncias e sinnimos:
Deve conter at 30 caracteres;
Deve comear com uma letra;
Deve conter somente os seguintes caracteres: A-Z, a-z, 0-9, _,
$ e #;
No pode duplicar o nome de outro objeto dentro do mesmo
schema;
Pode ser case-sensitive, conter outros caracteres especiais ou
palavras reservadas do Oracle, somente quando o nome for
delimitado por aspas duplas (no recomendado);

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Tabelas
Criando Tabelas

Para criar uma tabela necessrio:


Ter o privilgio CREATE TABLE;

Possuir permisso para gravar dados em um determinado tablespace;

Especificar no mnimo, o nome da tabela e das colunas, tipo de dado e


tamanho da coluna (quando o tipo de dado exigir);

Especificar um valor default (com o mesmo tipo de dado) para as colunas, se


for necessrio:
 Valores permitidos: literais, expresso ou funes SQL.
 Valores no permitidos: nomes de colunas ou pseudocolunas

Sintaxe:
CREATE TABLE [schema].tabela
(coluna tipo_dado [DEFAULT expresso] [, ]);

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
Principais tipos de dados
Tipo de dado Descrio
VARCHAR2 Caracteres de tamanho varivel com tamanho at 4000 (at 11G) ou 32767 (somente

(tamanho) 12c).

CHAR (tamanho) Caracteres de tamanho fixo com tamanho at 2000. Tamanho no utilizado
preenchido com espaos em branco.

NUMBER (p, s) Nmeros de tamanho varivel com at 38 dgitos de preciso, onde p representa a
preciso (tamanho total) e s a escala (qtde. de decimais). P e S so opcionais.

DATE Data contendo ano, ms, dia, horas, minutos e segundos.

LONG Caracteres de tamanho varivel at 2 GB. No utilizar mais, pois foi substitudo
pelo CLOB. Oracle permite somente 1 coluna deste tipo por tabela.

CLOB Caracteres de tamanho varivel (entre 8 TB e 128 TB).

RAW e LONG RAW Dados binrios.

BLOB Dados binrios de tamanho varivel (entre 8 TB e 128 TB).

BFILE Dados binrios armazenados em arquivos externos (at 4 GB)

Referncia: (http://docs.oracle.com/cd/B28359_01/server.111/b28320/limits001.htm)

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Constraints

Crie constraints nas tabelas para:


Aplicar regras de negcio e impor restries ao inserir/atualizar dados;

Prevenir a deleo de dados se existirem dependncias.

Tipos de constraints vlidas:


NOT NULL: No permite valores nulos;

UNIQUE: Permite somente valores nicos;

PRIMARY KEY: Valor identificador de cada linha da tabela. Permite


somente valores nicos e no permite valores nulos;

FOREIGN KEY: Valor identificador de um relacionamento com a PK da


tabela pai;

CHECK: Expresso para validar/restringir valor de entrada.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
Constraints

Consideraes gerais:
Podem ser nomeadas explicitamente ou Oracle gera
implicitamente um nome contendo SYS_ + string aleatria;
Podem ser criadas junto com a tabela ou depois de sua criao;
Podem ser criadas no nvel de coluna ou da tabela.

Sintaxe:
CREATE TABLE [schema].tabela
(coluna tipo_dado [DEFAULT expresso]
[coluna_constraint],

[tabela_constraint] [,]);

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
Constraints

Criando constraint no nvel da tabela:


CREATE TABLE [schema].tabela
(coluna tipo_dado [DEFAULT expresso]
[coluna_constraint],

[tabela_constraint] [,]);

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
Alterando tabelas

Podemos utilizar o comando ALTER TABLE


para:
Colocar a tabela em modo somente leitura ou leitura/escrita;

Adicionar/modificar/remover/renomear colunas;

Adicionar/remover constraints;
Adicionar colunas invisveis (somente 12c);

Renomear a tabela.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 12
2014 Fbio Prado. Todos os direitos reservados.
Apagando tabelas

Uma tabela pode ser apagada em 2 modos (a


partir do 10G):
Tabela sendo movida para a lixeira (recycle bin);

Tabela apagada definitivamente (sem ir para a lixeira).

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 13
2014 Fbio Prado. Todos os direitos reservados.
Vises
Vises

Uma viso um objeto que cria um novo ponto de


acesso a uma ou mais colunas de uma ou mais
tabelas;

So classificadas em 2 tipos:
Simples:
 Acessa 1 tabela;
 No contm funes e nem agrupamentos de dados;
 Permite atualizaes.

Complexa:
 Acessa 1 ou mais tabelas;
 Pode conter funes e agrupamentos de dados;
 Nem sempre permite atualizaes. Uma tcnica muito pouco utilizada (no
recomendada), utilizar triggers INSTEAD OF para permitir atualizaes em
vises complexas.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 15
2014 Fbio Prado. Todos os direitos reservados.
Vises

Vantagens:
Encapsulamento de dados;
Restringe acesso a dados no autorizados;
Facilita o gerenciamento de acesso aos dados;
Permite simplificar a escrita de queries complexas.

Sintaxe:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW nome
[(alias [, alias] )]
AS
subquery
[ WITH CHECK OPTION [CONSTRAINT constraint] ]
[ WITH READ ONLY [CONSTRAINT constraint] ];
www.fabioprado.net
fevereiro de 15 Aprendendo SQL 16
2014 Fbio Prado. Todos os direitos reservados.
Vises

Utilize a clusula WITH CHECK OPTION para


restringir DML ao escopo de dados da viso;

Utilize a clusula WITH READ ONLY para


impedir DML na viso;

Para apagar uma viso, execute a instruo


SQL abaixo:
DROP VIEW nome_visao;

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 17
2014 Fbio Prado. Todos os direitos reservados.
Sequncias
Sequncias
Uma sequncia um objeto que permite gerar
nmeros nicos que normalmente so utilizados como
valores de PKs;

No 12c, sequncias podem ser implementadas como


valor default de colunas. As colunas do tipo IDENTITY
(novas no 12c) implementam internamente sequncias
com valor default;

Caractersticas principais de uma sequncia:


Automaticamente geram nmeros nicos;
Valor inicial e final so pr-definidos;
Valor incremental pode ser customizado;
Valores podem ser reciclados e/ou colocados em cache para otimizar o
acesso.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 19
2014 Fbio Prado. Todos os direitos reservados.
Sequncias

Sintaxe:
CREATE SEQUENCE nome_sequencia
[INCREMENT BY n]
[START WITH n]
[ {MAXVALUE n | NOMAXVALUE} ]
[ {MINVALUE n | NOMINVALUE} ]
[ {CYCLE | NOCYCLE} ]
[ {CACHE n | NOCACHE} ];

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 20
2014 Fbio Prado. Todos os direitos reservados.
Sequncias

Pseudocolunas NEXTVAL e CURRVAL:


NEXTVAL:
 Retorna o prximo valor de uma sequncia;
 Retorna valores nicos mesmo se ela for chamada por usurios
diferentes;
CURRVAL:
 Retorna o valor atual de uma sequncia;
 O usurio tem que chamar NEXTVAL previamente.

Para verificar o ltimo valor de uma sequncia,


recomenda-se consultar a coluna LAST_NUMBER
da viso do DD ALL_SEQUENCES.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 21
2014 Fbio Prado. Todos os direitos reservados.
Sequncias

Sequncias com valor em cache so acessadas


muito rapidamente. Para mais detalhes,
consulte no blog FABIOPRADO.NET o artigo
Cache em Oracle Sequences;

GAPs podem ocorrer ao utilizar sequences, nas


seguintes situaes:
Ao executar ROLLBACK;
Quando o sistema falhar;
Se a sequncia for chamada indevidamente;
Se o BD for reiniciado (este item pode ser contornado).

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 22
2014 Fbio Prado. Todos os direitos reservados.
Sequncias

Para modificar uma sequncia:


Execute o comando ALTER SEQUENCE .;
O valor atual o nico parmetro que no pode ser modificado;
Usurio deve ser o dono da sequncia ou ter o privilgio ALTER
SEQUENCE.

Para apagar uma sequncia, execute o


comando:
DROP SEQUENCE nome_sequencia;

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 23
2014 Fbio Prado. Todos os direitos reservados.
NDICES
ndices

O ndice de um livro

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 25
2014 Fbio Prado. Todos os direitos reservados.
ndices

Podem ser de 4 tipos:


B-tree (normal):
 Utilizado para otimizar alta cardinalidade.

Bitmap:
 Utilizado para otimizar baixa cardinalidade.

Function Based:
 Utilizado para otimizar consultas que utilizam funes.

Domain Indexes:
 ndices mais complexos para atender situaes especiais, tais
como: grandes pesquisas textuais ou pesquisas de dados
geogrficos.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 26
2014 Fbio Prado. Todos os direitos reservados.
ndices
ndices so objetos que servem para otimizar o acesso
aos dados de uma tabela;
A indexao feita no nvel de coluna(s) e sua
manuteno realizada automaticamente pelo
Oracle Database;

Otimizam consultas, mas degradam as atualizaes.


Cada ndice criado em uma tabela degrada em mdia
3X cada atualizao (INSERT, UPDATE, DELETE ou
MERGE);

No 12c, podemos criar mais de 1 ndice na mesma


coluna, mas somente 1 deles deve estar visvel.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 27
2014 Fbio Prado. Todos os direitos reservados.
ndices

Podem ser criados de 2 formas:


Automaticamente:
 O Oracle cria ndices automaticamente para toda PK e UK.
Manualmente:
 Usurio pode criar ndices nas colunas desejadas.

Devem ser criados principalmente:


Nas colunas utilizadas em filtros ou ligaes de consultas
frequentes;
Tabelas grandes (em tabelas pequenas normalmente eles so ignorados);

Quando a consulta retorna poucas linhas ou quando poucas


linhas so ligadas.

www.fabioprado.net
fevereiro de 15 Aprendendo SQL 28
2014 Fbio Prado. Todos os direitos reservados.
SINNIMOS
Sinnimos

Sinnimos so objetos que simplificam o acesso a


outros objetos do Banco de Dados, tais como:
Tabelas, sequncias, vises, procedures, funes e packages;

Permitem criar referncias locais a objetos de outros


usurios;

Podem ser pblicos ou privados;

O usurio que est criando o sinnimo deve ter


privilgios de acesso aos objetos que esto sendo
referenciados.
www.fabioprado.net
fevereiro de 15 Aprendendo SQL 30
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 9

Utilizando instrues DCL


Introduo

Neste captulo veremos:


Viso geral das instrues DCL;
Conceitos e gerenciamento de privilgios de sistema e de
objetos;
Conceitos e gerenciamento de roles;
Como consultar privilgios de sistema, objetos e roles.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Viso geral

O controle de acesso uma das tarefas do


DBA e pode ser realizado por meio da
concesso (GRANT) ou revogao (REVOKE)
de:

Privilgios de sistema;

Privilgios de objetos;

Roles.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Privilgios de sistema
Permitem realizar determinadas aes dentro do
Banco de Dados, tais como: criar, alterar e apagar
usurios e objetos;

So concedidos ou revogados por usurios com


privilgios administrativos (DBAs);

Existem mais de 100 privilgios de sistema


disponveis;

Privilgios de sistema mais comuns que devem ser


concedidos a um desenvolvedor: CREATE SESSION,
CREATE TABLE, CREATE SEQUENCE, CREATE VIEW e
CREATE PROCEDURE.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Privilgios de objeto

Atuam sobre os objetos do Banco de Dados,


concedendo ou revogando privilgios que
permitem acessar/atualizar dados;

So concedidos por usurios com privilgios


administrativos ou pelos donos dos objetos;

Privilgios de objeto existentes: INSERT,


SELECT, UPDATE, DELETE, ALTER , INDEX e
REFERENCES.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Roles e consultas de
privilgios
Roles

Roles contm grupos de privilgios que podem


ser atribudos aos usurios para facilitar o
gerenciamento de privilgios;

Existem muitas roles pr-definidas no Oracle


Database que podem facilitar a atribuio de
privilgios para usurios que necessitam de
privilgios para executar tarefas especficas,
como por exemplo, a role DBA;

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Roles

Roles podem conter, alm de privilgios,


outras roles;

Roles podem conter senhas, que exigem que o


usurio fornea-a antes de receber os seus
privilgios. Somente a partir do 11G,
obrigatrio o fornecimento desta senha (atravs
de uma instruo SQL).

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
Roles

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
Consultando privilgios

Viso do DD Descrio
ROLE_SYS_PRIVS Privilgios de sistema concedidos s roles
ROLE_TAB_PRIVS Privilgios de tabelas concedidos s roles

USER_ROLE_PRIVS Roles acessveis pelo usurio logado


USER_SYS_PRIVS Privilgios de sistema concedidos ao usurio logado.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Captulo 10

Consultando vises do
Dicionrio de Dados
Viso geral

Neste captulo veremos:


O que o Dicionrio de Dados;
Como pesquisar vises do Dicionrio de Dados para obter
informaes sobre objetos do BD;
Como adicionar comentrios em tabelas e como consultar estes
comentrios.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
O que o Dicionrio de Dados?

O Dicionrio de Dados (DD) um conjunto de


objetos que possui os metadados de todo o
BD;

Seus objetos residem no schema SYS e


tablespace SYSTEM;

composto basicamente de tabelas base e


vises acessveis pelos usurios.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Vises do DD

Prefixo Descrio

USER Permite visualizar objetos que so de


propriedade do usurio logado
ALL Permite visualizar objetos que so de
propriedade do usurio logado + objetos de
outros usurios que ele pode acessar
DBA Permite visualizar todos os objetos do BD

V$ Dados dinmicos relacionados performance

www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Consultando as vises do DD

A viso DICTIONARY contm o nome e


descrio de todas as tabelas e vises do DD;

Se voc quer visualizar objetos do seu


prprio schema consulte as vises USER_ ou
consulte ALL_, filtrando dados pela coluna
OWNER;

Somente se voc tiver privilgios de DBA,


consulte as vises DBA_.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Adicionando comentrios

Adicione comentrios nas tabelas e colunas


para permitir um entendimento mais fcil do
modelo de dados.

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
FIM
Aprendendo SQL

Fbio Prado

www.fabioprado.net
www.fabioprado.net
Final
Dicas finais
Aqueles que desejam aprender mais sobre SQL,
recomendo a leitura dos seguintes itens:
Guia Oracle Database SQL Language Reference 11g Release 2 (11.2) E41084-02
Guia Oracle Database SQL Language Reference 12c Release 1 (12.1) E17209-14
Artigos sobre SQL e SQL/Tuning do Blog FABIOPRADO.NET

Para obter mais informaes sobre as certificaes da


Oracle, acesse o site Oracle Certification;

Recomendo fortemente estudar algum simulado ou livro


voltado para a certificao, das empresas abaixo, antes
de fazer o exame desejado:
Kaplan SelfTest
Sybex
Oracle Press

www.fabioprado.net
janeiro de 15 Aprendendo SQL 3
2014 Fbio Prado. Todos os direitos reservados.
Livros indicados

www.fabioprado.net
janeiro de 15 Aprendendo SQL 4
2014 Fbio Prado. Todos os direitos reservados.
Dump X Simulado

Dumps ou Braindumps so ilegais e de baixa


qualidade;

Simulados so preparados por empresas


srias e contm explicaes precisas sobre as
questes.

Para descobrir se um determinado material


dump ou simulado, faa uma pesquisa no
site:
http://www.certguard.com/Search.asp

www.fabioprado.net
janeiro de 15 Aprendendo SQL 5
2014 Fbio Prado. Todos os direitos reservados.
Dump X Simulado

www.fabioprado.net
janeiro de 15 Aprendendo SQL 6
2014 Fbio Prado. Todos os direitos reservados.
Dump X Simulado

www.fabioprado.net
janeiro de 15 Aprendendo SQL 7
2014 Fbio Prado. Todos os direitos reservados.
Blog
Acompanhe os artigos do blog FABIOPRADO.NET em:
http://www.fabioprado.net

www.fabioprado.net
janeiro de 15 Aprendendo SQL 8
2014 Fbio Prado. Todos os direitos reservados.
Facebook

CURTA a pgina do blog FABIOPRADO.NET no


FACEBOOK para acompanhar:
Novidades e notcias do blog;

Novidades e notcias sobre Bancos de Dados e TI, em geral;

Oportunidades de emprego.

http://www.facebook.com/DBAFabioPrado

www.fabioprado.net
janeiro de 15 Aprendendo SQL 9
2014 Fbio Prado. Todos os direitos reservados.
Twitter

SIGA o twitter do DBA FABIOPRADO.NET para


acompanhar:
Novidades e notcias do blog;

Novidades e notcias sobre Bancos de Dados e TI, em geral;

Oportunidades de emprego.

http://twitter.com/dbafabioprado

www.fabioprado.net
janeiro de 15 Aprendendo SQL 10
2014 Fbio Prado. Todos os direitos reservados.
YouTube
Inscreva-se no canal do YouTube do DBA/Instrutor Fbio
Prado para ver dicas gerais sobre Bancos de Dados, TI e
carreira:

https://www.youtube.com/user/fbifabio10

www.fabioprado.net
janeiro de 15 Aprendendo SQL 11
2014 Fbio Prado. Todos os direitos reservados.
LinkedIn
Se voc gostou do treinamento, POR FAVOR, deixe uma recomendao no perfil
do Fbio Prado no LinkedIn:

www.fabioprado.net
janeiro de 15 Aprendendo SQL 12
2014 Fbio Prado. Todos os direitos reservados.
Referncias
- Blog do DBA/Instrutor FABIOPRADO

- Oracle Certification

- Oracle Database SQL Language Reference 11g Release 2 (11.2)


E41084-02

- Oracle Database SQL Language Reference 12c Release 1 (12.1)


E17209-14

www.fabioprado.net
janeiro de 15 Aprendendo SQL 13
2014 Fbio Prado. Todos os direitos reservados.