Você está na página 1de 136

SQL

Alexandre Costa Vieira alexandre.costa@racionalenergia.com.br (62) 9607-1555

SQL ORACLE

Contedo
PREFCIO ....................................................................................................................................................6 NOES DE BANCO DE DADOS .............................................................................................................7 O QUE UM BANCO DE DADOS .....................................................................................................................7 UTILIZAO .................................................................................................................................................7 APRESENTAO DOS DADOS ........................................................................................................................8 VISO DE NEGCIO.......................................................................................................................................8 MODELOS DE BASE DE DADOS ......................................................................................................................8 APLICAES DE BANCOS DE DADOS .............................................................................................................9 APLICATIVO DE BANCO DE DADOS...............................................................................................................9 TRANSAO ...............................................................................................................................................10 Atomicidade ...........................................................................................................................................10 Consistncia ..........................................................................................................................................10 Isolamento .............................................................................................................................................10 Durabilidade..........................................................................................................................................10 SEGURANA EM BANCO DE DADOS .............................................................................................................11 FUNES INTERNAS COMUNS EM BDS .......................................................................................................11 NOES DE BANCOS RELACIONAIS .................................................................................................11 O MODELO RELACIONAL.............................................................................................................................11 BANCO DE DADOS EXEMPLO .......................................................................................................................12 EXEMPLO: CLIENTE ....................................................................................................................................13 13 REGRAS DE TED CODD ...........................................................................................................................14 NOES DE CONJUNTO ........................................................................................................................16 ORIGEM ......................................................................................................................................................16 CONJUNTO ..................................................................................................................................................17 RELAES ..................................................................................................................................................17 ALGUNS CONCEITOS ...................................................................................................................................17 ALGUMAS NOTAES PARA CONJUNTOS ....................................................................................................18 SUBCONJUNTOS ..........................................................................................................................................19 ALGUNS CONJUNTOS ESPECIAIS ..................................................................................................................19 REUNIO DE CONJUNTOS ............................................................................................................................19 INTERSEO DE CONJUNTOS.......................................................................................................................19 PROPRIEDADES DOS CONJUNTOS ................................................................................................................20 DIFERENA DE CONJUNTOS ........................................................................................................................21 COMPLEMENTO DE UM CONJUNTO ..............................................................................................................22 LEIS DE AUGUSTUS DE MORGAN ...............................................................................................................22 DIFERENA SIMTRICA...............................................................................................................................23 A LINGUAGEM SQL .................................................................................................................................24 INTRODUO AO SQL ................................................................................................................................24 CARACTERSTICAS DO SQL ........................................................................................................................24 O CONJUNTO DE COMANDOS SQL .............................................................................................................25 ESCREVENDO COMANDOS SQL ..........................................................................................................26 O COMANDO SELECT ..................................................................................................................................26 OUTROS ITENS DA CLAUSULA SELECT .....................................................................................................27 EXPRESSES ARITMTICAS ........................................................................................................................28 COLUNAS SINNIMAS.................................................................................................................................29 O OPERADOR DE CONCATENAO .............................................................................................................30 LITERAIS ....................................................................................................................................................30 MANUSEANDO VALORES NULOS ................................................................................................................31

[Alexandre Costa Vieira SQL ORACLE]

Pgina 1

SQL ORACLE

FUNO NVL ............................................................................................................................................31 PREVENINDO A SELEO DE LINHAS DUPLICADAS ....................................................................................32 A CLAUSULA DISTINCT ...........................................................................................................................32 A CLAUSULA ORDER BY ..........................................................................................................................33 Padro da Ordenao dos Dados .........................................................................................................33 Invertendo o padro de ordenao.......................................................................................................33 Ordenao por vrias colunas ..............................................................................................................34 A CLAUSULA WHERE ...............................................................................................................................35 Operadores Lgicos ..............................................................................................................................35 Alfanumricos e Datas na clausula WHERE. ........................................................................................35 Comparando uma coluna com outra coluna na mesma linha ...............................................................36 Operadores SQL ....................................................................................................................................36 O Operador BETWEEN.........................................................................................................................37 O Operador IN ......................................................................................................................................37 O Operador LIKE ..................................................................................................................................37 Operador IS NULL ...............................................................................................................................38 Expresses Negativas ............................................................................................................................38 Pesquisando Dados com Mltiplas Condies ......................................................................................40 Precedncia dos Operadores.................................................................................................................42 RESUMO DO SELECT. ...............................................................................................................................42 EXERCCIO 1 - INTRODUO AO SQL, O COMANDO SELECT ....................................................................43 FUNES ....................................................................................................................................................46 INTRODUO A FUNES ...........................................................................................................................46 FUNES DE LINHA NICA ........................................................................................................................47 FUNES ALFANUMRICAS E NUMRICAS .................................................................................................47 Funes Alfanumricas .........................................................................................................................47 REPLACE ..............................................................................................................................................52 Aninhamento de Funes.......................................................................................................................52 FUNES NUMRICAS ................................................................................................................................53 ROUND .................................................................................................................................................53 TRUNC ..................................................................................................................................................53 CEIL ......................................................................................................................................................54 FLOOR ..................................................................................................................................................54 POWER .................................................................................................................................................54 SQRT .....................................................................................................................................................55 SIGN ......................................................................................................................................................55 ABS ........................................................................................................................................................55 MOD ......................................................................................................................................................56 EXERCCIO 2 - USANDO FUNES ..............................................................................................................56 FUNES DE DATA .....................................................................................................................................58 Armazenamento de Datas no ORACLE .................................................................................................58 Sysdate ...................................................................................................................................................58 Usando Operadores Aritmticos ...........................................................................................................59 MONSTHS_BEETWEEN .......................................................................................................................59 ADD_MONTHS .....................................................................................................................................60 NEXT_DAY ............................................................................................................................................60 LAST_DAY.............................................................................................................................................60 TRUNC ..................................................................................................................................................61 FUNES DE CONVERSO ..........................................................................................................................61 TO_CHAR .............................................................................................................................................61 FORMATOS DE DATA ..................................................................................................................................63 FORMATOS NUMRICOS .............................................................................................................................64 TO_NUMER ..........................................................................................................................................65 TO_DATE ..............................................................................................................................................65 FUNES QUE ACEITAM VRIOS TIPOS DE ENTRADA DE DADOS ...............................................................66 [Alexandre Costa Vieira SQL ORACLE] Pgina 2

SQL ORACLE

DECODE ...............................................................................................................................................66 NVL........................................................................................................................................................68 GREATEST ............................................................................................................................................68 LEAST ....................................................................................................................................................68 VSIZE.....................................................................................................................................................69 REVISANDO ANINHAMENTO DE FUNES ..................................................................................................69 EXERCCIO 3 MAIS FUNES ...................................................................................................................70 FUNES DE GRUPO ..............................................................................................................................72 GROUP BY ............................................................................................................................................72 USANDO FUNES DE GRUPO: ...................................................................................................................72 AVG .......................................................................................................................................................72 MIN........................................................................................................................................................73 COUNT ..................................................................................................................................................73 A CLAUSULA GROUP BY ..........................................................................................................................73 Excluindo linhas quando estiver Usando o GROUP BY .......................................................................74 Grupos dentro de Grupos ......................................................................................................................74 FUNES DE GRUPO E RESULTADOS INDIVIDUAIS .....................................................................................74 A CLAUSULA HAVING ..............................................................................................................................76 A ORDEM DAS CLAUSULAS NA DECLARAO SELECT. ............................................................................77 EXERCCIO 4 - FUNES DE GRUPO ............................................................................................................77 EXTRAINDO DADOS DE MAIS DE UMA TABELA............................................................................79 LIGAES (JOINS) ......................................................................................................................................79 Equi-Join ...............................................................................................................................................79 USANDO TABELAS COM SINNIMOS ...........................................................................................................80 Nom-Equi-Join ......................................................................................................................................81 REGRAS PARA LIGAES DE TABELAS. ......................................................................................................82 EXERCCIO 5 - SIMPLES LIGAES (JOIN) ...................................................................................................82 OUTROS MTODOS DE LIGAO ......................................................................................................84 LIGAES EXTERNAS (OUTHER JOIN) ........................................................................................................84 LIGANDO UMA TABELA COM ELA MESMA ..................................................................................................85 OPERADORES DE CONJUNTO ......................................................................................................................86 UNION...................................................................................................................................................86 INTERSECT ...........................................................................................................................................87 MINUS ...................................................................................................................................................87 ORDER BY ...............................................................................................................................................87 Regras Quando Usar Operadores de Conjuntos. ..................................................................................88 EXERCCIO 6 - OUTROS MTODOS DE LIGAES ........................................................................................89 SUB-PESQUISAS (SUBQUERIES)...........................................................................................................90 ANINHAMENTO DE SUB-PESQUISAS. ...........................................................................................................90 SUB-PESQUISAS DE LINHA NICA ..............................................................................................................91 COMO SO PROCESSADAS AS SUB-PESQUISAS ANINHADAS? ......................................................................91 SUB-PESQUISAS QUE RETORNA MAIS DE UMA LINHA .................................................................................92 COMPARANDO MAIS DE UM VALOR ............................................................................................................93 OPERADORES ANY OU ALL ......................................................................................................................94 CLAUSULA HAVING COM SUB-PESQUISAS ANINHADAS. ...........................................................................95 ORDENANDO DADOS COM SUB-PESQUISAS ................................................................................................95 SUB-PESQUISAS ANINHADAS ......................................................................................................................96 LIMITES DE ALINHAMENTO ........................................................................................................................96 Diretriz ..................................................................................................................................................96 SUB-PESQUISAS CORRELATAS ....................................................................................................................97 A PESQUISA INTERNA .................................................................................................................................98 Operadores ............................................................................................................................................98 [Alexandre Costa Vieira SQL ORACLE] Pgina 3

SQL ORACLE

OPERADOR EXISTS ...................................................................................................................................98 POR QUE USAR UMA SUB-PESQUISA CORRELATA? .....................................................................................99 EXERCCIO 7 - SUB-PESQUISAS .................................................................................................................100 LINGUAGEM DE MANIPULAO DOS DADOS .............................................................................102 INSERT ...................................................................................................................................................102 Inserindo Datas e informaes de Horas. ...........................................................................................103 Copiando linhas de Outra Tabela .......................................................................................................103 UPDATE .................................................................................................................................................103 DELETE ..................................................................................................................................................105 COMMIT E ROLLBACK .......................................................................................................................105 PROCESSANDO TRANSAES ...........................................................................................................106 O QUE UMA TRANSAO? .....................................................................................................................106 DESENHO E TERMOLOGIA DO BSICO BANCO DE DADOS RELACIONAL .........................106 DESENHO..................................................................................................................................................106 SIMPLES DIAGRAMA DE ENTIDADE E RELACIONAMENTO.........................................................................107 Como ler o Diagrama ..........................................................................................................................107 O DIAGRAMA DE TABELAS .......................................................................................................................107 Diagrama de Tabelas: .........................................................................................................................109 CHAVE ESTRANGEIRA(FOREIGN KEY) .....................................................................................................109 COLUNAS OBRIGATRIAS E OPCIONAIS ...................................................................................................110 LINGUAGEM DE DEFINIO DE DADOS E DICIONRIOS DE DADOS...................................111 ESTRUTURA DE DADOS ORACLE ............................................................................................................111 CRIANDO UMA TABELA ............................................................................................................................111 Diretriz para Nomear Tabelas.............................................................................................................111 Tipos de Colunas .................................................................................................................................112 Criando uma Tabela (CREATE TABLE) .............................................................................................113 CLAUSULA CONSTRAINT......................................................................................................................114 Parmetro das Restries ....................................................................................................................116 CRIANDO UMA TABELA COM LINHAS DE OUTRA TABELA. .......................................................................116 ALTERANDO UMA TABELA .......................................................................................................................118 EXCLUINDO UMA TABELA ........................................................................................................................120 O COMANDO COMMENT .......................................................................................................................120 O COMANDO RENAME ...........................................................................................................................120 O DICIONRIO DE DADOS ORACLE ................................................................................................121 ACESSANDO O DICIONRIO DE DADOS .....................................................................................................121 DICIONRIO DE DADOS TABELAS E VISES................................................................................121 TABELAS ..................................................................................................................................................121 SINNIMOS ...............................................................................................................................................122 A VISO DICTIONARY .........................................................................................................................122 EXERCCIO 8 - LINGUAGEM DE DEFINIO DE DADOS ..............................................................................126 RESPOSTAS DOS EXERCCIOS PROPOSTOS .................................................................................128 EXERCCIO 1 - INTRODUO AO SQL, O COMANDO SELECT ..................................................................128 EXERCCIO 2 - USANDO FUNES ............................................................................................................129 EXERCCIO 3 MAIS FUNES .................................................................................................................129 EXERCCIO 4 - FUNES DE GRUPO ..........................................................................................................130 EXERCCIO 5 - SIMPLES LIGAES (JOIN) .................................................................................................131 EXERCCIO 6 - OUTROS MTODOS DE LIGAES ......................................................................................132 EXERCCIO 7 - SUB-PESQUISAS .................................................................................................................133 EXERCCIO 8 - LINGUAGEM DE DEFINIO DE DADOS ..............................................................................134 [Alexandre Costa Vieira SQL ORACLE] Pgina 4

SQL ORACLE

[Alexandre Costa Vieira SQL ORACLE]

Pgina 5

SQL ORACLE

Prefcio
Este curso explora toda a potncia da linguagem SQL. Uma bsica introduo para concepo do Desenho do Banco de Dados Relacional o qual estamos discutindo. PBLICO Todos aqueles que esto tecnicamente envolvidos na criao do ORACLE aplicaes ou manutenes desse aplicativo, Programadores, Administradores de Banco de Dados, Analistas e Programadores Snior. Usurios finais quem deseja estender seus conhecimentos, pode achar o curso benfico. PR-REQUISITOS Um grau de conhecimento em computao exigido. Uso de um Micro Computador desejvel. OBJETIVOS No final do curso os alunos estaro aptos para: Configurar e manter a estrutura de dados ORACLE. Efetuar complexas pesquisas. Completar bsico entendimento de Relacional o princpio e terminologia. MANEIRA DE APRESENTAO Este curso direcionado com combinaes tradicionais de sees com mdias projees e sees de demonstraes usando a tela de um projetor. Os alunos tero ampla oportunidade para praticar os tpicos trazidos nas sees anteriores. HORRIO Este curso exige no mnimo 15 horas divididas em 5 dias, e mais 30 horas de dedicao extra curso para que o aluno possa assimilar os conceitos apresentados em sala de aula.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 6

SQL ORACLE

Noes de banco de dados


