DECODE NVL e por incrivel GROUP BY

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qui, 25 Out 2007 1:32 pm

Olá pessoal sei que o assunto é desgastante mas estou trabalhando em uma empresa e trabalho com oracle preciso muito da ajuda de vocês e como notei que esse forum todas as duvidas são respondidas então:

pessoal primeiro gostaria de saber como se trabalha ou aplica o DECODE?
Quando e como usar o NVL?
Porque usar e quando e como usar o GROUP BY?

Pessoal se não for pedir muito poderia ser bem passo a passo para leigo mesmo valeu.

Obrigado de verdade
carlos12
Localização: rio

Mensagemem Qui, 25 Out 2007 1:37 pm

Brother,

Dá uma procurada aqui no fórum:

http://www.glufke.net/oracle/search.php

Vai achar todas elas.

(Tópico movido para SQL)


Alguns exemplos:

Código: Selecionar todos
   -- O primeiro valor é o valor à ser comparado         
-- O segundo valor, é a primeira condição à se verificar.   
   SELECT DECODE(2,1,'Igual','Diferente')
     FROM dual;
    
   -- NVL: Troca o Nulo pelo valor que você informar. 
   SELECT NVL(campo, 1)
     FROM dual; 
    
   -- Group By: Agrupar
   -- Soma tdos os salários, por empregado, por exemplo.
   SELECT ENAME,
          SUM(SAL)
         FROM EMP
      GROUP BY ENAME;
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Sáb, 27 Out 2007 9:13 am

Fala kara... beleza???
Seguinte... eu não tenho muito conhecimento nesse assunto mas vou tentar esclarecer um pouco pra tu... ou então confundir mais ainda tua cabeça! kkkkk...

mais vamo lá!


### DECODE ###

--Olha... o decode é usado como um "CASE"... ele é muito útil no "Reports"... quando você quer fazer uma ligação entre "querys", se você usar o "CASE" o reports não aceita a ligação... então utiliza-se o "DECODE"... a sintaxe é a segunte:

-- DECODE(X, VAL1, 'RETORNO1', VAL2, 'RETORNO2', VAL3, 'RETORNO3', 'RETORNO-ELSE')

-- Onde:
---------- X - É a coluna que vai estar sendo testada...
---------- VAL - São os valores da condição...
---------- 'RETORNO' - São as respostas... caso a condição seja verdadeira
---------- 'RETORNO-ELSE' - Sempre o último retorno... que não possui condição... é como um "ELSE" no case... ele é retornado caso nenhuma das condições sejam verdadeiras.

-- o "DECODE" é muito útil e acho ele muito mais pratico que o "CASE"...

### NVL ###

--Bom... o "NVL" é usado para quando um valor for "NULL" ele retorna um valor alternativo... é muito utilizado em "RELATÓRIOS"... Sabe... quando tu faz uma tela para chamar um Relatório de Clientes por exemplo... Então o Usuário seleciona o Cliente desejado... e o sistema exibe o relatório do cliente selecionado... Porém... se o usuário "NÃO SELECIONAR NENHUM CLIENTE" o sistema deve retornar o RELATÓRIO geral de todos os clientes... então Usa-se o NVL para comparar o "ID" do Cliente... com o "ID" informado no Formulário do Relatório... caso o "ID" informado seja "NULL" (Não informou)... O NVL traz um valor alternativo... O proprio "ID" que fará com que todos os Clientes Sejam Selecionados:

-- EX:

"SELECT C.CLI_NOM, C.CLI_COD
FROM CLIENTES C
WHERE C.CLI_ID = NVL(:ID_PASSADO_POR_PARAMETRO, C.CLI_ID)"

-- Neste caso... se o :ID_PASSADO_POR_PARAMETRO for "NULL" ele compara o "C.CLI_ID" com o mesmo "C.CLI_ID"... retornando todos os clientes....


-- Sintaxe:

-- NVL(VAL1, VAL_ALTERNATIVO)

-- ONDE:
----------- VAL1 - É o valor que ele sempre vai retornar... exeto quando este VAL1 for "NULL"
----------- VAL_ALTERNATIVO - É o valor que ele apenas vai retornar caso o VAL1 seja "NULL".


### GROUP BY ###

-- E finalizando o GROUP BY... ele não é tão complicado... Ele é utilizado para agrupar resultados pelo valor de uma coluna... E sempre deve ser usado quando o "SELECT" utiliza alguma função de "AGREGAÇÂO", como o "SUM, COUNT, MAX, MIN" entre outras...
--Exemplo:

"SELECT C.CLI_CIDADE, COUNT(1)
FROM CLIENTES C
GROUP BY C.CLI_CIDADE"

-- Onde a instrução vai retornar o nome de todas as cidades, e o numero de clientes que possui em cada cidade...
-- você pode usar também o group by com mais de uma coluna de agrupamento... ex:

"SELECT C.CLI_CIDADE, C.CLI_SEXO, COUNT(1)
FROM CLIENTES C
GROPU BY C.CLI_CIDADE, C.CLI_SEXO"

-- Esta outra instrução vai retornar o Número de Clientes em cada cidade... porém agora vai retornar separadamente o numero de clientes do sexo "MASCULINO" e "FEMININO"...



-- Bom... é isso... rsrsrs... espero poder ter ajudado um pouco ai... vlw! =) ...
Caso isso tudo ai tenha servido só para atrapalhar mais ainda... então é so falar que da próxima eu fico queto! kkkkkkkkkk... falou!
Renan Orati
Localização: São José do Rio Preto - SP



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes