Operadores lógicos da linguagem SQL

Alexandre Neukirchen
7 min readSep 4, 2020

--

Aplicação de cinco consultas SQL utilizando operadores que ajudam a resolver problemas na aquisição de dados.

Photo by Stephen Dawson on Unsplash

Neste novo post vou dar continuidade no assunto SQL. Caso você queira, pode acessar esse link onde explico sobre Joins. Antes de mais nada é importante ressaltar que essa linguagem por muitos é considerada a pioneira quando tratamos do assunto análise de dados. Independente dela ser a primeira ou a última, o fato é que ela é muito versátil e amplamente utilizada no mundo dos negócios.

Vou apresentar alguns operadores que são úteis para quem trabalha ou deseja trabalhar com dados ou na área de tecnologia da informação. É muito importante termos a percepção de que a linguagem é uma só, no entanto, os diferentes fabricantes de SGDB (sistemas gerenciadores de bancos de dados) relacionais implementam diferentes funcionalidades na sintaxe da linguagem, fazendo com que alguns recursos existam somente no MySQL e não no Oracle por exemplo. Os experimentos foram realizados utilizando o PostgreSQL versão 4.21 com sistema operacional Windows 10, dessa forma o conteúdo apresentado pode não funcionar perfeitamente se for utilizado outra configuração.

Vamos começar?

No mundo real podemos nos deparar com uma vasta gama de problemas, consequentemente inúmeras formas de resolver esses problemas. As vezes perdemos muito tempo para fazer algo simples, por isso separei alguns comandos úteis que podem te ajudar a resolver problemas relacionados a aquisição de dados. A linguagem SQL possui muitos operadores conforme este post, porém abaixo tem cinco que considero importantes:

  • Between
  • Group By
  • Having
  • In
  • Like

Estrutura do banco de dados

Lembrando que no fim do post tem um link para o download com todos os scripts necessários.

Para realizar o experimento criei três tabelas Receita, Ingrediente e ReceitaIngrediente, esta última será usada como tabela de referência, ou seja, nela será armazenada as informações da receita e dos ingredientes que compõem a receita. Segue a estrutura das tabelas em linguagem SQL.

Tabela de Receita
Tabela de Ingrediente
Tabela de ReceitaIngrediente

Repare que na tabela ReceitaIngrediente temos duas restrições (CONSTRAINTS), cada restrição possui uma chave-estrangeira (FOREIGN KEY) e uma referência (REFERENCES). As chaves-estrangeiras são campos que fazem referência para campos de outras tabelas. Então temos a declaração da chave-estrangeira, entre parenteses o nome do campo da tabela origem que estamos fazendo referência, e na referência informamos a tabela destino e entre parenteses o nome do campo da tabela destino.

Composição de uma constraint

Abaixo o diagrama entidade relacionamento da estrutura de dados na qual iremos realizar o experimento:

Diagrama ER (entidade relacionamento) do experimento

Agora que já conhecemos a estrutura dos dados e a lógica embutida neles vamos verificar os dados:

Dados da tabela Receita
Dados da tabela Ingrediente
Dados da tabela ReceitaIngrediente

Dando continuidade vamos realizar uma consulta onde iremos listar todas as receitas junto com seus ingredientes e as quantidades de cada um. A consulta ficará da seguinte forma:

Consulta de todas as receitas e seus ingredientes
Resultado da consulta de todas as receitas e seus ingredientes

Between

Este operador é uma forma abreviada da instrução ≥ AND ≤. Ele é utilizado para recuperar valores que se enquadrem em determinado intervalo. Por exemplo, se quisermos consultar quais receitas que em sua formulação possuem entre 1 e 3 colheres, devemos incluir a validação com o operador Between e mais uma validação simples com o operador And. A consulta deve ficar da seguinte forma:

Consulta utilizando o operador between
Resultado da consulta com o operador between

Repare que a moqueca de peixe não está na lista (que pecado), pois segundo nosso “livro de receita”, ela possui 4 colheres de azeite de dendê.

Group By

O operador Group By, é utilizado quando queremos agrupar valores de uma coluna. Grande parte de relatórios que vemos com totalizadores de alguma informação está utilizando ele. Aqui utilizo ele para consultar o número de ingredientes que compõe cada receita, sendo necessário incluir o operador e informar qual campo deve-se agrupar:

