Você está na página 1de 27

MANUAL DO USURIO SQL

C O M A N D O S B S I C O S

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 2 de 27

Nome do Arquivo

NDICE
Introduo....................................................................................................................................................3 Seleo de Dados........................................................................................................................................4 Manipulando Dados....................................................................................................................................12 Tabelas e Estrutura de dados....................................................................................................................16 Executando Clculos com Dados..............................................................................................................17 Mostrando dados de mltiplas tabelas......................................................................................................26

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 3 de 27

Nome do Arquivo

Introduo
O presente trabalho visa orientar o consultor a utilizar os comandos bsicos do SQL e SQL*PLUS Este manual est definido em tpicos, conforme descrito abaixo: Mostrar diferenas entre SQL e SQL*PLUS; Comandos SQL;

Este captulo 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 comunicao de qualquer ferramenta ou aplicao com o Oracle Server. O SQL*PLUS uma ferramenta Oracle que executa comandos SQL. O mesmo no uma extenso 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 seleo de dados: SELECT Para manipulao de dados: INSERT UPDATE DELETE COMMIT depois de alterar algo, utilizar esse comando para efetivar a alterao, se no atualiza. ROLBACK para retornar o comando anterior.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 4 de 27

Nome do Arquivo

Seleo de Dados
O processo de seleo de dados (SELECT) aparece na fase de produo no ciclo de vida de desenvolvimento de um sistema . Entrando no SQL*PLUS Para se logar no SQL*PLUS voc deve ser um usurio de banco de Oracle, ou seja, possuir um nome DE USURIO E SENHA. Mostrando a estrutura de uma tabela Para mostrar a estrutura de uma tabela ,ou seja, suas colunas e caractersticas 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 funo 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 condies ORDER BY expressso Onde: SELECT - clausula que especifica quais colunas, expresses ou constantes sero lidas. FROM clausulas que especifica qual (is) tabela(s) possuem estas colunas. WHERE clausula que especifica critrios de seleo de linhas (opcional), se no 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 Exemplo: SELECT * FROM SAFX07;

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 5 de 27

Nome do Arquivo

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 vrios valores repetidos, se desejarmos ver estes valores sem repetio 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 sada do resultado) o cabealho da coluna. Para isto basta inserir na frente do nome da coluna o alias (apelido) desejado. Exemplo:
SQL> SELECT DISTINCT cod_empresa cdigo_empresa, cod_estab cdigo_estabelecimento FROM safx07;

CODIGO_EMPRESA 001

CODIGO_ESTABELECIMENTO AFT OSA

OBS: Quando voc desejar que a escrita saia como voc digitou, ou se existirem espao em branco entre as palavras, o alias deve ser colocado entre aspas duplas. Caso contrario o SQL*PLUS utiliza o default.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 6 de 27

Nome do Arquivo

Clausula WHERE A clausula WHERE, como explicado anteriormente, serve para selecionarmos linhas em uma tabela de acordo com a condio estabelecida. Sintaxe: SELECT {* [ nome da coluna] } FROM nome da tabela WHERE condio Esta condio pode ser, por exemplo, cod_empresa = 001 ou cod_estab <> AFT . A tabela abaixo apresenta os operadores de comparao que podem ser utilizados na clausula WHERE. = <> > < <= BETWEEN ... AND ... NOT BETWEEN AND IN(lista) NOT IN LIKE IS NULL IS NOT NULL A seguir mostraremos cada condio: Igual (=) Retorna as linhas onde os valores de uma coluna so iguais aos estabelecidos. Exemplo:
SQL> SELECT cod_empresa, cod_estab WHERE cod_empresa = 001; from safx07

IGUAL A DIFERENTE DE 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 SUPRESSO DE CARACTERES VALORES NULOS Valores diferentes de nulo

Para comparaes 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 mscara 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 tambm devem estar entre aspas simples.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 7 de 27

Nome do Arquivo

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 tambm. 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 comparao. SQL> SELECT cod_empresa, cod_estab, num_docfis from x07_docto_fiscal
WHERE data_sada_rec <= 01-jan-2000;

