top of page
  • Foto do escritorGabriel Quintella

Comandos DML - Parte 3 - SELECT - Operadores Aritméticos, Lógicos e de Comparação

Atualizado: 20 de abr. de 2021


Salve, Salve meu povo! Espero que todos estejam bem nesse momento crítico de pandemia. Para passar o tempo e colocar o conhecimento em dia, vamos dar continuidade em nossos estudos e gravar mais um episódio da nossa série "Um de Muitos", não tenho dúvidas de que será um sucesso em audiência! kkkkk


No post de hoje vamos abordar um assunto ou melhor três que quando combinados com a cláusula WHERE na linguagem SQL, nos permitem realizar consultas em banco de dados, das mais variadas formas possíveis.


Dando inicio no assunto, ao usar o comando SELECT, conseguimos implementar diversos filtros, que ajudam não apenas em obter dados específicos, mais auxilia também na busca da performance ideal, tornando assim o processo mais rápido, eficaz e eficiente. Tudo de bom!


Diante da vasta lista de recursos que podemos usar no comando SELECT, estão os operadores aritméticos, lógicos e de comparação que podem ser usados como filtros para obtenção de dados e até na composição de valores.


Esses operadores são usados em consultas para realizar tarefas como somar ou agrupar valores, para comparar valores, concatenar e até para refinar consultas. Além disso quando combinados com outras funções auxiliam na construções de consultas para comparação de valores e até estabelecer diferenças entre um resultado e outro.


Antes de iniciar o assunto, faça o download do arquivo abaixo e faça a criação da tabela Empregados.



Operadores Aritméticos


De acordo com a documentação oficial da Microsoft, os operadores aritméticos executam ações matemáticas entre duas expressões de um ou mais tipos de dados.


Os operadores de adição (+) e de subtração (-) também podem ser usados para executar operações aritméticas em valores de datetime e smalldatetime.


Para criar expressões aritméticas em uma consulta SQL usamos os operadores abaixo:



É errado afirmar que os operadores acima só podem ser usados em colunas do tipo numérico. Quando as colunas forem numéricas, ocorrerá com esses tipos de dados operações matemáticas e quando for do tipo string, o que ocorrerá será a concatenação entre elas.


Vamos analisar juntos o código abaixo.



-- # Consulta Empregados, salário e a concatenação das colunas primeiro_nome e sobrenome
SELECT primeiro_nome, sobrenome, primeiro_nome + ' ' + sobrenome nome
FROM empregados;


Se for afirmado que as colunas primeiro_nome e sobrenome são do tipo varchar(100), o que acham que irá ocorrer?


Pois bem, quando tratamos de campos do tipo strings, o sinal de "+" (soma) é interpretado como uma forma de concatenar valores, como se tivéssemos usando a função CONCAT(), ou seja, juntar. Execute o código abaixo e repare que os resultados são idênticos!



-- # Concatenação das colunas primeiro_nome e sobrenome
SELECT primeiro_nome, sobrenome, primeiro_nome + ' ' + sobrenome nome
FROM empregados;

SELECT primeiro_nome, sobrenome, concat(primeiro_nome , ' ' , sobrenome) nome
FROM empregados;

Você poderá usar operadores aritméticos em qualquer cláusula, exceto na cláusula FROM.



-- # Consulta Empregados, salário e o seu salário anual
SELECT primeiro_nome, salario, salario*12 As salario_anual
FROM empregados;

Já no exemplo acima, como a coluna "salario" é do tipo numérico, a instrução é interpretada como uma operação matemática de multiplicação onde o valor da coluna "salario" é multiplicado por 12, retornando assim o valor do salário anual (salario_anual) do funcionário.


Precedência de operadores


Quando usamos vários operadores em uma consulta é importante observarmos qual será a precedência dos operadores.


Analisando a estrutura da tabela empregados encontramos a coluna salário. Supondo que além do salário, cada empregado receberá no final do ano um bônus de R$ 600,00.


Como que você faria a escrita dessa consulta para descobrir o rendimento anual de cada empregado? Vou escrever de duas formas e você precisará identificar qual que é o correto! Vamos ao código.


1º Exemplo - Somar ao salário o valor de R$ 600,00 e em seguida multiplicar por 12 meses.



