Artigo no estilo: Curso

De que se trata o artigo?

Este artigo apresenta o uso de operadores para manipulação de conjuntos de dados que são especialmente úteis para filtragem dos dados: IN, LIKE, BETWEEN, EXISTS, ALL,SOME, ANY, UNION, UNION ALL, EXCEPT, INTERSECT, AND, OR, NOT. Neste sentido, este artigo discute o uso de operadores para filtragem de dados, já que o SQL vai muito além dos operadores matemáticos (=, <>, >, <, >=, <=).


Em que situação o tema é útil?

Na execução de qualquer consulta SQL que tenha a cláusula WHERE, o que ocorre praticamente em todas as consultas.

Resumo DevMan:

Condições de pesquisa são usadas em qualquer consulta que use um ou mais predicados na cláusula WHERE, isso é, expressões que retornam VERDADEIRO ou FALSO e que são usadas para filtrar dados. Provavelmente mais de 80% das declarações SQL que escrevemos usam predicados e, portanto, os operadores que iremos descrever aqui. Não importa se estamos escrevendo consultas de seleção, inserção, atualização ou exclusão. Havendo um ou mais predicados, lá estarão as condições de pesquisa. Neste contexto, neste quinto artigo da série o foco será nas condições de pesquisa usadas na cláusula WHERE e o impacto que elas têm sobre a performance.

Chegamos ao quinto artigo da série sobre criação de relatórios. Desta vez vamos falar das condições de pesquisa usadas na cláusula WHERE e o impacto que elas têm sobre a performance.

Como mencionei em todos os números anteriores desta série, este material foi criado a partir de uma palestra que apresentei sobre o uso do DB2. Porém, as condições de pesquisa que veremos aqui são padrão ANSI SQL e, portanto, estão (ou ao menos deveriam estar) implementadas em qualquer SGBD relacional.

Condições de pesquisa são usadas em qualquer consulta que use um ou mais predicados na cláusula WHERE, isso é, expressões que retornam VERDADEIRO ou FALSO e que são usadas para filtrar dados. Provavelmente mais de 80% das declarações SQL que escrevemos usam predicados e, portanto, os operadores que iremos descrever aqui. Não importa se estamos escrevendo consultas de seleção, inserção, atualização ou exclusão. Havendo um ou mais predicados, lá estarão as condições de pesquisa.

E como as três operações que geralmente mais impactam a performance de uma consulta são a junção de tabelas, o agrupamento e a filtragem de dados, fica fácil deduzir que é muito importante saber usar as condições de pesquisa adequadas.

A seguir, vamos estudar como usar e qual o impacto na performance dos operadores IN, LIKE, BETWEEN, EXISTS, ALL, SOME, ANY, UNION, UNION ALL, EXCEPT, INTERSECT, AND, OR, NOT.

Para isso, neste artigo, tratamos dos seguintes tópicos:

· Operadores matemáticos;

· Operador BETWEEN;

· Operadores AND e OR;

· Operadores IN e EXISTS;

· Operador LIKE;

· Operador NOT;

· Operadores UNION, UNION ALL;

· Operadores INTERSECT e EXCEPT;

· Operadores ALL, SOME, ANY;

· Otimizando predicados.

Para situarmos os recursos SQL que vamos estudar, é preciso ter uma base de dados como amostra. Usaremos neste artigo uma base com dados fictícios de demanda de produtos farmacêuticos. A Figura 1 mostra o modelo desta base.

Figura 1: Modelo de dados da base de exemplo

Assumimos neste artigo que o leitor já está familiarizado com conceitos básicos da linguagem SQL apresentados nos artigos anteriores desta série.

Os Operadores Matemáticos, que vimos lá no início de nossos estudos no primário, antiga 5º série, hoje 6º ano do ensino fundamental, são essenciais quando falamos em filtrar dados em consultas SQL.

Quando falamos de predicados, a primeira coisa que nos vem à cabeça são as expressões que usam operadores numéricos, como igual (=), maior (>), menor (<), maior ou igual (>=), menor ou igual (<=) e diferente (<>).

Na verdade, os SGBDs relacionais são muito bons para lidar com operadores matemáticos. Lamentavelmente, eles não resolvem 100% dos problemas que podemos encontrar e, portanto, muitas vezes precisamos usar outros operadores, como veremos ao longo deste artigo.

De qualquer modo, operadores matemáticos são muito úteis e fáceis de usar, além de suportarem outros tipos de dados além dos valores numéricos.

Vamos a um primeiro exemplo. Selecionar as transações envolvendo valores superiores a R$ 2.500,00. Usaremos o operador Maior Que (>), como mostra a Listagem 1.

Listagem 1: Usando o operador matemático maior que (>)

SELECT * 
    FROM tblDemanda T
    WHERE ValorReal >= 2500;

A Listagem 2 mostra outro exemplo com o operador maior ou igual (>=), filtrando todos os dados cuja data é maior ou igual à data de hoje menos 30 dias. Em outras palavras, estamos filtrando todas as transações dos últimos 30 dias. Lembre-se que a operação de datas usada é padrão do DB2 e você deverá fazer as adaptações necessárias para o seu SGBD. Recomendo a leitura do artigo “Usando Datas em Consultas SQL”, citado na seção LEITURA RECOMENDADA.

Listagem 2: Usando o operador matemático maior ou igual (>=).

SELECT *
    FROM tblDemanda T
    WHERE Data >= (CURRENT_DATE - 30 DAYS); 

Os demais operadores matemáticos são usados da mesma forma, então deixo o teste com os outros operadores aos cuidados do leitor mais curioso.

Operador BETWEEN

Este operador é muito simples e especifica uma faixa de resultados compreendida entre um limite inferior e um limite superior. Desta forma, ele funciona como se estivéssemos usando dois operadores matemáticos ao mesmo tempo: maior ou igual ao limite inferior ...

Quer ler esse conteúdo completo? Tenha acesso completo