+ All Categories
Home > Documents > Dicas Plsql

Dicas Plsql

Date post: 07-Jul-2015
Category:
Upload: rodrigo-teles
View: 229 times
Download: 0 times
Share this document with a friend
Popular Tags:

of 65

Transcript

Aula 5

Linguagem SQLHabilidades 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 ...]

Selecionando Todas as Colunas Para selecionar todas as colunas da(s) tabela(s), de forma que todas apaream no resultado, utilize o operador * select * from nome_da_tabela select * from clientes;

Utilizando Operadores Aritmticos Operadores Aritmticos podem ser usados em colunas numricas para calcular valores* / +

Multiplicao Diviso Adio Subtrao

Ordem de avaliao (precedncia)

Ordem para o mesmo operador

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

Valores Nulos em Expresses Aritmticas Um valor nulo em uma expresso aritmtica resulta NULL Lembre-se: NULL 0 b

Renomeando Colunas no Resultado (ALIAS) possvel renomear as colunas no resultado select nome_da_coluna as novo_nome [, ] from nome_da_tabela ou select nome_da_coluna as novo nome [, ] from nome_da_tabela

Definindo o novo nome entre aspas possvel utilizar palavras reservadas, espaos, etc. select nome Nome do Cliente, data_nascimento as aniversario from clientes;

Renomeando Colunas no Resultado (ALIAS) A utilizao de alias particularmente til para renomear colunas que tenham sido obtidas por expresses aritmticas, concatenaes, etc. Pode ser utilizada, opcionalmente, a palavra AS entre a coluna e o alias, o que torna o comando compatvel com o Microsoft SQL

Adicionando Texto ou Literais ao Resultado possvel adicionar pores de texto e literais s linhas do resultado select texto_ou_literal alias, nome_da_coluna [, ] from nome_da_tabela select cod_produto, 10 numero from produtos;

Concatenando Texto no Resultado O operador || o operador de concatenao de strings select 'nome:' || nome from usuarios;

Tanto literais como colunas podem ser concatenadas entre si

Clusulas ALL e DISTINCT Atravs das clusulas ALL e DISTINCT possvel controlar a exibio de linhas repetidas no resultado: ALL (default): no elimina DISTINCT: elimina select [all | distinct] ... select all cod_produto from pedidos_produtos; select distinct cod_produto from pedidos_produtos;

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

Critrios de Seleo de Linhas Os critrios de seleo de linhas so baseados em: Operadores de Comparao: =, , =,

Expresses de Intervalos: BETWEEN AND

Expresses sobre Conjuntos: IN, ANY, SOME, ALL, EXISTS

Critrios de Seleo de Linhas Comparaes por Similaridade: LIKE

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

O conectivo lgico NOT retorna um resultado quando a condio de pesquisa falsa.

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)

Conectivos Lgicos X ndices Quando utilizado o conectivo AND entre duas condies sobre colunas diferentes e as duas colunas forem indexadas, somente um ndice poder ser utilizado Quando utilizado o conectivo OR, ambos os ndices podero ser utilizados

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,

A(s) coluna(s) da clusula ORDER BY no precisam necessariamente aparecer na clusula SELECT

Exerccio 11. 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

Operaes com Datas date + number = date date number = date date date = nmero de dias date + number/24 = date, com um determinado nmero de horas a mais

Funes Funes sobre linhas Operam sobre cada linha do resultado individualmente

Funes sobre conjuntos de linhas Operam sobre diversas linhas, calculando valores sobre todo o conjunto (totais, mdias, o maior valor, etc.)

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)

Funes sobre Caracteres Mudana de maisculas e minsculas: LOWER(s), UPPER(s), INITCAP(s) Eliminao de espaos: LTRIM(s1,s2), RTRIM(s1,s2) Outras: CONCAT(s1,s2), LPAD(s1,n,s2), RPAD(s1,n,s2), LENGTH(s), SUBSTR(s,n,m), REPLACE(s1,s2,s3), CHR(n), SOUNDEX(s), TRANSLATE(s1,s2,s3), etc.

Utilizando Funes ORACLE oferece inmeras funes: Funes Matemticas: ABS(n): valor absoluto de nExemplo:SELECT ABS(-15) Valor Absoluto

FROM DUAL;

