Oracle Sql PortuguêS

9,745 views
9,595 views

Published on

Curso de SQL oficial da Oracle

Published in: Business, Technology
2 Comments
14 Likes
Statistics
Notes
  • excelente tutorial, bem montado e de facil entendimento. Realmente ajuda...
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • An excellent presentation now embedded at OracleLink.com - The Oracle Community Network

    http://www.oraclelink.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
9,745
On SlideShare
0
From Embeds
0
Number of Embeds
63
Actions
Shares
0
Downloads
885
Comments
2
Likes
14
Embeds 0
No embeds

No notes for slide

Oracle Sql PortuguêS

  1. 1. Introdução ao Oracle9i: SQL Apresentação Eletrônica 40049BP11 Produção 1.1 Fevereiro de 2002 D34392 1-1 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  2. 2. Autores Copyright © Oracle Corporation, 2000, 2001. Todos os direitos reservados. Nancy Greenberg Priya Nathan Esta documentação contém informações patenteadas pela Oracle Corporation. É fornecida sob um contrato de licença que contém restrições sobre seu uso e sua divulgação, sendo também protegida pela legislação de direitos autorais. Não é Colaboradores Técnicos permitida a engenharia reversa do programa de computador. Se esta documentação e Revisores for entregue/distribuída a uma Agência do Departamento de Defesa do Governo dos Estados Unidos da América do Norte, será então entregue/distribuída com Direitos Josephine Turner Restritos e a seguinte legenda será aplicável: Martin Alvarez Anna Atkinson Legenda de Direitos Restritos Don Bates O uso, duplicação ou divulgação por aquele Governo estão sujeitos às restrições Marco Berbeek aplicáveis aos programas comerciais de computadores e serão considerados como Andrew Brannigan programas de computador com Direitos Restritos de acordo com a legislação federal Laszlo Czinkoczki daquele Governo, conforme descrito no subparágrafo da legislação norte-americana Michael Gerlach (c)(1)(ii) de DFARS 252.227-7013, Direitos sobre Dados Técnicos e Programas de Sharon Gray Computador (outubro de 1988). Rosita Hanoman Proibida a reprodução total ou parcial desta documentação sem a expressa Mozhe Jalali autorização prévia por escrito da Oracle Corporation ou da Oracle do Brasil Sistemas Sarah Jones Ltda. A cópia deste material, de qualquer forma ou por qualquer meio, eletrônico, Charbel Khouri mecânico ou de outra natureza, inclusive através de processos xerográficos, de Christopher Lawless fotocópia e de gravação, constitui violação da legislação de direitos autorais e será Diana Lorentz punida civil e/ou criminalmente na forma da lei. Nina Minchen Cuong Nguyen Se esta documentação for entregue/distribuída a uma Agência do Governo dos Daphne Nougier Estados Unidos da América do Norte que não esteja subordinada ao Departamento Patrick Odell de Defesa, será então entregue/distribuída com quot;Direitos Restritosquot; conforme definido no FAR 52.227-14, Direitos sobre Dados - Geral, inclusive a Alternativa III (junho Laura Pezzini de 1987). Stacey Procter Maribel Renau As informações contidas neste documento estão sujeitas a alterações sem aviso Bryan Roberts prévio. Se você encontrar algum problema na documentação, envie a Education Helen Robertson Products - Oracle Corporation ou a Education - Oracle do Brasil Sistemas Ltda. Sunshine Salmon uma descrição de tal problema por escrito. A Oracle Corporation e a Oracle do Casa Sharif Brasil Sistemas Ltda. não garantem que este documento esteja isento de erros. Bernard Soleillant Oracle e todos os demais produtos Oracle citados nesta documentação são marcas Craig Spoonemore comerciais ou marcas comerciais registradas da Oracle Corporation. Ruediger Steffan Karla Villasenor Todos os outros nomes de produtos ou de empresas são aqui mencionados Andree Wheeley apenas para fins de identificação e podem ser marcas comerciais de seus Lachlan Williams respectivos proprietários. Editor Nita Brozowski 1-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  3. 3. Mapa de Cursos Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  4. 4. Currículo de Linguagens do Oracle9i Introdução ao Introduction to Oracle9i ou Oracle9i: SQL for Oracle9i: SQL for Oracle9i: SQL for End Users End Users Introduction to Oracle9i: Experienced SQL Users Oracle9i: SQL inClass inClass Basics (Introdução Advanced SQL (Introdução ao Oracle9i para ao Oracle9i: (Oracle9i: SQL Usuários Experientes em SQL) SQL Básico) Avançado) inClass inClass Oracle9i: Program with PL/SQL (Oracle9i: Unidades de Programas PL/SQL) Oracle9i: PL/SQL Oracle9i: Develop PL/SQL Oracle9i: Develop PL/SQL Fundamentals Program Units Program Units inClass Oracle9i: Advanced PL/SQL Oracle9i: Advanced PL/SQL inClass inClass Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  5. 5. I Introdução Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  6. 6. Objetivos Após concluir esta lição, você poderá fazer o seguinte: • Listar os recursos do Oracle9i • Discutir os aspectos teóricos e físicos de um banco de dados relacional • Descrever a implementação Oracle do RDBMS e ORDBMS I-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  7. 7. Oracle9i Escalabilidade Um fornecedor Uma interface Confiabilidade de gerenciamento Modelo de Conjuntos desenvolvimento de habilidades único comuns I-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  8. 8. Oracle9i I-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  9. 9. Oracle9i Application Server Portais A Aplicações Transacionais P A C Business Intelligence intelligence H E Integração I-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  10. 10. Oracle9i Database Dados Relacionais de Objetos Documentos XML XML Multimídia Mensagens I-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  11. 11. Sistema de Gerenciamento de Banco de Dados Relacional de Objetos e Relacional • Modelo relacional e modelo relacional de objetos • Objetos e tipos de dados definidos pelo usuário • Compatibilidade total com o banco de dados relacional • Suporte de objetos grandes e multimídia • Recursos de servidor de banco de dados de alta qualidade I-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  12. 12. Oracle Internet Platform Clientes Qualquer Qualquer cliente Qualquer navegador de correio cliente FTP Ferramentas de desenvolvimento Gerenciamento de sistema Aplicações para Internet SQL SQL Lógica comercial Apresentação e e dados lógica comercial PL/SQL PL/SQL Bancos Servidores de de dados aplicações Java Java Serviços de rede I-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  13. 13. Ciclo de Vida Útil de Desenvolvimento do Sistema Estratégia e análise Projeto Construção e documentação Transição Produção I-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  14. 14. Armazenamento de Dados em Diferentes Mídias Banco de Dados Planilha Arquivo físico eletrônica I-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  15. 15. Conceito de Banco de Dados Relacional • O Dr. E. F. Codd propôs o modelo relacional de sistemas de bancos de dados em 1970. • Ele é a base para o RDBMS (relational database management system). • O modelo relacional consiste nos seguintes itens: – Conjunto de objetos ou relações – Conjunto de operadores para agir sobre as relações – Integridade de dados para fins de precisão e consistência I-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  16. 16. Definição de Banco de Dados Relacional Um banco de dados relacional é um conjunto de relações ou tabelas bidimensionais. Servidor Oracle Nome da Tabela: EMPLOYEES Nome da Tabela: DEPARTMENTS … … I-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  17. 17. Modelos de Dados Modelo de sistema na mente Modelo de entidade do cliente do modelo do cliente Modelo de tabela do modelo de entidade Servidor Oracle Tabelas em disco I-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  18. 18. Modelo de Relacionamento de Entidades • • Crie um diagrama de relacionamento de entidades a Crie um diagrama de relacionamento de entidades a partir de narrativas ou especificações de negócios partir de narrativas ou especificações de negócios EMPLOYEE DEPARTMENT atribuído a #* número #* número * nome * nome composto de o cargo o local • • Cenário Cenário – – quot;. .. .. Atribua um ou mais funcionários a um quot;. Atribua um ou mais funcionários a um departamento. .. .quot; departamento. .quot; – – quot;. .. .. Alguns departamentos ainda não têm quot;. Alguns departamentos ainda não têm funcionários atribuídos a eles. .. .quot; funcionários atribuídos a eles. .quot; I-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  19. 19. Convenções de Modelo para Relacionamento de Entidades Entidade Atributo quot;Soft boxquot; Nome individual Nome exclusivo individual Letras minúsculas Letras maiúsculas Obrigatório marcado com quot;*quot; Sinônimo entre parênteses Opcional marcado com quot;oquot; EMPLOYEE atribuído a DEPARTMENT #* número #* número * nome * nome composto de o cargo o local UID (Identificador Exclusivo) Principal marcado com quot;#quot; Secundário marcado com quot;(#)quot; I-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  20. 20. Relacionando Várias Tabelas • Cada linha de dados de uma tabela é identificada com exclusividade por uma chave primária (PK). • Você pode relacionar logicamente dados de várias tabelas usando as chaves estrangeiras (FK). Nome da Tabela: DEPARTMENTS Nome da Tabela: EMPLOYEES … Chave primária Chave estrangeira Chave primária I-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  21. 21. Terminologia de Banco de Dados Relacional 3 4 2 6 5 1 I-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  22. 22. Propriedades de Banco de Dados Relacional Um banco de dados relacional: • Pode ser acessado e modificado com a execução de instruções SQL (Structured Query Language) • Contém um conjunto de tabelas sem ponteiros físicos • Usa um conjunto de operadores I-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  23. 23. Comunicando-se com um RDBMS Usando o Código SQL A instrução SQL é informada. A instrução é SELECT department_name SELECT department_name enviada ao Oracle FROM FROM departments; departments; Server. Servidor Oracle I-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  24. 24. Sistema de Gerenciamento de Banco de Dados Relacional Servidor Oracle Tabelas de Dicionário usuários de dados I-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  25. 25. Instruções SQL SELECT Recuperação de dados INSERT UPDATE DML (Data Manipulation Language) DELETE MERGE CREATE ALTER DROP DDL (Data Definition Language) RENAME TRUNCATE COMMIT ROLLBACK Controle de transação SAVEPOINT GRANT REVOKE DCL (Data Control Language) I-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  26. 26. Tabelas Usadas no Curso EMPLOYEES DEPARTMENTS JOB_GRADES I-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  27. 27. Resumo • O Oracle9i Server é o banco de dados de computação na Internet. • O Oracle9i é baseado no ORDBMS. • Os bancos de dados relacionais são compostos por relações, gerenciados por operações relacionais e regidos por restrições de integridade de dados. • Com o Oracle Server, você pode armazenar e gerenciar informações usando a linguagem SQL e o mecanismo PL/SQL. I-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  28. 28. 1 Criando Instruções SELECT SQL Básicas Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  29. 29. Objetivos Após concluir esta lição, você poderá fazer o seguinte: • Listar os recursos das instruções SELECT SQL • Executar uma instrução SELECT básica • Diferenciar instruções SQL de comandos do iSQL*Plus 1-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  30. 30. Recursos das Instruções SELECT SQL Projeção Seleção Tabela 1 Tabela 1 Junção Tabela 1 Tabela 2 1-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  31. 31. Instrução SELECT Básica SELECT SELECT *|{[DISTINCT] coluna|expressão [apelido],...} *|{[DISTINCT] coluna|expressão [apelido],...} FROM FROM tabela; tabela; • SELECT identifica quais colunas • FROM identifica qual tabela 1-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  32. 32. Selecionando Todas as Colunas SELECT * FROM departments; 1-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  33. 33. Selecionando Colunas Específicas SELECT department_id, location_id FROM departments; 1-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  34. 34. Criando Instruções SQL • As instruções SQL não fazem distinção entre maiúsculas e minúsculas. • As instruções SQL podem estar em uma ou mais linhas. • As palavras-chave não podem ser abreviadas ou dividas de uma linha para outra. • Normalmente, as cláusulas são colocadas em linhas separadas. • Os recuos são usados para aperfeiçoar a legibilidade. 1-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  35. 35. Defaults de Cabeçalho de Coluna • iSQL*Plus: – Justificação de cabeçalho default: centralizada – Exibição de cabeçalho default: maiúsculas • SQL*Plus: – Os cabeçalhos das colunas de caracteres e datas são justificados à esquerda – Os cabeçalhos das colunas de números são justificados à direita – Exibição de cabeçalho default: maiúsculas 1-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  36. 36. Expressões Aritméticas Crie expressões com dados numéricos e de datas usando operadores aritméticos. Operador Descrição + Adicionar - Subtrair * Multiplicar / Dividir 1-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  37. 37. Usando Operadores Aritméticos SELECT last_name, salary, salary + 300 FROM employees; … 1-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  38. 38. Precedência de Operadores _ * / + • A multiplicação e a divisão têm prioridade sobre a adição e a subtração. • Os operadores com a mesma prioridade são avaliados da esquerda para a direita. • Os parênteses são usados para forçar a avaliação priorizada e para esclarecer as instruções. 1-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  39. 39. Precedência de Operadores SELECT last_name, salary, 12*salary+100 FROM employees; … 1-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  40. 40. Usando Parênteses SELECT last_name, salary, 12*(salary+100) FROM employees; … 1-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  41. 41. Definindo um Valor Nulo • Nulo é um valor que não está disponível, não é atribuído, é desconhecido ou não é aplicável. • Um valor nulo não é o mesmo que um zero ou um espaço em branco. SELECT last_name, job_id, salary, commission_pct FROM employees; … … 1-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  42. 42. Valores Nulos nas Expressões Aritméticas As expressões aritméticas que contêm um valor nulo são avaliadas como nulas. SELECT last_name, 12*salary*commission_pct FROM employees; … … 1-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  43. 43. Definindo um Apelido de Coluna Um apelido de coluna: • Renomeia um cabeçalho de coluna • É útil para cálculos • Segue imediatamente o nome da coluna. Também pode haver a palavra-chave AS opcional entre o nome da coluna e o apelido • Necessita de aspas duplas caso contenha espaços ou caracteres especiais ou faça distinção entre maiúsculas e minúsculas 1-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  44. 44. Usando Apelidos de Coluna SELECT last_name AS name, commission_pct comm FROM employees; … SELECT last_name quot;Namequot;, salary*12 quot;Annual Salaryquot; FROM employees; … 1-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  45. 45. Operador de Concatenação Um operador de concatenação: • Concatena colunas ou strings de caracteres a outras colunas • É representado por duas barras verticais (||) • Cria uma coluna resultante que é uma expressão de caracteres 1-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  46. 46. Usando o Operador de Concatenação SELECT last_name||job_id AS quot;Employeesquot; FROM employees; … 1-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  47. 47. Strings de Caracteres Literais • Um literal é um caractere, um número ou uma data incluída na lista SELECT. • Os valores literais de caracteres e datas devem estar entre aspas simples. • Cada string de caracteres é gerada uma vez para cada linha retornada. 1-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  48. 48. Usando Strings de Caracteres Literais SELECT last_name ||' is a '||job_id AS quot;Employee Detailsquot; FROM employees; … 1-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  49. 49. Linhas Duplicadas A exibição default das consultas é de todas as linhas, incluindo linhas duplicadas. SELECT department_id SELECT department_id FROM FROM employees; employees; … 1-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  50. 50. Eliminando Linhas Duplicadas Elimine linhas duplicadas usando a palavra-chave DISTINCT na cláusula SELECT. SELECT DISTINCT department_id FROM employees; 1-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  51. 51. Interação entre SQL e iSQL*Plus Instruções SQL iSQL*Plus Servidor Internet Oracle Browser iSQL*Plus Resultados da consulta Comandos Relatório formatado Cliente 1-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  52. 52. Instruções SQL Versus Comandos do iSQL*Plus SQL iSQL*Plus • Uma linguagem • Um ambiente • Padrão ANSI • Patenteado pela Oracle • A palavra-chave não • As palavras-chave podem ser pode ser abreviada abreviadas • As instruções • Os comandos não permitem a manipulam definições manipulação dos valores no banco de dados e tabela no de dados banco de dados • É executado em um browser • Carregado centralmente, não precisa ser implementado em cada máquina SQL iSQL*Plus SQL iSQL*Plus 1-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  53. 53. Visão Geral do iSQL*Plus Após efetuar login no iSQL*Plus, você poderá: • Descrever a estrutura de tabela • Editar a instrução SQL • Executar o SQL no iSQL*Plus • Salvar instruções SQL em arquivos e anexá-las a arquivos • Executar instruções armazenadas em arquivos salvos • Carregar comandos de um arquivo de texto na janela Edit (Editar) do iSQL*Plus 1-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  54. 54. Efetuando Login no iSQL*Plus No seu ambiente de browser Windows: 1-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  55. 55. O Ambiente do iSQL*Plus 10 8 9 6 1 7 2 3 4 5 1-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  56. 56. Exibindo a Estrutura de Tabela Use o comando DESCRIBE do iSQL*Plus para exibir a estrutura de uma tabela. DESC[RIBE] nome_da_tabela DESC[RIBE] nome_da_tabela 1-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  57. 57. Exibindo a Estrutura de Tabela DESCRIBE employees DESCRIBE employees 1-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  58. 58. Interagindo com Arquivos de Script SELECT last_name, hire_date, salary FROM employees; 1 2 1-33 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  59. 59. Interagindo com Arquivos de Script 1 D:tempemp_sql.htm SELECT last_name, hire_date, salary 2 FROM employees; 3 1-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  60. 60. Interagindo com Arquivos de Script DESCRIBE employees SELECT first_name, last_name, job_id 1 FROM employees; 3 2 1-35 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  61. 61. Resumo Nesta lição, você aprendeu a: • Criar uma instrução SELECT que: – Retorne todas as linhas e colunas de uma tabela – Retorne colunas especificadas de uma tabela – Use apelidos de coluna para fornecer cabeçalhos de coluna descritivos • Use o ambiente do iSQL*Plus para criar, salvar e executar instruções SQL e comandos do iSQL*Plus. SELECT SELECT *|{[DISTINCT] coluna|expressão [apelido],...} *|{[DISTINCT] coluna|expressão [apelido],...} FROM FROM tabela; tabela; 1-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  62. 62. Visão Geral do Exercício 1 Este exercício abrange os seguintes tópicos: • Selecionando todos os dados a partir de tabelas diferentes • Descrevendo a estrutura de tabelas • Executando cálculos aritméticos e especificando nomes de colunas • Usando o iSQL*Plus 1-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  63. 63. 2 Restringindo e Classificando Dados Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  64. 64. Objetivos Após concluir esta lição, você poderá fazer o seguinte: • Limitar as linhas recuperadas por uma consulta • Classificar as linhas recuperadas por uma consulta 2-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  65. 65. Limitando Linhas Usando uma Seleção EMPLOYEES … quot;recuperar todos os funcionários do departamento 90quot; 2-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  66. 66. Limitando as Linhas Selecionadas • Restrinja as linhas retornadas usando a cláusula WHERE. SELECT *|{[DISTINCT] coluna|expressão [apelido],...} FROM tabela [WHERE condição(ões)]; • A cláusula WHERE segue a cláusula FROM. 2-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  67. 67. Usando a Cláusula WHERE SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90; 2-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  68. 68. Strings de Caracteres e Datas • As strings de caracteres e valores de data aparecem entre aspas simples. • Os valores de caractere fazem distinção entre maiúsculas e minúsculas e os valores de data fazem distinção entre formatos. • O formato de data default é DD-MON-RR. SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'Whalen'; 2-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  69. 69. Condições de Comparação Operador Significado = Igual a > Maior que >= Maior que ou igual a < Menor que <= Menor que ou igual a <> Diferente de 2-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  70. 70. Usando Condições de Comparação SELECT last_name, salary FROM employees WHERE salary <= 3000; 2-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  71. 71. Outras Condições de Comparação Operador Significado BETWEEN Entre dois valores (inclusive), ...AND... IN(set) Corresponde qualquer valor de uma lista LIKE Corresponde um padrão de caractere IS NULL É um valor nulo 2-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  72. 72. Usando a Condição BETWEEN Use a condição BETWEEN para exibir linhas baseadas em uma faixa de valores. SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500; Limite inferior Limite superior 2-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  73. 73. Usando a Condição IN Use a condição de associação IN para testar valores em uma lista. SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201); 2-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  74. 74. Usando a Condição LIKE • Use a condição LIKE para executar pesquisas curingas de valores válidos de string de pesquisa. • As condições de pesquisa podem conter caracteres literais ou números: – % denota zero ou muitos caracteres. – _ denota um caractere. SELECT first_name FROM employees WHERE first_name LIKE 'S%'; 2-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  75. 75. Usando a Condição LIKE • Você pode combinar caracteres de correspondência de padrão. SELECT last_name FROM employees WHERE last_name LIKE '_o%'; • É possível usar o identificador ESCAPE para procurar pelos símbolos % e _. 2-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  76. 76. Usando as Condições NULL Teste para valores nulos com o operador IS NULL. SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL; 2-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  77. 77. Condições Lógicas Operador Significado AND Retorna TRUE se ambas as condições de componentes forem verdadeiras OR Retorna TRUE se uma das condições de componente for verdadeira NOT Retorna TRUE se a condição seguinte for falsa 2-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  78. 78. Usando o Operador AND AND exige que ambas as condições sejam verdadeiras. SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 AND job_id LIKE '%MAN%'; 2-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  79. 79. Usando o Operador OR OR exige que uma das condições seja verdadeira. OR exige que uma das condições seja verdadeira. SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 OR job_id LIKE '%MAN%'; 2-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  80. 80. Usando o Operador NOT SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP'); 2-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  81. 81. Regras de Precedência Ordem de Avaliação Operador 1 Operadores aritméticos 2 Operador de concatenação 3 Condições de comparação 4 IS [NOT] NULL, LIKE, [NOT] IN 5 [NOT] BETWEEN 6 Condição lógica NOT 7 Condição lógica AND 8 Condição lógica OR Sobreponha regras de precedência usando parênteses. 2-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  82. 82. Regras de Precedência SELECT last_name, job_id, salary FROM employees WHERE job_id = 'SA_REP' OR job_id = 'AD_PRES' AND salary > 15000; 2-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  83. 83. Regras de Precedência Use parênteses para forçar a prioridade. Use parênteses para forçar a prioridade. SELECT last_name, job_id, salary FROM employees WHERE (job_id = 'SA_REP' OR job_id = 'AD_PRES') AND salary > 15000; 2-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  84. 84. Cláusula ORDER BY • Classifique linhas com a cláusula ORDER BY – ASC: ordem crescente, default – DESC: ordem decrescente • A cláusula ORDER BY aparece por último na instrução SELECT. SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date; … 2-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  85. 85. Classificando em Ordem Decrescente SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date DESC ; … 2-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  86. 86. Classificando por Apelido de Coluna SELECT employee_id, last_name, salary*12 annsal FROM employees ORDER BY annsal; … 2-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  87. 87. Classificando por Várias Colunas • A ordem da lista ORDER BY é a ordem de classificação. SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC; … • Você pode classificar por uma coluna que não esteja na lista SELECT. 2-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  88. 88. Resumo Nesta lição, você aprendeu a: • Usar a cláusula WHERE para restringir linhas de saída – Usar as condições de comparação – Usar as condições BETWEEN, IN, LIKE e NULL – Aplicar os operadores lógicos AND, OR e NOT • Usar a cláusula ORDER BY para classificar linhas de saída SELECT *|[DISTINCT] coluna|expressão [apelido],...} FROM tabela [WHERE condição(ões)] [ORDER BY coluna, expr, apelido [ASC|DESC]]; 2-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  89. 89. Visão Geral do Exercício 2 Este exercício abrange os seguintes tópicos: • Selecionando dados e alterando a ordem das linhas exibidas • Restringindo linhas usando a cláusula WHERE • Classificando linhas usando a cláusula ORDER BY 2-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  90. 90. 3 Funções de uma Única Linha Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  91. 91. Objetivos Após concluir esta lição, você poderá fazer o seguinte: • Descrever vários tipos de funções disponíveis em SQL • Usar funções de data, número e caractere em instruções SELECT • Descrever o uso das funções de conversão 3-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  92. 92. Funções SQL Entrada Saída Função arg 1 A função executa a ação arg 2 Valor resultante arg n 3-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  93. 93. Dois Tipos de Funções SQL Funções Funções de Funções de uma única linha várias linhas 3-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  94. 94. Funções de uma Única Linha Funções de uma única linha: • Manipulam itens de dados • Aceitam argumentos e retornam um valor • Agem em cada linha retornada • Retornam um resultado por linha • Podem modificar o tipo de dados • Podem ser aninhadas • Aceitam argumentos que podem ser uma coluna ou uma expressão nome_função [(arg1, arg2,...)] nome_função [(arg1, arg2,...)] 3-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  95. 95. Funções de uma Única Linha Caractere Gerais Numéricas Funções de uma única linha Conversão Data 3-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  96. 96. Funções de Caractere Funções de caractere Funções de Funções de manipulação de manipulação de maiúsc./minúsc. caracteres LOWER CONCAT UPPER SUBSTR INITCAP LENGTH INSTR LPAD | RPAD TRIM REPLACE 3-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  97. 97. Funções de Manipulação de Maiúsculas e Minúsculas Essas funções convertem letras maiúsculas em minúsculas e vice-versa nas strings de caracteres. Função Resultado LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE INITCAP('SQL Course') Sql Course 3-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  98. 98. Usando Funções de Manipulação de Maiúsculas e Minúsculas Exibir o número, o nome e o número do departamento do funcionário Higgins: SELECT employee_id, last_name, department_id SELECT employee_id, last_name, department_id FROM FROM employees employees WHERE last_name = 'higgins'; WHERE last_name = 'higgins'; no rows selected no rows selected SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'higgins'; 3-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  99. 99. Funções de Manipulação de Caracteres Estas funções manipulam strings de caracteres: Função Resultado CONCAT('Hello', 'World') HelloWorld SUBSTR('HelloWorld',1,5) Hello LENGTH('HelloWorld') 10 INSTR('HelloWorld', 'W') 6 LPAD(salary,10,'*') *****24000 RPAD(salary, 10, '*') 24000***** TRIM('H' FROM 'HelloWorld') elloWorld 3-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  100. 100. Usando as Funções de Manipulação de Caracteres 1 SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), 2 INSTR(last_name, 'a') quot;Contains 'a'?quot; FROM employees 3 WHERE SUBSTR(job_id, 4) = 'REP'; 1 2 3 3-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  101. 101. Funções Numéricas • ROUND: arredonda o valor para o decimal especificado ROUND(45.926, 2) 45.93 • TRUNC: trunca o valor para o decimal especificado TRUNC(45.926, 2) 45.92 • MOD: retorna o resto da divisão MOD(1600, 300) 100 3-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  102. 102. Usando a Função ROUND 1 2 SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) 3 FROM DUAL; 1 2 3 DUAL é uma tabela fictícia usada para exibir resultados de funções e cálculos. 3-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  103. 103. Usando a Função TRUNC 1 2 SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2) 3 FROM DUAL; 1 2 3 3-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  104. 104. Usando a Função MOD Calcule o que resta de um salário após dividi-lo por 5.000 para todos os funcionários cujo cargo seja representante de vendas. SELECT last_name, salary, MOD(salary, 5000) FROM employees WHERE job_id = 'SA_REP'; 3-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  105. 105. Trabalhando com Datas • O banco de dados Oracle armazena datas em um formato de número interno: século, ano, mês, dia, horas, minutos, segundos. • O formato de exibição de data default é DD-MON-RR. – Permite que você armazene datas do século 21 no século 20 especificando apenas os dois últimos dígitos do ano. – Permite que você armazene datas do século 20 no século 21 da mesma maneira. SELECT last_name, hire_date FROM employees WHERE last_name like 'G%'; 3-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  106. 106. Trabalhando com Datas SYSDATE é uma função que retorna: • Data • Hora 3-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  107. 107. Aritmética com Datas • Adicionar ou subtrair um número de, ou para, uma data para um valor de data resultante. • Subtrair duas datas para localizar o número de dias entre estas datas. • Adicionar horas para uma data dividindo o número de horas por 24. 3-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  108. 108. Usando Operadores Aritméticos com Datas SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS FROM employees WHERE department_id = 90; 3-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  109. 109. Funções de Data Função Descrição MONTHS_BETWEEN Número de meses entre duas datas ADD_MONTHS Adiciona meses do calendário à data NEXT_DAY Dia seguinte à data especificada LAST_DAY Último dia do mês ROUND Arredonda a data TRUNC Trunca a data 3-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  110. 110. Usando Funções de Data • MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') 19.6774194 • ADD_MONTHS ('11-JAN-94',6) '11-JUL-94' • NEXT_DAY ('01-SEP-95','FRIDAY') '08-SEP-95' • LAST_DAY('01-SEP-95') '28-FEB-95' 3-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  111. 111. Usando Funções de Data Suponha que SYSDATE = '25-JUL-95': • ROUND(SYSDATE,'MONTH') 01-AUG-95 • ROUND(SYSDATE ,'YEAR') 01-JAN-96 • TRUNC(SYSDATE ,'MONTH') 01-JUL-95 • TRUNC(SYSDATE ,'YEAR') 01-JAN-95 3-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  112. 112. Exercício 3, Parte Um: Visão Geral Este exercício abrange os seguintes tópicos: • Criando uma consulta que exibe a data atual • Criando consultas que exigem o uso de funções numéricas, de caractere e de data • Executando cálculos de anos e meses de serviço de um funcionário 3-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  113. 113. Funções de Conversão Conversão de tipo de dados Conversão de tipo de Conversão de tipo de dados implícita dados explícita 3-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  114. 114. Conversão de Tipo de Dados Implícita Nas designações, o servidor Oracle pode converter automaticamente o seguinte: De Em VARCHAR2 ou CHAR NUMBER VARCHAR2 ou CHAR DATE NUMBER VARCHAR2 DATE VARCHAR2 3-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  115. 115. Conversão de Tipo de Dados Implícita Na avaliação de expressões, o Oracle Server pode converter automaticamente o seguinte: De Em VARCHAR2 ou CHAR NUMBER VARCHAR2 ou CHAR DATE 3-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  116. 116. Conversão de Tipo de Dados Explícita TO_NUMBER TO_DATE NUMBER CHARACTER DATE TO_CHAR TO_CHAR 3-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  117. 117. Conversão de Tipo de Dados Explícita TO_NUMBER TO_DATE NUMBER CHARACTER DATE TO_CHAR TO_CHAR 3-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  118. 118. Usando a Função TO_CHAR com Datas TO_CHAR(data, 'modelo_formato') TO_CHAR(data, 'modelo_formato') O modelo de formato: • Deve ser delimitado por aspas simples e fazer distinção entre maiúsculas e minúsculas • Pode incluir qualquer elemento de formato de data válido • Tem um elemento fm para remover espaços de preenchimento ou suprimir zeros à esquerda • É separado do valor de data por uma vírgula 3-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  119. 119. Elementos do Modelo de Formato de Data YYYY Ano completo em números YEAR Ano por extenso MM Valor de dois dígitos para o mês MONTH Nome completo do mês MON Abreviação de três letras do mês Abreviação de três letras do dia DY da semana DAY Nome completo do dia da semana DD Dia do mês numérico 3-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  120. 120. Elementos do Modelo de Formato de Data • Os elementos de hora formatam a parte de hora da data. HH24:MI:SS AM 15:45:32 PM • Adicionar strings de caracteres colocando-as entres aspas. DD quot;ofquot; MONTH 12 of OCTOBER • Os sufixos de número escrevem os números por extenso. ddspth fourteenth 3-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  121. 121. Usando a Função TO_CHAR com Datas SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM employees; … 3-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  122. 122. Usando a Função TO_CHAR com Números TO_CHAR(número, 'modelo_formato') TO_CHAR(número, 'modelo_formato') Estes são alguns dos elementos de formato que podem ser usados com a função TO_CHAR para exibir um valor numérico como um caractere: 9 Representa um número 0 Força a exibição de um zero $ Coloca um símbolo de dólar flutuante L Usa o símbolo da moeda local flutuante . Imprime uma vírgula decimal , Imprime um indicador de milhar 3-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  123. 123. Usando a Função TO_CHAR com Números SELECT TO_CHAR(salary, '$99,999.00') SALARY FROM employees WHERE last_name = 'Ernst'; 3-39 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  124. 124. Usando as Funções TO_NUMBER e TO_DATE • Converter uma string de caracteres em um formato de número usando a função TO_NUMBER: TO_NUMBER(caract[, 'modelo_formato']) TO_NUMBER(caract[, 'modelo_formato']) • Converter uma string de caracteres em um formato de data usando a função TO_DATE: TO_DATE(caract[, 'modelo_formato']) TO_DATE(caract[, 'modelo_formato']) • Essas funções têm um modificador fx. Esse modificador especifica a correspondência exata para o argumento de caractere e o modelo de formato de data de uma função TO_DATE 3-40 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  125. 125. Usando as Funções TO_NUMBER e TO_DATE • Converter uma string de caracteres em um formato de número usando a função TO_NUMBER: TO_NUMBER(caract[, 'modelo_formato']) TO_NUMBER(caract[, 'modelo_formato']) • Converter uma string de caracteres em um formato de data usando a função TO_DATE: TO_DATE(caract[, 'modelo_formato']) TO_DATE(caract[, 'modelo_formato']) • Essas funções têm um modificador fx. Esse modificador especifica a correspondência exata para o argumento de caractere e o modelo de formato de data de uma função TO_DATE 3-41 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  126. 126. Formato de Data RR Ano Atual Data Especificada Formato RR Formato YY 1995 27-OCT-95 1995 1995 1995 27-OCT-17 2017 1917 2001 27-OCT-17 2017 2017 2001 27-OCT-95 1995 2095 Se o ano de dois dígitos especificado for: 0–49 50–99 Se os dois A data retornada A data retornada dígitos do 0–49 estará no século estará no século ano atual atual anterior forem: A data retornada A data retornada 50–99 estará no século estará no século seguinte atual 3-42 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  127. 127. Exemplo de Formato de Data RR Para determinar os funcionários admitidos antes de 1990, use oformato RR, que produz os mesmos resultados independentemente de o comando ser executado em 1999 ou agora: SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY') FROM employees WHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR'); 3-43 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  128. 128. Aninhando Funções • As funções de uma única linha podem ser aninhadas em qualquer nível. • As funções aninhadas são avaliadas do nível mais interno para o mais externo. F3(F2(F1(col,arg1),arg2),arg3) Etapa 1 = Resultado 1 Etapa 2 = Resultado 2 Etapa 3 = Resultado 3 3-44 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  129. 129. Aninhando Funções SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager') FROM employees WHERE manager_id IS NULL; 3-45 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  130. 130. Funções gerais Essas funções operam com qualquer tipo de dados e pertencem ao uso de valores nulos. • NVL (expr1, expr2) • NVL2 (expr1, expr2, expr3) • NULLIF (expr1, expr2) • COALESCE (expr1, expr2, ..., exprn) 3-46 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  131. 131. Função NVL Converte um valor nulo em um valor real. • É possível usar os tipos de dados de data, de caractere e de número. • Os tipos de dados devem corresponder a: – NVL(commission_pct,0) – NVL(hire_date,'01-JAN-97') – NVL(job_id,'No Job Yet') 3-47 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  132. 132. Usando a Função NVL SELECT last_name, salary, NVL(commission_pct, 0), 1 (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL 2 FROM employees; … 1 2 3-48 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  133. 133. Usando a Função NVL2 SELECT last_name, salary, commission_pct, 1 NVL2(commission_pct, 'SAL+COMM', 'SAL') income 2 FROM employees WHERE department_id IN (50, 80); 1 2 3-49 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  134. 134. Usando a Função NULLIF 1 SELECT first_name, LENGTH(first_name) quot;expr1quot;, last_name, LENGTH(last_name) quot;expr2quot;, 2 NULLIF(LENGTH(first_name), LENGTH(last_name)) result 3 FROM employees; … 1 2 3 3-50 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  135. 135. Usando a Função COALESCE • A vantagem da função COALESCE em relação à função NVL é que ela pode apresentar diversos valores alternativos. • Se a primeira expressão não for nula, a função retornará essa expressão; caso contrário, a função unirá as expressões restantes. 3-51 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  136. 136. Usando a Função COALESCE SELECT last_name, COALESCE(commission_pct, salary, 10) comm FROM employees ORDER BY commission_pct; … 3-52 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  137. 137. Expressões Condicionais • Propiciam o uso da lógica IF-THEN-ELSE em uma instrução SQL • Use dois métodos: – Expressão CASE – Função DECODE 3-53 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  138. 138. A Expressão CASE Facilita as pesquisas condicionais funcionando como uma instrução IF-THEN-ELSE: CASE expr WHEN CASE expr WHEN comparação_expr1 comparação_expr1 THEN THEN retorna_expr1 retorna_expr1 [WHEN [WHEN comparação_expr2 comparação_expr2 THEN THEN retorna_expr2 retorna_expr2 WHEN WHEN comparação_exprn comparação_exprn THEN THEN retorna_exprn retorna_exprn ELSE ELSE else_expr] else_expr] END END 3-54 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  139. 139. Usando a Expressão CASE Facilita as pesquisas condicionais funcionando como uma instrução IF-THEN-ELSE: SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END quot;REVISED_SALARYquot; FROM employees; … … 3-55 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  140. 140. A Função DECODE Facilita as pesquisas condicionais funcionando como uma instrução CASE ou IF-THEN-ELSE DECODE(col|expressão, pesquisa1, resultado1 DECODE(col|expressão, pesquisa1, resultado1 [, pesquisa2, resultado2,...,] [, pesquisa2, resultado2,...,] [, default]) [, default]) 3-56 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  141. 141. Usando a Função DECODE SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARY FROM employees; … … 3-57 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  142. 142. Usando a Função DECODE Exibir a alíquota de imposto aplicável para cada funcionário do departamento 80. SELECT last_name, salary, DECODE (TRUNC(salary/2000, 0), 0, 0.00, 1, 0.09, 2, 0.20, 3, 0.30, 4, 0.40, 5, 0.42, 6, 0.44, 0.45) TAX_RATE FROM employees WHERE department_id = 80; 3-58 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  143. 143. Resumo Nesta lição, você aprendeu a: • Executar cálculos nos dados usando funções • Modificar itens de dados individuais usando funções • Manipular a saída para grupos de linhas usando funções • Alterar formatos de data para exibição usando funções • Converter tipos de dados de coluna usando funções • Usar funções NVL • Usar a lógica IF-THEN-ELSE 3-59 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  144. 144. Exercício 3, Parte Dois: Visão Geral Este exercício abrange os seguintes tópicos: • Criando consultas que exigem o uso de funções numéricas, de caractere e de data • Usando a concatenação com funções • Criando consultas que diferenciam entre letras maiúsculas e minúsculas para testar a utilidade das funções de caractere • Executando cálculos de anos e meses de serviço de um funcionário • Determinando a data de revisão para um funcionário 3-60 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  145. 145. 4 Exibindo Dados de Várias Tabelas Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  146. 146. Objetivos Após concluir esta lição, você poderá fazer o seguinte: • Criar instruções SELECT para obter acesso a dados de mais de uma tabela usando eqüijunções e não- eqüijunções • Exibir dados que, em geral, não correspondem a uma condição de junção usando junções externas • Unir uma tabela a ela mesma por meio de uma autojunção 4-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  147. 147. Obtendo Dados de Várias Tabelas EMPLOYEES DEPARTMENTS … … 4-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  148. 148. Produtos Cartesianos • Um produto cartesiano será formado quando: – Uma condição de junção for omitida. – Uma condição de junção for inválida. – Todas as linhas da primeira tabela forem unidas a todas as linhas da segunda tabela. • Para evitar um produto Cartesiano, sempre inclua uma condição de junção válida em uma cláusula WHERE. 4-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  149. 149. Gerando um Produto Cartesiano EMPLOYEES (20 linhas) DEPARTMENTS (8 linhas) … Produto cartesiano: 20x8=160 linhas … 4-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  150. 150. Tipos de Junções Junções Patenteadas pela Junções Patenteadas pela Junções Compatíveis com Junções Compatíveis com Oracle (8i e anterior): Oracle (8i e anterior): o SQL: 1999: o SQL: 1999: • Eqüijunção • Junções híbridas • Não-eqüijunção • Junções naturais • Junção externa • Cláusula Using • Autojunção • Junções externas de dois lados ou completas • Condições de junção arbitrárias para junções externas 4-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  151. 151. Unindo Tabelas Usando a Sintaxe Oracle Usar uma junção para consultar dados de uma ou mais tabelas. SELECT SELECT tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna FROM FROM tabela1, tabela2 tabela1, tabela2 WHERE WHERE tabela1.coluna1 = tabela2.coluna2; tabela1.coluna1 = tabela2.coluna2; • Crie uma condição de junção na cláusula WHERE. • Coloque o nome da tabela antes do nome da coluna quando aparecer o mesmo nome de coluna em mais de uma tabela. 4-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  152. 152. O Que é uma Eqüijunção? EMPLOYEES DEPARTMENTS … … Chave Chave estrangeira primária 4-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  153. 153. Recuperando Registros com Eqüijunções SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id; … 4-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  154. 154. Condições de Pesquisa Adicionais Usando o Operador AND EMPLOYEES DEPARTMENTS … … 4-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  155. 155. Qualificando Nomes de Colunas Ambíguos • Use prefixos de tabela para qualificar nomes de colunas que estão em várias tabelas. • Melhore o desempenho usando prefixos de tabela. • Diferencie colunas que possuem nomes idênticos, mas que residam em tabelas diferentes usando apelidos de coluna. 4-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  156. 156. Usando Apelidos de Tabela • Simplifique consultas usando apelidos de tabela. • Melhore o desempenho usando prefixos de tabela. SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e, departments d WHERE e.department_id = d.department_id; 4-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  157. 157. Unindo Mais de Duas Tabelas EMPLOYEES DEPARTMENTS LOCATIONS … • Para unir n tabelas, é necessário um mínimo de n-1 condições de junção. Por exemplo, para unir três tabelas, é necessário um mínimo de duas junções. 4-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  158. 158. Não-eqüijunções EMPLOYEES JOB_GRADES Os salários na tabela EMPLOYEES devem estar … entre o menor e o maior salário da tabela JOB_GRADES 4-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  159. 159. Recuperando Registros com Não-eqüijunções SELECT e.last_name, e.salary, j.grade_level FROM employees e, job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal; … 4-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  160. 160. Junções Externas DEPARTMENTS EMPLOYEES … Não há funcionários no departamento 190. 4-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  161. 161. Sintaxe de Junções Externas • Usar uma junção externa para ver também todas as linhas que não atendem à condição de junção. • O operador de junção externa é o sinal de mais (+). SELECT SELECT tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna FROM FROM tabela1, tabela2 tabela1, tabela2 WHERE WHERE tabela1.coluna(+) = tabela2.coluna; tabela1.coluna(+) = tabela2.coluna; SELECT SELECT tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna FROM FROM tabela1, tabela2 tabela1, tabela2 WHERE WHERE tabela1.coluna = tabela2.coluna(+); tabela1.coluna = tabela2.coluna(+); 4-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  162. 162. Usando Junções Externas SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id ; … 4-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  163. 163. Autojunções EMPLOYEES (WORKER) EMPLOYEES (MANAGER) … … MANAGER_ID na tabela WORKER é igual a EMPLOYEE_ID na tabela MANAGER. 4-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  164. 164. Unindo uma Tabela a ela Mesma SELECT worker.last_name || ' works for ' || manager.last_name FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id ; … 4-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  165. 165. Exercício 4, Parte Um: Visão Geral Este exercício aborda a criação de consultas para unir tabelas usando a sintaxe Oracle. 4-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  166. 166. Unindo Tabelas Usando a Sintaxe SQL: 1999 Usar uma junção para consultar dados de uma ou mais tabelas. SELECT SELECT tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna FROM FROM tabela1 tabela1 [CROSS JOIN tabela2] | [CROSS JOIN tabela2] | [NATURAL JOIN tabela2] | [NATURAL JOIN tabela2] | [JOIN tabela2 USING (nome_coluna)] | [JOIN tabela2 USING (nome_coluna)] | [JOIN tabela2 [JOIN tabela2 ON(tabela1.nome_coluna = tabela2.nome_coluna)] | ON(tabela1.nome_coluna = tabela2.nome_coluna)] | [LEFT|RIGHT|FULL OUTER JOIN tabela2 [LEFT|RIGHT|FULL OUTER JOIN tabela2 ON (tabela1.nome_coluna = tabela2.nome_coluna)]; ON (tabela1.nome_coluna = tabela2.nome_coluna)]; 4-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  167. 167. Criando Junções Híbridas • A cláusula CROSS JOIN cria o produto híbrido de duas tabelas. • Esse processo equivale ao produto cartesiano entre as duas tabelas. SELECT last_name, department_name FROM employees CROSS JOIN departments ; … 4-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  168. 168. Criando Junções Naturais • A cláusula NATURAL JOIN baseia-se em todas as colunas com o mesmo nome nas duas tabelas. • Ela seleciona linhas das duas tabelas que têm valores iguais em todas as colunas correspondentes. • Se as colunas com os mesmos nomes tiverem tipos de dados diferentes, será retornado um erro. 4-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  169. 169. Recuperando Registros com Junções Naturais SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ; 4-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  170. 170. Criando Junções com a Cláusula USING • Se várias colunas tiverem os mesmos nomes mas se os tipos de dados não forem correspondentes, a cláusula NATURAL JOIN poderá ser modificada com a cláusula USING para especificar as colunas que devem ser usadas em uma eqüijunção. • Usar a cláusula USING para estabelecer a correspondência com apenas uma coluna quando mais de uma coluna for correspondente. • Não usar um apelido ou nome de tabela nas colunas às quais foram feitas referências. • As cláusulas NATURAL JOIN e USING são mutuamente excludentes. 4-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  171. 171. Recuperando Registros com a Cláusula USING SELECT e.employee_id, e.last_name, d.location_id FROM employees e JOIN departments d USING (department_id) ; … 4-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  172. 172. Criando Junções com a Cláusula ON • A condição da junção natural é basicamente uma eqüijunção de todas as colunas com o mesmo nome. • Para especificar condições arbitrárias ou colunas a serem unidas, é usada a cláusula ON. • A condição de junção é separada de outras condições de pesquisa. • A cláusula ON facilita a compreensão do código. 4-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  173. 173. Recuperando Registros com a Cláusula ON SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) ; … 4-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  174. 174. Criando Junções Triplas com a Cláusula ON SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; … 4-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  175. 175. Junções INNER Versus OUTER • Na sintaxe SQL: 1999, a junção de duas tabelas que retorna apenas linhas correspondentes é uma junção interna. • Uma junção entre duas tabelas que retorna os resultados da junção interna assim como linhas não correspondentes em tabelas esquerdas (ou direitas) é uma junção externa esquerda (ou direita). • Uma junção entre duas tabelas que retorna os resultados de uma junção interna assim como os resultados de uma junção esquerda ou direita é uma junção externa completa. 4-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  176. 176. LEFT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; … 4-33 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  177. 177. RIGHT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ; … 4-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  178. 178. FULL OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; … 4-35 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  179. 179. Condições Adicionais SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149 ; 4-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  180. 180. Resumo Nesta lição, você aprendeu a usar junções para exibir os dados de várias tabelas na: • Sintaxe patenteada pela Oracle para versões 8i e anteriores • Sintaxe compatível com SQL: 1999 para a versão 9i 4-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  181. 181. Exercício 4, Parte Dois: Visão Geral Este exercício abrange os seguintes tópicos: • Unindo tabelas usando uma eqüijunção • Efetuando junções externas e autojunções • Adicionando condições 4-38 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  182. 182. Agregando Dados 5 Usando Funções de Grupo Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  183. 183. Objetivos Após concluir esta lição, você poderá fazer o seguinte: • Identificar as funções de grupo disponíveis • Descrever o uso de funções de grupo • Agrupar dados usando a cláusula GROUP BY • Incluir ou excluir linhas agrupadas usando a cláusula HAVING 5-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  184. 184. O que são Funções de Grupo? As funções de grupo operam em conjuntos de linhas para fornecer um resultado por grupo. EMPLOYEES O salário máximo na tabela EMPLOYEES. … 5-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  185. 185. Tipos de Funções de Grupo • AVG • COUNT • MAX • MIN • STDDEV • SUM • VARIANCE 5-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  186. 186. Sintaxe de Funções de Grupo SELECT [coluna,] função_de_grupo(coluna), ... FROM tabela [WHERE condição] [GROUP BY coluna] [ORDER BY coluna]; 5-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  187. 187. Usando as Funções AVG e SUM Você pode usar AVG e SUM para dados numéricos. SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%'; 5-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  188. 188. Usando as Funções MIN e MAX Você pode usar MIN e MAX para qualquer tipo de dados. SELECT MIN(hire_date), MAX(hire_date) FROM employees; 5-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  189. 189. Usando a Função COUNT COUNT(*) retorna o número de linhas em uma tabela. SELECT COUNT(*) FROM employees WHERE department_id = 50; 5-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  190. 190. Usando a Função COUNT • COUNT(expr) retorna o número de linhas com valores não-nulos para a expr. • Exiba o número de valores de departamento na tabela EMPLOYEES, excluindo os valores nulos. SELECT COUNT(commission_pct) FROM employees WHERE department_id = 80; 5-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  191. 191. Usando a Palavra-Chave DISTINCT • COUNT(DISTINCT expr) retorna o número de valores não-nulos distintos da expr. • Exiba o número de valores de departamento distintos na tabela EMPLOYEES. SELECT COUNT(DISTINCT department_id) FROM employees; 5-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  192. 192. Funções de Grupo e Valores Nulos As funções de grupo ignoram valores nulos na coluna. SELECT AVG(commission_pct) FROM employees; 5-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  193. 193. Usando a Função NVL com Funções de Grupo A função NVL força as funções de grupo a incluírem valores nulos. SELECT AVG(NVL(commission_pct, 0)) FROM employees; 5-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  194. 194. Criando Grupos de Dados EMPLOYEES 4400 9500 O salário 3500 médio na tabela 6400 EMPLOYEES para cada departamento. 10033 … 5-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  195. 195. Criando Grupos de Dados: A Sintaxe da Cláusula GROUP BY SELECT coluna, função_de_grupo(coluna) FROM tabela [WHERE condição] [GROUP BY expressão_group_by] [ORDER BY coluna]; Divida linhas de uma tabela em grupos menores usando a cláusula GROUP BY. 5-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  196. 196. Usando a Cláusula GROUP BY Todas as colunas da lista SELECT que não estejam em funções de grupo devem estar na cláusula GROUP BY. SELECT department_id, AVG(salary) FROM employees GROUP BY department_id; 5-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  197. 197. Usando a Cláusula GROUP BY A coluna GROUP BY não precisa estar na lista SELECT. SELECT AVG(salary) FROM employees GROUP BY department_id; 5-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  198. 198. Agrupando por mais de uma Coluna EMPLOYEES Adicione os salários na tabela EMPLOYEES para cada cargo, agrupado por … departamento. 5-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  199. 199. Usando a Cláusula GROUP BY em Várias Colunas SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ; 5-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
  200. 200. Consultas Inválidas Usando Funções de Grupo Qualquer coluna ou expressão na lista SELECT que não seja uma função agregada deve estar na cláusula GROUP BY. SELECT SELECT department_id, COUNT(last_name) department_id, COUNT(last_name) FROM FROM employees; employees; SELECT department_id, COUNT(last_name) SELECT department_id, COUNT(last_name) * * ERROR at line 1: ERROR at line 1: ORA-00937: not a single-group group function ORA-00937: not a single-group group function Coluna ausente na cláusula GROUP BY Coluna ausente na cláusula GROUP BY 5-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.

×