Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem SQL
Habilidades ao final da unidade Construir consultas bsicas Utilizar operadores e funes
Comando SELECT
O comando SELECT formado pelas clusulas SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, START WITH...CONNECT BY, FOR UPDATE e NOWAIT. Estas clusulas permitem recuperar dados de uma ou mais tabelas ou vises, especificar uma ou mais condies, ordenar ou computar dados por grupos de linhas, etc. Utilizao:
recuperaco de dados de um banco de dados como parte do comando de insero como parte do comando atualizao
Comando
SELECT
Sintaxe:
SELECT [ALL | DISTINCT] colunas [FROM tabelas | vises | snapshots | subconsultas, ...] [WHERE clusula] [START WITH clusula [CONNECT BY clusula]] [GROUP BY clusula [HAVING clusula]] [ORDER BY clusula] [FOR UPDATE clusula [NOWAIT]]
A Clusula FROM
A clusula FROM utilizada para selecionar as tabelas ou vises que contm as colunas includas na lista de colunas da clusula SELECT e da clusula WHERE obrigatria em comandos SELECT que envolvem dados de tabelas ou vises
SELECT nome_da_coluna [, nome_da_coluna ...] FROM nome_da_tabela, [nome_da_tabela ...]
select nome_de_coluna [operador_aritmtico constante_nmerica | nome_de_coluna ...] from nome_de_tabela select nome, preco * 1.25 preco_aumentado from produtos;
Valores Nulos
Nulo a ausncia de valor para uma coluna (indisponvel, no atribudo, desconhecido ou inaplicvel)
select rua, numero, complemento from enderecos; RUA -----------------------------R. Silveira Ramos Av. Silva S R. Rivaldo Moreira NUMERO COMPLEMENTO ------ ---------------120 1200 Fundos NULL 12
Definindo o novo nome entre aspas possvel utilizar palavras reservadas, espaos, etc.
select nome Nome do Cliente, data_nascimento as aniversario from clientes;
A Clusula WHERE
A clusula WHERE especifica critrios para determinar o conjunto de linhas a ser recuperado (seleo)
select colunas from tabelas where condies select nome from clientes where nome like 'A%'; select * from clientes where rownum < 10;
Textos e Datas
Textos e datas sempre devem ser colocados entre aspas simples (') A comparao de textos diferencia maisculas e minsculas As datas suportam diferentes formatos de representao
Expresses de Intervalos:
BETWEEN AND
Valores Nulos:
IS [NOT] NULL
Operador IN
utilizado como o operador de conjuntos pertence
select * from enderecos where cod_cidade in (12, 45, 61);
Operador LIKE
Utilizado para comparaes de textos por similaridade %: representa qualquer seqncia de caracteres _: representa um nico caracter
Select * from usuarios where nome like 'M_ri_ da Silva %'
Operador LIKE
Muito cuidado ao utilizar o operador LIKE Se forem utilizados os caracteres % e _ no nicio do texto, no sero utilizados ndices na consulta
Exemplos
Seleo de linhas utilizando operadores de comparao na clusula WHERE
Operadores de comparao between in like is [not] null
Conectivos Lgicos
Os conectivos lgicos AND e OR representam a unio de duas condies.
AND
retorna um resultado quando todas as condies so verdadeiras
OR
retorna um resultado quando uma das condies verdadeira
Exemplos
select * from usuarios where nome like 'Carlos%' and email like '%@dell.com' select * from produtos where importado='s' or preco > 3000; select * from telefones where cod_tipo_telefone not in (1,5,8)
A Clusula ORDER BY
A clusula ORDER BY ordena os resultados de consultas baseado em uma ou mais colunas. A ordem pode ser crescente (ASC) ou decrescente (DESC) Caso no seja especificada ordem assume-se ASC, por padro
Exemplo
select * order by select * order by numero from clientes cod_cliente asc; from enderecos cod_cidade, cep desc, rua desc,
Exerccio 1
1. Listar os dados de todos os produtos 2. Listar o CPF e o nome dos clientes 3. Listar uma nica vez o cdigo de todas as cidades onde residir algum cliente 4. Listar os dados dos produtos que tenham a palavra 'SOCIAL' no nome 5. Listar o nome dos 50 primeiros produtos sem descrio, na ordem decrescente de preo e crescente de nome 6. Listar o nome de todos os clientes nascidos a partir de 1980 7. Listar o preco dos produtos da categoria cujo cdigo 9 com um aumento de 20%
A Tabela DUAL
A tabela DUAL uma tabela dummy Ela contm somente uma coluna chamada dummy e apenas uma linha que contm o valor 'X' Ela utilizada sempre que se deseja retornar uma nica linha em uma consulta
Exemplos
select * from dual; select 'teste' texto_fixo from dual; select sysdate from dual;
Datas
Datas so armazenadas internamente como:
Sculo, ano, ms, dia, hora, minuto e segundo
Podem ser utilizados diversos formatos para as datas SYSDATE a funo que retorna a data e hora atuais
Funes
Funes sobre linhas
Operam sobre cada linha do resultado individualmente
Funes Numricas
ABS(n), ACOS(n), ASIN(n), ATAN(n), ATAN2(n), CEIL(n), COS(n), COSH(n), EXP(n), FLOOR(n), LN(n), LOG(n), MOD(n,m), POWER(n,m), ROUND(n,m), SIGN(n), SIN(n), SINH(n), SQRT(n), TAN(n), TANH(n), TRUNC(n,m)
Utilizando Funes
ORACLE oferece inmeras funes:
Funes Matemticas:
ABS(n): valor absoluto de n
Exemplo:
SELECT ABS(-15) Valor Absoluto
FROM DUAL;
Utilizando Funes
FLOOR(n): retorna o primeiro inteiro menor ou igual
Exemplo:
SELECT FLOOR(18.7) Floor" FROM DUAL; Floor --------18
Utlizando Funes
POWER(n,m): retorna uma potncia
Exemplo:
SELECT POWER(3,4) Potncia" FROM DUAL; Potncia -----------27
Utilizando Funes
TRUNC(n[,m]): trunca o resultado m casas decimais (se omitido zero)(se menor que zero, zera dgitos a esquerda da vrgula)
Exemplo:
SELECT TRUNC(18.78276,1) Trunc " FROM DUAL; Trunc --------18.7
Exemplo:
SELECT TRUNC(5618.78276,-2) Trunc" FROM DUAL; Trunc --------5600
Utilizando Funes
Funes de Caracteres:
INITCAP(s): torna as iniciais maisculas
Exemplo:
SELECT INITCAP('joo da silva') Nome " FROM DUAL; Nome -------------------'Joo Da Silva'
Utilizando Funes
LPAD(c1,n,c2): retorna a seqncia de caracteres c1, preenchida esquerda por n caracteres c2 (se omitido so utilizados espaos em branco)
SELECT LPAD('Teste',12,'*') Lpad FROM DUAL; Lpad ---------------*******Teste
Exemplo:
Exemplo:
Utilizando Funes
REPLACE(s1,s2,s3): substitui s2 por s3 em s1
Exemplo:
SELECT REPLACE('Teste de Banco de Dados','Banco de Dados','Oracle')Ltrim FROM DUAL; Ltrim --------------------Teste de Oracle
RTRIM(s1,s2): equivalente ao RTRIM, mas removendo direita SUBSTR(s,n[,m]): retorna a substring de s, iniciando em n at m (se omitido vai at o final)
Utilizando Funes
SOUNDEX(s): retorna uma string com a representao fontica de s
Exemplo: select soundex(substr(nome,1,7)) Soundex,nome Nome
from alunos where soundex(substr(nome,1,7)) = soundex('Andr') order by 1
Soun Nome ------- -----------------------------------------------------------A536 Andre Madeira A536 Andr Antoniazzi A536 Anderson de Oliveira A536 Andr Trein A536 Andrei Paiva
Utilizando Funes
UPPER(s): passa para maisculas INSTR(s1,s2[,n[,m]]): retorna a posio de s1 em que ocorre s2, iniciando a busca em n e finalizando em m
Exemplo: select INSTR('Teste especial','es'] Posio
from dual;
Posio ----------2
Utilizando Funes
Funes de Data e Hora
ADD_MONTHS(d,n): adiciona n meses na data d
from dual;
Data --------------21-AUG-98
ROUND(d[,f]): formata a data d de acordo com f (se omitido, formata como dia)
from dual;
Data --------------21-AUG-98
Utilizando Funes
Funes de Converso
TO_CHAR(d[,f]): converte para caracteres a expresso n segundo o formato f
Exemplo: select TO_CHAR('21-mar-98','DD, Month, YYYY') Data
from dual;
Data -------------------------21, March , 1998
Utilizando Funes
Outras Funes
from Disciplinas order by 1;
UID e USER: retornam, respectivamente, o identificador nico e o nome do usurio (login) conectado ao SGBD Oracle
from dual;
Funo TRUNC
Select trunc(preco*1.2379,2) from produtos; Select trunc(preco*1.2379,0) from produtos; Select trunc(preco*1.2379,-1) from produtos;
Funes de Converso
O Oracle converte automaticamente em atribuies:
Varchar2 e char para number Varchar2 e char para date Number para varchar2 Date para varchar2 Desde que seja possvel
Funes de Converso
O Oracle converte implicitamente em expresses:
Varchar2 e char para number Varchar2 e char para date
Funes de Converso
As principais funes de converso so:
TO_CHAR(<number ou date>, <formato>) TO_NUMBER(<char ou varchar2>) TO_DATE(<char ou varchar2>, <formato>)
Formatos de Datas
YYYY, YY, Y: ano MONTH, MON, MM, RM: ms por extenso, abreviado, com 2 dgitos e em romanos DDD, DD, D, DAY, DY: dia do ano, dia do ms, dia da semana (domingo = 1) e dia da semana por extenso e abreviado Q, WW, W: quarter, semana do ano, semana do ms
Formatos de Horas
HH ou HH12, HH24: horas MI: minutos SS: segundos SSSSS: segundos aps a meia noite /, ,, .: pontuao texto: pode ser inserido entre aspas
Formatos de Nmeros
9: posio numrica 0: posio numrica com 0 na mscara L: smbolo de moeda local .: ponto decimal ,: separador de milhar
Converso de Datas
select to_char(sysdate, 'dd/mm/yyyy') from dual; select to_char(sysdate, 'dd/mm/yyyy h24:mi:ss') from dual; select to_char(sysdate, 'day, dd de month de yyyy') from dual
Converso de Datas
to_date('21/03/1971'', 'dd/mm/yyyy')
Retorna um date a partir de uma seqncia de caracteres, convertendo de acordo com o formato definido a nica maneira de garantir a correo do resultado
Converso de Nmeros
to_char(1234.679, 'L999,990.00') = 'R$ 1,234.67') to_number('456,786.76') = 456786.76
Funo NVL
Converte NULL para algum valor opervel
nvl(NULL, 0) = 0 select nvl(importado,'x') from produtos;
Funo DECODE
Realiza um se-ento-seno sobre um valor
decode(coluna ou expresso, busca1, resultado1, busca2, resultado2, ...) select decode(importado, 's', 'produto importado', 'n', 'produto nacional') from produtos;
Funo DECODE
DECODE(expr,expr1,result1,expr2,result2,...,padro): compara expr com expr1, se for igual, retorna result1, seno, compara com expr2 e assim sucessivamente. Se nenhuma comparao for verdadeira, retorna padro. Exemplo: select nome Nome, decode(formacao, 'G','Graduao', 'E','Especializao', 'M','Mestrado', 'D','Doutorado', 'Desconhecida') Formacao from PROFESSORES order by 1;
Expresses CASE
CASE expresso
WHEN expresso THEN expresso_retorno ... ELSE expresso_retorno
Expresses CASE
CASE WHEN condio THEN expresso_retorno
... ELSE expresso_retorno
Exemplo
select case nivel_privilegio when 2 then 'Baixo' when 3 then 'Mdio-Baixo' when 4 then 'Mdio' when 5 then 'Mdio-Alto' when 6 then 'Alto' else 'Outros' end from administradores;
Exemplo
select case when nivel_privilegio >= 1 and nivel_privilegio < 5 then 'Baixo' when nivel_privilegio >= 5 and nivel_privilegio < 7 then 'Mdio' when nivel_privilegio >= 7 and nivel_privilegio < 10 then 'Alto' else 'Outros' End from administradores;