CEIL(n): retorna o primeiro inteiro maior ou igualExemplo:SELECT CEIL(18.7) "Ceil" FROM DUAL; Ceil --------19

Utilizando Funes FLOOR(n): retorna o primeiro inteiro menor ou igualExemplo:SELECT FLOOR(18.7) Floor" FROM DUAL; Floor --------18

MOD(n,m): retorna o resto de uma divisoExemplo:SELECT MOD(20,3) Mdulo" FROM DUAL; Mdulo --------2

Utlizando Funes POWER(n,m): retorna uma potnciaExemplo:SELECT POWER(3,4) Potncia" FROM DUAL; Potncia -----------27

ROUND(n[,m]): arredonda n para m casas decimais (se omitido zero)Exemplo:SELECT ROUND(18.78276,1) Round" FROM DUAL; Round --------18.8

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 maisculasExemplo:SELECT INITCAP('joo da silva') Nome " FROM DUAL; Nome -------------------'Joo Da Silva'

LOWER(s): passa para minsculasExemplo:SELECT LOWER('TesTE DE minSCUlas') Lower " FROM DUAL; Lower -------------------------teste de minsculas

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:

LTRIM(s1,s2): remove da esquerda de s1 a seqncia s2SELECT LTRIM('3434343434567890','34') Ltrim FROM DUAL; Ltrim ---------567890

Exemplo:

Utilizando Funes REPLACE(s1,s2,s3): substitui s2 por s3 em s1Exemplo:SELECT REPLACE('Teste de Banco de Dados','Banco de Dados','Oracle')Ltrim FROM DUAL; Ltrim --------------------Teste de Oracle

RPAD(c1,n,c2): equivalente ao LPAD, mas preenchendo direita

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 sExemplo: select soundex(substr(nome,1,7)) Soundex,nome Nomefrom alunos where soundex(substr(nome,1,7)) = soundex('Andr') order by 1Soun 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 mExemplo: select INSTR('Teste especial','es'] Posiofrom dual;Posio ----------2

LENGHT(s): retorna o tamanho de s

Utilizando Funes Funes de Data e Hora ADD_MONTHS(d,n): adiciona n meses na data dfrom dual;Data --------------21-AUG-98

Exemplo: select ADD_MONTHS('21-mar-98',5] Data

ROUND(d[,f]): formata a data d de acordo com f (se omitido, formata como dia)from dual;Data --------------21-AUG-98

Exemplo: select ROUND('21-mar-98'] Data

Utilizando Funes Funes de Converso TO_CHAR(d[,f]): converte para caracteres a expresso n segundo o formato fExemplo: select TO_CHAR('21-mar-98','DD, Month, YYYY') Datafrom dual;Data -------------------------21, March , 1998

TO_DATE(s[,f]): converte a expresso s para dataExemplo:select to_date('March 21, 1998, 11:00 A.M.', 'Month dd, YYYY, HH:MI A.M.') Data from dual;Data --------------21-MAR-98

Utilizando Funes Outras Funesfrom Disciplinas order by 1;

NVL(expr1,expr2): se expr1 for nula, retorna expr2Exemplo: select nome Nome, NVL(carga_horaria,0) Carga Horria

UID e USER: retornam, respectivamente, o identificador nico e o nome do usurio (login) conectado ao SGBD Oraclefrom dual;

Exemplo: select UID, USER

UID USER -------- -------------------------------------------------12 ALUNO1

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(, ) TO_NUMBER() TO_DATE(, )

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

Funes sobre Datas MONTHS_BETWEEN(d1,d2): retorna o nmero de meses entre duas datas ADD_MONTHS(d1,n): adiciona meses em uma data NEXT_DAY(d,'dia da semana'): encontra o prximo dia da semana a partir de uma data LAST_DAY(d): encontra o ltimo dia do ms da data

Funes sobre Datas ROUND(d): arredonda uma data round('21-mar-71','month') = 01-apr-71 round('21-mar-71','year') = 01-jan-72

TRUNC(d): trunca uma data trunc('21-mar-71','month') = 01-mar-71 trunc('21-mar-71','year') = 01-jan-71

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 CASECASE expressoWHEN expresso THEN expresso_retorno ... ELSE expresso_retorno

Expresses CASECASE WHEN condio THEN expresso_retorno... ELSE expresso_retorno

Exemploselect 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;

Exemploselect 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;


Recommended