Entre dois valores ( BETWEEN ... AND ... ) Todas as linhas que possuam valores dentro da faixa determinada sero listadas. Exemplo : SQL > SELECT
WHERE cod_empresa, cod_estab from x07_docto_fiscal data_saida_rec between 01-jan-2000 and 31-jan-2000 ;

Todas as NFs emitidas entre as datas listadas na clausula WHERE sero listadas.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 8 de 27

Nome do Arquivo

Fora da faixa estabelecida (NOT BETWEEN... AND...): Retorna todas as linhas que se encontram fora da faixa discriminada na clusula 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 clusula WHERE, podemos determinar valores de comparao. SQL> SELECT
WHERE AND cod_empresa, cod_estab from safx07 cod_empresa = 001 cod_estab in ( AFT , OSA) ;

Todas as NFs que pertenam empresa 001 e todos os estabelecimentos com cdigo igual a um dos valores da lista sero 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 NFs que no pertenam aos estabelecimentos sero listados. Supresso de caracteres (LIKE) Para mostrar linhas que possuem parte dos valores comuns, devemos utilizar o operador LIKE. Este operador pode ter um dos dois smbolos listados abaixo: % Qualquer nmero de caracteres (anlogo ao * do DOS) _ Um nico carter (anlogo ao ? do DOS) SQL > SELECT
* FROM safx01 WHERE cod_conta like '089.0001.1101%' ;

Podemos utilizar tambm em datas: SQL >


SELECT * FROM x07_docto_fiscal WHERE data_saida_rec like '%-FEB-02' ;

Todas as NFs com data de Fevereiro de 2002 sero listados. O exemplo abaixo utiliza o outro smbolo ( _ ) . Exemplo: Listar os funcionrios que o sobrenome comea com a letra S, e termine com a letra h e possua 5 letras no nome.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 9 de 27

Nome do Arquivo

SQL> Select last_name


FROM s_emp WHERE last_name LIKE S_____h;

Obs: Podemos comparar os dois smbolos em uma mesma comparao. Valores nulos ( IS NOT NULL) As colunas que se encontram vazias, para o banco de dados elas possuem valores chamadas NULL. Este valor possui caractersticas especficas 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 NFs que no possuem data fiscal relacionados. Valores diferentes de NULL ( IS NOT NULL) Da mesma forma poderamos 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 condies A clusula WHERE pode ter mais que uma condio no mesmo comando. Para isto incluiremos os operados AND e OR onde: AND mostra a linha se todas as condies subpostas no AND so verdadeiros. OR mostra a linha se uma das condies da clusula for verdadeiras. Exemplo: SQL > SELECT cod_emp, cod_estab
2 3 4 FROM WHERE AND SAFX07 cod_empresa = '001' cod_estab = 'RJ0015' ;

Apenas as NFs da empresa 001 e estabelecimento RJ0015 sero listados. Exemplo: SQL> SELECT *
FROM safx07 AND cod_empresa = 001 OR cod_fis_jur = 1 ;

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 10 de 27

Nome do Arquivo

Apenas NFs que pertenam empresa 001 ou cdigo fsica jurdica = 1 (mesmo de outras empresas) sero listadas. A combinao de duas ou mais condies de busca obedecem a uma regra de procedentes. O resultado da pesquisa depende desta ordem. Ordem 1 2 3 Operador Todos os operadores ( = , < , > , between, ...) AND OR

Para quebrar esta precedncia, basta utilizar parnteses. Exemplo: SQL> SELECT nome, salario, depto
FROM WHERE emp salrio >= 1000 and ( depto = 44 or depto = 42) ;

