Critérios de seleção em SQL

Estudaremos as possibilidades de filtrar os registros com o fim de recuperar somente aqueles que cumpram umas condições pré-estabelecidas.

Por Claudio


Publicado em: 29/9/07
Valorize este artigo:
Na seção anterior vimos a forma de recuperar os registros das tabelas, as formas empregadas devolviam todos os registros da mencionada tabela. Ao longo deste manual se estudarão as possibilidades de filtrar os registros com o fim de recuperar somente aqueles que cumpram umas condições pré-estabelecidas.

Antes de começar o desenvolvimento deste artigo, há que ressaltar três detalhes de vital importância. O primeiro deles é que cada vez que se deseja estabelecer uma condição referida a um campo de texto a condição de busca deve ir fechada entre aspas simples; a segunda é que não é possível estabelecer condições de busca nos campos memo e; a terceira e última faz referência às datas. Ate hoje não fui capaz de encontrar uma sintaxe que funcione em todos os sistemas, por isso se faz necessário particulariza-las segundo o banco de dados:

Banco de Datos   Sintaxe
SQL-SERVER   Data = #mm-dd-aaaa#
ORACLE    Data = to_date('YYYYDDMM','aaaammdd',)
ACCESS    Fecha = #mm-dd-aaaa#
Exemplo

Banco de Dados Exemplo (para gravar a data 18 de maio de 1969)

SQL-SERVER   Data = #05-18-1969# ó
Data = 19690518
ORACLE    Data = to_date('YYYYDDMM', '19690518')
ACCESS    Data = #05-18-1969#

Referente aos valores lógicos True ou False cabe destacar que não são reconhecidos em ORACLE, nem nesse sistema de banco de dados, nem em SQL-SERVER existem os campos de tipo "SIM/NAO" de ACCESS; nesses sistemas se utilizam os campos BIT que permitem armazenar valores de 0 ou 1. Internamente, ACCESS, armazena neste campos valores de 0 ou -1, por tanto tudo se complica bastante, porém, aproveitando a coincidência do 0 para os valores FALSE, pode-se utilizar a sintaxe seguinte que funciona em todos os casos: se se deseja saber se o campo é falso "... CAMPO = 0" e para saber os verdadeiros "CAMPO <> 0".

Operadores Lógicos

Os operadores lógicos suportados por SQL são: AND, OR, XOR, Eqv, Imp, Is e Not. Com exceção dos dois últimos, todos possuem a seguinte sintaxe:

<expressao1> operador <expressao2>

Onde expressao1 e expressao2 são as condições a avaliar, o resultado da operação varia em função do operador lógico. A tabela anexa mostra os diferentes possíveis resultados:

  <expressao1>  Operador  <expressao2>   Resultado
VerdadeiroANDFalsoFalso
VerdadeiroANDVerdadeiroVerdadeiro
FalsoANDVerdadeiroFalso
FalsoANDFalsoFalso
VerdadeiroOR FalsoVerdadeiro
VerdadeiroOR Verdadeiro Verdadeiro
FalsoOR Verdadeiro Verdadeiro
FalsoOR Falso Falso
VerdadeiroXOR Verdadeiro Falso
VerdadeiroXOR Falso Verdadeiro
FalsoXOR Verdadeiro Verdadeiro
FalsoXOR Falso Falso
VerdadeiroEqv Verdadeiro Verdadeiro
VerdadeiroEqv Falso Falso
FalsoEqv Verdadeiro Falso
FalsoEqv Falso Verdadeiro
VerdadeiroImp Verdadeiro Verdadeiro
VerdadeiroImp Falso Falso
VerdadeiroImp Null Null
FalsoImp Verdadeiro Verdadeiro
FalsoImp Falso Verdadeiro
FalsoImp Null Verdadeiro
NullImp Verdadeiro Verdadeiro
NullImp Falso Null
NullImp Null Null
Se a qualquer das anteriores condições lhe ante-pusermos o operador NOT o resultado da operação será o contrário ao devolvido sem o operador NOT.

O último operador denominado Is se emprega para comparar duas variáveis de tipo objeto <Objeto1> Is <Objeto2>. este operador devolve verdadeiro se os dois objetos forem iguais.

SELECT *
FROM
    Empregados
WHERE
    Idade > 25 AND Idade < 50

SELECT *
FROM
    Empregados
WHERE
    (Idade > 25 AND Idade < 50)
   OR
   Salario = 100

SELECT *
FROM
    Empregados WHERE
    NOT Estado = 'Solteiro'

SELECT *
FROM
    Empregados
WHERE
    (Salario >100 AND Salario < 500)
    OR
    (Cidade = 'Madri' AND Estado = 'Casado')


Intervalos de Valores

Para indicar que desejamos recuperar os registros segundo o intervalo de valores de um campo empregaremos o operador Between cuja sintaxe é:

   campo [Not] Between valor1 And valor2 (a condição Not é opcional)

Neste caso a consulta devolveria os registros que contiverem em "campo" um valor incluído no intervalo valor1, valor2 (ambos inclusive). Se ante-pusermos a condição Not devolverá aquelos valores não incluídos no intervalo.

