Академический Документы
Профессиональный Документы
Культура Документы
DML 3
DDL 3
TCL 3
Controle de Sesso 3
Controle de Sistema 4
Resumo dos principais comandos 4
Instruo SELECT 7
A tabela DUAL 8
Uso do WHERE para limitar os resultados de uma consulta. 8
ANY e SOME 8
ALL 9
IN e NOT IN 9
BETWEEN 9
EXISTS 10
IS NULL e IS NOT NULL 10
LIKE 11
Ordenao de linhas 11
Uso de expresses no SELECT 12
Expresso CASE 13
Exerccios 14
DML
usada para acessar, criar, modificar ou excluir dados nas estruturas existentes do banco
de dados.
As instrues DML incluem instrues para consultar informaes (SELECT), adicionar
novas linhas (INSERT), modificar linhas existentes (UPDATE), excluir linhas existentes
(DELETE), executar uma operao de atualizao ou insero condicional (MERGE), ver
um plano de execuo de SQL (EXPLAIN PLAN) e bloquear uma tabela para restringir o
acesso (LOCK TABLE). Incluir a instruo SELECT no grupo DML discutvel dentro da
comunidade SQL, uma vez que SELECT no modifica os dados.
DDL
Usado para definir, alterar ou descartar objetos de banco de dados e seus privilgios.
As instrues DDL incluem instrues para criar, modificar, descartar ou renomear objetos
(CREATE, ALTER, DROP, RENAME), remover todas as linhas de um objeto de banco de
dados sem perder a estrutura (TRUNCATE), gerenciar privilgios de acesso (GRANT,
REVOKE) , para auditoria de banco de dados (AUDIT, NOAUDIT) e adicionar uma
descrio sobre um objeto ao dicionrio (COMMENT).
TCL
Usado para agrupar um conjunto de instrues DML numa nica transao. Usando essas
instrues, voc pode salvar as alteraes (COMMIT) ou descartar as alteraes
(ROLLBACK) feitas por instrues DML. Tambm includas nas instrues de controle de
transao so declaraes para definir um ponto ou marcador na transao para possvel
reverso (SAVEPOINT) e definir as propriedades para a transao (SET TRANSACTION).
Controle de Sesso
Usado para controlar as propriedades de uma sesso de usurio. (Uma sesso o ponto a
partir do qual voc est conectado ao banco de dados at voc se desconectar.)
Declaraes de controle de sesso incluem aquelas para controlar as propriedades da
sesso (ALTER SESSION) e para ativar / desativar r oles(SET ROLE).
Controle de Sistema
Usado para gerenciar as propriedades do banco de dados. Existe apenas uma instruo
nesta categoria (ALTER SYSTEM).
Resumo Geral
Category Datatypes
Character CHAR, NCHAR, VARCHAR2, NVARCHAR2
Number NUMBER, FLOAT, BINARY_FLOAT, BINARY_DOUBLE
Long and raw LONG, LONG RAW, RAW
Date and time DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE,
TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL YEAR
TO MONTH, INTERVAL DAY TO SECOND
Large object CLOB, NCLOB, BLOB, BFILE
Row ID ROWID, UROWID
O tipo de dados NUMBER armazena nmeros com uma preciso de <p> dgitos e uma
escala de <s> dgitos. Pode ser usado para armazenar nmeros inteiros, nmeros de ponto
fixo e nmeros de ponto flutuante.
A faixa de valores para a preciso <p> pode ser 1 a 38 e a para a escala <s> , -84 e 127.
A escala arredonda o valor aps o ponto decimal para <s> dgitos. Se voc definir uma
coluna como NUMBER (5,2), o intervalo de valores que voc pode armazenar nesta coluna
de -999,99 a 999,99; Ou seja, 5 - 2 = 3 para a parte inteira, e a parte decimal
arredondada para dois dgitos. Mesmo se voc no incluir a parte decimal para o valor
inserido, o nmero mximo que voc pode armazenar em uma definio NUMBER (5,2)
999.
A Oracle redonda nmeros inseridos em colunas numricas com uma escala menor que o
nmero inserido. Por exemplo, se uma coluna foi definida como NUMBER (4,2) e voc
especificou um valor de 12,125 para entrar nessa coluna, o nmero resultante seria
arredondado para 12,13 antes de ser inserido na coluna. Se o valor excede a preciso, no
entanto, um erro do Oracle retornado. Por exemplo, voc no pode inserir 123.1 em uma
coluna definida como NUMBER (4,2).
Se voc especificar uma escala maior que o valor de preciso, a preciso define o nmero
mximo de dgitos direita do ponto decimal aps os zeros. Por exemplo, se uma coluna
definida como NUMBER (3,5), o intervalo de valores que voc pode armazenar de
-0,00999 a 0,00999; Ou seja, ele requer dois zeros (<s> - <p>) aps o ponto decimal e
arredonda a parte decimal para trs dgitos (<p>) aps zeros. A Tabela a seguir mostra
vrios exemplos de como os dados numricos so armazenados com vrias definies.
DATE
A funo TO_DATE usada para inserir valores do tipo DATE. Um DATE exibido na tela
seguinte formatao, DD-MON-YY.
Experimente:
TIMESTAMP [<PRECISION>]
Experimente:
SELECT SYSTIMESTAMP AS "Data e hora de Hoje" FROM DUAL;
Exemplo de uso Operador de concatenao
Literais so valores que representam um valor fixo (constante). Existem quatro tipos de
literais:
Text (or character)
Numeric (integer and number)
Datetime
Interval
Instruo SELECT
-- Com Alias
SELECT job_title AS Title, min_salary AS "Minimum Salary"
FROM hr.jobs;
-- Tuplas nicas
SELECT DISTINCT department_id
FROM hr.employees;
A tabela DUAL
A tabela DUAL uma tabela fictcia disponvel para todos os usurios no banco de dados.
Tem uma coluna e uma linha. A tabela DUAL usada para selecionar variveis do sistema
ou para avaliar uma expresso. Aqui esto alguns exemplos.
ANY e SOME
Voc pode usar o operador ANY ou SOME para comparar um valor com cada valor em uma
lista ou subconsulta. Os operadores ANY e SOME sempre devem ser precedidos por um
dos seguintes operadores: =,! =, <,>, <=, ou > =.
Voc pode usar o operador ALL para comparar um valor com cada valor em uma lista ou
subconsulta.
IN e NOT IN
ertencer.
Voc pode usar os operadores IN e NOT IN para testar uma condio de p
BETWEEN
EXISTS
Para localizar os valores NULL ou valores NOT NULL, voc precisar usar o operador IS
NULL. O operador = ou != No funcionar com valores NULL.
LIKE
Obtm os funcionrios cujo nome comea por 'Su' e o sobrenome no comea por 'S':
Ordenao de linhas
Correo:
A clusula ORDER BY no pode ter mais de 255 colunas ou expresses. Alis, esse
nmero, 255, aparece como limitao em outras clusulas do SQL.
Expresso CASE
CASE <expression>
WHEN <compare value> THEN <return value> ... ... ...
[ELSE <return value>]
END
1. EMPLOYEE SALARY
2. EMPLOYEE_SALARY
3. Employee Salary
4. employee_salary
1. 10
2. ename
3. Employee Name:
4. ||
3) Quando voc tenta salvar 34567.2255 em uma coluna definida como NUMBER (7,2),
qual valor realmente salvo?
1. 34567.00
2. 34567.23
3. 34567.22
4. 3456.22
5) Qual instruo procura por valores de PRODUCT_ID que comeam com DI_ da tabela
ORDERS?
Qual ser o valor na primeira linha do conjunto de resultados quando a seguinte consulta for
executada?
SELECT hire_date FROM employee
ORDER BY salary, emp_name;
1. 02-APR-91
2. 17-DEC-90
3. 28-SEP-91
4. A consulta invlida, porque voc no pode ter uma coluna na clusula ORDER BY
que no faz parte da clusula SELECT.
7) Ao fazer correspondncia de padres usando o operador LIKE, qual caractere usado
como o caractere de escape padro por Oracle?
1. |
2. /
3. \
4. No existe nenhum caractere de escape padro no Oracle.
5.
Funes De Uma Linha (Single-Row functions) Oracle
O Oracle dispe de diversas funes que podem ser incorporadas no SQL e no PL/SQL.
Estas funes podem ser usadas em clusulas SELECT, WHERE e ORDER BY. Por
exemplo, a consulta a seguir inclui as funes de uma linha (single-row functions),
TO_CHAR, UPPER e SOUNDEX:
As funes de uma linha tambm podem aparecer em outros tipos de instrues, como a
clusula SET de uma instruo UPDATE, a clusula VALUES de uma instruo INSERT e a
clusula WHERE de uma instruo DELETE.
NVL
A funo NVL usada para substituir um valor NULL por um valor literal. NVL leva dois
argumentos. Se o primeiro argumento for NULL, ento retorna o segundo argumento.
Por exemplo, suponha que voc precise calcular a remunerao total na tabela
EMPLOYEES, que contm colunas SALARY e COMMISSION_PCT
Voc pode usar a funo NVL para substituir um zero no lugar de qualquer NULL que voc
encontrar, como neste exemplo:
NVL2
A funo NVL2 uma variao de NVL. NVL2 tem trs argumentos, NVL2 (x1, x2, x3), onde
x1, x2 e x3 so expresses. NVL2 retorna x2 se x1 no for NULL e x3 quando x1 for NULL.
Para o exemplo apresentado na seo anterior, voc tambm pode usar a funo NVL2 e
escrever o cdigo um pouco diferente:
COALESCE
Como voc pode ver no exemplo, usando a funo COALESCE ajuda a evitar escrever
vrias condies IF ... THEN. Voc poderia escrever o mesmo SQL usando a instruo
CASE que voc aprendeu no Captulo 1 da seguinte maneira (s que mais trabalho):
Tente usar WHEN salary IS NULL na terceira condio na instruo CASE (em vez da
primeira condio) e tente ver alguma diferena no resultado.
Funo Descrio
ASCII Retorna o equivalente decimal ASCII de um caractere.
CHR Retorna o caractere dado o equivalente decimal.
CONCAT Concatena duas cadeias; Mesmo que o operador ||.
INITCAP Retorna a string com a primeira letra de cada palavra em letras
maisculas.
INSTR Localiza a posio inicial numrica de uma string dentro de uma
string.
INSTRB O mesmo que INSTR mas conta bytes em vez de caracteres.
LENGTH Retorna o comprimento de uma string em caracteres.
LENGTHB Retorna o comprimento de uma string em bytes
LOWER Converte uma string em minsculas.
LPAD Preenche a esquerda de uma string com caractere especificado.
LTRIM Tira os caracteres de espao no incio de uma string.
REPLACE Realiza pesquisa de substring e substitui.
RPAD Anlogo ao LPAD, s que preenche direita da string.
RTRIM Tira os caracteres direita de uma seqncia de caracteres.
SOUNDEX Retorna uma representao fontica de uma string.
SUBSTR Retorna uma substring
SUBSTRB Retorna uma substring usando posies dos bytes.
TRANSLATE Executa a pesquisa e substituio de caracteres.
TRIM Realiza o LTRIM e RTRIM ao mesmo tempo.
UPPER transforma a string para caixa-alta.
Funes Numricas.
Funes de Datas
SYSDATE
The value is returned in a DATE datatype. The format that the value returned is based on
NLS_DATE_FORMAT, which can be altered for the session using the ALTER SESSION
SET NLS_DATE_FORMAT command.
SYSTIMESTAMP
Anlogo ao SYSDATE.
ADD_MONTHS
ADD_MONTHS (d, i) leva dois argumentos, onde d uma data e i um inteiro. Essa funo
retorna a data d mais i meses. Se i um nmero decimal, o banco de dados implicitamente
converte-lo para um nmero inteiro, truncando a parte decimal (por exemplo, 3.9 torna-se
3).
SELECT SYSDATE, ADD_MONTHS(SYSDATE, -1) PREV_MONTH,
ADD_MONTHS(SYSDATE, 12) NEXT_YEAR
FROM dual;
EXTRACT
Embora HOUR, MINUTE e SECOND existam no tipo de dados DATE, voc pode extrair
apenas YEAR, MONTH e DAY a partir das expresses do tipo DATE (?).
Voc pode extrair YEAR, MONTH, DAY, HOUR, MINUTE, e SECOND da expresso de tipo
de dados TIMESTAMP.
SELECT LOCALTIMESTAMP1 ,
EXTRACT(YEAR FROM LOCALTIMESTAMP) YEAR_TS,
EXTRACT(DAY FROM LOCALTIMESTAMP) DAY_TS,
EXTRACT(SECOND FROM LOCALTIMESTAMP) SECOND_TS
FROM dual;
1
LOCALTIMESTAMP, data e hora no fuso-horrio do usurio logado.
Agrupando dados com GROUP BY
Como o nome indica, as funes de grupo funcionam em dados agrupados. Voc diz ao
banco de dados como agrupar ou categorizar os dados com uma clusula GROUP BY.
Sempre que voc usar uma funo de grupo na clusula SELECT, voc deve colocar todas
as colunas no-agregadas / no-constantes na clusula GROUP BY.
Como voc usou uma funo agregada e uma coluna no agregada, o Oracle deu um erro
e est dizendo para agrupar os dados. Se voc incluir uma funo de grupo na clusula
SELECT, voc no poder selecionar resultados individuais a menos que se use a clusula
GROUP BY. Certifique-se de que todas as colunas na clusula SELECT que no foram
passadas na funo de grupo esto includas na clusula GROUP BY. Em outras palavras,
a coluna department_id no-agregada.
Se voc deseja que as linhas sejam organizadas na ordem do nmero de funcionrios, voc
pode especificar a funo de agregao na clusula ORDER BY ou usar a posio da
coluna, como exemplificado a seguir.
Ou
A consulta a seguir produz um erro, pois GROUP BY no admite nem aliases nem p
osio
de coluna.
AVG - Esta funo tem a sintaxe AVG ([{DISTINCT | ALL}] n), onde n uma expresso
numrica. A funo AVG devolve a mdia da expresso n.
No exemplo abaixo, a expresso ser avaliada em primeiro lugar, e seu resultado ser
utilizado para calcular a mdia.
COUNT - Esta funo tem a sintaxe COUNT ({* | [DISTINCT | ALL] <x>}), onde x uma
expresso. A funo COUNT retorna o nmero de linhas na consulta. Se uma expresso
dada e nem DISTINCT nem ALL especificado, o padro ALL.
O prximo exemplo analisa o total de funcionrios que compem uma comisso, bem como
o total distinto de comisses. Voc pode ver que 35 de 107 empregados recebem uma
comisso e que existem 7 nveis diferentes de comisso em uso.
SELECT COUNT(*),
COUNT(commission_pct) comm_count,
COUNT(DISTINCT commission_pct) distinct_comm
FROM hr.employees;
Dica: COUNT a nica funo agregada que no retorna NULL quando os dados so todos
NULL. Nestes casos, COUNT retorna 0.
MAX e MIN
A sintaxe MAX ([{DISTINCT | ALL}] <x>), onde x uma expresso. Esta funo retorna o
valor mais alto na expresso x. X pode ser um valor de data / hora, numrico ou de
caractere. Embora a incluso de DISTINCT ou ALL seja sintaticamente aceitvel, a sua
utilizao no afeta o clculo da funo MAX; O maior valor distinto o mesmo que o maior
de todos os valores.
Tudo que foi escrito sobre MAX se aplica de forma anloga para MIN, a diferena que
MIN retorna o menor valor.
SELECT MAX(hire_date),
MAX(salary),
MAX(last_name)
FROM hr.employees;
SELECT MIN(hire_date),
MIN(salary),
MIN(last_name)
FROM hr.employees;
SELECT job_id, MIN(hire_date) oldest, MIN(salary) low_sal,
MAX(salary) high_sal
FROM hr.employees
WHERE job_id like '%CLERK'
GROUP BY job_id;
SUM - Esta funo tem a sintaxe SUM ([{DISTINCT | ALL}] <x>), onde x uma expresso
numrica. Esta funo retorna a soma da expresso x.
Neste exemplo, a soma e a mdia de todos os salrios agrupado por cdigo de rea de
telefone.
Uma instruo SELECT inclui uma clusula HAVING para filtrar os dados agrupados. Por
exemplo, se voc quiser consultar o salrio total por departamento, excluindo o
departamento 50 e retornar apenas as linhas com mais de 10.000 na coluna de salrio total,
voc teria problemas com a seguinte consulta:
O banco de dados no sabe qual a soma quando extrai as linhas da tabela - lembre-se de
que o agrupamento feito depois que todas as linhas foram buscadas. Voc recebe uma
exceo ao tentar usar SUM na clusula WHERE.