O que um banco de dados Banco de dados (ou base de dados), um conjunto de registros dispostos em estrutura regular que possibilita a reorganizao dos mesmos e produo de informao. Um banco de dados normalmente agrupa registros utilizveis para um mesmo fim. Um banco de dados usualmente mantido e acessado por meio de um software conhecido como Sistema Gerenciador de Banco de Dados (SGBD). Normalmente um SGBD adota um modelo de dados, de forma pura, reduzida ou estendida. Muitas vezes o termo banco de dados usado, de forma errnea, como sinnimo de SGDB. O modelo de dados mais adotado hoje em dia o modelo relacional, onde as estruturas tm a forma de tabelas, compostas por tuplas (linhas) e colunas. Um Sistema de Gesto de Bases de Dados, (SGBD) no nada mais do que um conjunto de programas que permitem armazenar, modificar e extrair informao de um banco de dados. H muito tipos diferentes de SGBD. Desde pequenos sistemas que funcionam em computadores pessoais a sistemas enormes que esto associados a mainframes. Um Sistema de Gesto de Base de Dados implica a criao e manuteno de bases de dados, elimina a necessidade de especificao de definio de dados, age como interface entre os programas de aplicao e os ficheiros de dados fsicos e separa as vises lgica e de concepo dos dados. Assim sendo, so basicamente trs as componentes de um SGBD: 1. Linguagem de definio de dados (especifica contedos, estrutura a base de dados e define os elementos de dados); 2. Linguagem de manipulao de dados (para poder alterar os dados na base); 3. Dicionrio de dados (guarde definies de elementos de dados e respectivas caractersticas descreve os dados, quem os acede, etc.

Utilizao Os bancos de dados so utilizados em muitas aplicaes, abrangendo praticamente todo o campo dos programas de computador. Os bancos de dados so o mtodo de armazenamento preferencial e baseiam-se em tecnologias padronizadas de bancos de dados. Um banco de dados um conjunto de informaes com uma estrutura regular. Um banco de dados normalmente, mas no necessariamente, armazenado em algum formato de mquina legvel para um computador. H uma grande variedade de bancos de dados, desde simples tabelas armazenadas em um nico arquivo at gigantescos bancos de dados com muitos milhes de registros, armazenados em salas cheias de discos rgidos.Bancos de dados caracteristicamente modernos so desenvolvidos desde os anos da dcada de 1960.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 7

SQL ORACLE

Apresentao dos dados A apresentao dos dados geralmente semelhante de uma planilha eletrnica, porm os sistemas de gesto de banco de dados possuem caractersticas especiais para o armazenamento, classificao, gesto da integridade e recuperao dos dados. Com a evoluo de padres de conectividade entre as tabelas de um banco de dados e programas desenvolvidos em linguagens como Java, Delphi, Visual Basic, C++ etc, a apresentao dos dados, bem como a navegao, passou a ser definida pelo programador ou o designer de aplicaes. Como hoje em dia a maioria das linguagens de programao fazem ligaes a bancos de dados, a apresentao destes tem ficado cada vez mais a critrio dos meios de programao, fazendo com que os bancos de dados deixem de restringir-se s pesquisas bsicas, dando lugar ao compartilhamento, em tempo real, de informaes, mecanismos de busca inteligentes e permissividade de acesso hierarquizada.

Viso de negcio Todas as organizaes tm quantidades, por vezes, astronmicas de dados e informao que tm de armazenar. Contudo, o papel tem problemas ao nvel da persistncia (tempo e tipo de visualizao) e da recuperao (validao e verificao), ou seja, dura pouco. Neste sentido, torna-se mais fcil encontrar a informao numa base de dados que recorre a uma das tecnologias de informao de maior sucesso. Ou seja, as bases de dados estendem a funo do papel ao guardar a informao em computadores. Qualquer empresa que pretenda garantir um controle efetivo sobre todo o seu negcio, tem obrigatoriamente de recorrer a sistemas de gesto de bases de dados. O Microsoft Excel continua a ser uma ferramenta de controle extremamente poderosa porque consegue operacionalizar os dados e assim criar informao til ao planejamento dirio das empresas. Contudo, existem outro tipo de ferramentas, mais completas e com funcionalidades acrescidas que elevam para outros nveis, a capacidade operacional de gerar informao de valor para a organizao.

Modelos de base de dados O modelo plano (ou tabular) consiste de matrizes simples, bidimensionais, compostas por elementos de dados: inteiros, nmeros reais, etc. Este modelo plano a base das planilhas eletrnicas. O modelo em rede permite que vrias tabelas sejam usadas simultaneamente atravs do uso de apontadores (ou referncias). Algumas colunas contm apontadores para outras tabelas ao invs de dados. Assim, as tabelas so ligadas por referncias, o que pode ser visto como uma rede. Uma variao particular deste modelo em rede, o modelo hierrquico, limita as relaes a uma estrutura semelhante a uma rvore (hierarquia tronco, galhos), ao invs do modelo mais geral direcionado por grafos. Bases de dados relacionais consistem, principalmente de trs componentes: uma coleo de estruturas de dados, nomeadamente relaes, ou informalmente tabelas; uma coleo dos operadores, a lgebra e o clculo relacionais; e uma coleo de restries da integridade, definindo o conjunto consistente de estados de base de dados e de alteraes

[Alexandre Costa Vieira SQL ORACLE]

Pgina 8

SQL ORACLE

de estados. As restries de integridade podem ser de quatro tipos: domnio (tambm conhecidas como type), atributo, relvar (varivel relacional) e restries de base de dados. Diferentemente dos modelos hierrquico e de rede, no existem quaisquer apontadores, de acordo com o Princpio de Informao: toda informao tem de ser representada como dados; qualquer tipo de atributo representa relaes entre conjuntos de dados. As bases de dados relacionais permitem aos utilizadores (incluindo programadores) escreverem consultas (queries) que no foram antecipadas por quem projetou a base de dados. Como resultado, bases de dados relacionais podem ser utilizadas por vrias aplicaes em formas que os projetistas originais no previram, o que especialmente importante em bases de dados que podem ser utilizadas durante dcadas. Isto tem tornado as bases de dados relacionais muito populares no meio empresarial. O modelo relacional uma teoria matemtica desenvolvida por Edgard Frank Codd, matemtico e pesquisador da IBM, para descrever como as bases de dados devem funcionar. Embora esta teoria seja a base para o software de bases de dados relacionais, muito poucos sistemas de gesto de bases de dados seguem o modelo de forma restrita ou a p da letra mais adiante nos aprofundaremos neste modelo - e todos tm funcionalidades que violam a teoria, desta forma variando a complexidade e o poder. A discusso se esses bancos de dados merecem ser chamados de relacional ficou esgotada com o tempo, com a evoluo dos bancos existentes. Os bancos de dados hoje implementam o modelo definido como objeto-relacional. Aplicaes de bancos de dados Sistemas Gerenciadores de Bancos de dados so usados em muitas aplicaes, enquanto atravessando virtualmente a gama inteira de software de computador. Os Sistemas Gerenciadores de Bancos de dados so o mtodo preferido de armazenamento/recuperao de dados/informaes para aplicaes multi-usurias grandes onde a coordenao entre muitos usurios necessria. At mesmo usurios individuais os acham conveniente, entretanto, muitos programas de correio eletrnico e organizadores pessoais esto baseados em tecnologia de banco de dados standard. Aplicativo de Banco de Dados Um Aplicativo de Banco de dados um tipo de software exclusivo para gerenciar um banco de dados. Aplicativos de banco de dados abrangem uma vasta variedade de necessidades e objectivos, de pequenas ferramentas como uma agenda, at complexos sistemas empresariais para desempenhar tarefas como a contabilidade. O termo "Aplicativo de Banco de dados" usualmente se refere a softwares que oferecem uma interface para o banco de dados. O software que gerencia os dados geralmente chamado de sistema gerenciador de banco de dados (SGBD) ou (se for embarcado) de "database engine". Exemplos de aplicativos de banco de dados so Microsoft Visual FoxPro, Microsoft Access, dBASE, MySQL,PostgreSQL, Microsoft SQL Server, Oracle, Informix, DB2, Cach e Sybase.
[Alexandre Costa Vieira SQL ORACLE] Pgina 9

SQL ORACLE

Transao um conjunto de procedimentos que executado num banco de dados, que para o usurio visto como uma nica ao. A integridade de uma transao depende de 4 propriedades, conhecidas como ACID. Atomicidade Todas as aes que compem a unidade de trabalho da transao devem ser concludas com sucesso, para que seja efetivada. Qualquer ao que constitui falha na unidade de trabalho, a transao deve ser desfeita (rollback). Quando todas as aes so efetuadas com sucesso, a transao pode ser efetivada (commit). Consistncia Nenhuma operao do banco de dados de uma transao pode ser parcial.O status de uma transao deve ser implementado na ntegra. Por exemplo, um pagamento de conta no pode ser efetivado se o processo que debita o valor da conta corrente do usurio no for efetivado antes, nem vice-versa. Isolamento Cada transao funciona completamente parte de outras estaes. Todas as operaes so parte de uma transao nica. O principio que nenhuma outra transao, operando no mesmo sistema, pode interferir no funcionamento da transao corrente( um mecanismo de controle). Outras transaes no podem visualizar os resultados parciais das operaes de uma transao em andamento. Durabilidade Significa que os resultados de uma transao so permanentes e podem ser desfeitos somente por uma transao subseqente.Por exemplo: todos os dados e status relativos a uma transao devem ser armazenados num repositrio permanente, no sendo passveis de falha por uma falha de hardware. Na prtica, alguns SGBDs relaxam na implementao destas propriedades buscando desempenho. Controle de concorrncia um mtodo usado para garantir que as transaes sejam executadas de uma forma segura e sigam as regras ACID. Os SGBD devem ser capazes de assegurar que nenhuma ao de transaes completadas com sucesso (committed transactions) seja perdida ao desfazer transaes abortadas (rollback). Uma transao uma unidade que preserva consistncia. Requeremos, portanto, que qualquer escalonamento produzido ao se processar um conjunto de transaes concorrentemente seja computacionalmente equivalente a um escalonamento produzindo executando essas transaes serialmente em alguma ordem. Diz-se que um sistema que garante esta propriedade assegura a seriabilidade.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 10

SQL ORACLE

Segurana em banco de dados Os bancos de dados so utilizados para armazenar diversos tipos de informaes, desde dados sobre uma conta de e-mail at dados importantes da Receita Federal. Para tal existem diversos tipos, os quais variam em complexidade e sobretudo em segurana. Criptografia Senhas Backup Clientes Fotos

Funes internas comuns em BDs Tabelas Regras Procedimentos armazenados (mais conhecidos como stored procedures) Gatilho Default Viso ndice

Noes de bancos relacionais


O modelo relacional um modelo de dados, adequado a ser o modelo subjacente de um Sistema Gerenciador de Banco de Dados (SGBD), que se baseia no princpio em que todos os dados esto guardados em tabelas (ou, matematicamente falando, relaes). Toda sua definio terica e baseada na lgica de predicados e na teoria dos conjuntos. O conceito foi criado por Edgar Frank Codd em 1970, sendo descrito no artigo "Relational Model of Data for Large Shared Data Banks". Na verdade, o modelo relacional foi o primeiro modelo de dados descrito teoricamente, os bancos de dados j existentes passaram ento a ser conhecidos como (modelo hierrquico, modelo em rede ou Codasyl e modelo de listas invertidas). O modelo relacional O modelo relacional para gerncia de bancos de dados (SGBD) um modelo de dados baseado em lgica e na teoria de conjuntos. Em definio simplificada, o modelo baseia-se em dois conceitos: conceito de entidade e relao - Uma entidade um elemento caracterizado pelos dados que so
[Alexandre Costa Vieira SQL ORACLE] Pgina 11

SQL ORACLE

recolhidos na sua identificao vulgarmente designado por tabela. Na construo da tabela identificam-se os dados da entidade a atribuio de valores a uma entidade constri um registro da tabela. A relao determina o modo como cada registro de cada tabela se associa a registros de outras tabelas. Historicamente ele o sucessor do modelo hierrquico e do modelo em rede. Estas arquiteturas antigas so at hoje utilizadas em alguns data centers com alto volume de dados, onde a migrao inviabilizada pelo custo que ela demandaria; existem ainda os novos modelos baseados em orientao ao objeto, que na maior parte das vezes so encontrados como kits em linguagem formal. O modelo relacional foi inventado pelo Dr. Codd e subsequentemente mantido e aprimorado por Chris Date e Hugh Darwen como um modelo geral de dados. No Terceiro Manifesto (1995) eles mostraram como o modelo relacional pode ser estendido com caractersticas de orientao a objeto sem comprometer os seus princpios fundamentais. A linguagem padro para os bancos de dados relacionais, SQL, apenas vagamente remanescente do modelo matemtico. Atualmente ela adotada, apesar de suas restries, porque ela antiga e muito mais popular que qualquer outra linguagem de banco de dados. A principal proposio do modelo relacional que todos os dados so representados como relaes matemticas, isto , um subconjunto do produto Cartesiano de n conjuntos. No modelo matemtico (diferentemente do SQL), a anlise dos dados feita em uma lgica de predicados de dois valores (ou seja, sem o valor nulo); isto significa que existem dois possveis valores para uma proposio: verdadeira ou falsa. Os dados so tratados pelo clculo relacional ou lgebra relacional. O modelo relacional permite ao projetista criar um modelo lgico consistente da informao a ser armazenada. Este modelo lgico pode ser refinado atravs de um processo de normalizao. Um banco de dados construdo puramente baseado no modelo relacional estar inteiramente normalizado. O plano de acesso, outras implementaes e detalhes de operao so tratados pelo sistema DBMS, e no devem ser refletidos no modelo lgico. Isto se contrape prtica comum para DBMSs SQL nos quais o ajuste de desempenho frequentemente requer mudanas no modelo lgico. Os blocos bsicos do modelo relacional so o domnio, ou tipo de dado. Uma tupla um conjunto de atributos que so ordenados em pares de domnio e valor. Uma relvar (varivel relacional) um conjunto de pares ordenados de domnio e nome que serve como um cabealho para uma relao. Uma relao um conjunto desordenado de tuplas. Apesar destes conceitos matemticos, eles correspondem basicamente aos conceitos tradicionais dos bancos de dados. Uma relao similar ao conceito de tabela e uma tupla similar ao conceito de linha. O princpio bsico do modelo relacional o princpio da informao: toda informao representada por valores em relaes (relvars). Assim, as relvars no so relacionadas umas s outras no momento do projeto. Entretanto, os projetistas utilizam o mesmo domnio em vrios relvars, e se um atributo dependente de outro, esta dependncia garantida atravs da integridade referencial. Banco de dados exemplo Um exemplo, bem simples da descrio de algumas tabelas e seus atributos:
[Alexandre Costa Vieira SQL ORACLE] Pgina 12

SQL ORACLE

Cliente(ID Cliente, ID Taxa, Nome, Endereo, Cidade, Estado, CEP, Telefone) Pedido de compra(Nmero do pedido, ID Cliente, Factura, Data do pedido, Data prometida, Status) Item do pedido(Nmero do pedido, Nmero do item, Cdigo do produto, Quantidade) Nota fiscal(Nmero da nota, ID Cliente, Nmero do pedido, Data, Status) Item da nota fiscal(Nmero da nota,Nmero do item,Cdigo do produto, Quantidade vendida) Neste projeto ns temos cinco relvars: Cliente, Pedido de compra, Item do pedido, Nota fiscal e Item da nota fiscal. Os atributos em negrito so chaves candidatas. Os itens sublinhados (em negrito ou no, chaves compostas) so as chaves estrangeiras. Normalmente uma chave candidata escolhida arbitrariamente para ser chamada de chave primria e utilizada com preferncia sobre as outras chaves candidatas, que so ento chamadas de chaves alternativas. Uma chave candidata um identificador nico que garante que nenhuma tupla ser duplicada; isto faz com que o relacionamento em algo denominado um multiconjunto, porque viola a definio bsica de um conjunto. Uma chave pode ser composta, isto , pode ser formada por vrios atributos (chave composta). Abaixo temos um exemplo tabular da nossa varivel exemplo Cliente; um relacionamento pode ser abstrado como um valor que pode ser atribudo a uma relvar. Exemplo: cliente ID Cliente ID Taxa Nome Endereo [Mais campos...] ======================================================================== 1234567890 555-5512222 Joo Carlos Rua bigodone, 120 ... 2223344556 555-5523232 Dorotia Santos Avenida barbeiro,12 ... 3334445563 555-5533322 Lisbela da Cruz Rua dos bigodes,123 ... 4232342432 555-5325523 E. F. Codd Rua do gilete,51 ... Se ns tentarmos inserir um novo cliente com o ID 1234567890, isto ir violar o projeto da relvar pois ID Cliente uma chave primria e ns j temos um cliente com o nmero 1234567890. O DBMS deve rejeitar uma transao como esta e deve acusar um erro de violao da integridade. As chaves estrangeiras so condies de integridade que garantem que o valor de um atributo obtido de uma chave candidata de outra relvar, por exemplo na relvar Pedido o atributo ID Cliente uma chave estrangeira. Uma unio uma operao que retorna a informao de vrias relvars de uma vez. Atravs da unio de relvars do exemplo acima podemos consultar no banco de dados quais so os clientes, pedidos e
[Alexandre Costa Vieira SQL ORACLE] Pgina 13

SQL ORACLE

notas. Se ns queremos apenas as tuplas de um cliente especfico, podemos especificar isto utilizando uma condio de restrio.Se queremos obter todos os pedidos do cliente 1234567890, podemos consultar o banco de dados de forma que este retorne toda linha na tabela de Pedidos com ID Cliente igual a 1234567890 e agrupar a tabela de pedidos com a tabela de itens de pedido baseado no Nmero do pedido. Existe uma imperfeio no projeto de banco de dados acima. A tabela de notas contm um atributo nmero do pedido. Assim, cada tupla na tabela de notas ter um pedido, o que implica precisamente um pedido para cada nota, mas na realidade uma nota pode ser criada a partir de muitos pedidos, ou mesmo para nenhum pedido em particular. Adicionalmente um pedido contm um nmero de nota, implicando que cada pedido tem uma nota correspondente. Mas novamente isto no verdadeiro no mundo real. Um pedido s vezes pago atravs de vrias notas, e s vezes pago sem um nota. Em outras palavras podemos ter muitas notas por pedido e muitos pedidos por nota. Isto um relacionamento vrios-para-vrios entre pedidos e notas. Para representar este relacionamento no banco de dados uma nova tabela deve ser criada com o propsito de especificar a correspondncia entre pedidos e notas: PedidoNota(Nmero do pedido,Nmero da nota) Agora, um pedido tem um relacionamento um-para-vrios para a tabela PedidoNota, assim como o Cliente tem para a tabela de pedidos. Se quisermos retornar todas as notas de uma pedido especfico, podemos consultar no banco de dados todos os pedidos cujo Nmero do pedido igual ao Nmero do pedido na tabela PedidoNota, e onde o Nmero da nota na tabela PedidoNota igual Nmero da nota na tabela Notas. A normalizao de banco de dados normalmente realizada quando projeta-se um banco de dados relacional, para melhorar a consistncia lgica do projeto do banco de dados e o desempenho transacional. Existem dois sistemais mais comuns de diagramao que ajudam na representao visual do modelo relacional: O diagrama de entidade-relacionamento DER, e o diagrama correlato IDEF utilizado no mtodo IDEF1X criado pela Fora area americana baseado no DER. 13 regras de Ted Codd Os bancos de dados relacionais foram idealizados por Edgar Frank "Ted" Codd, um cientista de computao britnico que, enquanto trabalhava para a IBM, inventou o modelo relacional para a gesto de banco de dados, a base terica para bancos de dados relacionais. Ele fez outras contribuies valiosas para a cincia da computao, mas o modelo relacional, uma teoria muito influente sobre gesto de dados gerais, continua sendo seu feito mais citado. Em 1970 ele apareceu com 13 leis (numeradas de 0 a 12) que descreveriam o que um banco de dados relacional e o que um Sistema Gerenciador de Banco de Dados Relacionais faz e, vrias leis de normalizao que descrevem as propriedades de dados relacionais. Apenas os dados que haviam sido normalizados poderiam ser considerados relacionais. 1. Regra Fundamental: Um SGBD relacional deve gerenciar seus dados usando apenas suas capacidades relacionais.
[Alexandre Costa Vieira SQL ORACLE] Pgina 14

SQL ORACLE

2. Regra da informao: Toda informao deve ser representada de uma nica forma, como dados em uma tabela. 3. Regra da garantia de acesso: Todo dado (valor atmico) pode ser acessado logicamente (e unicamente) usando o nome da tabela, o valor da chave primria da linha e o nome da coluna. 4. Tratamento sistemtico de valores nulos: Os valores nulos (diferente do zero, da string vazia, da string de caracteres em brancos e outros valores no nulos) existem para representar dados no existentes de forma sistemtica e independente do tipo de dado. 5. Catlogo dinmico on-line baseado no modelo relacional: A descrio do banco de dados representada no nvel lgico como dados comuns (isso , em tabelas), permitindo que usurios autorizados apliquem as mesmas formas de manipular dados aplicados aos dados comuns ao consult-los. 6. Regra da sub-linguagem compreensiva: Um sistema relacional pode suportar vrias linguagens e formas de uso, porm deve possuir ao menos uma linguagem com sintaxe bem definida e expressa por cadeia de caracteres e com habilidade de apoiar a definio de dados, a definio de vises, a manipulao de dados, as restries de integridade, a autorizao e a fronteira de transaes. 7. Regra da atualizao de vises: Toda viso que for teoricamente atualizvel ser tambm atualizvel pelo sistema. 8. Insero, atualizao e eliminao de alto nvel: A capacidade de manipular a relao base ou relaes derivadas como um operador nico no se aplica apenas a recuperao de dados, mas tambm a insero, alterao e eliminao de dados. 9. Independncia dos dados fsicos: Programas de aplicao ou atividades de terminal permanecem logicamente inalteradas quaisquer que sejam as modificaes na representao de armazenagem ou mtodos de acesso internos. 10. Independncia lgica de dados: Programas de aplicao ou atividades de terminal permanecem logicamente inalteradas quaisquer que sejam as mudanas de informao que permitam teoricamente a no alterao das tabelas base.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 15

SQL ORACLE

11. Independncia de integridade: As relaes de integridade especficas de um banco de dados relacional devem ser definidas em uma sub-linguagem de dados e armazenadas no catlogo (e no em programas). 12. Independncia de distribuio: A linguagem de manipulao de dados deve possibilitar que as aplicaes permaneam inalteradas estejam os dados centralizados ou distribudos fisicamente. 13. Regra da No-subverso: Se o sistema relacional possui uma linguagem de baixo nvel (um registro por vez), no deve ser possvel subverter ou ignorar as regras de integridade e restries definidas no alto nvel (muitos registros por vez).

Noes de conjunto
No estudo de Conjuntos, trabalhamos com alguns conceitos primitivos, que devem ser entendidos e aceitos sem definio. Para um estudo mais aprofundado sobre a Teoria dos Conjuntos, pode-se ler: Naive Set Theory, P.Halmos ou Axiomatic Set Theory, P.Suppes. O primeiro deles foi traduzido para o portugus sob o ttulo (nada ingnuo de): Teoria Ingnua dos Conjuntos.

Origem A teoria teve seu incio com a publicao em 1874 de um trabalho de Cantor que tratava sobre a comparao de colees infinitas. O trabalho apresentava uma forma de comparar conjuntos infinitos pelo "casamento" 1-1 entre os elementos destes conjuntos. Desde 1638, com Galileu Galilei, sabe-se que se pode obter uma correspondncia 1-1 entre os nmeros inteiros e seus quadrados, o que violava a concepo euclidiana de que o todo sempre maior que qualquer uma de suas partes. Esta aplicao da correspondncia 1-1 permitiu a Cantor introduzir um mtodo de diagonalizao, que por contradio, permitia provar que o conjunto dos nmeros reais no tinha correspondncia 1-1 com o conjunto dos nmeros inteiros. Isto, mais tarde, levou ao desenvolvimento do conceito de contnuo por Richard Dedekind. Iniciando com estas descobertas, Cantor acabou desenvolvendo uma teoria dos conjuntos abstratos, que constitui-se em uma generalizao do conceito de conjunto.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 16

SQL ORACLE

Conjunto Na teoria dos conjuntos, um conjunto descrito como uma coleo de objetos bem definidos. Estes objetos so chamados de elementos ou membros do conjunto. Os objetos podem ser qualquer coisa: nmeros, pessoas, outros conjuntos, etc. Por exemplo, 4 um nmero do conjunto dos inteiros. Como pode ser visto por este exemplo, os conjuntos podem ter um nmero infinito de elementos.

Relaes Se x um membro de A, ento tambm dito que x pertence a A, ou que x est em A. Neste caso, escrevemos x A. (O smbolo " " derivado da letra grega psilon, . "", introduzida por Giuseppe Peano em 1888). O smbolo escrever x A, ou "x no pertence a A". , s vezes usado para

Dois conjuntos A e B so iguais quando possuem precisamente os mesmos elementos, isto , se cada elemento de A um elemento de B e cada elemento de B um elemento de A. Um conjunto completamente determinado por seus elementos; a . completamente descrio imaterial. Por exemplo, o conjunto com os nmeros 2, 3 e 5 igual ao conjunto de todos os nmeros primos menores que 6. Se A e B so iguais, ento representado simbolicamente por A = B (como de costume). Tambm permitido um conjunto vazio, muitas vezes representado pelo smbolo : um conjunto sem elementos. , J que um conjunto determinado completamente por seus elementos, pode haver apenas um conjunto vazio. Se A um subconjunto do conjunto B, diz-se que A est contido em B. Neste caso, escreve-se A B. J o smbolo usado para escrever A B, ou "o conjunto A no est . contido no conjunto B". Alguns conceitos Um conjunto representa uma coleo de objetos. a. O conjunto de todos os brasileiros. b. O conjunto de todos os nmeros naturais. c. O conjunto de todos os nmeros reais tal que x-4=0. x Em geral, um conjunto denotado por uma letra maiscula do alfabeto: A, B, C, ..., Z.

Elemento: um dos componentes de um conjunto. a. Jos da Silva um elemento do conjunto dos brasileiros.
[Alexandre Costa Vieira SQL ORACL ORACLE] Pgina 17

SQL ORACLE

b. 1 um elemento do conjunto dos nmeros naturais. c. -2 um elemento do conjunto dos nmeros reais que satisfaz equao x-4=0. Em geral, um elemento de um conjunto, denotado por uma letra minscula do alfabeto: a, b, c, ..., z. Pertinncia: a caracterstica associada a um elemento que faz parte de um conjunto. a. Jos da Silva pertence ao conjunto dos brasileiros. b. 1 pertence ao conjunto dos nmeros naturais. c. -2 pertence ao conjunto de nmeros reais que satisfaz equao x-4=0. Smbolo de pertinncia: Se um elemento pertence a um conjunto utilizamos o smbolo que se l: "pertence". Para afirmar que 1 um nmero natural ou que 1 pertence ao conjunto dos nmeros naturais, escrevemos:

Para afirmar que 0 no um nmero natural ou que 0 no pertence ao conjunto dos nmeros naturais, escrevemos:

Um smbolo matemtico muito usado para a negao a barra / traada sobre o smbolo normal. Algumas notaes para conjuntos Muitas vezes, um conjunto representado com os seus elementos dentro de duas chaves { e } atravs de duas formas bsicas e de uma terceira forma geomtrica: Apresentao: Os elementos do conjunto esto dentro de duas chaves { e }. a. A={a,e,i,o,u} b. N={1,2,3,4,...} c. M={Joo,Maria,Jos} Descrio: O conjunto descrito por uma ou mais propriedades. a. A={x: x uma vogal} b. N={x: x um nmero natural} c. M={x: x uma pessoa da famlia de Maria}

[Alexandre Costa Vieira SQL ORACLE]

Pgina 18

SQL ORACLE

Diagrama de Venn-Euler: (l-se: "Ven-iler") Os conjuntos so mostrados graficamente.

Subconjuntos Dados os conjuntos A e B, diz-se que A est contido em B, denotado por A B, se todos os elementos de A tambm esto em B. Algumas vezes diremos que um conjunto A est propriamente contido em B, quando o conjunto B, alm de conter os elementos de A, contm tambm outros elementos. O conjunto A denominado subconjunto de B e o conjunto B o superconjunto que contm A. Alguns conjuntos especiais Conjunto vazio: um conjunto que no possui elementos. representado por { } ou por . O conjunto vazio est contido em todos os conjuntos. Conjunto universo: um conjunto que contm todos os elementos do contexto no qual estamos trabalhando e tambm contm todos os conjuntos desse contexto. O conjunto universo representado por uma letra U. Na sequncia no mais usaremos o conjunto universo. Reunio de conjuntos A reunio dos conjuntos A e B o conjunto de todos os elementos que pertencem ao conjunto A ou ao conjunto B.

B = { x: x A ou x B }

Exemplo: Se A={a,e,i,o} e B={3,4} ento A B={a,e,i,o,3,4}. Interseo de conjuntos A interseo dos conjuntos A e B o conjunto de todos os elementos que pertencem ao conjunto A e ao conjunto B.

B = { x: x A e x B }

[Alexandre Costa Vieira SQL ORACLE]

Pgina 19

SQL ORACLE

Exemplo: Se A={a,e,i,o,u} e B={1,2,3,4} ento A B=.

Quando a interseo de dois conjuntos A e B o conjunto vazio, dizemos que estes conjuntos so disjuntos. Propriedades dos conjuntos Fechamento: Quaisquer que sejam os conjuntos A e B, a reunio de A e B, denotada por A B e a interseo de A e B, denotada por A B, ainda so conjuntos no universo. 1. Reflexiva: Qualquer que seja o conjunto A, tem-se que:

A=A e A

A=A

2. Incluso: Quaisquer que sejam os conjuntos A e B, tem-se que:

B, B

B, A

A, A

3. Incluso relacionada: Quaisquer que sejam os conjuntos A e B, tem-se que:

A A

B equivale a A B equivale a A

B=B B=A

4. Associativa: Quaisquer que sejam os conjuntos A, B e C, tem-se que:

A A

(B (B

C) = (A C) = (A

B) B)

C C

5. Comutativa: Quaisquer que sejam os conjuntos A e B, tem-se que:

A A

B=B B=B

A A

6. Elemento neutro para a reunio: O conjunto vazio o elemento neutro para a reunio de conjuntos, tal que para todo conjunto A, se tem:

=A

[Alexandre Costa Vieira SQL ORACLE]

Pgina 20

SQL ORACLE

7. Elemento "nulo" para a interseo: A interseo do conjunto vazio com qualquer outro conjunto A, fornece o prprio conjunto vazio.

8. Elemento neutro para a interseo: O conjunto universo U o elemento neutro para a interseo de conjuntos, tal que para todo conjunto A, se tem:

U=A

9. Distributiva: Quaisquer que sejam os conjuntos A, B e C, tem-se que:

A (B C ) = (A B) (A C) A (B C) = (A B) (A C)
Os grficos abaixo mostram a distributividade.

Diferena de conjuntos A diferena entre os conjuntos A e B o conjunto de todos os elementos que pertencem ao conjunto A e no pertencem ao conjunto B.

A-B = {x: x A e x

B}

Do ponto de vista grfico, a diferena pode ser vista como:

[Alexandre Costa Vieira SQL ORACLE]

Pgina 21

SQL ORACLE

Complemento de um conjunto O complemento do conjunto B contido no conjunto A, denotado por CAB, a diferena entre os conjuntos A e B, ou seja, o conjunto de todos os elementos que pertencem ao conjunto A e no pertencem ao conjunto B.

CAB = A-B = {x: x A e x

B}

Graficamente, o complemento do conjunto B no conjunto A, dado por:

Quando no h dvida sobre o universo U em que estamos trabalhando, simplesmente utilizamos a letra c posta como expoente no conjunto, para indicar o complemento deste conjunto. Muitas vezes usamos a palavra complementar no lugar de complemento. Exemplos: c=U e Uc=.

Leis de Augustus De Morgan 1. O complementar da reunio de dois conjuntos A e B a interseo dos complementares desses conjuntos.

(A

B)c = Ac

Bc

2. O complementar da reunio de uma coleo finita de conjuntos a interseo dos complementares desses conjuntos.

(A1

A2

...

An)c = A1c

A2c

...

Anc

[Alexandre Costa Vieira SQL ORACLE]

Pgina 22

SQL ORACLE

3. O complementar da interseo de dois conjuntos A e B a reunio dos complementares desses conjuntos.

(A

B)c = Ac

Bc

4. O complementar da interseo de uma coleo finita de conjuntos a reunio dos complementares desses conjuntos.

(A1
Diferena simtrica

A2

...

An)c = A1c

A2c

...

Anc

A diferena simtrica entre os conjuntos A e B o conjunto de todos os elementos que pertencem reunio dos conjuntos A e B e no pertencem interseo dos conjuntos A e B.

A B = { x: x A B e x A B }
O diagrama de Venn-Euler para a diferena simtrica :

[Alexandre Costa Vieira SQL ORACLE]

Pgina 23

SQL ORACLE

A Linguagem SQL
Introduo ao SQL Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das caractersticas originais do SQL foram inspiradas na lgebra relacional. O SQL foi desenvolvido originalmente no incio dos anos 70 nos laboratrios da IBM em San Jose, dentro do projeto System R, que tinha por objetivo demonstrar a viabilidade da implementao do modelo relacional proposto por E. F. Codd. O nome original da linguagem era SEQUEL, acrnimo para "Structured English Query Language" (Linguagem de Consulta Estruturada em Ingls), vindo da o fato de, at hoje, a sigla, em ingls, ser comumente pronunciada "squel" ao invs de "s-ki-l", letra a letra. No entanto, em portugus, a pronncia mais corrente a letra a letra: "sse-qule". A linguagem SQL um grande padro de banco de dados. Isto decorre da sua simplicidade e facilidade de uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta SQL especifica a forma do resultado e no o caminho para chegar a ele. Ela uma linguagem declarativa em oposio a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam na linguagem. Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vrios "dialectos" desenvolvidos por outros produtores. Essa expanso levou necessidade de ser criado e adaptado um padro para a linguagem. Esta tarefa foi realizada pela American National Standards Institute (ANSI) em 1986 e ISO em 1987. O SQL foi revisto em 1992 e a esta verso foi dado o nome de SQL-92. Foi revisto novamente em 1999 e 2003 para se tornar SQL:1999 (SQL3) e SQL:2003, respectivamente. O SQL:1999 usa expresses regulares de emparelhamento, queries recursivas e gatilhos (triggers). Tambm foi feita uma adio controversa de tipos noescalados e algumas caractersticas de orientao a objeto. O SQL:2003 introduz caractersticas relacionadas ao XML, sequncias padronizadas e colunas com valores de auto-generalizao (inclusive colunas-identidade). Tal como dito anteriormente, o SQL, embora padronizado pela ANSI e ISO, possui muitas variaes e extenses produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanas estruturais principais. Outra aproximao permitir para cdigo de idioma procedural ser embutido e interagir com o banco de dados. Por exemplo, o Oracle e outros incluem Java na base de dados, enquanto o PostgreSQL permite que funes sejam escritas em Perl, Tcl, ou C, entre outras linguagens. Caractersticas do SQL SQL uma linguagem com o Ingls. Ela usa palavras semelhantes como select, insert, delete e tambm parte de conjunto de comandos. SQL uma linguagem no procedural: voc especifica qual informao voc quer; no como voc quer peg-la. Em outras palavras, o SQL no requer que voc especifique o mtodo de acesso para os dados. Todas as declaraes de pesquisas so otimizadas - uma parte do RDBMS - para determinar a fantstico mtodo de retirar os especificados dados Esta caracterstica faz dele o mais fcil para voc concentrar-se e obter o resultado desejado. SQL processa
[Alexandre Costa Vieira SQL ORACLE] Pgina 24

SQL ORACLE

conjuntos de registros melhor do que um nico registro no tempo. A melhor comum forma de conjunto de registros uma tabela. SQL pode ser usado por uma faixa de usurios incluindo DBAs, Programadores, Gerentes, e muitos outros tipos de usurios finais. SQL provm comandos para uma variedade de tarefas incluindo: pesquisando dados inserindo, alterando apagando linhas em uma tabela criando, modificando, e apagando objetos do Banco de Dados controlando acesso para Banco de Dados e objetos do Banco de Dados garantindo a consistncia do banco de dados Os mais fceis Sistemas Gerenciadores de Banco de Dados geralmente usam uma linguagem separada para cada categoria acima. SQL unificou todas essas tarefas em uma nica linguagem. SQL tem tornado de fato a linguagem industrial padro para os Bancos de Dados Relacionais. O Instituto Nacional Padro Americano (ANSI) adotou o SQL como linguagem padro para RDBMS em 1986. A Organizao de Padres Internacionais (ISO) tem adotado tambm o SQL como linguagem padro para o RDBMS. Todos os principais RDBMSs usam o SQL e os outros vendedores de RDBMS pretendem completar com o padro ANSI.

O Conjunto de Comandos SQL Comandos


SELECT INSERT UPDATE DELETE

Descries
Esse o mais comum comando usado, ele usado para retirar dados de uma Tabela Esses trs comandos so usados para o preenchimento de novas linhas, modificando linhas existentes e removendo linhas no desejadas das tabelas nos Banco de Dados respectivos. (Eles so algumas vezes coletivamente conhecidos como DML ou comandos de Linguagem de Manipulao dos Dados). Esses trs comandos so usados dinamicamente para configurar, modificam e removem vrias estruturas de dados como: tabelas, vises, ndices. (Eles so algumas vezes conhecidos como DDL ou comandos de Linguagem de Definio de Dados). Esses dois comandos so usados para dar ou remover direitos de acesso para ambos Banco de Dados ORACLE e nas Estruturas dentro dele..

CREATE ALTER DROP GRANT REVOKE

[Alexandre Costa Vieira SQL ORACLE]

Pgina 25

SQL ORACLE

Escrevendo Comandos SQL


Quando se escreve comandos SQL, importante lembrar das seguintes regras e diretrizes de modo que a construo seja vlida e fceis para ler e editar: Os comandos SQL podem ser sobre uma ou mais linhas. Clausulas so usualmente localizadas em linhas separadas. Tabulaes podem ser usadas Palavras comandos no podem ser divididas transversalmente nas linhas Os comandos SQL no podem ser exemplos sensitivos (a no ser indicando diferena) Um comando SQL entrado no SQL pronto, e subseqentemente as linhas so numeradas.,isto chamado de SQL buffer. Geralmente uma declarao pode estar corrente vrias vezes no buffer, e ela pode ser executada de vrias formas: o colocado um ponto e vrgula(;) no final da ltima clausula. o Colocar um ; ou / no final da linha no buffer o colocar um / no SQL pronto o colocar um comando R(UN) no SQL pronto

O comando Select A declarao SELECT retira informaes do Banco de Dados, implementando todos os operadores da lgebra Relacional. Neste simples forma, ele deve incluir: 1. Uma clausula SELECT, o qual ter a lista das colunas a serem mostradas. Ele essencialmente um PROJECTION. 2. Uma clausula FROM, a qual especifica a tabela envolvida. Vrias declaraes so vlidas: SELECT * FROM EMP; SELECT * FROM EMP ; SELECT * FROM EMP;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 26

SQL ORACLE

Par listar todos os nmeros de departamentos, nome dos empregados e nmeros dos gerentes na tabela EMP voc entra com o seguinte comando: SELECT DEPTNO, ENAME, MGR FROM EMP; DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10 ENAME MGR ---------- ----SMITH 7902 ALLEN 7698 WARD 7698 JONES 7839 MARTIN 7698 BLAKE 7839 CLARK 7839 SCOTT 7566 KING TURNER 7698 ADAMS 7788 JAMES 7698 FORD 7566 MILLER 7782

Note que os nomes de colunas esto separados por uma vrgula. Ele possibilita selecionar todas as colunas da tabela, especificando um * (asterisco) depois do SELECT palavra comando.
SELECT * FROM EMP; EMPNO ----7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB ---------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK MGR ----7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 HIREDATE --------13-JUN-83 15-AUG-83 26-MAR-84 31-OCT-83 05-DEC-83 11-JUN-84 14-MAY-84 05-MAR-84 09-JUL-84 04-JUN-84 04-JUN-84 23-JUL-84 05-DEC-83 21-NOV-83 SAL ---------800.00 1,600.00 1,250.00 2,975.00 1,250.00 2,850.00 2,450.00 3,000.00 5,000.00 1,500.00 1,100.00 950.00 3,000.00 1,300.00 COMM ---------300.00 500.00 1,400.00 DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10

.00

Outros itens da clausula SELECT possvel incluir outros itens na clausula SELECT. o Expresses Aritmticas
[Alexandre Costa Vieira SQL ORACLE] Pgina 27

SQL ORACLE

o Colunas sinnimas o Concatenao de colunas o Literais Todas estas opes permitem ao usurio pesquisar os dados e manipul-los para as pesquisas propostas; por exemplo, fazendo clculos, juntando colunas uma com a outra, ou mostrando pedaos de textos. Expresses Aritmticas
Uma expresso a combinao de um ou mais valores, operadores, e funes os quais avaliam para um valor. Expresses Aritmticas podem conter nome de colunas, valores numricos constantes e operadores aritmticos: Operadores + * / Descries Adio Subtrao Multiplicao Diviso

SELECT ENAME,SAL*12,COMM FROM EMP; EMPNO ----7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 SAL*12 ---------9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600 COMM ----------

300.00 500.00 1,400.00

.00

Se a sua expresso aritmtica conter mais de um operador a prioridade *,/ primeiro, ento +,- segundo (deixe para direita se existir operadores com a mesma prioridade). No exemplo seguinte a multiplicao (250*12) avaliada primeiro; ento o valor do salrio adicionado no resultado da multiplicao (3000). Somente para linha do Smith: 800+3000=3800
select ename, sal + 250 * 12 from emp;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 28

SQL ORACLE

ENAME SAL+250*12 ---------- ---------SMITH 3800 ALLEN 4600 WARD 4250 JONES 5975

Parnteses podem ser usados para especificar a ordem na qual sero executados os operadores, se, por exemplo, a adio requerida antes da multiplicao.
select ename, (sal + 250) * 12 from emp; ENAME (SAL+250)*12 ---------- -----------SMITH 12600 ALLEN 22200 WARD 18000 JONES 38700

Colunas Sinnimas Quando mostramos o resultado de uma pesquisa, o SQL*Plus por exemplo normalmente mostrado o nome as colunas selecionadas como cabealho. Em alguns exemplos ele pode ser sem sentido. Voc pode modificar o cabealho de uma coluna usando sinnimos(alias). Uma coluna sinnima um cabealho de coluna alternativo na sada. Especifique o sinnimo (alias) depois da coluna na lista do SELECT. O cabealho sinnimo padro ser fornecido sem espaos em branco, amenos que o sinnimo esteja dentro de aspas duplos ( ). Para mostrar um cabealho ANNSAL para o salrio anual em vez de SAL*12 usamos uma coluna sinnima.
SELECT ENAME, SAL*12 ANNSAL, COMM FROM EMP;
EMPNO ----7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ANNSAL ---------9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600 COMM ---------300.00 500.00 1,400.00

.00

Nota: A declarao de colunas sinnimas no SQL, podem ser usadas unicamente na clausula SELECT.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 29

SQL ORACLE

O Operador de Concatenao O Operador de Concatenao ( || ) permite que as colunas sejam juntadas com outras colunas, expresses aritmticas ou valores constantes para criar uma expresso alfanumrica. Colunas ficam lado a lado com operadores para formarem uma nica coluna. Para combinar EMPNO e ENAME e obter o sinnimo EMPLOYEE, entrase:
SELECT ENPNO||ENAME EXPLOYEE FROM EMP; EMPLOYEE ------------------------------------------7369SMITH 7499ALLEN 7521WARD 7566JONES 7654MARTIN 7698BLAKE 7782CLARK 7788SCOTT 7839KING 7844TURNER 7876ADAMS 7900JAMES 7902FORD 7934MILLER

Literais Um literal um ou mais caracteres, expresses, nmeros includos na lista do SELECT o qual no um nome de coluna ou de um sinnimo.Um literal na lista do SELECT ter uma sada para cada linha retornada. Literais de livre formatos de textos podem ser includos no resultado da pesquisa, e so tratados como uma coluna na lista do SELECT. Datas e caracteres alfanumricos devem ser colocados entre aspas simples(); nmeros no precisam de aspas simples. As declaraes seguintes contm literais selecionados com concatenao e colunas sinnimas.
SELECT EMPNO||'-'||ENAME EMPLOYEE, 'WORKS IN DEPARTMENT', DEPTNO EMP;

FROM

EMPLOYEE ---------------7369-SMITH 7499-ALLEN

'WORKSINDEPARTAMENT' DEPTNO -------------------- -----WORKS IN DEPARTMENT 20 WORKS IN DEPARTMENT 30

[Alexandre Costa Vieira SQL ORACLE]

Pgina 30

SQL ORACLE

7521-WARD 7566-JONES

WORKS IN DEPARTMENT WORKS IN DEPARTMENT

30 20

Manuseando Valores Nulos Se uma linha necessitar de dados para uma coluna particular, se diz que a coluna est nula. Um valor nulo um valor indisponvel e desconhecido. O valor nulo no zero. Zero um nmero. Valores Nulos so manuseados corretamente pelo SQL. Se algum valor de uma coluna em uma expresso for nulo, o resultado ser nulo.. Na declarao seguinte, salesmen tem um resultado na remunerao:
SELECT ENAME, SAL*12+COMM ANNUAL_SAL FROM EMP;
ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER ANNUAL_SAL ---------19500 15500 16400

18000

Funo NVL Na ordem para realizar o resultado para todos os empregados, necessrio converter os valores nulos para numricos. Ns usamos a funo NVL para converter valores nulos para no nulos. Usando a Funo NVL para converter valores nulos da declarao anterior para zero.
SELECT ENAME,SAL*12NVL(COMM,0) ANNUL_SAL FROM EMP;
ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER ANNUAL_SAL ---------9600 19500 15500 35700 16400 34200 29400 36000 60000 18000 13200 11400 36000 15600

A funo NVL conta com dois argumentos: 1. uma expresso 2. um valor no nulo.
[Alexandre Costa Vieira SQL ORACLE] Pgina 31

SQL ORACLE

Note que voc pode usar a funo NVL para converter qualquer tipo de valor nulo. NVL(COLUNA_DATA_NULA,22/01/2011) NVL(COLUNA_NUMRICA_NULA,21) NVL(COLUNA_ALFANUMRICA_NULA,QUALQUER VALOR) Prevenindo a Seleo de Linhas Duplicadas A menos que voc indique de outra maneira, SQL*Plus mostrar os resultados da pesquisa sem eliminar as duplicaes. Para listar todos os nmeros de departamentos da tabela EMP, faa:
SELECT DEPTNO FROM EMP; DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10

A clausula DISTINCT Para eliminar valores duplicados no resultado, inclumos o DISTINCT qualificador no comando SELECT. Para eliminar os valores Duplicados mostrados no exemplo anterior, faa:
SELECT DISTINCT DEPTNO FROM EMP; DEPTNO -----10 20 30

Vrias colunas podem ser especificadas depois do qualificador DISTINCT a palavra DISTINCT agir sobre todas as colunas selecionadas. Para mostrar distintos valores de DEPTNO e JOB, faa:
SELECT DISTINCT DEPTNO, JOB FROM EMP; DEPTNO JOB ------ ---------[Alexandre Costa Vieira SQL ORACLE] Pgina 32

SQL ORACLE

10 10 10 20 20 20 30 30 30

CLERK MANAGER PRESIDENT ANALYST CLERK MANAGER CLERK MANAGER SALESMAN

Essa mostra a lista de todas as combinaes de diferentes empregos e nmeros de departamentos. Note que o DISTINCT qualificador pode unicamente referir para uma vez e precisa do comando SELECT.

A clausula ORDER BY Normalmente a ordem das linhas retornadas de uma pesquisa indefinida. A clausula ORDER BY pode ser usada para ordenar as linhas. Se usado, o ORDER BY precisa sempre ser a ltima clausula da declarao SELECT. Para ordenar pelo ENAME, faa:
SELECT ENAME, JOB, SAL*12, DEPTNO FROM EMP ORDER BY ENAME;
ENAME ---------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD JOB ---------CLERK SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN CLERK ANALYST CLERK SALESMAN SALESMAN SAL*12 ---------13200 19500 34200 29400 36000 11400 35700 60000 16400 15600 36000 9600 18000 15500 DEPTNO -----20 30 30 10 20 30 20 10 30 10 20 20 30 30

Padro da Ordenao dos Dados O padro da ordem de ordenao ascendente. o valores numricos infinitos primeiro o valores de data primeiro o valores alfanumricos Invertendo o padro de ordenao Para inverter essa ordem, o comando DESC(Decrescente)do depois do nome das colunas da clausula ORDER BY. Para inverter a ordem da coluna HIREDATE, somente aquela data mais ressente estar mostrada primeiro, faa:
[Alexandre Costa Vieira SQL ORACLE] Pgina 33

SQL ORACLE

SELECT ENAME, JOB, HIREDATE FROM EMP ORDER BY HIREDATE DESC;


ENAME ---------JAMES KING BLAKE ADAMS TURNER CLARK WARD SCOTT MARTIN FORD MILLER JONES ALLEN SMITH JOB ---------CLERK PRESIDENT MANAGER CLERK SALESMAN MANAGER SALESMAN ANALYST SALESMAN ANALYST CLERK MANAGER SALESMAN CLERK HIREDATE --------23-JUL-84 09-JUL-84 11-JUN-84 04-JUN-84 04-JUN-84 14-MAY-84 26-MAR-84 05-MAR-84 05-DEC-83 05-DEC-83 21-NOV-83 31-OCT-83 15-AUG-83 13-JUN-83

Ordenao por vrias colunas possvel na clausula ORDER BY usar mais de uma coluna. O limite de colunas de fato o nmero de colunas da tabela. Na clausula ORDER BY especifica-se as colunas pelo que as linhas sero ordenadas, separando as por vrgula. Se algumas ou todas so invertidas especifique DESC depois de alguma ou cada uma das colunas. Para ordenar por duas colunas, e mostrar inversa a ordem do salrio, faa:
SELECT DEPTNO, JOB, ENAME FROM EMP ORDER BY DEPTNO, SAL DESC;
DEPTNO -----10 10 10 20 20 20 20 20 30 30 30 30 30 30 JOB ---------PRESIDENT MANAGER CLERK ANALYST ANALYST MANAGER CLERK CLERK MANAGER SALESMAN SALESMAN SALESMAN SALESMAN CLERK ENAME ---------KING CLARK MILLER SCOTT FORD JONES ADAMS SMITH BLAKE ALLEN TURNER WARD MARTIN JAMES

Para ordenar por uma coluna, ela no precisa necessariamente estar declarada no SELECT. AVISO: A clausula ORDER BY usada na pesquisa quando voc quer mostrar as linhas em uma ordem especfica. Sem a clausula ORDER BY as linhas so retornadas na ordem conveniente para o ORACLE, e voc no deve contar com essa ordem nas prximas

[Alexandre Costa Vieira SQL ORACLE]

Pgina 34

SQL ORACLE

pesquisas. O comando no altera a ordem dos dados que esto armazenados no Banco de Dados ORACLE. A Clausula WHERE A clausula WHERE corresponde aos Operadores de Restries da lgebra Relacional. Ele contm condies nas quais a linha precisa se encontrar em ordem para ser mostrada. Estrutura da seleo com restries. SELECT FROM WHERE coluna(s) tabela(s) certa condio a ser encontrada

A clausula WHERE pode comparar valores em uma coluna, valores literais, expresses aritmticas ou funes. A clausula WHERE conta com trs elementos. Um nome de coluna Um operador de comparao Um nome de coluna, um constante, ou lista de valores. Operadores de Comparao so usados na clausula WHERE e podem ser divididos em duas categorias, Lgicos e SQL. Operadores Lgicos Esses operadores lgicos testam as seguintes condies:
Operador = > >= < <= Significado igual a maior que maior e igual a menor que menor e igual a

Alfanumricos e Datas na clausula WHERE. Colunas ORACLE devem ser: caracteres, numricas ou data. Alfanumricos e Datas na clausula WHERE devem estar entre aspas simples. Os caracteres devem combinar com o valor da coluna a menos que seja modificado por funes. Referncia para Funes de Alfanumricos na Unidade 4. Para listar os nomes, escriturrios(CLERK). nmeros, emprego e departamentos de todos os

SELECT ENAME, EMPNO, JOB, DEPTNO FROM EMP WHERE JOB = 'CLERK'; [Alexandre Costa Vieira SQL ORACLE] Pgina 35

SQL ORACLE

ENAME EMPNO JOB DEPTNO ---------- ----- ---------- -----SMITH 7369 CLERK 20 ADAMS 7876 CLERK 20 JAMES 7900 CLERK 30 MILLER 7934 CLERK 10

Para encontrar todos os nomes de departamentos com nmero de departamento maior que 20, faa:
SELECT DNAME, DEPTNO FROM DEPT WHERE DEPTNO > 20; DNAME DEPTNO ---------- -----SALES 30 OPERATIONS 40

Comparando uma coluna com outra coluna na mesma linha Voc pode comparar uma coluna com outra coluna na mesma linha, da mesma forma com um valor constante. Por exemplo, suponhamos que voc quer encontrar os empregados os quais a comisso est maior que seu salrio, faa:
SELECT ENAME, SAL, COMM FROM EMP WHERE COMM>SAL; ENAMES SAL COMM ---------- ---------- ---------MARTIN 1,250.00 1,400.00

Operadores SQL Existem quatro operadores SQL os quais opera, com todos tipos de dados:
Operador BETWEEN ... AND ... IN(Lista) LIKE IS NULL Significado Entre dois valores (inclusive) compara uma lista de valores Compara um parmetro alfanumrico um valor nulo

[Alexandre Costa Vieira SQL ORACLE]

Pgina 36

SQL ORACLE

O Operador BETWEEN Testa uma faixa de valores, e inclusive do menor a maior faixa. Suponhamos que ns quisemos ver aqueles empregados os quais o salrio est entre 1000 e 2000:
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000; ENAME SAL ---------- ---------ALLEN 1,600.00 WARD 1,250.00 MARTIN 1,250.00 TURNER 1,500.00 ADAMS 1,100.00 MILLER 1,300.00

Note aqueles valores especificados tambm compem o resultado, e o menor precisa ser especificado primeiro. O Operador IN Testa os valores especificados em uma lista. Para encontrar empregados que tenham um dos trs nmeros de MGR, faa:
SELECT EMPNO, ENAME, SAL, MGR FROM EMP WHERE MRG IN (7902,7566,7788) EMPNO ----7369 7788 7876 7902 ENAME SAL MGR ---------- ---------- ----SMITH 800.00 7902 SCOTT 3,000.00 7566 ADAMS 1,100.00 7788 FORD 3,000.00 7566

Se alfanumricos ou datas forem usados na lista precisam ser colocados entre aspas simples( ). O Operador LIKE Algumas vezes voc precisa procurar valores que voc no conhece exatamente Usando o operador LIKE possvel selecionar linhas combinando parmetros alfanumricos. Dois smbolos podem ser usados para construir uma linha de procura.
Smbolo % _ Representa Vrias seqncias de zero ou mais caracteres um nmero desejado de caracteres

[Alexandre Costa Vieira SQL ORACLE]

Pgina 37

SQL ORACLE

Para listar todos os empregados os quais o nome comea com a letra S, faa:
SELECT ENAME FROM EMP WHERE ENAME LIKE 'S%'; ENAME ---------SMITH SCOTT

Eles podem ser usados para encontrar um determinado nmero de caracteres. Por exemplo para listar todos empregados que tenham exatamente quatro caracteres de tamanho do nome.
SELECT ENAME FROM EMP WHERE ENAME LIKE '____' ENAME ---------WARD KING FORD

O % e o _ pode ser usado em vrias combinaes com literais alfanumricos.

Operador IS NULL Unicamente encontrar todos os empregados que no tenham gerente, voc testar um valor nulo:
SELECT ENAME, MGR FROM EMP WHERE MGR IS NULL; ENAME MGR ---------- ----KING

Expresses Negativas Os operadores seguintes so testes de negao:


Operador != ^= Descrio no igual para (VAX,UNIX,PC) no igual para (IBM)

[Alexandre Costa Vieira SQL ORACLE]

Pgina 38

SQL ORACLE

<> NOT COLUNA_NOME= NOT COLUNA_NOME>

no igual para (todos sistemas operacionais) no igual que no maior que

Operadores SQL
Operador NOT BETWEEN NOT IN NOT LIKE IS NOT NULL Descrio tudo que estiver fora da faixa tudo que no estiver na lista tudo que no conter a linha de caracteres tudo que no for nulo

Para encontrar empregados os quais o salrio estiver fora da faixa, faa:


SELECT ENAME, SAL FROM EMP WHERE SAL NOT BETWEEN 1000 AND 2000; ENAME SAL ---------- ---------SMITH 800.00 JONES 2,975.00 BLAKE 2,850.00 CLARK 2,450.00 SCOTT 3,000.00 KING 5,000.00 JAMES 950.00 FORD 3,000.00

Para encontrar aqueles empregados os quais o cargo no comece com a letra M, faa:
SELECT ENAME, JOB FROM EMP WHERE JOB NOT LIKE 'M%'; ENAME ---------SMITH ALLEN WARD MARTIN SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB ---------CLERK SALESMAN SALESMAN SALESMAN ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK Pgina 39

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

Para encontrar todos os empregados que tenham um gerente (MGR), faa:


SELECT ENAME, MGR FROM EMP 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

Nota: Se um valor nulo usado em uma comparao, ento o operador de comparao deve ser IS ou IS NOT NULL. Se esses operadores no forem usados e valores nulos forem comparados, o resultado ser sempre FALSO. Por exemplo, COMM <> NULL ser sempre FALSO. O resultado ser falso porque um valor nulo no pode ser igual ou no igual a qualquer outro valor, note que aquele erro no elevado, o resultado sempre falso. Pesquisando Dados com Mltiplas Condies Os operadores AND e OR devem ser usados para fazer composies de expresses lgicas. O predicado AND esperar que ambas as condies sejam verdadeiras; onde o predicado OR esperar uma das condies seja verdadeira. Nos dois seguintes exemplos as condies so as mesmas, o predicado diferente. Veja como o resultado dramaticamente alterado. Para encontrar todos os escriturrios que ganhem entre 1000 e 2000, faa:
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 AND JOB = 'CLERK'; EMPNO ----7876 7934 ENAME ---------ADAMS MILLER JOB SAL ---------- ---------CLERK 1,100.00 CLERK 1,300.00

[Alexandre Costa Vieira SQL ORACLE]

Pgina 40

SQL ORACLE

Para encontrar todos os empregados que so escriturrios ou todos que ganhem entre 1000 e 2000 faa:
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 OR JOB = 'CLERK'; EMPNO ----7369 7499 7521 7654 7844 7876 7900 7934 ENAME ---------SMITH ALLEN WARD MARTIN TURNER ADAMS JAMES MILLER JOB SAL ---------- ---------CLERK 800.00 SALESMAN 1,600.00 SALESMAN 1,250.00 SALESMAN 1,250.00 SALESMAN 1,500.00 CLERK 1,100.00 CLERK 950.00 CLERK 1,300.00

Voc pode combinar AND e OR na mesma expresso lgica. Quando AND e OR aparecer na mesma clausula WHERE, todos os ANDs sero feitos primeiros e ento todos os Ors sero feitos. Se AND no interfere sobre o OR a seguinte declarao SQL retornar todos os gerentes com salrio acima de 1500, e todos os vendedores.
SELECT EMPNO, FROM EMP WHERE SAL > AND JOB = OR JOB = EMPNO ----7499 7521 7566 7654 7698 7782 7844 ENAME, JOB, SAL, DEPTNO 1500 'MANAGER' 'SALESMAN' JOB SAL DEPTNO ---------- ---------- -----SALESMAN 1,600.00 30 SALESMAN 1,250.00 30 MANAGER 2,975.00 20 SALESMAN 1,250.00 30 MANAGER 2,850.00 30 MANAGER 2,450.00 10 SALESMAN 1,500.00 30

ENAME ---------ALLEN WARD JONES MARTIN BLAKE CLARK TURNER

Se voc quiser selecionar todos os gerentes e vendedores com salrios acima de 1500 voc deveria fazer:
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE SAL > 1500 AND (JOB = 'MANAGER' OR JOB = 'SALESMAN'); EMPNO ----7499 7566 7698 7782 ENAME ---------ALLEN JONES BLAKE CLARK JOB SAL DEPTNO ---------- ---------- -----SALESMAN 1,600.00 30 MANAGER 2,975.00 20 MANAGER 2,850.00 30 MANAGER 2,450.00 10

[Alexandre Costa Vieira SQL ORACLE]

Pgina 41

SQL ORACLE

O parntese especifica a ordem na qual os operadores devem ser avaliados. No segundo exemplo, o operador OR avaliado antes do AND. Precedncia dos Operadores Todos operadores so organizados em uma hierarquia essa determina sua precedncia. Numa Expresso, as operaes so feitas na ordem de sua precedncia, do maior para o menor. Onde os operadores de igual precedentes so usados prximos a outro, eles so feitos da esquerda para direita. Todos os comparativos e Operadores SQL tem igual precedente: 1. =, !=, <, >, <=, >=, BETWEEN ... AND ..., IN, LIKE, IS NULL. 2. NOT (para inverter o resultado das expresses lgicas: WHERE NOT (SAL>2000)) 3. AND 4. OR Sempre que voc estiver em dvida sobre qual dos dois operadores ser feito primeiro quando a expresso avaliada, use parnteses para clarear seu significado e assegure o SQL*Plus o que voc pretende. Suponha que voc queira encontrar todos os gerentes, em vrios departamentos, e todos os escriturrios no departamento 10 unicamente:
SELECT * FROM EMP WHERE JOB = 'MANAGER'OR (JOB = 'CLERK' AND DEPTNO = 10);

O parntese acima no necessrio, por que o AND precedente ao OR, mas ele esclarece o significado da expresso.

Resumo do SELECT. Resumo as clausulas que cobrem o comando SELECT: SELECT (DISTINCT) (*, COLUNA (SINNIMO), ...) FROM tabela WHERE condio ou condies ORDER BY (coluna, expresso) (ASC/DESC) SELECT Seleciona no mnimo uma coluna

[Alexandre Costa Vieira SQL ORACLE]

Pgina 42

SQL ORACLE

Sinnimo(Alias) * DISTINCT FROM tabela WHERE AND/OR () ORDER BY ASC DESC

Pode ser usado para colunas unicamente na lista do SELECT Indica todas as colunas Pode ser usado para eliminar duplicaes. Indica a tabela onde as colunas origina. Restringe a pesquisa para linhas que encontram a condio. Ele pode conter colunas, expresses e literais Podem ser usados na clausula WHERE para construir mais complexa condies, AND tem prioridade sobre o OR. Pode ser usado para forar prioridade. Sempre o ltimo. Especifica a ordem de ordenao. Uma ou mais colunas podem ser especificadas. Ordem ascendente padro ordem de ordenao e no precisa ser especificado. Inverte a ordem padro de ordenao e deve ser especificada depois do nome da coluna.

Exerccio 1 - Introduo ao SQL, o comando SELECT Esses exerccios so feitos para introduzir todos os tpicos vistos anteriormente nas leituras. 1- Selecione todas as informaes da tabela SALGRADE.
GRADE ---------1 2 3 4 5 LOSAL ---------700 1201 1401 2001 3001 HISAL ---------1200 1400 2000 3000 9999

2- Selecione todas as informaes da tabela EMP.


EMPNO ----7369 7499 ENAME ---------SMITH ALLEN JOB ---------CLERK SALESMAN MGR ----7902 7698 HIREDATE --------13-JUN-83 15-AUG-83 SAL ---------800.00 1,600.00 COMM ---------300.00 DEPTNO -----20 30

[Alexandre Costa Vieira SQL ORACLE]

Pgina 43

SQL ORACLE

7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934

WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782

26-MAR-84 31-OCT-83 05-DEC-83 11-JUN-84 14-MAY-84 05-MAR-84 09-JUL-84 04-JUN-84 04-JUN-84 23-JUL-84 05-DEC-83 21-NOV-83

1,250.00 2,975.00 1,250.00 2,850.00 2,450.00 3,000.00 5,000.00 1,500.00 1,100.00 950.00 3,000.00 1,300.00

500.00 1,400.00

.00

30 20 30 30 10 20 10 30 20 30 20 10

3-Liste todos os empregados que tenham salrio entre 1000 e 2000.


ENAME --------ALLEN WARD MARTIN TURNER ADAMS MILLER DEPTNO -----30 30 30 30 20 10 SAL --------1,600.00 1,250.00 1,250.00 1,500.00 1,100.00 1,300.00

4- Liste nmero e nome de departamentos em ordem de nome.


DEPTNO -----10 40 20 30 DNAME ---------ACCOUNTING OPERATIONS RESEARCH SALES

5- Mostrar todos os diferentes tipos de cargos.


JOB ---------ANALYST CLERK MANAGER PRESIDENT SALESMAN

6- Listar todos os detalhes dos empregados dos departamentos 10 e 20 em ordem de nome


EMPNO ----7876 7782 7902 7566 7839 7934 7788 7369 ENAME ---------ADAMS CLARK FORD JONES KING MILLER SCOTT SMITH JOB ---------CLERK MANAGER ANALYST MANAGER PRESIDENT CLERK ANALYST CLERK MGR ----7788 7839 7566 7839 7782 7566 7902 HIREDATE --------04-JUN-84 14-MAY-84 05-DEC-83 31-OCT-83 09-JUL-84 21-NOV-83 05-MAR-84 13-JUN-83 SAL ---------1,100.00 2,450.00 3,000.00 2,975.00 5,000.00 1,300.00 3,000.00 800.00 COMM ---------DEPTNO -----20 10 20 20 10 10 20 20

[Alexandre Costa Vieira SQL ORACLE]

Pgina 44

SQL ORACLE

7- Listar nome e cargo de todos os escriturrios do departamento 20.


ENAME ---------SMITH ADAMS JOB ---------CLERK CLERK

8- Mostre todos os nomes dos empregados os quais tenham TH ou LL.


ENAME ---------SMITH ALLEN MILLER

9- Listar os seguintes detalhes para todos empregados que tenham um gerente.


ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT TURNER ADAMS JAMES FORD MILLER JOB ---------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST SALESMAN CLERK CLERK ANALYST CLERK SAL ---------800.00 1,600.00 1,250.00 2,975.00 1,250.00 2,850.00 2,450.00 3,000.00 1,500.00 1,100.00 950.00 3,000.00 1,300.00

10- Mostrar nome e total da remunerao para todos os empregados


ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER REMUNERATION -----------9600 19500 15500 35700 16400 34200 29400 36000 60000 18000 13200 11400 36000 15600

11- Mostrar todos os empregados que foram admitidos durante 1983


ENAME ---------SMITH ALLEN JONES MARTIN ADAMS FORD MILLER DEPTNO -----20 30 20 30 20 20 10 HIREDATE --------13-JUN-83 15-AUG-83 31-OCT-83 05-DEC-83 04-JUN-84 05-DEC-83 21-NOV-83

[Alexandre Costa Vieira SQL ORACLE]

Pgina 45

SQL ORACLE

12- Mostrar nome, salrio anual e comisso de todos os vendedores que o salrio mensal maior que sua comisso. A sada deve ser ordenada pelo maior salrio primeiro. Se duas ou mais empregados tiverem o mesmo salrio ordenar por nome de empregado.
ENAME ANNUAL_SAL COMM ---------- ---------- ---------ALLEN 19200 300.00 TURNER 18000 .00 WARD 15000 500.00

13- Construa uma instruo que mostre desta forma os dados de todos os empregados:
Who, what and when -----------------------------------------------------------------------SMITH HAS HELD THE POSITION OF CLERK IN DEPT 20 SINCE 13-JUN-95 ALLEN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 15-AUG-83

14-Selecione todos os dados da tabela EMP, classificando-os por MGR. Se MGR for nulo coloque no fim da lista.

Funes
Nessa Unidade estamos introduzindo as Funes. Funes fazem a pesquisa de bloco mais potente, e so usadas para manipular valores. Nessa Unidade falaremos de funes numricas e alfanumricas. Funes de Data, funes de Converso, e funes as quais operam sobre tipos de dados que discutimos na Unidade 5. Finalmente funes de grupo que falamos na Unidade 6. Introduo a Funes Funes so usadas para manipular dados. Elas aceitam um ou mais argumentos e retorna um valor. Um argumento uma constante, refere-se a varivel ou coluna. O formato para uma funo a seguinte: funo_nome (arumento1,argument2,...) Funes podem ser usadas para: Clculos sobre datas modificar valores de itens individuais manipular sada para grupos de linhas alterar formatos de datas para mostr-los

Existem diferentes tipos de funes:


[Alexandre Costa Vieira SQL ORACLE] Pgina 46

SQL ORACLE

ALFANUMRICAS NUMRICAS DATA CONVERSO FUNES QUE ACEITAM VRIOS TIPOS DE DADOS GRUPO

Algumas funes operam unicamente sobre linhas simples; outras manipulam grupo de linhas. Funes de Linha nica age sobre cada linha retornada na pesquisa retorna um resultado por linha espera um ou mais argumento do usurio pode ser aninhada podem ser usadas com variveis do usurio, colunas, expresses podem ser usadas por exemplo nas : clausulas SELECT, WHERE, ORDER BY. Explicao da notao Notao Significado Col Value n string chars date qualquer nome de coluna do Banco de Dados qualquer valor literal (alfanumrico/data/numrico) representa um nmero representa a linha de caracter representa o nmero de caracteres especificados representa uma coluna data ou valor de data

Funes Alfanumricas e Numricas Funes Alfanumricas Funes Alfanumricas aceitam dados alfanumricos e podem retornar alfanumrico ou valores numricos. A funo seguinte influncia na construo de valores alfanumricos.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 47

SQL ORACLE

LOWER
LOWER(col/value) fornece valores alfanumricos os quais esto em letra maiscula ou minscula e retornam em letra minscula

Para mostrar o nome dos departamentos em letra minscula e a constante SQL COURSE, faa:
SELECT LOWER(DNAME), LOWER('SQL COURSE') FROM DEPT; LOWER(DNSAME) ------------reseatch sales operations accounting LOWER(SQL COURSE) ------------------sql course sql course sql course sql course

UPPER
UPPER(col/value) fornece caracteres alfanumricos, os quais esto em letra maiscula ou minscula e retornar em letra maiscula.

No exemplo seguinte, a funo UPPER fora o usurio entrar em letra maiscula.


SELECT ENAME FROM EMP WHERE ENAME = UPPER('&ENAME'); Enter value for ename : smith ENAME ---------SMITH

INITCAP
INITCAP(col/value) INITCAP(DANAME) --------------Accounting Research Sales Operations fora a primeira letra da Palavras ser em maiscula e o resto minscula INITCAO(LOC) -----------New York Dallas Chicago Boston

SELECT INITCAP(DNAME), INITCAP(LOC) FROM DEPT;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 48

SQL ORACLE

LPAD e RPAD As funes LPAD e RPAD enchem valores alfanumricos para tamanhos especificados.
LPAD(col/value,n,caracter) preenche a coluna ou valor literal da esquerda para o total tamanho de n posies. Os principais espaos esto preenchidos com o caracter. Se o caracter for omitido o valor padro espaos.

SELECT LPAD(DNAME,20,'*'), LPAD(DNAME,20), LPAD(DEPTNO,20,'.') FROM DEPT; LPAD(DNAME,20,'*') -------------------*************RESEACH ***************SALES **********OPERATIONS ***********ACCOUTING RPAD(col/value,n,caracter) LPAD(DNAME,20) -------------------RESEACH SALES OPERATIONS ACCOUNTING LPAD(DEPTNO,20,'.') -------------------..................20 ..................30 ..................40 ..................10

preenche a coluna ou valor literal da direita para o total tamanho de n posies. Os espaos a direita so preenchidos com o caracter. Se o caracter for omitido o preenchimento fica em branco.

SELECT RPAD(DNAME,20,'*'), RPAD(DNAME,20), RPAD(DEPTNO,20,'.') FROM DEPT; RPAD(DNAME,20,'*') -------------------RESEACH************* SALES*************** OPERATIONS********** ACCOUTING*********** RPAD(DNAME,20) -------------------RESEACH SALES OPERATIONS ACCOUNTING RPAD(DEPTNO,20,'.') -------------------20.................. 30.................. 40.................. 10..................

Essa vez a segunda coluna alinhada para a direita com brancos por padro. SUBSTR A funo seguinte assume os caracteres na linha estando numerados da esquerda para a direita comeando com 1.
SUBSTR(col/value,pos,n) Retorna um linha de n caracteres da coluna ou valor literal, iniciando na posio nmero pos. Se n omitido a linha extrada da posio pos at o fim.

O prximo exemplo mostra o seguinte sublinha; quatro caracteres do literal ORACLE iniciando na segunda posio. contedo do Dname iniciando no segundo caracter. cinco caracteres do DNAME iniciando na terceira posio.
SELECT SUBSTR('ORACLE',2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5) FROM DEPT; SUBSTR('ORACLE',2,4) SUBSTR(DNAME,2) SUBSTR(DNAME,3,5) -------------------- ---------------------- ----------------------[Alexandre Costa Vieira SQL ORACLE] Pgina 49

SQL ORACLE

RACL RACL RACL RACL

ESEARCH ALES PERATIONS CCOUNTING

SEAC LES ERATI COUNT

INSTR
INSTR(col/value,caracter) INSTR(col/value,caracter,pos,n) encontra a primeira ocorrncia do caracter. encontra a posio do caracter do tamanho do caracter na coluna ou valor literal iniciando na posio nmero pos

SELECT DNAME, INSTR(DNAME,'A'), INSTR(DNAME,'ES'), INSTR(DNAME,'C',1,2) FROM DEPT; DNAME INSTR(DNAME,'A') INSTR(DNAME,'ES') INSTR(DNAME,'C',1,2) -------------- ----------------- ----------------- -------------------ACCOUNTING 1 0 3 RESEACH 5 2 0 SALES 2 4 0 OPERATIONS 5 0 0

LTRIM e RTRIM LTRIM e RTRIM removem especficos caracteres de um linha.


LTRIM(col/value,caractere(s)) removem da esquerda principalmente ocorrncias de caracteres (ou combinao de caracteres especficos). Se o caracter no especificado cortar os brancos da esquerda SELECT DNAME, LTRIM(DNAME,'A'), LTRIM,'AS'), LTRIM(DNAME,'ASOP') FROM DEPT; DNAME ---------------RESEARCH SALES OPERATIONS ACCOUNTING LTRIM(DNAME,'A') ---------------RESEARCH SALES OPERATIONS CCOUNTING LTRIM(DNAME,'AS') ----------------RESEARCH LES OPERATIONS CCOUTING LTRIM(DNAME,'ASOP') ------------------RESEARCH LES ERATIONS CCOUTING