-- # Cálculo do Rendimento Anual + Bônus
SELECT primeiro_nome, salario, (salario+600) * 12 As salario_anual
FROM empregados;

2º Exemplo - Multiplicar o salário por 12 meses e adicionar o bônus de R$ 600,00.



-- # Cálculo do Rendimento Anual + Bônus
SELECT nome, salario, 12*salário+600 As salario_anual
FROM empregados;

Executem as duas consultas e observem o resultado! Vamos comentar agora as duas.


No primeiro exemplo, consideramos que o bônus de R$ 600,00 passou a ser mensal, ou seja, traduzindo isso em código, será necessário somar o salário mais o bônus e somente depois multiplicar por 12. Para que isso seja possível ocorrer, precisamos usar os parênteses, mais por que isso? Precisamos usar os parênteses porque primeiro precisamos realizar a soma do salário mais o bônus e somente depois multiplicar o resultado por 12, dessa forma tudo que estiver dentro do parêntese é executado primeiro. Já no segundo exemplo, cada empregado receberia o bônus uma vez no ano.


Deixo o arquivo com todas as consultas usadas nesse operador.








Operadores de Comparação


Voltando na documentação oficial da Microsoft, encontramos a definição de que os operadores de comparação testam se duas expressões são iguais. Os operadores de comparação podem ser usados em todas as expressões, exceto em expressões dos tipos de dados text, ntext ou image.




-- # Consulta empregados filtrando pelo código do empregado
SELECT codigo_empregado, primeiro_nome, salario
FROM empregados
WHERE codigo_empregado=4;

Com o grupo de operadores de comparação, conseguimos realizar diversas formas de comparação de valores e até restringir resultados. No primeiro exemplo, construímos uma consulta para filtrar na cláusula WHERE, o empregado que possui o código 4.


Agora vamos para o segundo exemplo.



-- # Consulta Empregados montando faixa salarial (uma outra forma de usar os operadores de comparação fora da cláusula WHERE
SELECT codigo_empregado
,primeiro_nome
,salario
,case when salario <= 1000 then 'Até 1000'
when salario > 1000 and salario <= 2000 then 'De 1001 à 2000'
when salario > 2000 and salario <= 5000 then 'De 2001 à 5000'
else 'Acima de 5000'
end faixa_salarial
FROM empregados;

E para finalizar, analisando esse segundo exemplo, utilizamos os operadores para montar a nossa faixa salarial.


Segue o arquivo com todas as consultas utilizando operadores de comparação.







Operadores Lógicos


A utilização dos Operadores Lógicos permite que duas condições tenham de produzir um resultado único, ou seja, um registro para ser apresentado o retorno deverá atender a uma condição verdadeira.


Nesse tópico vamos focar em falar sobre a aplicabilidade dos operadores lógicos AND, OR, IN, NOT IN, EXISTS, NOT EXISTS, LIKE, NOT LIKE, BETWEEN e NOT BETWEEN sempre aplicando na cláusula WHERE porém irei da uma palinha sem detalhes de outras forma.


Operadores Lógicos AND, OR e NOT


Vamos analisar as explicações abaixo.


  • AND Retorna TRUE se ambas as condições forem verdadeiras

  • OR Retorna TRUE se uma das condições for verdadeira

  • NOT Retorna TRUE se a condição seguinte for falsa

Analise com calma as duas consultas abaixo.


Consulta 1 - Montar uma consulta para retornar todos os empregados residentes no estado de São Paulo e que possuam salário maior que R$ 2200,00.

Dica: Duas condições, estado igual a SP E salário maior que R$ 2200,00.

Para retornar TODAS as duas PRECISAM seja verdadeira.



-- # Consulta empregados moradores de SP E com salário maior que 2200
SELECT 
primeiro_nome
, salário
, cidade
, estado
FROM empregados
WHERE estado='SP' 
AND salario > 2200;

Consulta 2 - Montar uma consulta para retornar todos os empregados residentes no estado de São Paulo ou que possuam salário maior que R$ 2200,00.

Dica: Duas condições, estado igual a SP OU salário maior que R$ 2200,00.

Para retornar basta que UMA DELAS seja verdadeira.



