Banco de Dados Oracle

Embed Size (px)

DESCRIPTION

Banco de Dados Oracle

Citation preview

  • 1

    Captulo 1: Conceitos de Banco de Dados

    1.1 Objetivos deste captulo

    Introduzir os conceitos bsico de sistema gerenciador de banco de dados, banco de dados

    relacional, lgebra relacional, e a arquitetura do Oracle.

    1.2 Sistema de Gerenciamento de Banco de Dados

    O Sistema de Gerenciamento de Banco de Dados (SGBD) um software que controla o

    armazenamento, as modificaes, e os acessos s informaes do banco de dados.

    O SGBD atua como interface entre os usurios e as informaes armazenadas. Todas as

    solicitaes relativas aos dados do banco de dados so interceptadas, interpretadas, e

    executadas pelo SGBD. Nenhum acesso aos dados pode ser feito de outra maneira.

    Desta forma, o SGBD isola o usurio de todos os detalhes particulares do hardware ou do

    sistema operacional sendo utilizado, tais como mtodo de acesso e blocagem de disco. A

    forma de acesso do usurio ao banco de dados no deve mudar quando o hardware ou o

    sistema operacional mudam.

    Existem modelos alternativos para se implementar um SGBD, sendo que os mais comuns

    so hierrquico, rede, listas invertidas e relacional.

    1.3 Banco de dados relacional

    O modelo predominante atualmente o relacional. Um banco de dados relacional pode ser

    definido como um banco de dados que aparece ao usurio como uma coleo de tabelas

    relacionadas, e nada alm de tabelas.

    Os trs elementos de um banco de dados relacional so:

    tabelas

    colunas

    linhas

  • 2

    Os operadores relacionais so:

    Seleo/Restrio uma operao que recupera e mostra dados de uma

    tabela. possvel recuperar todas as linhas, ou apenas

    algumas que satisfaam uma determinada condio ou a

    vrias condies. Esta operao chamada tambm de

    subconjunto horizontal.

    Projeo uma operao que recupera e mostra dados de apenas

    algumas colunas, e portanto chamada de subconjunto

    vertical.

    Unio mostra todas as linhas que aparecem em duas tabelas.

    Interseo mostra todas as linhas que aparecem nas duas tabelas.

    Diferena mostra todas as linhas que aparecem em apenas uma das

    tabelas

    Produto o resultado obtido pela concatenao de duas tabelas.

    Todas as linhas da primeira tabela so concatenadas com

    todas as linhas da segunda tabela.

    Juno o resultado obtido pela concatenao de duas tabelas de

    acordo com condies especficas. Apenas as linhas que

    atendem as condies estabelecidas so concatenadas.

    Seleo/Restrio

    Projeo

  • 3

    Unio

    Interseo

    Diferena

  • 4

    Produto

    Joo x Pintor = Joo Pintor

    Jos Escritor Joo Escritor

    Manoel Jos Pintor

    Jos Escritor

    Manoel Pintor

    Manoel Escritor

    Juno

    Joo 10 10 Vendas Joo 10 10 Vendas

    Jos 10 20 Pesq. Jos 10 10 Vendas

    Maria 20 30 Cont. Maria 20 20 Pesq.

    Ana 30 40 Secret. Ana 30 30 Cont.

    1.4 Arquitetura do Oracle

    Background Processes

    System Global Area

    Servers

    Users

    Redo Log Files

    Data Files

    Control Files

    Banco de Dados

    O SGBD:

    Estruturas de memria:

    System Global Area (SGA) uma regio compartilhada de memria alocada pelo

    SGBD Oracle, que contm dados e informaes de controle. Quanto maior for a SGA

    melhor ser o desempenho do Oracle. Os dados da SGA so compartilhados por

  • 5

    todos os usurios que esto acessando o banco de dados. As informaes

    armazenadas na SGA esto divididas por tipo de estrutura de memria, incluindo

    database buffers, redo log buffers e shared poll.

    Program Global Area (PGA) uma rea de memria que contm dados e

    informaes de controle para um processo servidor. Uma PGA criada pelo Oracle

    quando um processo servidor iniciado.

    Processos:

    Os processos so divididos em Processos Usurio e Processos do Oracle. Cada

    usurio conectado possui um Processo Usurio, atravs do qual se comunica com o

    Oracle. Entre os processos do Oracle esto os Processos Servidores, que executam as

    solicitaes emitidas pelo Processos Usurios, e os Processos Background.

    O Banco de dados:

    Data Files Contm todos os dados do banco de dados.

    Redo Log Files Contm todas as informaes relativas s

    alteraes efetuadas no banco de dados

    para permitir a recuperao.

    Control Files Registra a estrutura fsica do banco de dados.

  • 6

    Captulo 2: Introduo s Consultas

    2.1 Objetivos deste captulo

    Este captulo faz uma introduo linguagem de consulta utilizada para acessar o Banco de

    Dados Oracle. Em particular, so discutidas as declaraes utilizadas para:

    realizar clculos

    manusear valores nulos corretamente

    nomes alternativos para ttulos das colunas

    concatenar colunas

    ordenar linhas

    fornecer critrios de pesquisa

    2.2 O utilitrio SQL*PLUS

    O SQL*PLUS uma interface atravs da qual os comandos SQL podem ser entrados e

    executados. O SQL*PLUS possui outros comandos, que permitem formatar a sada dos

    comandos SQL, alm de fornecer facilidades para editar e salvar comandos SQL.

    Para ativar o SQL*PLUS digite SQLPLUS na linha de comando do MS-DOS, e pressione a

    tecla Enter. Quando o SQLPLUS solicitar para entrar com o nome do usurio digite

    ALUNO1, e quando for solicitada a senha fornea ALUNO1 novamente.

    As linhas de comando do SQL*PLUS so prefixadas por: SQL>. As linhas de continuao

    so numeradas. Todo o curso est baseado na utilizao desta ferramenta pelos participantes.

    Os comandos podem ser escritos em uma ou mais linhas.

    2.3 Construo bsica de uma consulta

    O comando SELECT recupera informaes do banco de dados, implementando todos os

    operadores da lgebra relacional.

    Em sua forma mais simples deve incluir:

    a. A clusula SELECT, que lista as colunas a serem envolvidas (essencialmente a Projeo,

    conforme definido na lgebra relacional).

    b. A clusula FROM, que especifica as tabelas envolvidas.

    Para listar os nmeros de todos os departamentos, nomes dos empregados e nmeros dos

    gerentes da tabela EMP, digita-se:

  • 7

    SQL> SELECT DEPTNO, ENAME, MGR

    2 FROM EMP

    DEPTNO ENAME MGR

    ------- ---------- -------

    20 SMITH 7902

    30 ALLEN 7698

    30 WARD 7698

    20 JONES 7839

    30 MARTIN 7698

    30 BLAKE 7839

    10 CLARK 7839

    20 SCOTT 7566

    10 KING

    30 TURNER 7698

    20 ADAMS 7788

    30 JAMES 7698

    20 FORD 7566

    10 MILLER 7782

    14 rows selected.

    possvel selecionar todas as colunas da tabela colocando-se um "*" (asterisco) aps a

    palavra SELECT, como visto abaixo:

    SQL> SELECT *

    2 FROM EMP

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ------- ---------- --------- ------- --------- ------- ------- -------

    7369 SMITH CLERK 7902 13-JUN-83 800 20

    7499 ALLEN SALESMAN 7698 15-AUG-83 1600 300 30

    7521 WARD SALESMAN 7698 26-MAR-84 1250 500 30

    7566 JONES MANAGER 7839 31-OCT-83 2975 20

    7654 MARTIN SALESMAN 7698 05-DEC-83 1250 1400 30

    7698 BLAKE MANAGER 7839 11-JUN-84 2850 30

    7782 CLARK MANAGER 7839 14-MAY-84 2450 10

    7788 SCOTT ANALYST 7566 05-MAR-84 3000 20

    7839 KING PRESIDENT 09-JUL-84 5000 10

    7844 TURNER SALESMAN 7698 04-JUN-84 1500 0 30

    7876 ADAMS CLERK 7788 04-JUN-84 1100 20

    7900 JAMES CLERK 7698 23-JUL-84 950 30

    7902 FORD ANALYST 7566 05-DEC-83 3000 20

    7934 MILLER CLERK 7782 21-NOV-83 1300 10

    14 rows selected.

    2.4 Expresses aritmticas

    Uma expresso a combinao de um ou mais valores, operadores e funes, que resultam

    em um valor calculado.

    As expresses aritmticas podem conter nomes de colunas, constantes numricas, e

    operadores aritmticos. Os operadores so + - * e / , para soma, subtrao, multiplicao e

    diviso, respectivamente.

    No exemplo abaixo calcula-se o salrio anual multiplicando-se o salrio mensal por doze.

    SQL> SELECT ENAME, SAL*12, COMM

    2 FROM EMP

  • 8

    ENAME SAL*12 COMM

    ---------- ------- -------

    SMITH 9600

    ALLEN 19200 300

    WARD 15000 500

    JONES 35700

    MARTIN 15000 1400

    BLAKE 34200

    CLARK 29400

    SCOTT 36000

    KING 60000

    TURNER 18000 0

    ADAMS 13200

    JAMES 11400

    FORD 36000

    MILLER 15600

    Se a expresso aritmtica contiver mais de um operador, multiplicao e diviso so de

    mesma precedncia, porm com precedncia superior a adio e subtrao, que tambm so

    de mesma precedncia. No caso de operadores com a mesma precedncia, o da esquerda

    processado primeiro.

    No exemplo abaixo, a multiplicao (250*12) realizada primeiro, e depois somada ao

    salrio.

    SQL> SELECT ENAME, SAL+250*12

    2 FROM EMP

    ENAME SAL+250*12

    ---------- ----------

    SMITH 3800

    ALLEN 4600

    WARD 4250

    JONES 5975

    MARTIN 4250

    BLAKE 5850

    CLARK 5450

    SCOTT 6000

    KING 8000

    TURNER 4500

    ADAMS 4100

    JAMES 3950

    FORD 6000

    MILLER 4300

    Parnteses podem ser utilizados para especificar a ordem na qual os operadores sero

    executados. Se, por exemplo, for necessrio somar 250 ao salrio antes de multiplicar por

    12, devemos escrever:

    SQL> SELECT ENAME, (SAL+250)*12

    2 FROM EMP

    ENAME (SAL+250)*12

    ---------- ------------

    SMITH 12600

    ALLEN 22200

    WARD 18000

    JONES 38700

    MARTIN 18000

  • 9

    BLAKE 37200

    CLARK 32400

    SCOTT 39000

    KING 63000

    TURNER 21000

    ADAMS 16200

    JAMES 14400

    FORD 39000

    MILLER 18600

    2.5 Nomes alternativos para ttulos de colunas

    Para mostrar o resultado de uma consulta, o SQL*PLUS normalmente utiliza o nome da

    coluna como ttulo da coluna. Em muitos casos, isto torna o ttulo sem significado. Pode ser

    alterado o ttulo da coluna usando-se um Alis.

    O Alis especificado escrevendo-se um texto aps item a ser mostrado na clusula

    SELECT. Por padro, o nome do Alis convertido para letras maisculas, e no pode

    conter espaos em branco, a menos que seja colocado entre aspas.

    Para mostrar como ttulo da coluna SALARIO ANUAL no lugar de SAL*12, podemos

    escrever:

    SQL> SELECT ENAME NOME, SAL*12 SALARIO ANUAL, COMM 2 FROM EMP

    NOME SALARIO ANUAL COMM

    ---------- -------------- -------

    SMITH 9600

    ALLEN 19200 300

    WARD 15000 500

    JONES 35700

    MARTIN 15000 1400

    BLAKE 34200

    CLARK 29400

    SCOTT 36000

    KING 60000

    TURNER 18000 0

    ADAMS 13200

    JAMES 11400

    FORD 36000

    MILLER 15600

    14 rows selected.

    Nota: somente na clusula SELECT o Alis pode ser usado, nas outras clusulas no.

    2.6 O operador de concatenao

    O operador de concatenao (||) permite juntar colunas, expresses aritmticas, ou valores

    constantes, para criar uma expresso do tipo caracter. Colunas dos dois lados do operador

    so combinadas para formar uma s coluna.

    Para combinar o nmero do empregado com o nome do empregado em uma coluna apenas,

    utilizando EMPREGADO como ttulo, devemos escrever:

    SQL> SELECT EMPNO||ENAME EMPREGADO

    2 FROM EMP

  • 10

    EMPREGADO

    --------------------------------------------------

    7369SMITH

    7499ALLEN

    7521WARD

    7566JONES

    7654MARTIN

    7698BLAKE

    7782CLARK

    7788SCOTT

    7839KING

    7844TURNER

    7876ADAMS

    7900JAMES

    7902FORD

    7934MILLER

    14 rows selected.

    2.7 Literais

    Um literal qualquer caracter, expresso, ou nmero, incluido na clusula SELECT, que no

    um nome ou Alis da coluna.

    O literal da clusula SELECT listado em todas as linhas mostradas pelo comando. Literais

    dos tipos data e caracter devem ser envoltos por apstrofos ('). Literais numricos no

    precisam de apstrofos.

    O comando abaixo contm literal concatenado com colunas, e um Alis para a primeira

    coluna.

    SQL> COLUMN EMPREGADO FORMAT A20

    SQL> SELECT EMPNO||'-'||ENAME EMPREGADO,

    2 'TRABALHA NO DEPARTAMENTO',

    3 DEPTNO

    4 FROM EMP

    EMPREGADO 'TRABALHANODEPARTAMENTO' DEPTNO

    -------------------- ------------------------ -------

    7369-SMITH TRABALHA NO DEPARTAMENTO 20

    7499-ALLEN TRABALHA NO DEPARTAMENTO 30

    7521-WARD TRABALHA NO DEPARTAMENTO 30

    7566-JONES TRABALHA NO DEPARTAMENTO 20

    7654-MARTIN TRABALHA NO DEPARTAMENTO 30

    7698-BLAKE TRABALHA NO DEPARTAMENTO 30

    7782-CLARK TRABALHA NO DEPARTAMENTO 10

    7788-SCOTT TRABALHA NO DEPARTAMENTO 20

    7839-KING TRABALHA NO DEPARTAMENTO 10

    7844-TURNER TRABALHA NO DEPARTAMENTO 30

    7876-ADAMS TRABALHA NO DEPARTAMENTO 20

    7900-JAMES TRABALHA NO DEPARTAMENTO 30

    7902-FORD TRABALHA NO DEPARTAMENTO 20

    7934-MILLER TRABALHA NO DEPARTAMENTO 10

    14 rows selected.

    2.8 Manuseio de valores nulos

  • 11

    Se em uma linha no existir valor para uma determinada coluna, este valor dito como

    sendo nulo.

    Um valor nulo um valor que no est disponvel, desconhecido, ou no aplicvel. Um

    valor nulo no o mesmo que zero. Zero um nmero.

    Se o valor de qualquer coluna envolvida em uma expresso for nulo, o resultado da

    expresso tambm ser nulo. No exemplo abaixo, somente aparecem os salrios anuais dos

    vendedores, pois somente estes tem comisso no nula.

    SQL> SELECT ENAME, SAL*12+COMM SALARIO_ANUAL

    2 FROM EMP

    ENAME SALARIO_ANUAL

    ---------- -------------

    SMITH

    ALLEN 19500

    WARD 15500

    JONES

    MARTIN 16400

    BLAKE

    CLARK

    SCOTT

    KING

    TURNER 18000

    ADAMS

    JAMES

    FORD

    MILLER

    14 rows selected.

    Para calcular o resultado corretamente, deve ser utilizada a expresso NVL, que converte um

    valor nulo em um valor no nulo, conforme mostrado abaixo:

    SQL> SELECT ENAME, SAL*12+NVL(COMM, 0) SALARIO_ANUAL

    2 FROM EMP

    ENAME SALARIO_ANUAL

    ---------- -------------

    SMITH 9600

    ALLEN 19500

    WARD 15500

    JONES 35700

    MARTIN 16400

    BLAKE 34200

    CLARK 29400

    SCOTT 36000

    KING 60000

    TURNER 18000

    ADAMS 13200

    JAMES 11400

    FORD 36000

    MILLER 15600

    14 rows selected.

    A funo NVL espera dois argumentos:

    a) uma expresso

  • 12

    b) um valor no nulo

    Podem ser convertidos valores nulos de data, nmeros, ou caracteres:

    NVL(ColunaData, 01-jan-84')

    NVL(ColunaNumero, 9)

    NVL(ColunaCaracter, alfanumrico')

    2.9 Eliminao de linhas duplicadas

    A no ser que seja especificado o contrrio, as linhas duplicadas no so eliminadas dos

    resultados das consultas.

    SQL> SELECT DEPTNO

    2 FROM EMP

    DEPTNO

    -------

    20

    30

    30

    20

    30

    30

    10

    20

    10

    30

    20

    30

    20

    10

    Para eliminar as linhas duplicadas, deve ser includa a palavra DISTINCT aps o SELECT.

    SQL> SELECT DISTINCT DEPTNO

    2 FROM EMP

    DEPTNO

    -------

    10

    20

    30

    Mltiplas colunas podem ser especificadas aps a palavra DISTINCT.

    SQL> SELECT DISTINCT DEPTNO, JOB

    2 FROM EMP

    DEPTNO JOB

    ------- ---------

    10 CLERK

    10 MANAGER

    10 PRESIDENT

    20 ANALYST

    20 CLERK

    20 MANAGER

  • 13

    30 CLERK

    30 MANAGER

    30 SALESMAN

    Acima esto mostradas todas as combinaes diferentes de departamentos e cargos.

    2.10 Ordenao das linhas

    Normalmente, a ordem das linhas retornadas por uma consulta indefinida. A clusula

    ORDER BY pode ser usada para ordenar linhas. Se for usada, ORDER BY deve ser sempre

    a ltima clusula de um comando SELECT.

    Para ordenar pelo nome do empregado, usamos:

    SQL> SELECT ENAME, JOB, SAL*12, DEPTNO

    2 FROM EMP

    3 ORDER BY ENAME

    ENAME JOB SAL*12 DEPTNO

    ---------- --------- ------- -------

    ADAMS CLERK 13200 20

    ALLEN SALESMAN 19200 30

    BLAKE MANAGER 34200 30

    CLARK MANAGER 29400 10

    FORD ANALYST 36000 20

    JAMES CLERK 11400 30

    JONES MANAGER 35700 20

    KING PRESIDENT 60000 10

    MARTIN SALESMAN 15000 30

    MILLER CLERK 15600 10

    SCOTT ANALYST 36000 20

    SMITH CLERK 9600 20

    TURNER SALESMAN 18000 30

    WARD SALESMAN 15000 30

    14 rows selected.

    Ordem padro de ordenao:

    - Nmeros: menores primeiro

    - Data: mais cedo primeiro

    - Caracteres: ordem alfabtica

    Para reverter esta ordem, pode ser utilizada a palavra DESC aps o nome da coluna, na

    clusula ORDER BY.

    Para listarmos os funcionrios mais novos antes dos mais antigos fazemos:

    SQL> SELECT ENAME, JOB, HIREDATE

    2 FROM EMP

    3 ORDER BY HIREDATE DESC

    ENAME JOB HIREDATE

    ---------- --------- ---------

    JAMES CLERK 23-JUL-84

    KING PRESIDENT 09-JUL-84

    BLAKE MANAGER 11-JUN-84

    TURNER SALESMAN 04-JUN-84

    ADAMS CLERK 04-JUN-84

    CLARK MANAGER 14-MAY-84

  • 14

    WARD SALESMAN 26-MAR-84

    SCOTT ANALYST 05-MAR-84

    MARTIN SALESMAN 05-DEC-83

    FORD ANALYST 05-DEC-83

    MILLER CLERK 21-NOV-83

    JONES MANAGER 31-OCT-83

    ALLEN SALESMAN 15-AUG-83

    SMITH CLERK 13-JUN-83

    possvel efetuar a ordenao por mais de uma coluna, sendo algumas em ordem

    ascendente e outras em ordem descendente.

    SQL> SELECT DEPTNO, JOB, ENAME

    2 FROM EMP

    3 ORDER BY DEPTNO, SAL DESC

    DEPTNO JOB ENAME

    ------- --------- ----------

    10 PRESIDENT KING

    10 MANAGER CLARK

    10 CLERK MILLER

    20 ANALYST SCOTT

    20 ANALYST FORD

    20 MANAGER JONES

    20 CLERK ADAMS

    20 CLERK SMITH

    30 MANAGER BLAKE

    30 SALESMAN ALLEN

    30 SALESMAN TURNER

    30 SALESMAN WARD

    30 SALESMAN MARTIN

    30 CLERK JAMES

    Exerccio: verificar como ficam os valores nulos aps a ordenao.

    2.11 Critrios de pesquisa

    Os critrios de pesquisa so informados na clusula WHERE, que corresponde ao operador

    Restrio da lgebra relacional. Nesta clusula esto estabelecidos os critrios necessrios

    para uma linha poder ser selecionada.

    A clusula WHERE pode comparar valores em colunas, valores literais, expresses

    aritmticas, ou funes. Trs elementos so sempre necessrios:

    - Um nome de coluna

    - Um operador de comparao

    - Um nome de coluna, constante, ou lista de valores

    Existem dois tipos de operadores: lgicos e SQL.

    Os operadores lgicos testam as seguintes condies:

    = igual

    > maior

    >= maior ou igual

    < menor

  • 15

    diferente (^= ou !=)

    Para listar os nomes, nmeros, cargos e departamentos de todos os funcionrios com cargo

    CLERK, usamos:

    SQL> SELECT ENAME, EMPNO, JOB, DEPTNO

    2 FROM EMP

    3 WHERE JOB = CLERK'

    ENAME EMPNO JOB DEPTNO

    ---------- ------- --------- -------

    SMITH 7369 CLERK 20

    ADAMS 7876 CLERK 20

    JAMES 7900 CLERK 30

    MILLER 7934 CLERK 10

    Para listar o nome e o nmero dos departamentos com nmero maior que 20, usamos:

    SQL> SELECT DNAME, DEPTNO

    2 FROM DEPT

    3 WHERE DEPTNO > 20

    DNAME DEPTNO

    -------------- -------

    SALES 30

    OPERATIONS 40

    Para sabermos que funcionrios tem comisso superior ao salrio, usamos:

    SQL> SELECT ENAME, SAL, COMM

    2 FROM EMP

    3 WHERE COMM > SAL

    ENAME SAL COMM

    ---------- ------- -------

    MARTIN 1250 1400

    Existem quatro operadores SQL, que operam sobre todos os tipos de dados.

    BETWEEN...AND... entre dois valores (inclusive)

    IN(lista) idnticos a uma lista de valores

    LIKE semelhante a um modelo de caracteres

    IS NULL valor nulo

    O operador BETWEEN testa valores no intervalo ou idnticos aos limites.

    SQL> SELECT ENAME, SAL

    2 FROM EMP

    3 WHERE SAL BETWEEN 1000 AND 2000

    ENAME SAL

    ---------- -------

    ALLEN 1600

    WARD 1250

    MARTIN 1250

    TURNER 1500

    ADAMS 1100

    MILLER 1300

  • 16

    O operador IN testa os valores especificados em uma lista.

    SQL> SELECT EMPNO, ENAME, SAL, MGR

    2 FROM EMP

    3 WHERE MGR IN ( 7902, 7566, 7788 )

    EMPNO ENAME SAL MGR

    ------- ---------- ------- -------

    7369 SMITH 800 7902

    7788 SCOTT 3000 7566

    7876 ADAMS 1100 7788

    7902 FORD 3000 7566

    Se caracteres ou datas forem utilizados, devem ser envoltos por apstrofos.

    Usando o operador LIKE possvel selecionar linhas de acordo com modelo fornecido. O

    smbolo "%" representa qualquer seqncia de zero ou mais caracteres. O smbolo "_"

    (sublinhado) representa qualquer um caracter, mas apenas um, no mnimo e no mximo.

    Para listarmos todos os empregados cujos nomes comeam com a letra "S", usamos:

    SQL> SELECT ENAME

    2 FROM EMP

    3 WHERE ENAME LIKE 'S%'

    ENAME

    ----------

    SMITH

    SCOTT

    Para listar os nomes de todos os empregados que contm exatamente 4 letras, usamos:

    SQL> SELECT ENAME

    2 FROM EMP

    3 WHERE ENAME LIKE '____' (quatro caracteres de sublinhado)

    ENAME

    ----------

    WARD

    KING

    FORD

    O operador IS NULL serve especificamente para testar valores nulos.

    Para listar os funcionrios que no possuem gerente, usamos:

    SQL> SELECT ENAME, MGR

    2 FROM EMP

    3 WHERE MGR IS NULL

    ENAME MGR

    ---------- -------

    KING

  • 17

    Os operadores mostrados abaixo podem ser utilizados para testes de negao:

    != ^= no igual

    NOT NomeDaColuna = no igual a

    NOT NomeDaColuna > no maior do que

    NOT BETWEEN fora da faixa especificada

    NOT IN fora da lista especificada

    NOT LIKE no semelhante ao modelo

    IS NOT NULL no nulo

    Para listar os empregados com salrios fora da faixa de 1000 a 2000, usamos:

    SQL> SELECT ENAME, SAL

    2 FROM EMP

    3 WHERE SAL NOT BETWEEN 1000 AND 2000

    ENAME SAL

    ---------- -------

    SMITH 800

    JONES 2975

    BLAKE 2850

    CLARK 2450

    SCOTT 3000

    KING 5000

    JAMES 950

    FORD 3000

    8 rows selected.

    Para listar os empregados cujos cargos no comeam com a letra M, usamos:

    SQL> SELECT ENAME, JOB

    2 FROM EMP

    3 WHERE JOB NOT LIKE 'M%'

    ENAME JOB

    ---------- ---------

    SMITH CLERK

    ALLEN SALESMAN

    WARD SALESMAN

    MARTIN SALESMAN

    SCOTT ANALYST

    KING PRESIDENT

    TURNER SALESMAN

    ADAMS CLERK

    JAMES CLERK

    FORD ANALYST

    MILLER CLERK

    Para listar os empregados com gerentes, usamos:

    SQL> SELECT ENAME, MGR

    2 FROM EMP

    3 WHERE MGR IS NOT NULL

    ENAME MGR

    ---------- -------

    SMITH 7902

  • 18

    ALLEN 7698

    WARD 7698

    JONES 7839

    MARTIN 7698

    BLAKE 7839

    CLARK 7839

    SCOTT 7566

    TURNER 7698

    ADAMS 7788

    JAMES 7698

    FORD 7566

    MILLER 7782

    x NULL e x = NULL

    sempre falso. Nulo nunca igual a nada nem diferente de nada, nem a outro nulo.

    2.12 Consultas com condies mltiplas

    Os operadores AND e OR podem ser utilizados para criar expresses lgicas compostas.

    O predicado AND espera que todas duas condies sejam verdadeiras.

    O predicado OR espera que uma (ou as duas) condies sejam verdadeiras.

    Nos exemplos abaixo as condies so as mesmas, porm os predicados so diferentes.

    Para listar todos os CLERKs com salrio entre 1000 e 2000, usamos:

    SQL> SELECT EMPNO, ENAME, JOB, SAL

    2 FROM EMP

    3 WHERE SAL BETWEEN 1000 AND 2000

    4 AND JOB = 'CLERK'

    EMPNO ENAME JOB SAL

    ------- ---------- --------- -------

    7876 ADAMS CLERK 1100

    7934 MILLER CLERK 1300

    Para listar os funcionrios que so CLERK, ou que recebem entre 1000 e 2000, usamos:

    SQL> SELECT EMPNO, ENAME, JOB, SAL

    2 FROM EMP

    3 WHERE SAL BETWEEN 1000 AND 2000

    4 OR JOB = CLERK'

    EMPNO ENAME JOB SAL

    ------- ---------- --------- -------

    7369 SMITH CLERK 800

    7499 ALLEN SALESMAN 1600

    7521 WARD SALESMAN 1250

    7654 MARTIN SALESMAN 1250

    7844 TURNER SALESMAN 1500

    7876 ADAMS CLERK 1100

    7900 JAMES CLERK 950

    7934 MILLER CLERK 1300

    Quando aparecem tanto ANDs quanto ORs em uma expresso lgica, todos os ANDs so

    processados antes que os ORs sejam processados.

  • 19

    Uma vez que AND tem precedncia sobre OR, a consulta abaixo retorna todos os gerentes

    com salrio maior do que 1500, e todos os vendedores.

    SQL> SELECT EMPNO, ENAME, JOB, SAL, DEPTNO

    2 FROM EMP

    3 WHERE SAL > 1500

    4 AND JOB = 'MANAGER'

    5 OR JOB = 'SALESMAN'

    EMPNO ENAME JOB SAL DEPTNO

    ------- ---------- --------- ------- -------

    7499 ALLEN SALESMAN 1600 30

    7521 WARD SALESMAN 1250 30

    7566 JONES MANAGER 2975 20

    7654 MARTIN SALESMAN 1250 30

    7698 BLAKE MANAGER 2850 30

    7782 CLARK MANAGER 2450 10

    7844 TURNER SALESMAN 1500 30

    Para selecionar todos os vendedores e gerentes com salrio superior a 1500, usamos:

    SQL> SELECT EMPNO, ENAME, JOB, SAL, DEPTNO

    2 FROM EMP

    3 WHERE SAL > 1500

    4 AND ( JOB = 'MANAGER' OR JOB = SALESMAN' )

    EMPNO ENAME JOB SAL DEPTNO

    ------- ---------- --------- ------- -------

    7499 ALLEN SALESMAN 1600 30

    7566 JONES MANAGER 2975 20

    7698 BLAKE MANAGER 2850 30

    7782 CLARK MANAGER 2450 10

    Os parnteses especificam a ordem em que os operadores devem ser calculados.

    2.13 Precedncia dos operadores

    a) os operadores de comparao e os operadores SQL tem precedncias iguais.

    =, !=, , =, BETWEEN...AND..., IN, LIKE, IS NULL

    b) NOT (para reverter o resultado lgico da expresso, WHERE NOT(sal>2000))

    c) AND

    d) OR

    Para listar todos os gerentes, de qualquer departamento, e os CLERK do departamento 10

    apenas, usamos:

    SQL> SELECT *

    2 FROM EMP

    3 WHERE JOB = MANAGER' OR (JOB = CLERK' AND DEPTNO = 10)

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ------- ---------- --------- ------- --------- ------- ------- -------

    7566 JONES MANAGER 7839 31-OCT-83 2975 20

  • 20

    7698 BLAKE MANAGER 7839 11-JUN-84 2850 30

    7782 CLARK MANAGER 7839 14-MAY-84 2450 10

    7934 MILLER CLERK 7782 21-NOV-83 1300 10

    Neste caso os parnteses so desnecessrios, uma vez que o AND processa primeiro.

    2.14 Resumo do comando SELECT

    SELECT [DISTINCT] {* | coluna [alis],....}

    FROM tabela

    WHERE condies

    ORDER BY {coluna | expresso} [ASC|DESC]

    2.15 Exerccios

    a) Selecionar todas as informaes da tabela SALGRADE

    GRADE LOSAL HISAL

    ------- ------- -------

    1 700 1200

    2 1201 1400

    3 1401 2000

    4 2001 3000

    5 3001 9999

    b) Selecionar todas a informaes da tabela EMP

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ------- ---------- --------- ------- --------- ------- ------- -------

    7369 SMITH CLERK 7902 13-JUN-83 800 20

    7499 ALLEN SALESMAN 7698 15-AUG-83 1600 300 30

    7521 WARD SALESMAN 7698 26-MAR-84 1250 500 30

    7566 JONES MANAGER 7839 31-OCT-83 2975 20

    7654 MARTIN SALESMAN 7698 05-DEC-83 1250 1400 30

    7698 BLAKE MANAGER 7839 11-JUN-84 2850 30

    7782 CLARK MANAGER 7839 14-MAY-84 2450 10

    7788 SCOTT ANALYST 7566 05-MAR-84 3000 20

    7839 KING PRESIDENT 09-JUL-84 5000 10

    7844 TURNER SALESMAN 7698 04-JUN-84 1500 0 30

    7876 ADAMS CLERK 7788 04-JUN-84 1100 20

    7900 JAMES CLERK 7698 23-JUL-84 950 30

    7902 FORD ANALYST 7566 05-DEC-83 3000 20

    7934 MILLER CLERK 7782 21-NOV-83 1300 10

    14 rows selected.

    c) Listar todos os funcionrios com salrio entre 1000 e 2000

    ENAME DEPTNO SAL

    ---------- ------- -------

    ALLEN 30 1600

    WARD 30 1250

    MARTIN 30 1250

    TURNER 30 1500

    ADAMS 20 1100

    MILLER 10 1300

    6 rows selected.

    d) Listar os nmeros e os nomes dos departamentos, ordenados pelo nome do departamento

  • 21

    DEPTNO DNAME

    ------- --------------

    10 ACCOUNTING

    40 OPERATIONS

    20 RESEARCH

    30 SALES

    e) Listar os diferentes tipos de cargo

    JOB

    ---------

    ANALYST

    CLERK

    MANAGER

    PRESIDENT

    SALESMAN

    f) Listar os detalhes dos empregados dos departamentos 10 e 20 em ordem alfabtica de

    nome.

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ------- ---------- --------- ------- --------- ------- ------- -------

    7876 ADAMS CLERK 7788 04-JUN-84 1100 20

    7782 CLARK MANAGER 7839 14-MAY-84 2450 10

    7902 FORD ANALYST 7566 05-DEC-83 3000 20

    7566 JONES MANAGER 7839 31-OCT-83 2975 20

    7839 KING PRESIDENT 09-JUL-84 5000 10

    7934 MILLER CLERK 7782 21-NOV-83 1300 10

    7788 SCOTT ANALYST 7566 05-MAR-84 3000 20

    7369 SMITH CLERK 7902 13-JUN-83 800 20

    g) Listar os nomes e os cargos de todos os CLERK do departamento 20.

    ENAME JOB

    ---------- ---------

    SMITH CLERK

    ADAMS CLERK

    h) Listar os nomes de todos os empregados onde aparece TH ou LL no nome.

    ENAME

    ----------

    SMITH

    ALLEN

    MILLER

    i) Listar os seguintes detalhes dos funcionrios que tem gerente.

    ENAME JOB SAL

    ---------- --------- -------

    SMITH CLERK 800

    ALLEN SALESMAN 1600

    WARD SALESMAN 1250

    JONES MANAGER 2975

    MARTIN SALESMAN 1250

    BLAKE MANAGER 2850

    CLARK MANAGER 2450

    SCOTT ANALYST 3000

    TURNER SALESMAN 1500

    ADAMS CLERK 1100

    JAMES CLERK 950

  • 22

    FORD ANALYST 3000

    MILLER CLERK 1300

    j) Mostrar o nome e a remunerao total de todos os empregados.

    ENAME REMUNERACAO

    ---------- -----------

    SMITH 9600

    ALLEN 19500

    WARD 15500

    JONES 35700

    MARTIN 16400

    BLAKE 34200

    CLARK 29400

    SCOTT 36000

    KING 60000

    TURNER 18000

    ADAMS 13200

    JAMES 11400

    FORD 36000

    MILLER 15600

    k) Mostrar todos os empregados que foram admitidos em 1983.

    ENAME DEPTNO HIREDATE

    ---------- ------- ---------

    SMITH 20 13-JUN-83

    ALLEN 30 15-AUG-83

    JONES 20 31-OCT-83

    MARTIN 30 05-DEC-83

    FORD 20 05-DEC-83

    MILLER 10 21-NOV-83

    l) Mostrar o nome, o salrio anual e comisso, de todos os vendedores com salrio mensal

    maior do que a comisso. O resultado deve ser ordenado com os maiores salrios na frente.

    Se dois ou mais empregados tiverem o mesmo salrio, deve ser ordenado pelo nome do

    funcionrio.

    ENAME SALARIO_ANUAL COMM

    ---------- ------------- -------

    ALLEN 19200 300

    TURNER 18000 0

    WARD 15000 500

    m) Selecione os dados para reproduzir a sada mostrada abaixo.

    QUEM, O QUE, QUANDO

    ---------------------------------------------------------------------

    SMITH TEM A POSICAO DE CLERK NO DEPARTAMENTO 20 DESDE 13-JUN-83

    ALLEN TEM A POSICAO DE SALESMAN NO DEPARTAMENTO 30 DESDE 15-AUG-83

    WARD TEM A POSICAO DE SALESMAN NO DEPARTAMENTO 30 DESDE 26-MAR-84

    JONES TEM A POSICAO DE MANAGER NO DEPARTAMENTO 20 DESDE 31-OCT-83

    MARTIN TEM A POSICAO DE SALESMAN NO DEPARTAMENTO 30 DESDE 05-DEC-83

    BLAKE TEM A POSICAO DE MANAGER NO DEPARTAMENTO 30 DESDE 11-JUN-84

    CLARK TEM A POSICAO DE MANAGER NO DEPARTAMENTO 10 DESDE 14-MAY-84

    SCOTT TEM A POSICAO DE ANALYST NO DEPARTAMENTO 20 DESDE 05-MAR-84

    KING TEM A POSICAO DE PRESIDENT NO DEPARTAMENTO 10 DESDE 09-JUL-84

    TURNER TEM A POSICAO DE SALESMAN NO DEPARTAMENTO 30 DESDE 04-JUN-84

    ADAMS TEM A POSICAO DE CLERK NO DEPARTAMENTO 20 DESDE 04-JUN-84

    JAMES TEM A POSICAO DE CLERK NO DEPARTAMENTO 30 DESDE 23-JUL-84

    FORD TEM A POSICAO DE ANALYST NO DEPARTAMENTO 20 DESDE 05-DEC-83

    MILLER TEM A POSICAO DE CLERK NO DEPARTAMENTO 10 DESDE 21-NOV-83

  • 23

    2.16 Respostas dos exerccios

    a) SQL> SELECT *

    2 FROM SALGRADE

    b) SQL> SELECT *

    2 FROM EMP

    c) SQL> SELECT ENAME, DEPTNO, SAL

    2 FROM EMP

    3 WHERE SAL BETWEEN 1000 AND 2000

    d) SQL> SELECT DEPTNO, DNAME

    2 FROM DEPT

    3 ORDER BY DNAME

    e) SQL> SELECT DISTINCT JOB

    2 FROM EMP

    f) SQL> SELECT *

    2 FROM EMP

    3 WHERE DEPTNO IN(10,20)

    4 ORDER BY ENAME

    g) SQL> SELECT ENAME, JOB

    2 FROM EMP

    3 WHERE JOB = CLERK' 4 AND DEPTNO = 20

    h) SQL> SELECT ENAME

    2 FROM EMP

    3 WHERE ENAME LIKE '%TH%'

    4 OR ENAME LIKE '%LL%'

    i) SQL> SELECT ENAME, JOB, SAL

    2 FROM EMP

    3 WHERE MGR IS NOT NULL

    j) SQL> SELECT ENAME, SAL*12+NVL(COMM,0) REMUNERACAO

    2 FROM EMP

    k) SQL> SELECT ENAME, DEPTNO, HIREDATE

    2 FROM EMP

    3 WHERE HIREDATE LIKE '%83'

    l) SQL> SELECT ENAME, SAL*12 SALARIO_ANUAL, COMM

    2 FROM EMP

    3 WHERE SAL > COMM

    4 AND JOB = 'SALESMAN'

    5 ORDER BY SAL DESC, ENAME

    m) SQL> SELECT ENAME||' TEM A POSICAO DE '||JOB||

    2 ' NO DEPARTAMENTO '||DEPTNO||

    3 ' DESDE '||HIREDATE "QUEM, O QUE, QUANDO"

    4 FROM EMP

  • 24

    Captulo 3: Variveis de Substituio

    3.1 Objetivos deste captulo

    Descrever as variveis de substituio e como estas so usadas nas declaraes SQL.

    3.2 Variveis de substituio com um "&"

    A varivel de substituio pode ser utilizada em uma declarao SELECT, representando um

    valor a ser fornecido quando o comando for executado.

    SQL> SELECT EMPNO, ENAME, SAL

    2 FROM EMP

    3 WHERE DEPTNO = &NUMERO_DO_DEPARTAMENTO

    Enter value for numero_do_departamento: 10

    old 3: WHERE DEPTNO = &NUMERO_DO_DEPARTAMENTO

    new 3: WHERE DEPTNO = 10

    EMPNO ENAME SAL

    ------- ---------- -------

    7782 CLARK 2450

    7839 KING 5000

    7934 MILLER 1300

    3.3 Variveis de substituio com dois "&"

    Quando so utilizados dois "&" na varivel, o SQL*PLUS solicita o valor da varivel apenas

    uma vez, guardando este valor para uso subseqente.

    Exemplo: &&NUMERO_DO_DEPARTAMENTO

  • 25

    Captulo 4: Funes Numricas e de Caracteres

    4.1 Objetivos deste captulo

    Este captulo mostra as funes do Oracle que manipulam nmeros e sequncias de

    caracteres.

    4.2 Funes que manipulam caracteres

    4.2.1 LOWER(coluna | literal)

    Transforma letras maisculas em minsculas.

    SQL> SELECT LOWER(DNAME), LOWER('CURSO DE SQL')

    2 FROM DEPT

    LOWER(DNAME) LOWER('CURSODESQL')

    -------------- --------------------

    accounting curso de sql

    research curso de sql

    sales curso de sql

    operations curso de sql

    4.2.2 UPPER(coluna | literal)

    Transforma letras minsculas em maisculas.

    SQL> SELECT ENAME

    2 FROM EMP

    3 WHERE ENAME = UPPER('smith')

    ENAME

    ----------

    SMITH

    4.2.3 INITCAP(coluna | literal)

    Transforma a primeira letra da palavra em maiscula e as demais minsculas.

    SQL> SELECT INITCAP(DNAME), INITCAP(LOC)

    2 FROM DEPT

    INITCAP(DNAME) INITCAP(LOC)

    -------------------- --------------------

    Accounting New York

    Research Dallas

    Sales Chicago

    Operations Boston

    4.2.4 LPAD(coluna | literal, tamanho, 'caracter')

    Preenche a sequncia de caracteres, esquerda, com o caracter e o tamanho informados. Se

    o caracter de preenchimento no for informado, ser utilizado o caracter de espao.

  • 26

    No exemplo abaixo, as trs colunas so preenchidas esquerda at um total de 20 caracteres.

    A primeira coluna foi preenchida com asteriscos, a segunda com espaos, e a terceira com

    pontos. Note que a terceira coluna numrica.

    SQL> SELECT LPAD(DNAME, 20, *'), LPAD(DNAME, 20), LPAD(DEPTNO, 20,'.') 2 FROM DEPT

    LPAD(DNAME,20,*') LPAD(DNAME,20) LPAD(DEPTNO,20,'.') -------------------- -------------------- --------------------

    **********ACCOUNTING ACCOUNTING ..................10

    ************RESEARCH RESEARCH ..................20

    ***************SALES SALES ..................30

    **********OPERATIONS OPERATIONS ..................40

    4.2.5 RPAD(coluna | literal, tamanho, 'caracter')

    Preenche a seqncia de caracteres, direta, com o caracter e o tamanho informados. Se o

    caracter de preenchimento no for informado, ser utilizado o caracter de espao.

    SQL> SELECT RPAD(DNAME, 20, *'), RPAD(DNAME, 20), RPAD(DEPTNO, 20,'.') 2 FROM DEPT

    RPAD(DNAME,20,'*') RPAD(DNAME,20) RPAD(DEPTNO,20,'.')

    -------------------- -------------------- --------------------

    ACCOUNTING********** ACCOUNTING 10..................

    RESEARCH************ RESEARCH 20..................

    SALES*************** SALES 30..................

    OPERATIONS********** OPERATIONS 40..................

    4.2.6 SUBSTR(coluna | literal, posio, comprimento)

    Retorna uma seqncia de caracteres, a partir da posio indicada, com o comprimento

    especificado.

    SQL> SELECT SUBSTR('ORACLE',2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5)

    2 FROM DEPT

    SUBSTR('ORACLE',2,4) SUBSTR(DNAME,2) SUBSTR(DNAME,3,5)

    -------------------- --------------- --------------------

    RACL CCOUNTING COUNT

    RACL ESEARCH SEARC

    RACL ALES LES

    RACL PERATIONS ERATI

    4.2.7 INSTR(coluna | literal, seqncia de caracteres', posio, n)

    Encontra a posio da primeira ocorrncia da seqncia de caracteres na coluna ou literal, se

    os dois ltimos parmetros forem omitidos.

    Encontra a posio da n-sima ocorrncia a partir da posio indicada, se os quatro

    parmetros forem fornecidos.

    SQL> SELECT DNAME,

    2 INSTR(DNAME,'A'), INSTR(DNAME,'ES'), INSTR(DNAME,'C',1,2)

    3 FROM DEPT

  • 27

    DNAME INSTR(DNAME,'A') INSTR(DNAME,'ES') INSTR(DNAME,'C',1,2)

    ------------ ---------------- ----------------- --------------------

    ACCOUNTING 1 0 3

    RESEARCH 5 2 0

    SALES 2 4 0

    OPERATIONS 5 0 0

    4.2.8 LTRIM(coluna | literal, 'caracteres')

    Remove os caracteres indicados esquerda da coluna ou do literal. Se nenhum caracter for

    especificado, sero eliminados os espaos esquerda.

    SQL> SELECT DNAME,

    2 LTRIM(DNAME,'A'), LTRIM(DNAME,'AS'), LTRIM(DNAME,'ASOP')

    3 FROM DEPT

    DNAME LTRIM(DNAME,'A') LTRIM(DNAME,'AS') LTRIM(DNAME,'ASOP')

    -------------- ---------------- ----------------- -------------------

    ACCOUNTING CCOUNTING CCOUNTING CCOUNTING

    RESEARCH RESEARCH RESEARCH RESEARCH

    SALES SALES LES LES

    OPERATIONS OPERATIONS OPERATIONS ERATIONS

    No exemplo acima, na segunda coluna foram removidas as letras "A" esquerda dos nomes

    dos departamentos. Na terceira coluna foram removidas tanto a letra "A" quanto a letra "S".

    Na quarta coluna foram removidas as letras "A", "S", "O" e "P" esquerda.

    4.2.9 RTRIM(coluna | literal, 'caracteres')

    Remove os caracteres indicados direita da coluna ou do literal. Se nenhum caracter for

    especificado, sero eliminados os espaos direita.

    SQL> SELECT DNAME,

    2 RTRIM(DNAME,'G'), RTRIM(DNAME,'GHS'), RTRIM(DNAME,'N')

    3 FROM DEPT

    DNAME RTRIM(DNAME,'G') RTRIM(DNAME,'GHS') RTRIM(DNAME,'N')

    -------------- ---------------- ------------------ ----------------

    ACCOUNTING ACCOUNTIN ACCOUNTIN ACCOUNTING

    RESEARCH RESEARCH RESEARC RESEARCH

    SALES SALES SALE SALES

    OPERATIONS OPERATIONS OPERATION OPERATIONS

    4.2.10 SOUNDEX(coluna | literal)

    Retorna uma seqncia de caracteres que representa o som das palavras contidas na coluna

    ou no literal.

    SQL> SELECT ENAME, SOUNDEX(ENAME)

    2 FROM EMP

    3 WHERE SOUNDEX(ENAME) = SOUNDEX('FRED')

    ENAME SOUNDEX(ENAME)

    ---------- --------------------

    FORD F630

  • 28

    4.2.11 LENGTH(coluna | literal)

    Retorna o nmero de caracteres (ou dgitos) na coluna ou literal especificados.

    SQL> SELECT LENGTH('CURSO DE SQL'), LENGTH(DEPTNO), LENGTH(DNAME)

    2 FROM DEPT

    LENGTH('CURSODESQL') LENGTH(DEPTNO) LENGTH(DNAME)

    --------------------- --------------------- ---------------------

    12 2 10

    12 2 8

    12 2 5

    12 2 10

    4.2.12 TRANSLATE(coluna | literal, de, para)

    Substitui os caracteres do argumento "de" pelos caracteres do argumento "para", na coluna

    ou literal especificados. Todas as ocorrncias dos caracteres do parmetro "de" so

    substitudas pelos caracteres no parmetro "para". Caracteres do parmetro "de" sem

    correspondncia no parmetro "para" so removidos.

    No exemplo abaixo foram trocados os caracteres "C" por "P" nos nomes dos funcionrios.

    SQL> SELECT ENAME, TRANSLATE(ENAME,'C','P')

    2 FROM EMP

    3 WHERE DEPTNO = 10

    ENAME TRANSLATE(ENAME,'C','P')

    ---------- -------------------------

    CLARK PLARK

    KING KING

    MILLER MILLER

    No exemplo abaixo foram trocados "A" por "I", e "R" por "T", nos cargos.

    SQL> SELECT JOB, TRANSLATE(JOB,'AR','IT')

    2 FROM EMP

    3 WHERE DEPTNO = 10

    JOB TRANSLATE(JOB,'AR','IT')

    --------- ------------------------------

    MANAGER MINIGET

    PRESIDENT PTESIDENT

    CLERK CLETK

    4.2.13 REPLACE(coluna | literal, de, para)

    Substitui a seqncia de caracteres "de" pela seqncia de caracteres "para", na coluna ou

    literal especificados.

    No exemplo abaixo SALESMAN substitudo por VENDEDOR:

    SQL> SELECT JOB, REPLACE(JOB,'SALESMAN','VENDEDOR')

    2 FROM EMP

  • 29

    JOB REPLACE(JOB,'SALESMAN','VENDEDOR')

    --------- ----------------------------------------

    CLERK CLERK

    SALESMAN VENDEDOR

    SALESMAN VENDEDOR

    MANAGER MANAGER

    SALESMAN VENDEDOR

    MANAGER MANAGER

    MANAGER MANAGER

    ANALYST ANALYST

    PRESIDENT PRESIDENT

    SALESMAN VENDEDOR

    CLERK CLERK

    CLERK CLERK

    ANALYST ANALYST

    CLERK CLERK

    14 rows selected.

    No exemplo abaixo, "CO" foi substitudo por "PX":

    SELECT ENAME, REPLACE(ENAME,'CO','PX')

    FROM EMP

    ENAME REPLACE(ENAME,'CO','PX')

    ---------- ------------------------

    SMITH SMITH

    ALLEN ALLEN

    WARD WARD

    JONES JONES

    MARTIN MARTIN

    BLAKE BLAKE

    CLARK CLARK

    SCOTT SPXTT SELECT DNAME, LENGTH(DNAME),

    2 LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A'))

    3 FROM DEPT

    DNAME LENGTH(DNAME)LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A'))

    ---------- ------------------------------------------------------------

    ACCOUNTING 10 0

    RESEARCH 8 1

    SALES 5 2

    OPERATIONS 10 1

  • 30

    4.3 Funes numricas

    4.3.1 ROUND(coluna | literal, n)

    Arredonda o valor da coluna ou do literal na n-sima casa decimal. Se n for negativo

    eqivale s dezenas. Se n for omitido eqivale a um nmero inteiro.

    SQL> SELECT ROUND(45.923,1), ROUND(45.923), ROUND(42.323,-1),

    ROUND(SAL/32,2)

    2 FROM EMP

    3 WHERE DEPTNO = 10

    ROUND(45.923,1) ROUND(45.923) ROUND(42.323,-1) ROUND(SAL/32,2)

    ----------------- ----------------- ----------------- -----------------

    45.9 46 40 76.56

    45.9 46 40 156.25

    45.9 46 40 40.63

    4.3.2 TRUNC(coluna | literal, n)

    Trunca o valor da coluna ou do literal na n-sima posio.

    SQL> SELECT TRUNC(45.923,1), TRUNC(45.923), TRUNC(42.323,-1),

    TRUNC(SAL/32,2)

    2 FROM EMP

    3 WHERE DEPTNO = 10

    TRUNC(45.923,1) TRUNC(45.923) TRUNC(42.323,-1) TRUNC(SAL/32,2)

    ----------------- ----------------- ----------------- -----------------

    45.9 45 40 76.56

    45.9 45 40 156.25

    45.9 45 40 40.62

    4.3.3 CEIL(coluna | literal)

    Retorna o menor inteiro maior ou igual ao valor da coluna ou do literal.

    SQL> SELECT CEIL(SAL), CEIL(99.9), CEIL(101.76), CEIL(-11.1)

    2 FROM EMP

    3 WHERE SAL BETWEEN 3000 AND 5000

    CEIL(SAL) CEIL(99.9) CEIL(101.76) CEIL(-11.1)

    --------- ---------- ------------ -----------

    3000 100 102 -11

    5000 100 102 -11

    3000 100 102 -11

    4.3.4 FLOOR(coluna | literal)

    Retorna o maior inteiro menor ou igual ao valor da coluna ou literal.

    SQL> SELECT FLOOR(SAL), FLOOR(99.9), FLOOR(101.76), FLOOR(-11.1)

    2 FROM EMP

    3 WHERE FLOOR(SAL) BETWEEN 3000 AND 5000

  • 31

    FLOOR(SAL) FLOOR(99.9) FLOOR(101.76) FLOOR(-11.1)

    ---------- ----------- ------------- ------------

    3000 99 101 -12

    5000 99 101 -12

    3000 99 101 -12

    4.3.5 POWER(coluna | literal, n)

    Eleva a coluna ou literal a n-sima potncia.

    SQL> SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5)

    2 FROM EMP

    3 WHERE DEPTNO = 10

    SAL POWER(SAL,2) POWER(SAL,3) POWER(50,5)

    ----------------- ----------------- ----------------- -----------------

    2450 6002500 14706125000 312500000

    5000 25000000 125000000000 312500000

    1300 1690000 2197000000 312500000

    4.3.6 EXP(coluna | literal)

    Eleva e (2.71828183...) coluna ou literal.

    SELECT EXP(4)

    FROM DUAL

    EXP(4)

    ----------

    54.59815

    1 row selected.

    4.3.7 LOG(base, coluna | literal)

    Calcula o logaritmo da coluna ou do literal na base especificada.

    SELECT LOG(10,100)

    FROM DUAL

    LOG(10,100)

    -----------

    2

    1 row selected.

    4.3.8 LN(coluna | literal)

    Calcula o logaritmo neperiano da coluna ou do literal.

    SELECT LN(95)

    FROM DUAL

    LN(95)

    ----------

    4.55387689

    4.3.9 SQRT(coluna | literal)

    Retorna a raiz quadrada da coluna ou do literal.

  • 32

    SQL> SELECT SAL, SQRT(SAL), SQRT(40), SQRT(COMM)

    2 FROM EMP

    3 WHERE COMM > 0

    SAL SQRT(SAL) SQRT(40) SQRT(COMM)

    ---- ----------------- ----------------- -----------------

    1600 40 6.324555320336759 17.32050807568877

    1250 35.35533905932738 6.324555320336759 22.3606797749979

    1250 35.35533905932738 6.324555320336759 37.41657386773941

    4.3.10 SIGN(coluna | literal)

    Retorna -1 se o valor da coluna ou do literal for negativo, retorna 0 se for igual a zero, ou

    retorna 1 se for maior do que zero.

    SQL> SELECT SAL-COMM, SIGN(SAL-COMM), COMM-SAL, SIGN(COMM-SAL)

    2 FROM EMP

    3 WHERE DEPTNO = 30

    SAL-COMM SIGN(SAL-COMM) COMM-SAL SIGN(COMM-SAL)

    ----------------- ----------------- ----------------- -----------------

    1300 1 -1300 -1

    750 1 -750 -1

    -150 -1 150 1

    1500 1 -1500 -1

    Salrios maiores do que a comisso podem ser listados conforme mostrado abaixo:

    SQL> SELECT ENAME, SAL, COMM

    2 FROM EMP

    3 WHERE SIGN(SAL-COMM) = 1

    ENAME SAL COMM

    ---------- ----------------- -----------------

    ALLEN 1600 300

    WARD 1250 500

    TURNER 1500 0

    4.3.11 ABS(coluna | literal)

    Retorna o valor absoluto da coluna ou do literal.

    SQL> SELECT SAL, COMM, COMM-SAL, ABS(COMM-SAL)

    2 FROM EMP

    3 WHERE DEPTNO = 30

    SAL COMM COMM-SAL ABS(COMM-SAL)

    ----------------- ----------------- ----------------- -----------------

    1600 300 -1300 1300

    1250 500 -750 750

    1250 1400 150 150

    2850

    1500 0 -1500 1500

    950

    4.3.12 MOD(valor1, valor2)

    Retorna o resto da diviso de valor1 por valor2.

  • 33

    SQL> SELECT SAL, COMM, MOD(SAL,COMM), MOD(100,40)

    2 FROM EMP

    3 WHERE DEPTNO = 30

    4 ORDER BY COMM

    SAL COMM MOD(SAL,COMM) MOD(100,40)

    ----------------- ----------------- ----------------- -----------------

    1500 0 1500 20

    1600 300 100 20

    1250 500 250 20

    1250 1400 1250 20

    2850 20

    950 20

    4.3.13 Funes trigonomtricas

    Calculam o seno (SIN), coseno (COS), e tangente (TAN) da coluna ou literal.

    SELECT SIN(30*3.141592654/180),

    COS(60*3.141592654/180),

    TAN(45*3.141592654/180)

    FROM DUAL

    SIN(30*3.1 COS(60*3.1 TAN(45*3.1

    ---------- ---------- ----------

    .5 .5 1

    4.3.14 Funes hiperblicas

    Calculam o seno hiperblico (SINH), coseno hiperblico (COSH) e tangente hiperblica

    (TANH) da coluna ou literal.

    SELECT SINH(1), COSH(0), TANH(.5)

    FROM DUAL

    SINH(1) COSH(0) TANH(.5)

    ---------- ------- ----------

    1.17520119 1 .462117157

    4.4 Exerccios

    a) Listar o nmero do departamento, o nome do funcionrio, e o salrio com aumento de

    15% expresso em nmero inteiro.

    DEPTNO ENAME PCTSAL

    ----------------- ---------- -----------------

    20 SMITH 920

    30 ALLEN 1840

    30 WARD 1438

    20 JONES 3421

    30 MARTIN 1438

    30 BLAKE 3278

    10 CLARK 2818

    20 SCOTT 3450

    10 KING 5750

    30 TURNER 1725

    20 ADAMS 1265

    30 JAMES 1093

    20 FORD 3450

    10 MILLER 1495

  • 34

    b) Gerar a listagem mostrada a seguir:

    EMPREGADO_E_CARGO

    --------------------

    SMITH CLERK

    ALLEN SALESMAN

    WARD SALESMAN

    JONES MANAGER

    MARTIN SALESMAN

    BLAKE MANAGER

    CLARK MANAGER

    SCOTT ANALYST

    KING PRESIDENT

    TURNER SALESMAN

    ADAMS CLERK

    JAMES CLERK

    FORD ANALYST

    MILLER CLERK

    14 rows selected.

    c) Listar uma lista contendo todos os empregados com um identificador composto pelas duas

    primeiras letras de seus cargos, os dois dgitos do meio de seus nmeros de matrcula, e o

    cdigo sonoro de seus nomes.

    NOME CODIGO

    ---------- --------

    SMI