Buscar

Revisão - Comandos SQL


Continue navegando


Prévia do material em texto

Funções em SQL
Um ou mais INPUTS retornam um OUTPUT.
Single-row: Retornam um resultado por linha.
Multi-row: Retornam um resultado por grupo de linhas.
Funções Single-row
 Argumentos podem ser colunas ou expressoes.
Podem ser usadas no select, where e order by.
Podem ser do tipo: caracter, numerica, conversçao e de data.
Caracter:
Lower: Converte caracteres para minuscula.
Upper: Converte caracteres para maiuscula.
Initcap: Converte a primeira letra de cada palavra do argumento para maiuscula.
Concat: Converte dois argumentos, igual ao pipe (||).
Substr(String, P,T): Retorna os caracteres da String iniciando na posição P e tamanho T. Se P for negativo começa a partir do final da String. Se tamanho é omitido retorna a partir do final de P.
Lenght: Retorna o tamanho da String.
Replace(String busca, subs): Substitui uma String de busca na String fornecida pela String de substituição.
Numericas:
Round(N,D): Arredonda o numero N para D decimais.
Exemplo:
	Select round (45926,2)
	From dual 
	Round;
Trunc(N,D): Trunca o numero N para o decimal D.
Exemplo:
	Select trunc(45926,2)
	From dual;
Mod(D,d): Retorna o resto da divisão da D por d.
Data:
Oracle armazena em colunas date: dia, hora, mes, ano, minuto e segundos.
A mascara de visualização depende da linguagem usada.
Em portugues o padrão é DD/MM/AAAA
Sysdate – Retorna a data do sistema.
Exemplo:
	Select sysdate
	From dual;
Sysdate pode ser usado em aritmética:
Select sysdate +1
From dual;
Select sysdate – date_nasc
From emp;
Months between (D1,D2): numero de meses entre as datas.
	Select nome
	From dependentes
	Where months_between (sysdate, dat_inscr) <-12(ultimos 12 meses);
Add_months: Adiciona meses para uma data.
	Select add_months(dat_nasc, 12)
	From dual;
Last_day: Ultimo dia do mes da data informada.
	Select cast_day(sysdate)
	From dual;
Round e Trunc podem ser usados em data, sem orçamento de decimal.
Select trunc(sysdate)
From dual;
Conversão:
Implicita: Ocorre se o caracter representa um numero/data valido.
To_char: Numero/ data para carcter.
Exemplo:
	Select to_char(sysdate, ‘DD/MM/ YYYY’)
	From dual;
	Select to_char (sysdate, ‘DD/MM/YYYY HH24:MI:SS’)
	From dual;
To_number: char para numero.
To_date: char para data.
	Select nome
From emp
Where dat_nasc= to_date(‘04/01/2000’, ‘DD/MM/YYYY’)
Decode(Estado,’RJ’, salario*10,’SP’, salario*20, salario)
Funções podem ser alinhadas
Exemplo:
Select nome, upper(substr(nome,1,8),||’.com’) nome2
From emp;
	
Tratando Nulos
Função NVL: Susbtitui o NULL por algo requirido.
Select NULL(salario,0)
From emp;
Select NULL(dat_nasc,’01/01/2000’)
 .
 .
 .
 NULL(nome, ‘sem nome’)
Decode: Igual if/else
Usados where/select
Funções multi-row/grupo
AVG: media, ignora nulos
SUM: soma, ignora nulos
MAX: maximo, ignora nulos
MIN: minimo, ignora nulos
COUNT: Contagem de registros não nulos para a coluna fornecida para a função.
COUNT(*): Numero de linhas da tabela, inclui nulos.
Pode-se colocar o distinct dentro para remover duplicados
 COUNT(distinct nome)
	Select sum(salario)
From emp
Where dep_id=100;
Se quiser incluir os valores nulos no calculo de funções de agrupamento, usar NULL.
Select AVG(NULL (salario,0))
From emp;
Select count(salario)
From emp
Where dep_id=100;
Group by
Usar a função em subgrupos
Select dep_id, avg(salario)
From emp
Groups by dep_id
Order by 1;
Todas as colunas que estão no select e que não são argumentos das funções de grupo, devem aparecer no group by.
Select dep_id, tipo_id , avg(salario)
From emp
Group by dep_id, tipo-id
Order by 1,2;
Não pode-se usar funções de grupo na clausula where para filtrar linhas.
Having
		
	Select dep_id, tipo_id, avg(salario)
	From emp
	Group by dep_id, tipo_id
	Having avg (salario>100)
	Order by 1;
JOINS
Para usar dados de mais de uma tabela em uma única query.
Padrão ANSI 99
Padrão ‘mercado’
 Emp Depto Locais 
 Col_id 
Cidade
Estado
Codep
Nome
Codemp
Nome
Sexo
Codep
 
Using
Select colunas
From tab1 join tab2
Using (colx);
Realiza um equijoin/invejoin com uma coluna de mesmo nome.
Using não pode ter apelidos tem que usar o nome da coluna em comum.
Select emp.nome, depto.nome
From emp join depto
Using (codep)
Where emp.codep=100;
On
	Select colunas
	From tab1 join tab2
On (tab1.c1=tab2.c2);
Realiza o equijoin na condição da clausula ON.
Parenteses opcionais.
Select e.nome,d.nome
From emp e join depto d
On (e.codep=d.codep)
Where, codep=100;
Pode-se usar apelidos para as tabelas.
Mais de duas tabelas
	Select e.nome, d.nome, l.cidade
From emp e join depto d
On d.depto=e.depto
Join locais l
On d.col_id=c.loc_id
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Select e.nome, d.nome, l.cidade
From emp e join depto d
Using (codep)
Join locais l
Using(loc_id)
Where l.ciade e ‘RJ’ and e.cod=100;
Sintaxe ‘mercado’/oracle
Emparelhamento na clausula where
Select e.nome, d.nome
From emp e, depto d
Where e.codep=d.codep
And e.codep=100
And sexo=’M’;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Select sexo, codemp, d.nome, cidade
	From emp e, depto d, locais l
	Where e.codep=d.codep
	And d.col_id=d.codep
	And sexo=’M’
	And d.codep=100;
Auto-relacionamento
	Select e1.nome, e2.nome
	From emp e1, emp e2
	Where e1.codemp=e2.codger
	And sexo=’M’
	Order by 2;
Outer join
Retorna linhas que não atendem ao emparelhamento
Left outer join
Right outer join
Full outer join
Left
	Select e.nome, d.nome
	From emp e left outer join depto d
	On(e.codep=d.codep);
Retorna todos os empregados mesmo os que não possuem deptos.
Right
	Select e.nome, d.nome
From emp e right outer join depto d
On(e.codep=d.codep);
Irá retornar todos os departamentos, mesmo os que não possuem empregados.
Full
	Select e.nome, d.nome
	From emp e full outer join depto d
	On(e.codep=d.codep);
Irá retornar todos empregados/deptos
Outer joins
Usar sintax ANSI
Se a condição de emparelhamento for omitida resulta em um produto cartesiano.
Exemplo:
	Select e.nome, d.nome
	From emp e, depto d;
Em ANSI: Usa-se o cross join.