Neste caso apenas funcionrios do departamento 44 e 42 com salrio maior ou igual a 1000 sero listados. OBS: Teste o exemplo acima retirando os parnteses. Ordenao A ordenao de um resultado no influencia na ordem de gravao dos dados. Podemos definir dois sentidos de ordenao ascendentes e descendentes. A clusula utilizada para ordenao ORDER BY. Sintaxe: SELECT { * [ nome da coluna ] } FROM nome da tabela WHERE condio ( 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 ABCD Contabilidade Beta Comunicaes Telesp Celular Exemplo: SQL> SELECT

data_atualizacao 01-jan-2002 11-feb-2002 31-mar-2002

razao_social , data_x04 FROM safx04 WHERE data_x04 = '20000101' ORDER BY razao_social DESC;

Razao_social

data_atualizacao

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 11 de 27

Nome do Arquivo

Telesp Celular Beta Comunicaes ABCD Contabilidade

31-mar-2002 11-feb-2002 01-jan-2002

OBS1: Note que apenas o operador ascendente deve ser explicitado. OBS2: No necessria a coluna utilizada no ORDER BY estar no SELECT. Quando utilizamos mais que uma coluna no ORDER BY o resultado dado em funo do subconjunto utilizado.

Exerccios: Tabela: SAFX01 Selecionar conta, indicador (dbito / crdito) e valor 1) Onde valor maior que 1000 select conta_deb_cred, ind_deb_cre, vlr_lancto from safx01 where vlr_lancto > 1000; 2) Retornar somente os crditos select conta_deb_cred, ind_deb_cre, vlr_lancto from safx01 where ind_deb_cre = 'C'; 3) Data do lanamento entre 1 e 6 de janeiro de 2005 select conta_deb_cred, ind_deb_cre, vlr_lancto from safx01 where data_operacao between '20050101 and '20050106'; 4) Listar somente as contas 15000600 e 150006051 select conta_deb_cred, ind_deb_cre, vlr_lancto from safx01 where conta_deb_cred in ('15000600', 150 006051'); Faa-os separadamente e por ltimo junte os quatro exerccios num s. select conta_deb_cred, ind_deb_cre, vlr_lancto from safx01 where vlr_lancto > 1000 and ind_deb_cre = 'C' and data_operacao between '20050101 and '20050106' and conta_deb_cred in ('15000600', 150006051');

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 12 de 27

Nome do Arquivo

Manipulando Dados
Objetivos: Adicionar registros em uma tabela Gerar nmeros seqenciais automaticamente Modificar um registro existente Remover um registro de uma tabela Efetivar mudanas no banco de dados

Introduo A manipulao de dados consiste de cinco comando bsicos. So eles: INSERT - Insere uma nova linha em uma tabela UPDATE Modifica linhas existentes. DELETE Remove linhas de uma tabela COMMIT Confirma mudanas no Banco de dados ROLLBACK Descarta mudanas no banco de dados Insero 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 so dados correspondentes s colunas da tabela em questo. Exemplo: SQL> INSERT INTO empresa (cod_empresa,razao_social, senha)
VALUES ( '099', 'MASTERSAF', 'MSAF');

Obs 1 : Quando as todas as colunas so preenchidas no necessrio 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 no listadas que recebero valor NULL. O SYSDATE uma funo que retorna a data corrente do sistema. O valor NULL poder ser explicitado na listagem de valores, se desejado. Exemplo: SQL> INSERT INTO func ( cod_func, nome_func, dt_admissao, cargo, salario)

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 13 de 27

Nome do Arquivo

VALUES (001, Adriana, 01-ago-1970, SYSDATE, consultor, NULL);

Note que podemos tanto escrever NULL como utilizar (aspas simples). Porm 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 condio 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_sada = 10-jan-2000 ;

A clusula WHERE muito importante neste comando porque ela determina qual ou quais linhas sero modificadas. No comando acima todos as NFs cuja data seja 10 de janeiro tero 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 tero seus valores alterados. Removendo dados: Sintaxe: DELETE FROM nome da tabela WHERE condio

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 14 de 27

Nome do Arquivo

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 clusula WHERE muito importante, pois podemos remover TODOS os dados caso no colocarmos esta clausula. Exemplo: SQL> DELETE FROM safx07; Todos os dados da tabela safx07 sero removidos.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 15 de 27

Nome do Arquivo