RTRIM(col/value,caractere(s))

remove da direita ocorrncia de caracter(s) (ou combinaes de caracteres especficos). Se os caracteres no forem especificados sero removidos os brancos.

SELECT DNAME, RTRIM(DNAME,'G'), RTRIM,'GHS'), RTRIM(DNAME,'N') FROM DEPT; DNAME ---------------RESEARCH SALES OPERATIONS ACCOUNTING RTRM(DNAME,'G') ---------------RESEARCH SALES OPERATIONS ACCOUNTING RTRIM(DNAME,'GHS') -----------------RESEARC SALE OPERATION ACCOUTIN RTRIM(DNAME,'N') ------------------RESEARCH SALES OPERATIONS ACCOUTING

[Alexandre Costa Vieira SQL ORACLE]

Pgina 50

SQL ORACLE

RTRIM pode ser usada para ajudar na remoo de brancos ou caracter do final de um campo. SOUNDEX
SOUNDEX(col/value) retorna uma linha de caracteres representando o som da palavra para um coluna ou um valor literal. Esta funo retorna a fontica representao de uma palavra, voc pode comparar palavras que tenham escrita diferente e sons iguais.

SELECT ENAME, SOUNDEX(ENAME) FROM EMP WHERE SOUNDEX(ENAME) = SOUNDEX('FRED'); ENAME SOUNDEX(ENAME) ---------- --------------FORD F630

