You are on page 1of 4

3.2.

2 Restriccin y ordenacin de datos


La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos una condicin en la clusula WHERE. Esta condicin regresa todas las filas que cumplen dicha condicional. La complejidad del criterio de bsqueda es prcticamente ilimitada, y en l se pueden combinar operadores de diversos tipos con funciones de columnas, componiendo expresiones ms o menos complejas. Condicin de bsqueda basada en una comparacin compuesta En este ejemplo, se utiliza el operador lgico OR en la clusula WHERE para localizar los empleados que son chofer o secretaria. La consulta y la tabla resultados se muestra a continuacin.

SELECT nombreEmpleado "Nombre Empleado", oficio FROM empleado WHERE (oficio = 'Chofer') OR (oficio = 'Secretaria')

Ejecutar Condicin de bsqueda basada en rango La condicin BETWEEN indica los puntos extremos del rango, por lo cual el resultado incluir tambien a todos los empleados cuyo salario est entre 2,500 y 5,000 pesos.

SELECT nombreEmpleado "Nombre Empleado", oficio, TO_CHAR(salario,'999,999') Salario FROM empleado WHERE salario BETWEEN 2500 AND 5000; SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario,0) Salario FROM empleado WHERE salario BETWEEN 2500 AND 5000;

Ejecutar La condicin de pertenencia de un conjunto (IN) comprueba si un valor de los datos se corresponde con uno de los valores especificados en una determinada lista, que en este caso est compuesta por slo dos opciones 'Chofer' y 'Secretaria'. La consulta y la tabla resultado se muestra a continuacin.

SELECT nombreEmpleado "Nombre Empleado", oficio, TO_CHAR(salario,'999,999') Salario FROM Empleado WHERE oficio IN ('Chofer', 'Secretaria'); SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario, 0) Salario FROM Empleado WHERE oficio IN ('Chofer', 'Secretaria');

Ejecutar

La operacin ms utilizada sobre las cadenas de caracteres es la comparacin de patrones, para la que se usa el operador LIKE. Para la descripcin de los patrones se utilizan dos caracteres especiales:

% _

El carcter % coincide con cualquier subcadena de caracteres El carcter _ coincide con cualquier carcter

Considere la consulta: Determinar que empleados se apellidan o se llaman 'OLIVEROS'

SELECT nombreEmpleado "Nombre Empleado", oficio, TO_CHAR(salario,'999,999') Salario FROM Empleado WHERE nombreEmpleado LIKE '%OLIVEROS%'; SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario,2) Salario FROM Empleado WHERE nombreEmpleado LIKE '%OLIVEROS%';

Ejecutar Clusula ORDER BY En general, las filas de la tabla resultados de una consulta SQL, no estn ordenadas por ningn criterio particular. Sin embargo podemos garantizar que los resultados de la consulta queden ordenados utilizando la clusula ORDER BY en la instruccin SELECT. La clusula ORDER BY est compuesta por una lista de identificadores de columna segn los cuales hay que ordenar los resultados, separados por comas. ORDER BY se usa para especificar el criterio de ordenacin de la respuesta a la consulta. Por defecto la ordenacin es ascendente, aunque se puede especificar un orden descendente (DESC). La ordenacin se puede establecer sobre el contenido de columnas o sobre expresiones con columnas. Ejemplo: Consulta de los empleados ordenado de manera descendente por su salario y en caso de igualdad de salario, ordenado ascendentemente por su nombre.

SELECT nombreEmpleado "Nombre Empleado", oficio, TO_CHAR(salario,'999,999') Salario FROM empleado ORDER BY Salario DESC, nombreEmpleado; SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario,0) Salario FROM empleado ORDER BY Salario DESC, nombreEmpleado;

Ejecutar Ejemplo MySQL: Se presentan los campeones NBA ordenados por temporada.

SELECT temporada, campeon, ganador, perdedor, subcampeon FROM campeonesNBA ORDER BY temporada DESC

Descargar Ejecutar Clusula DISTINCT Cuando se realiza una consulta sobre una tabla en la que se extrae informacin de varias columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la clave principal, obtengamos filas repetidas en la respuesta. Si este comportamiento es no satisfactorio podemos utilizar la clusula DISTINCT para eliminar las filas duplicadas obtenidas como respuesta a una consulta. Ejemplo: Obtener los campeones NBA

SELECT DISTINCT campeon FROM campeonesNBA ORDER BY campeon

Ejecutar Ejemplo: Antiguedad de los empleados en la empresa

SELECT nombreEmpleado, TRUNC(MONTHS_BETWEEN(SYSDATE, ingreso)/12) AS antiguedad FROM empleado ORDER BY antiguedad DESC, nombreEmpleado; SELECT nombreEmpleado, (YEAR(CURDATE()) - YEAR(ingreso)) - (RIGHT(CURDATE(), 5) < RIGHT(ingreso,5)) AS antiguedad FROM empleado ORDER BY antiguedad DESC, nombreEmpleado;

Ejecutar

Expresin CASE
La expresin CASE permite utilizar la lgica IF-THEN-ELSE en sentencias SQL sin tener que invocar procedimientos. Esta expresin se incluye a partir de la versin Oracle9i Server y MySQL 5. La siguiente es la sintaxis que presenta la expresin CASE:

SELECT campos, CASE expresin WHEN Comparacin_1 THEN return_expresin_1 [ WHEN Comparacin_2 THEN return_expresin_2 WHEN Comparacin_n THEN return_expresin_n ELSE else_expresin] END FROM tabla Expresin es opcional. (ie: Comparacin_1, Comparacin_2, ... Comparacin_n) deben ser del mismo tipo y son evaluadas en el orden que se listan y regresara return_expresin de la primera Comparacin que regresa TRUE, si ninguna expresin es evaluada como TRUE se regresa el valor declarado en el ELSE. Si la clausula ELSE es omitida y ninguna condicin es evaluda TRUE. La sentencia CASE regresa NULL. Es posible declarar un mximo de 255 comparaciones en la sentencia CASE. Cada clausula WHEN ... THEN es considerada como 2 comparaciones.

Ejemplo: Se requiere saber si un empleado tiene derecho al estimulo por antiguedad de 10 o 6 aos SELECT nombreEmpleado, CASE WHEN TRUNC(MONTHS_BETWEEN(SYSDATE, ingreso)/12) = 10 THEN 'Estimulo
10 aos'

WHEN TRUNC(MONTHS_BETWEEN(SYSDATE, ingreso)/12)


6 aos'

6 THEN 'Estimulo

ELSE '' END AS Estimulo FROM empleado ORDER BY nombreEmpleado SELECT nombreEmpleado, CASE WHEN (YEAR(CURDATE()) - YEAR(ingreso)) - (RIGHT(CURDATE(), 5) < RIGHT(ingreso,5)) = 10 THEN 'Estimulo 10
aos'

WHEN (YEAR(CURDATE()) - YEAR(ingreso)) - (RIGHT(CURDATE(), 5) < RIGHT(ingreso,5)) = 6 THEN 'Estimulo 6


aos'

ELSE '' END AS Estimulo FROM empleado ORDER BY nombreEmpleado

You might also like