Upload
meire-melo
View
425
Download
52
Embed Size (px)
Citation preview
Fábio Delboni - [email protected]
TREINAMENTO DE SQL – PARTE 1 de 2.
ETAPAS:
1) Conceitos de banco de dados
2) Sentença SQL
1) Dicionário de dados
2) Consulta simples em uma tabela
3) Interpretando a GLINKSREL
4) Ligando tabelas / Inner Join
5) Outher Join – Left / Right
6) Consulta com várias tabelas
7) Apelido de tabela / coluna
8) Filtros e parâmetros
9) Comando Between
10) Subconsulta In
11) Subconsulta Alias / Externa
12) Comando Distinct
13) Agrupando Dados
14) Funções
1) Matemática
2) String
3) Conversão
15) Funções de Agregação
16) Comando Having
17) Union e Union All
18) Ordenação
19) Comando Case When
20) Comando RowNum do Oracle
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
O que é um SGBD?
Sistema Gerenciador de Banco de Dados, é um conjunto de softwares que auxiliam no gerenciamento de um ou mais banco de dados.
Quais as vantagens de utilizar um SGBD?
• Exclui da aplicação o papel de organizar os dados• Integra e organiza os dados em uma única base• Acelera e facilita o processo de manipulação dos dados
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
O que um SGBD possui?
• Instâncias• Banco de dados• Tabelas• Visões• Programação• Permissões• Linguagem SQL
SGBD
BD1 BD2 BD3 BD4
TAB1 TAB2 TAB3 TAB1 TAB1 TAB1 TAB2 TAB3
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
TABELAS
Servem para armazenar dados semelhantes, e/ou categorizá-los, sendo constituída por linhas e colunas.
• Uma coluna refere-se a um campo, também conhecido por atributo• Cada linha representa um registro, também conhecido por tupla
Campos
Registros
ou Tuplas
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
Os campos possuem diversos tipos sendo eles:
• Numéricos (inteiro e decimal)• Alfabético• Data e hora• Arquivo (BLOB - Binary Large OBject)
Uma tabela também possui chaves:
• A chave primária indica unicidade, quando comparado aos demais registros da mesma tabela• A chave estrangeira é responsável por ligar uma tabela com outra pelo campo chave primária
Esta ligação também conhecida como herança, viabiliza a ligação de uma tabela na outra tornando possível a generalização/agrupamento dos dados.
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
Exemplo de ligação de tabelas:
Chave primária
Chave estrangeira
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
Como o RM controla diversas coligadas em um único banco de dados?
Nas tabelas que necessitam de um cadastro separado por coligada, é utilizado uma coluna para indicar a qual coligada o registro pertence.
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
SQL - Linguagem de consulta estruturada
• É uma linguagem responsável por fazer a interface entre a aplicação e o banco de dados.• Através dela é possível inserir, editar, consultar e excluir dados das tabelas.• A Linguagem SQL está presente em todos SGBD existentes no mercado.• Ela segue um padrão de escrita (comum) utilizado por todos fabricantes.• Porém cada SGBD possui algumas particularidades/restrições
SQL
BD
SGBD
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
SQL - Linguagem de consulta estruturada
• É uma linguagem responsável por fazer a interface entre a aplicação e o banco de dados.• Através dela é possível inserir, editar, consultar e excluir dados das tabelas.• A Linguagem SQL está presente em todos SGBD existentes no mercado.• Ela segue um padrão de escrita (comum) utilizado por todos fabricantes.• Porém cada SGBD possui algumas particularidades/restrições
SQL
BD
SGBD
Fábio Delboni - [email protected]
CONCEITOS DE BANCO DE DADOS
SQL - Linguagem de consulta estruturada
• É uma linguagem responsável por fazer a interface entre a aplicação e o banco de dados.• Através dela é possível inserir, editar, consultar e excluir dados das tabelas.• A Linguagem SQL está presente em todos SGBD existentes no mercado.• Ela segue um padrão de escrita (comum) utilizado por todos fabricantes.• Porém cada SGBD possui algumas particularidades/restrições.
SQL
BD
SGBD
Fábio Delboni - [email protected]
SENTENÇA SQL – DICIONÁRIO DE DADOS
Como eu sei qual o nome da tabela, ou o nome do campo que armazenadeterminado dado?
A forma mais fácil é via aplicativo pressionando CTRL+SHIFT e posicionando o cursor sobre o campo, conforme o exemplo abaixo:
Fábio Delboni - [email protected]
SENTENÇA SQL – DICIONÁRIO DE DADOS
Para as novas telas desenvolvidas em .NET
Clicar com o direito no fundo da janela, e habilitar a opção “visualizar nome dos campos”, e posicionar o cursor sobre o campo.
Fábio Delboni - [email protected]
DICIONÁRIO DE DADOS
Outra forma é rastrear pela tabela GCAMPOS, utilizada pelo gerador como um dicionário de dados. Contendo o nome das tabelas e os campos com suas descrições.
Fábio Delboni - [email protected]
CONSULTA SIMPLES EM UMA TABELA
Sintaxe de uma consulta SQL:
O comando SELECT é responsável pelas consultas no banco de dados, sendo o único comando utilizado em planilhas, gerador e nos cubos.
Fábio Delboni - [email protected]
CONSULTA SIMPLES EM UMA TABELA
Sintaxe de uma consulta SQL:
Agora um exemplo de SELECT, buscando apenas algumas colunas específicas:
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Como eu sei qual a ligação das tabelas?
Existe uma tabela chamada GLINKSREL que contém todas as tabelas e suas ligações, composta por apenas 4 colunas, conforme exemplo abaixo:
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Como eu sei qual a ligação das tabelas?
Existe uma tabela chamada GLINKSREL que contém todas as tabelas e suas ligações, composta por apenas 4 colunas, conforme exemplo abaixo:
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
A CHILDTABLE (TMOV – movimentos) herda os dados da tabela MASTERTABLE (FCFO – clientes/fornecedores), ou seja, no cadastro de um pedido é informado o código do cliente, e assim é feita a ligação destas duas tabelas.
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Visualizando de uma outra forma.
1º
2º
3º
MASTERTABLE CHILDTABLE MASTERFIELD CHILDFIELDFCFO TMOV CODCOLIGADA, CODCFO CODCOLCFO, CODCFO
MASTERTABLE.MASTERFIELD CHILDTABLE.CHILDFIELDFCFO.CODCOLIGADA, FCFO.CODCFO TMOV.CODCOLCFO, TMOV.CODCFO
FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND
FCFO.CODCFO = TMOV.CODCFO
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Não entendeu?Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Não entendeu?Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA = TMOV.CODCOLCFO
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Não entendeu?Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND
FCFO.CODCFO
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Não entendeu?Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND
FCFO.CODCFO = TMOV.CODCFO
Fábio Delboni - [email protected]
INTERPRETANDO A GLINKSREL
Existem tabelas com mais de uma possibilidade de ligação, para estes casos, deve ser identificado qual a linha que contém a ligação correta.
Quando um relatório não é feito por consulta SQL, mas é feito com “campos da base”, o sistema identifica as ligações entre as tabelas, e na ocorrência de mais de uma ligação, exige que o usuário selecione a ligação correta, para poder salvar o relatório.
Fábio Delboni - [email protected]
Ligando Tabelas / Inner Join
Sintaxe de uma consulta SQL:
SELECT [DISTINCT] <CAMPOS>
FROM <TABELAS> <JOINS>
WHERE <CONDIÇÕES>
GROUP BY <CAMPOS>
ORDER BY <CAMPOS>
O comando SELECT é responsável pelas consultas no banco de dados, e no Corpore, pode ser utilizado no gerador de relatórios, planilhas, cubos, filtros com o operador in, e em fórmulas.
Vale lembrar que:
Fábio Delboni - [email protected]
Ligando Tabelas / Inner Join
Ligando tabelas pelo comando “WHERE”
Ligando tabelas pelo comando “FROM”
Fábio Delboni - [email protected]
Ligando Tabelas / Inner Join
Outro exemplo mais complexo, ligando pelo comando “WHERE” e “FROM” respectivamente, uma tabela com chave composta.
DICA: Mesmo que o cliente tenha apenas uma coligada, utilize as ligações da maneira correta, se a tabela usa chave composta, ligue os dois campos.
Fábio Delboni - [email protected]
Outer Join – Left / Right
Quando você relaciona duas tabelas pelo Inner Join, o SGBD retorna registros das duas tabelas quando existe um relacionamento da tabela da esquerda com a tabela da direita. Porém existem situações onde você necessita que o SGBD retorne registros da tabela da esquerda, mesmo não contendo registro na tabela da direita que se iguale.
Para solucionar este problema, existe o conceito de Outer Join, muito utilizado para ligar tabelas que contenha campos de preenchimento opcional, como os campos complementares.
Abaixo um Outer Join escrito de maneira formal (relacionada pelo comando From)
Fábio Delboni - [email protected]
Outer Join – Left / Right
Abaixo o mesmo Outer Join, relacionando tabelas pelo Where para SGBD SQL SERVER.
Agora, o mesmo comando acima para SGBD ORACLE.
Fábio Delboni - [email protected]
Outer Join – Left / Right
Observe a consulta abaixo, foi obtido o resultado dos identificadores 103, 105 e 118.Todos possuem relação entre item e o tributo.Porém os registros dos tributos, assim como outras tabelas, são criados somente quando ele existe, diferente de outras tabelas que criam o registro porém com alguns campos nulos.
Fábio Delboni - [email protected]
Outer Join – Left / Right
Note que agora os identificadores 104, 106 e 108, foram inclusos.Isto deve-se ao outer join, que buscou todos os valores da tabela de itens do movimento, mesmo não existindo um registro que mantém relação na tabela de tributos.
Este exemplo é para SQL Server, em Oracle basta substituir * por (+) .
Fábio Delboni - [email protected]
Consulta com várias tabelas
Em grande parte das consultas SQL é utilizado mais de duas tabelas, e devido este nível de complexidade é comum utilizarmos diagramas para facilitar o entendimento dos relacionamentos, e facilitar no desenvolvimento da sentença SQL. Veja o exemplo abaixo:
Fábio Delboni - [email protected]
Consulta com várias tabelas
Passo 1 - ligar a tabela PFUNC com a PSECAO.
Fábio Delboni - [email protected]
Consulta com várias tabelas
Passo 1 - ligar a tabela PFUNC com a PSECAO.
SELECT *
FROM PFUNC, PSECAO
WHERE
PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA
AND PFUNC.CODSECAO = PSECAO.CODIGO
Fábio Delboni - [email protected]
Consulta com várias tabelas
Passo 2 - ligar a tabela PFUNC com a PFUNCAO.
Fábio Delboni - [email protected]
Consulta com várias tabelas
Passo 2 - ligar a tabela PFUNC com a PFUNCAO.
SELECT *
FROM PFUNC, PSECAO, PFUNCAO
WHERE
PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA
AND PFUNC.CODSECAO = PSECAO.CODIGO
AND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA
AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
Fábio Delboni - [email protected]
Consulta com várias tabelas
Passo 3 - ligar a tabela PFUNC com a PCODSITUACAO.
Fábio Delboni - [email protected]
Consulta com várias tabelas
Passo 3 - ligar a tabela PFUNC com a PCODSITUACAO.
SELECT *
FROM PFUNC, PSECAO, PFUNCAO, PCODSITUACAO
WHERE
PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA
AND PFUNC.CODSECAO = PSECAO.CODIGO
AND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA
AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
AND PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE
Fábio Delboni - [email protected]
Consulta com várias tabelas
A mesma SQL escrita de maneira formal:
SELECT *FROM PFUNC
INNER JOIN PSECAO ON ( PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADAAND PFUNC.CODSECAO = PSECAO.CODIGO )
INNER JOIN PFUNCAO ON ( PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADAAND PFUNC.CODFUNCAO = PFUNCAO.CODIGO )
INNER JOIN PCODSITUACAO ON ( PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE )
Fábio Delboni - [email protected]
Consulta com várias tabelas
Note que até o momento todos exemplos de SQL apresentados utilizam no comando: SELECT *
que significa; obter todas as colunas de todas as tabelas envolvidas.
No entanto, se analisarmos, este comando retorna algumas colunas desnecessárias.
Para solucionar este problema, obtendo somente as coluna que nos interessa basta indicar a
tabela e o nome do campo no padrão TABELA.CAMPO, veja a diferença no exemplo abaixo:
Fábio Delboni - [email protected]
Apelido de Tabela / Coluna
É possível diminuir a quantidade de “código” na montagem de uma sentença SQL atribuindo um apelido a uma tabela, também conhecido como alias. Após a criação destes, basta utilizálo no lugar do nome da tabela. Compare estas duas consultas abaixo do antes e o depois, respectivamente:
SELECT PFUNC.CHAPA, PFUNC.NOME, PSECAO.DESCRICAO, PFUNCAO.NOME, PCODSITUACAO.DESCRICAOFROM PFUNC, PSECAO, PFUNCAO, PCODSITUACAOWHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADAAND PFUNC.CODSECAO = PSECAO.CODIGOAND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADAAND PFUNC.CODFUNCAO = PFUNCAO.CODIGOAND PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE
SELECT P.CHAPA, P.NOME, S.DESCRICAO, F.NOME, C.DESCRICAOFROM PFUNC P, PSECAO S, PFUNCAO F, PCODSITUACAO CWHERE P.CODCOLIGADA = S.CODCOLIGADAAND P.CODSECAO = S.CODIGOAND P.CODCOLIGADA = F.CODCOLIGADAAND P.CODFUNCAO = F.CODIGOAND P.CODSITUACAO = C.CODCLIENTE
Fábio Delboni - [email protected]
Apelido de Tabela / Coluna
Também é possível criar um alias (apelido) para uma coluna de maneira semelhande a criação de alias para tabelas.
SELECTPFUNC.CHAPA REGISTRO,PFUNC.NOME FUNCIONARIO,PSECAO.DESCRICAO SECAO,PFUNCAO.NOME FUNCAO,PCODSITUACAO.DESCRICAO SITUACAO
FROM PFUNC, PSECAO, PFUNCAO, PCODSITUACAO
WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADAAND PFUNC.CODSECAO = PSECAO.CODIGOAND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADAAND PFUNC.CODFUNCAO = PFUNCAO.CODIGOAND PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE
Fábio Delboni - [email protected]
Apelido de Tabela / Coluna
Veja abaixo o resultado de antes e depois, respectivamente:
Observação: Esta prática é muito utilizada em sql que utilizam funções, veremos adiante o que signifca funções.
Fábio Delboni - [email protected]
Filtros e Parâmetros
No filtro, como o próprio nome sugere, serve para consultar informações no banco de dados, de forma que o resultado, seja apresentado eliminando dados.
O exemplo abaixo, apresenta uma consulta simples; onde está sendo pesquisado funcionários com o salário inferior a 1000.
Fábio Delboni - [email protected]
Filtros e Parâmetros
Vale lembrar que existe diferença entre as comparações:
1)Salário inferior a 1000
2)Salário inferior/inclusive 1000.
Observação: Estas comparações são chamadas “menor”, e “menor ou igual” respectivamente.
Fábio Delboni - [email protected]
Filtros e Parâmetros
Veja abaixo o símbolo que representa cada operador e como são chamados, respectivamente:
= Igual
<> Diferente
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
LIKE Like, pesquisa dentro do conteúdo de um campo alfanumérico
NOT LIKE este retorna o que não satisfaz a condição Like.
BETWEAN É usado para comparar um campo com um intervalor de valores ou datas.
IN In, serve para comparar um campo com valores de uma lista.
NOT IN Este retorna o que não satisfaz a condição In.
Veremos adiante os ultimos 3 comandos “especiais” em maior detalhes.
Fábio Delboni - [email protected]
Filtros e Parâmetros
A princípio o comando LIKE tem a mesma função do operador igual; Porém, quando utilizado em conjunto do simbolo de percentual, é possível pesquisar dentro do conteúdo de um campo alfanumérico.
Fábio Delboni - [email protected]
Filtros e Parâmetros
No exemplo abaixo muito semelhante a consulta anterior, pesquisa dentro do campo de código da seção dos funcionários, uma seção que inicia com “01”.
Fábio Delboni - [email protected]
Filtros e Parâmetros
O comando LIKE também pesquisa no final, ou no campo todo, veja os exemplos:
Fábio Delboni - [email protected]
Filtros e Parâmetros
O comando NOT LIKE, inverso ao comando Like, pesquisa os campos que não contém a ocorrência, também sendo possível pesquisar no inicio, no fim ou em todo o campo.
No exemplo abaixo está sendo pesquisado pessoas que não contém no nome a letra “E”.
Fábio Delboni - [email protected]
Filtros e Parâmetros
Em todos filtros apresentados anteriormente, foi utilizado apenas uma condição. Podemos extender o número de condições, ou combinações de condições na mesma sentença SQL, utilizando os operadores lógico, abaixo:
AND, equivalente a “E”, onde para a condição ser verdadeira é necessário satisfazer todas as condições; exemplo: Funcionários ativos “E” Salário menor que R$ 1.000,00.
SELECT *
FROM PFUNC
WHERE CODSITUACAO = 'A'
AND SALARIO < 1000
OR, equivalente a “OU”, onde para a condição ser verdadeira é necessário satisfazer apenas uma das condições; exemplo: Lançamento baixado “OU” Código do cliente igual a F00001.
SELECT CODCFO, STATUSLAN
FROM FLAN
WHERE STATUSLAN = '1' OR CODCFO = 'F00001'
Fábio Delboni - [email protected]
Filtros e Parâmetros
É possível também criar expressões lógica, similar as expressões matemática; veja o exemplo:
Observe que os parenteses, servem para definir a prooridade da expressão.
Fábio Delboni - [email protected]
Filtros e Parâmetros
Os parâmetros, são variáveis preenchidas pelo usuário no momento da execução das sentença SQL, estas variáveis são utilizadas nas condições de uma consulta.
A sintaxe de uma variavel parâmetro é: “:PARAMETRO_TIPO”.
Os parâmetros também possuem tipos, sendo eles:
_D, este refere-se a data.
_S, este refere-se a caracteres alfanumérico.
_N, este refere-se a números inteiros.
_V, este refere-se a valores decimais.
Veja, no exemplo abaixo uma sentença SQL com 2 parâmetros.
SELECT NOME
FROM PFUNC
WHERE CODCOLIGADA = :CODCOLIGADA_N
AND CHAPA = :CHAPA_S
Fábio Delboni - [email protected]
Comando Between
O comando Between serve para comparar um intervalo de valores ou datas.
Podendo ser utilizado no lugar da comum comparação “campo >= inicio e campo <= fim”, veja o exemplo abaixo:
Fábio Delboni - [email protected]
Subconsulta IN
O operador IN, pode ser utilizado para comparar um campo a uma lista de valores.
Veja um exemplo simples abaixo:
Atenção: o comando “OR”, chamado “OU”, é utilizado em expressões lógicas, que será visto com mais detalhes após alguns slides.
Fábio Delboni - [email protected]
Subconsulta IN
A subconsulta IN é composta da comparação de um campo com uma lista de valores, onde esta lista é “alimentada” pelo resultado de uma consulta. Veja o exemplo:
Fábio Delboni - [email protected]
Subconsulta Alias
Um outro tipo de subconsulta é a “subconsulta alias”, que resume-se em criar uma consulta SQL, atribuir um apelido para esta, e tratá-la como se fosse uma tabela ou visão; podendo inclusive relacionar esta com outras tabelas, ou até mesmo com outras subconsultas.
Fábio Delboni - [email protected]
Subconsulta Externa
Também conhecida como “Coluna Subconsulta”, consiste em executar uma consulta em uma coluna da visão, onde nesta subconsulta utiliza parâmetros da consulta externa.
Vejamos 2 exemplos:
Fábio Delboni - [email protected]
Subconsulta Externa
Fábio Delboni - [email protected]
Comando Distinct
O comando Distinct serve para evitar repetição de dados, eliminando as redundâncias.
Veja os exemplos:
Fábio Delboni - [email protected]
Agrupando dados – Group By
A princípio o comando “Group By” também elimina a repetição de dados como o comando Distinct.
Fábio Delboni - [email protected]
Funções - Matemáticas
Fábio Delboni - [email protected]
Funções - String
Fábio Delboni - [email protected]
Funções - String
Fábio Delboni - [email protected]
Funções – Data e Hora
Fábio Delboni - [email protected]
Funções – Data e Hora
Fábio Delboni - [email protected]
Funções – Data e Hora
Fábio Delboni - [email protected]
Funções - Conversão
SQL SERVER
-CAST
- CONVERT
ORACLE
-TO_CHAR(CAMPO)
-TO_DATE(STRING,
FORMATAÇÃO)
Fábio Delboni - [email protected]
Funções - Conversão
Fábio Delboni - [email protected]
Funções - Conversão
Fábio Delboni - [email protected]
Funções de Agregação
Fábio Delboni - [email protected]
Ordenação – Order By
O comando order by serve para ordenar o resultado.
Fábio Delboni - [email protected]
Ordenação – Order By
Observe abaixo, um exemplo de ordenação decrescente, utilizando o comando “DESC”.
Por padrão a ordenação é a crescente, e este utilizado de forma implícita o comando “ASC” de ordenação acendente.
Fábio Delboni - [email protected]
Ordenação – Order By
Neste exemplo ao invéz de ser utilizado o nome da colunas, está sendo utilizado o número identificador da coluna.
Fábio Delboni - [email protected]
Comando Case When
O comando “CASE” é utilizado para realizar testes no resultado de uma coluna.
É obrigatório uma resposta caso a condição seja verdadeira.
Fábio Delboni - [email protected]
Comando Case When
Neste exemplo foi acrescentado o comando “ELSE”, este é responsável pelo tratamento da coluna caso a condição não seja verdadeira.
Fábio Delboni - [email protected]
Comando Case When
A SQL ao lado, utiliza dentro do resultado de um case, outro segundo comando case.
Esta dinâmica possibilita um tratamente específico para cada condição que fizer-se necessária.
Fábio Delboni - [email protected]
Comando Case When
Em muitas situações podemos diminuir a linha de códigos SQL, abrindo um bloco “CASE”, e realizando todos testes com o comando “WHEN”, e por ultimo fechar o bloco com o comando “END”.
E novamente o “ELSE”, simbolizando o comando senão, que consiste em entrar na condíção quando a mema não for verdadeira.
Fábio Delboni - [email protected]
Comando RowNum do Oracle
O comando RowNum do Oracle , é utilizado como uma variável, e serve para fazer com que uma coluna simbólica, seja como uma coluna de dados.
É comum utilizarmos esta variável para posteriormente fazermos um filtro por faixa de registros, veja o exemplo:
SELECT SALARIO
FROM PFUNC
WHERE ROWNUM = 3
ORDER BY SALARIO DESC
Quando necessitamos de fazer o mesmo filtro, no SQL Server utilizamos uma outra técnica, veja:
SELECT TOP 1 SALARIO FROM(
SELECT TOP 3 SALARIO
FROM PFUNC
ORDER BY SALARIO DESC
)T
ORDER BY SALARIO
Fábio Delboni - [email protected]
Alguns comparativos:
MS SQL SERVER ORACLESUBSTRING(CAMPO,1,5) SUBSTR(CAMPO,1,5)
SELECT GETDATE() SELECT SYSDATE FROM DUAL
DATEPART(DD,DATA) TO_CHAR(DATA,’DD’)
DATEPART(MM,DATA) TO_CHAR(DATA,’MM’)
DATEPART(YYYY,DATA) TO_CHAR(DATA,’YYYY’)
RTRIM(CONVERT(CHAR,DATEPART(YYYY,TMOV.DATA))) +'/'+ RTRIM(CONVERT(CHAR,DATEPART(MM,TMOV.DATA)))
TO_CHAR(DATA,’YYYY/MM’)
SELECT 'TEXTO1' + 'TEXTO2' FROM ... SELECT ‘TEXTO1’ || ‘TEXTO2’ FROM …
SELECT CONVERT(VARCHAR,DATA) FROM.. SELECT TO_CHAR(DATA) FROM…
SELECT CONVERT(FLOAT,… SELECT TO_NUMBER(…
SELECT CONVERT(DATE,… SELECT TO_DATE(…