LENGTH
LENGTH(col/value) retorna o nmero de caracteres na coluna ou valor literal. SELECT LENGTH('SQL COURSE'), LENGTH(DEPTNO), LENGTH(DNAME) FROM DEPT; LENGTH('SQL COURSE') LENGTH(DEPTNO) LENGTH(DNAME) -------------------- -------------- ------------10 2 8 10 2 5 10 2 10 10 2 10

Note como a funo INSTR, LENGTH retorna um valor numrico. TRANSLATE e REPLACE As funes TRANSLATE e REPLACE so usadas para substituir caracteres.
TRANSLATE(col/value,from,to) transforma caracteres de para. Mais de um caracter pode ser combinado. Todas as ocorrncias from so substitudas com a correspondente caracter no to. Se o correspondente to no for digitado o from ser removido

SELECT ENAME, TRANSLATE(ENAME,'C','P'), JOB, TRANSLATE(JOB,'AR','IT') FROM EMP WHERE DEPTNO = 10; ENAME TRANSLATE(JOB,'AR','IT') [Alexandre Costa Vieira SQL ORACLE] TRANSLATE(ENAME,'C','P') JOB

Pgina 51

SQL ORACLE

----------CLARK KING MILLER

------------------------ ----------- ----------------------PLARK KING MILLER MENAGER PRESIDENT CLERK MINIGET PTESIDENT CLETK

REPLACE
REPLACE(col/value,linha,linha_alterada) Retorna o valor da coluna com toda a ocorrncia da linha de alterao. Se a linha alterada for omitida todo a linha especificada ser removida.

SELECT JOB, REPLACE(JOB,'SALESMAN','SALESPERSON'), ENAME, REPLACE(ENAME,'CO','PX') FROM EMP;


JOB ----------ANALYST SALESMAN SALESMAN MANAGER REPLACE(JOB,'SALESMAN','SALESPERSON') ------------------------------------ANALYST SALESPERSON SALESPERSON MANAGER ENAME ------------SCOTT TURNER ALLEN CLARK REPLACE(ENAME,'CO','PX') -----------------------SPXTT TURNER ALLEN CLARK

A Funo REPLACE um complemento da funo TRANSLATE que substitui caracteres um a um e o REPLACE substitui um linha por outra. Aninhamento de Funes Funes de linhas nicas podem ser aninhadas para vrias finalidades. Se funes so aninhadas, elas so avaliadas de dentro para fora. Isto por exemplo: X(D(A(B(C(caracter))))) ordem lgica de execuo C,B,A,D e X. Suponhamos que voc queira encontrar o nmero de vezes que um determinado caracter ocorre em uma linha. Como voc faria isso? Voc pode aninhar as funes LENGTH e TRANSLATE para realizar um requisitado resultado. O exemplo seguinte permite contar o nmero de Ss em uma linha:
SELECT DNAME, LENGTH(DNAME), LENGTH(DNAME) - LENGTH(TRANSLATE(DNAME,'AS','A')) FROM DEPT; DNAME LENGHT(DNAME) LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A')) ---------- ------------- ----------------------------------------------RESEARCH 8 1 SALES 5 2 OPERATIONS 10 1 ACCOUNTING 10 0

Aqui esto os passos para realizar esse resultado:


[Alexandre Costa Vieira SQL ORACLE] Pgina 52

SQL ORACLE

1. Usa-se o LENGTH para identificar o nmero de caracteres da linha. 2. Ento usa a funo TRANSLATE para fazer todas as ocorrncias de S sair da linha.
SELECT LENGTH(TRANSLATE(DNAME,'AS','A')) FROM DEPT; LENGTH(TRANSLATE(DNAME,'AS','A')) --------------------------------REEARCH ALE OPERATION ACCOUNTING

3. Note que A modificado para A, e S no corresponde a nenhum caracter para ser alterado. Como S no tem nenhum caracter correspondente ele removido da linha.. 4. Agora subtrai o tamanho da linha retirado os Ss do tamanho da linha original.(com os Ss)
LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A'))

5- O Resultado o nmero de ocorrncias do caracter S na linha. Funes Numricas As funes aceitam entrada de nmeros e retornam valores numricos. ROUND
ROUND(col/value,n) arredonda um coluna, expresso ou valor para n casas decimais. Se n omitido no tem casas decimais. Se n for negativo, os nmeros para esquerda do decimal so arredondados.

SELECT

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

FROM EMP WHERE DEPTNO = 10;


ROUND(45.923,1) --------------45.9 45.9 45.9 ROUND(45.923) ------------46 46 46 ROUND(45.323,1) --------------45.3 45.3 45.3 ROUND(45.323,-1) ---------------40 40 40 ROUND(SAL/32,2) --------------76.56 156.25 40.63

TRUNC
TRUNC(col/value.n) trunca a coluna, expresso ou valor para n casas decimais, ou se n omitido no tm casas decimais. Se n negativo os nmeros para esquerda das casas decimais so truncados para zero.

SELECT

TRUNC(45.923,1), TRUNC(45.923), Pgina 53

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

TRUNC(45.323,1), TRUNC(45.323,-1), TRUNC(SAL/32,2) FROM EMP WHERE DEPTNO = 10;


TRUNC(45.923,1) --------------45.9 45.9 45.9 TRUNC(45.923) ------------45 45 45 TRUNC(45.323,1) --------------45.3 45.3 45.3 TRUNC(45.323,-1) ---------------40 40 40 TRUNC(SAL/32,2) --------------76.56 156.25 40.62

CEIL
CEIL(col/value) encontra o menor valor maior que ou igual para a coluna, expresso ou valor.

SELECT CEIL(SAL), CEIL(99.9), CEIL(101.76), CEIL(-11.1) FROM EMP WHERE SAL BETWEEN 3000 AND 5000; CEIL(SAL) --------3000 5000 3000 CEIL(99.9) ---------100 100 100 CEIL(101.76) -----------102 102 102 CEIL(-11.1) -----------11 -11 -11

FLOOR
FLOOR(col/value) encontra o maior valor menor que ou igual para a coluna, expresso ou valor

SELECT FLOOR(SAL), FLOOR(99.9), FLOOR(101.76), FLOOR(-11.1) FROM EMP WHERE SAL BETWEEN 3000 AND 5000; FLOOR(SAL) ---------3000 5000 5000 FLOOR(99.9) ----------99 99 99 FLOOR(101.76) ------------101 101 101 FLOOR(-11.1) ------------12 -12 -12

POWER
POWER(col/value,n) eleva uma coluna, expresso ou valor por uma potncia, n pode ser negativo mas deve ser um nmero, se no um erro ser retornado

SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5) FROM EMP WHERE DEPTNO = 10; SAL --------------2450.0 5000.0 1300.00 POWER(SAL,2) --------------6002500 25000000 1690000 POWER(SAL,3) --------------14706125000 125000000000 2197000000 POWER(50,5) --------------312500000 312500000 312500000 Pgina 54

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

SQRT
SQRT(col/value) encontra a raiz quadrada da coluna ou valor. Se a coluna ou valor for menor que zero ser retornado nulo.

SELECT SAL, SQRT(SAL), SQRT(40), SQRT(COMM) FROM EMP WHERE COMM > 0; SAL SQRT(SAL) SQRT(40) SQRT(COMM) ------------ ----------------- ------------ -------------1600.00 40 6.32455532 17.3205081 1250.00 35.3553391 6.32455532 22.3606798 1250.00 35.3553391 6.32455532 37.4165739

SIGN
SIGM(col/value) retorna -1 se a coluna, expresso ou valor negativa ou zero e 1 se for positivo

SELECT SAL-COMM, SIGN(SAL-COMM), COMM-SAL, SIGN(COMM-SAL) FROM EMP WHERE DEPTNO = 30; SAL-COMM ---------------1300 750 -150 1500 SIGN(SAL-COMM) ---------------1 1 -1 1 COMM-SAL ----------------1300 -750 150 -1500 SIGN(SAL-COMM) ----------------1 -1 1 -1

Freqentemente a funo SIGN usada para testar um valor se menor, maior ou igual a um segundo valor. O seguinte exemplo apresenta todos os empregados os quais o salrio maior que sua comisso.
SELECT ENAME, SAL, COMM FROM EMP WHERE SIGN(SAL-COMM) = 1; ENAME ------------ALLEN WARD TURNER SAL ---------------1600 1250 1500 COMM -------------300 500 0

ABS
ABS(col/value) encontra o valor absoluto de um coluna, expresso ou valor SELECT SAL, COMM, COMM-SAL, ABS(COMM-SAL), ABS(-35) FROM EMP WHERE DEPTNO = 30; SAL COMM COMM-SAL ABS(COMM-SAL) ABS(-35) Pgina 55

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

-----------1600.00 1250.00 1250.00 2850.00 1500.00 950.00

-----------300.00 500.00 1400.00 .00

------------1300 -750 150 -1500

-----------1300 750 150 1500

-----------35 35 35 35 35 35

MOD
MOD(val1,val2) encontra o resto da diviso val1 por val2 SELECT SAL, COMM, MOD(SAL,COMM), MOD(100,40) FROM EMP WHERE DEPTNO = 30 ORDER BY COMM; SAL --------------2,850.00 950.00 1,600.00 1,250.00 1,250.00 1,500.00 COMM --------------MOD(SAL,COMM) --------------MOD(100,40) --------------20 20 20 20 20 20

300.00 500.00 1,400.00 .00

100 250 1250 1500

Exerccio 2 - Usando Funes Esses exerccios convm o uso de funes no somente para o SELECT mas no WHERE e ORDER BY. Se colunas sinnimas so usadas no resultado, use ento na clausula SELECT da sua declarao SQL. 1. Liste os nomes e salrios incrementados de 15% dos empregados e tambm os valores mostrados inteiros.
DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10 ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER PCTSAL ---------920 1840 1438 3421 1438 3278 3818 3450 5750 1725 1265 1093 3450 1495

2. Fazer a seguinte sada.


EMPLOYEE_AND_JOB -------------------[Alexandre Costa Vieira SQL ORACLE] Pgina 56

SQL ORACLE

SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

3. Mostrar uma lista de todos os empregados com um identificador o qual composto das primeiras duas letras de seu cargo, o meio de dois dgitos de seu nmero e o cdigo soundex do seu nome.
NAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER CODE ----------CL36S530 SA49A450 SA52W630 MA56J520 SA65M635 MA69B420 MA78C462 AN78S300 PR83K520 SA84T656 CL87A352 CL90J520 AN90F630 CL93M460

4. Fazer uma ferramenta intensiva de pesquisa para listar os empregados com o cargo que o usurio entrar.
Enter value for job : clerk
EMPNO ----7369 7876 7900 7934 ENAME ---------SMITH ADAMS JAMES MILLER JOB ---------CLERK CLERK CLERK CLERK MGR ----7902 7788 7698 7782 HIREDATE --------13-JUN-83 04-JUN-84 23-JUL-84 21-NOV-83 SAL ---------800.00 1,100.00 950.00 1,300.00 COMM ---------DEPTNO -----20 20 30 10

5. Imprima um lista dos nomes de departamentos centralizados. Assuma a coluna com a largura de 20 caracteres.
DEPARTMENT -------------------ACCOUNTING OPERATIONS RESEACH SALES

6. Encontrar a primeira ocorrncia de L no nome do empregado, e substitu-la por X.


ENAME ---------FIRST_OCCURENCE_OF_ L -------------------

[Alexandre Costa Vieira SQL ORACLE]

Pgina 57

SQL ORACLE

SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

SMITH AXLEN WARD JONES MARTIN BXAKE CXARK SCOTT KING TURNER ADAMS JAMES FORD MIXLER

Funes de Data Funes de data operam sobre datas do ORACLE. Todas as funes de datas retornam valores de tipo data exceto MONTHS_BETWEEN o qual retorna um valor numrico. Armazenamento de Datas no ORACLE
As datas no ORACLE so armazenadas como nmeros e com as seguintes informaes:

Sculo Ano Ms Dia Horas Minutos Segundos

O padro de data mostrados nas pesquisas DD-MON-YY. Sysdate Sysdate uma coluna que retorna a data e horrio corrente. Voc pode usar o SYSDATE como uma outra coluna qualquer. Por exemplo, voc pode mostrar data corrente selecionando o sysdate de uma tabela simulada chamada DUAL. A tabela DUAL uma tabela do sistema e deve ser permitido acess-la para todos os usurios. Ela contm uma coluna DUMMY e uma linha com o valor X. A tabela DUAL usada quando voc quer retornar apenas uma linha. Para mostrar a data corrente:
SELECT SYSDATE FROM DUAL;

Voc poderia facilmente selecionar o sysdate da tabela EMP, mas 14 sysdate seriam retornados.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 58

SQL ORACLE

Usando Operadores Aritmticos Devido o fato das datas serem armazenadas como nmero, possvel fazer clculos com datas usando operadores aritmticos tal como adio e subtrao. Voc pode adicionar e subtrair nmeros constantes e bem como data de data. As operaes que voc pode realizar so:
data + nmero data - nmero data - data data+nmero/24 Adicionando um nmero de dias em uma data, produzindo uma nova data subtraindo um nmero de dias de uma data, produzindo uma nova data subtraindo uma data de outra, produzindo um nmero de dias adicionando um nmero de horas em uma data produzindo um nova data

SELECT HIREDATE, HIREDATE+7, HIREDATE-7, SYSDATE - HIREDATE FROM EMP WHERE HIREDATE LIKE '%JUN%'; HIREDATE ---------------13-JUN-83 11-JUN-84 04-JUN-84 04-JUN-84 HIREDATE+7 ---------------20-JUN-83 18-JUN-84 11-JUN-84 11-JUN-84 HIREDATE-7 ---------------06-JUN-83 04-JUN-84 28-MAY-84 28-MAY-84 SYSDATE-HIREDATE ---------------1982.70628 1618.70628 1625.70628 1625.70628

Subtraindo SYSDATE de HIREDATE coluna da tabela EMP retorna o nmeros de dias que o empregado est admitido. MONSTHS_BEETWEEN
MONTHS_BETWEEN(data1,data2) encontra o nmero de meses entre data 1 e data2. O resultado pode ser positivo ou negativo. Se a data 1 for posterior a data2, ento o resultado ser positivo, se a data 1 for menor que a data 2 o resultado ser negativo.

SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE), MONTHS_BETWEEN('01-JAN-84','05-NOV-88') FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)> 59;


MONTHS_BETWEEN(SYSDATE,HIREDATE) -------------------------------65.0873622 63 60.5067171 59.3454267 59.3454267 59.8292977 MONTHS_BETWEEN('01-JAN-84','05-NOV-88') ---------------------------------------58.429332 -58.429332 -58.429332 -58.429332 -58.429332 -58.429332

[Alexandre Costa Vieira SQL ORACLE]

Pgina 59

SQL ORACLE

A parte no inteira do resultado representa um parcela do ms. ADD_MONTHS


ADD_MONTHS(data,n) adiciona n nmeros de meses na data. n deve ser inteiro e pode ser negativo.

SELECT HIREDATE, ADD_MONTHS)HIREDATE,3), ADD_MOSTHS(HIREDATE,-3) FROM EMP WHERE DEPTNO = 20; HIREDATE ---------------------13-JUN-83 31-OCT-83 05-MAR-84 04-JUN-84 05-DEC-83 ADD_MONTHS)HIREDATE,3) ---------------------13-SEP-83 31-JAN-84 05-JUN-84 04-SEP-84 05-MAR-84 ADD_MOSTHS(HIREDATE,-3) ---------------------13-MAR-83 31-JUL-83 05-DEC-83 04-MAR-84 05-SEP-83

NEXT_DAY
NEXT_DAY(data1,caracter) data do prximo dia especificado da semana(caracter) seguinte data.1. Caracter deve ser um nmero representado um dia, ou o dia semana descrito em ingls.

SELECT HIREDATE, NEXT_DAY(HIREDATE,'FRIDAY'), NEXT_DAY(HIREDATE,6) FROM EMP WHERE DEPTNO = 20; HIREDATE ----------------14-MAY-84 09-JUL-84 21-NOV-83 NEXT_DAY(HIREDATE,'FRIDAY') --------------------------18-MAY-84 13-JUL-84 25-NOV-83 NEXT_DAY(HIREDATE,6) -------------------18-MAY-84 13-JUL-84 25-NOV-83

LAST_DAY
LAST_DAY(data) encontra a data do ultimo dia do ms da data especificada SELECT SYSDATE, LAST_DAY(SYSDATE), HIREDATE, LAST_DAY(HIREDATE), LAST_DAY('15-FEB-88') FROM EMP WHERE DEPTNO = 20;
SYSDATE --------------04-DEC-89 04-DEC-89 04-DEC-89 04-DEC-89 04-DEC-89 LAST_DAY(SYSDATE) --------------------------------31-DEC-89 31-DEC-89 31-DEC-89 31-DEC-89 31-DEC-89 HIREDATE --------------17-DEC-80 02-APR-81 09-DEC-82 12-JAN-83 03-DEC-81 LAST_DAY(HIREDATE) ---------------------------------31-DEC-80 30-APR-81 31-DEC-82 31-JAN-83 31-DEC-81 LAST_DAY(15-FEB-88) -----------------------------------29-FEB-88 29-FEB-88 29-FEB-88 29-FEB-88 29-FEB-88

A funo ROUND pode ser aplicada para datas.


ROUND(data)

retorna a data com o horrio em 12:00(meio-dia) Isso usamos quando comparamos datas que tenham diferentes horrios.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 60

SQL ORACLE

ROUND(data,MONTH) ROUND(data,YEAR)

retorna o primeiro dia do ms da data, Se a data estiver na primeira metade do ms; se no retorna o primeiro do ms seguinte. retorna o primeiro dia do ano da data se data estiver na primeira metade do ano; se no retorna o primeiro do ano seguinte.

SELECT SYSDATE, ROUND(SYSDATE,'MONTH'), ROUND(SYSDATE,'YEAR') FROM DUAL; SYSDATE ---------------------04-DEC-89 ROUND(SYSDATE,'MONTH') ---------------------01-DEC-89 ROUND(SYSDATE,'YEAR') ---------------------01-JAN-90

TRUNC
TRUNC(data,caracter) encontra a data do primeiro dia do ms da data quando o caracter = MONTH. Se o caracter = YEAR ele encontra o primeiro dia do ano.

SELECT SYSDATE, TRUNC(SYSDATE,'MONTH'), TRUNC(SYSDATE,'YEAR') FROM DUAL; SYSDATE ---------------------04-DEC-89 TRUNC(SYSDATE,'MONTH') ---------------------01-DEC-89 TRUNC(SYSDATE,'YEAR') ---------------------01-JAN-89

TRUNC usado se voc quiser remover o horrio do dia. O horrio contido no dia removido por padro.

Funes de Converso SQL possui um nmero de funes para controlar os tipos de converso de dados. Essas funes de converses converte um valor de um tipo de dado para outro.
TO_CHAR(nmero,data,formato) TO_NUMER(caracter) TO_DATE(caracter,formato) converte nmeros e datas para formatos alfanumricos converte alfanumricos os quais possuem nmeros para numricos. converte um alfanumrico representando uma data, para um valor de data de acordo com o formato especificado. Se o formato omitido o formato padro DD=MON-YY.

TO_CHAR
A funo TO_CHAR freqentemente usada para modificar um formato de data padro para um formato alternativo para mostrar. TO_CHAR(data,mscara) especifica que a data est sendo convertida para um novo formato na sada.

Para converter a data corrente do formato padro (DD-MON-YY) para uma nova mscara.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 61

SQL ORACLE

SELECT TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') FROM DUAL; TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') --------------------------------------TUESDAY , 05TH SEPTEMBER 1989

Note que: A mscara a qual deve estar entre aspas simples, pode ser includa em vrios formatos listados anteriormente. A coluna e mscara deve ser separadas por uma vrgula. DAY e MONTH na sada so espaados automaticamente com brancos no tamanho de 9 caracteres Para remover um espao em branco usar o FM(maneira de enchimento) prefixo:
SELECT TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') FROM DUAL; TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') --------------------------------------TUESDAY, 05TH

SEPTEMBER

1989

FM pode ser usado para suprimir zeros para o formato ddth, ex.: 05TH alterado para 5TH A formato que a data ser entrada o formato que ser mostrado. TO_CHAR pode tambm ser usado para extrair o horrio de um nico dia, e mostr-lo no especificado formato. Para mostrar o formato de um dia:
SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL; TO_CHAR(SYSDATE,'HH:MI:SS') --------------------------------------08:16:24

A funo TO_CHAR tambm usada para converter um valor do tipo numrico para um valor do tipo alfanumrico. TO_CHAR(numer,nmero mscara)
SELECT TO_CHAR(SAL,'$9,999') FROM EMP; TO_CHAR(SAL,'$9,999') [Alexandre Costa Vieira SQL ORACLE] Pgina 62

SQL ORACLE

---------------------$1,000 $1,600 $1,250 $2,975

Note que os formatos das mscaras so opcionais. Se a mscara omitida, a data convertida para um alfanumrico valor ORACLE que padro DD-MON-YY. Se o mscara no especificada, o nmero convertido para alfanumrico. Ento note que o formato modelo no afetam o valor interno que representam o valor das colunas. Eles somente afetam como a coluna mostrada quando retirada com uma declarao SELECT. Formatos de Data
Mscara SCC ou CC YYYY ou SYYYY YYY ou YY ou Y Y,YYY SYEAR ou YEAR BC ou AD B.C. ou A.D. Q MM MONTH MON WW ou W DDD ou DD ou D DAY DY J AM ou PM A.M. ou P.M. Significado Sculo, prefixo S BCdata com - Ano, prefixo S BC data com - ltimo 3, 2 ou 1 digito(s) do ano Ano com vrgula nessa posio Ano, soletrado na sada S prefixo BC data com - BC/AD perodo BC/AD indicador com perodos Um quarto do Ano Ms nome do ms, espaamento com brancos do tamanho de 9 caracteres nome do ms, 3 letras abreviadas Semana do ano ou ms dia do ano, ms ou semana nome do dia, espaado com brancos com 9 caracteres de tamanho nome do dia, 3 letras abreviadas data Juliana, o nmero de dias Cristo Indicador meridiano indicador meridiano com perodos desde 31 dezembro 4713 antes de

[Alexandre Costa Vieira SQL ORACLE]

Pgina 63

SQL ORACLE

HH ou HH12 HH24 MI SS SSSSS /.,etc. ...

horas do dia (1-12) horas do dia (0-23) minuto segundos segundos passado meia-noite(0-86399) pontuao reproduzida no resultado cotas de linhas so representadas no resultado.

Os prefixos abaixo devem ser adicionados em frente aos cdigos.


Fm (mode de enchimento) Prefixo para MONTH ou DAY suprime os espaamentos em brancos, partindo um tamanho de uma varivel, FM suprimir zeros para o formato ddth. No significa que em outros cdigos uma segunda ocorrncia for FM torne brancos os espaos de novo.

Os sufixos abaixo devem ser adicionados em frente dos cdigos:


TH SP SPTH ou thsp nmero ordinal(DDTH para 4TH) soletrando sada do nmero(DDSP para FOUR) soletra o nmero ordinal na sada(DDSPTHpara FOURTH)

Nota: Os cdigos so ferramentas sensitivas e afetaram a amostragem dos elementos da data:


DAY Day Month Ddth DdTh MONDAY Monday July 14th 14Th

Formatos Numricos Os elementos do formato numrico modelo so:


Mscara 9 0 $ . , Significado Exemplo 1234 001234 $1234 1234.00 1,234 posio numrica (nmero de 9s determinam a 999999 largura mostrada) mostra zeros mostra sinal de dlar ponto decimal na posio especificada vrgula na posio especificada 0999999 $999999 999999.99 999,999

[Alexandre Costa Vieira SQL ORACLE]

Pgina 64

SQL ORACLE

MI PR EEEE V B

sinal de menos direita(valores negativos) parnteses para nmeros negativos

999999MI 999999PR

1234<1234> 1.234E+03 123400 1234.00

