Manual SQL para usuários

Propaganda
MANUAL DO USUÁRIO
SQL
C O M A N D O S
B Á S I C O S
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
2 de 27
ÍNDICE
1.
2.
3.
4.
5.
6.
Introdução ....................................................................................................................................... 3
Seleção de Dados ........................................................................................................................... 4
Manipulando Dados ...................................................................................................................... 12
Tabelas e Estrutura de dados ....................................................................................................... 16
Executando Cálculos com Dados .................................................................................................. 17
Mostrando dados de múltiplas tabelas .......................................................................................... 26
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
3 de 27
1. Introdução
O presente trabalho visa orientar o consultor a utilizar os comandos básicos do SQL e SQL*PLUS
Este manual está definido em tópicos, conforme descrito abaixo:


Mostrar diferenças entre SQL e SQL*PLUS;
Comandos SQL;
Este capítulo mostrará como criar, acessar e manipular o Oracle utilizando o SQL (Structured Query Languague ) e
o SQL*Plus que é um software de propriedade da Oracle Corporation.
Escopo do SQL e SQL*PLUS
O SQL é uma linguagem para comunicação de qualquer ferramenta ou aplicação com o Oracle Server.
O SQL*PLUS é uma ferramenta Oracle que executa comandos SQL. O mesmo não é uma extensão do SQL.
SQL
O SQL trabalha com um buffer que guarda apenas um comando por vez. Estes comandos podem ser editados no
SQL*PLUS.
Comando SQL  Buffer SQL
Tarefas que podemos fazer com o SQL:



