logo

Aula 03 – Oracle/SQL – Pesquisas condicionais

Ola caros alunos,

Neste post damos continuidade aos nossos estudos sobre banco de dados Oracle, onde iniciamos nossos estudos com a linguagem SQL. Este post é a continuação do “Aula 02 – Oracle – Comandos SQL básicos – parte 01” onde vimos o comando select com alguns parâmetros de saída importantes. Neste post já começamos a estudar as pesquisas condicionais e parâmetros de comparação.

espero que vocês gostem!

ATENÇÃO: para que seja possível fazer estes exercícios, é necessário que você assista a videoaula01 sobre Oracle, onde ensino você a preparar este ambiente. É fácil e rápido! (Vá assistir e deixe de preguiça!)

Consultas select com condições simples

Exemplo 01:
select * from employees
(Observe que este comando retorna TODOS os registros de TODOS os campos (*), pois não há nenhuma condição de filtro para os resultados da pesquisa)

Exemplo 02:
select * from employees
where job_id = ‘ST_CLERK’

Explicação:
Veja que, com o uso do parâmetro WHERE, eu indico que desejo obter apenas os registros cujo job_id seja igual a ST_CLERK

“WHERE” significa “onde”, em nosso idioma. É semelhante as velhas e conhecidas questões de matemática. Veja:

Calcule a soma de X+y, ONDE x=2 e y=5

x+y -> 2+5 -> Resposta: 7

Entenderam?

No entanto a clausula WHERE tem diversos tipos de parâmetros, onde é possível refinar e personalizar a pesquisa para se obter resultados mediante um série de cenários diferentes. É o que veremos nos exemplos a seguir!

Consultas select com condições parciais

Exemplo 03:
select * from employees
where job_id = ‘ST%’

Explicação:
NO exemplo acima tentamos obter todos os registros que COMECEM com o prefixo “ST”, independente do restante do nome. Quando você quiser fazer a pesquisa em um campo, pesquisando apenas parte de seu conteúdo, independente do restante do nome, você poderá substituir a parte que “pouco importa” pelo caractere curinga “%”(Sinal de porcentagem).
MAS… Este comando não irá retornar nenhum resultado pelo seguinte:
1) O caractere curinga não deve ser utilizado com o sinal de igual “=”
2) Quando você for fazer uma consulta PARCIAL, buscando apenas parte do valor de um registro, o correto é utilizar o parâmetro “LIKE” com o caractere curinga.
3) Quando se utiliza o sinal de “=”, o SGBD entende que você quer EXATAMENTE aquele valor
4) Quando se utiliza o parâmetro “LIKE”o SGBD entende que você quer pesquisar por registros que CONTENHAM aquele “pedaço declarado explicitamente” (No nosso caso o “ST”), independente do que venha depois dele (representado pelo caractere curinga “%”)

Veja este mesmo comando escrito com os parâmetros adequados, no exemplo 04.

Exemplo 04:
select * from employees
where job_id like ‘ST%’

Explicação:
Veja que, agora, foram retornados TODOS os registros cujo job_id iniciem com “ST”, independente do que venha depois deste prefixo

Observação: O SQL é case sensitive, portanto o ST tem de ser escrito em MAIÚSCULO

Exemplo 05
select last_name, job_id, salary from employees
where job_id like ‘ST%’

Explicação:
Este comando é idêntico ao de anterior, desta vez eu apenas defini quais campos eu queria que fossem exibidos. Vale lembrar que, o fato de estar utilizando “job_id” como condição da consulta, não significa que ele tenha que ser exibido.

Exemplo 06:
select last_name, salary from employees
where job_id like ‘ST%’

Explicação: Veja que o campo job_id foi retirado do conjunto de campos a serem exibidos. No entanto, os registros exibidos em last_name e salary sao APENAS dos funcionários que tem o JOB_ID iniciando por “ST”

Consultas select com condições multiplas

Exemplo 07:
select last_name, salary, job_id from employees
where last_name like ‘G%’ and salary > 5000

Explicação: Aqui temos um caso de consulta com condições múltiplas. Nesta consulta eu quero pesquisar por todos registros cujo nome do funcionário comece com “G” E que ganhem salários maiores do que 5000.

Observação: CUIDADO com o uso do “E” e do “OU”, pois eles apresentam saídas completamente diferentes, veja a logica:

E – O resultado DEVE atender as duas condições (nome e salario), obrigatoriamente
OU – O resultado pode obedecer uma condição (nome) OU outra condição (salario) OOOOOUUUU obedecer as duas (O nome e o salario)

Agora vamos ver esta mesma pesquisa no exemplo abaixo, trocando o “E” pelo “OU”

Exemplo 08:

select last_name, salary, job_id from employees
where last_name like ‘G%’ or salary > 5000

Explicação: Veja que a utilização do parâmetro “OU” já nos trouxe mais resultados, por ser menos restritivo do que o parâmetro “E”, afinal de contas, basta atender uma das duas condições, ou então as duas, para que o registro se apresente na saída da pesquisa.