notao cientfica(formato de conter quatro Es 99.999EEEE unicamente) multiplica pela dcima potncia 10n(n = nmero 9999V99 9s depois da V mostra valores zero em branco, no zero B9999.99

TO_NUMER
No seguinte exemplo a funo TO_NUMBER usada para transformar um nmero armazenado como um alfanumrico para um tipo numrico: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL > TO_NUMBER('1500');
EMPNO ----7499 7566 7698 7782 7788 7839 7902 ENAME ---------ALLEN JONES BLAKE CLARK SCOTT KING FORD JOB ---------SALESMAN MANAGER MANAGER MANAGER ANALYST PRESIDENT ANALYST SAL ---------1600 2975 2850 2450 3000 5000 3000

TO_DATE Para mostrar todos os empregados admitidos em 4 de junho de 1984 (no formato padro), ns podemos usar a funo TO_DATE:
SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE = TO_DATE('June 4,1984','Month dd, yyyy'); EMPNO ENAME HIREDATE ----- ---------- --------7844 TURNER 04-JUN-84

O contedo convertido para data e comparado com o valor de HIREDATE. A funo TO_DATE freqentemente usada para suprir o valor ORACLE em um outro valor que o do padro, Por exemplo, quando voc insere um data, o ORACLE espera ser passado o valor no formato padro DD-MON-YY. Se voc no quer usar o formato padro, voc deve usar a funo TO_DATE e apropriar o alternativo formato Por exemplo: Para entrar um linha na tabela EMP com a data no no formato padro:
[Alexandre Costa Vieira SQL ORACLE] Pgina 65

SQL ORACLE

INSERT INTO EMP (EMPNO, DEPTNO,HIREDATE) VALUES(7777,20,TO_DATE('19/08/90','DD/MM/YY'));

O comando INSERT comentado em detalhes mais adiante

Funes que Aceitam Vrios Tipos de Entrada de Dados DECODE DECODE a mais potente funo do SQL. Ele facilita pesquisas condicionais fazendo o trabalho de ferramentas ou comandos se-ento-se no. Sintaxe: DECODE(col/expresso, procurado1,resultado1,...,padro) Col/expresso comparado com cada um dos valores procurado e retorna o resultado se a col/expresso igual ao valor procurado. Se no for encontrada nenhum dos valores procurados, a funo DECODE retorna o valor padro. Se o valor padro for omitido ele retornar um valor nulo. Argumentos DECODE deve ter no mnimo 4 parmetros ou argumentos. COL/EXPRESSO - a nome da coluna ou expresso a ser avaliado. PROCURADO1 - o primeiro valor para ser testado RESULTADO1- o valor para ser retornado se o procurado1 for encontrado. PROCURADO1 e RESULTADO1 podem ser repetidos quantas vezes forem necessrios.-(PROCURADO2,RESULTADO2, PROCURADO3,RESULTADO3,...) PADRO - o valor a ser retornado se nenhum procurado for encontrado. Nota: col/expresso pode ser vrios tipos de dados. PROCURADO deve ser um dado do tipo coluna ou expresso O valor retornado forado para alguns tipos de dados como o terceiro argumento(resultado1). O seguinte exemplo decodifica os cargos dos tipos MANAGER e CLERK unicamente. Os outros cargos sero padro alterados para UNDEFINED.
SELECT ENAME, JOB, DECODE(JOB,'CLERK','WORKER', 'MANAGER','BOSS', 'UNDEFINED' DECODE_JOB FROM EMP; [Alexandre Costa Vieira SQL ORACLE] Pgina 66

SQL ORACLE

ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

JOB ---------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

DECODE_JOB ---------WORKER UNDEFINED UNDEFINED BOSS UNDEFINED BOSS BOSS UNDEFINED UNDEFINED UNDEFINED WORKER WORKER UNDEFINED WORKER

Para mostrar a gratificao percentual dependendo do grau do salrio:


SELECT GRADE, DECODE(GRADE,'1','15%', '2','10%' '3','8%', '5%') BONUS FROM SALGRADE; GRADE --------1 2 3 4 5 BONUS ----15% 10% 8% 5% 5%

Esse exemplo ilustra como a funo decode, o valor retornado forado a ter um tipo de dado no terceiro argumento. Ns permitimos o usurio especificar a ordem na qual a informao empregado mostrada por entrada de um valor na hora da execuo
select * from emp order by decode(&orderby, 1,sal, 2,ename sal); Enter value for orderby: 2 ERROR at line 2: ORA-1722: invalid number

Note que esse comando causa um erro porque o tipo de dado de ename (alfanumrico) diferente que o do sal (numrico) o qual o terceiro argumento. No exemplo abaixo, ns queremos retornar o salrio incrementado de acordo com o tipo de cargo.
SELECT JOB, SAL, DECODE(JOB,'ANALYST',SAL*1.1, [Alexandre Costa Vieira SQL ORACLE] Pgina 67

SQL ORACLE

'CLERK',SAL*1.15, 'MANAGER',SAL*.095, SAL) FROM EMP;

NVL
NVL(col/valor,valor) converte um valor nulo para um valor desejado. Tipo de dados devem combinar(col/valor e valor).

SELECT SAL*12+NVL(COMM,0), NVL(COMM,1000), SAL*12+NVL(COMM,1000) FROM EMP WHERE DEPTNO = 10; SAL*12+NVL(COMM,0) --------------------29400 60000 15600 NVL(COMM,1000) --------------------1000 1000 1000 SAL*12+NVL(COMM,1000) --------------------30400 61000 16600

GREATEST
GREATEST(col/valor1,col/valor2,... retorna o maior da lista de valores. Todos os col/valores so ) convertidos para um valor antes da comparao. SELECT GREATEST(1000,2000), GREATEST(SAL,COMM) FROM EMP WHERE DEPTNO = 30; GREATEST(1000,2000), ----------------------2000 2000 2000 2000 2000 GREATEST(1000,2000), ----------------------1600 1250 1400 1500

Nota: Na funo GREATEST quando na lista de valores existe um valor nulo ele considerado como o maior. LEAST
LEAST(col/valor1,col/valor2,...) retorna o menor valor de um lista de valores. Todos os valores so convertidos antes da comparao.

SELECT LEAST(1000,2000), LEAST(SAL,COMM) FROM EMP WHERE DEPTNO = 30; LEAST(1000,2000), ----------------------1000 1000 1000 1000 LEAST(1000,2000), ----------------------300 500 1250

[Alexandre Costa Vieira SQL ORACLE]

Pgina 68

SQL ORACLE

1000

Nota: Na funo LEAST quando na lista de valores existe um valor nulo ele considerado como o menor. VSIZE
VSIZE(col/valor) retorna o nmero de bytes interno do ORACLE representando um col/valor. SELECT DEPTNO, VSIZE(DEPTNO), VSIZE(HIREDATE), VSIZE(SAL), VSIZE(ENAME) FROM EMP WHERE DEPTNO = 10; DEPTNO ------10 10 10 VSIZE(DEPTNO) ------------2 2 2 VSIZE(HIREDATE) ------------7 7 7 VSIZE(SAL) ------------3 2 2 VSIZE(ENAME) ------------5 4 6

Revisando Aninhamento de Funes Relembrando que funes podem ser aninhadas em vrios nveis, e que o interior do aninhamento avaliado primeiro, trabalhamos com a ltima funo externa. Ela ento seguida de um trilha de abertura e fechamento de parnteses, que deve ser o nmero de cada uma. As funes abaixo tem sido aninhadas e so executadas como a seguir:
SELECT ENAME, NVL(TO_CHAR(MGR),'UNMANAGEABLE') FROM EMP WHERE MGR IS NULL; ENAME --------KING NVL(TO_CHAR(MGR),'UNMANAGEABLE') --------------------------------UNMANAGEABLE

1. MGR um coluna convertida para alfanumrica com a funo TO_CHAR. 2. A funo NVL troca um MGR nulo por uma linha de caracteres UNMANAGEABLE. Funes aninhadas podem ento serem usadas para mostrar a data de Quinta-feira que de dois meses de hoje no formato de Day dd Month YYYY.
SELECT SYSDATE, TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE,2),'FRIDAY'),'Day dd Month YYYY') FROM DUAL;
SYSDATE --------04-DEC-89 TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE,2),'FRIDAY'),'Day dd Month YYYY') --------------------------------------------------------------------09 February 1990

1. A funo ADD_MONTHS adiciona dois meses para o corrente ms (dezembro).


[Alexandre Costa Vieira SQL ORACLE] Pgina 69

SQL ORACLE

2. A funo NEXT_DAY encontra a Quinta-feira dois meses de SYSDATE. 3. A funo TO_CHAR converte a coluna data para um tipo de alfanumrico na ordem para mostrar um no formato padro de data Day dd Month YYYY. Exerccio 3 Mais Funes Esse exerccio convm de funes de linha nica discutidas nessa Unidade, como tambm revisando algumas funes apresentadas anteriormente. 1. Mostrar nome e admisso dos empregados do departamento 20. Fazer com que a expresso fique com o nome de DATE_HIRED com o tamanho de 80 colunas.
ENAME -------SMITH JONES SCOTT ADAMS FORD DATE_HIRED ------------------------------------------------------------June, Thirteenth 1983 October, Thirty-First 1983 March, Fifth 1984 June, Fourth 1984 December, Fifth 1983

2. Mostrar o nome com a admisso do empregado, e salrio revisando a data. Assumindo a reviso da data um ano depois da admisso. Ordem de sada por reviso de data.
ENAME ---------SMITH ALLEN JONES MILLER MARTIN FORD SCOTT WARD CLARK TURNER ADAMS BLAKE KING JAMES HIREDATE --------13-JUN-83 15-AUG-83 31-OCT-83 21-NOV-83 05-DEC-83 05-DEC-83 05-MAR-84 26-MAR-84 14-MAY-84 04-JUN-84 04-JUN-84 11-JUN-84 09-JUL-84 23-JUL-84 REVIEW --------13-JUN-84 15-AUG-84 31-OCT-84 21-NOV-84 05-DEC-84 05-DEC-84 05-MAR-85 26-MAR-85 14-MAY-85 04-JUN-85 04-JUN-84 11-JUN-85 09-JUL-85 23-JUL-85

3. Imprima uma lista de empregados mostrando justamente se o salrio maior que 1500. Se for exatamente igual 1500 mostre On Target, se menor mostre Below 1500.
ENAME ---------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SALARY --------------------------------------------Below 1500 1600 2850 2450 3000 Below 1500 2975 5000 Below 1500 Below 1500 3000

[Alexandre Costa Vieira SQL ORACLE]

Pgina 70

SQL ORACLE

SMITH TURNER WARD

Below 1500 On Target Below 1500

4. Escreva uma pesquisa na qual retorne o dia da semana, para diferentes datas entradas no formato DD.MM.YY.
Enter value for anydate: 12.11.88 DAY ------------------------------------------------SATURDAY

5. Escreva uma pesquisa que calcule o tempo que o empregado tem estado na companhia. Usar DEFINE para evitar as repeties tpico das funes.
Enter value for employee_name: King ENAME -----------------KING LENGTH_OF_SERVICE ---------------------4 YEARS 4 MONTHS

6. Dado uma linha no formato nn/nn, muito que a primeiro e dois ltimos caracteres sejam nmeros, e que o meio um alfanumrico /. Imprima a expresso YES se vlido, 'NO' se no vlido. Use os seguintes valores para testar sua soluo 12/34 , 01/1a.99\88.
VALUE VALID? ----- -----12/34 YES

7. Empregados admitidos antes da 15th dia do ms so espaados na ltima Quinta do ms. Aqueles admitidos depois do 15th so espaados da ltima quinta do ms seguinte. Imprima a lista dos empregados com suas datas de admisses e o primeiro dia de pagamento. Ordene por admisso.
ENAME ---------SMITH ALLEN JONES MILLER MARTIN FORD SCOTT WARD CLARK TURNER ADAMS BLAKE KING JAMES HIREDATE --------13-JUN-83 15-AUG-83 31-OCT-83 21-NOV-83 05-DEC-83 05-DEC-83 05-MAR-84 26-MAR-84 14-MAY-84 04-JUN-84 04-JUN-84 11-JUN-84 09-JUL-84 23-JUL-84 PAYDAY --------24-JUN-83 26-AUG-83 25-NOV-83 30-DEC-83 30-DEC-83 30-DEC-83 30-MAR-84 27-APR-84 25-MAY-84 29-JUN-84 29-JUN-84 29-JUN-84 27-JUN-84 31-AUG-84

[Alexandre Costa Vieira SQL ORACLE]

Pgina 71

SQL ORACLE

Funes de Grupo
Esta Unidade explica como resumir informaes permitindo ser obtida por grupos de linhas e at o uso de grupos ou agregamento de funes. Ns discutiremos como voc divide a linha em uma tabela em uma menor configurao, e como especificar critrio de pesquisa para grupo de linhas. GROUP BY Funes de grupo operam sobre conjuntos de linhas. Elas retornam resultados baseados sobre um grupo de linhas, antes que um resultado por linha tenha retornado como uma funo de linha nica. Como padro todas as linhas de um tabela so trilhadas como um grupo. A clausula GROUP BY da declarao do SELECT usada para dividir as linhas em menores grupos. As funes de grupos so listadas abaixo:
Funo AVG([DINSTINCT/ALL]n) COUNT([DINSTINCT/ALL]expr*) Valor Retornado Valor mdio de n, ignorando os valores nulos. Contador * conta todas as linhas selecionadas, incluindo duplicadas e linhas nulas MAX([DISTINCT/ALL]expr) MIN([DISTINCT/ALL]expr) STDDEV([DISTINCT/ALL]n) SUM([DISTINCT/ALL]n) VARIANCE([DISTINCT/ALL],n) valor mximo da expresso valor mnimo da expresso Desvio padro de n, ignorando valores nulos. Valor soma de n, ignorando valores nulos. variao de n, ignorando valores nulos.

Todas as funes acima operam sobre um nmero de linhas (por exemplo, uma tabela inteira) e so portanto funes de GRUPO. DISTINCT faz uma funo de grupo considerar valores no duplicados; ALL considera todos os valores sua declarao no necessria. Os tipos de dados dos argumentos devem ser alfanumricos, numricos ou data onde a expresso listada. Todas as funes de grupo exceto o COUNT(*) ignoram os valores nulos. Usando Funes de Grupo: AVG Para calcular a mdia salarial dos empregados, faa:
SELECT AVG(SAL) [Alexandre Costa Vieira SQL ORACLE] Pgina 72

SQL ORACLE

FROM

EMP;

AVG(SAL) ---------2073.21429

Note que as linhas da tabela EMP so trilhadas num nico grupo. MIN Uma funo de grupo pode ser usada para subconjunto de linhas de uma tabela usando a clausula WHERE. Para encontrar o mnimo salrio ganho por um escriturrio, faa:
SELECT MIN(SAL) FROM EMP WHERE JOB = 'CLEARK'; MIN(SAL) --------800

COUNT Para Encontrar o nmero de empregados do departamento 20, faa:


SELECT COUNT(*) FROM EMP WHERE DEPTNO = 20; COUNT(*) -------5

Nota: A funo COUNT usada dessa forma COUNT(1) tem o mesmo resultado que a acima e mais rpida. A clausula GROUP BY A clausula GROUP BY pode ser usada para dividir as linhas de uma tabela em um menor grupo. Funes de grupo devem ser usadas para resumir informaes por cada grupo. Para calcular a mdia salarial de cada grupo de cargo, faa:
SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB; JOB ------------ANALYST AVG(SAL) -------------3000 Pgina 73

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

CLERK MANAGER PRESUDENT SALESMAN

1037.5 2758.33333 5000 1400

Excluindo linhas quando estiver Usando o GROUP BY Linhas devem ser excludas com a clausula WHERE, antes da diviso por grupos. Para mostrar a mdia salarial para cada cargo excluindo os gerentes, faa:
SELECT JOB, AVG(SAL) FROM EMP WHERE JON <> 'MANAGER' GROUP BY JOB; JOB ------------ANALYST CLERK PRESUDENT SALESMAN AVG(SAL) -------------3000 1037.5 5000 1400

Grupos dentro de Grupos Ns podemos ento usar a clausula GROUP BY para prover resultados para grupos dentro de grupos. Para mostrar a media salarial mensal faturado por cada cargo dentro de um departamento, faa:
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP GROUP BY DEPTNO, JOB; DEPTNO -----10 10 10 20 20 20 30 30 30 JOB ---------CLERK MANAGER PRESIDENT ANALYST CLERK MANAGER CLERK MANAGER SALESMAN AVG(SAL) ---------1300 2450 5000 3000 950 2975 950 2850 1400

Funes de Grupo e Resultados Individuais A seguinte declarao SQL retorna o mximo salrio para cada grupo. O resultado no significativo porque o cargo no mostrado no resultado.
SELECT MAX(SAL) [Alexandre Costa Vieira SQL ORACLE] Pgina 74

SQL ORACLE

FROM GROUP

EMP BY JOB;

MAX(SAL) -------------3000 1300 2975 5000 1600

A mostra do cargo opcional, mas a pesquisa fica um pouco sem sentido sem ele.
MAX(SAL) -------------3000 1300 2975 5000 1600 JOB ------------ANALYST CLERK MANAGER PRESIDENT SALESMAN

Suponha na mente a seguinte regra quando usar funes de grupo: Se voc inclui uma funo de grupo no comando SELECT, voc no deve selecionar resultados que no estejam declarados no GROUP BY. Por exemplo:
SELECT DEPTNO, MIN(SAL) FROM EMP; ERROR at line 1: ORA-0937: not single row set function.

O comando invlido porque DEPTNO tem um valor para cada linha da tabela, enquanto MIN(SAL) tem um valor para tabela inteira. Para corrigir o erro, ns devemos agrupar o item individual:
SELECT DEPTNO, MIN(SAL) FROM EMP; DEPTNO -----10 20 30 MIN(SAL) ------------1300 800 950

DEPTNO no exemplo acima, no permanece um valor individual ele um nome de um grupo. Portanto existe uma regra para usar a funo GROUP BY. Se existir mais de uma coluna na declarao SELECT, ela(s) devem ser transformadas em nome de Grupo colocando-as na clausula WHERE.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 75

SQL ORACLE

A clausula HAVING Use a clausula HAVING se voc quiser especificar o qual grupo ser mostrado. Para mostrar a mdia salarial para todos os departamentos que tiverem mais de trs empregados, faa:
SELECT FROM GROUP BY HAVING DEPTNO, AVG(SAL) EMP DEPTNO COUNT(1) > 3; AVG(SAL) ----------------2175 1566.6667

DEPTNO --------------20 30

Para mostrar s os cargos, onde o mximo salrio maior ou igual a $3000, faa:
SELECT JOB, MAX(SAL) FROM EMP HAVING MAX(SAL)>=3000 GROUP BY JOB; JOB ------------ANALYST PRESIDENT MAX(SAL) -------------3000 5000

Nota: A clausula HAVING deve preceder uma clausula GROUP BY, recomendado que seja colocado primeiropois mais lgico. Grupos so formados e funes de grupos so calculadas antes da clausula HAVING aplicado para selecionar a sada dos grupos. A clausula WHERE no pode ser usada para restringir itens de grupo. A seguinte declarao da clausula WHERE errada.
SELECT DEPTNO, AVG(SAL) FROM EMP WHERE AVG(SAL) > 2000 GROUP BY DEPTNO; ERROR at line 3: ORA-0934: set function is not allowed here

Voc pode unicamente usar WHERE para restringir linhas individuais. Para restringir colunas de grupos usa-se a clausula HAVING.
SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) > 2000;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 76

SQL ORACLE

DEPTNO -----10 20

AVG(SAL) ---------2916.66667 2175

Nota: Voc pode excluir todos os gerentes usando a clausula WHERE quando estiver agrupando por cargo.
SELECT JOB, AVG(SAL) FROM EMP WHERE JOB <> 'MANAGER' GROUP BY JOB; JOB ------------ANALYST CLERK PRESIDENT SALESMAN AVG(SAL) -------------3000 1037.5 5000 1400

A Ordem das clausulas na declarao SELECT.


SELECT FROM WHERE GROUP BY HAVING ORDER BY coluna(s) tabela(s) condio linha coluna(s) condio de grupo de linhas coluna(s);

