2.5.3. Otros predicados

2.5.3. Otros predicados Dataprix 21 Septiembre, 2009 - 09:57

1)  Predicado BETWEEN

Para expresar una condición que quiere encontrar un valor entre unos límites concretos, podemos utilizar Roman;">BETWEEN</span>:</p>
SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna BETWEEN límite1 AND límite2;


Ejemplo de uso del predicado BETWEEN

Un ejemplo en el que se pide “Los códigos de los empleados que ganan entre 20.000 y 50.000 euros anuales” sería:

SELECT codigo_empl
FROM empleados
WHERE sueldo BETWEEN 2.0E+4 and 5.0E+4;
codio_empl
5
6
7
8

La respuesta a esta consulta sería la que se ve en el margen.

 

2)  Predicado IN

Para comprobar si un valor coincide con los elementos de una lista utilizaremos IN, y para ver si no coincide, NOT IN

SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna [NOT] IN (valor1, ..., valorN);

Ejemplo de uso del predicado IN

“Queremos saber el nombre de todos los departamentos que se encuentran en las ciudades de Lleida o Tarragona”: 

nombre_dep
ciudad_dep
DIS Lleida
PROG Tarragona
SELECT nombre_dep, ciudad_dep
FROM departamentos
WHERE ciudad_dep IN (‘Lleida’, ‘Tarragona’);

La respuesta sería la que aparece en el margen.

 

3)  Predicado LIKE

Para comprobar si una columna de tipo carácter cumple alguna propiedad determinada, podemos usar LIKE:

SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna LIKE característica;

Los patrones del SQL92 para expresar características son los siguientes:

Otros patrones
Aunque_y % son los caracteres elegidos por el estandar, cada sistema relacional comercial ofrece diversas variantes.

a)  Pondremos un carácter _ para cada carácter individual que queramos considerar.
b)  Pondremos un carácter % para expresar una secuencia de caracteres, que puede no estar formada por ninguno.

Ejemplo de uso del predicado LIKE

 

Atributos añadidos
Aunque la consulta pide sólo los nombres de empleados añadimos los códigos para poder diferenciar dos empleados con el mismo nombre.


A continuación presentamos un ejemplo en el que buscaremos los nombres de los empleados que empiezan por J, y otro ejemplo en el que obtendremos los proyectos que comienzan por S y tienen cinco letras:

a) Nombres de empleados que empiezan por la letra J:

SELECT codigo_empl, nombre_empl
FROM empleados
WHERE nombre_empl LIKE ‘J%’;
codigo_empl
nombre_empl
4 Jorge

 

La respuesta a esta consulta seria la que se muestra den el margen.

b) Proyectos que empiezan por S y tienen cinco letras:

codigo_progec
3

 

SELECT codigo_proyec
FROM proyectos
WHERE nombre_proyec LIKE ‘S_ _ _ _’;

Y la respuesta a esta otra consulta sería la que aparece en el margen.

4)  Predicado IS NULL

Para comprobar si un valor es nulo utilizaremos IS NULL, y para averiguar si no lo es, IS NOT NULL. El formato es:

SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna IS [NOT] NULL;

Ejemplo de uso del predicado IS NULL

Un ejemplo de uso de este predicado sería “Queremos saber el código y el nombre de todos los empleados que no están asignados a ningún proyecto”:

codigo_emple
nombre_emple
8 Sergio

 

SELECT codigo_empl, nombre_empl
FROM empleados
WHERE num_proyec IS NULL;

Obtendríamos la respuesta que tenemos al margen.

 

5)  Predicados ANY/SOME y ALL

Los predicados ANY/SOME
Podemos elegir cualquiera de los predicados para pedir que alguna fila satisfaga una conducción.

Para ver si una columna cumple que todas sus filas (ALL) o algunas de sus filas (ANY/SOME) satisfagan una condición, podemos hacer:

SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar
WHERE columna operador_comparación {ALL|ANY|SOME}subconsulta;

Ejemplo de uso de los predicados ALL y ANY/SOME

a) Veamos un ejemplo de aplicación de ALL para encontrar los códigos y los nombres de los proyectos en los que los sueldos de todos los empleados asignados son menores que el precio del proyecto:

SELECT codigo_proyec, nombre_proyec
FROM proyectos
WHERE precio > ALL (SELECT sueldo
                    FROM empleados
                    WHERE codigo_proyec = num_proyec);

codigo_proyec nombre_proyec
1 GESCOM
2 PESCI
3 SALSA
4 TINELL


Fijémonos en la condición de WHERE de la subconsulta, que nos asegura que los sueldos que observamos son los de los empleados asignados al proyecto de la consulta. La respuesta a esta consulta sería la que aparece en el margen.

b) A continuación, presentamos un ejemplo de ANY/SOME para buscar los códigos y los nombres de los proyectos que tienen algún empleado que gana un sueldo más elevado que el precio del proyecto en el que trabaja.

SELECT codigo_proyec, nombre_proyec
FROM proyectos
WHERE precio < ANY (SELECT sueldo
                    FROM empleados
                    WHERE codigo_proyec = num_proyec);
codigo_proyec nombre_proyec
   


La respuesta a esta consulta está vacía, como se ve en el margen.

6)  Predicado EXISTS

Para comprobar si una subconsulta produce alguna fila de resultados, podemos utilizar la sentencia denominada test de existencia: EXISTS. Para comprobar  si  una  subconsulta  no  produce  ninguna  fila  de  resultados,  podemos utilizar NOT EXISTS.

SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE [NOT] EXISTS subconsulta;

Ejemplo de uso del predicado EXISTS

codigo_empl nombre_empl
1
María
2 Pedro
3 Ana
4 Jorge
5 Clara
6 Laura
7 Rogelio

Un ejemplo en el que se buscan los códigos y los nombres de los empleados que están asignados a algún proyecto sería:

SELECT codigo_empl, nombre_empl
FROM empleados
WHERE EXISTS (SELECT *
              FROM proyectos
              WHERE codigo_proyec = num_proyec);


La respuesta a esta consulta sería la que se muestra en el margen.