Selecionar dados de uma Base de Dados;
Adicionar, modificar e remover dados.
Criar, modificar, e remover Estruturas de dados (tabelas por exemplo).
Comandos mais utilizados.
Para seleção de dados:
SELECT
Para manipulação de dados:
INSERT
UPDATE
DELETE
COMMIT
ROLBACK
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
4 de 27
2. Seleção de Dados
O processo de seleção de dados (SELECT) aparece na fase de produção no ciclo de vida de desenvolvimento de
um sistema .
Entrando no SQL*PLUS
Para se “logar” no SQL*PLUS você deve ser um usuário de banco de Oracle, ou seja, possuir um nome DE
USUÁRIO E SENHA.
Mostrando a estrutura de uma tabela
Para mostrar a estrutura de uma tabela ,ou seja, suas colunas e características das mesmas, basta digitar o
comando:
SQL> DESC nome da tabela.
Exemplo:
SQL > DESC SAFX07
A coluna NULL mostra se deve ser preenchido algum valor nesta coluna, caso um registro seja inserido na tabela.
Mostrando dados com o comando SELECT
A função do comando SELECT é buscar e mostrar dados armazenados, em forma de tabelas, dentro do Banco de
Dados.
SINTAXE:
SELECT colunas
FROM nome da tabela
WHERE condições
ORDER BY expresssão
Onde:
SELECT - clausula que especifica quais colunas, expressões ou constantes serão lidas.
FROM – clausulas que especifica qual (is) tabela(s) possuem estas colunas.
WHERE – clausula que especifica critérios de seleção de linhas (opcional), se não colocada mostrará todos os
dados da tabela.
ORDER BY – clausula que dita a ordem que os dados devem ser mostrados. (opcional).
Mostrando todos os dados de uma tabela:
SQL> SELECT * FROM nome da tabela
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
5 de 27
Exemplo: SELECT * FROM SAFX07;
Para selecionar colunas em especifico:
SINTAXE:
SELECT nome da coluna1, nome da coluna 2, ...
FROM nome da tabela
Exemplo:
SQL> SELECT cod_empresa, cod_estab, movto_e_s FROM safx07;
Mostrando valores distintos:
Uma coluna pode possuir vários valores repetidos, se desejarmos ver estes valores sem repetição basta
adicionarmos antes do nome da coluna a clausula DISTINCT.
SINTAXE:
SELECT [DISTINCT] nome da coluna 1, nome da coluna 2
FROM nome da tabela
Exemplo:
SQL> SELECT DISTINCT
cod_empresa FROM safx07;
Utilizando Alias (apelidos) em colunas
Dentro do comando SELECT podemos substituir (só na saída do resultado) o cabeçalho da coluna. Para isto basta
inserir na frente do nome da coluna o alias (apelido) desejado.
Exemplo:
SQL>
SELECT DISTINCT cod_empresa código_empresa, cod_estab código_estabelecimento
FROM safx07;
CODIGO_EMPRESA
001
CODIGO_ESTABELECIMENTO
AFT
OSA
OBS: Quando você desejar que a escrita saia como você digitou, ou se existirem espaço em branco entre as
palavras, o alias deve ser colocado entre “aspas duplas”. Caso contrario o SQL*PLUS utiliza o default.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
6 de 27
Clausula WHERE
A clausula WHERE, como explicado anteriormente, serve para selecionarmos linhas em uma tabela de acordo com
a condição estabelecida.
Sintaxe:
SELECT {* [ nome da coluna] }
FROM nome da tabela
WHERE condição
Esta condição pode ser, por exemplo, cod_empresa = 001 ou cod_estab <> ‘AFT ““.
A tabela abaixo apresenta os operadores de comparação que podem ser utilizados na clausula WHERE.
=
<>
IGUAL A
DIFERENTE DE
>
<
<=
BETWEEN ... AND ...
NOT BETWEEN … AND
IN(lista)
NOT IN
LIKE
IS NULL
IS NOT NULL
MAIOR QUE
MENOR QUE
MENOR IGUAL
ENTRE DOIS VALORES
FOR A DA FAIXA ESTABELECIDA
Igual a um dos valores da lista
DIFERENTE DOS VALORES DA LISTA
SUPRESSÃO DE CARACTERES
VALORES NULOS
Valores diferentes de nulo
A seguir mostraremos cada condição:
Igual (=)
Retorna as linhas onde os valores de uma coluna são iguais aos estabelecidos.
Exemplo:
SQL> SELECT cod_empresa, cod_estab
WHERE cod_empresa = ‘001’;
from safx07
Para comparações com valores em caracteres devemos tomar o cuidado de descrever o valor tal como foi
armazenado, alem de colocar este valor entre ‘aspas simples’.
Quando comparamos colunas que armazenam datas devemos respeitar a máscara default do ORACLE que é DDMON-YYYY.
Exemplo com data:
SQL> SELECT data_saida_rec from x07_doctor_fiscal where data_saida_rec = ’01-jan-2000’ ;
Os valores da data também devem estar entre ‘aspas simples’.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Diferente de (<>):
Retorna as linhas com valores diferentes do valor estipulado na clausula WHERE.
SELECT cod_empresa, cod_estab
WHERE cod_empresa <> ‘001’;
from safx07
Maior que (>)
Retorna linhas que possuam valores maiores que o estipulado na coluna envolvida na clausula WHERE.
Exemplo:
SQL> SELECT cod_empresa, cod_estab, num_docfis
FROM safx07
WHERE vlr_contabil >
1500 ;
Podemos comparar data e caracteres também.
Maior ou igual a (> =)
Retorna linhas que possuam valores maior ou igual ao determinado.
SQL> SELECT cod_empresa, cod_estab from safx07
WHERE
vlr_contabil >= 10000;
Menor que (<):
Retorna linhas que possuam valores menores que o estabelecido.
Exemplo:
SELECT cod_empresa, cod_estab from x07_docto_fiscal
WHERE data_saida_rec < ’01-jan-2000’;
Menor igual a ( < = )
Retorna linhas que possuam valores, na coluna envolvidos, menores ou iguais ao valor de comparação.
SQL> SELECT cod_empresa, cod_estab, num_docfis from x07_docto_fiscal
WHERE
data_saída_rec <= ’01-jan-2000’;
Entre dois valores ( BETWEEN ... AND ... )
Todas as linhas que possuam valores dentro da faixa determinada serão listadas.
Exemplo :
SQL > SELECT
WHERE
cod_empresa, cod_estab from x07_docto_fiscal
data_saida_rec between ’01-jan-2000’ and ’31-jan-2000’ ;
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Página
7 de 27
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
8 de 27
Todas as NF’s emitidas entre as datas listadas na clausula WHERE serão listadas.
Fora da faixa estabelecida (NOT BETWEEN... AND...):
Retorna todas as linhas que se encontram fora da faixa discriminada na cláusula WHERE.
SQL> SELECT
WHERE
cod_empresa, cod_estab
num_docfis NOT BETWEEN
from safx07
‘101’ and ‘150’ ;
Igual a um dos valores da lista ( IN (lista)):
Usando o comparador IN na cláusula WHERE, podemos determinar valores de comparação.
SQL> SELECT
WHERE
AND
cod_empresa, cod_estab from safx07
cod_empresa = ‘001’
cod_estab in ( ‘AFT’ , ‘OSA’) ;
Todas as NF’s que pertençam à empresa 001 e todos os estabelecimentos com código igual a um dos valores da
lista serão mostrados.
Diferente dos valores da lista ( NOT IN ( lista) ) :
Retorna as linhas que possuem valores diferentes dos valores descritos na lista.
SQL> SELECT cod_empresa, cod_estab
WHERE
AND
from safx07
cod_empresa = ‘001’
cod_estab not in ( ‘AFT’, ‘OSA’);
Todas as NF’s que não pertençam aos estabelecimentos serão listados.
Supressão de caracteres (LIKE)
Para mostrar linhas que possuem parte dos valores comuns, devemos utilizar o operador LIKE. Este operador pode
ter um dos dois símbolos listados abaixo:
% Qualquer número de caracteres (análogo ao * do DOS)
_ Um único caráter (análogo ao ? do DOS)
SQL > SELECT
*
FROM safx01
WHERE cod_conta like '089.0001.1101%'
;
Podemos utilizar também em datas:
SQL >
SELECT * FROM x07_docto_fiscal
WHERE data_saida_rec like
'%-FEB-02'
;
Todas as NF’s com data de Fevereiro de 2002 serão listados.
O exemplo abaixo utiliza o outro símbolo ( _ ) .
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
9 de 27
Exemplo:
Listar os funcionários que o sobrenome começa com a letra ‘S’, e termine com a letra ‘h’ e possua 5 letras no
nome.
SQL> Select last_name
FROM s_emp
WHERE last_name LIKE
‘S_____h’;
Obs: Podemos comparar os dois símbolos em uma mesma comparação.
Valores nulos ( IS NOT NULL)
As colunas que se encontram vazias, para o banco de dados elas possuem valores chamadas NULL. Este valor
possui características específicas que geram a necessidade de comando particular para estes casos.
Se desejarmos visualizar as linhas onde uma determinada coluna está vazia devemos utilizar o IS NULL. Veja no
exemplo abaixo.
Exemplo:
SQL> SELECT *
FROM safx08 WHERE data_fiscal IS NULL;
O exemplo acima mostrará todas as NF’s que não possuem data fiscal relacionados.
Valores diferentes de NULL ( IS NOT NULL)
Da mesma forma poderíamos visualizar só as linhas que possuem dados ( quaisquer ) em uma coluna.
Exemplo:
SQL > SELECT *
FROM safx04
WHERE cod_fis_jur
IS NOT NULL;
Complexidade nas condições
A cláusula WHERE pode ter mais que uma condição no mesmo comando. Para isto incluiremos os operados AND
e OR onde:
AND mostra a linha se todas as condições subpostas no AND são verdadeiros.
OR mostra a linha se uma das condições da cláusula for verdadeiras.
Exemplo:
SQL > SELECT cod_emp, cod_estab
2
3
4
FROM
WHERE
AND
SAFX07
cod_empresa = '001'
cod_estab
= 'RJ0015' ;
Apenas as NF’s da empresa 001 e estabelecimento RJ0015 serão listados.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
10 de 27
Exemplo:
SQL> SELECT *
FROM safx07
AND cod_empresa = ‘001’
OR
cod_fis_jur = ‘1’ ;
Apenas NF’s que pertençam à empresa 001 ou código física jurídica = 1 (mesmo de outras empresas) serão
listadas.
A combinação de duas ou mais condições de busca obedecem a uma regra de procedentes. O resultado da
pesquisa depende desta ordem.
Ordem
Operador
Todos os operadores ( = , < , > , between, ...)
AND
OR
Para quebrar esta precedência, basta utilizar parênteses.
Exemplo:
SQL> SELECT nome, salario, depto
FROM
WHERE
emp
salário >= 1000 and ( depto =
44 or depto = 42) ;
Neste caso apenas funcionários do departamento 44 e 42 com salário maior ou igual a 1000 serão listados.
OBS: Teste o exemplo acima retirando os parênteses.
Ordenação
A ordenação de um resultado não influencia na ordem de gravação dos dados.
Podemos definir dois sentidos de ordenação ascendentes e descendentes.
A cláusula utilizada para ordenação é ORDER BY.
Sintaxe:
SELECT { * [ nome da coluna ] }
FROM nome da tabela
WHERE condição ( opcional)
ORDER BY nome da coluna ASC
Exemplo:
SQL> SELECT razao_social ,
FROM
WHERE
ORDER
data_x04
safx04
data_x04 = '20000101'
BY razao_social ;
Razao_social
data_atualizacao
ABCD Contabilidade
Beta Comunicações
Telesp Celular
Exemplo:
01-jan-2002
11-feb-2002
31-mar-2002
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
11 de 27
SQL> SELECT
razao_social , data_x04
FROM
safx04
WHERE
data_x04 = '20000101'
ORDER BY razao_social DESC;
Razao_social
data_atualizacao
Telesp Celular
Beta Comunicações
ABCD Contabilidade
31-mar-2002
11-feb-2002
01-jan-2002
OBS1: Note que apenas o operador ascendente deve ser explicitado.
OBS2: Não é necessária a coluna utilizada no ORDER BY estar no SELECT.
Quando utilizamos mais que uma coluna no ORDER BY o resultado é dado em função do subconjunto utilizado.
Exercícios:
Tabela: SAFX01
Selecionar conta, indicador (débito / crédito) e valor
1)
2)
3)
4)
Onde valor maior que 1000
Retornar somente os créditos
Data do lançamento entre 3 e 6 de fevereiro de 2004
Listar somente as contas 5.4.5.01.500 e 2.1.1.03.134
Faça-os separadamente e por último junte os quatro exercícios num só.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
3. Manipulando Dados
Objetivos:





