Escolar Documentos
Profissional Documentos
Cultura Documentos
ETAPAS:
1) Conceitos de banco de dados
2) Sentença SQL 12) Comando Distinct
1) Dicionário de dados 13) Agrupando Dados
2) Consulta simples em uma tabela 14) Funções
3) Interpretando a GLINKSREL 1) Matemática
4) Ligando tabelas / Inner Join 2) String
5) Outher Join – Left / Right 3) Conversão
6) Consulta com várias tabelas 15) Funções de Agregação
7) Apelido de tabela / coluna 16) Comando Having
8) Filtros e parâmetros 17) Union e Union All
9) Comando Between 18) Ordenação
10) Subconsulta In 19) Comando Case When
11) Subconsulta Alias / Externa 20) Comando RowNum do Oracle
O que é um SGBD?
SGBD
TABELAS
Servem para armazenar dados semelhantes, e/ou categorizá-los, sendo constituída por linhas e
colunas.
Campos
Registros
ou Tuplas
• 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.
Chave primária
Chave estrangeira
• É 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
SGBD
SQL
BD
• É 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
SGBD
SQL
BD
• É 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.
SGBD
SQL
BD
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.
O comando SELECT é responsável pelas consultas no banco de dados, sendo o único comando
utilizado em planilhas, gerador e nos cubos.
Existe uma tabela chamada GLINKSREL que contém todas as tabelas e suas ligações, composta
por apenas 4 colunas, conforme exemplo abaixo:
Existe uma tabela chamada GLINKSREL que contém todas as tabelas e suas ligações, composta
por apenas 4 colunas, conforme exemplo abaixo:
1º
MASTERTABLE CHILDTABLE MASTERFIELD CHILDFIELD
FCFO TMOV CODCOLIGADA, CODCFO CODCOLCFO, CODCFO
2º
MASTERTABLE.MASTERFIELD CHILDTABLE.CHILDFIELD
FCFO.CODCOLIGADA, FCFO.CODCFO TMOV.CODCOLCFO, TMOV.CODCFO
3º
FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND
FCFO.CODCFO = TMOV.CODCFO
Não entendeu?
Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA
Não entendeu?
Vamos no passo-a-passo!!!
FCFO.CODCOLIGADA = TMOV.CODCOLCFO
Não entendeu?
Vamos no passo-a-passo!!!
Não entendeu?
Vamos no passo-a-passo!!!
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.
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.
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.
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)
Abaixo o mesmo Outer Join, relacionando tabelas pelo Where para SGBD SQL SERVER.
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.
Este exemplo é para SQL Server, em Oracle basta substituir * por (+) .
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:
PFUNC
PSECAO PCODSITUACAO
PFUNCAO
PFUNC
PSECAO PCODSITUACAO
PFUNCAO
SELECT *
FROM PFUNC, PSECAO
WHERE
PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA
AND PFUNC.CODSECAO = PSECAO.CODIGO
PFUNC
PSECAO PCODSITUACAO
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
PFUNC
PSECAO PCODSITUACAO
PFUNCAO
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
SELECT *
FROM PFUNC
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:
Também é possível criar um alias (apelido) para uma coluna de maneira semelhande a criação de
alias para tabelas.
SELECT
PFUNC.CHAPA REGISTRO,
PFUNC.NOME FUNCIONARIO,
PSECAO.DESCRICAO SECAO,
PFUNCAO.NOME FUNCAO,
PCODSITUACAO.DESCRICAO SITUACAO
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
Observação: Esta prática é muito utilizada em sql que utilizam funções, veremos adiante o que
signifca funções.
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.
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.
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.
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”.
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”.
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'
É possível também criar expressões lógica, similar as expressões matemática; veja o exemplo:
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”.
O operador IN, pode ser utilizado para comparar um campo a uma lista de valores.
Veja um exemplo simples abaixo:
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:
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.
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:
A princípio o comando “Group By” também elimina a repetição de dados como o comando Distinct.
SQL SERVER
-CAST
- CONVERT
ORACLE
-TO_CHAR(CAMPO)
-TO_DATE(STRING,
FORMATAÇÃO)
SQL SERVER
Por padrão a ordenação é a crescente, e este utilizado de forma implícita o comando “ASC” de
ordenação acendente.
Neste exemplo ao invéz de ser utilizado o nome da colunas, está sendo utilizado o número
identificador da coluna.
E novamente o “ELSE”,
simbolizando o comando senão,
que consiste em entrar na
condíção quando a mema não for
verdadeira.
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
DATEPART(DD,DATA) TO_CHAR(DATA,‟DD‟)
DATEPART(MM,DATA) TO_CHAR(DATA,‟MM‟)
DATEPART(YYYY,DATA) TO_CHAR(DATA,‟YYYY‟)