Controle de Transaes:
A forma de controlar as transaes dentro de um Banco de dados utilizando os comandos COMMIT e ROLLBACK. Uma transao um conjunto de comandos ( insert, delete, updates). A funo do Commit finalizar a transao corrente tornando permanente todas as modificaes. J o Rollback apenas finaliza a transao corrente sem transferir para os arquivos de armazenamento as modificaes efetuadas. Insert.... Insert ... Delete.. ROLLBACK Update Update COMMIT (CUIDADO COM ESTE COMANDO, PORQUE AO EXECUTAR ESSE COMANDO O QUE TEM ACIMA DELE IR ATUALIZAR, ENTO A CADA ALTERAO EXECUTAR O COMMIT). importante destacar que todo dado modificado durante a transao s ser efetivado quando aquela transao for confirmada (COMMIT). Estado do dado antes do COMMIT ou ROLLBACK Os comandos de manipulao de dados inicialmente afetam o database buffer O usurio corrente (que efetuou a mudana) pode visualizar suas modificaes atravs do comando SELECT. Outros usurios no enxergam estas modificaes. As linhas afetadas nos comandoslockadas. Nenhum outro usurio pode modificar estas linhas. Estado do dado aps um comando COMMIT As mudanas so retiradas do database buffer e escritas em arquivos. Todos os usurios podem visualizar as modificaes Os locks nas linhas afetadas so liberados. Estado do dado aps um comando ROLLBACK As modificaes so descartadas. Os arquivos continuam como estavam. Os locks na linha afetadas pelas modificaes so liberadas.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 16 de 27

Nome do Arquivo

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 questo. Tabela: Onde podemos depositar com segurana e eficincia, os dados da instituio e dele extrair informaes com a devida presteza e confiabilidade. Tipos de dados no Oracle: Ao determinar um tipo de dados, pode-se escolher entre trs caractersticas bsicas: Caracter, Numrico, ou Data. Estas caractersticas so abaixo detalhadas: CHARACTER Os datatypes char e varchar2 armazena dados alfanumricos. Estes datatypes podem tambm armazenar caracteres especiais CHAR armazena string de caracteres de largura fixa, aceita uma largura de coluna entre 2 e 255 ( em bytes no caracteres). Espaos em branco so utilizados para preencher o espao 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 seqncia de caracteres e entre palavras) at 2048 bytes. NUMBER Este tipo de dados armazena nmeros com casas decimais fixas ou flutuantes. Oracle garante portabilidade de nmeros com uma preciso igual ou inferior a 38 dgitos. 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 mximo de 2 gigabytes.

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 17 de 27

Nome do Arquivo

Executando Clculos com Dados


Executar clculos com nmeros usando operadores aritmticos e funes Executar clculos com datas usando operadores aritmticos e funes Formatao de nmeros e datas Concatenao e manipulao de caracteres string Executar clculos com funo de agrupamento. Executando clculos aritmticos Para modificar e apresentar dados numa variedade de caminhos podemos utilizar as funes aritmticas e padronizao do SQL. Para executar clculos com nmeros podemos utilizar os operadores aritmticos. So eles + Adio - Subtrao * Multiplicao / Diviso Os operadores aritmticos podem ser utilizados em quaisquer clusulas do comando SELECT exceto a clusula 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 COMISSAO ----------------------------------------15 228.75 17.5 253.75

Para utilizar os operadores aritmticos devemos obedecer s regras de precedncia. Regra: 1 Multiplicao e diviso ( * , / ) 2 Adio e subtrao ( + , - )

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 18 de 27

Nome do Arquivo

Exemplo: SQL> SELECT nome , salario


(salario + 100 ) * 12 FROM funcionario WHERE cod_depto = 41; Bonus_anual

NOME Simone Andra Julio Silvia Funes numricas

SALARIO 1450 1200 1400 940

bonus_anual 18600 15600 18000 12480

As funes numricas so padro SQL e s tem efeito sobre nmeros ou colunas do tipo number. Funes ROUND Esta funo 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 = 50 ;

NOME Simone Andra Funo TRUNC:

SALARIO 2500 1550

