Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 2 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #108977
    Avatar de MauricioMauricio
    Participante

      Boa tarde a todos, sou novo no fórum e estou aprendendo Oracle na faculdade, minha dúvida creio que para vocês seja simples.
      Gostaria de saber como realizo uma consulta de uma tabela que mostre todos os telefones que possuam o número 127.
      Meu código está assim:

      select e.phone_number
      from employees e
      where PHONE_NUMBER in (127);

      Tentei utilizando = mas também não funcionou, pesquisei mas não encontrei nada parecido até agora.

      Alguém sabe como fazer isso?

      #108978
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? Então, vc já deve ter aprendido (ou talvez vá aprender, depende de onde vc está no curso) que um dos conceitos Fundamentais de um banco de dados Relacional (outros tipos também o seguem, mas pra RDBMS é uma exigência) é que ele TEM que ser fortemente tipado, ie : TODA e QUALQUER informação a ser inserida nele TEM que estar representada em colunas de uma tabela, E essa coluna vai ter um DATATYPE (ie, CHAR, NUMBER, DATE, etc), datatype esse de um compimento máximo, e que indica e restringe quais dados podem ser inseridos lá….
        Muito bem, essa então é a Primeira Coisa que vc tem que descobrir para poder fazer Consultas numa tabela : qual é o datatype das colunas que vc quer filtrar/usar/consultar ??? Essa informação pode ser extraída do database de muitas maneiras, mas é algo tão fundamental e importante que praticamente ** TODOS ** os programinhas de comunicação que vc venha a usar pra enviar SQLs pro database (seja o simples sqlplus nativo do RDBMS Oracle, seja o freeware Oracle SQL Developer da própria Oracle, sejam programas de terceiros como PL/SQL Developer, SQL Navigator ou TOAD), TODOS já possuem um COMANDO, ou uma TELA, ou algum recurso que já te mostra isso …. No caso do sqlplus é um comando chamado DESCRIBE , que pode ser abreviado por DESC, veja o exemplo :

        C:Usersjlchi_000>sqlplus hr/hr

        SQL*Plus: Release 11.2.0.2.0 Production

        Copyright (c) 1982, 2014, Oracle. All rights reserved.

        Conectado a:
        Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production

        HR:@XE:SQL>desc employees
        Nome Nulo? Tipo
        —————————————– ——– —————————-
        EMPLOYEE_ID NOT NULL NUMBER(6)
        FIRST_NAME VARCHAR2(20)
        LAST_NAME NOT NULL VARCHAR2(25)
        EMAIL NOT NULL VARCHAR2(25)
        PHONE_NUMBER VARCHAR2(20)
        HIRE_DATE NOT NULL DATE
        JOB_ID NOT NULL VARCHAR2(10)
        SALARY NUMBER(8,2)
        COMMISSION_PCT NUMBER(2,2)
        MANAGER_ID NUMBER(6)
        DEPARTMENT_ID NUMBER(4)

        HR:@XE:SQL>

        ok, o DESCRIBE acima tá me mostrando que no MEU database eu tenho na MINHA tabela EMPLOYEES uma coluna chamada PHONE_NUMBER, que é string e aceita até 20 caracteres…. Isso é IMPORTANTE pra vc, programador, porque existem num RDBMS diferentes comandos/funções/operatores que trabalham com STRINGs, com Números, com DATAs – se vc tentar usar usar numa string um operador/comando/função que trabalha com números, não é garantido que dê certo , o RDBMS Oracle ** pode ** ou ** não ** fazer a conversão de tipos….

        Vc já aprendeu (ou vai aprender em breve, creio) as principais rotinas/comandos/funções/operadores Oracle que aceitam/trabalham com strings, e vc verá que há DIVERSAS que que poderia usar : no meu Exemplo, vou optar pelo operador LIKE… Consultando a Documentação Oracle (ou seu livro-texto, enfim) vc vai saber que o LIKE relaciona o conteúdo de uma coluna com uma string modelo, que contém, além de um ‘exemplo’ como vc quer que o conteúdo seja, INDICADORES especiais de caracteres anteriores ou posteriores: no meu exemplo, eu quero que ele encontre o 127 ** não importando ** quantos ou quais caracteres hajam ANTES ou DEPOIS dos caracteres ‘127’ na minha string :

        HR:@XE:SQL>select e.phone_number
        2 from employees e
        3 where PHONE_NUMBER like ‘%127%’;

        PHONE_NUMBER
        ——————–
        515.127.4561
        515.127.4562
        515.127.4563
        515.127.4564
        515.127.4565
        515.127.4566
        650.127.1934
        650.127.1834
        650.127.1734
        650.127.1634

        10 linhas selecionadas.

        HR:@XE:SQL>

        Blz ? Numa string de comparação informada pra um operador LIKE, esses caracteres % indicam isso… Só pra vc entender melhor, digamos que eu quisesse listar os números de telefone que TERMINAM com ’34’, ie, que tenha não importa quantos/quais caracteres antes mas os últimos caracteres sejam o dígito ‘3’ e o dígito ‘4’ :

        HR:@XE:SQL>select e.phone_number
        2 from employees e
        3* where PHONE_NUMBER like ‘%34’;

        PHONE_NUMBER
        ——————–
        650.123.1234
        650.123.2234
        650.123.3234
        650.123.4234
        650.123.5234
        650.124.1334
        650.124.1434
        650.124.5234
        650.124.6234
        650.124.7234
        650.124.8234
        650.127.1934
        650.127.1834
        650.127.1734
        650.127.1634
        650.121.1234
        650.121.2034
        650.121.1834

        18 linhas selecionadas.

        HR:@XE:SQL>

        Tendeu ??? É isso aí…. Evidentemente :

        a) este é o MEU exemplo, de forma alguma é a única possibilidade : o LIKE é apenas ** UM ** dos diversos comandos/operadores/funções que pesquisam strings, há pelo menos uma MEIA DÚZIA de outras maneiras de chegar neste mesmo resultado usando um dos OUTROS comandos/operadores/funções string

        E

        b) como a coluna PHONE_NUMBER é uma string, em tese nada impediria o usuário de enfiar espaços em brancos, pontuação, letras ou o que fosse nessa coluna, talvez até no meio da sub-string ‘127’ que eu quero buscar : fosse um SQL real, de ‘Produção’, provavelmente eu IA TER que me preocupar em REMOVER eventuais caracteres não-numéricos antes de fazer o LIKE, talvez….

        []s

        Chiappa

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress