3. Criterios de Selección
En el capítulo anterior se vio la forma de
recuperar los registros de las tablas, las formas empleadas devolvían
todos los registros de la mencionada tabla. A lo largo de este capítulo
se estudiarán las posibilidades de filtrar los registros con el
fin de recuperar solamente aquellos que cumplan una condiciones preestablecidas.
Antes de comenzar el desarrollo de este capítulo
hay que recalcar tres detalles de vital importancia. El primero de ellos
es que cada vez que se desee establecer una condición referida a
un campo de texto la condición de búsqueda debe ir encerrada
entre comillas simples; la segunda es que no se posible establecer condiciones
de búsqueda en los campos memo y; la tercera y última hace
referencia a las fechas. Las fechas se deben escribir siempre en formato
mm-dd-aa en donde mm representa el mes, dd el día y aa el año,
hay que prestar atención a los separadores -no sirve la separación
habitual de la barra (/), hay que utilizar el guión (-) y además
la fecha debe ir encerrada entre almohadillas (#). Por ejemplo si deseamos
referirnos al día 3 de Septiembre de 1995 deberemos hacerlo de la
siguente forma; #09-03-95# ó #9-3-95#.
3.1 Operadores Lógicos
Los operadores lógicos soportados por SQL son: AND, OR, XOR,
Eqv, Imp, Is y Not. A excepción de los dos últimos todos
poseen la siguiente sintaxis:
<expresión1> operador
<expresión2>
En donde expresión1 y expresión2 son las condiciones a
evaluar, el resultado de la operación varía en función
del operador lógico. La tabla adjunta muestra los diferentes posibles
resultados:
|
<expresión1>
|
Operador
|
<expresión2>
|
Resultado
|
|
Verdad
|
AND
|
Falso
|
Falso
|
|
Verdad
|
AND
|
Verdad
|
Verdad
|
| Falso |
AND |
Verdad |
Falso |
| Falso |
AND |
Falso |
Falso |
| Verdad |
OR |
Falso |
Verdad |
| Verdad |
OR |
Verdad |
Verdad |
| Falso |
OR |
Verdad |
Verdad |
| Falso |
OR |
Falso |
Falso |
| Verdad |
XOR |
Verdad |
Falso |
| Verdad |
XOR |
Falso |
Verdad |
| Falso |
XOR |
Verdad |
Verdad |
| Falso |
XOR |
Falso |
Falso |
| Verdad |
Eqv |
Verdad |
Verdad |
| Verdad |
Eqv |
Falso |
Falso |
| Falso |
Eqv |
Verdad |
Falso |
| Falso |
Eqv |
Falso |
Verdad |
| Verdad |
Imp |
Verdad |
Verdad |
| Verdad |
Imp |
Falso |
Falso |
| Verdad |
Imp |
Null |
Null |
| Falso |
Imp |
Verdad |
Verdad |
| Falso |
Imp |
Falso |
Verdad |
| Falso |
Imp |
Null |
Verdad |
| Null |
Imp |
Verdad |
Verdad |
| Null |
Imp |
Falso |
Null |
| Null |
Imp |
Null |
Null |
Si a cualquiera de las anteriores condiciones le anteponemos el operador
NOT el resultado de la operación será el contrario al devuelto
sin el operador NOT.
El último operador denominado Is se emplea para comparar dos
variables de tipo objeto <Objeto1> Is <Objeto2>. este operador devuelve
verdad si los dos objetos son iguales
SELECT * FROM
Empleados WHERE Edad > 25 AND
Edad < 50;
SELECT * FROM
Empleados WHERE (Edad > 25 AND
Edad < 50) OR Sueldo = 100;
SELECT * FROM
Empleados WHERE NOT Estado = 'Soltero';
SELECT * FROM
Empleados WHERE (Sueldo > 100 AND
Sueldo < 500) OR
(Provincia = 'Madrid' AND
Estado = 'Casado');
3.2 Intervalos de Valores
Para indicar que deseamos recuperar los registros según el intervalo
de valores de un campo emplearemos el operador Between cuya sintaxis es:
campo [Not] Between
valor1 And valor2 (la condición Not
es opcional)
En este caso la consulta devolvería los registros que contengan
en "campo" un valor incluido en el intervalo valor1, valor2 (ambos inclusive).
Si anteponemos la condición Not devolverá aquellos valores
no incluidos en el intervalo.
SELECT * FROM
Pedidos WHERE CodPostal Between
28000 And 28999;
(Devuelve los pedidos realizados en la provincia
de Madrid)
SELECT IIf(CodPostal
Between 28000 And
28999, 'Provincial', 'Nacional')
FROM Editores;
(Devuelve el valor 'Provincial' si el código
postal se encuentra en el intervalo,
'Nacional' en caso contrario)
3.3 El Operador Like
Se utiliza para comparar una expresión de cadena con un modelo
en una expresión SQL. Su sintaxis es:
expresión Like modelo
En donde expresión es una cadena modelo o campo contra el que
se compara expresión. Se puede utilizar el operador Like para encontrar
valores en los campos que coincidan con el modelo especificado. Por modelo
puede especificar un valor completo (Ana María), o se pueden utilizar
caracteres comodín como los reconocidos por el sistema operativo
para encontrar un rango de valores (Like An*).
El operador Like se puede utilizar en una expresión para comparar
un valor de un campo con una expresión de cadena. Por ejemplo, si
introduce Like C* en una consulta SQL, la consulta devuelve todos los valores
de campo que comiencen por la letra C. En una consulta con parámetros,
puede hacer que el usuario escriba el modelo que se va a utilizar.
El ejemplo siguiente devuelve los datos que comienzan con la letra P
seguido de cualquier letra entre A y F y de tres dígitos:
Like 'P[A-F]###'
Este ejemplo devuelve los campos cuyo contenido empiece con una letra
de la A a la D seguidas de cualquier cadena.
Like '[A-D]*'
En la tabla siguiente se muestra cómo utilizar el operador Like
para comprobar
expresiones con diferentes modelos.
| Tipo de coincidencia |
Modelo Planteado |
Coincide |
No coincide |
| Varios caracteres |
'a*a' |
'aa', 'aBa', 'aBBBa' |
'aBC' |
| Carácter especial |
'a[*]a' |
'a*a' |
'aaa' |
| Varios caracteres |
'ab*' |
'abcdefg', 'abc' |
'cab', 'aab' |
| Un solo carácter |
'a?a' |
'aaa', 'a3a', 'aBa' |
'aBBBa' |
| Un solo dígito |
'a#a' |
'a0a', 'a1a', 'a2a' |
'aaa', 'a10a' |
| Rango de caracteres |
'[a-z]' |
'f', 'p', 'j' |
'2', '&' |
| Fuera de un rango |
'[!a-z]' |
'9', '&', '%' |
'b', 'a' |
| Distinto de un dígito |
'[!0-9]' |
'A', 'a', '&', '~' |
'0', '1', '9' |
| Combinada |
'a[!b-m]#' |
'An9', 'az0', 'a99' |
'abc', 'aj0' |
3.4 El Operador In
Este operador devuelve aquellos registros cuyo campo indicado coincide
con alguno de los en una lista. Su sintaxis es:
expresión [Not] In(valor1, valor2, . . .)
SELECT * FROM
Pedidos WHERE Provincia In
('Madrid', 'Barcelona', 'Sevilla');
3.5 La cláusula
WHERE
La cláusula WHERE puede usarse para determinar qué registros
de las tablas enumeradas en la cláusula FROM aparecerán en
los resultados de la instrucción SELECT. Depués de escribir
esta cláusula se deben especificar las condiciones expuestas en
los partados 3.1 y 3.2. Si no se emplea esta cláusula, la consulta
devolverá todas las filas de la tabla. WHERE es opcional, pero cuando
aparece debe ir a continuación de FROM.
SELECT Apellidos, Salario
FROM Empleados WHERE
Salario > 21000;
SELECT Id_Producto,
Existencias FROM Productos
WHERE Existencias <=
Nuevo_Pedido;
SELECT * FROM Pedidos
WHERE Fecha_Envio = #5/10/94#;
SELECT Apellidos, Nombre
FROM Empleados WHERE
Apellidos = 'King';
SELECT Apellidos, Nombre
FROM Empleados WHERE
Apellidos Like 'S*';
SELECT Apellidos, Salario
FROM Empleados WHERE
Salario Between 200 And
300;
SELECT Apellidos, Salario
FROM Empl WHERE
Apellidos Between 'Lon' And
'Tol';
SELECT Id_Pedido, Fecha_Pedido
FROM Pedidos WHERE
Fecha_Pedido
Between #1-1-94# And
#30-6-94#;
SELECT Apellidos, Nombre,
Ciudad FROM Empleados WHERE
Ciudad
In ('Sevilla', 'Los
Angeles', 'Barcelona');
|