SQL avaliaes:
1 WHERE 2. GROUP BY 3. HAVING - para estabelecer linhas candidatas (no pode conter funes de grupos. - para configurar grupos para selecionar grupos para mostrar

Exerccio 4 - Funes de Grupo No final desses exerccios voc j se familiarizou com o uso das funes de Grupo e estar selecionando grupo de dados. Note as colunas sinnimas usadas. 1. Encontrar o mnimo salrio dos empregados.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 77

SQL ORACLE

MINIMUM ------800

2. Encontrar o mnimo, mximo e a mdia dos salrios de todos os empregados.


MAX(SAL) --------5000 MIN(SAL) --------800 AVG(SAL) ---------2073.21429

3. Listar o mnimo e mximo salrio para os tipos de cargo.


JOB ------------ANALYST CLERK MANAGER PRESIDENT SALESMAN MAXIMUM -------------3000 1300 2975 5000 1600 MINIMUM -------------3000 1300 2975 5000 1600

4.Encontrar sada quantos gerentes sem listagem.


MANAGERS --------3

5. Encontrar a mdia salarial e mdia total remunerao para cada cargo. Lembre-se vendedores recebem comisso.
JOB ------------ANALYST CLERK MANAGER PRESIDENT SALESMAN MAXIMUM -------------3000 1037.5 2758.33333 5000 1400 MINIMUM -------------36000 12450 33100 60000 17350

6. Encontrar sada a diferena entre maior e menor salrio.


DIFFERENCE ---------4200

7. Encontrar todos os departamentos os quais tem mais que 3 empregados


DEPTNO -----20 30 COUNT(1) --------5 6

8. Cheque se todos os nmeros de empregados so nicos.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 78

SQL ORACLE

9.Liste o menor espaamento empregados trabalham para cada gerente. Exclua os grupos onde o mnimo salrio menor que 1000. Ordene pelo salrio.
MGR ----7788 7782 7839 7566 MIN(SAL) ---------1100 1300 2450 3000 5000

Extraindo Dados de Mais de uma Tabela


Ligaes (Joins) Uma ligao usada quando a pesquisa SQL requer dados de mais de uma tabela do Banco de Dados. Linhas em uma tabela devem ser ligadas a outras linhas de acordo com o valor comum existente na coluna correspondente. Existem dois tipos principais de condies de ligaes: Equi-join Non-equi-join

Equi-Join Na ordem para descobrir, manualmente, qual departamento vrios empregados esto, ns comparamos a coluna DEPTNO da tabela EMP com a mesmo valor de DEPTNO na tabela DEPT. O relacionamento entre a tabela EMP e a DEPT um equijoin, em que o valor da coluna DEPTNO seja igual para ambas as tabelas( o = operador de comparao usado). Uma condio de ligao especificada na clausula WHERE:
SELECT FROM WHERE coluna(s) tabela(s) condio de ligao

Para ligar as duas tabelas EMP e DEPT, faa: SELECT FROM WHERE
ENAME ---------CLARK MILLER KING SMITH SCOTT

ENAME, JOB, DNAME EMP, DEPT EMP.DEPTNO = DEPT.DEPTNO;


JOB ---------MANAGER CLERK PRESIDENT CLERK ANALYST DNAME ---------ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH

[Alexandre Costa Vieira SQL ORACLE]

Pgina 79

SQL ORACLE

JONES ADAMS FORD ALLEN BLAKE TURNER JAMES MARTIN WARD

MANAGER CLERK ANALYST SALESMAN MANAGER SALESMAN CLERK SALESMAN SALESMAN

RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES

Voc percebe que todos os empregados tem seu respectivo nome de departamento. As linhas da EMP so combinadas com a da DEPT e s retornaram se o valor do MP.DEPTNO e DEPT.DEPTNO forem iguais. Note que a condio de ligao especifica o nome da tabela antes do nome da coluna. Isso requerido quando o nome da coluna o mesmo em ambas as tabelas. Ele necessrio para o ORACLE saber qual a coluna que ele est se referindo. Esses requerimento ento aplicado para colunas as quais so ambguas nas clausulas SELECT ou ORDER BY. Para distinguir entre a coluna DEPTNO na EMP e uma na DEPT, faa:
SELECT FROM WHERE ORDER BY DEPT.DEPTNO, ENAME, JOB, DNAME EMP, DEPT EMP.DEPTNO = DEPT.DEPTNO DEPT.DEPTNO;

DEPTNO ---------10 10 10 20 20 20 20 20 30 30 30 30 30 30

ENAME ---------CLARK MILLER KING SMITH SCOTT JONES ADAMS FORD ALLEN BLAKE TURNER JAMES MARTIN WARD

JOB ---------MANAGER CLERK PRESIDENT CLERK ANALYST MANAGER CLERK ANALYST SALESMAN MANAGER SALESMAN CLERK SALESMAN SALESMAN

DNAME ---------ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES

Note que cada nmero de departamento da tabela DEPT est ligado com o nmero de departamento da EMP. Por exemplo, trs empregados trabalham no departamento 10 ACCOUNTING - s existem trs ocorrncias. Usando Tabelas com Sinnimos Pode ser tedioso repetir o nome inteiro de um tabela em uma coluna. Nomes temporrios (ou sinnimos) podem ser usados na clausula FROM. Estes nomes temporrios valem unicamente para a declarao de SELECT corrente. Tabelas sinnimas devem ento ser declaradas na clausula SELECT. Isso agiliza a pesquisa em que a declarao contm muitas informaes. Tabelas Sinnimas esto sendo usadas na seguinte declarao:

[Alexandre Costa Vieira SQL ORACLE]

Pgina 80

SQL ORACLE

SELECT FROM WHERE ORDER BY

E.ENAME, D.DEPTNO, D.DNAME EMP E, DEPT D E.DEPTNO = D.DEPTNO D.DEPTNO;

Tabelas Sinnimas podem ter 30 caracteres de largura, mas os nomes curtos so melhores. Se um sinnimo for usado para uma determinada tabela na clausula FROM ento todas as declaraes do SELECT deve usar esse sinnimo. Nota: Quando a condio de ligao invlida ou omitida completamente o resultado um PRODUTO, e todas combinaes de linhas sero mostradas. Um produto cuida para gerar um grande nmero de linhas, e o resultado raramente usado. Voc sempre deve incluir a condio de ligao no WHERE a menos que voc no tenha nenhuma ligao entre as tabelas envolvidas Nom-Equi-Join O relacionamento entre as tabelas EMP e SALGRADE um nom-equi-join, em que a coluna na EMP corresponde direto a uma coluna na SALGRADE. O relacionamento obtido usando um outro operador que o igual(=). Para avaliar um grau do salrio de um empregado necessrio que o salrio esteja entre o menor e maior faixa de salrio. O operador BETWEEN usado para construir a condio, faa:
SELECT FROM WHERE
ENAME ---------SMITH ADAMS JAMES WARD MARTIN MILLER ALLEN TURNER JONES BLAKE CLARK SCOTT FORD KING

E.ENAME, E.SAL, S.GRADE EMP E, SALGRADE S E.SAL BETWEEN S.LOSAL AND S.HISAL;
SAL ---------800.00 1,100.00 950.00 1,250.00 1,250.00 1,300.00 1,600.00 1,500.00 2,975.00 2,850.00 2,450.00 3,000.00 3,000.00 5,000.00 GRADE ---------1 1 1 2 2 2 3 3 4 4 4 4 4 5

Outros operadores como <= e >= podem ser usados. Lembre-se de especificar o menor valor primeiro, e o maior no final quando usar BETWEEN. Outra vez as tabelas sinnimas foram usadas, no porque pode haver colunas ambguas, mas por causa da performance.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 81

SQL ORACLE

Regras para Ligaes de Tabelas. Na ordem para trs tabelas necessrio no mnimo duas condies de ligaes.. Para quatro necessrio no mnimo trs condies de ligaes. Uma regra simples: O nmero de tabelas menos um igual ao nmero de condies de ligaes. Essa regra no se aplica se sua tabela tiver uma Primary Key que contm mais de uma coluna. Resumo da Sintaxe
SELECT [DISTINCT] coluna(s), expr, alias... FROM tabelas [alias]... WHERE [condio de ligao]... AND [condio de linha]... OR [outras condies de linhas].. GROUP BY [expr/coluna] HAVING [grupo de condies] ORDER BY [expr/coluna] [DESC/ASC]

Nota: voc pode especificar condies de ligaes e outras condies juntas Exerccio 5 - Simples Ligaes (Join) Esses exerccios so feitos para praticar a experincia em extrair dados de mais de uma tabela, e tambm inclui tpicos que foram vistos anteriormente. 1. Mostra todos os nomes dos empregados e o nome de seus departamentos em ordem de nome de departamento.
ENAME ---------CLARK MILLER KING SMITH SCOTT JONES ADAMS FORD ALLEN BLAKE TURNER JAMES MARTIN WARD DNAME ---------ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES

2. Mostrar o nome de todos os empregados, nome e nmero do departamento:

[Alexandre Costa Vieira SQL ORACLE]

Pgina 82

SQL ORACLE

ENAME ---------CLARK MILLER KING SMITH SCOTT JONES ADAMS FORD ALLEN BLAKE TURNER JAMES MARTIN WARD

DEPTNO ---------10 10 10 20 20 20 20 20 30 30 30 30 30 30

DNAME ---------ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES

3. Mostrar o nome, localizao e departamento dos empregados que tem o salrio maior que 1500 por ms.
ENAME ---------CLARK KING JONES FORD SCOTT ALLEN BLAKE LOCATION ---------NEW YORK NEW YORK DALLAS DALLAS DALLAS CHICAGO CHICAGO DNAME ---------ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH SALES SALES

4. Proceder uma lista mostra o salrio e grau do salrio do empregado:


ENAME ---------SMITH ADAMS JAMES WARD MARTIN MILLER ALLEN TURNER JONES BLAKE CLARK SCOTT FORD KING JOB ---------CLERK CLERK CLERK SALESMAN SALESMAN CLERK SALESMAN SALESMAN MANAGER MANAGER MANAGER ANALYST ANALYST PRESIDENT SAL ---------800.00 1,100.00 950.00 1,250.00 1,250.00 1,300.00 1,600.00 1,500.00 2,975.00 2,850.00 2,450.00 3,000.00 3,000.00 5,000.00 GRADE ---------1 1 1 2 2 2 3 3 4 4 4 4 4 5

5. Mostrar somente os empregados de grau 3:


ENAME ---------ALLEN TURNER JOB ---------SALESMAN SALESMAN SAL ---------1,600.00 1,500.00 GRADE ---------3 3

6. Mostrar todos os empregados de Dallas


ENAME ---------SMITH JONES BLAKE SCOTT ADAMS SAL ---------800.00 2,975.00 2,850.00 3,000.00 1,100.00 LOCATION ---------DALLAS DALLAS DALLAS DALLAS DALLAS

[Alexandre Costa Vieira SQL ORACLE]

Pgina 83

SQL ORACLE

7.Listar nome, cargo, salrio, grau e nome do departamento para todo os empregados da companhia exceto os escriturrios. Ordene pelo salrio, mostrando o maior primeiro.
ENAME -----------KING FORD SCOTT JONES BLAKE CLARK ALLEN TURNER MARTIN WARD JOB -----------PRESIDENT ANALYST ANALYST MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN SALESMAN SAL -----------5,000.00 3,000.00 3,000.00 2,975.00 2,850.00 2,450.00 1,600.00 1,500.00 1,250.00 1,250.00 GRADE -----------5 4 4 4 4 4 3 3 2 2 DNAME -----------ACCOUNTING RESEARCH RESEARCH RESEARCH SALES ACCOUNTING SALES SALES SALES SALES

8. Listar o seguinte detalhes por empregado quem ganha $36000 em um ano ou quem so escriturrios.
ENAME ---------FORD SCOTT MILLER JAMES ADAMS SMITH JOB ---------ANALYST ANALYST CLERK CLERK CLERK CLERK ANNUAL_SAL ---------36000 36000 15600 11400 13200 9600 DEPTNO ---------20 20 10 30 20 20 DNAME ---------RESEARCH RESEARCH ACCOUNTING SALES RESEARCH RESEARCH GRADE ---------4 4 2 1 1 1

Outros Mtodos de Ligao


Ligaes Externas (Outher Join) Se uma linha no satisfazer a condio de ligao, a linha no aparecer no resultado da pesquisa. De fato no equi-join da EMP e DEPT, o departamento 40 no aparece. Isso porque no existe empregados no departamento 40. Ligao Externa
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

DEPTNO

DNAME

LOC

[Alexandre Costa Vieira SQL ORACLE]

Pgina 84

SQL ORACLE

40

OPERATIONS

BOSTON

..No existe nenhum empregado no departamento 40, mas ele pode ser ligado com uma linha nula... O que falta das linhas pode ser retornado se uma ligao externa (outher join) usada na condio de ligao. O operador um sinal de mais entre parnteses (+), e colocado do lado da ligao a qual deficiente a informao. O operador tem o efeito de criar uma ou mais linha nula, para que uma ou mais linha que no tenha ligao na tabela possa ser ligada. Uma ou mais linha nula ser criada para todas as ligaes que no possui resultado.
SELECT FROM WHERE AND E.ENAME, D.DEPTNO, D.DNAME EMP E, DEPT D E.DEPTNO (+) = D.DEPTNO D.DEPTNO IN (30,40) DEPTNO -------------30 30 30 30 30 30 40 DNAME ----------------SALES SALES SALES SALES SALES SALES OPERATIONS

ENAME ---------------ALLEN BLAKE TURNER JAMES MARTIN WARD

O operador de ligao externa pode unicamente aparecer sobre um dos lados da expresso, do lado que tem informao faltando. Ele retorna aquelas linhas de uma tabela que no diretamente se iguala com a outra tabela. Ligando uma Tabela com Ela mesma possvel usando nomes de tabelas (sinnimas) para ligar uma tabela com ela mesma, com se ela fosse duas tabelas separadas. Isso permite linhas de uma tabela ligar com linhas na mesma tabela. A seguinte pesquisa mostra todos os empregados que ganham menos que seu gerente:
SELECT E.ENAME EMP_NAME, E.SAL EMP_SAL, M.ENAME MGR_GSAL FROM EMP E, EMP M WHERE E.MGR = M.EMPNO AND E.SAL < MSAL; EMP_NAME -------------ALLEN WARD MARTIN EMP_SAL --------------1600 1250 1250 MGR_NAME ------------BLAKE BLAKE BLAKE MGR_SAL -----------2850 2850 2850 Pgina 85

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

TURNER JAMES MILLER ADAMS JONES BLAKE CLARK SMITH

1500 950 1300 1100 2975 2850 2450 800

BLAKE BLAKE CLARK SCOTT KING KING KING FORD

2850 2850 2450 3000 5000 5000 5000 3000

Note que a clausula FROM refere-se para EMP duas vezes, e portanto EMP tem que ter um sinnimo para cada caso - E e M. Atribuir sinnimo para um tabela significa por exemplo E significa empregados e M significa gerentes. Quando um empregado gerente o nmero de seu gerente o seu mesmo. Operadores de Conjunto Durante a introduo, o conceito de Operadores de Conjunto foram discutidos. Assim distante o curso tem falado sobre restries, ligaes, projees e produtos. INTERSECT, UNION e MINUS so falados aqui. UNION, INTERSECT e MINUS so geralmente usados para diferenciar tabelas. Eles combinam resultados de duas ou mais declaraes de SELECT em um resultado. A pesquisa deve consistir de duas ou mais declaraes do SQL ligadas por um ou mais operador de conjunto. Operadores de conjunto so geralmente chamados de Ligaes Verticais, porque a ligao no de acordo para linhas entre tabelas, mas colunas. Nos seguintes trs exemplos, as pesquisas so as mesmas, mas o operador diferente em cada caso produzido um resultado de pesquisa diferente. UNION Para retornar as linhas distintas de cada uma das pesquisas, faa:
SELECT FROM WHERE UNION SELECT FROM WHERE JOB EMP DEPTNO = 10 JOB EMP DEPTNO = 30;

JOB ---------CLERK MANAGER PRESIDENT SALESMAN

Nota: UNION ALL retorna todas as linhas das duas pesquisas independente se houver mais de uma linha igual

[Alexandre Costa Vieira SQL ORACLE]

Pgina 86

SQL ORACLE

INTERSECT Para retornar somente as linhas que esto em ambas as pesquisas, faa:
SELECT JOB FROM EMP WHERE DEPTNO = 10 INTERSECT SELECT JOB FROM EMP WHERE DEPTNO = 30; JOB ---------CLERK MANAGER

MINUS Para retornar todas as linhas que tem na primeira pesquisa que no tem na segunda, faa:
SELECT FROM WHERE MINUS SELECT FROM WHERE JOB EMP DEPTNO = 10 JOB EMP DEPTNO = 30;

JOB ---------PRESIDENT

possvel construir pesquisas com vrios operadores de conjuntos. Se vrios operadores de conjuntos forem usados, a ordem de execuo para declarao SQL de cima para baixo. Parnteses podem ser usados para produzir uma alternativa ordem de execuo. ORDER BY ORDER BY tem que ser nico em uma pesquisa que emprega operadores de conjunto. Se usado, o ORDER BY deve ser colocado no final da pesquisa. Ento, porque voc deve selecionar diferentes colunas em cada SELECT voc no pode usar o nome das colunas na clausula ORDER BY. Entretanto as colunas no ORDER BY devem ser referidas pelo sua relativa posio na lista do SELECT.
SELECT EMPNO, ENAME, SAL FROM EMP UNION

[Alexandre Costa Vieira SQL ORACLE]

Pgina 87

SQL ORACLE

SELECT ID, NAME, SALARY FROM EMP_HISTORY ORDER BY 2;

Note que no ORDER BY um numeral (2) usado para representar a posio do ENAME coluna da lista do SELECT. Esse significa que as linhas sero retornadas em ordem ascendente nome do empregado. Regras Quando Usar Operadores de Conjuntos. 1. Declaraes do SELECT devem selecionar o mesmo nmero de colunas. 2. As colunas correspondentes devem ser do mesmo tipo. 3. Linhas duplicadas sero automaticamente eliminadas.,(DISTINCT no pode ser usado). 4. O nome das colunas da primeira pesquisa ser os que aparecero no resultado. 5. A clausula ORDER BY aparecer no final da declarao. 6. Na clausula ORDER BY ser colocada apenas as posies das colunas 7. Operadores de Conjuntos podem ser usados em sub-pesquisas 8. A declarao das pesquisas sero executadas de cima para baixo. 9. Vrios operadores de conjuntos podem ser usados juntos com parnteses para alterar a seqncia de execuo.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 88

SQL ORACLE

Exerccio 6 - Outros Mtodos de Ligaes Esses exerccios tem a funo para voc ter a oportunidade de descobrir mtodos alternativos de ligaes e algumas experincia com operadores de conjuntos. 1. Mostrar a seguinte informao
EMPNO ----7782 7839 7934 7876 7902 7566 7788 7369 7499 7698 7900 7654 7844 7521 ENAME ---------CLARK KING MILLER ADAMS FORD JONES SCOTT SMITH ALLEN BLAKE JAMES MARTIN TURNER WARD DNAME ---------ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES LOC ---------NEW YORK NEW YORK NEW YORK DALLAS DALLAS DALLAS DALLAS DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO

2. Mostrar os departamentos que no tem empregados


DEPTNO -------------40 DNAME ----------------OPERATIONS

3. Listar todos os empregados com seus nomes e nmeros adiante seus gerentes com nome e nmero:
EMPNO ----7782 7934 7876 7902 7566 7788 7369 7499 7698 7900 7654 7844 7521 ENAME ---------CLARK MILLER ADAMS FORD JONES SCOTT SMITH ALLEN BLAKE JAMES MARTIN TURNER WARD MGRNO ----7839 7782 7788 7566 7839 7566 7902 7698 7839 7698 7698 7698 7698 MGR_NAMR ---------KING CLARK SCOTT JONES KING JONES FORD BLAKE KING BLAKE BLAKE BLAKE BLAKE

4. Modifique a soluo da questo 2 para mostrar KING que no tem gerente:


EMPNO ----7839 7782 7934 7876 7902 7566 7788 7369 7499 ENAME ---------KING CLARK MILLER ADAMS FORD JONES SCOTT SMITH ALLEN MGRNO ----7839 7782 7788 7566 7839 7566 7902 7698 MGR_NAMR ---------KING CLARK SCOTT JONES KING JONES FORD BLAKE

[Alexandre Costa Vieira SQL ORACLE]

Pgina 89

SQL ORACLE

7698 7900 7654 7844 7521

BLAKE JAMES MARTIN TURNER WARD

7839 7698 7698 7698 7698

KING BLAKE BLAKE BLAKE BLAKE

5.Encontre o cargo que era preenchido no primeiro semestre de 1983, e o mesmo cargo que era preenchido durante o mesmo perodo em 1984.
JOB ---------CLERK

6. Encontre todos os empregados que ligaram-se a companhia antes de seu gerente.


ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK TURNER MILLER HIREDATE --------13-JUN-83 15-AUG-83 26-MAR-84 31-OCT-83 05-DEC-83 11-JUN-84 14-MAY-84 04-JUN-84 21-NOV-83 MGR ---------FORD BLAKE BLAKE KING BLAKE KING KING BLAKE CLARK HIREDATE --------05-DEC-83 11-JUN-84 11-JUN-84 09-JUL-84 11-JUN-84 09-JUL-84 09-JUL-84 11-JUN-84 14-MAY-84

7. Encontre outra mtodo de pesquisa para questo 2:


DEPTNO -------------40 DNAME ----------------OPERATIONS

Sub-pesquisas (Subqueries)
Nessa Unidade ns devemos falar sobre mais avanados traos da declarao SELECT, isto : pesquisas contendo na clausula WHERE ou HAVING de outra declarao SQL

Aninhamento de Sub-pesquisas. Uma sub-pesquisa uma declarao SELECT que aninhada com outra declarao SELECT e a qual retorna resultados intermedirios. Por exemplo:
SELECT coluna1, coluna2, ... FROM tabela WHERE coluna = (SELECT coluna [Alexandre Costa Vieira SQL ORACLE] Pgina 90

SQL ORACLE

FROM tabela WHERE condio)

A sub-pesquisa geralmente referida como SUB-SELECT ou SELECT interno; ele geralmente executa primeiro e a sada usada para completar a condio da pesquisa principal ou outra pesquisa. Usando sub-pesquisas permite um desenvolvimento para construes de potentes comandos de sada fceis. O aninhamento de sub-pesquisas pode ser usado quando voc precisa selecionar linhas de uma tabela com uma condio que depende de dados na mesma tabela. Sub-pesquisas de Linha nica Para encontrar o empregado que ganha o mnimo salrio na companhia (o mnimo salrio uma quantidade desconhecida), dois passos devem ser seguidos: 1. Encontrar o salrio mnimo:
SELECT MIN(SAL) FROM EMP; MIN(SAL) -------800

2. Encontrar o empregado que ganha o salrio mnimo:


SELECT ENAME, JOB, SAL FROM EMP WHERE SAL = (menor salrio o qual desconhecido)

Ns podemos combinar os dois comandos como uma sub-pesquisa aninhada:


SELECT ENAME, JOB, SAL FROM EMP WHERE SAL = SELECT MIN(SAL) FROM EMP; ENAME --------------SMITH JOB --------------CLERK SAL -----------800

Como so processadas as Sub-pesquisas Aninhadas? Uma declarao SELECT pode ser considerada como uma pesquisa em bloco. O exemplo acima consiste de duas pesquisas em bloco - a principal pesquisa e a pesquisa interna. A interna declarao SELECT executada primeiro, produzindo um resultado : 800. A principal pesquisa em bloco est ento processando e usa o valor retornado pela pesquisa interna para completar a condio procurada. Na essncia, a principal pesquisa finaliza-se olhando como isso:
SELECT ENAME, SAL, DEPTNO [Alexandre Costa Vieira SQL ORACLE] Pgina 91

SQL ORACLE

FROM EMP WHERE SAL = 800;

No exemplo acima, o 800 um valor nico. A sub-pesquisa que retorna o valor 800 chamada de sub-pesquisa de linha nica. Quando uma sub-pesquisa retorna uma nica linha: uma linha ou operador lgico deve ser usado. Por exemplo: =, <, >, <=, etc. Para encontrar todos os empregados que tem o mesmo cargo como BLAKE ns fazemos:
SELECT ENAME, JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'BLAKE'); ENAME --------------JONES BLAKE CLARK JOB -----------------MANAGER MANAGER MANAGER

A pesquisa interna retorna o cargo de BLAKE o qual usado na condio WHERE da pesquisa principal. Sub-pesquisas que Retorna mais de Uma Linha A seguinte pesquisa atende para encontrar os empregados que ganham o menor salrio nos departamentos.
SELECT ENAME, SAL, DEPTNO FROM EMP WHERE SAL IN (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO); ENAME ------------------SMITH JAMES MILLER SAL -------------------800 950 1300 DEPTNO --------------20 30 10

Note que a pesquisa interna tem a clausula GROUP BY. Isso significa que ele pode retornar mais que um valor. Ns precisamos para usar mltiplas linhas de um operador de comparao. Neste caso o operador IN deve ser usado porque especfica uma lista de valores. O resultado obtido no mostra o departamento em que o qualificado empregado trabalha. No entanto, porque ns estamos comparando unicamente o valor do salrio, a pesquisa interna pode retornar um valor simples porque ela combina o menor salrio para um departamento, no necessariamente um empregado para cada departamento. A pesquisa deve ser rescrita em ordem para possuir a combinao de salrios de empregados e o mero do departamento com os salrios mnimos e os nmeros de departamentos:
[Alexandre Costa Vieira SQL ORACLE] Pgina 92

SQL ORACLE

Comparando mais de um valor A seguinte pesquisa encontrar aqueles empregados que ganham o menor salrio no seu respectivo departamento:
SELECT ENAME, SAL, DEPTNO FROM EMP WHERE (SAL,DEPTNO) IN (SELECT MIN(SAL), DEPTNO FROM EMP GROUP BY DEPTNO); ENAME ------------------SMITH JAMES MILLER SAL -------------------800 950 1300 DEPTNO --------------20 30 10

A pesquisa acima compara uma parte da coluna. Note que as colunas da esquerda da condio procurada esto entre parnteses e que as colunas esto separadas com uma vrgula. Colunas listadas na clausula SELECT da sub-pesquisa deve estar na mesma ordem das colunas listadas na clausula WHERE da outra pesquisa e o mesmo tipo de colunas. Por exemplo:
....WHERE (numcoluna, charcoluna) = (SELECT datacoluna, numcoluna, charcoluna...

ilegal. Erros Encontrados Quando uma sub-pesquisa retorna mais que uma linha e um operador de linha nica usado, SQL*Plus mostra o seguinte mensagem de erro:
SELECT ENAME, SAL, DEPTNO FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO); ERROR: ORA-1427: single-row subquery returns more than one row (Sub-pesquisa de linha nica retornou mais de uma linha)

Se a pesquisa interna no retornar linhas, voc tem o erro:


SELECT ENAME, JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'SMYTHE'); ERROR: ORA-1426: single-row subquery returns no rows (Sub-pesquisa de linha nica no retornou nenhuma linha)

[Alexandre Costa Vieira SQL ORACLE]

Pgina 93

SQL ORACLE

Operadores ANY ou ALL Os operadores ANY ou ALL devem ser usados para sub-pesquisas que retornam mais de uma linha. Eles so usados na clausula WHERE ou HAVING em conjunto com os operadores lgicos. (=,<>, <, >, >=, <=). ANY compara um valor para cada valor retornado em uma sub-pesquisa. Para mostrar os empregados que ganham mais que o menor salrio no departamento 30, faa:
SELECT ENAME, SAL, JOB, DEPTNO FROM EMP WHERE SAL>ANY (SELECT DISTINCT SAL FROM EMP WHERE DEPTNO = 30) ORDER BY SAL DESC;
ENAME ---------KING SCOTT FORD JONES BLAKE CLARK ALLEN TURNER MILLER WARD MARTIN ADAMS SAL ---------5000 3000 3000 2975 2850 2450 1600 1500 1300 1250 1250 1100 JOB ---------PRESIDENT ANALYST ANALYST MANAGER MANAGER MANAGER SALESMAN SALESMAN CLERK SALESMAN SALESMAN CLERK DEPTNO -----10 20 20 20 30 10 30 30 10 30 30 20

O menor salrio do departamento 30 950(James). A principal pesquisa tem que retornar os empregados que ganham o salrio maior que o menor salrio no departamento 30. <ANY equivalente ao IN. Quando usamos ANY, a palavra chave DISTINCT usada para prevenir a seleo de linhas ocupadas. ALL compara um valor todos os valores retornados em uma sub-pesquisa. A seguinte pesquisa encontra os empregados que ganham mais que todos os empregados no departamento 30.
SELECT ENAME, SAL, JOB, DEPTNO FROM EMP WHERE SAL>ALL (SELECT DISTINCT SAL FROM EMP WHERE DEPTNO = 30) ORDER BY SAL DESC;
ENAME ---------KING SCOTT FORD JONES SAL ---------5000 3000 3000 2975 JOB ---------PRESIDENT ANALYST ANALYST MANAGER DEPTNO -----10 20 20 20

[Alexandre Costa Vieira SQL ORACLE]

Pgina 94

SQL ORACLE

O maior salrio no departamento 30 2850 (Blake), a pesquisa tem que retornar aqueles empregados que ganham mais que 2850. Existe salrio maior que o maior do departamento 30. O operador NOT podem ser usado com IN, ANY ou ALL. Clausula HAVING com Sub-pesquisas aninhadas. Sub-pesquisa aninhadas ento podem ser usadas na clausula HAVING (Lembre-se que WHERE refere-se para linha nica e HAVING a grupos de linhas especificadas na clausula GROUP BY. Por exemplo, para mostrar os departamentos que tenham a mdia salarial maior que a do departamento 30, faa:
SELECT DEPTNO, AVG(SAL) FROM EMP HAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 30) GROUP BY DEPTNO; DEPTNO ------------10 20 AVG(SAL) ------------------2916.66667 2175

Para construir uma pesquisa que encontre o cargo com maior mdia salarial, faa:
SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB HAVING AVG(SAL) = (SELECT MAX(AVG(SAL)) FROM EMP GROUP BY JOB); JOB ------------PRESIDENT AVG(SAL) ------------5000

A primeira pesquisa interna encontra as mdias salariais de cada diferente grupo de cargo, e a funo MAX seleciona a maior mdia salarial. Aquele valor (5000) usada na clausula HAVING. A clausula GROUP BY na pesquisa principal necessria porque a declarao SELECT possui uma coluna que no um item de grupo. Ordenando Dados com Sub-pesquisas Voc no deve ter uma clausula ORDER BY na sub-pesquisa. A regra restante que voc pode ter unicamente uma clausula ORDER BY para uma declarao SELECT e, se especificar, deve ser a ltima clausula no comando SELECT.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 95

SQL ORACLE

Sub-pesquisas Aninhadas Sub-pesquisas devem ser aninhadas (usadas com outras sub-pesquisas): Mostrar o nome, cargo e admisso para os empregados que o salrio maior que o maior salrio no departamento SALES.
SELECT ENAME, JOB, HIREDATE, SAL FROM EMP WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES'));
ENAME ---------JONES SCOTT KING FORD JOB ---------MANAGER ANALYST PRESIDENT ANALYST HIREDATE --------31-OCT-83 05-MAR-84 09-JUL-84 05-DEC-83 SAL ---------2,975.00 3,000.00 5,000.00 3,000.00

Limites de Alinhamento No existe limite para nveis de aninhamento para sub-pesquisas. Diretriz A pesquisa interna precisa ser includa entre parnteses. e precisa estar do lado direito da condio. Uma sub-pesquisa no deve ter uma clausula ORDER BY. As vrias colunas na lista do SELECT da pesquisa interna deve ser na mesma ordem como as colunas aparecem na clausula de condio da pesquisa principal. Sub-pesquisas so sempre executadas da mais profunda at a menos profunda, a menos que sejam correlatas. Operadores Lgicos e SQL devem ser usados como ANY e ALL. Sub-pesquisas podem: Retornar uma ou mais linhas. Retornar uma ou mais colunas Usar o GROUP BY e funes de grupo Ser usada em vrios predicados AND ou OR da mesma pesquisa externa Ligar Tabelas Retirar de diferentes tabelas que a externa Aparecer em declaraes de SELECT, UPDATE, DELETE, INSERT, CREATE TABLE. Correlacionar com uma pesquisa externa. Usar operadores de Conjunto.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 96

SQL ORACLE

Sub-pesquisas Correlatas Uma Sub-pesquisa Correlata uma sub-pesquisa aninhada que executada uma vez para cada linha candidata considerada pela pesquisa principal e que e na execuo usa um valor de coluna da pesquisa externa. Isso origina a sub-pesquisa correlata para ser processada em uma diferente forma normal de Aninhamento de Sub-pesquisas. Uma Sub-pesquisa Correlata identificada pelo uso de colunas da pesquisa externa em sua condio. Com uma Sub-pesquisa aninhada normal, a seleo interna executada primeiro e ela executa uma vez, retornando valores para serem usados na pesquisa principal. Uma Sub-pesquisa Correlata, um outro modo, executa uma vez para cada linha candidata considerada na pesquisa externa. A pesquisa interna dirigida pela externa. Passos para executar Sub-pesquisas Correlatas. 1. Pegar linhas candidatas (trazer na pesquisa externa) 2. Executar pesquisa interna usando valores da linha candidata. 3. Usar valores retornados da pesquisa interna para qualificar ou desqualificar candidatas. 4. Repetir at no haver mais linhas candidatas. Embora as Sub-pesquisas correlatas executam repetitivamente, uma vez para cada linha da pesquisa principal, no existem sugestes de que elas so menos eficiente que sub-pesquisas no correlatas. Ns podemos usar Sub-pesquisas Correlatas para encontrar empregados que ganham um salrio maior que a mdia salarial para seus departamentos:
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP E WHERE SAL > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = E.DEPTNO) ORDER BY DEPTNO;
EMPNO ----7839 7566 7788 7902 7499 7698 ENAME ---------KING JONES SCOTT FORD ALLEN BLAKE SAL ---------5000 2975 3000 3000 1600 2850 DEPTNO -----10 20 20 20 30 30

Ns podemos ver imediatamente que esse uma pesquisa correlata ento ns temos de usar uma coluna do SELECT externo no WHERE do SELECT interno. Note que o sinnimo necessrio para evitar ambigidade nos nomes das colunas. Vamos ns analisar o exemplo acima usando a tabela EMP: A Pesquisa Principal: 1. Seleciona primeiro a linha candidata - Smith no departamento 20 ganhando 800. 2. EMP da clausula FROM tem um sinnimo E o qual qualifica a coluna DEPTNO referenciada no WHERE da pesquisa interna.
[Alexandre Costa Vieira SQL ORACLE] Pgina 97

SQL ORACLE

3. Clausula WHERE compara 800 como valor retornado pela pesquisa interna. A Pesquisa Interna 4. Calculo AVG(SAL) para empregados do departamento. 5. O valor da coluna E.DEPTNO o valor passado pela pesquisa externa. 6. AVG(SAL) para Smith do departamento 20 2175. 7. A linha candidata no encontra a condio, por isso descartada. 8. Repetir o passo 1 para cada linha candidata. A seleo das linhas candidatas continua com aquelas que encontrar as condies que aparecem no resultado da pesquisa. Lembre-se uma Sub-pesquisa Correlata originada por uma coluna de uma tabela ou tabela sinnima na clausula WHERE que refere-se ao valor da coluna em cada linha candidata da seleo externa. Ento Sub-pesquisa Correlata executa repetitivamente para cada linha candidata da pesquisa principal. O comando UPDATE pode conter Sub-pesquisas Correlatas.
UPDATE EMP E SET (SAL,COMM) = (SELECT AVG(SAL)*1.1, AVG(COMM) FROM EMP WHERE DEPTNO = E.DEPTNO) WHERE HIREDATE = '11-JUN-85';

O comando UPDATE ser estudado mais adiante. Operadores Quando voc est aninhando declaraes do SELECT os operadores lgicos so todos validos como tambm ANY e ALL. Nas demais o operador EXISTS precisa ser usado. Operador EXISTS O operador EXISTS freqentemente usado com Sub-pesquisas correlatas. Ele testa quando um valor existe. (NOT EXISTS garante que no existe). Se o valor existir ser retornado Verdadeiro, se no existir ser retornado Falso. Para encontrar os empregados que tem no mnimo uma pessoa subordinada a ele, faa:
SELECT EMPNO, ENAME, JOB, DEPTNO FROM EMP E WHERE EXISTS (SELECT EMPNO FROM EMP WHERE EMP.MGR = E.EMPNO) ORDER BY EMPNO;
EMPNO ----7566 ENAME ---------JONES JOB ---------MANAGER DEPTNO -----20

[Alexandre Costa Vieira SQL ORACLE]

Pgina 98

SQL ORACLE

7698 7782 7788 7839 7902

BLAKE CLARK SCOTT KING FORD

MANAGER MANAGER ANALYST PRESIDENT ANALYST

30 10 20 10 20

Encontrar os empregados que o departamento no o da tabela DEPT:


SELECT, ENAME, DEPTNO FROM EMP WHERE NOT EXISTS (SELECT DEPTNO FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO); no records selected

Outro caminho para encontrar o departamento que no tem nenhum empregado :


SELECT DEPTNO, DNAME FROM DEPT D WHERE NOT EXISTS (SELECT 'X' FROM EMP E WHERE E.DEPTNO = D.DEPTNO); DEPTNO ------------40 DNAME -------------OPERATIONS

Note que o SELECT interno no precisa retornar um valor especfico, unicamente um literal para ser selecionado. Por que Usar uma Sub-pesquisa Correlata? A Sub-pesquisa Correlata um caminho de ler todas as linhas na tabela, e comparando os valores em cada linha retornada. Ela usada quando uma sub-pesquisa precisa retornar um diferente resultado ou conjuntos de resultados para cada linha candidata considerada na pesquisa principal. Em outras palavras, uma sub-pesquisa correlata usada para responder questes que as respostas dependem de valores em cada linha da pesquisa parente. O SELECT interno normalmente executado uma vez para cada linha candidata.
Consideraes de Eficincia.

Ns temos agora examinadas dois tipos de sub-pesquisas. Ela importante referncia que a sub-pesquisa correlata ( com EXISTS) pode ser o mais eficiente caminho de agilizar algumas pesquisas. Performance depende do uso dos ndices, o nmero de linhas retornadas pela pesquisa, o tamanho da tabela e se tabelas temporrias so requeridas para avaliar resultados temporrios. As tabelas temporrias geradas pelo ORACLE no so indexadas, e essa pode levar para o degradamento na performance para sub-pesquisas usando IN, ANY e ALL.
[Alexandre Costa Vieira SQL ORACLE] Pgina 99

SQL ORACLE

Exerccio 7 - Sub-pesquisas Esses exerccios permite a voc a escrever complexas pesquisas usando selees aninhadas e selees correlatas. 1. Encontrar os empregados que ganham o maior salrio em cada cargo e ordenar o salrio da forma descendente.
JOB ---------PRESIDENT ANALYST ANALYST MANAGER SALESMAN CLERK ENAME ---------KING SCOTT FORD JONES ALLEN MILLER SAL ---------5,000.00 3,000.00 3,000.00 2,975.00 1,600.00 1,300.00

2. Encontrar os empregados que ganham o mnimo salrio para seu cargo. Mostrar o resultado em ordem ascendente de salrio.
ENAME ---------SMITH WARD MARTIN CLARK SCOTT FORD KING JOB ---------CLERK SALESMAN SALESMAN MANAGER ANALYST ANALYST PRESIDENT SAL ---------800.00 1,250.00 1,250.00 2,450.00 3,000.00 3,000.00 5,000.00

3. Encontrar o mais recente admitido empregado em cada departamento. Ordenado por admisso.
DEPTNO -----20 10 30 ENAME ---------ADAMS KING JAMES HIREDATE --------04-JUN-84 09-JUL-84 23-JUL-84

4. Mostre os seguintes detalhes para qualquer empregado que ganhe um salrio maior que a mdia para seu departamento. Ordenar pelo nmero de departamento.
ENAME ---------KING JONES SCOTT FORD ALLEN BLAKE SAL ---------5,000.00 2,975.00 3,000.00 3,000.00 1,600.00 2,850.00 DEPTNO -----10 20 20 20 30 30

5. Lista todos os departamentos onde no existem empregados. (Usando dessa vez um sub-pesquisa).
DEPTNO DNAME Pgina 100

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

--------------40

----------------OPERATIONS

6. Mostrar as seguintes informaes para o departamento com o maior remunerao anual faturada.
DEPTNO --------------20 COMPENSATION ----------------130500

7. Quem so os trs maiores salrios da companhia? Mostrar nome e salrio.


ENAME ---------SCOTT KING FORD SAL ---------3,000.00 5,000.00 3,000.00

8. Em qual ano de maior ligaes de pessoas a companhia? Mostrar o ano e nmero de empregados.
YEAR ---1984 NUMBER_OF_EMPS -------------8

9. Modificar a questo 4 para ento mostrar a mdia salarial figurada para o departamento.
ENAME ---------KING JONES SCOTT FORD ALLEN BLAKE SAL ---------5,000.00 2,975.00 3,000.00 3,000.00 1,600.00 2,850.00 DEPTNO -----10 20 20 20 30 30 DEPAVG ---------1566.66667 1566.66667 2175 2175 2175 2916.66667

10. Escrever uma pesquisa para mostrar um * na linha do mais recente empregado admitido. Mostrar o nome, admisso e mostrar um * no (MAXDATE).
ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER HIREDATE --------13-JUN-83 15-AUG-83 26-MAR-84 31-OCT-83 05-DEC-83 11-JUN-84 14-MAY-84 05-MAR-84 09-JUL-84 04-JUN-84 04-JUN-84 23-JUL-84 05-DEC-83 21-NOV-83 MAXDATE -------

[Alexandre Costa Vieira SQL ORACLE]

Pgina 101

SQL ORACLE

Linguagem de Manipulao dos Dados


Essa Unidade explica como fazer modificaes para linhas na tabela, adicionar linhas ou apag-las. A concepo de transao introduzida. Consistncia de leitura tambm falada. INSERT O comando INSERT usada para adicionar linhas em uma tabela. A sintaxe do comando INSERT :
INSERT INTO nome_tabela (coluna, coluna, ...) VALUES (valor,valor,...);

Ele possibilita inserir novas linhas com valores em cada coluna. Ele recomenda que a colunas listadas sejam sempre especificadas. Se alista no especificada seu programa ter que ser modificado quando a definio da tabela for alterada. Para inserir um novo departamento, faa:
INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (50,'MARKETING','SAN JOSE');

Note que esse comando adiciona unicamente uma linha de uma vez na tabela. Para entrar com um novo departamento omitindo o nome, a coluna deve ser omitida.
INSERT INTO DEPT (DEPTNO,LOC) VALUES (50,'SAN JOSE');

Alternativamente se o nome de departamento desconhecido, um NULL pode ser especificado.


INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (50,NULL,'SAN JOSE');

Valores ALFANUMRICOS e DATAS devem ser includos entre aspas simples (). Usando Variveis Substituveis para linhas inseridas. Como previamente mencionamos, INSERT uma linha por comando. Usando Variveis Substituveis ele pode ser reutilizado:
INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (&D_NUMBER,'&D_NAME','&LOCATION');

Quando o comando executado, os valores so solicitados todas as vezes.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 102

SQL ORACLE

Inserindo Datas e informaes de Horas. Quando inserimos um valor data, o formato DD-MON-YY regularmente usado. Com esse formato o sculo padro o 19. A data contm informaes de hora, a qual se no especificada o padro meia noite.(00:00:00). Se a data precisar ser entrada em outro sculo e especificar a hora requerido usar a funo TO_DATE:
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES(7658, 'MASON', 'ANALYST', 7566, TO_DATE('24/06/2084 9:30','DD/MM/YYYY HH:MI'), 3000, NULL, 20);

Copiando linhas de Outra Tabela


INSERT INTO tabela (coluna, coluna, ...) SELECT coluna, coluna, ... FROM tabela(s);

Essa forma de INSERT permite a voc inserir vrias linhas em uma tabela onde os valores so derivados de contedo existente em outras tabelas no Banco de Dados. Para copiar todas as informaes sobre o departamento 10 na tabela D10HISTORY, faa:
INSERT INTO D10HISTORY (EMPNO,ENAME,SAL,JOB,HIREDATE) SELECT EMPNO,ENAME,SAL,JOB,HIREDATE FROM EMP WHERE DEPTNO = 10;

Note que a palavra chave VALUES no usada aqui. UPDATE A declarao UPDATE permite voc modificar valores nas linhas em uma tabela:
UPDATE tabela (sinnimo) SET coluna(,coluna,...) = (expresso, sub-pesquisa) (WHERE condio)

Por exemplo. para alterar a linha do Scott faa:


UPDATE EMP SET JOB='SALESMAN, HIREDATE=SYSDATE, [Alexandre Costa Vieira SQL ORACLE] Pgina 103

SQL ORACLE

SAL=SAL*1.1 WHERE ENAME = 'SCOTT'; 1 record updated.

Se a clausula WHERE for omitida, todas as linhas da tabela sero alteradas. possvel usar sub-pesquisas aninhadas e correlatas na declarao UPDATE. Suponhamos que voc tenha uma nova tabela do comisses que deve ser distribuda em certos empregados. Por exemplo a tabela de comisso abaixo.
EMPNO -----------7499 7654 COMM --------666 758

As modificaes listadas na tabela COMMISSION pode ser aplicada na tabela EMP usando uma sub-pesquisa correlata e uma sub-pesquisa aninhada como mostramos abaixo. Exemplo 1:
UPDATE EMP SET COMM = (SELECT COMM FROM COMMISSION C WHERE C.EMPNO = EMP.EMPNO) WHERE EMPNO IN (SELECT EMPNO FROM COMMISSION); 2 records updated.

A tabela COMMISSION pode conter mais de uma linha para cada empregado abaixo:
EMPNO ----7499 7521 7521 7654 COMM ---------666.00 500.00 500.00 758.00

Voc quer trocar o valor da comisso da tabela EMP com o total das comisses para cada empregado lista na tabela COMMISSION. Para fazer isso, use o seguinte SQL: Exemplo 2:
UPDATE EMP SET COMM = (SELECT SUM(COMM) FROM COMMISSION C WHERE C.EMPNO = EMP.EMPNO) WHERE EMPNO IN (SELECT EMPNO FROM COMMISSION); 3 records updated.

A tabela EMP agora reflete as modificaes das comisses:


EMPNO ----7499 7521 COMM ---------666.00 1,000.00

[Alexandre Costa Vieira SQL ORACLE]

Pgina 104

SQL ORACLE

7654

758.00

Outra possibilidade que voc queira adicionar o valor da comisso existente na tabela EMP com o valor da comisso da tabela COMMISSION. Exemplo 3 faz isso: Exemplo 3:
UPDATE EMP SET COMM = (SELECT SUM(COMM) + EMP.COMM FROM COMMISSION C WHERE C.EMPNO = EMP.EMPNO) WHERE EMPNO IN (SELECT EMPNO FROM COMMISSION);

DELETE O comando DELETE permite voc remover uma ou mais linhas de uma tabela.
DELETE FROM tabela (WHERE condio); Para apagar todas as informaes referentes ao departamento 10 da tabela EMP faa: DELETE FROM EMP WHERE DEPTNO =10;

Se a clausula WHERE for omitida todas linhas da tabela EMP sero excludas. COMMIT E ROLLBACK
TRANSAES ---------------------------------TRANSAES----------------------------INSERT COMMIT DELETE COMMIT INSERT COMMIT UPDATE UPDATE TEMPO

ou
ROLLBACK

At que as modificaes sejam confirmadas: voc pode ver ento na pesquisa outros usurios no podem ver voc deve descartar (ROLLBACK) voc deve ROLLBACK em um SAVEPOINT

[Alexandre Costa Vieira SQL ORACLE]

Pgina 105

SQL ORACLE

Processando Transaes
O que uma Transao? Uma transao uma operao contra o Banco de Dados a qual compromete uma sries de modificaes de uma ou mais tabelas. Existem duas classes de Transaes. Transaes DML a qual pode consistir de qualquer nmero de declaraes DEML a qual o ORACLE trata como nica entidade ou lgica unidade de trabalho, e transaes DDL a qual pode unicamente consistir de uma declarao DDL.

Desenho e Termologia do Bsico Banco de Dados Relacional


O objetivo dessa Unidade introduzir a voc alguns Desenhos e Terminologia do Bsico Relacional. Ns no pretendemos ensina como desenhar um Banco de Dados. Desenho Para qualquer Sistema de Banco de Dados que deve realmente ser uma estratgia, analisado, desenhado e construindo por fase. A sada de uma fase comea na entrada da prxima. Nesse caminho erros so encontrados mais facilmente e assim nessa ordem diminuem os custos. A sada do estgio de DESENHO especifica a entrada na fase de CONSTRUO. Ns temos alcanado o ponto onde precisamos para construir tabelas, como Desenho e Terminologia Bsica que precisamos para sermos introduzidos. O Desenho tem o propsito para criar um fsico desenho para implementao baseado sobre as sadas das fases analisadas. O Estgio de Anlise produz o Diagrama de Entidade e Relacionamento o qual provm uma descrio detalhada do negcio. O modelo e entidade uma ferramenta de comunicao. Ela usada para representar o significado da coisa - pessoa, objeto fsico, atividades - sobre o qual ns queremos armazenar dados e associar-se entre eles. Essa ordem de modelo algumas vezes referido como o Modelo Conceitual.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 106

SQL ORACLE

Simples Diagrama de Entidade e Relacionamento

TAREFA Data Incio Data Trmino Taxa Faturamento Tipo Tarefa

PROJETO Nmero Projeto Decrio Projeto Data Incio

EMPREGADO Nmero Empregado Nome Empregado Cargo

DEPARTAMENTO Nmero Departamento Nome Departamento Localizao

Como ler o Diagrama


DEPARTAMENTO EMPREGADO

Cada departamento pode possuir um ou mais empregado(s). Cada empregado deve possuir um nico departamento. O Diagrama de Tabelas O Diagrama de Tabelas provm de descries da tabela. Basicamente entidade provm um molde para as tabelas do Banco de Dados. O desenho produz inicialmente desenhos das tabelas sobre mapas simples de entidades para as tabelas. Nossa explicao no para ensinar a voc a converter Diagramas para scripts de tabelas, mas para mostrar a voc como ler um diagrama para ajudar nessa fase. Sobre um Diagrama de Tabelas, tabelas so representadas por caixas. As colunas marcadas e ligadas so escritas sobre a linha. Colunas especificas so escritas nas caixas.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 107

SQL ORACLE

CHAVE PARA UM DIAGRAMA DE TABELA Tabelas Colunas Formatos das Colunas Caixas Retangulares Listadas dentro das caixas, nicas identificadas primeiro, obrigatrias e nulas nessa ordem. c- caracter n-numrica d-date * no nula assume diferente de nulo # O F nome da coluna de ligao significa um ou mais Obrigatrio Opcional

Obrigatria coluna chave primria coluna opcional Coluna chave estrangeira Relacionamento

[Alexandre Costa Vieira SQL ORACLE]

Pgina 108

SQL ORACLE

Diagrama de Tabelas:
EMPREGADO # EMPNO n4 *ENAME c20 * DEPTNO n2 0 COMM n7,2 0 HIREDATE d 0 JOB c20 0 MGR n4 0 SAL N7,2 DEPARTAMENTO #DEPTNO n2 0 DNAME c20 0 LOC c20

