SQL - Treinamento TOTVS

Post on 21-Oct-2015

425 views 52 download

Transcript of SQL - Treinamento TOTVS

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

CONCEITOS DE BANCO DE DADOS

Exemplo de ligação de tabelas:

Chave primária

Chave estrangeira

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

CONSULTA SIMPLES EM UMA TABELA

Sintaxe de uma consulta SQL:

Agora um exemplo de SELECT, buscando apenas algumas colunas específicas:

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

INTERPRETANDO A GLINKSREL

Visualizando de uma outra forma.

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 - fabio.delboni@totvs.com.br

INTERPRETANDO A GLINKSREL

Não entendeu?Vamos no passo-a-passo!!!

FCFO.CODCOLIGADA

Fábio Delboni - fabio.delboni@totvs.com.br

INTERPRETANDO A GLINKSREL

Não entendeu?Vamos no passo-a-passo!!!

FCFO.CODCOLIGADA = TMOV.CODCOLCFO

Fábio Delboni - fabio.delboni@totvs.com.br

INTERPRETANDO A GLINKSREL

Não entendeu?Vamos no passo-a-passo!!!

FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND

FCFO.CODCFO

Fábio Delboni - fabio.delboni@totvs.com.br

INTERPRETANDO A GLINKSREL

Não entendeu?Vamos no passo-a-passo!!!

FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND

FCFO.CODCFO = TMOV.CODCFO

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Ligando Tabelas / Inner Join

Ligando tabelas pelo comando “WHERE”

Ligando tabelas pelo comando “FROM”

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Consulta com várias tabelas

Passo 1 - ligar a tabela PFUNC com a PSECAO.

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Consulta com várias tabelas

Passo 2 - ligar a tabela PFUNC com a PFUNCAO.

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Consulta com várias tabelas

Passo 3 - ligar a tabela PFUNC com a PCODSITUACAO.

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Filtros e Parâmetros

O comando LIKE também pesquisa no final, ou no campo todo, veja os exemplos:

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Subconsulta Externa

Fábio Delboni - fabio.delboni@totvs.com.br

Comando Distinct

O comando Distinct serve para evitar repetição de dados, eliminando as redundâncias.

Veja os exemplos:

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

Funções - Matemáticas

Fábio Delboni - fabio.delboni@totvs.com.br

Funções - String

Fábio Delboni - fabio.delboni@totvs.com.br

Funções - String

Fábio Delboni - fabio.delboni@totvs.com.br

Funções – Data e Hora

Fábio Delboni - fabio.delboni@totvs.com.br

Funções – Data e Hora

Fábio Delboni - fabio.delboni@totvs.com.br

Funções – Data e Hora

Fábio Delboni - fabio.delboni@totvs.com.br

Funções - Conversão

SQL SERVER

-CAST

- CONVERT

ORACLE

-TO_CHAR(CAMPO)

-TO_DATE(STRING,

FORMATAÇÃO)

Fábio Delboni - fabio.delboni@totvs.com.br

Funções - Conversão

SQL SERVER

Fábio Delboni - fabio.delboni@totvs.com.br

Funções - Conversão

Fábio Delboni - fabio.delboni@totvs.com.br

Funções - Conversão

Fábio Delboni - fabio.delboni@totvs.com.br

Funções de Agregação

Fábio Delboni - fabio.delboni@totvs.com.br

Comando Having

Sem o Having Com o Having

Fábio Delboni - fabio.delboni@totvs.com.br

Union e Union All

Union Union All

Fábio Delboni - fabio.delboni@totvs.com.br

Ordenação – Order By

O comando order by serve para ordenar o resultado.

Fábio Delboni - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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 - fabio.delboni@totvs.com.br

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