Exemplo 09:
select last_name, job_id, salary from employees
where salary > 8000 and job_id in (‘IT_PROG’, ‘ST_MAN’,’FI_ACCOUNT’)

explicação:
neste exemplo fiz uso da parâmetro condicional “in” (Traduzindo, significa algo semelhante a “incluindo estes valores”)que serve para indicar diversos valores que podem atender a pesquisa. Assim, todos os job_id que forem iguais a IT_PROG, ST_MAN e FI_ACCOUNT, cujo salario seja maior que 8000, irao ser retornados. faça o seguinte teste: diminua o valor do salario para 5000 e veja que mais resultados serão obtidos para os mesmos job_id

Exemplo 10:
select last_name, job_id, salary from employees
where salary in (‘9000’, ‘6200’,’2800′)

explicação:
Desta vez utilizando apenas uma condicional, indico que desejo obter todos os registros cujo os salários sejam iguais a 9000, 6200 ou 2800. É uma consulta semelhante a esta abaixo:

select last_name, job_id, salary from employees
where salary = 9000 or salary = 6200 or salary = 2800

A diferença, neste caso, esta no uso otimizado da linguagem, sendo a primeira utilizada o modo mais adequado. é como aquele ditado: “Todo mundo sabe bater um prego na parede do seu jeito, mais um destes jeitos é sempre o mais eficiente”

Exemplo 11:
select last_name, job_id, salary, commission_pct from employees

Veja que esta consulta retorna todos os registros, inclusive os nulos constantes no campo “commission_pct”. Mas… e quando não quisermos que os nulos sejam retornados na pesquisa?

Para resolver isto, utilize a seguinte condicional:

select last_name, job_id, salary, commission_pct from employees
where commission_pct is not null

Caso se deseje obter os registros cuja comissão seja nula, faça o seguinte:

select last_name, job_id, salary, commission_pct from employees
where commission_pct is null

Exemplo 12:
select last_name, job_id, salary from employees
where salary between 5000 and 7000

Explicação: Nesta consulta buscamos todos os registros cujo os salários estejam entre 5000 e 7000 (between significa entre)

Mas… e se quisermos os registros que NÃO GANHEM salários entre 5000 e 7000? use a mesma pesquisa, com uma pequena modificação, conforme abaixo:

select last_name, job_id, salary from employees
where salary not between 5000 and 7000

exemplo 13:
select last_name, job_id, salary from employees
where job_id not in (‘IT_PROG’, ‘ST_MAN’,’FI_ACCOUNT’, ‘AD_VP’, ‘SA_REP’)

explicação:
Caso eu queria ELIMINAR da saída de minha pesquisa, determinados dados como job_id que contenham ‘IT_PROG’, ‘ST_MAN’,’FI_ACCOUNT’, ‘AD_VP’ e ‘SA_REP’, basta utilizar o parâmetro “NOT IN” (traduzindo é algo como “não incluindo este valores”)

Exemplo 14
select last_name, job_id, salary from employees
where job_id != ‘IT_PROG’ or job_id ^= ‘ST_MAN’ or job_id <> ‘FI_ACCOUNT’

Explicação:
esta é uma outra maneira de se “eliminar” registros que contenham certos tipos de valores. Neste caso, a consulta deve retornar os registros cujo job_id SEJAM DIFERENTE de IT_PROG, ST_MAN e FI_ACCOUNT (!=, ^= e <> significam “diferente de”)

Exemplo 15:
Lembram no “exemplo 7”, onde usamos o comando:

select last_name, salary, job_id from employees
where last_name like ‘G%’ and salary > 5000

Eu falei que o valor da condição “last_name” tinha de ser declarada com “G” maiúsculo (devido ao fato do SQL ser case sensitive para os valores literais), lembram? Pois bem… você pode utilizar o valor “g” (minusculo) na pesquisa e utilizar o parâmetro modificador INITCAP para converter a PRIMEIRA LETRA do valor para maiúsculo. Veja:

select last_name, salary, job_id from employees
where last_name like initcap(‘g%’) and salary > 5000

Observação: Você também poderá substituir “INITCAP” por UPPER (quando quiser converter todas as letras para maiúsculo) e LOWER (quando quiser converter todas as letras para minusculo)

vamos parando por aqui nesta aula. Agora que você já estudou tudo, procure aqui no site pela aula 04 de Oracle, onde abordaremos a manipulação das saídas das pesquisas com as clausulas group by e order by!




387 Visitas totais: 3 Visitas hoje:
Foto de perfil de Prof. César Felipe Gonçalves Silva
Graduado em gestão de infraestrutura de redes e pós-graduado nesta mesma área pela Universidade Tiradentes (UNIT), uma das maiores universidades do Nordeste. É escritor do Livro “Configuração de switches e roteadores CISCO” (Brasport/2013) e autor de 3 cursos online em vídeo aulas para o Instituto Politécnico de Educação à Distância (IPED – São Paulo). Professor há mais de 16 anos, atualmente escreve seu segundo livro na área de infraestrutura de redes de computadores.

Deixe um comentário

*

captcha *

Pular para a barra de ferramentas