SALARIO/22 113.636364 70.4545455

ROUND(SALARIO/22,0) 114 70

Esta funo mostra o numero truncado Exemplo: SQL> SELECT nome , salario , salario/22, TRUNC(salario/22,0)
FROM funcionario WHERE cod_depto = 50 ;

NOME Simone Andra

SALARIO 2500 1550

SALARIO/22 113.636364 70.4545455

TRUNC(SALARIO/22,0) 113 70

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 19 de 27

Nome do Arquivo

Funo MOD: Esta funo determina o valor referente ao resto da diviso 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 funcionrio cod_depto = 50 ;

O resultado seria: NOME Simone Andra Junior Mauro DATA_FINAL 09-FEB-1992 18-JAN-1992 22-JAN-1992 07-FEB-1992 SYSDATE 15-DEC-1993 15-DEC-1993 15-DEC-1993 15-DEC-1993 total 675.833993 697.833993 693.833993 677.833993 SEMANAS 96 99 99 96 DIAS 4 5 1 6

Clculos com valor NULL Qualquer calculo efetuado com um valor NULL o resultado ser sempre NULL. Portanto para obter algum valor ou evitar diviso por um valor desconhecido, o que geraria um erro, utilizamos a funo NVL que transforma o valor NULL em um nmero ou string desejado. Sintaxe: NVL ( expr1, expr2 ) Onde: Expr1 colunas que contem valores nulos. Expr2 valor o qual os valores nulos sero transformados. Exemplo: SQL> SELECT
FROM WHERE nome , salario , NVL(perc_comissao,0) PORCENTAGEM, Salario * NVL( PERC_COMISSAO,0) / 100 COMISSAO funcionario salrio >= 1500;

NOME Andra Simone Junior Mauro

SALARIO 2500 1550 1515 1525

PORCENTAGEM 0 0 10 15

COMISSAO 0 0 151.5 228.75

Executando clculos com datas

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 20 de 27

Nome do Arquivo

Podemos utilizar os operadores aritmticos tambm nas datas Expresso 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

Funes de formatao Elemento DD DY DAY DDSP MM MON MONTH YY YYYY HH:MM:SS Fm HH24 TH AM ou PM Descrio Dia do ms (1-31) As trs primeiras letras do dia da semana (FRI) Dia da semana (MONDAY) Numero de dias do ms (TWELVE) Numero do ms (1-12) As trs primeiras letras do ms (JAN) Nome do mes (JANUARY) Dois dgitos do ano (03) Quatro dgitos do ano (2003) Hora minuto e segundos (10:00: 33) Supresso de espaos em branco Hora de 0-23 Numero Ordinal Para hora padro ericano

Para modificar o formato de datas devemos utilizar a funo TO_CHAR. Sintaxe: TO_CHAR (coluna tipo data, mscara).

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 21 de 27

Nome do Arquivo

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

Concatenao de caracteres string Para concatenar caracteres string utilizamos o smbolo ||. 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 Funes com caracteres Mostra um caracter string com a primeira letra maiscula. Exemplo: SQL > SELECT INITCAP( nome) nome_alterado , nome
FROM WHERE x15_funcionario municipio LIKE 'RIO%';

NOME_ALTERADO Luisa Brunet Da Silva Carla Perez De Oliveira Machado Maria Das Dores Silva Araujo UPPER

NOME LUISA BRUNET DA SILVA CARLA PEREZ DE OLIVEIRA MACHADO MARIA DAS DORES SILVA ARAUJO

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 22 de 27

Nome do Arquivo

Transforma todos os caracteres em maisculos. 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 posio inicial N : Especifica quantos carateres sero cortados a partir da posio 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, NUM_DOCFIS 109876 4398764356
FROM WHERE LENGTH (num_docfis) num_caracteres safx07 cod_empresa = '001

Num_caracteres 6 10

Funo de substituio (REPLACE) Substitui um ou mais caracteres numa string:

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 23 de 27

Nome do Arquivo

SQL> UPDATE SAFX07


