134
SQL Básico para Oracle SQL Básico para Oracle Compilação Compilação Leandro Mendes Ferreira Leandro Mendes Ferreira MANUAL DE TREINAMENTO Versão: 01 Pág. 1/134 Vigência: Data: 05/07/2011 SQL Básico para Oracle

Apostila SQL Básico Para Oracle

Embed Size (px)

Citation preview

  • SQL Bsico para OracleSQL Bsico para Oracle

    CompilaoCompilaoLeandro Mendes Ferreira Leandro Mendes Ferreira

    MANUAL DE TREINAMENTO

    Verso: 01 Pg. 1/134 Vigncia: Data: 05/07/2011

    SQL Bsico para Oracle

  • ContedoContedo .................................................................................................................. 2

    Banco de dados relacional ........................................................................................ 9

    Modelagem de Dados ............................................................................................... 9

    Entidade ................................................................................................................ 9

    Relacionamento .................................................................................................... 9

    Tipos de relacionamento ..................................................................................... 11

    Relacionamento um-para-um ........................................................................... 11

    Relacionamento um-para-muitos ..................................................................... 11

    Relacionamento muitos-para-muitos ............................................................... 11

    ............................................................................................................................ 12

    Cardinalidade ...................................................................................................... 12

    Atributo ............................................................................................................... 12

    Chave Primria .................................................................................................... 13

    Chave Estrangeira ............................................................................................... 13

    Integridade Referencial ....................................................................................... 13

    Deleo Restrita -> ......................................................................................... 14

    Atualizao e Linha Restrita -> ...................................................................... 14

    Operadores Relacionais .......................................................................................... 15

    Sistema de Gerenciamento de Banco de Dados ..................................................... 19

    O Utilitrio PL/SQL Developer ................................................................................. 20

    Query Builder ..................................................................................................... 20

    A Linguagem SQL ................................................................................................... 21

    Tipos de declaraes SQL ....................................................................................... 22

    DDL (Data Definition Language) .......................................................................... 22

    DML (Data Manipulation Language) .................................................................... 22

  • Recomendaes sobre os nomes das tabelas ..................................................... 23

    Tipo de dado das colunas ....................................................................................... 24

    Restries (constrains) ........................................................................................... 25

    Construo bsica de uma consulta ....................................................................... 26

    Expresses aritmticas ........................................................................................... 27

    Nomes alternativos para ttulos de colunas ............................................................ 29

    O operador de concatenao ................................................................................. 30

    Literais .................................................................................................................... 30

    Manuseio de valores nulos ..................................................................................... 31

    Eliminao de linhas duplicadas ............................................................................. 33

    Ordenao das linhas ............................................................................................. 34

    Critrios de pesquisa .............................................................................................. 36

    Consultas com condies mltiplas ........................................................................ 41

    Precedncia dos operadores .................................................................................. 42

    Resumo do comando SELECT ................................................................................. 43

    Funes que manipulam caracteres ....................................................................... 44

    LOWER(coluna | literal) ........................................................................................ 44

    UPPER(coluna | literal) ......................................................................................... 44

    INITCAP(coluna | literal) ....................................................................................... 44

    LPAD(coluna | literal, tamanho, 'caracter') .......................................................... 45

    RPAD(coluna | literal, tamanho, 'caracter') .......................................................... 45

    SUBSTR(coluna | literal, posio, comprimento) ................................................. 45

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

    LTRIM(coluna | literal, 'caracteres') ..................................................................... 46

    RTRIM(coluna | literal, 'caracteres') ..................................................................... 47

    SOUNDEX(coluna | literal) ................................................................................... 47

    LENGTH(coluna | literal) ...................................................................................... 47

    TRANSLATE(coluna | literal, de, para) .................................................................. 48

    REPLACE(coluna | literal, de, para) ...................................................................... 48

  • Funes aninhadas .............................................................................................. 49

    Funes numricas ................................................................................................. 50

    ROUND(coluna | literal, n) ................................................................................... 50

    TRUNC(coluna | literal, n) .................................................................................... 50

    CEIL(coluna | literal) ............................................................................................ 51

    FLOOR(coluna | literal) ........................................................................................ 51

    POWER(coluna | literal, n) ................................................................................... 51

    EXP(coluna | literal) ............................................................................................. 52

    LOG(base, coluna | literal) ................................................................................... 52

    LN(coluna | literal) ............................................................................................... 52

    SQRT(coluna | literal) .......................................................................................... 52

    SIGN(coluna | literal) ........................................................................................... 53

    ABS(coluna | literal) ............................................................................................. 53

    MOD(valor1, valor2) ............................................................................................ 54

    Funes trigonomtricas ..................................................................................... 54

    Funes hiperblicas ........................................................................................... 54

    Funes que manipulam datas ............................................................................... 56

    SYSDATE .............................................................................................................. 56

    Aritmtica de datas ............................................................................................. 56

    MONTHS_BETWEEN(data1,data2) ....................................................................... 57

    ADD_MONTHS(data, meses) ................................................................................ 57

    NEXT_DAY(data, dia_da_semana) ........................................................................ 58

    LAST_DAY(data) ................................................................................................... 58

    ROUND(data) ....................................................................................................... 58

    TRUNC(data) ....................................................................................................... 59

    Funes de converso ............................................................................................ 59

    Formatos de Data ................................................................................................ 59

    TO_CHAR(nmero|data,['formato']) ..................................................................... 61

    Formatos Numricos ........................................................................................... 62

  • TO_NUMBER(cadeia_de_caracteres) .................................................................... 62

    TO_DATE('cadeia_de_caracteres','formato') ........................................................ 63

    Funes que aceitam qualquer tipo de dado .......................................................... 63

    DECODE(coluna|expresso,pes1,res1,[pes2,res2,...],default) ............................. 63

    NVL(coluna|valor, valor) ...................................................................................... 65

    GREATEST(coluna|valor, coluna|valor,...) ............................................................ 66

    LEAST(coluna|valor, coluna|valor,...) ................................................................... 66

    VSIZE(coluna|valor) ............................................................................................. 66

    Funes aninhadas revisitadas ............................................................................... 67

    Usando funes de grupo ....................................................................................... 68

    A clusula GROUP BY ........................................................................................... 68

    Excluindo linhas dos grupos ................................................................................ 69

    Grupos dentro de grupos ..................................................................................... 69

    Funes disponveis de grupo ............................................................................. 70

    Funes de grupo e resultados individuais .......................................................... 71

    A clusula HAVING .............................................................................................. 72

    Ordem das clusulas ........................................................................................... 74

    Junes equivalentes .............................................................................................. 75

    Produto ................................................................................................................ 76

    Junes no equivalentes .................................................................................... 77

    Regra para juno de tabelas .............................................................................. 77

    Sumrio da Sintaxe ............................................................................................. 77

    Junes externas .................................................................................................... 79

    Juno de uma tabela com ela mesmo ................................................................ 79

    Junes verticais ................................................................................................. 80

    Unio ................................................................................................................... 80

    Interseo ........................................................................................................... 81

    Subtrao ............................................................................................................ 81

    Combinao de operadores ................................................................................. 81

  • A clusula ORDER BY ........................................................................................... 82

    Regras para utilizar junes verticais .................................................................. 82

    Definio de consultas aninhadas .......................................................................... 84

    Consultas internas que retornam apenas um valor ............................................. 84

    Como as consultas aninhadas so executadas ................................................... 85

    Consultas internas que retornam mais de um valor ............................................ 85

    Operadores ANY e ALL ......................................................................................... 87

    Clusula HAVING com consultas aninhadas ........................................................ 88

    Ordenao em consultas aninhadas .................................................................... 89

    Limite para o aninhamento ................................................................................. 89

    Consulta interna correlacionada .......................................................................... 89

    O operador EXISTS .............................................................................................. 91

    Linguagem de Definio de Dados ......................................................................... 92

    Sintaxe do comando: ........................................................................................... 92

    Criao das tabelas do curso: ............................................................................. 93

    Exemplos de restries ....................................................................................... 93

    Criando uma tabela a partir de outra tabela ....................................................... 95

    Alterando uma tabela .......................................................................................... 97

    Trocando o nome de uma tabela ......................................................................... 98

    Descrio das tabelas e colunas ......................................................................... 98

    Removendo tabelas ............................................................................................. 99

    Inserindo novas linhas em uma tabela ................................................................ 99

    Atualizando linhas em uma tabela .................................................................... 103

    Eliminando linhas de uma tabela ...................................................................... 104

    Viso ..................................................................................................................... 105

    O que uma viso ............................................................................................ 105

    Vises simples ................................................................................................... 105

    Vises complexas .............................................................................................. 105

    O comando CREATE VIEW ..................................................................................... 106

  • Usando uma viso para operaes de DML .......................................................... 107

    Alterando dados atravs das vises ..................................................................... 110

    Eliminao de vises ............................................................................................ 110

    Finalidades dos ndices ......................................................................................... 112

    Estrutura dos ndices ......................................................................................... 112

    Tipos de ndices ................................................................................................. 112

    Criao dos ndices ............................................................................................ 113

    Criao de um ndice para melhorar o acesso. .................................................. 113

    Criao de um ndice para garantir unicidade. .................................................. 114

    Eliminao dos ndices ...................................................................................... 114

    Quando um ndice utilizado ............................................................................ 114

    ndices e Junes ............................................................................................... 115

    Sugestes para criao dos ndices ................................................................... 116

    O gerador de seqncias ...................................................................................... 117

    Gerao de nmeros seqenciais com NEXTVAL .............................................. 118

    Valor atual da seqncia ................................................................................... 119

    Regras para utilizar CURRVAL E NEXTVAL ......................................................... 119

    Alterando uma seqncia .................................................................................. 120

    Concedendo privilgios em seqncias ............................................................. 121

    Eliminando uma seqncia ............................................................................... 121

    Listando seqncias .......................................................................................... 121

    O que uma transao ........................................................................................ 122

    Efetivando as mudanas ................................................................................... 123

    Removendo mudanas ...................................................................................... 123

    Falhas do sistema .............................................................................................. 123

    O significado de uma transao ........................................................................ 124

    Controlando transaes .................................................................................... 124

    COMMIT [WORK] ................................................................................................ 124

    SAVEPOINT savepoint_name ............................................................................. 125

  • ROLLBACK[WORK] to [SAVEPOINT] savepoint_name ......................................... 126

    Rollback a nvel de declarao .......................................................................... 126

    Rollbacks implcitos ........................................................................................... 127

    Autocommit ...................................................................................................... 127

    Exemplo de utilizao de COMMIT e ROLLBACK ................................................ 127

    Consistncia de leitura ...................................................................................... 131

    Transaes somente de leitura ......................................................................... 132

  • 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 entre si.

    Os trs elementos de um banco de dados relacional so:

    tabelas

    colunas

    linhas

    Modelagem de Dados

    Entidade

    Pode ser entendida como uma coisa ou algo da realidade modelada onde deseja-se manter informaes no banco de dados (BD). Por exemplo, em um sistema escolar, algumas entidades podem ser os alunos, professores, horrio, disciplinas e avaliaes. Note que uma entidade pode representar tanto objetos concretos (alunos), quanto objetos abstratos (horrio). A entidade representada por um retngulo, que contm o nome da entidade. Observe o exemplo abaixo.

    A entidade ALUNO representa todos os estudantes sobre as quais se deseja manter informaes no BD

    Relacionamento

    9

  • Relacionamento um conjunto de associaes entre entidades. O relacionamento representado por um losango. Esse losango ligado por linhas aos retngulos que representam as entidades participantes do relacionamento. O exemplo abaixo possui duas entidades, MDICO e PACIENTE, e um relacionamento chamado CONSULTA.

    O modelo acima informa que o BD mantm informaes sobre mdicos, pacientes, alm de um conjunto de associaes (consulta), cada uma ligando um mdico a um paciente.

    Um relacionamento pode envolver ocorrncias de uma mesma entidade. Neste caso, estamos diante de um auto-relacionamento. Observe o exemplo:

    CASAMENTO um relacionamento que envolve duas ocorrncias da entidade PESSOA. Para facilitar o entendimento, em geral costumamos identificar o papel de cada entidade no relacionamento (para o exemplo, marido e esposa).

    Cardinalidade do relacionamentoObserve o modelo abaixo:

    10

  • Estamos diante de um relacionamento (possui) entre as entidades EMPREGADO e DEPENDENTE. Considere as seguintes questes:

    Um empregado pode no ter dependentes? Um dependente pode ter mais de um empregado associado ? Determinado empregado pode possuir mais de um dependente? Pode existir dependente sem algum empregado associado?

    Tipos de relacionamento

    Existem trs tipos de relacionamento entre entidades:

    um-para-um um-para-muitos muitos-para-muitos

    Relacionamento um-para-um

    O relacionamento um-para-um usado quando uma entidade A se relaciona com uma entidade B e vice-versa.

    Este relacionamento representado pelo sinal: 1:1

    Veja o exemplo:

    Relacionamento um-para-muitos

    O relacionamento um-para-muitos usado quando uma entidade A pode se relacionar com uma ou mais entidades B.

    Este relacionamento representado pelo sinal: 1:N

    Veja o exemplo:

    Relacionamento muitos-para-muitos

    O relacionamento muitos-para-muitos usado quando vrias entidades A se relacionam com vrias entidades B.

    Este relacionamento representado pelo sinal: N:N ou N:M11

  • Veja o exemplo:

    Cardinalidade

    A cardinalidade um conceito importante para ajudar a definir o relacionamento, ela define o nmero de ocorrncias em um relacionamento.

    Para determinar a cardinalidade, deve-se fazer a pergunta relativa ao relacionamento em ambas as direes. No exemplo a seguir, temos:

    Um departamento possui quantos empregados?

    - no mnimo 1 e no mximo N.

    Um empregado est alocado em quantos departamentos?

    - no mnimo em 1 e no mximo em 1

    Somando-se as cardinalidades, definimos o resultado final do relacionamento, ou seja, 1:N

    Atributo

    Atributo uma caracterstica relevante associada a cada ocorrncia de entidade ou Relacionamento. Observe no modelo abaixo a notao utilizada para atributos:

    12

  • Cardinalidade do atributoObserve que o modelo acima no informa se determinado aluno pode ter vrios telefones, ou mesmo se algum aluno pode no ter telefones. Para deixar o modelo mais preciso, costumamos expressar cardinalidade para os atributos. Observe a cardinalidade do atributo telefone no modelo abaixo:

    Dessa forma, podemos concluir que determinado aluno pode no ter telefone (cardinalidade mnima zero) ou pode ter vrios (cardinalidade mxima N). A cardinalidade dos atributos cdigo e nome (1,1)

    Chave Primria

    Em toda e qualquer tabela existente em um banco de dados relacional haver sempre uma coluna ou um conjunto de colunas concatenadas, cujos valores so nicos na tabela, isto e, nunca se repete aquele valor em nenhuma outra linha da tabela.Essa coluna ou conjunto de colunas concatenadas identifica uma nica linha da tabela. Entao dizemos que essa coluna ou conjunto de colunas forma a chave primaria da tabela.

    Chave Estrangeira

    Uma tabela relacional e uma estruturao dos dados por assunto, organizada em tabelas com linhas e colunas, e cada linha e a representao de uma ocorrncia de um objeto, um assunto, descrita por valores em cada coluna. Dessas colunas j sabemos que uma ou um conjunto delas forma o que definimos como o identificados nico de cada linha que e a chave primaria da tabela.

    Integridade Referencial

    13

  • Quando colocamos uma coluna como chave estrangeira em uma tabela, assumimos responsabilidade com o banco de dados por assim dizer.As colunas pertencentes a chave estrangeira da tabela A devem ter o mesmo domnio das colunas pertencentes a chave primaria da tabela B.

    O valor de uma chave estrangeira em uma tabela A deve ser um valor de chave primaria da tabela B, ou ento ser nulo. Sintetizando: uma tabela contem uma chave estrangeira, ento o valor dessa chave so pode ser:

    Nulo neste caso pode, pois representa a inexistencia de referencia para uma linha da tabela.Igual ao valor de alguma chave primaria na tabela referenciada.

    Existe um conjunto de regras de operao para um banco de dados que coloca restries, regras de atualizao das tabelas do banco de dados, de forma a garantir emanter a integridade referencial. So elas:

    Deleo Restrita ->

    Ao excluir (deletar) a tabela pai , se ela possuir filhos relacionados (ou seja, se o departamento tiver funcionrios), a excluso e impedida. Isso evita que o bando de dados fique inconsistente, ou seja, linhas de Funcionrio com valor de chave estrangeira inexistente como chave primaria na tabela associada. Outras opes para garantir a integridade de referencias do banco de dados seriam excluir todos os filhos em cascata, fazendo com que todos os funcionrios referenciem um departamento-padro ou fazer com que todos os funcionrios fiquem sem departamento.

    Incluso e Linha Restrita ->

    Ao inserir um dado na tabela filha, caso seja obrigatrio que ele j possua dado um dado na tabela ai, ou seja chave estrangeira associada, verifica se ele esta relacionada tabela pai, seno impede a operao.

    Atualizao e Linha Restrita ->

    Ao atualizar a chave estrangeira de uma tabela, verifica se existe uma linha da tabela associada que possua como chave primaria o novo valor da chave estrangeira, seno impede essa operao. A opo cascata e sempre perigosa de ser utilizada em banco de dados, pois existe o risco de perder todos os dados existentes em uma determinada tabela se optar por apagar as suas linhas que esto associadas a uma determinada linha que ser deletada da tabela que possui a chave primaria referenciada.

    14

  • Operadores Relacionais

    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.

    15

  • Seleo/Restrio

    Projeo

    Unio

    16

  • Interseo

    Diferena

    17

  • 18

  • 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.

    19

  • O Utilitrio PL/SQL Developer

    PL/SQL Developer um ambiente de desenvolvimento integrado (IDE) que foi especialmente destinado ao desenvolvimento de programas armazenados em bancos de dados Oracle. Ao longo do tempo, temos observado que mais e mais lgicas de Negcios e Aplicaes vem sendo migradas / desenvolvidas em servidores Oracle, tornando assim a programao em PL/SQL uma parte significante de todo o processo de desenvolvimento.

    PL/SQL Developer tem como principal objetivo facilidade de uso, qualidade de cdigo e produtividade, ou seja, um conjunto de conceitos que hoje so as chaves para o sucesso de qualquer projeto de desenvolvimento de aplicaes Oracle.

    Query Builder

    A criao de declaraes SELECT ou a modificao de declaraes j existentes se tornam rpidas e eficientes. Simplesmente clique e arraste tabelas e views, selecione colunas, crie, de modo fcil, clausulas WHERE e ORDER BY, faa join de tabelas baseadas em foreing key e pronto sua consulta j esta criada.

    20

  • A Linguagem SQL

    A linguagem SQL a ferramenta bsica para acesso aos dados de um banco de dados relacional. Foi desenvolvida inicialmente nos laboratrios da IBM (1976) sendo atualmente um padro para os SGBD relacionais. Apesar de existirem alguns padres da linguagem SQL, a maioria dos fabricantes de banco de dados criou suas prprias extenses para explorar as caractersticas do banco de dados como o caso da Oracle com o PL/SQL.

    A SQL considerada como sendo uma linguagem no procedural uma vez que ela processa conjunto de registros e fornece acesso ou navegao automtica de dados. A base para esta linguagem a lgebra relacional, muito embora existam diversas caractersticas importantes que no pertencem a lgebra relacional.

    Na verdade, a SQL padro deve ser considerada como uma sublinguagem, uma vez que no possui comandos ou declaraes que permitam o controle de repeties ou de desvios condicionais e incondicionais. Para este tipo de controle a Oracle desenvolveu o PL/SQL que consiste em uma extenso da SQL padro.

    21

  • Tipos de declaraes SQL

    Os comandos ou declaraes em SQL so divididos nas seguintes categorias:

    DDL (Data Definition Language) a parte do SQL usada para definir dados e objetos de um banco

    de dados. Atravs destes comandos so feitas inseres no dicionrio de dados.

    A tabela abaixo indica comandos DDL :

    Comando

    Funo

    Create Table

    Cria uma tabela

    Create Index

    Cria um ndice

    Alter Table Altera ou insere uma coluna da tabela

    Drop Table Elimina uma tabela do banco de Dados

    Drop Index Elimina um ndice

    Grant Concede privilgios de acesso p/a um usurio

    DML (Data Manipulation Language)

    a parte da SQL usada para a recuperao ou manipulao de dados. Permite realizar consultas, adicionar, alterar e excluir informaes do banco de dados. Possui tambm clusulas adicionais e funes para clculo de totais, mdias, contagem de registros e mximo e mnimo entre valores.

    22

  • A tabela abaixo apresenta alguns dos mais importantes comandos dessa categoria:

    Comando

    Funo

    Select Seleciona dados de uma base

    Insert Insere uma linha em uma tabela

    Delete Apaga linhas da Tabela

    Update Altera o contedo de colunas (campos) da tabela.

    Commit Grava no disco as alteraes feitas

    Rollback Desfaz as alteraes feitas aps o ltimo commit

    Recomendaes sobre os nomes das tabelas

    Usar nomes descritivos para as tabelas, colunas, ndices e outros objetos.

    Abreviar de forma consistente, mantendo sempre a mesma abreviatura.

    Consistncia de singular e plural, no colocando o nome de algumas tabelas no singular e de outras no plural

    Usar uma regra consistente para atribuir nomes. Uma regra pode ser, todas as tabelas do sistema financeiro comeam com FIN_.

    Use o mesmo nome para descrever o mesmo atributo em tabelas diferentes.

    23

  • Tipo de dado das colunas

    Tipo Contedo

    CHAR(n) Caracteres alfanumricos com at 'n' caracteres. Coluna de tamanho constante independente do que est armazenado. Mximo de 255 caracteres.

    VARCHAR(n) Caracteres alfanumricos com at 'n' caracteres. No Oracle 6 sinnimo de CHAR, e pode ter no mximo 255 caracteres.

    VARCHAR2(n) Caracteres alfanumricos com at 'n caracteres. Introduzida no Oracle 7, o tamanho armazenado varia de acordo com o contedo da coluna, e pode ter at 2000 caracteres.

    LONG Caracteres alfanumricos com at 2 GigaBytes (2**31 - 1). S pode haver uma coluna LONG por tabela. No pode ser indexada. No podem ser especificadas restries de integridade, exceto NOT NULL.

    RAW(n) Dados binrios, como som e imagem, at 255 bytes. No podem ser executadas funes de manipulao de caracteres sobre colunas RAW. Tem as mesmas restries de LONG. No existe converso de caracteres, como, por exemplo, ANSI x PC850.

    LONG RAW Semelhante a RAW, porm podendo armazenar at 2 GigaBytes.

    ROWID Caracteres hexadecimais representando o endereo nico de uma linha em uma tabela.

    MLSLABEL Formato binrio to rtulo do sistema operacional. Usado com o Trusted ORACLE.

    NUMBER(p,s) Nmero com a preciso 'p' e a escala 's'. A preciso 'p' pode variar de 1 a 38. A escala 's' pode variar de -84 a +127

    DATE Data vlida, desde 1 de janeiro de 4712 AC, at 31 de dezembro de 4712 DC. Para cada coluna DATA so armazenados o Sculo, o Ano, o Ms, o Dia, a Hora, o Minuto e o Segundo.(Padro Americano)

    FLOAT Nmero de ponto flutuante com preciso decimal de 38 dgitos, ou preciso binria de 126 dgitos.

    24

  • Restries (constrains)

    So recursos proporcionados pelo SGBD para implementar regras de consistncia bsicas para os dados de uma tabela.

    Restrio Descrio

    CONSTRAINT

    nome_da_restrio

    Especifica o nome da restrio. opcional. Quando omitido o nome padro tem a forma de SYS_Cn, onde 'n' um nmero inteiro atribudo pelo Oracle que identifica unicamente a restrio.

    NULL

    NOT NULL

    Especifica se a coluna pode ou no conter valores nulos.

    UNIQUE Designa uma coluna, ou uma combinao de colunas, como chave nica. Cada coluna deve ser declarada como NOT NULL, e no podem ser chave primria.

    PRIMARY KEY Designa uma coluna, ou uma combinao de colunas, como chave primria. As colunas devem ser declaradas como NOT NULL e no podem ter a restrio UNIQUE. Se a chave primria contiver apenas uma coluna pode ser declarada na restrio da coluna. Se a chave primria contiver mltiplas colunas deve ser declarada na restrio da tabela.

    FOREIGN KEY (coluna...) REFERENCES tabela(col(s))

    Identifica a(s) coluna(s) como chave estrangeira . REFERENCES identifica a chave primria ou chave nica que referenciada.

    CHECK condio Especifica a condio que uma coluna deve satisfazer para a linha ser aceita na tabela. S pode se referenciar a colunas da mesma tabela. Uma restrio de coluna s pode referenciar a uma coluna, porm uma restrio de tabela pode referenciar mltiplas colunas.

    DISABLE

    (ENABLE)

    Desativa (ativa) uma restrio de integridade. O pado a restrio ativa.

    EXCEPTIONS INTO

    Identifica a tabela na qual o ORACLE armazena as informaes sobre as linhas que violaram as restries de integridade. A tabela deve existir antes desta condio ser especificada.

    25

  • 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:

    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

    26

  • 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.

    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

    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

    27

  • 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 BLAKE 37200 CLARK 32400 SCOTT 39000 KING 63000 TURNER 21000 ADAMS 16200 JAMES 14400 FORD 39000 MILLER 18600

    28

  • 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.

    29

  • 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

    EMPREGADO -------------------------------------------------- 7369SMITH 7499ALLEN 7521WARD 7566JONES 7654MARTIN 7698BLAKE 7782CLARK 7788SCOTT 7839KING 7844TURNER 7876ADAMS 7900JAMES 7902FORD 7934MILLER

    14 rows selected.

    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.

    30

  • SQL> COLUMN EMPREGADO FORMAT A20SQL> 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.

    Manuseio de valores nulos

    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

    31

  • 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

    b) um valor no nulo

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

    NVL(ColunaData, 01-jan-84')

    NVL(ColunaNumero, 9)

    32

  • NVL(ColunaCaracter, alfanumrico')

    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

    33

  • 10 MANAGER 10 PRESIDENT 20 ANALYST 20 CLERK 20 MANAGER 30 CLERK 30 MANAGER 30 SALESMAN

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

    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 alfabtica34

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

    35

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

    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

    SELECT ENAME, EMPNO, JOB, DEPTNO 2 FROM EMP 3 WHERE JOB = CLERK'

    36

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

    37

  • ALLEN 1600 WARD 1250 MARTIN 1250 TURNER 1500 ADAMS 1100 MILLER 1300

    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

    38

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

    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

    39

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

    40

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

    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 list