Adicionar registros em uma tabela
Gerar números seqüenciais automaticamente
Modificar um registro existente
Remover um registro de uma tabela
Efetivar mudanças no banco de dados
Introdução
A manipulação de dados consiste de cinco comando básicos. São eles:
INSERT UPDATE
DELETE
COMMIT
ROLLBACK
Insere uma nova linha em uma tabela
Modifica linhas existentes.
Remove linhas de uma tabela
Confirma mudanças no Banco de dados
Descarta mudanças no banco de dados
Inserção de dados:
Para adicionar uma nova linha a uma tabela utilizamos o comando INSERT
Sintaxe:
INSERT INTO nome da tabela [ (nome da coluna [ , nome da coluna , ...]) ]
VALUES ( valor1, [, valor 2 ...])
Onde os valores são dados correspondentes às colunas da tabela em questão.
Exemplo:
SQL> INSERT INTO empresa (cod_empresa,razao_social, senha)
VALUES ( '099', 'MASTERSAF', 'MSAF');
Obs 1 : Quando as todas as colunas são preenchidas não é necessário listá-las
Obs 2 : Os valores que recebem caracteres ou datas devem estar entre aspas simples.
Quando nem todas as colunas possuem valores definidos devemos descrever os nomes das colunas.
Exemplo:
SQL> INSERT INTO func ( cod_func, nome_func, dt_admissao, cargo, salario)
VALUES ( ‘001’, ‘Adriana’, ’01-ago-1970’, SYSDATE, ‘consultor’, ‘3000’);
Note que a tabela func possui outras colunas não listadas que receberão valor NULL.
O SYSDATE é uma função que retorna a data corrente do sistema.
O valor NULL poder ser explicitado na listagem de valores, se desejado.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Página
12 de 27
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
13 de 27
Exemplo:
SQL> INSERT INTO func ( cod_func, nome_func, dt_admissao, cargo, salario)
VALUES (‘001’, ‘Adriana’, ’01-ago-1970’, SYSDATE, ‘consultor’, NULL);
Note que podemos tanto escrever NULL como utilizar ‘’ (aspas simples).
Porém devemos saber que as aspas simples só servem para colunas tipo caracter ou data.
Modificando dados
Para modificar dados existentes em uma tabela utilizamos o comando UPDATE.
Sintaxe;
UPDATE nome da tabela
SET nome da coluna = novo valor, [ nome da coluna = novo valor ]
WHERE condição
Exemplo:
SQL> UPDATE X07_docto_fiscal
SET
data_saida = ’01-jan-2000’ , serie_docfis = ‘1’
WHERE num_docfis = ‘123’ ;
Exemplo:
SQL> UPDATE X07_docto_fiscal
SET
movto_e_s = ’1’
WHERE data_saída = ’10-jan-2000’ ;
A cláusula WHERE é muito importante neste comando porque ela determina qual ou quais linhas serão
modificadas.
No comando acima todos as NF’s cuja data seja 10 de janeiro terão o valor da coluna movto_e_s modificada para
1.
Exemplo:
SQL> UPDATE SAFX07
SET
movto_e_s
= ’1’
Já neste exemplo todas as linhas da tabelas terão seus valores alterados.
Removendo dados:
Sintaxe:
DELETE FROM nome da tabela
WHERE condição
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Exemplo:
SQL> DELETE FROM
safx07
WHERE NUM_DOCFIS = ‘123’
O registro que possui a coluna NUM_DOCFIS igual a 123 será removido.
Nesse comando a cláusula WHERE é muito importante, pois podemos remover TODOS os dados caso não
colocarmos esta clausula.
Exemplo:
SQL> DELETE FROM safx07;
Todos os dados da tabela safx07 serão removidos.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Página
14 de 27
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
15 de 27
Controle de Transações:
A forma de controlar as transações dentro de um Banco de dados é utilizando os comandos COMMIT e
ROLLBACK. Uma transação é um conjunto de comandos ( insert, delete, updates).
A função do Commit é finalizar a transação corrente tornando permanente todas as modificações.
Já o Rollback apenas finaliza a transação corrente sem transferir para os arquivos de armazenamento as
modificações efetuadas.
COMMIT
Insert....
Insert ...
Delete..
ROLLBACK
Update…
Update
COMMIT
É importante destacar que todo dado modificado durante a transação só será efetivado quando aquela transação
for confirmada (COMMIT).
Estado do dado antes do COMMIT ou ROLLBACK
Os comandos de manipulação de dados inicialmente afetam o database buffer
O usuário corrente (que efetuou a mudança) pode visualizar suas modificações através do comando SELECT.
Outros usuários não enxergam estas modificações.
As linhas afetadas nos comandos”lockadas”. Nenhum outro usuário pode modificar estas linhas.
Estado do dado após um comando COMMIT
As mudanças são retiradas do database buffer e escritas em arquivos.
Todos os usuários podem visualizar as modificações
Os “locks” nas linhas afetadas são liberados.
Estado do dado após um comando ROLLBACK
As modificações são descartadas. Os arquivos continuam como estavam.
Os “locks’ na linha afetadas pelas modificações são liberadas.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
16 de 27
4. Tabelas e Estrutura de dados
Na fase do ciclo de vida de desenvolvimento de um sistema temos a necessidade de criar tabelas para
armazenamento de dados e estruturas auxiliares de acordo com o projeto em questão.
Tabela: Onde podemos depositar com segurança e eficiência, os dados da instituição e dele extrair informações
com a devida presteza e confiabilidade.
Tipos de dados no Oracle:
Ao determinar um tipo de dados, pode-se escolher entre três características básicas: Caracter, Numérico, ou Data.
Estas características são abaixo detalhadas:
CHARACTER
Os datatypes char e varchar2 armazena dados alfanuméricos. Estes datatypes podem também armazenar
caracteres especiais
CHAR – armazena string de caracteres de largura fixa, aceita uma largura de coluna entre 2 e 255 ( em bytes não
caracteres). Espaços em branco são utilizados para preencher o espaço restante, no caso do valor ter tamanho
inferior ao Maximo determinado para aquela coluna.
VARCHAR2, ao contrario, armazena somente os caracteres significativos (o que inclui brancos anteriores à
seqüência de caracteres e entre palavras) até 2048 bytes.
NUMBER
Este tipo de dados armazena números com casas decimais fixas ou flutuantes.
Oracle garante portabilidade de números com uma precisão igual ou inferior a 38 dígitos.
Pode-se determinar um numero total de digito e uma quantidade de decimais.
DATE
Valores em forma de datas. Faixa se 1/1/4712 AC até 31/12/4712 DC
LONG
É similar ao Varchar2, mas com tamanho máximo de 2 gigabytes.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
17 de 27
5. Executando Cálculos com Dados