`DEPTNO

SAL

LOSAL HISAL

NIVELSALARIAL #LOSAL n5 #HISAL n5 *GRADE n1

MGR

EMPNO

TAREFA #PROJNO n4 f #EMPNO n4 f *ASTART d 0 AEND d 0 ASSIGN.TYPE c2 0 BILLRATE n4,2

PROJETO #PROJNO n4 * PDESC c20 0 BUDGET n7,2 0 MAXSTAFF n2 0 PEND d 0 PSTART d

PROJNO

Quando ns estamos desenhando tabelas, devemos especificar uma chave Primria(Primary Key). O # prximo de uma coluna significa que ela faz parte da chave primria. Uma chave primria uma coluna ou combinao de colunas as quais os valores so nicos e identificam as linhas nas tabelas. Por exemplo, a coluna EMPNO na tabela EMP distingue cada linha. No deve ter valor duplicado. Se a chave primria for feita de mais de um a coluna, ento nenhuma das colunas que fazem parte da chave primria devem ser nulas; ento, chave primria deve possuir valor. Chave Estrangeira(Foreign Key) O f prximo da coluna indica que ela um chave estrangeira. Uma chave estrangeira uma coluna ou colunas que contm valores de chaves primrias de outras tabelas.
[Alexandre Costa Vieira SQL ORACLE] Pgina 109

SQL ORACLE

EMPREGADOS
EMPNO chave primria DEPARTAMENTO DEPTNO chave primria NAME ADRESS Chave estrangeira DEPTNO

DNAME

Chave Estrangeira permite ns ligarmos tabelas. A coluna DEPTNO na tabela EMP uma chave estrangeira e tem f prximo dela. Seu valor deve ser igual ao valor da coluna DEPTNO da tabela DEPT a qual tem # prximo e significa que ela uma coluna chave primria. Colunas Chaves Algumas colunas podem sem ambos chaves primrias e estrangeiras. DEPTNO uma chave primria na tabela DEPT, e chave estrangeira na tabela EMP. EMPNO uma chave primria . Ela ento uma chave estrangeira da coluna MGR. No ORACLE chave primria tem ndice nico para prevenir a entrada de valores duplicados. Colunas Obrigatrias e Opcionais Se uma coluna e prefixada com um *, seu preenchimento obrigatrio. Uma coluna prefixada com um 0 pode conter valor nulo.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 110

SQL ORACLE

Linguagem de Definio de Dados e Dicionrios de Dados


Nessa Unidade, os comandos necessrios para criao, remanejamento, adio de comentrios e destruio de tabelas so conjuntos de sada. O Dicionrio de Dados ento comentado. Estrutura de Dados ORACLE Tabelas podem ser criadas a qualquer momento, igualmente com usurios em tempo real usando o Banco de Dados. Tamanho dos dados so variveis, em que unicamente caracteres/nmeros especificados so armazenados. Espaos e brancos no so armazenados. No existe nenhuma especificao de tamanho para qualquer tabela. Existe definio como o espao ser alocado no Banco de Dados como um todo. Ele importante, porm, para estimar o espao ocupado pela tabela usaremos outra vez. Estruturas de Tabelas podem ser modificadas em tempo real. Criando uma Tabela O nome que voc escolhe para uma tabela deve seguir a regra padro de nomeao de objetos no Banco de Dados ORACLE. 1. O nome deve iniciar com uma letra, A-Z ou a-z. 2. Ele pode conter letras, nmeros, e o caracter especial ' _ ' (underscore). Os Caracteres $ e # so permitidos mas no so aconselhados. 3. O nome o mesma para qualquer forma de escrita maiscula ou minscula ou os dois. 4. Ele deve ter no mximo 30 posies. 5. O nome no pode ser igual ao de outra tabela, sinnimo, viso. 6. O nome no deve ser uma palavra reservada do SQL.
Nome EMP85 85EMP FIXED_ASSETS FIXED ASSTES UPDATE TABLE1 Vlido? Sim No, no inicia com uma letra Sim No, contm um espao em branco No, uma palavra reservada do SQL Sim, mas voc no deve esquecer qual essa tabela. Escolha um nome mais sugestivo.

Diretriz para Nomear Tabelas Usar nomes sugestivos para tabelas, colunas, ndices e outros objetos.
[Alexandre Costa Vieira SQL ORACLE] Pgina 111

SQL ORACLE

Ser consistente em abreviaes e no uso do singular ou plural na forma de nomear tabelas e colunas, Use consistentes regras de nomeao. Uma regra deve ser seguida por todas as tabelas que pertencerem a aplicao FINANCEIRA com FIN_. Consistentes regras de nomeao ajudam os usurios a entender o papel que cada tabela exerce em sua aplicao. Use o mesmo nome para descrever a mesma entidade ou atributo por tabela. Por exemplo, a coluna nmero do departamento das tabelas EMP e DEPT so ambos nomeados como DEPTNO.

Tipos de Colunas Quando voc cria uma tabela, voc precisa especificar cada tipo de dado por coluna. A tabela abaixo mostra os mais importantes tipos de dados. Os tipos de dados podem ser acompanhar um ou mais nmero em parnteses os quais tem informaes sobre a largura da coluna. A largura da coluna determina o tamanho mximo que valores na coluna podem ter. Colunas CHAR devem ter o tamanho especificado. Colunas NUMBER podem ter tamanhos especificados, mas no necessariamente.
Tipos de Dados CHAR(tamanho) Devem Conter Valores CHAR consiste de letras maisculas ou minsculas, nmeros e caracteres especiais (*,&,%,$,etc.). Tamanho a mxima largura, em caracteres de valores dessa coluna, e no pode ser maior que 255. CHAR (alfanumrico) dados no maior que 255 caracteres. Tamanho o mximo nmero de caracteres que podem ser armazenados em uma coluna VARCHAR2. Na Verso 6 CHAR e VARCHAR2 tem o mesmo efeito. NUMBER NUMBER(tamanho) Valor numrico consiste de 1-9 com opcional sinal de + ou - e um ponto decimal. Mesmo que NUMBER mas nesse o tamanho especificado. Se o tamanho no for especificado o tamanho ser assumido como 38. Mesmos que NUMBER(tamanho), mas especifica o tamanho do decimal. Valor Data de 14 Janeiro de 712 Antes de Cristo 14 Dezembro de 4712 depois de cristo. Informaes de Horas so armazenadas. Similar ao CHAR mas o valor deve ser maior que 65535 caracteres. No mais que uma coluna LONG deve ser especificada em uma tabela.

VARCHAR2(tamanho)

NUMBER(tamanho,decimal) DATE

LONG

Exemplos de Especificaes de Colunas


[Alexandre Costa Vieira SQL ORACLE] Pgina 112

SQL ORACLE

Especificao CHAR(12) VARCHAR2(12) NUMER NUMER(4) NUMER(8,3) DATE LONG

Significado coluna deve conter valores char em 12 posies. coluna deve conter valores char em 12 posies. coluna deve conter valores numricos coluna deve conter valores numricos com 4 dgitos. coluna deve conter valores numricos com 8 dgitos e dgitos a direita a direita do ponto decimal. coluna deve conter valores de data coluna deve conter valores longos.

Criando uma Tabela (CREATE TABLE)


CREATE TABLE nome_tabela (nome_coluna tipo (tamanho) (null/not null), nome_coluna tipo (tamanho) (null/not null) , ...); CREATE TABLE DEPT (DEPTNO NUMBER(2) NOT NULL, DNAME CHAR(12), LOC CHAR(2));

As Opes NULL e NOT NULL


Opo NULL NOT NULL Descrio Essa opo permite valor nulo. Ela o padro, e deve ser omitida. Essa opo fora valores na apropriada coluna. Se qualquer coluna NOT NULL for adicionada sem um valor o ORACLE retornar uma mensagem de erro.

Criando a Tabela EMP Para criar a tabela EMP, faa:


CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME CHAR(10), JOB CHAR(10), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) NOT NULL); [Alexandre Costa Vieira SQL ORACLE] Pgina 113

SQL ORACLE

Table created.

Para ver uma descrio da tabela EMP, faa:


DESC EMP; Name ----------------------EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO Null? --------------NOT NULL Type --------NUMBER(4) CHAR(10) CHAR(10) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2)

NOT NULL

Note os Seguintes pontos: EMPNO definida como NOT NULL, essa coluna unicamente identifica a linha DEPTNO definida como NOT NULL, o valor na coluna usado para ligar a tabela EMP com a DEPT. SAL e COM tem o tipo de dado NUMBER(7,2). Total 7 dgitos. 5 inteiros e dois decimais.

O comando DESCRIBE (DESC) pode ser usado para mostrar a estrutura de qualquer tabela no Dicionrio de Dados. Quando voc est criando tabelas tipo de colunas podem ser definidas como CHAR ou VARCHAR2. Esse dois tipos de dados tem o mesmo efeito e ambos podem ser usados.
CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(10), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) NOT NULL);

Clausula CONSTRAINT O ORACLE suporta a sintaxe para reservar a integridade sobre as informaes sobre checagem de integridade no Dicionrio de Dados. Uma reserva de integridade uma regra que fora um relacionamento entre as tabelas do Banco de Dados. Por exemplo, uma reserva de integridade que um empregado na tabela EMP no pode ser atribudo para um departamento que no existe na tabela DEPT. Uma restrio da chave estrangeira (FOREIGN KEY).

[Alexandre Costa Vieira SQL ORACLE]

Pgina 114

SQL ORACLE

CONSTRAINTS podem ser definidas para uma tabela e colunas e so especificadas como parte dos comandos CREATE ou ALTER TABLE. A propsito das CONSTRAINTS um conjunto de restries de valores para validao. Toda a declarao INSERT, UPDATE e DELETE causam uma avaliao da(s) CONSTRAINTS. A CONSTRATINT deve ser satisfeita para ser efetivado o INSERT, UPDATE ou DELETE. Use CONSTRAINTS para impor uma ou mais das seguintes restries sobre uma coluna ou um grupo de colunas. requerer que uma coluna ou grupo de colunas contenham valores NOT NULL. especificar que o valor de uma coluna seja nico na tabela referida. especificar colunas como CHAVE PRIMRIA. estabelecer uma restrio de CHAVE ESTRANGEIRA. requerer que valor de uma coluna se conforme um valor pr-determinado. (CHECK).

Existem dois tipos de restries(constraints), de tabelas e colunas. Elas so identificadas igualmente que a restrio de coluna refere-se a um nica coluna onde a de tabela pode referenciar-se para uma ou mais colunas. Definies de restries de tabelas so parte de um global definio de tabela:
CREATE TABLE ASSIGNMENT (PROJECT NUMBER(4), EMPLOYEE NUMBER(4), PRIMARY KEY (PROJECT, EMPLOYEE)

Restries de colunas so locais para a especificao da coluna:


CREATE TABLE DEPT (DEPTNO NUMBER PRIMARY KEY ...)

Exemplo de Restries
CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL PRIMARY KEY CONSTRAINT EMP_PRIM, ENAME VARCHAR2(1) CHECK (ENAME = UPPER(ENAME)), JOB VARCHAR2(10), MGR NUMBER(4), HIREDATE DATE CHECK (HIREDATE <= SYSDATE), NI_NUMBER VARCHAR2(12), SAL NUMBER(7,2), DEPTNO NUMBER(2) NOT NULL FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO) CONSTRAINT EMP_DEPT, FOREIGN KEY (MGR) REFERENCES EMP (EMPNO) CONSTRAINT EMP_MGR, UNIQUE KEY (NI_NUMBER) CONSTRAINT EMP_NI);

Notas 1. EMPNO definido como uma chave primria, e deve ento ser definido como NOT NULL

[Alexandre Costa Vieira SQL ORACLE]

Pgina 115

SQL ORACLE

2. A coluna DEPTNO possui uma clusula REFERENCES que indica que ela uma chave estrangeira da tabela DEPT. Note que para usar REFERENCES em uma restrio de tabela voc precisa ser o criador da tabela ou possuir privilgios sobre a tabela a qual a coluna foi referenciada. 3. CHECK especifica um restrio que deve ser satisfeita. Ento a coluna ENAME deve ser digita em maisculo antes de ser inserida na tabela. 4. HIREDATE deve ser maior ou igual a data de hoje para passar a restrio. 5. MGR identificada como um chave estrangeira na restrio de tabela e referenciada a coluna EMPNO. 6. NI_NUMBER identificada coma uma chave nica. Parmetro das Restries
CONSTRAINT restrio_nome especifica o nome da restrio. Este parmetro opcional. Se voc omiti-lo o nome ser atribudo com um nome padro formado de SYS_Cnome, onde nome um nmero que unicamente identifica a restrio. especifica que a coluna deve ser ou no preenchida . O padro NULL. especifica que cada linha da tabela deve tem um valor distinto para a coluna. Cada coluna deve ser declarada como NOT NULL e coluna no deve ser chave primria. especifica que a coluna nica e identifica cada linha. A coluna deve ser declarada como NOT NULL e no deve ter uma restrio do tipo UNIQUE. A chave primria pode ser composta de vrias colunas. Se sua chave primria uma coluna. voc deve usar uma restrio de tabela ou coluna. Se for vrias colunas voc deve usar uma restrio de tabela. identifica as colunas como as chaves estrangeira das tabelas. Deve referenciar a uma chave primria de uma tabela. No pode referenciar uma Viso. Para referenciar-se a uma tabela voc deve ser seu criador ou ter privilgios sobre ela. CHECK especifica uma condio que uma coluna deve satisfazer para cada linha que existe na tabela. Pode unicamente referenciar-se com colunas da mesma tabela.

NULL/NOT NULL UNIQUE

PRIMARY KEY

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

As restries tem a finalidade de facilitar a integridade de dados na tabela e entre tabelas. A restrio de integridade forada para todas as aplicaes ou ferramentas que acessem as tabelas. As mais aplicadas restries so as de NULL e NOT NULL. Criando uma Tabela com linhas de Outra Tabela. Existe uma segunda forma de declarao de CREATE TABLE na qual a tabela criada com linha derivadas de outra tabela:
[Alexandre Costa Vieira SQL ORACLE] Pgina 116

SQL ORACLE

CREATE TABLE DEPT [(coluna (NULL/NOT NULL)...)] AS SELECT declarao

A tabela ser criada com as colunas especificas e linhas retiradas sobre a declarao SELECT inseridas nela. Se todas as coluna na declarao SELECT tiverem nome isto no forem uma expresso, a especificao da coluna pode ser omitida. Para criar uma tabela DEPT30 com nmero, nome, cargo e salrio do empregado no departamento 30 faa:
CREATE TABLE DEPT30 AS SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE DEPTNO = 30; Table created.

E para conferir o resultado:


DESC DEPT30 Name ----------------------EMPNO ENAME JOB SAL Null? ---------------------NOT NULL Type ---------------------NUMBER(4) CHAR(10) CHAR(10) NUMBER(7,2)

Para criar uma tabela contendo nome, salrio e faixa do empregado, faa:
CREATE TABLE EMP_SALS (NAEM, SALARY, GRADE) AS SELECT ENAME, SAL, GRADE FROM EMP, SALGRADE WHERE EMP.SAL BETWEEN LOSAL AND HISAL; Table created. DESC EMP_SALS; Name --------------------NAME SALARY GRADE Null? ---------------------Type -----------------CHAR(10) NUMBER(7,2) NUMBER

[Alexandre Costa Vieira SQL ORACLE]

Pgina 117

SQL ORACLE

Para mostra o contedo da tabela EMP_SALS, faa:


SELECT * FROM EMP_SALS; NAME ---------------SMITH ADAMS JAMES WARD MARTIN MILLER ALLES TURNER JONES BLAKE CLARK SCOTT FORD KING SALARY ----------------800 1100 950 1250 1250 1300 1600 1500 2975 2850 2450 3000 3000 5000 GRADE -----------------1 1 1 2 2 2 3 3 4 4 4 4 4 5

Alterando uma Tabela Use o comando ALTER TABLE para modificar uma definio de tabela. Use a palavra chave ADD para adicionar uma coluna ou restrio para uma tabela existente.
ALTER TABLE nome ADD (coluna tipo/Restrio)

Para adicionar a coluna com o nome da esposa do empregado, faa:


ALTER TABLE EMP ADD (SPOUSES_NAME CHAR(10)); Table altered. Para ver como ficou a tabela faa: DESC EMP Name ----------------------EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO SPOUSES_NAME Null? --------------NOT NULL Type --------NUMBER(4) CHAR(10) CHAR(10) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2) CHAR(10)

NOT NULL

[Alexandre Costa Vieira SQL ORACLE]

Pgina 118

SQL ORACLE

Para adicionar uma restrio para uma tabela existente, na qual especifica que o salrio mensal no deve exceder 5000 faa:
ALTER TABLE EMP ADD (CHECK(SAL<=5000));

Use a palavra chave MODIFY para modificar a definio de uma coluna existente.
ALTER TABLE nome MODIFY (coluna tipo (NULL));

Para modificar o tamanho de ENAME para 25 caracteres faa:


ALTER TABLE EMP MODIFY (ENAME CHAR(25)); Table altered. DES EMP Name ----------------------EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO SPOUSES_NAME Null? --------------NOT NULL Type --------NUMBER(4) CHAR(25) CHAR(10) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2) CHAR(10)

NOT NULL

Existem trs modificaes que voc no pode fazer: 1. Voc no pode modificar uma coluna que contm nulos para NOT NULL 2. Voc no pode adicionar uma coluna que NOT NULL. Adicione ela nula, preencha todas as linhas e modifique para NOT NULL. 3. Voc no pode diminuir o tamanho de uma coluna ou mudar o tipo do dado, a menos que ela no contenha dados. Para modificar uma restrio voc deve excluir ela e ento adicionar ela com a modificao. Use a palavra chave DROP para remover uma restrio de uma tabela.
ALTER TABLE EMP DROP CONSTRAINT EMP_NI;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 119

SQL ORACLE

Excluindo uma Tabela Para excluir uma definio de uma tabela no ORACLE usa-se o comando DROP TABLE.
DROP TABLE EMP;

Excluindo uma tabela perde todos os dados dela e todos os ndices associados com ela: Todos os dados sero apagados Qualquer viso e Sinnimos permanecem, mas eles so invlidos Qualquer transao confirmada Somente o criador da tabela ou DBA pode exclu-la.

O Comando COMMENT Use o comando COMMENT para inserir um comentrio no maior de 255 caracteres, sobre uma tabela ou coluna, no Dicionrio de Dados. Para adicionar um comentrio na tabela EMP faa:
COMMENT ON TABLE EMP IS Informaes Empregados;

Para adicionar um comentrio na coluna EMPNO da tabela EMP faa:


COMMENT ON COLUMN EMP.EMPNO IS nico nmero do empregado;

Para retirar o comentrio use o comando COMMENT sem o comentrio:


COMMENT ON COLUMN EMP.EMPNO IS;

Para ver o comentrio, selecione a coluna COMMENTS de uma dessas tabelas: ALL_COL_COMMENTS ou USER_COL_COMMENTS. O Dicionrio de Dados ser comentado depois dessa unidade.

O Comando RENAME O comando RENAME usado pelo criador da TABELA, VISO e SINNIMO para alterar o nome de um objeto do Banco de Dados. Para renomear um objeto do Banco de Dados a sintaxe :
RENAME velho TO novo

Para renomear a tabela EMP para EMPLOYYE, faa:


RENAME EMP TO EMPLOYYE [Alexandre Costa Vieira SQL ORACLE] Pgina 120

SQL ORACLE

importante notar que qualquer aplicao que se referir para o objeto renomeado ter que ser alterado.

O Dicionrio de Dados ORACLE


O Dicionrio de Dados uma das mais importantes partes do ORACLE RDBMS. Ele consiste de um conjunto de tabelas e vises as quais provm da leitura referente ao Banco e Dados. O Dicionrio de Dados diz a voc: o nome dos usurios ORACLE. os direitos e privilgios que eles possuem. nomes: tabelas, vises, ndices, sinnimos, seqncias,...). restries aplicadas para uma tabela. informaes de auditoria, mostra como quem tem acesso ou pode alterar especificados objetos do Banco de Dados.

O Dicionrio de Dados criado quando o Banco de Dados criado. Depois confirme o Banco de Dados vai se modificando o Dicionrio de Dados vai sendo alterado. Acessando o Dicionrio de Dados Para acessar os objetos do Dicionrio de Dados via a declarao SQL SELECT pode ser usada para pesquisar informaes no Dicionrio de Dados.
Nota:

Nenhum usurio pode alterar as linhas ou objeto do Dicionrio de Dados pois isso poderia comprometer a integridade do Banco de Dados. O RDBMS j faz todas as alteraes necessrias a partir dos comando SQL executados.

Dicionrio de Dados Tabelas e Vises


Tabelas A Base do Dicionrio de Dados ou tabelas subjacentes so os primeiros objetos para ser criados no Banco de Dados como eles devem estar presente para todos outros objetos para serem criados. Tabelas do Dicionrio de dados so automaticamente criadas pela declarao SQL CREATE DATABASE e so propriedade do usurio SYS. A Base das Tabelas so raramente acessadas diretamente por que as informaes no so de fcil entendimento.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 121

SQL ORACLE

Sinnimos Vises do Dicionrio de Dados (Tabelas virtuais). contm informaes que possam ser de fcil entendimento para os usurios. Acesso pblico para o Dicionrio de Dados dado via vises as tabelas. As trs classes de vises so:
USER_xxx objeto propriedade do usurio que pode acess-la. Por exemplo, vises com esse prefixo seguinte o usurio para mostrar as informaes sobre as tabelas criadas pelo usurio e privilgios dados pelo usurio. usurio pode usar os objetos os quais tem permisso de acesso, em adicionar objetos os quais lhe pertence. para usurios com privilgios de DBA pode acessar qualquer objeto no Banco de Dados.

ALL_xxx DBA_xxx

Algumas vises de Dicionrios de Dados no usam os prefixos acima.


DICTIONARY DICT_COLUMNS CONSTRAINT_DEF CONSTRAINT_COLUMNS lista toas as tabelas do Dicionrio de Dados, vises, sinnimos para o usurio. mostra todas as colunas que podem ser acessada pelo usurio. lista todas as restries entradas para as tabelas que so acessadas pelo usurio. lista todas as colunas que possuem restries nomeadas pelo usurio.

A Viso DICTIONARY DICTIONARY lista todos os objetos do Dicionrio de Dados acessado pelo usurio com uma breve descrio do objeto. A seguinte declarao SQL mostra os comentrios da tabela DICTIONARY:
SELECT * FROM DICTIONARY; NOME TABELA ACCESSIBLE_COLUMNS ACCESSIBLE_TABLES ALL_CATALOG ALL_COL_COMMENTS ALL_COL_GRANTS_MADE [Alexandre Costa Vieira SQL ORACLE] COMENTRIO Colunas de toadas as tabelas, vises e grupo Tabelas e Vises acessveis pelo usurio Todas tabelas, vises, sinnimos, seqncias acessveis pelo usurio Comentrios sobre colunas acessveis das tabelas e vises. permisses das colunas para qual o usurio Pgina 122

SQL ORACLE

criador ou proprietrio. ALL_COL_GRANTS_RECD ALL_CONSTRAINTS ALL_CONS_COLUMNS ALL_DB_LINKS ALL_DEF_AUDIT_OPTS ALL_INDEXES ALL_IND_COLUMNS ALL_OBJECTS ALL_SEQUENCES ALL_SYNONYMS ALL_TABLES ALL_TAB_COMMENTS ALL_TAB_GRANTS_MADE ALL_TAB_GRANTS_RECD ALL_USERS ALL_VIEWS AUDIT_ACTIONS COLUMN_PRIVILEGES CONSTRAINT_COLUMNS CONSTRAINT_DEFS DICTIONARY DICT_COLUMNS DUAL SYSAUDIT_TRAIL [Alexandre Costa Vieira SQL ORACLE] permisses sobre as colunas criadas pelo usurio. Restries definidas nas colunas pelas tabelas acessadas Restries definidas nas tabelas acessadas descries das tabelas e vises Descries das colunas das Tabelas e Vises do Dicionrio de Dados. tabela virtual sinnimo para AUDIT_TRAIL Pgina 123 permisses sobre colunas para uso pblico para os usurios. Restries sobre as tabelas acessveis restries sobre as colunas acessveis Banco de Dados Ligados acessados pelo usurio Auditoria opo para recentes objetos criados descries acessadas do ndices sobre as tabelas

colunas que possuem ndice das tabelas. Objetos pelo usurio. descries das seqncias todos os sinnimos descries de todas as tabelas comentrios das tabelas e vises permisses sobre os objetos permisses sobre objetos pblicos informaes sobre os usurios do Banco de Dados textos de vises

SQL ORACLE

TABLE_PRIVILEGES USER_AUDIT_CONNECT USER_AUDIT_TRAIL USER_CATALOG USER_CLUSTERS USER_CLU_COLUMNS USER_COL_COMMENTS USER_COL_GRANTS USER_COL_GRANTS_MADE USER_COL_GRANTS_RECD USER_CONSTRAINTS USER_CONS_COLUMNS USER_CROSS_REFS USER_DB_LINKS USER_EXTENTS USER_FREE_SPACE USER_INDEXES USER_IND_COLUMNS USER_OBJECTS USER_SEGMENTS USER_SEQUENCES USER_SYNONYNS USER_TABLES [Alexandre Costa Vieira SQL ORACLE]

permisses pelos criadores sobre os objetos. auditoria do caminho para o usurio(login) Auditoria dos caminhos relevantes ao usurio Tabelas, Vises, Sinnimos, acessveis pelo usurio. Seqncias

descries das autorizaes dos usurios Mapa das colunas das tabelas e conjuntos de colunas Comentrios sobre colunas dos tabelas e vises dos usurios Permisses sobre as colunas as quais o usurio criador. todas as autorizaes sobre as colunas e objetos que o usurio criador Autorizaes sobre as colunas as quais o usurio criador. restries definidas sobre o acesso das tabelas informaes sobre definas restries acessveis colunas em

referencias cruzadas para vises, sinnimos e restries do usurio Banco de Dados ligados pelo usurio extenses dos segmentos espao livre na espao da tabela acessvel pelo usurio descries dos ndices criados pelo usurio colunas que possuem ndices objetos criados pelo usurio Armazenamento alocados para segmentos do Banco de Dados. Descries das seqncias do usurio as sinnimos usados descries das tabelas do usurios Pgina 124 todo os

SQL ORACLE

USER_TAB_ESPACES USER_TAB_AUDIT_OPTS USER_TAB_COLUMNS USER_TAB_COMMENTS USER_TAB_GRANTS USER_TAB_GRANTS_MADE USER_TAB_GRANTS_RECD USER_TS_QUOTAS USER_USERS USER_VIEWS

descrio espao acessado Opes de auditoria para usurios e suas tabelas e vises Colunas das tabelas, vises e grupos de usurios comentrio das tabelas e vises criadas pelo usurio permisses sobre objetos para quais o usurio o criador ou possui permisso. todas as permisses sobre os objetos criados pelo usurio permisses sobre os objetos os quais o usurio permitido quota de espao para o usurio informaes sobre o corrente usurio textos das vises criadas pelo usurio

Algumas das vises do Dicionrio de Dados tem nomes longos. Sinnimos pblicos tem o sentido de abreviaes, para ajudar o acesso demais comum usurio nas vises do Dicionrio de Dados. As seguintes vises so as mais interessantes para a maioria dos usurios.
Nome Viso DICTIONARY USER_OBJECTS USER_CATALOG Sinnimo DICT OBJ CAT Descrio Lista de todos os objetos do Banco de Dados Objetos criados pelo usurio Tabelas, vises, sinnimos, seqncias que podem ser acessadas pelo usurio Descrio usurio das tabelas do

USER_TABLES USER_TAB_COLUMNS USER_COL_COMMENTS USER_TAB_COMMENTS

TABS COLS

Colunas das tabelas e vises do usurio Comentrio das colunas das tabelas e vises do usurio Comentrio sobre as tabelas e vises criadas pelo usurio Pgina 125

[Alexandre Costa Vieira SQL ORACLE]

SQL ORACLE

USER_SEQUENCES USER_SYNONYM USER_VIEWS USER_INDEXES ALL_OBJECTS ALL_TAB_COLUMNS

SEQ SYN

Descrio das seqncias criadas pelo usurio Sinnimos privados do usurio textos das vises criadas pelo usurio

IND

Descries dos ndices usados pelo usurio Objetos que podem acessados pelo usurio ser

Colunas para todas as tabelas e vises que podem ser acessadas pelo usurio

Para ver a estrutura da tabela USER_OBJECTS faa:


DESC USER_OBJECTS Name ---------------------OBJECT_NAME OBJECT_ID OBJECT_TYPE CREATED MODIFIED Null? ---------------------Type -------------CHAR(30) NUMBER CHAR(13) DATE DATE

Uma descrio da Viso DICTIONARY seguinte


DESC DICT Name --------------------TABLE_NAME COMMENTS Null? --------------------Type -------------CHAR(30) CHAR(255)

Note que o sinnimo abreviado DICT usado para referir-se a tabela DICTIONARY. Conhecendo a descrio da tabela ou viso voc pode construir uma declarao SELECT para mostrar informaes sobre um objeto.
SELECT OBJECT_NAME, OBJECT_TYPE, CREATED, MODIFED FROM USER_OBJECTS WHERE OBJECT_NAME = 'EMP'; OBJECT_NAME ---------------EMP OBJECT_TYPE ---------------TABLE CREATED ---------------02-MAY-90 MODIFIED --------------01-JUL-90

Exerccio 8 - Linguagem de definio de Dados Este exerccio fala sobre criao de tabelas de Banco de Dados, alterao de definies de Tabelas, e tambm sobre pesquisas nas tabelas do Dicionrio de Dados.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 126

SQL ORACLE

1.Criar a seguinte tabela, voc deve abreviar o nome da tabela se requerer, contendo os nomes de colunas especificados. Nome da Tabela: PROJECTS
Nome Coluna ----------------------------PROJID P_DESC P_START_DATE P_END_DATE BUDGET_AMOUNT MAX_NO_STAFF Tipo de Dado ----------------------------NUMBER CHARACTER DATE DATE NUMBER NUMBER Tamanho ----------------------------4 20 7,2 2 No Nula ----------------------------NOT NULL

Nome da Tabela: ASSIGNMENTS


Nome Coluna ----------------------------PROJID EMPNO A_START_DAT A_END_DATE BILL_RATE ASSIGN_TYPE Tipo de Dado ----------------------------NUMBER NUMBER DATE DATE NUMBER CHARACTER Tamanho ----------------------------4 4 4,2 2 No Nula ----------------------------NOT NULL NOT NULL

2. Tendo a criao processada com sucesso dessas tabelas, adicionar outra coluna na tabela ASSIGNMENTS:
Nome Coluna ----------------------------HOURS Tipo de Dado ----------------------------NUMBER Tamanho ----------------------------2 No Nula -----------------------------

3. Adicionar comentrios para as tabelas que voc tem criado. 4.Adcionar comentrios para coluna PROJID na tabela PROJECTS. 5. Mostrar as coluna especificadas para a tabela USER_TAB_COLUMNS. 7. Mostrar nome tabelas e comentrios para qualquer tabela que voc tenha criado. Voc precisa para pesquisar a USER_COL_COMMENTS ou USER_TAB_COMMENTS tabelas do Dicionrio de Dados. 8. Mostrar os nomes das tabelas e comentrios para qualquer tabela as quais voc tem acesso. Pesquisar a tabela ALL_TAB_COMMENTS.

[Alexandre Costa Vieira SQL ORACLE]

Pgina 127

SQL ORACLE

Respostas dos exerccios propostos


Exerccio 1 - Introduo ao SQL, o comando SELECT
1SELECT FROM SELECT FROM SELECT FROM WHERE SELECT FROM ORDER BY SELECT FROM SELECT FROM WHERE ORDER BY SELECT FROM WHERE AND SELECT FROM WHERE OR SELECT FROM WHERE SELECT FROM SELECT FROM WHERE SELECT FROM WHERE AND ORDER BY SELECT * SALGRADE; * EMP; ENAME, DEPTNO, SAL EMP SAL BETWEEN 1000 AND 2000; DEPTNO, JOB DEPT DNAME; DISTINCT JOB EMP; * EMP DEPTNO IN (10,20) ENAME; ENAME, JOB EMP JOB = 'CLERK' DEPTNO = 20; ENAME EMP ENAME LIKE '%TH%' ENAME LIKE '%LL%'; ENAME, JOB, SAL EMP MGR IS NOT NULL; ENAME, SAL*12+NVL(COMM,0) REMUNERATION EMP; ENAME, DEPTNO, HIREDATE EMP HIREDATE LIKE '%83'; ENAME, SAL*12 ANNUAL_SAL, COMM EMP SAL>COMM JOB = 'SALESMAN' SAL DESC, ENAME: ENAME|| ' HAS HELD THE POSITION OF '||

2-

3-

4-

5-

6-

7-

8-

9-

10-

11-

12-

13-

[Alexandre Costa Vieira SQL ORACLE]

Pgina 128

SQL ORACLE

FROM 14SELECT FROM ORDER BY

JOB|| ' IN DEPT '|| DEPTNO|| ' SINCE '|| HIREDATE "Who, what and when" EMP; * EMP NVL(MGR,9999);

Exerccio 2 - Usando Funes


1. SELECT DEPTNO, ENAME, ROUND(SAL*1.15)PCTSAL FROM EMP; 2. SELECT RPAD(ENAME,10)||LPAD(JOB,10) EMPLOYEE_AND_JOB FROM EMP; 3. SELECT ENAME NAME, SUBSTR(JOB,1,2)|| SUBSTR(EMPNO,2,2)|| SOUNDEX(ENAME CODE FROM EMP; 4. SELECT * FROM EMP WHERE UPPER(JOB) = UPPER('&JOB'); 5. SELECT LPAD(' ',(20-LRNGTH(DNAME))/2)||DNAME DEPARTMENT FROM DEPT; 6. SELECT ENAME, TRANSLATE(SUBSTR(ENAME,1,INSTR(ENAME,'L')),'L','X')|| SUBSTR(ENAME,INSTR(ENAME,'L') + 1) FIRST_OCCURRENCE_OF_L FROM EMP;

Exerccio 3 Mais Funes


1. SELECT ENAME, TO_CHAR(HIREDATE,'fmMonth, Ddspth YYYY') date_hired FROM EMP WHERE DEPTNO = 20; 2. SELECT ENAME, HIREDATE, ADD_MONTHS(HIREDATE,12) REVIEW FROM EMP ORDER BY ADD_MONTHS(HIREDATE,12); 3. SELECT ENAME, DECODE(SIGN(1500-SAL),1,'BELOW 1500',0,'On Target', SAL) SALARY FROM EMP ORDER BY ENAME;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 129

SQL ORACLE

4. SELECT TO_CHAR(TO_DATE('&ANYDATE','DD.MM.YY'),'DAY') DAY FROM DUAL; 5. DEFINE TIME = MONTHS_BETWEEN(SYSDATE,HIREDATE) SELECT ENAME, FLOOR(&TIME/12)||' YEARS '||FLOOR(MOD(&TIME,12)|| 'MONTHS' "LRNGTH OF SERVICE" FROM EMP WHERE ENAME = UPPER('&EMPLOYEE_NAME'); 6. SELECT '12/34' VALUE, DECODE( TRANSLAYE('12/34','1234567890','9999999999'), '99/99','YES','NO') "VALID?:" FROM DUAL; 7. SELECT ENAME, HIREDATE, DECODE(SIGN(TO_CHAR(HIREDATE,'DD')-151, NEXT_DAY(LAST_DAY(ADD_MONTHS(HIREDATE,1)),'FRIDAY'-7, NEXT_DAY(LAST_DAY(HIREDATE,'FRIDAY')-7) PAYDAY FROM EMP ORDER BY HIREDATE; ou SELECT ENAME, HIREDATE, NEXT_DAY(LKAST_DAY(ROUND(HIREDATE,'MONTH'))-7,'FRIDAY') PAYDAY FROM EMP ORDER BY HIREDATE;

Exerccio 4 - Funes de Grupo


1. SELECT FROM 2. SELECT FROM 3. SELECT MIN(SAL) MINIMUM EMP; MAX(SAL), MIN(SAL), AVG(SAL) EMP;

JOB, MAX(SAL) MAXIMUM, MIN(SAL) MINIMUM, FROM EMP GROUP BY JOB; COUNT(1) MANAGERS EMP JOB = 'MANAGER';

4. SELECT FROM WHERE 5. SELECT

JOB, AVG(SAL) AVSAL, AVG(SAL*12+NVL(COMM,0))AVCOMP FROM EMP GROUP BY JOB;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 130

SQL ORACLE

6. SELECT FROM 7. SELECT FROM GROUP BY HAVING 8. SELECT FROM GROUP BY HAVING 9. SELECT FROM GROUP BY HAVING ORDER BY

MAX(SAL) - MIN(SAL) DIFFERENCE EMP; DEPTNO, COUNT(1) EMP DEPTNO COUNT(1) > 3; EMPNO EMP EMPNO COUNT(1) > 1; MGR, MIN(SAL) EMP MGR MIN(SAL) >= 1000 MIN(SAL);

Exerccio 5 - Simples Ligaes (Join)


1. SELECT ENAME, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; 2. SELECT ENAME, E.DEPTNO, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO; 3. SELECT FROM WHERE AND ENAME, LOC LOCATION, DNAME EMP, DEPT EMP.DEPTNO = DEPT.DEPTNO SAL > 1500;

4. SELECT ENAME, JOB, SAL, GRADE FROM EMP, SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL; 5. SELECT FROM WHERE AND 6. SELECT FROM WHERE AND ENAME, JOB, SAL, GRADE EMP, SALGRADE SAL BETWEEN LOSAL AND HISAL GRADE = 3; ENAME, SAL, LOC LOCATION EMP, DEPT EMP.DEPTNO = DEPT.DEPTNO LOC = 'DALLAS';

7. SELECT ENAME, JOB, SAL, GRADE, DNAME FROM EMP, SALGRADE, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND SAL BETWEEN LOSAL AND HISAL AND JOB <> 'CLERK' ORDER BY SAL DESC;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 131

SQL ORACLE

Exerccio 6 - Outros Mtodos de Ligaes


1. SELECT EMPNO, ENAME, DNAME, LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO; 2. SELECT FROM WHERE AND D.DEPTNO, DNAME EMP E, DEPT D E.DEPTNO(+) = D.DEPTNO E.EMPNO IS NULL;

3. SELECT EMPS.EMPNO, EMPS.ENAME, MGRS.EMPNO MGRNO, MGRS.ENAME MGR_NAMR FROM EMP EMPS, EMP MGRS WHERE EMPS.MGR = MGRS.EMP; 4. SELECT EMPS.EMPNO, EMPS.ENAME, MGRS.EMPNO MGRNO, MGRS.ENAME MGR_NAMR FROM EMP EMPS, EMP MGRS WHERE EMPS.MGR = MGRS.EMP (+); 5. SELECT JOB FROM EMP WHERE HIREDATE BETWEEN '01-JAN-83' AND '30-JUN-83' INTERSECT SELECT JOB FROM EMP WHERE HIREDATE BETWEEN '01-JAN-84' AND '30-JUN-84' 6. SELECT E.ENAME EMPLOYEE, E.HIREDATE, M.ENAME MANAGER, M.HIREDATE FROM EMP E, EMP M WHERE E.MGR = M.EMPNO AND E.HIREDATE < M.HIREDATE; 7. SELECT FROM MINUS SELECT FROM WHERE DEPTNO, DNAME DEPT EMP.DEPTNO, DNAME EMP, DEPT EMP.DEPTNO = DEPT.DEPTNO;

8. SELECT ENAME, JOB, SAL*12+NVL(COMM,0) ANNUAL_SAL, D.DEPTNO, DNAME, GRADE FROM EMP E, SALGRADE, DEPT D WHERE E.DEPTNO = D.DEPTNO [Alexandre Costa Vieira SQL ORACLE] Pgina 132

SQL ORACLE

AND SAL BETWEEN LOSAL AND HISAL AND (SAL*12+NVL(COMM,0) = 36000 OR E.JOB = 'CLERK') ORDER BY E.JOB;

Exerccio 7 - Sub-pesquisas
1. SELECT JOB, ENAME, SAL FROM EMP WHERE (SAL,JOB) IN (SELECT MAX(SAL), JOB FROM EMP GROUP BY JOB) ORDER BY SAL DESC; 2. SELECT ENAME, JOB, SAL FROM EMP WHERE (SAL,JOB) IN (SELECT MIN(SAL), JOB FROM EMP GROUP BY JOB) ORDER BY SAL; 3. SELECT DEPTNO, ENAME, HIREDATE FROM EMP WHERE (HIREDATE,DEPTNO) IN (SELECT MAX(HIREDATE), DEPTNO FROM EMP GROUP BY DEPTNO) ORDER BY HIREDATE; 4. SELECT ENAME, SAL SALARY, DEPTNO FROM EMP E WHERE SAL > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = E.DEPTNO) ORDER BY DEPTNO; 5. SELECT DEPTNO, DNAME FROM DEPT WHERE DEPTNO NOT IN (SELECT DEPTNO FROM EMP); 6. DEFINE REM = SAL*12+NVL(COMM,0) SELECT DEPTNO, SUM(&REM) COMPENSATION FROM EMP GROUP BY DEPTNO HAVING SUM(&REM) = (SELECT MAX(SUM(&REM)) FROM EMP GROUP BY DEPTNO): 7. SELECT ENAME, SAL [Alexandre Costa Vieira SQL ORACLE] Pgina 133

SQL ORACLE

FROM WHERE

EMP E 3 > (SELECT COUNT(1) FROM EMP WHERE E.SAL < SAL);

8. COLUMN YEAR FORMAT A4 COLUMN NUMBER_OF_EMPS FORMAT 9 HEADING 'NUMBER OF EMPS' SELECT TO_CHAR(HIREDATE,'YYYY' YEAR, COUNT(EMPNO) NUMBER_OF_EMPS FROM EMP GROUP BY TO_CHAR(HIREDATE,'YYYY') HAVING COUNT(EMPNO) = (SELECT MAX(COUNT(EMPNO)) FROM EMP GROUP BY TO_CHAR(HIREDATE,'YYYY')); 9. COLUMN SALARY FORMAT 999,999.99 COLUMN DEPT_AVG LIKE SALARY BREAK ON DEPTNO ON DEPT_AVG SELECT FROM WHERE AND E.ENAME ENAME, E.SAL SALARY, E.DEPTNO, AVG(A.SAL) DEPT_AVG EMP A, EMP E E.DEPTNO = A.DEPTNO E.SAL > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = E.DEPTNO) GROUP BY E.ENAME, E.SAL, E.DEPTNO ORDER BY AVG(A.SAL); 10. SELECT ENAME, HIREDATE, '*' MAXDATE FROM EMP WHERE HIREDSTE = (SELECT MAX(HIREDATE) FROM EMP) UNION SELECT ENAME, HIREDATE, ' ' FROM EMP WHERE HIREDATE <> (SELECT MAX(HIREDATE) FROM EMP);

Exerccio 8 - Linguagem de definio de Dados


1. CREATE TABLE PROJECTS (PROJID NUMBER(4) NOT NULL, P_DES CHAR(20), P_START_DATE DATE, P_END_DATE DATE, BUFGET_AMOUNT NUMBER(7,2), MAX_NO_SATFF NUMBER(2)); CREATE TABLE ASSIGNMENTS (PROJID NUMBER(4) NOT NULL, EMPNO NUMBER(4) NOT NULL, A_START_DATE DATE, A_END_DATE DATE, [Alexandre Costa Vieira SQL ORACLE] Pgina 134

SQL ORACLE

BILL_RATE ASSIGN_TYPE 2.

NUMBER(4,2), CHAR(2));

ALTER TABLE ASSIGNMENTS ADD (HOURS NUMBER(2));

3.

COMMENT ON TABLE ASSIGMENTS IS 'Unique Project details';

COMMENT ON TABLE ASSIGNMENTS IS 'Assignments for any employee on a project': 4. COMMENT ON COLUMN PROJECTS.PROJID IS 'Unique indentifier for a project': DESCRIBE USER_TAB_COLUMNS Null? ----------------------------NOT NULL NOT NULL NOT NULL Type ----------------------------CHAR(30) CHAR(30) CHAR(9) NUMBER NUMBER NUMBER CHAR(1) NUMBER NUMBER LONG

5.

Name ----------------------------TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE NULLABLE COLUMN_ID DEFAULT_LENGTH DATA_DEFAULT 6.

NOT NULL

SELECT A.TABLE_NAME, A.COLUMN_NAME, B.COMMENTS FROM USER_TAB_COLUMNS A, USER_TAB_COMMENTS B WHERE A.TABLE_NAME = B.TABLE_NAME;

[Alexandre Costa Vieira SQL ORACLE]

Pgina 135

Você também pode gostar