Você está na página 1de 65

Aula 5

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

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

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 n
Exemplo:
SELECT ABS(-15) Valor Absoluto

FROM DUAL;

CEIL(n): retorna o primeiro inteiro maior ou igual


Exemplo:
SELECT CEIL(18.7) "Ceil" FROM DUAL; Ceil --------19

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

MOD(n,m): retorna o resto de uma diviso


Exemplo:
SELECT MOD(20,3) Mdulo" FROM DUAL; Mdulo --------2

Utlizando Funes
POWER(n,m): retorna uma potncia
Exemplo:
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 maisculas
Exemplo:
SELECT INITCAP('joo da silva') Nome " FROM DUAL; Nome -------------------'Joo Da Silva'

LOWER(s): passa para minsculas


Exemplo:
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 s2


SELECT LTRIM('3434343434567890','34') Ltrim FROM DUAL; Ltrim ---------567890

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

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

LENGHT(s): retorna o tamanho de s

Utilizando Funes
Funes de Data e Hora
ADD_MONTHS(d,n): adiciona n meses na data d
from 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 f
Exemplo: select TO_CHAR('21-mar-98','DD, Month, YYYY') Data
from dual;
Data -------------------------21, March , 1998

TO_DATE(s[,f]): converte a expresso s para data


Exemplo:
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 Funes
from Disciplinas order by 1;

NVL(expr1,expr2): se expr1 for nula, retorna expr2


Exemplo: 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 Oracle
from 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(<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

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

Você também pode gostar