Executar cálculos com números usando operadores aritméticos e funções
Executar cálculos com datas usando operadores aritméticos e funções
Formatação de números e datas
Concatenação e manipulação de caracteres string
Executar cálculos com função de agrupamento.
Executando cálculos aritméticos
Para modificar e apresentar dados numa variedade de caminhos podemos utilizar as funções aritméticas e
padronização do SQL.
Para executar cálculos com números podemos utilizar os operadores aritméticos. São eles
+ Adição
- Subtração
* Multiplicação
/ Divisão
Os operadores aritméticos podem ser utilizados em quaisquer cláusulas do comando SELECT exceto a cláusula
FROM.
Exemplo:
SQL> SELECT
nome, salario, perc_comissao, salario * perc_comissao / 100 COMISSAO
FROM
funcionario
WHERE
funcao = ‘Vendedor’
AND
salario * perc_comissao / 100 > 200
ORDER BY salario * perc_comissao / 100;
O resultado seria:
NOME
-----------------Nair
Silva
SALARIO
-------------1525
1459
PERC_COMISSAO
------------------------15
17.5
COMISSAO
----------------228.75
253.75
Para utilizar os operadores aritméticos devemos obedecer às regras de precedência.
Regra:
1 Multiplicação e divisão ( * , / )
2 Adição e subtração ( + , - )
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Página
Nome do Arquivo
18 de 27
Manual Usuário SQL
Exemplo:
SQL> SELECT nome , salario
(salario + 100 ) * 12
FROM funcionario
WHERE cod_depto = 41;
NOME
Simone
Andréa
Julio
Silvia
SALARIO
1450
1200
1400
940
“Bonus_anual”
bonus_anual
18600
15600
18000
12480
Funções numéricas
As funções numéricas são padrão SQL e só tem efeito sobre números ou colunas do tipo number.
Funções ROUND
Esta função arredonda valores aos mostrá-los. Note que os valores no Banco de dados continuam intactos.
Exemplo:
SQL> SELECT nome , salario , salario/22, ROUND(salario/22,0)
FROM
WHERE
funcionario
cod_depto =
NOME
50 ;
SALARIO
Simone
Andréa
2500
1550
SALARIO/22
113.636364
70.4545455
ROUND(SALARIO/22,0)
114
70
Função TRUNC:
Esta função mostra o numero truncado
Exemplo:
SQL> SELECT nome , salario , salario/22, TRUNC(salario/22,0)
FROM funcionario
WHERE cod_depto =
NOME
Simone
Andréa
50 ;
SALARIO
2500
1550
SALARIO/22
113.636364
70.4545455
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
TRUNC(SALARIO/22,0)
113
70
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Página
Nome do Arquivo
19 de 27
Manual Usuário SQL
Função MOD:
Esta função determina o valor referente ao resto da divisão de um numero.
Exemplo:
SQL> SELECT
FROM
WHERE
nome , data_final , SYSDATE , SYSDATE – data_final “total”
TRUNC( ( SYSDATE – data_final ) / 7 , 0 ) SEMANAS,
ROUND( MOD ( SYSDATE – data_final)_ , 7 ) , 0 ) DIAS
funcionário
cod_depto = 50 ;
O resultado seria:
NOME
DATA_FINAL
SYSDATE
Simone
Andréa
Junior
Mauro
09-FEB-1992
18-JAN-1992
22-JAN-1992
07-FEB-1992
15-DEC-1993
15-DEC-1993
15-DEC-1993
15-DEC-1993
total
SEMANAS
675.833993
697.833993
693.833993
677.833993
96
99
99
96
DIAS
4
5
1
6
Cálculos com valor NULL
Qualquer calculo efetuado com um valor NULL o resultado será sempre NULL. Portanto para obter algum valor ou
evitar divisão por um valor desconhecido, o que geraria um erro, utilizamos a função NVL que transforma o valor
NULL em um número ou string desejado.
Sintaxe:
NVL ( expr1, expr2 )
Onde:
Expr1 – colunas que contem valores nulos.
Expr2 – valor o qual os valores nulos serão transformados.
Exemplo:
SQL> SELECT
FROM
WHERE
NOME
Andréa
Simone
Junior
Mauro
nome , salario , NVL(perc_comissao,0) PORCENTAGEM,
Salario * NVL( PERC_COMISSAO,0) / 100 COMISSAO
funcionario
salário >= 1500;
SALARIO
2500
1550
1515
1525
PORCENTAGEM
0
0
10
15
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
COMISSAO
0
0
151.5
228.75
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Executando cálculos com datas
Podemos utilizar os operadores aritméticos também nas datas
Expressão valida:
Data + numero – Soma um numero a uma data e devolve uma data posterior
Data – numero – Subtrai um numero da data e devolve uma data anterior.
Data – data – Subtrai uma data de oura data e retorna o numero de dias entre uma data e outra.
Exemplo;
SQL> SELECT
FROM
WHERE
nome , data_final , data_final + 90 “Aprovacao”
funcionario
cod_depto = 42 ;
NOME
Mary
Jorge
Nelson
DATA_FINAL
14-MAY-1990
09-FEB-1991
06-AUG-1991
Aprovacao
12-AUG-1990
10-MAY-1991
04-NOV-1991
Funções de formatação
Elemento
DD
DY
DAY
DDSP
MM
MON
MONTH
Descrição
Dia do mês (1-31)
As três primeiras letras do dia da
semana (FRI)
Dia da semana (MONDAY)
Numero de dias do mês (TWELVE)
Numero do mês (1-12)
As três primeiras letras do mês (JAN)
Nome do mes (JANUARY)
YY
Dois dígitos do ano (03)
YYYY
Quatro dígitos do ano (2003)
HH:MM:SS
Hora minuto e segundos (10:00: 33)
Fm
Supressão de espaços em branco
HH24
TH
AM ou PM
Hora de 0-23
Numero Ordinal
Para hora padrão ericano
Para modificar o formato de datas devemos utilizar a função TO_CHAR.
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Página
20 de 27
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Sintaxe:
TO_CHAR (coluna tipo data, máscara).
Exemplo
SQL> SELECT num_docto,
FROM
WHERE
safx08
cod_empresa
TO_CHAR(data_fiscal, ‘MM/YYYY’) DATA_NF
= ‘001’;
Resultado:
Num_docto
45670
87644
98374
SQL> SELECT
FROM
WHERE
DATA_NF
02/2003
03/2003
05/2003
num_docfis, TO_CHAR( data_fiscal, ‘fmDD MONTH YYYY’) data_nf
safx08
cod_empresa = ‘001’;
Num_docfis
45670
87644
98374
DATA_NF
10 February 2003
23 March 2003
15 May 2003
Concatenação de caracteres string
Para concatenar caracteres string utilizamos o símbolo ||.
Exemplo:
SQL > SELECT
2 FROM
3 WHERE
num_docfis || ‘ - ‘ || serie_docfis nota_fiscal
safx07
cod_empresa = ‘001’;
NOTA_FISCAL
1234 - 1
89777 - 4
83646 - 9
Funções com caracteres
Mostra um caracter string com a primeira letra maiúscula.
Exemplo:
SQL > SELECT INITCAP( nome) nome_alterado , nome
FROM
WHERE
x15_funcionario
municipio LIKE 'RIO%';
NOME_ALTERADO
NOME
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Página
21 de 27
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Luisa Brunet Da Silva
Carla Perez De Oliveira Machado
Maria Das Dores Silva Araujo
LUISA BRUNET DA SILVA
CARLA PEREZ DE OLIVEIRA MACHADO
MARIA DAS DORES SILVA ARAUJO
UPPER
Transforma todos os caracteres em maiúsculos.
Exemplo:
SQL> SELECT
FROM
WHERE
nome
x15_funcionario
UPPER(nome) like '%SILVA%';
NOME
LUISA BRUNET DA SILVA
MARIA DAS DORES SILVA ARAUJO
JOAO PEDRO DA SILVA JUNIOR
SUBSTR
Retorna parte de uma string
Sintaxe
SUBSTR( STRING, m [ , n ] )
Onde:
String: palavra ou coluna do tipo caracter que deve ser cortada.
M : Especifica a posição inicial
N : Especifica quantos carateres serão cortados a partir da posição inicial.
Exemplo:
SQL> SELECT descricao
FROM
WHERE
safx2013
SUBSTR(descricao,1,3) = ‘Cad’;
PRODUTO
----------------Caderno
Cadeira
LENGTH
Retorna o comprimento, em caracteres, de um string.
Exemplo:
SQL> SELECT num_docfis,
FROM
WHERE
NUM_DOCFIS
LENGTH (num_docfis) “num_caracteres”
safx07
cod_empresa = '001’
Num_caracteres
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Página
22 de 27
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
109876
4398764356
Página
23 de 27
6
10
Função de substituição (REPLACE)
Substitui um ou mais caracteres numa string:
SQL> UPDATE SAFX07
SET SERIE_DOCFIS = REPLACE(SERIE_DOCFIS, ‘-‘, ‘’)
WHERE NUM_DOCFIS = ‘000123’;
Função DECODE
Tem a mesma função do comando “IF” (condição), porém só pode ser utilizado numa instrução SQL. Por exemplo,
pode ser utilizado para apresentar o conteúdo de uma coluna de uma forma mais “amigável”.
SQL> SELECT DECODE(IND_PRODUTO,
FROM
‘1’, ‘PRODUTO ACABADO’
‘2’, ‘INSUMO’,
‘3’, ‘EMBALAGEM’,
‘OUTROS’) IND_PRODUTO,
COD_PRODUTO
SAFX2013;
Funções de agrupamento
As funções de agrupamento são médias (AVG), valor máximo (MAX), valor mínimo (MIN), e soma (SUM)
SQL> SELECT AVG(salario) Media, MAX(salario) Máximo
FROM funcionario
WHERE UPPER (cargo)
Media
1476
like
Máximo
1525
MIN(salario) Minimo, SUM (salario) Soma
‘DIRETOR%’;
Mínimo
1400
Soma
7380
Contando linhas de uma tabela
A função de agrupamento que retorna o número de linhas existentes em uma tabela é o COUNT.
SQL> SELECT count(1) TOTAL
from safx01
TOTAL
---------256
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
24 de 27
Cláusula GROUP BY
Quando desejamos obter resultados agrupados o SQL nos fornece a cláusula GROUP BY que permite que os
valores singulares possam ser combinados com valores agrupados na cláusula SELECT .
Sintaxe:
SELECT nome da coluna singular 1 [ , nome da coluna singular2, ...], função de agrupamento [, função de
agrupamento...]
FROM nome da tabela
WHERE condição ( opcional)
GROUP BY nome da coluna singular 1 [ , nome da coluna singular2, ...]
Exemplo
SQL> SELECT cod_empresa, COUNT(*)
“tot_emp”
FROM safx08
GROUP BY cod_empresa
Cod_empresa
AFT
OSA
tot_emp
330
2344
SQL> SELECT cod_empresa,
cod_estab , COUNT(*)
FROM safx08
GROUP BY cod_empresa, cod_estab;
Cod_empresa
AFT
AFT
OSA
cod_estab
001
002
001
total
total
330
450
2344
Cláusula HAVING
Esta cláusula restringe linhas mostradas pela cláusula GROUP BY. Podemos comparar analogamente a cláusula
HAVING com a cláusula WHERE do SELECT.
Sintaxe:
SELECT nome da coluna singular 1 [ , nome da coluna singular2, ...], função de agrupamento [, função de
agrupamento...]
FROM nome da tabela
WHERE condição ( opcional)
GROUP BY nome da coluna singular 1 [ , nome da coluna singular2, ...]
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
25 de 27
Exemplo
SQL> SELECT X02.COD_EMPRESA
X02.COD_ESTAB
X02.DATA_SALDO
X02.COD_CONTA
COUNT(*)
FROM
SAFX02
X02
GROUP BY X02.COD_EMPRESA
X02.COD_ESTAB
X02.DATA_SALDO
X02.COD_CONTA
HAVING COUNT(*) > 1
EMP,
EST,
DATA,
IDCONTA,
,
,
,
Exercícios:
Tabela: SAFX03
1)
2)
3)
4)
Somar valor de movimentação agrupando pelo indicador de débito e crédito (listar as colunas indicador e valor)
Listar a menor data de emissão existente na tabela
Listar o maior número de nota fiscal existente na tabela
Contar a quantidade de registros para cada código de pessoa física / jurídica (listar quantidade e código).
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Página
26 de 27
Manual Usuário SQL
6. Mostrando dados de múltiplas tabelas
Objetivos:
Selecionando dados de múltiplas tabelas
Para selecionar dados que se encontram em mais de uma tabela utilizamos uma regra chamada JOIN
CONDITION. Esta regra aconselha que as tabelas devem estar relacionadas.
Por exemplo:
Mostre o numero da nota fiscal e todos os itens.
Para executar esta query devemos fazer um JOIN entre a tabela SAFX07 E SAFX08 utilizando como comparação
os campos chaves das tabelas.
EQUI JOIN
É a comparação simples entre colunas relacionadas.
Sintaxe
SELECT tabela1.coluna, tabela1.coluna , tabela2.coluna , tabela2.coluna
FROM tabela1, tabela2
WHERE tabela1.coluna_chave = tabela2.coluna_chave
Exemplo:
SELECT
FROM
WHERE
AND
AND
AND
AND
AND
AND
AND
AND
GROUP BY
X07.COD_EMPRESA
X07.COD_ESTAB
X07.DATA_FISCAL
X07.MOVTO_E_S
X07.IDENT_FIS_JUR
X07.NUM_DOCFIS
X07.SERIE_DOCFIS
X07.VLR_TOT_NOTA
X07.VLR_PRODUTO
SUM(X08.VLR_CONTAB_ITEM)
X07_DOCTO_FISCAL
X08_ITENS_MERC
X07.COD_EMPRESA
X07.COD_ESTAB
X07.DATA_FISCAL
X07.MOVTO_E_S
X07.NORM_DEV
X07.IDENT_DOCTO
X07.IDENT_FIS_JUR
X07.NUM_DOCFIS
X07.SERIE_DOCFIS
X07.COD_EMPRESA
X07.DATA_FISCAL
X07.IDENT_FIS_JUR
X07.SERIE_DOCFIS
X07.VLR_PRODUTO
=
=
=
=
=
=
=
=
=
,
,
,
,
EMP,
ESTAB,
DATA,
E_S,
PFJ,
NF,
SER,
VL_NF,
VL_PROD,
VL_ITEM
X07,
X08
X08.COD_EMPRESA
X08.COD_ESTAB
X08.DATA_FISCAL
X08.MOVTO_E_S
X08.NORM_DEV
X08.IDENT_DOCTO
X08.IDENT_FIS_JUR
X08.NUM_DOCFIS
X08.SERIE_DOCFIS
X07.COD_ESTAB
X07.MOVTO_E_S
X07.NUM_DOCFIS
X07.VLR_TOT_NOTA
,
,
,
,
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Título do Documento / Descrição
Manual de Comandos Básicos – SQL
Manual do Usuário
Nome do Arquivo
Manual Usuário SQL
Página
27 de 27
UNIÕES
Podemos eventualmente unir duas linhas de consultas simplesmente utilizando a palavra reservada UNION.
Exemplo:
Liste todos os clientes/fornecedores que tenham indicador = 3 e seja de SP ou que tenham indicador = 5 e seja de
RJ
SELECT
FROM
WHERE
AND
UNION
SELECT
FROM
WHERE
AND
*
X04_PESSOA_FIS_JUR
IND_FIS_JUR = 5
IDENT_ESTADO = 69
*
X04_PESSOA_FIS_JUR
IND_FIS_JUR = 3
IDENT_ESTADO = 76;
SUB-CONSULTAS
Uma sub-consulta é um comando "select" que é aninhado dentro de outro "select" e que devolve resultados
intermediários.
Exemplo:
Listar todos os itens de nota que estejam cadastrado no Mastersaf como embalagem.
SELECT
FROM
WHERE
COD_EMPRESA, COD_ESTAB, DATA_FISCAL, NUM_DOCFIS, SERIE_DOCFIS
X08_ITENS_MERC
IDENT_PRODUTO IN (SELECT IDENT_PRODUTO
FROM
X2013_PRODUTO
WHERE IND_PRODUTO = 3)
Sidney V idal – Instrutor ABAP/4
Cel 11 97128-2414 / SKYPE : VIDAL1500
http://www.mastersoft-ti.com.br
Download