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
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

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:

Selecionar tudo

	-- 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;
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

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:

Selecionar tudo

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:

Selecionar tudo

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:

Selecionar tudo

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:

Selecionar tudo

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:

Selecionar tudo

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!
Responder
  • Informação