SELECT *
FROM
    Pedidos
WHERE
    CodPostal Between 28000 And 28999
(Devolve os pedidos realizados na cidade de Madrid)


O Operador Like

Utiliza-se para comparar uma expressão de cadeia com um modelo em uma expressão SQL. Sua sintaxe é:

   expressão Like modelo

Onde expressão é uma cadeia modelo ou campo contra o que se compara expressão. Pode-se utilizar o operador Like para encontrar valores nos campos que coincidam com o modelo especificado. Por modelo pode especificar um valor completo (Ana Maria), ou se pode utilizar uma cadeia de caracteres asterisco como os reconhecidos pelo sistema operacional para encontrar uma classificação de valores (Like An*).

O operador Like pode ser utilizado em uma expressão para comparar um valor de um campo com uma expressão de cadeia. Por exemplo, se introduzirmos Like C* em uma consulta SQL, a consulta devolve todos os valores de campo que começarem pela letra C. Em uma consulta com parâmetros, pode fazer com que o usuário escreva o modelo que será utilizado.

O exemplo seguinte devolve os dados que começam com a letra P seguido de qualquer letra entre A e F e de três dígitos:

   Like 'P[A-F]###'

Este exemplo devolve os campos cujo conteúdo comece com uma letra da A à D seguidas de qualquer cadeia.

   Like '[A-D]*'

Na tabela seguinte se mostra como utilizar o operador Like para comprovar expressões com diferentes modelos.

ACCESS

'
Tipo de coincidênciaModelo Planejado Coincidee Nao coincide
Varios caracteres'a*a' aa', 'aBa', 'aBBBa' 'aBC'
Caractere especial'a[*]a' 'a*a' 'aaa'
Varios caracteres'ab*''abcdefg', 'abc''cab', 'aab'
Um so caractere'a?a' 'aaa', 'a3a', 'aBa''aBBBa'
Um so digito'a#a' 'a0a', 'a1a', 'a2a' 'aaa', 'a10a'
Categoria de caracteres'[a-z]' 'f', 'p', 'j' '2', '&'
Fora de uma categoria'[!a-z]' '9', '&', '%''b', 'a'
Diferente de um digito'[!0-9]' 'A', 'a', '&', '~' '0', '1', '9'
Combinada'a[!b-m]#' 'An9', 'az0', 'a99' 'abc', 'aj0'

SQL-SERVER

ExemploDescrição
LIKE 'A%'Tudo que comecar por A
LIKE '_NG'Tudo que comece por qualquer caractere e logo siga NG
LIKE '[AF]%'Tudo que comecar por A ou F
LIKE '[A-F]%'Tudo que comece por qualquer letra compreendida entre a A e a F
LIKE '[A^B]%'Tudo que comecar por A e a segunda letra nao for uma B
Em determinado motores de banco de dados, esta cláusula, não reconhece o asterisco como caractere e há que substitui-lo pelo caractere tanto por cento (%).

O Operador In

Este operador devolve aqueles registros cujo campo indicado coincide com algum dos em uma lista. Sua sintaxe é:

expressao [Not] In(valor1, valor2, . . .)

SELECT *
FROM
    Pedidos
WHERE
    Cidade In ('Madri', 'Barcelona', 'Sevilha')


A cláusula WHERE

A cláusula WHERE pode ser usada para determinar que registros das tabelas enumeradas na cláusula FROM aparecerão nos resultados da instrução SELECT. Depois de escrever esta cláusula deve-se especificar as condições expostas nas seções anteriores. Se não se emprega esta cláusula, a consulta devolverá todas as filas da tabela. WHERE é opcional, mas quando aparece deve ir a seguir de FROM.

SELECT
    Sobrenome, Salario
FROM
    Empregados
WHERE
    Salario = 21000
SELECT
   IdProduto, Existencias
FROM
   Produtos
WHERE
    Existencias <= NovoPedido

SELECT *
FROM
   Pedidos
WHERE
   DataEnvio = #05-30-1994#

SELECT
    Sobrenomes, Nome
FROM
    Empregados
WHERE
   Sobrenomes = 'King'

SELECT
    Sobrenomes, Nome
FROM
   Empregados
WHERE
   Sobrenomes Like 'S*'

SELECT
    Sobrenomes, Salario
FROM
    Empregados
WHERE
    Salario Between 200 And 300

SELECT
    Sobrenomes, Salario
FROM
    Empregados
WHERE
    Sobrenomes Between 'Lon' And 'Tol'

SELECT
    IdPedido, DataPedido
FROM
    Pedidos
WHERE
     DataPedido Between #01-01-1994# And #12-31-1994#

SELECT
    Sobrenomes, Nome, Cidade
FROM
   Empregados
WHERE
   Cidade In ('Sevilha', 'Los Angeles', 'Barcelona')





Comentários do artigo
Foram enviados 5 comentários ao artigo
5 comentários não revisados
0 comentários revisados

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato