ETAPAS:
1) 2) Conceitos de banco de dados Sentena SQL 1) 2) 3) 4) 5) 6) 7) 8) 9) Dicionrio de dados Consulta simples em uma tabela Interpretando a GLINKSREL Ligando tabelas / Inner Join Outher Join Left / Right Consulta com vrias tabelas Apelido de tabela / coluna Filtros e parmetros Comando Between 12) Comando Distinct 13) Agrupando Dados
14) Funes
1) 2) 3) Matemtica String Converso
15) Funes de Agregao 16) Comando Having 17) Union e Union All 18) Ordenao 19) Comando Case When
10) Subconsulta In
Fbio Delboni
fabio.delboni@totvs.com.br
TAB1
TAB1
BD1
BD2
BD3
BD4
SGBD
Fbio Delboni fabio.delboni@totvs.com.br
Uma coluna refere-se a um campo, tambm conhecido por atributo Cada linha representa um registro, tambm conhecido por tupla
Campos
Registros ou Tuplas
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Chave estrangeira
Fbio Delboni
fabio.delboni@totvs.com.br
Nas tabelas que necessitam de um cadastro separado por coligada, utilizado uma coluna para indicar a qual coligada o registro pertence.
Fbio Delboni
fabio.delboni@totvs.com.br
SGBD SQL
BD
Fbio Delboni
fabio.delboni@totvs.com.br
SGBD SQL
BD
Fbio Delboni
fabio.delboni@totvs.com.br
SGBD SQL
BD
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
DICIONRIO DE DADOS
Outra forma rastrear pela tabela GCAMPOS, utilizada pelo gerador como um dicionrio de dados. Contendo o nome das tabelas e os campos com suas descries.
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
Como eu sei qual a ligao das tabelas?
Existe uma tabela chamada GLINKSREL que contm todas as tabelas e suas ligaes, composta por apenas 4 colunas, conforme exemplo abaixo:
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
Como eu sei qual a ligao das tabelas?
Existe uma tabela chamada GLINKSREL que contm todas as tabelas e suas ligaes, composta por apenas 4 colunas, conforme exemplo abaixo:
Fbio 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 cdigo do cliente, e assim feita a ligao destas duas tabelas.
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
Visualizando de uma outra forma.
1
MASTERTABLE
FCFO
CHILDTABLE
TMOV
MASTERFIELD
CODCOLIGADA, CODCFO
CHILDFIELD
CODCOLCFO, CODCFO
2
MASTERTABLE.MASTERFIELD
FCFO.CODCOLIGADA, FCFO.CODCFO
CHILDTABLE.CHILDFIELD
TMOV.CODCOLCFO, TMOV.CODCFO
3
FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND
FCFO.CODCFO = TMOV.CODCFO
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
No entendeu? Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
No entendeu? Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA = TMOV.CODCOLCFO
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
No entendeu? Vamos no passo-a-passo!!!
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
No entendeu? Vamos no passo-a-passo!!!
Fbio Delboni
fabio.delboni@totvs.com.br
INTERPRETANDO A GLINKSREL
Existem tabelas com mais de uma possibilidade de ligao, para estes casos, deve ser identificado qual a linha que contm a ligao correta.
Quando um relatrio no feito por consulta SQL, mas feito com campos da base, o sistema identifica as ligaes entre as tabelas, e na ocorrncia de mais de uma ligao, exige que o usurio selecione a ligao correta, para poder salvar o relatrio.
Fbio Delboni
fabio.delboni@totvs.com.br
SELECT [DISTINCT] <CAMPOS> FROM <TABELAS> <JOINS> WHERE <CONDIES> GROUP BY <CAMPOS> ORDER BY <CAMPOS>
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
DICA: Mesmo que o cliente tenha apenas uma coligada, utilize as ligaes da maneira correta, se a tabela usa chave composta, ligue os dois campos.
Fbio Delboni fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Este exemplo para SQL Server, em Oracle basta substituir * por (+) .
Fbio Delboni
fabio.delboni@totvs.com.br
PFUNC
PSECAO
PCODSITUACAO
PFUNCAO
Fbio Delboni
fabio.delboni@totvs.com.br
PFUNC
PSECAO
PCODSITUACAO
PFUNCAO
Fbio Delboni
fabio.delboni@totvs.com.br
SELECT * FROM PFUNC, PSECAO WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO
Fbio Delboni
fabio.delboni@totvs.com.br
PFUNC
PSECAO
PCODSITUACAO
PFUNCAO
Fbio Delboni
fabio.delboni@totvs.com.br
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
Fbio Delboni
fabio.delboni@totvs.com.br
PFUNC
PSECAO
PCODSITUACAO
PFUNCAO
Fbio Delboni
fabio.delboni@totvs.com.br
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
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
SELECT PFUNC.CHAPA REGISTRO, PFUNC.NOME FUNCIONARIO, PSECAO.DESCRICAO SECAO, PFUNCAO.NOME FUNCAO, PCODSITUACAO.DESCRICAO SITUACAO 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
Fbio Delboni
fabio.delboni@totvs.com.br
Observao: Esta prtica muito utilizada em sql que utilizam funes, veremos adiante o que signifca funes.
Fbio Delboni fabio.delboni@totvs.com.br
Filtros e Parmetros
No filtro, como o prprio nome sugere, serve para consultar informaes no banco de dados, de forma que o resultado, seja apresentado eliminando dados. O exemplo abaixo, apresenta uma consulta simples; onde est sendo pesquisado funcionrios com o salrio inferior a 1000.
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
Vale lembrar que existe diferena entre as comparaes: 1) 2) Salrio inferior a 1000 Salrio inferior/inclusive 1000.
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
Veja abaixo o smbolo que representa cada operador e como so chamados, respectivamente: = <> < <= > >= LIKE Igual Diferente Menor Menor ou igual Maior Maior ou igual Like, pesquisa dentro do contedo de um campo alfanumrico
Filtros e Parmetros
A princpio o comando LIKE tem a mesma funo do operador igual; Porm, quando utilizado em conjunto do simbolo de percentual, possvel pesquisar dentro do contedo de um campo alfanumrico.
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
No exemplo abaixo muito semelhante a consulta anterior, pesquisa dentro do campo de cdigo da seo dos funcionrios, uma seo que inicia com 01.
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
O comando LIKE tambm pesquisa no final, ou no campo todo, veja os exemplos:
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
O comando NOT LIKE, inverso ao comando Like, pesquisa os campos que no contm a ocorrncia, tambm sendo possvel pesquisar no inicio, no fim ou em todo o campo. No exemplo abaixo est sendo pesquisado pessoas que no contm no nome a letra E.
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
Em todos filtros apresentados anteriormente, foi utilizado apenas uma condio. Podemos extender o nmero de condies, ou combinaes de condies na mesma sentena SQL, utilizando os operadores lgico, abaixo: AND, equivalente a E, onde para a condio ser verdadeira necessrio satisfazer todas as condies; exemplo: Funcionrios ativos E Salrio menor que R$ 1.000,00. SELECT * FROM PFUNC WHERE CODSITUACAO = 'A' AND SALARIO < 1000 OR, equivalente a OU, onde para a condio ser verdadeira necessrio satisfazer apenas uma das condies; exemplo: Lanamento baixado OU Cdigo do cliente igual a F00001. SELECT CODCFO, STATUSLAN FROM FLAN WHERE STATUSLAN = '1' OR CODCFO = 'F00001'
Fbio Delboni fabio.delboni@totvs.com.br
Filtros e Parmetros
possvel tambm criar expresses lgica, similar as expresses matemtica; veja o exemplo:
Fbio Delboni
fabio.delboni@totvs.com.br
Filtros e Parmetros
Os parmetros, so variveis preenchidas pelo usurio no momento da execuo das sentena SQL, estas variveis so utilizadas nas condies de uma consulta. A sintaxe de uma variavel parmetro : :PARAMETRO_TIPO.
Os parmetros tambm possuem tipos, sendo eles: _D, este refere-se a data. _S, este refere-se a caracteres alfanumrico. _N, este refere-se a nmeros inteiros. _V, este refere-se a valores decimais.
Comando Between
O comando Between serve para comparar um intervalo de valores ou datas. Podendo ser utilizado no lugar da comum comparao campo >= inicio e campo <= fim, veja o exemplo abaixo:
Fbio 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: Ateno: o comando OR, chamado OU, utilizado em expresses lgicas, que ser visto com mais detalhes aps alguns slides.
Fbio Delboni
fabio.delboni@totvs.com.br
Subconsulta IN
A subconsulta IN composta da comparao de um campo com uma lista de valores, onde esta lista alimentada pelo resultado de uma consulta. Veja o exemplo:
Fbio 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 viso; podendo inclusive relacionar esta com outras tabelas, ou at mesmo com outras subconsultas.
Fbio Delboni
fabio.delboni@totvs.com.br
Subconsulta Externa
Tambm conhecida como Coluna Subconsulta, consiste em executar uma consulta em uma coluna da viso, onde nesta subconsulta utiliza parmetros da consulta externa. Vejamos 2 exemplos:
Fbio Delboni
fabio.delboni@totvs.com.br
Subconsulta Externa
Fbio Delboni
fabio.delboni@totvs.com.br
Comando Distinct
O comando Distinct serve para evitar repetio de dados, eliminando as redundncias. Veja os exemplos:
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - Matemticas
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - String
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - String
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - Converso
SQL SERVER -CAST
- CONVERT
ORACLE -TO_CHAR(CAMPO)
-TO_DATE(STRING, FORMATAO)
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - Converso
SQL SERVER
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - Converso
Fbio Delboni
fabio.delboni@totvs.com.br
Funes - Converso
Fbio Delboni
fabio.delboni@totvs.com.br
Funes de Agregao
Fbio Delboni
fabio.delboni@totvs.com.br
Comando Having
Sem o Having Com o Having
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Ordenao Order By
O comando order by serve para ordenar o resultado.
Fbio Delboni
fabio.delboni@totvs.com.br
Ordenao Order By
Observe abaixo, um exemplo de ordenao decrescente, utilizando o comando DESC.
Por padro a ordenao a crescente, e este utilizado de forma implcita o comando ASC de ordenao acendente.
Fbio Delboni
fabio.delboni@totvs.com.br
Ordenao Order By
Neste exemplo ao invz de ser utilizado o nome da colunas, est sendo utilizado o nmero identificador da coluna.
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
Esta dinmica possibilita um tratamente especfico para cada condio que fizer-se necessria.
Fbio Delboni
fabio.delboni@totvs.com.br
Fbio Delboni
fabio.delboni@totvs.com.br
WHERE ROWNUM = 3
ORDER BY SALARIO DESC Quando necessitamos de fazer o mesmo filtro, no SQL Server utilizamos uma outra tcnica, veja: SELECT TOP 1 SALARIO FROM( SELECT TOP 3 SALARIO FROM PFUNC ORDER BY SALARIO DESC )T ORDER BY SALARIO
Fbio Delboni
fabio.delboni@totvs.com.br
Alguns comparativos:
MS SQL SERVER
SUBSTRING(CAMPO,1,5) SELECT GETDATE() DATEPART(DD,DATA) DATEPART(MM,DATA) DATEPART(YYYY,DATA) RTRIM(CONVERT(CHAR,DATEPART(YYYY,TMOV.DATA))) +'/'+ RTRIM(CONVERT(CHAR,DATEPART(MM,TMOV.DATA))) SELECT 'TEXTO1' + 'TEXTO2' FROM ... SELECT CONVERT(VARCHAR,DATA) FROM.. SELECT CONVERT(FLOAT, SELECT CONVERT(DATE,
ORACLE
SUBSTR(CAMPO,1,5) SELECT SYSDATE FROM DUAL TO_CHAR(DATA,DD) TO_CHAR(DATA,MM) TO_CHAR(DATA,YYYY) TO_CHAR(DATA,YYYY/MM)
SELECT TEXTO1 || TEXTO2 FROM SELECT TO_CHAR(DATA) FROM SELECT TO_NUMBER( SELECT TO_DATE(
Fbio Delboni
fabio.delboni@totvs.com.br