SQL - Treinamento TOTVS

83
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 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

Transcript of SQL - Treinamento TOTVS

Page 1: SQL - Treinamento TOTVS

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

Page 2: SQL - Treinamento TOTVS

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

Page 3: SQL - Treinamento TOTVS

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

Page 4: SQL - Treinamento TOTVS

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

Page 5: SQL - Treinamento TOTVS

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.

Page 6: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

CONCEITOS DE BANCO DE DADOS

Exemplo de ligação de tabelas:

Chave primária

Chave estrangeira

Page 7: SQL - Treinamento TOTVS

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.

Page 8: SQL - Treinamento TOTVS

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

Page 9: SQL - Treinamento TOTVS

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

Page 10: SQL - Treinamento TOTVS

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

Page 11: SQL - Treinamento TOTVS

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:

Page 12: SQL - Treinamento TOTVS

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.

Page 13: SQL - Treinamento TOTVS

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.

Page 14: SQL - Treinamento TOTVS

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.

Page 15: SQL - Treinamento TOTVS

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:

Page 16: SQL - Treinamento TOTVS

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:

Page 17: SQL - Treinamento TOTVS

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:

Page 18: SQL - Treinamento TOTVS

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.

Page 19: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

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

Page 20: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

INTERPRETANDO A GLINKSREL

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

FCFO.CODCOLIGADA

Page 21: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

INTERPRETANDO A GLINKSREL

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

FCFO.CODCOLIGADA = TMOV.CODCOLCFO

Page 22: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

INTERPRETANDO A GLINKSREL

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

FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND

FCFO.CODCFO

Page 23: SQL - Treinamento TOTVS

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

Page 24: SQL - Treinamento TOTVS

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.

Page 25: SQL - Treinamento TOTVS

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:

Page 26: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Ligando Tabelas / Inner Join

Ligando tabelas pelo comando “WHERE”

Ligando tabelas pelo comando “FROM”

Page 27: SQL - Treinamento TOTVS

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.

Page 28: SQL - Treinamento TOTVS

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)

Page 29: SQL - Treinamento TOTVS

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.

Page 30: SQL - Treinamento TOTVS

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.

Page 31: SQL - Treinamento TOTVS

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 (+) .

Page 32: SQL - Treinamento TOTVS

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:

Page 33: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Consulta com várias tabelas

Passo 1 - ligar a tabela PFUNC com a PSECAO.

Page 34: SQL - Treinamento TOTVS

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

Page 35: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Consulta com várias tabelas

Passo 2 - ligar a tabela PFUNC com a PFUNCAO.

Page 36: SQL - Treinamento TOTVS

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

Page 37: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Consulta com várias tabelas

Passo 3 - ligar a tabela PFUNC com a PCODSITUACAO.

Page 38: SQL - Treinamento TOTVS

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

Page 39: SQL - Treinamento TOTVS

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 )

Page 40: SQL - Treinamento TOTVS

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:

Page 41: SQL - Treinamento TOTVS

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

Page 42: SQL - Treinamento TOTVS

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

Page 43: SQL - Treinamento TOTVS

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.

Page 44: SQL - Treinamento TOTVS

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.

Page 45: SQL - Treinamento TOTVS

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.

Page 46: SQL - Treinamento TOTVS

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.

Page 47: SQL - Treinamento TOTVS

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.

Page 48: SQL - Treinamento TOTVS

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”.

Page 49: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Filtros e Parâmetros

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

Page 50: SQL - Treinamento TOTVS

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”.

Page 51: SQL - Treinamento TOTVS

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'

Page 52: SQL - Treinamento TOTVS

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.

Page 53: SQL - Treinamento TOTVS

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

Page 54: SQL - Treinamento TOTVS

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:

Page 55: SQL - Treinamento TOTVS

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.

Page 56: SQL - Treinamento TOTVS

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:

Page 57: SQL - Treinamento TOTVS

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.

Page 58: SQL - Treinamento TOTVS

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:

Page 59: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Subconsulta Externa

Page 60: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Comando Distinct

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

Veja os exemplos:

Page 61: SQL - Treinamento TOTVS

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.

Page 62: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - Matemáticas

Page 63: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - String

Page 64: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - String

Page 65: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções – Data e Hora

Page 66: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções – Data e Hora

Page 67: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções – Data e Hora

Page 68: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - Conversão

SQL SERVER

-CAST

- CONVERT

ORACLE

-TO_CHAR(CAMPO)

-TO_DATE(STRING,

FORMATAÇÃO)

Page 69: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - Conversão

SQL SERVER

Page 70: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - Conversão

Page 71: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções - Conversão

Page 72: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Funções de Agregação

Page 73: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Comando Having

Sem o Having Com o Having

Page 74: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Union e Union All

Union Union All

Page 75: SQL - Treinamento TOTVS

Fábio Delboni - [email protected]

Ordenação – Order By

O comando order by serve para ordenar o resultado.

Page 76: SQL - Treinamento TOTVS

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.

Page 77: SQL - Treinamento TOTVS

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.

Page 78: SQL - Treinamento TOTVS

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.

Page 79: SQL - Treinamento TOTVS

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.

Page 80: SQL - Treinamento TOTVS

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.

Page 81: SQL - Treinamento TOTVS

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.

Page 82: SQL - Treinamento TOTVS

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

Page 83: SQL - Treinamento TOTVS

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