3.2.2 restricción y ordenación de datos

5
3.2.2 Restricción y ordenación 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 condición en la cláusula WHERE. Esta condición regresa todas las filas que cumplen dicha condicional. La complejidad del criterio de búsqueda es prácticamente ilimitada, y en él se pueden combinar operadores de diversos tipos con funciones de columnas, componiendo expresiones más o menos complejas. Condición de búsqueda basada en una comparación compuesta En este ejemplo, se utiliza el operador lógico OR en la cláusula WHERE para localizar los empleados que son chofer o secretaria. La consulta y la tabla resultados se muestra a continuación. SELECT nombreEmpleado "Nombre Empleado", oficio FROM empleado WHERE (oficio = 'Chofer') OR (oficio = 'Secretaria') Ejecutar Condición de búsqueda basada en rango La condición 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 condición 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 sólo dos opciones 'Chofer' y 'Secretaria'. La consulta y la tabla resultado se muestra a continuación. SELECT nombreEmpleado "Nombre Empleado",

Upload: hatuey-caribe-taino

Post on 02-Aug-2015

143 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 3.2.2 Restricción y ordenación de datos

3.2.2 Restricción y ordenación 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 condición en la cláusula WHERE.

Esta condición regresa todas las filas que cumplen dicha condicional. La complejidad del criterio de búsqueda es prácticamente ilimitada, y en él se pueden combinar operadores de diversos tipos con funciones de columnas, componiendo expresiones más o menos complejas.

Condición de búsqueda basada en una comparación compuesta

En este ejemplo, se utiliza el operador lógico OR en la cláusula WHERE para localizar los empleados que son chofer o secretaria. La consulta y la tabla resultados se muestra a continuación.

SELECT nombreEmpleado "Nombre Empleado", oficioFROM empleadoWHERE (oficio = 'Chofer') OR (oficio = 'Secretaria')

Ejecutar

Condición de búsqueda basada en rango

La condición 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') SalarioFROM empleado WHERE salario BETWEEN 2500 AND 5000;

SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario,0) SalarioFROM empleado WHERE salario BETWEEN 2500 AND 5000;

Ejecutar

La condición 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 sólo dos opciones 'Chofer' y 'Secretaria'. La consulta y la tabla resultado se muestra a continuación.

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

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

Ejecutar

Page 2: 3.2.2 Restricción y ordenación de datos

La operación más utilizada sobre las cadenas de caracteres es la comparación de patrones, para la que se usa el operador LIKE. Para la descripción de los patrones se utilizan dos caracteres especiales:

% El carácter % coincide con cualquier subcadena de caracteres

_ El carácter _ coincide con cualquier carácter

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

SELECT nombreEmpleado "Nombre Empleado", oficio, TO_CHAR(salario,'999,999') SalarioFROM EmpleadoWHERE nombreEmpleado LIKE '%OLIVEROS%';

SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario,2) SalarioFROM EmpleadoWHERE nombreEmpleado LIKE '%OLIVEROS%';

Ejecutar

Cláusula ORDER BY

En general, las filas de la tabla resultados de una consulta SQL, no están ordenadas por ningún criterio particular. Sin embargo podemos garantizar que los resultados de la consulta queden ordenados utilizando la cláusula ORDER BY en la instrucción SELECT. La cláusula ORDER BY está compuesta por una lista de identificadores de columna según los cuales hay que ordenar los resultados, separados por comas.

ORDER BY se usa para especificar el criterio de ordenación de la respuesta a la consulta. Por defecto la ordenación es ascendente, aunque se puede especificar un orden descendente (DESC). La ordenación 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 empleadoORDER BY Salario DESC, nombreEmpleado;

SELECT nombreEmpleado "Nombre Empleado", oficio, FORMAT(salario,0) Salario FROM empleadoORDER BY Salario DESC, nombreEmpleado;

Ejecutar

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

Page 3: 3.2.2 Restricción y ordenación de datos

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

DescargarEjecutar

Cláusula DISTINCT

Cuando se realiza una consulta sobre una tabla en la que se extrae información 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 cláusula DISTINCT para eliminar las filas duplicadas obtenidas como respuesta a una consulta.

Ejemplo: Obtener los campeones NBA

SELECT DISTINCT campeonFROM campeonesNBAORDER BY campeon

Ejecutar

Ejemplo: Antiguedad de los empleados en la empresa

SELECT nombreEmpleado,TRUNC(MONTHS_BETWEEN(SYSDATE, ingreso)/12) AS antiguedad FROM empleadoORDER BY antiguedad DESC, nombreEmpleado;

SELECT nombreEmpleado, (YEAR(CURDATE()) - YEAR(ingreso)) - (RIGHT(CURDATE(), 5) < RIGHT(ingreso,5)) AS antiguedad FROM empleadoORDER BY antiguedad DESC, nombreEmpleado;

Ejecutar

Expresión CASE

La expresión CASE permite utilizar la lógica IF-THEN-ELSE en sentencias SQL sin tener que invocar procedimientos. Esta expresión se incluye a partir de la versión Oracle9i Server y MySQL 5.

Page 4: 3.2.2 Restricción y ordenación de datos

La siguiente es la sintaxis que presenta la expresión CASE:

SELECT campos, CASE expresión WHEN Comparación_1 THEN return_expresión_1 [ WHEN Comparación_2 THEN return_expresión_2 WHEN Comparación_n THEN return_expresión_n ELSE else_expresión] ENDFROM tabla

Expresión es opcional. (ie: Comparación_1, Comparación_2, ... Comparación_n) deben ser del mismo tipo y son evaluadas en el orden que se listan y regresara return_expresión de la primera Comparación que regresa TRUE, si ninguna expresión es evaluada como TRUE se regresa el valor declarado en el ELSE.

Si la clausula ELSE es omitida y ninguna condición es evaluda TRUE. La sentencia CASE regresa NULL.

Es posible declarar un máximo 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 años

SELECT nombreEmpleado, CASE WHEN TRUNC(MONTHS_BETWEEN(SYSDATE, ingreso)/12) = 10 THEN 'Estimulo 10 años' WHEN TRUNC(MONTHS_BETWEEN(SYSDATE, ingreso)/12) = 6 THEN 'Estimulo 6 años'

ELSE '' END AS EstimuloFROM empleadoORDER BY nombreEmpleadoSELECT nombreEmpleado, CASE WHEN (YEAR(CURDATE()) - YEAR(ingreso)) - (RIGHT(CURDATE(), 5) < RIGHT(ingreso,5)) = 10 THEN 'Estimulo 10 años' WHEN (YEAR(CURDATE()) - YEAR(ingreso)) - (RIGHT(CURDATE(), 5) < RIGHT(ingreso,5)) = 6 THEN 'Estimulo 6 años'

ELSE '' END AS EstimuloFROM empleadoORDER BY nombreEmpleado