SET SERIE_DOCFIS = REPLACE(SERIE_DOCFIS, -, ) WHERE NUM_DOCFIS = 000123;

Funo DECODE Tem a mesma funo do comando IF (condio), porm s pode ser utilizado numa instruo SQL. Por exemplo, pode ser utilizado para apresentar o contedo de uma coluna de uma forma mais amigvel. SQL> SELECT DECODE(IND_PRODUTO,
1, PRODUTO ACABADO 2, INSUMO, 3, EMBALAGEM, OUTROS) IND_PRODUTO,

FROM

COD_PRODUTO SAFX2013;

Funes de agrupamento As funes de agrupamento so mdias (AVG), valor mximo (MAX), valor mnimo (MIN), e soma (SUM) SQL> SELECT AVG(salario) Media, MAX(salario) Mximo
FROM funcionario WHERE UPPER (cargo) like DIRETOR%; MIN(salario) Minimo, SUM (salario) Soma

Media 1476

Mximo 1525

Mnimo 1400

Soma 7380

Contando linhas de uma tabela (MUITO USADO) A funo de agrupamento que retorna o nmero de linhas existentes em uma tabela o COUNT. SQL> SELECT count(1) TOTAL TOTAL ---------256
from safx01

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 24 de 27

Nome do Arquivo

Clusula GROUP BY Quando desejamos obter resultados agrupados o SQL nos fornece a clusula GROUP BY que permite que os valores singulares possam ser combinados com valores agrupados na clusula SELECT . Sintaxe: SELECT nome da coluna singular 1 [ , nome da coluna singular2, ...], funo de agrupamento [, funo de agrupamento...] FROM nome da tabela WHERE condio ( opcional) GROUP BY nome da coluna singular 1 [ , nome da coluna singular2, ...] Exemplo SQL> SELECT cod_empresa, COUNT(*)
FROM safx08 GROUP BY cod_empresa tot_emp

Cod_empresa AFT OSA SQL> SELECT cod_empresa,

tot_emp 330 2344


total

cod_estab , COUNT(*) FROM safx08 GROUP BY cod_empresa, cod_estab;

Cod_empresa AFT AFT OSA Clusula HAVING

cod_estab 001 002 001

total 330 450 2344

Esta clusula restringe linhas mostradas pela clusula GROUP BY. Podemos comparar analogamente a clusula HAVING com a clusula WHERE do SELECT. Sintaxe: SELECT nome da coluna singular 1 [ , nome da coluna singular2, ...], funo de agrupamento [, funo de agrupamento...] FROM nome da tabela WHERE condio ( opcional) GROUP BY nome da coluna singular 1 [ , nome da coluna singular2, ...]

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 25 de 27

Nome do Arquivo

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

Exerccios: Tabela: SAFX03 1) Somar valor de movimentao agrupando pelo indicador de dbito e crdito (listar as colunas indicador e valor) SELECT SUM (VLR_MOVTO), IND_DEB_CRE FROM SAFX03 GROUP BY IND_DEB_CRE; 2) Listar a menor data de emisso existente na tabela SELECT MIN (DATA_EMISSAO) FROM SAFX03; 3) Listar o maior nmero de nota fiscal existente na tabela SELECT MAX (NUM_DOCFIS) FROM SAFX03; 4) Contar a quantidade de registros para cada cdigo de pessoa fsica / jurdica (listar quantidade e cdigo). SELECT COD_FIS_JUR, COUNT (1) FROM SAFX03 GROUP BY COD_FIS_JUR;

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 26 de 27

Nome do Arquivo

Mostrando dados de mltiplas tabelas


Objetivos: Selecionando dados de mltiplas 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 comparao os campos chaves das tabelas. EQUI JOIN a comparao 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 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

FROM WHERE AND AND AND AND AND AND AND AND GROUP BY

= = = = = = = = = , , , ,

, , , ,

Ttulo do Documento / Descrio

Manual de Comandos Bsicos SQL Manual do Usurio


104437622.doc

Pgina 27 de 27

Nome do Arquivo

UNIES 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 intermedirios. 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);