-- # Consulta empregados moradores de SP OU com salário maior que 2200
SELECT 
primeiro_nome
, salário
, cidade
, estado
FROM empregados
WHERE estado='SP' 
OR salario > 2200;

Em ambos os casos aplicamos os mesmos filtros, moradores do estado de São Paulo e salário maior que R$ 2200,00. Porém observem com detalhes os operadores AND na primeira consulta e o OR na segunda.


Na primeira consulta, serão retornados APENAS os registros que satisfazerem as duas condições, já na segunda os que atenderem a PELO MENOS uma das duas condições.


Operadores Lógicos "IN e NOT IN" e "EXISTS e NOT EXISTS"


Mole, mole, bora partir pro próximo! Vamos abordar agora outros dois pares de operadores lógicos, "IN e NOT IN" e "EXISTS e NOT EXISTS".


O operador IN é muito usado quando precisamos fazer uma consulta e essa consulta possuir como filtro uma lista de valores. Observem o exemplo.



-- # Consulta empregados moradores QUE SÃO do estado SP e RJ
SELECT 
primeiro_nome
, salario
, cidade
, estado
FROM empregados
WHERE estado IN ('SP' , 'RJ');



Na query acima informamos que o nosso retorno deverá ser de todos os empregados dos estados RJ e SP. Pensando em boas práticas, sempre que a nossa requisição de pesquisa possuir mais de uma condição de pesquisa, é aconselhado o usar o operador IN.





Agora vamos para o mesmo cenário porém usando o operador lógico OR.



-- # Consulta empregados moradores QUE SÃO do estado SP e RJ
SELECT 
primeiro_nome
, salario
, cidade
, estado
FROM empregados
WHERE estado = 'RJ' OR estado = 'SP';

Observem como que é mais simples montar a sua consulta usando o comando IN. Alguns comandos foram criados para simplificar a sua vida, esse operador lógico não foge a sua responsabilidade!


O operador NOT IN possui o comportamento contrário do IN, enquanto segundo retorna todos os elementos contidos em uma lista, o NOT IN, retorno tudo que não está presente na lista. Vamos analisar o próximo exemplo.



-- # Consulta empregados moradores que NÃO SÃO de SP e RJ
SELECT 
primeiro_nome
, salario
, cidade
, estado
FROM empregados
WHERE estado NOT IN ('SP' , 'RJ');

Da mesma forma que utilizamos o comando OR para substituir o operador IN , o operador AND funciona da mesma forma que o operador NOT IN. Vamos ao exemplo.



-- # Consulta empregados moradores que NÃO SÃO de SP e RJ
SELECT 
primeiro_nome
, salario
, cidade
, estado
FROM empregados
WHERE estado <> 'SP' AND  estado <> 'RJ';

A combinação de IN com OR e NOT IN com AND, respeita o que falamos acima. Quando especificamos o operador IN estamos falando em uma lista e com o operador OR é a mesma coisa, estado igual a RJ OU estado igual a SP, já quando falamos do operador NOT IN é a negação de tudo que está na lista e com o operador AND também, estado diferente de RJ E estado diferente SP.


Bora partir para outro operador, dessa vez vamos tratar do EXISTS ou NOT EXISTS.


Uma pergunta que muitos fazem, quando usar e quais são as melhores práticas para o o uso dos operadores "IN ou NOT IN" ou "EXISTS ou NOT EXISTS"?


Vou tentar explicar, mais antes disso vou deixar mais duas dúvidas!


  • Qual dos dois é melhor quando se considera o desempenho?

  • Em qual ocasião devo usar um ou outro?


Vamos pirar mais ainda! Para resposta acima eu afirmaria que tudo vai depender de qual situação você está. Se você sabe o que pretende pesquisar ou excluir da sua consulta, o mais recomendado é o comando IN ou NOT IN, conforme exemplo que usamos acima quando precisamos retornar todos os empregados residentes nos estados RJ e SP.


Analise o exemplo abaixo.



-- # Consulta de todos os cargos que foram associados a pelo menos 1 empregado
SELECT CodCargo
, NomeCargo 
FROM dbo.Cargo
WHERE CodCargo IN (SELECT CodCargo FROM dbo.Empregado)

Agora se você for fazer um sub consulta, o que recomendo é o uso do EXISTS ou NOT EXISTS, pois no primeiro resultado que ele encontrar ele já irá validar e passar para o próximo registro.



-- # Consulta de todos os cargos que NÃO foram associados a pelo menos 1 empregado
SELECT CodCargo
, NomeCargo 
FROM dbo.Cargo
WHERE CodCargo NOT IN (SELECT CodCargo FROM dbo.Empregado)

Operadores Lógicos "LIKE ou NOT LIKE"


Não podemos deixar de falar do operador LIKE. Ele permite comparar o valor de uma coluna com uma sequências de caracteres. Observem as possibilidades utilização do operador LIKE.



-- # Consulta todos os empregados de nome IGUAL GABRIEL. Dessa forma ele tem o mesmo comportamento que o IGUAL
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome LIKE 'GABRIEL'

-- # Consulta todos os empregados que o nome INICIE com a palavra GABRIEL
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome LIKE 'GABRIEL%'

-- # Consulta todos os empregados que o nome TERMINE com a palavra GABRIEL
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome LIKE '%GABRIEL'

-- # Consulta todos os empregados que POSSUEM na coluna nome a palavra GABRIEL, em qualquer lugar
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome LIKE '%GABRIEL%'

Existe também o NOT LIKE, ele possui o comportamento contrário do LIKE.



-- # Consulta todos os empregados de nome NÃO É IGUAL GABRIEL. Dessa forma ele tem o mesmo comportamento que o DIFERENTE
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome NOT LIKE 'GABRIEL'

-- # Consulta todos os empregados que o nome NÃO inicie com a palavra GABRIEL
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome NOT LIKE 'GABRIEL%'

-- # Consulta todos os empregados que o nome NÃO termine com a palavra GABRIEL
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome NOT LIKE '%GABRIEL'

-- # Consulta todos os empregados que NÃO possuem na coluna nome a palavra GABRIEL, em qualquer lugar
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE primeiro_nome NOT LIKE '%GABRIEL%'

Operadores Lógicos "BETWEEN ou NOT BETWEEN"


E para finalizar, vamos falar dos operadores BETWEEN e NOT BETWEEN. O operador BETWEEN tem a finalidade de permitir a consulta entre uma determinada faixa de valores.

De modo semelhante que ocorre com outros operadores, é possível também a utilização de diversos operador para busca de registros em uma faixa de valores. Mais pense em praticidade, pensou? Pois bem, a resposta é o BETWWEN. Como ele permite checar se o valor de uma coluna encontra-se em um determinado intervalo, ele pode ser utilizado para verificar intervalos de data, valores, caracteres, entre outros e o operador NOT BETWEEN, tem o comportamento contrário, permite consultar os valores que não se encontram em uma determinada faixa.



-- # Consulta todos os empregados que POSSUEM salario na faixa de 1000 à 5000
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE salario BETWEEN '1000' AND '5000';


-- # Consulta todos os empregados que NÃO possuem salario na faixa de 1000 à 5000
SELECT primeiro_nome, salario, cidade, estado
FROM empregados
WHERE salario NOT BETWEEN '1000' AND '5000';

Abaixo deixo um arquivo com os scripts usados nesse tópico.










Pensei que esse post não terminaria nunca, ufa! Vamos recapitular o que falamos. Demos início a nossa jornada falando sobre os operadores aritméticos e explicamos que eles podem ser utilizados para realizar operações matemáticas quando combinados com colunas do tipo numérico e quando forem do tipo string, esses operadores assumem a função de concatenação.


Avançando no assunto, debatemos como os operadores de comparação são usados geralmente em condições que comparam uma expressão a outro valor ou expressão.


Já os operadores lógicos fazem com que duas condições tenham de produzir um resultado único, ou seja, uma linha só poderá ser retornada se o resultado da condição for verdadeiro.


Um assunto bem extenso e bacana de comentar. Espero que tenham curtido.


No próximo assunto iremos falar sobre as funções de agregação, agrupamento e ordenação. Esse assunto vai complementar o outro, vocês também irão curtir!


Grande abraço e até breve!











47 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page