Consulta utilizando o operador group by
Resultado da consulta com o operador group by

Um ponto importante sobre o uso deste operador; sempre devemos utilizá-lo junto com alguma função de agregação. No exemplo utilizei a função Count que contou quantos ingredientes tem cada receita, após é agrupado os totais por receita. Sempre que você quiser adicionar novos campos na consulta é necessário informar o nome do campo após a instrução Select e também junto ao operador Group By separando cada campo por vírgula.

Having

Este operador é muito similar ao Where, no entanto, ele é somente utilizado em conjunto com o operador Group By. Enquanto o operador Where aplica uma condição para cada registro retornado na consulta, o Having aplica a condição na consulta depois que os registros são agrupados. Para exemplificar aplicamos o operador no caso acima:

Consulta utilizando o operador having
Resultado da consulta com o operador having

Repare que aplicamos uma condição na consulta:

HAVING count(ri.quantidade) > 3

O que significa, mostre somente os registros em que o total agrupado é maior que 3, a única receita que tem menos de 3 ingredientes é o pudim.

In

Assim como o operador Having é usado junto com o Group By, o operador In é usado em conjunto com o Where. Ele permite você validar se um valor específico ou vários valores correspondem a qualquer valor existente na lista de valores da coluna Where. Ele funciona como se você realizasse várias validações com o operador OR.

Consulta utilizando o operador in
Resultado da consulta com o operador in

No experimento estamos buscando todos os registros em que a o campo unidade seja igual a “Gramas” e “Litros”. Se quisermos adicionar novos termos devemos apenas incluir eles na lista entre parenteses separando cada item por vírgula.

LIKE

Igualmente ao operador In, este operador também é utilizado exclusivamente com o operador Where. Com ele podemos buscar padrões dentro de campos do tipo texto (string). Além disso também podemos utilizar os caracteres curingas % e _ (percentual e sublinhado), com eles conseguimos definir se queremos buscar o padrão no início, meio ou no fim do campo, e também buscar por um caractere em uma determinada posição. Lembrando que por padrão no PostgreSQL este operador é case-sensitive, ou seja, ele diferencia letras maiúsculas de minúsculas (No SQL Server o operador Like é case-insensitive). No exemplo vamos consultar todos os ingredientes que começam com a letra L, para isso é necessário adicionar o operador e após a letra juntamente com o caractere especial %, tudo dentro de aspas simples (ou dupla como você preferir).

Consulta utilizando o operador like
Resultado da consulta com o operador like

Podemos usar algumas variações com os caracteres curingas como:

  • Buscar por valores que comecem com ‘Le’: LIKE ‘Le%’
  • Buscar por valores que terminam com ‘Le’: LIKE ‘%Le’
  • Buscar por valores que contenham ‘Le’ em qualquer posição: LIKE ‘%Le%’
  • Buscar por valores que comecem com ‘Le’ e tenha 3 caracteres de comprimento LIKE ‘Le_%’
  • Buscar por valores que tenha ‘om’ na segunda e terceira posição: LIKE ‘_om%’

Conclusão

Os operadores vistos aqui são apenas alguns dos existentes, a linguagem oferece outros tão úteis quanto os descritos neste post. Como sou um entusiasta dessa linguagem fica aqui um incentivo para você pesquisar e aprofundar mais sobre. Fica também um convite para você comentar sobre o post com sugestões, dúvidas, ou se tem algum outro operador que você julgue importante e não esteja aqui.

Como citado no tópico Like pode haver diferenças de comportamento conforme o SGBD que você utilizar, recomendo fortemente que você utilize a documentação para eventuais dúvidas. Gostaria ainda de agradecer a você que dedicou se tempo e leu essa postagem, sinta-se a vontade para me enviar qualquer tipo de comentário no meu e-mail abaixo. Abraço até a próxima!

Links

Página de download do PostgreSQL

Sscripts para download

Contato

Email: aneuk3@gmail.com

--

--

Alexandre Neukirchen

Senior Software Engineering | Estudante de Data Science e Machine Learning