- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 2 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
7 de setembro de 2017 às 7:08 pm #108977MauricioParticipante
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?
8 de setembro de 2017 às 5:40 pm #108978José Laurindo ChiappaModeradorBlz ? 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 ProductionHR:@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.163410 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.183418 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
-
AutorPosts
- Você deve fazer login para responder a este tópico.