Ir al contenido principal

Capítulo 3 - Restricción y Ordenación de Datos

Capítulo 3.
Restricción y Ordenación de Datos.
3.01. Limitar las Filas recuperadas por una consulta.
3.02. Ordenar las filas recuperadas por una consulta.
3.03. Ampersand Substitution.
3.04. Dos Minutos.

Limitar las columnas devueltos por una instrucción SELECT que se conoce como proyección y se introdujo en el capítulo 2. Restringir las filas devueltas se conoce como selección. Este capítulo trata de la cláusula WHERE, que es una mejora de la funcionalidad de selección de la instrucción SELECT. La cláusula WHERE especifica una o más condiciones que el servidor de Oracle evalúa para restringir las filas devueltas por la instrucción. Una mejora más en el lenguaje es introducido por la cláusula ORDER BY, que proporciona capacidades de ordenamiento de datos. Ampersand subtitution introduce una forma para reutilizar la misma declaración para ejecutar diferentes querys mediante la sustitución de elemento de consulta en tiempo de ejecución. Esta zona de unión en tiempo de ejecución de sentencias SQL es explorado a fondo.

Objetivo de Certificación 3.01
Uno de los principios de la piedra angular de la teoría relacional es la selección. La selección se actualiza con la cláusula WHERE de la instrucción SELECT. Condiciones que restringen el conjunto de datos devuelto tomar muchas formas y operan en las columnas, así como expresiones. Sólo las filas de una tabla que se ajusten a estas condiciones se devuelven. Condiciones de restringir las filas con los operadores de comparación en relación con las columnas y valores literales. Los operadores Boolean proporcionan un mecanismo para especificar varias condiciones para restringir las filas regresadas. Operadores Boolean, condicional, concatenación y aritméticos son discutidos para establecer su orden de precedencia cuando son encontrados en una sentencia SELECT. Las siguientes cuatro áreas son investigados:

- La Clausula WHERE.
- Operadores de comparación.
- Operadores Boolean.
- Reglas de precedencia.

La Clausula WHERE
La clausula WHERE extiende la declaración SELECT para proporcionar al lenguaje restringir filas basado en una o más condiciones. Consultar una tabla con solo las clausulas SELECT y FROM regresa todas las filas de una tabla. Usar la palabra clave DISTINCT, los valores duplicados están excluidos, y las filas resultantes se limitan en cierta medida. ¿Qué pasa si la información muy específica que se requiere de una tabla, por ejemplo, sólo los datos en una columna contiene un valor específico? ¿Cómo recuperar a los países que pertenecen a la región Europa de la tabla de los países? ¿Qué hay de obtener sólo los empleados que trabajan como representantes de ventas? Estas preguntas se responden con la cláusula WHERE para especificar exactamente qué registros deben ser devueltos. El formato de la instrucción SQL SELECT que incluye la cláusula WHERE es:

SELECT *|{[DISTINCT] column|expression [alias],…}
FROM table
[WHERE condition(s)];

Las clausulas SELECT y FROM fueron examinadas en el capítulo 2. La clausula WHERE siempre sigue a la clausula FROM. Los corchetes indican que la clausula WHERE es opcional. Una o más condiciones pueden ser aplicadas simultáneamente para restringir el conjunto de resultados. Una condición se especifica mediante la comparación de dos términos con un operador condicional. Estos términos pueden ser valores de columnas, literales o expresiones. El operador de igualdad es más comúnmente utilizado para restringir el número de resultados. Dos ejemplos de clausulas WERE son mostrados:

select country_name from countries where region_id=3;
select last_name, first_name from employees where job_id='SA_REP';

El primer ejemplo los proyecta la columna COUNTRY_NAME de la tabla COUNTRIES. En lugar de seleccionar cada fila, la cláusula WHERE restringe las filas devueltas sólo a aquellos que contienen un 3 en la columna REGION_ID. En el segundo ejemplo proyecta dos columnas, LAST_NAME y FIRS_NAME de la tabla EMPLOYEES. Las filas regresadas son restringidas a las que contengan el valor SA_REP en la columna JOB_ID.

Condiciones Bases de Valores Numéricos
Las condiciones deben ser formuladas apropiadamente para diferentes tipos de datos. Las condiciones que restringen filas basadas sobre columnas numéricas pueden ser especificados en varias formas. Considere la columna SALARY en la tabla EMPLOYEES. Esta columna tiene un tipo de datos NUMBER (8,2). La Figura 3-1 muestra dos maneras diferentes en las que ha sido la columna SALARIO restringido. Los ejemplos de la primera y segunda.


Recupera los valores de LAST_NAME y SALARY de los empleados que ganan $10,000. Note la diferencia en la clausula WHERE de las siguientes consultas. La primera consulta especifica el número 10,000, mientras el segundo encierra los números dentro de las comillas simples como un carácter literal. Ambos formatos son aceptables para Oracle, ya que un tipo de conversión de datos implícita se lleva a cabo cuando sea necesario.

select last_name, salary from employees
where salary = 10000;

select last_name, salary from employees
where salary = '10000';

Una columna numérica se puede comparar con otra columna numérica en la misma fila para construir un estado de la cláusula WHERE, como demuestra la siguiente consulta:

select last_name, salary from employees
where salary = department_id;
El primer ejemplo en la figura 3-2 muestra como la clausula WHERE es demasiada restrictiva y los resultados en las filas seleccionadas. Esto es porque el rango de los valores de SALARY es 2100 a 999999,99, y el rango de valores en DEPARTMNT es 10 a 110. Puesto que no hay superposición del rango de valores DEPARTMENT_ID y sueldo, no hay filas que cumplen esta condición y por lo tanto no se devuelve. El ejemplo también ilustra cómo una condición cláusula WHERE compara una columna numérica a otro.


En el segundo ejemplo en la figura 3-2 demuestra extender la condición de la clausula WHERE para comparar una columna numérica, SALARY a la expresión Numerica: CEPARTMENT_ID * 100. Para cada fila, el valor en la columna de salario es en comparación con el producto del valor DEPARTMENT_ID y 100. La cláusula WHERE permite también expresiones a ambos lados del operador de comparación. Usted podría emitir la siguiente declaración para obtener los mismos resultados:

select last_name, salary from employees
where salary/10 = department_id*10;

Como en algebra regular, la expresión (SALARY = DEPARTMENT_ID * 100) es equivalente a (SALARY/10 = DEPARTMENT_ID * 10). La característica más destacable de este ejemplo es que los términos a ambos lados del operador de comparación son expresiones.

Condiciones Basadas en Caracteres
Condicione filas determinan se seleccionan sobre datos de tipo carácter, se especifican encerrando caracteres literales en la clausula condicional, dentro de comillas simples. La columna JOB_ID en la tabla EMPLOYEES tiene un tipo de datos VARCHAR(2) supongamos que queremos un reporte que consta de los valores de LAST_NAME de los empleados que trabajan como representantes de ventas. El valor JOB_ID de un representante de ventas es SA_REP. La siguiente sentencia produce un informe.

select last_name
from employees
where job_id='SA_REP';

Si ha intentado especificar el carácter literal sin las comillas, un error de Oracle sería levantado. Recuerde que los datos de carácter literal entre mayúsculas y minúsculas, así que las siguientes cláusulas WHERE no son equivalentes.

Clause 1: where job_id=SA_REP
Clause 2: where job_id='Sa_Rep'
Clause 3: where job_id='sa_rep'

Clausula 1 genera un “ORA-00904: “SA_REP”: invalid identifier” error ya que el SA_REP literal no se ajusta entre comillas simples. Cláusula 2 y la Cláusula 3 son sintácticamente correctas pero no equivalentes. Además, ninguna de estas clausulas rinde cualquier dato puesto que no hay filas en la tabla EMPLOYEES que tengan valores en la columna JOB_ID Sa_Rep o sa_rep. Como se muestra en la figura 3-3.
Condiciones basadas en caracteres no se limitan a la comparación de valores de las columnas literales. También se puede especificar con otras columnas de caracteres y expresiones. Las columnas LAST_NAME y FIRST_NAME son especificadas como VARCHAR2(25). Considere la siguiente columna:

select employee_id, job_id
from employees
where last_name=first_name;

las columnas LAST_NAME y FIRST_NAME aparecen a ambos lados del operador de igualdad en la clausula WHERE. No hay valores literales presentes, por lo tanto no


Comillas simples son necesarias para delimitarlos. Esta condición estipula que solo las filas que contienen el mismo valor (exacto) en las columnas LAST_NAME y FIRST_NAME serán regresadas. Esta condición es demasiado restrictiva y como muestra la figura 3-4, no hay filas en el resultado.
Expresiones basadas en caracteres forman una o ambas partes de una condición separadas por un operador condicional. Estas expresiones pueden ser formadas por la concatenación de los valores literales con una o más columnas de caracteres. Los siguientes cuatro cláusulas de demostrar algunas de las opciones para las condiciones basadas en caracteres:

Clause 1: where 'A '||last_name||first_name = 'A King'
Clause 2: where first_name||' '||last_name = last_name||' '||first_name
Clause 3: where 'SA_REP'||'King' = job_id||last_name
Clause 4: where job_id||last_name ='SA_REP'||'King'


Clausula 1 concatena la cadena literal “A” a las columnas LAST_NAME y FIRST_NAME. Esta expresión es comparada a la literal “A King,” y cualquier fila que cumple esta condición es regresada. Cláusula 2 demuestra que las expresiones de caracteres pueden ser colocados a ambos lados del operador condicional. Cláusula 3 muestra que las expresiones literales también se pueden colocar a la izquierda del operador condicional. Que es lógicamente equivalente a la cláusula 4, que ha intercambiado los operandos en la cláusula 3 en todo. Ambas cláusulas 3 y 4 como resultado de la misma fila de datos que se devuelven, como se muestra en la Figura 5.3.

Condiciones Basadas en Fechas
Columnas Fechas son útiles cuando almacenas información de Fecha y Hora. Los literales de fecha deben ser encerrados en comillas simples al igual que los datos carácter; del contrario un error es levantado. Cuando se utilizan en la clausula condicional WHERE, columnas fecha son:


Comparadas con tras columnas fechas o fechas literales. Los literales se convierten automáticamente en valores Fecha basados en el formato fecha por defecto, que es DD-MON-RR. Si un literal aparece en una expresión que implique a una columna DATE, es automáticamente convertida a un valor fecha utilizando la máscara de formato por defecto. DD representa días, MON representa las primeras tres letras del mes, y RR representa un año-compliant year (es decir, si RR es de entre 50 y 99, entonces el Servidor Oracle regresa el singlo anterior, si no devuelve el siglo actual). El año completo también puede ser especificado YYYY. Considere las siguiente cuatro declaraciones:

Statement 1:
select employee_id from job_history
where start_date = end_date;

Statement 2:
select employee_id from job_history
where start_date = '01-JAN-2001';

Statement 3:
select employee_id from job_history
where start_date = '01-JAN-01';

Statement 4:
select employee_id from job_history
where start_date = '01-JAN-99';

La primera declaración prueba igualdad entre dos columnas fecha. Filas que contengan los mismos valores en sus columnas START_DATE y END_DATE serán regresadas. Tenga en cuenta, sin embargo, que los valores fecha son solo iguales entre sí, si hay una correspondencia exacta entre todos sus componentes, incluido el día, mes, año, hora, minutos y segundos. El capítulo 4 analiza los datos de valores de fecha de almacenamiento. Hasta entonces, no se preocupe acerca de las horas, minutos y segundos componentes.
En la clausula WHERE de la segunda declaración, la columna START_DATE es comparada con literal: ’01-JAN-2001’. Todo el componente año cuatro dígitos (YYYY) ha sido especificado. Esto es aceptable en el Servidor Oracle, y todas las filas en la tabla JOB_HISTORY en la columna START_DATE con un valor igual al primero de enero del 2001 serán regresadas.
La tercera declaración es equivalente a la segunda ya que el literal ’01-JAN-01’ se convierte a el valor fecha 01-JAN-2001. Esto se debe a que el componente RR es menor que 50, por lo que el presente siglo (21), 20 es el prefijo para el año componente RR para proporcionar un valor del siglo. Todas las filas en la tabla JOB_HISTORY con valores en la columna START_DATE igual a 01-JAN-2001 serán regresadas.
El componente de siglo para el literal ’01-JAN-99’ se convierte en siglo anterior (XX) del siglo 19, se obtiene un valor fecha de 01-JAN-1999 para la cuarta declaración, ya que el componente 99 es más grande que 50. Filas de la tabla JOB_HISTORY con valores en la columna START_DATE igual a 01-JAN-1999 serán regresadas.
Aritmética utilizando suma y resta es soportada en expresiones que involucran valores Fecha. Una expresión como: END_DATE – START_DATE regresa un valor numérico que representa el número de días entre START_DATE y END_DATE. Una expresión como: START_DATE + 30 regresa una fecha que es 30 días posteriores a START_DATE. Así que la siguiente expresión es legítima, como se muestra en la Figura 3-6:

select employee_id from job_history
where start_date + 30 = '31-JAN-99';
Esta consulta regresa filas de la tabla JOB_HISTORY que contienen un valor en START_DATE igual a 30 días después de 31-JAN-1999. Por lo tanto, solo las filas con unos valores de 01-JAN-1999 en la columna START_DATE serán regresadas.


Examen
Cláusulas condicionales para comparar dos términos con los operadores de comparación. Es importante entender los tipos de datos de los términos implicados para que puedan ser entre comillas simples, si es necesario. Un error común es asumir que una cláusula WHERE es sintácticamente correcta, cuando en realidad, no se encuentra entre comillas que delimitan o caracteres literales de fecha. Otro descuido común no es consciente de que los términos a la izquierda ya la derecha del operador de comparación en una cláusula condicional pueden ser expresiones, columnas o valores literales. Ambos conceptos pueden ser probados en el examen.

Operadores de Comparación
El operador de igualdad se utiliza ampliamente para ilustrar el concepto de restricción de las filas con una cláusula WHERE. Hay varios operadores alternativos que también se puede utilizar. Los operadores de desigualdad como "menor que" o "mayor que o igual a" se puede utilizar para devolver las filas conforme a condiciones de desigualdad. El operador BETWEEN facilita comparacion base en rangos para probar si un valor de columna se encuentra entre dos valores. El Operador IN prueba en un conjunto de miembros, por lo que una fila se devuelve si el valor de la columna a prueba en el estado es un miembro de un conjunto de literales. La coincidencia de patrones operador de comparación LIKE es extremadamente de gran alcance, permitiendo que los componentes de la columna de datos de carácter, que se ajustará conforme a los literales de un patrón específico. El operador de comparación de la última puesta en esta sección es el operador IS NULL, que devuelve filas donde el valor de la columna contiene un valor nulo. Estos operadores se pueden utilizar en cualquier combinación en la cláusula WHERE y se discute a continuación.

Igualdad y Desigualdad
Limitar las filas devueltas por una consulta es necesario especificar una cláusula WHERE apropiada. Si la cláusula es demasiado restrictiva, y luego unas cuantas filas o no se devuelven. Si la cláusula condicional es demasiado amplia se especifica, más filas que se requieren son devueltos. Explorando los operadores disponibles en caso de que diferentes equipos con el lenguaje para pedir exactamente las filas que se interese. Las pruebas para la igualdad en una condición es a la vez natural e intuitiva. Tal condición se forma con el "es igual a" (=) operador. Una fila se devuelve si la condición de la igualdad es cierta para esa fila. Considere la siguiente consulta:

select last_name, salary
from employees
where job_id='SA_REP';

La columna JOB_ID de cada fila de la tabla EMPLOYEES es la prueba de igualdad con el SA_REP carácter literal. Para información de carácter sea igual, debe haber una exacta entre mayúsculas y minúsculas. Cuando un coincidencia se encuentra, los valores de las columnas son proyectados, LAST_NAME y SALARY, son regresados para esa fila, como se muestra en la figura 3-7. Tenga en cuenta que a pesar de la cláusula condicional se basa en la columna JOB_ID, no es necesario para esta columna que se proyecta por la consulta.
La desigualdad basada en las condiciones de mejorar la especificación de la cláusula WHERE. Comparaciones de rango y de patrones son posibles con la desigualdad y la igualdad, pero a menudo es preferible utilizar los operadores BETWEEN y LIKE para estas comparaciones. Los operadores de desigualdad son descritos en la tabla 3-1.
Operadores de desigualdad permiten consultas basadas en rangos en las consultas se han cumplido. Usted puede ser requerido para proporcionar un conjunto de resultados en un valor de columna es mayor que otro valor.


Por ejemplo, la siguiente consulta puede ser utilizada para obtener una lista de valores de LAST_NAME y SALARY para empleados que ganan mas de $5000:

select last_name, salary from employees
where salary > 5000;

Similarmente, para obtener una lista de empleados que ganan menos que $3000, la siguiente consulta puede ser enviada:

select last_name, salary from employees
where salary < 3000; Los operadores de desigualdad compuesta (formada por más de un símbolo) se utilizan en los siguientes cuatro apartados: Clause 1: where salary <= 3000; Clause 2: where salary >= 5000;
Clause 3: where salary <> department_id;
Clause 4: where salary != 4000+department_id;

Cláusula 1 devuelve las filas que contienen un valor de SALARY que es inferior o igual a 3000. Clausula 2 Obtiene datos donde el valor de SALARY es más grande que o igual a 5000, mientras que las clausulas 3 y 4 demuestran las dos formas de los operadores “not equal to”. Clausula 3 regresa las filas que tiene un valor en la columna SALARY que no es igual al valor de DEPARTMENT_ID. El operador alternativo a “not equal to” en la cláusula 4 se muestra que columnas, literales y expresiones pueden ser comprados utilizando operadores de desigualdad. Clausula 4 regresa las filas que contienen un valor en SALARY que no es igual a la suma del DEPARTMENT_ID de esa fila y 4000. La desigualdad numérica es naturalmente intuitiva. La comparación del carácter y las condiciones fecha, sin embargo, es más compleja. Prueba de la desigualdad carácter es interesante, ya que las cadenas comparadas a ambos lados del operador de igualdad se convierten a representación numérica de estos caracteres. Basado en el juego de caracteres de base de datos y la configuración NLS (Soporte de idioma nacional), cada cadena de caracteres que se le asigna un valor numérico. Estos valores numéricos son la base para la evaluación de la comparación de desigualdad. Considere la siguiente declaración:

select last_name from employees
where last_name < 'King'; El carácter literal ‘King’ es convertido a representación numérica. Asumiendo US7ASCII con AMERICAN NLS, el literal ‘King’ es convertido en la suma de sus valores de carácter ordinal: K i n g = (75 105 110 103=393). Para cada fila de la tabla EMPLOYEES, la columna LAST_NAME es convertido, igualmente, a un valor numérico. Si este valor es menor que 393, la fila se selecciona. El mismo proceso para la comparación de los datos numéricos con los operadores de desigualdad se aplica a los datos de caracteres. La única diferencia es que los datos de carácter se convierten implícitamente en el servidor de Oracle a un valor numérico basado en la configuración. Comparaciones desigualdad que operan en los valores de fecha siguen un proceso similar a los datos de carácter. El Servidor Oracle almacena fechas en un formato numérico interno, y estos valores son comparados dentro de las condiciones. Segundo de junio de cierto año determinado se produce antes que el tres de junio del mismo año. Por lo tanto, el valor numérico de la fecha 02-JUN-2008 es menor que el valor numérico de la fecha 03-JUN-2008. Considere la siguiente consulta: select last_name from employees where hire_date < '01-JAN-2000'; esta consulta recupera cada registro de empleado que contiene un valor en HIRE_DATE que es menor que ’01-JAN-2000’. Filas con employee HIRE_DATE=31-DEC-1999 serán regresadas, mientras, mientras que las filas con valores Hire_date empleado a más tardar el primero de enero de 2000 no serán devueltos, como se muestra en la Figura 3-8. En el Trabajo
La cláusula WHERE es una extensión fundamental a la instrucción SELECT y forma parte de la mayoría de las consultas. Aunque existen muchos operadores de comparación, la mayoría de condiciones se basan en la comparación de dos términos con los de la igualdad y los operadores de desigualdad.

Comparación de Rangos con el Operador BETWEEN
El operador BETWEEN prueba si el valor de una columna o expresión pertenece a un intervalo de dos valores limites. El ítem debe ser al menos igual al valor límite inferior o a lo más igual que el valor del límite más alto o caiga dentro del rango, para que la condición sea verdad.


Supongamos que usted quiere el last name de empleados que ganan un salario en el rango de $3400 y $4000. Una posible solución usando el operador BETWEEN como sigue:

select last_name from employees
where salary between 3400 and 4000;

Este operador permite a la condición WEHERE leer en una manera natural de ingles. El Last Name de todos los empleados que ganan entre $3400 y $4000 será regresado. Operadores Boolean como: AND, OR y NOT son discutidos en capítulos posteriores, pero se presenta aquí para mejorar la descripción del operador BETWEEN. El operador AND es utilizado para especificar múltiples condiciones WHERE, todos los cuales deben cumplirse para que una fila sea regresada. Utilizando el operador AND, el operador BETWEEN es equivalente a dos condiciones de uso de operadores “greater tan or equeal to” y “less than or equal to” respectivamente. La anterior sentencia SQL es equivalente a la siguiente declaración, como se muestra en la Figura 9.3.

select last_name from employees
where salary >= 3400
and salary <= 4000;

El valor de SALARY de una fila se probó por primera vez si es mayor o igual a 3400 y segundo si es menor o igual a 4000, si ambas condiciones son satisfechas, el valor LAST_NAME de la fila forma parte del conjunto de resultados. Si solo uno o ninguna de las condiciones son satisfechos, la fila no es seleccionada. Condiciones que se especifican con el operador BETWEEN por lo tanto, puede ser equivalente denota el uso de dos basados en la desigualdad de condiciones, pero es más corto y más sencillo.


Especificando la condición de rango utilizando el operador BETWEEN. La implicación de esta equivalencia es que el mecanismo utilizado para evaluar el carácter numérico, y operadores fecha por los operadores de desigualdad es el mismo para el operador BETWEEN. La siguiente consulta prueba si el valor de la columna HIRE_DATE es posterior a 24-JUL-1994 pero antes de 07-JUN-1996. select first_name, hire_date from employees where hire_date between '24-JUL-1994' and '07-JUN-1996'; Usted no se limita a especificar valores literales como los operandos para el operador BETWEEN, ya que estos pueden ser los valores de columna y expresiones como las siguientes: select first_name, hire_date from employees where '24-JUL-1994' between hire_date+30 and '07-JUN-1996'; Para una fila para ser devueltos por esta consulta, el literal de fecha 24-JUL-1994 se situará entre el valor de la fila de la columna Hire_date más 30 días y el literal de fecha 07-junio-1996.

Comparación de Conjuntos con el Operador IN
El operador IN prueba si un ítem es miembro de un conjunto de valores literales. El conjunto es especificado mediante un separador coma, los literales y encerrados en paréntesis. Si los literales son caracteres o valores fecha, entonces esto deben ser delimitados usando comillas simples. Usted puede incluir muchos literales a como usted desee. Considere el siguiente ejemplo:

select last_name from employees
where salary in (1000,4000,6000);

El valor SALARY en cada fila es comparado por igual a todos los literales especificados en el conjunto. Si el valor de SALARY es igual a 1000, 4000 o 6000, el LAST_NAME para esa fila es regresado. El operador OR, que será discutido posteriormente en este capítulo, es utilizado para especificar múltiples condiciones en la clausula WHERE, por lo menos uno de los cuales deben cumplirse para que una fila para ser devueltos. El operador IN es equivalente a una serie de condiciones OR. La anterior sentencia SQL se puede escribir utilizando varias cláusulas o condiciones, por ejemplo:

select last_name from employees
where salary = 1000
OR salary = 4000
OR salary = 6000;

Esta declaración regresara un LAST_NAME de empleado si al menos una de las clausulas de las condiciones en WHERE es verdadera; tiene el mismo significado que la anterior declaración de que utiliza el operador IN, como se muestra en la figura 3.10.
Prueba de pertenencia a un grupo usando el operador IN es más concisa que el uso de múltiples concisiones OR, especialmente como el número de miembros en el sistema aumenta. Las dos sentencias siguientes muestran el uso del operador IN con fecha y datos de caracteres.

select last_name from employees
where last_name in ('King','Garbharran','Ramklass');

select last_name from employees
where hire_date in ('01-JAN-1998','01-DEC-1999');
Comparación de Patrones con el Operador LIKE.
Para revisar, el operador BETWEEN proporciona una manera concisa para especificar el rango basado en condiciones, y el operador IN proporciona un método óptimo para probar la pertenencia a conjunto. Ahora introducimos el operador LIKE, el cual está diseñado exclusivamente para los datos de carácter y proporciona un potente mecanismo para la búsqueda de letras o palabras.
LIKE es acompañado por dos caracteres comodín: el símbolo de porcentaje (%) y el guión bajo (_). El símbolo de porcentaje se utiliza para especificar cero o más caracteres comodín, mientras que el carácter de subrayado especifica un carácter comodín. Un comodín puede representar cualquier carácter.


Usted puede ser invitado a presentar una lista de los empleados cuyos nombres comienzan con la letra "A" La siguiente consulta se puede utilizar para ofrecer este conjunto de resultados:

select first_name from employees
where first_name like 'A%';

El carácter literal que la columna FIRST_NAME se compara es encerrado entre comillas simples como un carácter literal regular. Además, tiene un símbolo de porcentaje, que tiene un significado especial en el contexto del operador LIKE. El símbolo de porcentaje sustituye cero o mas caracteres agregados a la letra A. Registros de los empleados con los valores de FIRST_NAME empiezan con la letra A se devuelven. Los caracteres comodín puede aparecer al principio, mitad o al final de un carácter literal. Incluso pueden aparecer solas como en:

where first_name like '%';

En este caso, cada fila contiene un valor en FIRST_NAME que no sea nulo será regresado. Comodines no son obligatorios cuando se utilizan el operador LIKE. En este caso, LIKE se comporta como una prueba de operador de igualdad para las coincidencias de carácter exacto, de modo que las dos siguientes cláusulas WHERE son equivalentes:

where last_name like 'King';
where last_name = 'King';

El comodín guion bajo sustituye exactamente un carácter en un literal. Considere la posibilidad de buscar para los empleados cuyos apellidos son cuatro letras, comienza con una "K", tiene una letra desconocida en segundo lugar, y al final con un ng. Usted puede emitir la siguiente declaración:

where last_name like 'K_ng';

Dependiendo del conjunto de datos, puede recuperar los empleados llamado King, Kong, y Kung. Una forma alternativa de realizar reconocimiento de patrones es utilizar una serie interminable de condiciones OR, pero para lograr los resultados anteriores sin necesidad de utilizar el operador LIKE es excesivamente complejo. Por ejemplo, se puede lograr con la siguiente serie de condiciones OR:

where last_name = 'Kang'
OR last_name ='Kbng'
OR last_name ='Kcng'
OR last_name ='Kzng'

Este ejemplo es incompleto, ya que no es factible una lista de todos los posibles caracteres que pueden ser sustituidos. Este ejemplo demuestra el enorme esfuerzo requerido para sustituir un único carácter sin utilizar el operador LIKE y el símbolo comodín subrayado. Para un número desconocido (cero o más) de las sustituciones de carácter, las posibilidades son exponencialmente mayores que para la sustitución de un solo carácter. No es posible en la práctica para realizar patrón de carácter correspondiente sin necesidad de utilizar el operador LIKE y los símbolos de comodín.
Como muestra la figura 3-11, los dos símbolos comodines se pueden utilizar de forma independiente, en conjunto, o incluso varias veces en una sola condición WHERE. La primera consulta recupera aquellos registros donde COUNTRY_NAME comienza con la letra "I" seguida de cero o más caracteres, uno de los cuales debe ser una letra minúscula "a". La segunda consulta recupera los países cuyos nombres contengan la letra "i" como su quinto carácter. La longitud de los valores COUNTRY_NAME y la carta que empezar no son importantes. Los cuatro símbolos comodín subrayado que precede a la "i" minúscula en la cláusula WHERE representan exactamente cuatro caracteres (que podría ser cualquier carácter). La quinta letra debe ser una "i" y el símbolo de porcentaje se especifica que el COUNTRY_NAME puede tener cero o más caracteres a partir del sexto carácter.


¿Qué pasa con el escenario cuando se está en busca de un literal que contiene el carácter porcentaje y guion bajo? Oracle proporciona una manera de desactivar temporalmente su significado especial y las consideran como caracteres regulares a través del identificador ESCAPE. La tabla JOBS contiene valores en JOB_ID que literalmente, son especificados con un carácter guin bajo, tales como SA_MAN, AD_VP, MK_REP y SA_REP. Suponga que hay, además, una fila en la tabla JOBS con un JOB_ID SA%MAN. Note que no hay carácter de subrayado en este JOB_ID. ¿Cómo puede ser recuperada a partir de los valores de la tabla JOBS si usted está buscando para los valores JOB_ID comienzan con los caracteres SA_? Considere la siguiente instrucción:

select * from jobs
where job_id like 'SA_%';

Esta consulta regresara las filas SA_REP, SA_MAN y SA%MAN. El requisito en este ejemplo no se cumple ya hay una fila adicional, SA%MAN, no conforme a el criterio que comienza con los caracteres SA_, también se vuelve, como el primer ejemplo en el cuadro 3-12 demuestra.
Una forma natural carácter de subrayado puede eliminarse (o tratado como un símbolo regulares no especiales) a través del identificador ESCAPE junto con un carácter de escape. El segundo ejemplo de la figura 3.12 se muestra la instrucción SQL que recupera los registros de la tabla con los valores EMPLEO JOB_ID igual a SA_MAN y SA_REP y que cumple con el requisito original:

select job_id from jobs
where job_id like 'SA\_%' escape '\';


El identificador ESCAPE instruye al Servidor Oracle a tratar cualquier carácter encontrado después de la barra como un símbolo regular no especial sin significado comodín. En la anterior clausula WHERE, los valores JOB_ID que comienzan con los tres caracteres “SA_” serán regresados. Tradicionalmente, el carácter de escape es el símbolo de barra invertida, pero no tiene que ser. La siguiente declaración es equivalente a la anterior, pero utiliza un símbolo del dólar como carácter de escape en su lugar.

select job_id from jobs
where job_id like 'SA$_%' escape '$';

El símbolo de porcentaje puede ser similarmente escapado cuando se producen ocurrencias, hay un requerimiento para recuperar las filas con el JOB_ID hipotético: SA%MAN presentado anteriormente. Consultando la tabla JOBS para los valores en JOB_ID como SA%MAN utilizando el siguiente código en el registro SA_MAN y SA%MAN se devuelven.

select job_id from jobs
where job_id like 'SA%MAN';

El servidor de Oracle interpreta el símbolo de porcentaje en la cláusula WHERE como un símbolo de comodín cuando se utiliza con el operador LIKE. Para obtener la fila con JOB_ID: MAN SA% utilizando el operador LIKE, el símbolo de porcentaje puede eliminarse mediante la siguiente declaración:

select job_id from jobs
where job_id like 'SA\%MAN' ESCAPE '\';

La barra invertida se define como el carácter de escape que indica al servidor Oracle de ignorar las propiedades del símbolo de comodín que ocurren inmediatamente después de la barra invertida. De esta manera, ambos símbolos de comodín puede ser utilizado como caracteres ya sea especializada o regular en los diferentes segmentos de la misma cadena de caracteres.

Comparación con Null con el Operador IS NULL
Los valores NULL inevitablemente vamos a encontrar en las tablas de base de datos. A menudo es necesario que sólo aquellos registros que contengan un valor NULL en una columna específica se busca. El operador IS NULL selecciona sólo las filas donde el valor es NULL columna específica. Prueba los valores de columna NULL para que la igualdad se realiza utilizando el operador IS NULL en lugar de "es igual a" operador (=).
Considere la siguiente consulta que recupera la columna LAST_NAME de la tabla Empleados de las filas que tienen valores NULL almacenados en la columna COMMISSION_PCT:

select last_name from employees
where commission_pct is null;

Esta cláusula WHERE se lee de forma natural y recupera sólo los registros que contienen valores NULL COMMISSION_PCT. Como muestra la figura 3-13, la consulta con el "es igual a" operador no devuelve ninguna fila, mientras que la consulta utiliza el operador IS NULL.

Operadores Boolean
Los datos son restringidos utilizando la clausula WHERE con una sola condición. Operadores Boolean o Lógicos permiten múltiples condiciones se especificadas en la clausula WHERE de la declaración SELECT. Esto facilita la capacidad de extracción de datos más refinados. Considere aislar los registros de empleados con valores en FIRST_NAME que inician con la letra “J” y que ganan una COMISSION_PCT mayor a 10 por ciento.
En primer lugar, los datos en la tabla EMPLOYEES deben estar restringidos a los valores de FIRST_NAME like ‘J%’, y segundo, los valores para COMMISSION_PCT de los registros deben ser probados para determinar si son más grande de 10 porciento. Estas dos condiciones diferentes pueden estar asociados usando el operador Boolean AND y son aplicados consecutivamente en una clausula WHERE. Un conjunto de resultados conforme a cualquiera o todas las condiciones o la negación de una o más condiciones pueden ser especificadas utilizando el operador Boolean.

El Operador AND
El operador AND fusiona las condiciones en una condición más grande a la que una fila deben cumplir para ser incluido en el conjunto de resultados. Los operadores boolean se definen mediante tablas de verdad. Tabla 3-2, la tabla de verdad del operador AND, un resumen de su funcionalidad.
Si las dos condiciones especificadas en una clausula WHERE se unen con un operador AND, luego una fila se prueba de manera consecutiva para la conformidad con las dos condiciones antes de ser recuperado. Si se ajusta a ninguna o solo una de las condiciones, la fila es excluida ya que el resultado es FALSE. Si la fila contiene un valor NULL que hace que una de las condiciones para evaluar a NULL, la fila se excluye. Una fila sólo serán devueltos si todas las condiciones se unieron con un operador AND se evalúa como TRUE. En un escenario con más de dos condiciones se unieron con el operador AND, sólo los datos conforme a todas las condiciones serán devueltos. Registros de los empleados con los valores de FIRST_NAME empiezan con la letra "J" y COMMISSION_PCT superior al 10 por ciento puede ser recuperada mediante la siguiente consulta:

select first_name, last_name, commission_pct, hire_date
from employees
where first_name like 'J%'
and commission_pct > 0.1;

Tenga en cuenta que la cláusula WHERE ahora tiene dos condiciones, pero sólo una palabra clave WHERE. El operador AND separa las dos condiciones. Para especificar más condiciones obligatorias, simplemente sumar y asegurarse de que están separados por operados adicionales AND. Usted puede especificar las condiciones en que lo desee. Recuerde, sin embargo, las condiciones AND son especificadas, el más restrictivo que la consulta se convierte. La figura 3-14 muestra la consulta anterior seguida por dos restricciones adicionales. El valor Hire_date debe ser mayor que 01-JUN-1996, y el APELLIDO debe contener la letra "o" La primera consulta devuelve cuatro filas. Tenga en cuenta que la condición adicional AND en el segundo Query son satisfechas solo por dos filas.



El Operador OR.
El operador OR separa varias condiciones, por lo menos uno de los cuales deben ser satisfechas por la fila seleccionada para justificar su inclusión en el conjunto de resultados. Tabla 3-3, la tabla de verdad del operador OR, un resumen de su funcionalidad.

 

Si las dos condiciones especificadas en una clausula WHERE se unen con un operador OR y luego una fila se prueba de manera consecutiva para la conformidad con las condiciones de una o ambas, antes de ser recuperado. Conforme a una de las condiciones de la condición OR es suficiente para que el registro sea regresado. Si ninguna de las condiciones se cumple, la fila se excluye ya que el resultado es FALSO. Una fila sólo será devuelta si al menos una de las condiciones asociadas con un operador OR se evalúa como TRUE. Recuperación de registros de los empleados que tengan valores de FIRST_NAME comenzando con la letra B o aquellos con una mayor COMMISSION_PCT del 35 por ciento puede ser su forma escrita como:

select first_name, last_name, commission_pct, hire_date
from employees
where first_name like 'B%'
or commission_pct > 0.35;

Tenga en cuenta que las dos condiciones están separados por la palabra clave OR. Todos los registros de los empleados con valores en FIRST_NAME que inicien con “B” mayúscula serán regresados, independientemente de sus valores en COMMISSION_PCT, incluso si son Null. Todos los registros que tengan valores COMMISSION_PCT mayor que el 35 porciento, independientemente de que la primera letra en FIRST_NAME, también se regresan.
Además condiciones OR pueden ser especificadas mediante la separación entre ellas con un operador OR. Las condiciones OR mas especificadas, menos restrictiva. La figura 3-15 muestra la consulta anterior con dos condiciones OR adicionales. El valor en HIRE_DATE debe ser mayor a 01-JAN-2000 o debe iniciar LAST_NAME con la letra “B”. La primera consulta devuelve menos filas de la segunda consulta, ya que más filas cumplan las condiciones menos restrictivas en la segunda consulta que en el primero.

Escenarios y Soluciones
Usted tiene una consulta compleja con múltiples condiciones. ¿Hay alguna restricción sobre el número de condiciones se puede especificar en la cláusula WHERE? ¿Hay un límite en el número de operadores de comparación se puede utilizar en una sola consulta? No. Usted puede especificar cualquier número de condiciones en la cláusula WHERE separadas por los operadores booleanos. No hay límite al utilizar los operadores de comparación, y se puede especificar varias veces si es necesario en una sola consulta.
Usted ha recibido el encargo de localizar a las filas de la tabla de EMPLOYEES, donde los valores SALARIO contienen los números 8 y 0 adyacentes entre sí. La columna SALARIO tiene un tipo de datos NUMBER. ¿Es posible utilizar el operador de comparación LIKE con datos numéricos? Si, Oracle automáticamente hace cast a los datos en el tipo de dato requerido, si es posible. En este caso, los valores numéricos se SALARIO momentáneamente "cambiado" en los datos de carácter que permite el uso del operador LIKE para buscar patrones coincidentes. La localiza la siguiente consulta de las filas necesarias:
SELECT * FROM EMPLOYEES
WHERE SALARY LIKE '%80%';”
Al restringir las filas devueltas de la tabla JOBS a aquellas que contienen la SA_REP valor en la columna JOB_ID, es una proyección, selección o unión a realizar? Una selección es desarrollada desde que las filas son restringidas.

Operador NOT
El operador NOT niega operadores condicionales. Una fila seleccionada debe cumplir con el opuesto lógico de la condición para ser incluido en el conjunto de resultados. La tabla 3-4, la tabla de verdad del operador NOT, un resumen de su funcionalidad.
Operadores condicionales pueden ser negados por el operador NOT como se muestra mediante la cláusula WHERE que figuran en la Tabla 3-5.
Como muestran los ejemplos en la Tabla 5.3 sugieren, el operador NOT puede ser muy útil. Es importante entender que el operador NOT niega el operador de comparación en una condición, si se trata de una igualdad, desigualdad, basada en rango, coincidencia de patrones, pertenencia a un grupo o el operador null.

Recuperación de registros de empleados con valores en FIRST_NAME que no inician con la letra “B” o que no cumplan con COMMISSION_PCT más grande que 35 porciento:

select first_name, last_name, commission_pct, hire_date
from employees
where first_name not like 'B%'
or not (commission_pct > 0.35);

Tenga en cuenta que las dos condiciones siguen separados por el operador OR y el operador NOT ha sido añadido a ellos.

En el Trabajo
Los operadores Boolean AND y OR que permiten múltiples condiciones en la clausula WHERE en una sola consulta. Todas las condiciones separadas mediante un operador AND deben ser evaluadas a TRUE después de la prueba los valores de una fila para evitar ser excluidos de los resultados finales establecidos. Sin embargo, solo una de las condiciones separadas por un operador OR debe ser evaluadas a TRUE para evitar su exclusión de los resultados finales fijados. Si cinco condiciones, A, B, C, D y E, aparecen en una clausula WHERE como WHERE A And B Or C Or And E, luego una fila será regresada si las dos condiciones A And B se cumplen, o solo la condición C, o solo la condición D, o ambas condiciones D and E se cumplen.

Reglas de Precedencia
Las expresiones aritméticas, carácter y expresiones Boolean se examinaron en el contexto de la clausula WHERE. Pero, ¿cómo estos operadores interactúan unos con otros? Los operadores aritméticos suscribirse a una jerarquía de prioridad. Expresiones entre paréntesis se evalúan antes que los operadores de multiplicación y división, que se evalúan antes que la resta y operadores de suma. Del mismo modo, existe una jerarquía de prioridad de los operadores mencionados anteriormente, como se muestra en la Tabla 3-6. Los operadores en el mismo nivel de prioridad se evalúan de izquierda a derecha si se encuentran juntos en una expresión. Cuando el operador NOT modifica los operadores de comparación LIKE, IS NULL y IN. su nivel de prioridad sigue siendo la misma como la forma positiva de estos operadores.

Considere la siguiente declaración SELECT que demuestra la interacción de varios operadores.

select last_name,salary,department_id,job_id,commission_pct
from employees
where last_name like '%a%' and salary > department_id * 200
or
job_id in ('MK_REP','MK_MAN') and commission_pct is not null

Las columnas LAST_NAME, SALARY, DEPARTMENT_ID, JOB_ID y COMMISSION_PCT son proyectadas desde la tabla EMPLOYEES en base a dos condiciones discretas. La primera condición recupera los registros que contienen el carácter “a” en el campo LAST_NAME y con un SALARY mayor que 200 veces que el valor de DEPARTMENT_ID. El producto de DEPARTMENT_ID y 200 se procesa antes del operador de desigualdad ya que la prioridad de multiplicación es mayor que la comparación de desigualdad.
La segunda condición trae las filas con valores de JOB_ID de MK_MAN o MK_REP en que los valores de COMMISSION_PCT no sean nulos. Para una fila para ser devueltos por esta consulta, ya sea las condiciones de primer o segundo se deben cumplir. Figura 3.16 ilustra tres consultas. Consulta 1 devuelve cuatro filas. Consulta 2 se basa en la primera condición que acabamos de mencionar y devuelve cuatro filas. Consulta 3 se basa en la segunda condición y devuelve cero filas.


Cambiar el orden de las condiciones en la cláusula WHERE cambia su significado debido a la diferente prioridad de los operadores. Considere el siguiente ejemplo de código:

select last_name,salary,department_id,job_id,commission_pct
from employees
where last_name like '%a%' and salary > department_id * 100 and
commission_pct is not null
or
job_id = 'MK_MAN'

Hay dos condiciones compuesto en esta consulta. La primera condición recupera los registros con el carácter "a" en el campo APELLIDOS Y SALARIO un valor superior a 100 veces el valor DEPARTMENT_ID y donde el valor COMMISSION_PCT no es nulo.
La segunda condición recupera las filas con valores en JOB_ID de MK_MAN. Una fila es recuperada con esta consulta. si se ajusta a una condición de una o dos condiciones, pero no necesariamente a ambos.


Como ilustra la figura 3.17, esta consulta devuelve seis filas. Muestra, además, la división de la consulta en dos consultas sobre la base de sus dos condiciones compuesto. Los resultados de la primera condición en cinco filas que se devuelven, mientras que los resultados del segundo en la recuperación de una sola fila con un valor de JOB_ID MK_MAN.

Examen
Los operadores OR y AND permiten multiples condiciones en la clausula WHERE a ser especificadas. El operador NOT niega un operador condicional y puede ser utilizado varias veces en las mismas condiciones. Los operadores de comparación de igualdad, desigualdad, BETWEEN, IN y LIKE prueban dos términos dentro de una sola condición. Sólo un operador de comparación se utiliza por la cláusula condicional. La distinción entre los operadores Boolean y comparación es importante y constituye la base para muchas preguntas relacionadas con este capítulo en el examen.

Objetivo de Certificación 3.02
Ordenar las filas recuperadas por una consulta.
Los diccionarios de lengua regular clasifican palabras en orden alfabético. Páginas impresas en un libro se ordenan numéricamente en orden ascendente de principio a fin. Las aplicaciones prácticas de selección y proyección se han cubierto hasta ahora. La usabilidad de los conjuntos de datos recuperados puede ser significativamente mejorada con un mecanismo para ordenar o clasificar la información. La información puede ser ordenada alfabéticamente, numéricamente, de la primera a la última, o en orden ascendente o descendente. Además, los datos pueden ser ordenados por una o más columnas, incluyendo las columnas que no figuran en la cláusula SELECT. La ordenación se realiza una vez los resultados de una sentencia SELECT han sido extraídas. Los parámetros de clasificación no influyen en los registros devueltos por una consulta, sólo la presentación de los resultados. Exactamente las mismas filas devueltas por una declaración, incluyendo una cláusula de ordenación como son devueltas por una instrucción excluir una cláusula de ordenación. Sólo el orden de la salida puede ser diferente. Clasificación de los resultados de una consulta se realiza mediante la cláusula ORDER BY.

La Clausula ORDER BY
Cuando se crean las tablas, que inicialmente están vacíos y no contienen filas. Como se insertan filas, actualizan y eliminan por uno o más usuarios o sistemas de aplicación, el orden original de las filas almacenada es perdido. El servidor de Oracle no puede y no garantiza que las filas se almacenan de manera secuencial. Esto no es un problema, ya que un mecanismo para ordenar el conjunto de datos recuperados está disponible en la forma de la cláusula ORDER BY.
Esta cláusula se encarga de transformar la salida de una consulta en más práctico y fácil de usar datos ordenados. La cláusula ORDER BY es siempre la última cláusula de una sentencia SELECT. Como la sintaxis completa de la instrucción SELECT es cada vez expuestas, también se observan nuevas cláusulas nuevas, pero ninguna de ellas se colocará después de la cláusula ORDER BY. El formato de la cláusula ORDER BY en el contexto de la instrucción SQL SELECT es la siguiente:

SELECT *|{[DISTINCT] column|expression [alias],…}
FROM table
[WHERE condition(s)]
[ORDER BY {col(s)|expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]];

Ordenamiento Ascendente y Descendente
Orden ascendente es natural para la mayoría de los tipos de datos y por lo tanto el orden predeterminado que se utiliza cada vez que la cláusula ORDER BY se especifica. Un orden ascendente de los números es el más bajo al más alto, mientras que es primera a última para fechas y por orden alfabético de los caracteres. La primera forma de la cláusula ORDER BY muestra que los resultados de una consulta puede ser ordenada por una o más columnas o expresiones:

ORDER BY col(s)|expr;

Supongamos que se solicita un informe que debe contener LAST_NAME de un empleado, Hire_date, y la información sobre salarios, ordenados alfabéticamente por la columna LAST_NAME para todos los representantes de ventas y marketing. Este informe puede ser extraída con la siguiente sentencia SELECT:

select last_name, hire_date, salary
from employees
where job_id in ('SA_REP','MK_MAN')
order by last_name;

Los datos seleccionados se puede ordenar por cualquiera de las columnas de las tablas en la cláusula FROM, incluso los que no aparecen en la lista SELECT. Los resultados de la consulta anterior se pueden ordenar por la columna COMMISSION_PCT, como se muestra en la figura 3.18.
El segundo ejemplo de la figura 3.18 muestra que añadiendo la palabra clave DESC a la cláusula ORDER BY, las filas se devuelven en orden descendente según la columna COMMISSION_PCT. El tercer ejemplo demuestra las palabras claves NULLS LAST opcional, que especifica que si la columna de ordenación contiene valores nulos, continuación, estas filas se enumeran en último lugar después de clasificar las filas restantes sobre la base de sus valores no NULL. Para especificar que las filas con valores nulos en la columna de ordenación se debe mostrar en primer lugar, añadir las palabras clave NULLS FIRST a la cláusula ORDER BY. El siguiente ejemplo ordena un conjunto de datos basado en una expresión. Esta expresión calcula el valor de un empleado de una empresa basada en sus valores Hire_date y salario. Esta fórmula toma el valor Hire_date y resta un número determinado de días para devolver una fecha anterior. El número de días resta se calcula dividiendo el valor de sueldo por 10. La expresión es el alias EMP_VALUE de la siguiente manera:

select last_name, salary, hire_date, hire_date-(salary/10) emp_value
from employees
where job_id in ('SA_REP','MK_MAN')
order by emp_value;


La expresión EMP_VALUE se inicializa con el valor Hire_date y se compensa lejos en el pasado basándose en el campo salarial. La fecha más temprana EMP_VALUE aparece por primera vez en la salida del conjunto de resultados ya que la cláusula ORDER BY especifica que los resultados serán ordenados por el alias de expresión. Tenga en cuenta que los resultados pueden ser ordenados por la expresión explícita y el alias podría ser omitido, como en ORDER BY Hire_date - (SALARY/10), pero el uso de alias hace que la consulta más fácil de leer.
Varias opciones por defecto implícito se seleccionan cuando se utiliza la cláusula ORDER BY. El más importante de ellas es que a menos que se especifica DESC, el orden se supone que es ascendente. Si los valores nulos se producen en la columna de ordenación, el orden predeterminado se supone que es NULLS LAST para ordenar ascendentemente y NULLS FIRST para ordenamiento Descendentes. Si no hay cláusula ORDER BY especifica, la misma consulta ejecutada en diferentes momentos puede regresar el mismo conjunto de resultados en orden de registro diferentes, por lo que no debe hacer suposiciones con respecto a la orden de registro por defecto.

Oracle ofrece un método alternativo y más corto para especificar el orden de columna o una expresión. En lugar de especificar el nombre de la columna, la posición de la columna tal como aparece en la lista SELECT se agrega a la cláusula ORDER BY. Consideremos el siguiente ejemplo:

select last_name, hire_date, salary
from employees
where job_id in ('SA_REP','MK_MAN')
order by 2;

La clausula ORDER BY específica el literal numérico 2. Esto es equivalente a especificar ORDER BY Hire_date., ya que la columna Hire_date es la segunda columna seleccionada en la cláusula SELECT.
Ordenación posicional sólo se aplica a las columnas de la lista SELECT que tiene una posición numérica asociada con ellos. Modificar la consulta anterior para ordenar los resultados por la columna JOB_ID no es posible con la clasificación de posición ya que esta columna no aparece en la lista SELECT.

Ordenación Compuesta
Resultados de una consulta puede ser ordenada por más de una columna utilizando Ordenación compuesto. Dos o más columnas puede especificarse (ya sea literalmente o posicionalmente) como la llave de ordenamiento compuesto separándolas con comas en la clausula ORDER BY. Considere el requerimiento para encontrar el JOB_ID, LAST_NAME, SALARY y HIRE_DATE de la tabla empleados. Los nuevos requerimientos son que los resultados deben ser ordenados en orden alfabetico inverso por el JOB_ID primero, luego en orden alfabético ascendente por LAST_NAME, y finalmente, en orden descendente numéricamente basados en la columna SALARY. La siguiente instrucción SELECT cumple con estos requisitos:

select job_id, last_name, salary, hire_date
from employees
where job_id in ('SA_REP','MK_MAN')
order by job_id desc, last_name, 3 desc;

Cada columna que participa en el ordenamiento es listada de izquierda a derecha en orden de importancia, separados mediante comas en la clausula ORDER BY, incluyendo el modificador DESC, que aparece dos veces en esta cláusula. Este ejemplo también demuestra especificaciones literal y columnas posicionales. Como muestra la figura 3-19, hay varias flas con el mismo valor en JOB_ID, por ejemplo, SA_REP. Por estas filas, los datos se ordenan alfabéticamente por la llave de ordenamiento secundario, que es la columna LAST_NAME.


Para las filas con los mismo valores en JOB_ID y mismos en los valores de la columna LAST_NAME tales como SA_REP y Smith, estas filas son ordenadas en orden descendente numérico mediante la tercera columna de ordenamiento, SALARY.

Examen
El concepto de ordenamiento de Datos es generalmente probado a fondo. La sintaxis de la cláusula ORDER BY es sencillo, pero los términos múltiples de ordenamiento como las expresiones, columnas y especificadores de posición, junto con las ordenes de ordenamiento descendente de algunos términos y ordenes de ordenamiento ascendente para otros, proporcionar un mecanismo de Ordenación datos de gran alcance que viene con el correspondiente aumento de la complejidad. Esta complejidad se prueba a menudo, así que asegúrese de que tiene un sólido entendimiento de la cláusula ORDER BY.


Objetivo de Certificacion 3.03. 

Ampersand Substitution.

Como las consultas se han desarrollado y perfeccionado, se pueden guardar para uso futuro. A veces, las consultas se diferencian muy poco, y es deseable tener una forma más genérica de la consulta que tiene una variable o un marcador de posición definida que puede ser sustituido en tiempo de ejecución. Oracle ofrece esta funcionalidad en forma de ampersand. Cada elemento de la instrucción SELECT puede ser sustituido, y la reducción de las consultas a sus elementos básicos para facilitar la reutilización puede ahorrar horas de trabajo tedioso y repetitivo. Las siguientes áreas se examinan en esta sección:

- Variables de Sustitución.
- Los comandos DEFINE y VERIFY.

Variables de Sustitución
La clave para entender las variables de de sustitución consiste en considerarlos como marcadores de posición. Una consulta SQL se compone de dos o más cláusulas. Cada cláusula puede ser dividido en apartados, que a su vez compuestos de texto de carácter. Cualquier texto, inciso o cláusula de elemento, o incluso la totalidad de consulta SQL es una candidata a la sustitución. Considere la instrucción SELECT en su forma

SELECT *|{[DISTINCT] column|expression [alias],…}
FROM table
[WHERE condition(s)]
[ORDER BY {col(s)|expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]];

Mediante la sustitución, insertar valores en los elementos en cursiva, elegir las palabras claves opcionales para usarlos en sus consultas. Cuando la columna LAST_NAME en la tabla EMPLOYEES es requerida, la consulta se construye con la forma general de la declaración SELECT y sustituyendo el nombre de la columna: LAST_NAME en lugar de la palabra columna en la clausula SELECT y el nombre de la Tabla; EMPLOYEES en el lugar de la palabra table en la clausula FROM.

Sustitución Ampersand Simple
La forma más básica y popular de sustitución de elementos en una declaración SQL es la sustitución de ampersand sola. El carácter ampersand (&) es el símbolo elegido para designar una variable de sustitución en una declaración y precede al nombre de la variable sin espacios entre ellos. Cuando la declaración es ejecutada, el servidor Oracle procesa la declaración, nota una variable de sustitución, e intenta resolver el valor de esta variable de una forma de dos. Primero, comprueba si la variable se define en la sesión del usuario. (El comando DEFINE se discute más adelante en este capítulo.) Si la variable no está definida, el proceso de usuario solicita un valor que va a ser sustituido en lugar de la variable. Una vez que el valor se presenta, la declaración es completa y se ejecuta el servidor de Oracle. La variable de sustitución de ampersand se resuelve en tiempo de ejecución y se conoce a veces como la sustitución de tiempo de ejecución obligatoria o tiempo de ejecución. Un requisito común en el ejemplo del departamento de HR puede ser recuperar la misma información para los empleados en diferentes momentos.
Tal vez usted está obligado a buscar información de contacto como PHONE_NUMBER dando el LAST_NAME o EMPLOYEE_ID. Esta solicitud genérica puede ser escrita como sigue:

select employee_id, last_name, phone_number
from employees
where last_name = &LASTNAME
or employee_id = &EMPNO;

Como muestra la figura 3-20, cuando se ejecuta esta consulta, el Servidor de Oracle le solicita que introduzca un valor de la variable llamada LASTNAME. Que escriba el lastname de un empleado, si lo sabe, por ejemplo, 'King'. Si usted no sabe el lastname, pero sabe el número de identificación del empleado, usted puede escribir cualquier valor y pulse la tecla ENTER para envir el valor. Oracle le pide que introduzca un valor para la variable EMPNO. Después de escribir un valor, por ejemplo, 0, y pulsar ENTER, no hay variables restantes de substitución para que Oracle resuelva y se ejecuta la declaración siguiente:no hay variables restantes de la substitución para que Oracle resuelva y se ejecuta la declaración siguiente : no hay variables restantes de la substitución para que Oracle resuelva y se ejecuta la declaración siguiente:

select employee_id, last_name, phone_number
from employees
where last_name = 'King'
or employee_id = 0;

Las variables se pueden asignar cualquier nombre alfanumérico que es un nombre de identificador válido. El sustituto literal que cuando se le pida para una variable debe ser un tipo de datos adecuado para ese contexto, de lo contrario, un ORA-00904: invalid identifier error is returned. Si la variable se significa para sustituir un carácter o fecha, el literal necesita ser incluido en apostrofes simples. Una técnica útil es incluir la variable de sustitución del signo & en comillas simples cuando se trata de carácter y valores fecha. De esta manera,


El usuario está obligado a enviar un valor literal sin preocuparse por encerrar entre comillas. La declaración siguiente rescribe el anterior pero encierra la variable LASTNAME en comillas.

select employee_id, last_name, phone_number, email
from employees
where last_name = '&LASTNAME'
or employee_id = &EMPNO;

Cuando se le pida un valor a sustituir la variable LASTNAME, Es posible, por ejemplo, enviar el valor King sin ninguna comilla simple, ya que estos ya están presentes y cuando la sustitución se realiza en tiempo de ejecución, la primera condición de la clausula WHERE se resolverá: WHERE LAST_NAME = ‘King’.

Doble Sustitución Ampersand
Hay ocasiones en que una variable de sustitución se hace referencia varias veces en la misma consulta. En tales situaciones, el servidor Oracle le pedirá que introduzca un valor para cada ocurrencia de la variable sustitución ampersand. Para scripts complejos esto puede ser muy ineficiente y tedioso. La siguiente declaración recupera las columnas FIRST_NAME y LAST_NAME de la tabla EMPLOYEES para las filas que contienen el mismo conjunto de caracteres en estos dos ámbitos:

select first_name, last_name
from employees
where last_name like '%&SEARCH%'
and first_name like '%&SEARCH%';

Las dos condiciones son idénticas pero se aplican a diferentes columnas. Cuando se ejecuta esta instrucción, primero se le pide que introduzca un valor de sustitución para la variable SEARCH utilizada en la comparación con la columna LAST_NAME. A partir de entonces, se le pedirá que introduzca un valor de sustitución para la variable SEARCH utilizado en la comparación con la columna FIRST_NAME. Esto plantea dos problemas. Primero, es ineficiente ingresar dos veces el mismo valor, pero el segundo y más importante, errores tipográficos pueden confundir a la consulta ya que Oracle no comprueba que el mismo valor literal es ingresado en cada variable de sustitución con el mismo nombre usado. En este ejemplo, la suposición lógica es que el contenido de las variables sustituido deberá ser el mismo, pero el hecho de que las variables tienen el mismo nombre no tiene significado para el servidor de Oracle y no hace ninguna de esas hipótesis. El primer ejemplo en la figura 3-21 muestra los resultados de la ejecución de la consulta anterior y el envio de dos valores distintos para la variable de sustitución SEARCH. En este ejemplo en particular, los resultados son incorrectos dado que la exigencia era para recuperar pares FIRST_NAME y LAST_NAME, que contenía la cadena de caracteres idénticos.


En situaciones cuando una variable de sustitución es referenciada varias veces en la misma consulta y su intención es que la variable debe tener el mismo valor en cada ocurrencia en la declaración, es preferible hacer uso de la sustitución ampersand doble. Esto implica que el prefijo de la primera aparición de la variable de sustitución que se produce varias veces en la consulta. Con dos ampersand en lugar de uno. Cuando el servidor oracle encuentra una variable sustitución con ampersand doble, un valor de la sesión es definido para esa variable y no se le pide introduzca un valor para ser sustituido por esta variable en las referencias posteriores.
El segundo ejemplo en la figura 3-21 demuestra como la variable SEARCH es precedida por dos signos ampersand en la condición con la columna FIRST_NAME y a partir de entonces se prefija con un solo ampersand en la condición con la columna LAST_NAME. Cuando se ejecuta, se le pedirá que introduzca un valor para ser enviado a la variable SEARCH solo una vez para la condición con la columna FIRST_NAME. Este valor se resuelve automáticamente desde el valor de sesión de la variable en las referencias posteriores a él, como en la condición de la columna LAST_NAME. Para quitar (undefine) la variable SEARCH, es necesario utilizar el comando UNDEFINE se describe más adelante en este capítulo.

En el Trabajo
Tanto si trabaja como desarrollador, administrador de base de datos o usuario final, todas las consultas SQL que encuentre puede clasificarse ampliamente como ad hoc o consultas repetidas. Consultas Ad Hoc suelen ser de una sola vez, las declaraciones escritas durante alguna investigación de datos que es probable que sean reutilizados. Las consultas repetidas son las que se ejecutan con frecuencia o de forma periódica, que normalmente se guardan como archivos de comandos y ejecutar con poca o ninguna modificación cuando sea necesario. Reutilización evita el tiempo redesarrollo costosa y permite que estas consultas consistentes en beneficio potencial de nativos de Oracle cuenta con ajuste automático orientado a la mejora de rendimiento de las consultas.

Sustitución de los Nombres de Columnas
Elementos literal de la cláusula WHERE han sido el foco de la discusión sobre la sustitución hasta ahora, pero prácticamente cualquier elemento de una sentencia SQL es una candidata a la sustitución. En la siguiente declaración, las columnas FIRST_NAME y JOB_ID son estáticos siempre se recuperará, pero la tercera columna seleccionada es variable y se especifica como una variable de sustitución, y siempre se recuperara, pero la tercera columna seleccionada es variable y se especifica como una variable de sustitución llamada: COL. El conjunto de resultados es más ordenada por esa columna de la variable en la cláusula ORDER BY:

select first_name, job_id, &&col
from employees
where job_id in ('MK_MAN','SA_MAN')
order by &col;

Como los demuestra la figura 3-22, en tiempo de ejecución, se solicita proporciona un valor para la variable ampersand doble llamada COL. Usted podría, por ejemplo, ingresar el nombre de l columna llamada SALARY y enviar su entrada. La declaración que ejecute desarrollar la sustitución y recuperara las columnas FIRST_NAME, JOB_ID y SALARY de la tabla EMPLOYEES ordenados por SALARY.
A diferencia de literales carácter y fechas, referencias a nombres de columnas no requiere comillas simples cuando son especificadas explícitamente o cuando son sustituidas vía ampsersand.

Sustitución de Expresiones y Texto
La mayoría de los elementos de una declaración SQL puede ser sustituida en tiempo de ejecución. La limitante es que Oracle requiere que al menos la primera palabra sea estática. En el caso de la declaración SELECT. La palabra SELECT es requerida y el resto de la declaración puede ser sustituida como sigue:

select &rest_of_statement;


Cuando ejecuta esta declaración, le solicita enviar un valor para la variable llamada: REST_OF_STATEMENT, que podría ser cualquier query legitimo, tales como DEPARTMENT_NAME from DEPARTMENTS. Si usted envía este texto como entrada para la variable, la consulta que está ejecutando será resuelta como la siguiente declaración:

select department_name from departments;

Considere la forma general de la declaración SQL rescrita utilizando sustitución ampersand, como sigue:

select &SELECT_CLAUSE
from &FROM_CLAUSE
where &WHERE_CLAUSE
order by &ORDER_BY_CLAUSE;

La utilidad de esta declaración es discutible, pero ilustra el concepto de sustitución efectivamente. Como se muestra en la figura 3-23, la declaración anterior permite cualquier consulta a ser enviada en tiempo de ejecución. La primera ejecución consulta la tabla REGIONS, mientras la segunda ejecuta una consulta a la tabla COUNTRIES. Candidatos factibles a sustitución ampersan son declaraciones que son ejecutadas múltiples veces y diferentes ligeramente una de otras.



Define Y Verify
Sustitución ampersand doble es utilizada para evitar entradas repetitivas cuando las misma variable aparece varias veces en una declaración. Cuando una sustitución ampersand doble aparece, la variable es almacenada como una variable sesión. Como se ejecuta la sentencia, todos los nuevos casos de la variable se resuelve automáticamente mediante la variable de sesión almacenada. Cualquier ejecución posterior de la declaración en la misma sesión automáticamente resuelve las variables de sustitución de los valores de sesión almacenada. Esto no siempre es deseable y de hecho limita la utilidad de las variables de sustitución. Oracle, sin embargo, proporcionar un mecanismo para UNDEFINE estas variables de sesión.

Dentro del Examen
Hay tres objetivos de certificación en este capítulo. Limitar las filas recuperadas por una consulta introdujo la cláusula WHERE, que prácticamente demuestra el concepto de selección. Las condiciones que limitan las filas devueltas se basan en comparaciones con el BETWEEN, IN, LIKE, los operadores de igualdad y desigualdad. Su profundo conocimiento de estos operadores de comparación y su comportamiento con el de caracteres, numéricos y tipos de datos fecha se analizarán, junto con la forma en que son diferentes de los booleano NOT, AND, OR y los operadores.
Usando la cláusula ORDER BY para ordenar los resultados recuperados es opcional y muy útil. Las preguntas del examen que ponen a prueba los conceptos de ordenación tradicional, de posición, y compuesta, además de cómo los valores NULL se puede manejar, son comunes. Cuando varios términos de Ordenar están presentes en la cláusula ORDER BY, es aceptable para especificar órdenes ascendentes de ordenación para algunos y descendentes de ordenación para los demás. Es un error común olvidar que Oracle ofrece esta característica de ordenación mixta, así como para la especificación de los NULLS FIRST | LAST modifier.
Su comprensión de la sustitución con ampersand simple y doble así como los comandos DEFINE y UNDEFINE serán probados. Se le puede dar una declaración que incluye una variable de signo doble sustitución que posteriormente se hace referencia varias veces en la declaración, junto con una variable de sustitución de un solo signo, que se espera para entender las diferencias en su comportamiento. Su comprensión de nombre de la columna, la expresión y la sustitución de texto también puede ser medida.
Se le puede dar una declaración que incluya una variable de sustitución ampersand doble que posteriormente se referencia varias veces en la declaración, junto con una variable de sustitución ampersand simple, se espera entender las diferencias en su comportamiento. Su comprensión de nombre de columna, expresión y texto de sustitución también puede ser medida.

El comando VERIFY es especifico de SQL * PLUS y controla sí o no los elementos son sustituidos.

Los comandos DEFINE y UNDEFINE
Las variables de nivel sesión se crean de forma implícita cuando inicialmente se hace referencia en las declaraciones SQL de la sustitución ampersand doble. Ellas persisten o siguen estando disponibles durante la sesión o hasta que son explícitamente undefined. Una sesión termina cuando el usuario sale de la herramienta cliente como SQL * Plus o cuando el proceso de usuario es terminado de forma anormal.
El problema con las variables de sesión persistente es que tienden a menoscabar el carácter genérico de las declaraciones que el uso de variables de sustitución de ampersand. Afortunadamente, estas variables de sesión se pueden eliminar con el comando UNDEFINE. Dentro de un script o en la línea de comandos de SQL * Plus o SQL Developer, la sintaxis de las variables de sesión undefining es el siguiente:

UNDEFINE variable;

Considere un simple ejemplo genérico que selecciona una columna estática y variable de la tabla EMPLOYEES y ordena la salida basada sobre una columna variable. La columna estática podría ser la columna LAST_NAME.

select last_name, &&COLNAME
from employees
where department_id=30
order by &COLNAME;

La primera vez que se ejecuta la declaración, le solicita un valor de entrada para la variable llamada COLNAME. Supongamos que usted ingrese SALARY. El valor es sustituido y la declaración es ejecutada. Una posterior ejecución de esta declaración con la misma sesión no solicita valor para COLNAME puesto que ya está definido como SALARY en el contexto de esta sesión y puede ser solo se undefined con el comando UNDEFINE COLNAME, como se muestra en la figura 3-24. Una vez que la variable ha sido undefined, la siguiente ejecución de la declaración solicita al usuario un valor para a variable COLNAME.
El comando DEFINE sirve para dos propósitos. Se puede utilizar para recuperar una lista de todas las variables definidas actualmente en su sesión de SQL, sino que también se puede utilizar para definir explícitamente un valor de una variable referenciado como una variable de sustitución de una o más declaraciones durante la vida de esa sesión. La sintaxis de las dos variantes del comando DEFINE son los siguientes:

DEFINE;
DEFINE variable=value;

Como los muestra la figura 3-25, una variable llamada EMPNAME es definida explícitamente y tiene el valor ‘King’. El comando DEFINE en SQL PLUS devuelve un numero de variables de sesión prefijadas con un carácter guion bajo, asi como otras variables familiares, incluyendo EMPNAME y variables de sustitución ampersand doble definidas implícitamente anteriormente. Dos ejemplos de consultas diferentes se ejecutan, y la sustitución de variables EmpName definido explícitamente hace referencia a ambas consultas. Por último, la variable no está definida.

La capacidad de la herramienta cliente de SQL para apoyar persistencia de sesión de las variables puede ser apagado y encendido como se requiera usando el comando SET. El comando SET no es un comando de lenguaje SQL, sino más bien un comando de control de entorno SQL. SET DEFINE OFF, la herramienta de cliente (por ejemplo, SQL * Plus) no guarda las variables de sesión o adjuntar un significado especial para el símbolo &. Esto permite que el símbolo & para ser utilizado como un carácter ordinario, literal, si es necesario. La instrucción SET DEFINE ON | OFF por lo tanto, determina si la sustitución de ampersand está disponible en la sesión.



El siguiente ejemplo utiliza el símbolo ampersand como un valor literal. Cuando se ejecute, se le solicitara envían un valor a la variable SID.

select 'Coda & Sid' from dual;

Al desactivar la funcionalidad de sustitución de ampersand de la siguiente manera, esta consulta se puede ejecutar sin solicitudes de valores:

SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON

Una vez que se ejecuta la sentencia, la SET DEFINE OFF se puede utilizar para cambiar la funcionalidad de la sustitución de nuevo. Si DEFINE is SET OFF y el contexto y el contexto en el que el signo ampersand se utiliza en una declaración no puede ser resuelto, literalmente, Oracle devuelve un error.

Escenarios y Soluciones
La lista SELECT de una consulta contiene una sola columna. ¿Es posible ordenar los resultados recuperados por esta consulta por otra columna? Sí. A menos que la ordención de posición se usa, la cláusula ORDER BY es independiente de la cláusula SELECT en un comunicado.
Variables de sustitución de ampersand soporta reutilización de manera repetitiva de sentencias de SQL ejecutadas. Si un valor sustituido es para ser usado varias veces en diferentes partes de la misma declaración, es posible que se le pida que presente un valor de sustitución de una sola vez y para ese valor de forma automática a ser sustituidos durante las referencias posteriores a la misma variable? Sí. Los dos métodos que pueden utilizarse son la sustitución de ampersand doble o el comando DEFINE. Ambos métodos causan en el usuario que haya facilitado la entrada de una variable de sustitución específica, una vez. Este valor se mantiene ligado a la variable de la duración de la sesión, a menos que sea explícitamente UNDEFINED.
Recuperar los valores de LAST_NAME y DEPARTMNET_ID para todas las filas en la tabla EMPLOYEES. La salida debe ser ordenada por una columna DEPARTMENT_ID nullable, y todas la filas con valores NULL en DEPARTMENT_ID debe listado hasta lo último para proporcionar el resultado solicitado. Si, la clausula ORDER BY ofrece la ordenación por columnas que potencialmente contienen valores NULL mediante el uso de los modificadores NULL FIRTS o NULL LAST. La siguiente consulta localiza las filas solicitadas: SELECT LAST_NAME, DEPARMENT_ID FROM EMPLOYEES ORDER BY DEPARTMENT_ID NULL LAST;

El comando VERIFY.
Como se señalo anteriormente, dos categorías de comandos están disponibles cuando se trata con el Servidor Oracle: Comandos del Lenguaje SQL y los comandos del Control de Cliente SQL. La declaración SELECT es un ejemplo de un comando del lenguaje, mientras el comando SET es un comando de control del entorno cliente SQL. Hay muchos lenguajes diferentes y comandos de control disponibles, pero los comandos de control pertinentes a sustitución son DEFINE y VERIFY.
El comando VERIFY controla si la variable de sustitución es desplegada en la pantalla para verificar que la correcta sustitución se ha producido. Un mensaje es desplegado la vieja clausula seguido por la nueva clausula conteniendo el valor sustituido. El comando VERIFY se enciende y se apaga ON y OFF con el comando SET VERIFY ON | OFF. Como se muestra en la figura 3-26, VERIFY es primero OFF, una consulta que utiliza sustitución ampersand es ejecutada, y el resultado es desplegado.
VERIFY entonces esta ON, la misma consulta es ejecutada, y se le pedirá que introduzca un valor. Una vez que el valor es introducido y antes de la instrucción comienza la ejecución, Oracle muestra la cláusula que contiene la referencia a la variable de sustitución, como la clausula vieja con numero de línea, justo debajo de este, la nueva cláusula muestra la instrucción que contiene el valor sustituido.



Resumen de Certificación.
La clausula WHERE proporciona al lenguaje la capacidad de selección en la cláusula SELECT. Los criterios para incluir o excluir filas en forma de condiciones. Utilización de operadores de comparación, dos términos se comparan entre sí y con la condición se evalúa como verdadero o falso para cada fila. Estos términos pueden ser valores de la columna, literales o expresiones. Si la suma booleana de los resultados de cada condición se evalúa como verdadera para una fila determinada, y luego esa fila se recupera. Operadores condicionales permiten que los términos se comparan entre sí en una variedad de maneras, incluyendo la igualdad, rango, pertenencia a un conjunto, y el patrón de caracteres coincidentes de comparación.
Una vez que un conjunto de datos es aislado por la consulta, la cláusula ORDER BY facilita la ordenación de las filas recuperadas sobre la base de numérico, fecha o las columnas de caracteres o expresiones. Los resultados pueden ser ordenados utilizando combinaciones de columnas o expresiones, o ambos. Los datos se clasifican en orden ascendente por defecto.
Declaraciones genéricas, reutilizables pueden ser construidas usando variables con signo de sustitución ampersand que solicitan valoren en tiempo de ejecución. Persistencia de la sesión las variables de sustitución pueden ser definidas y son muy convenientes en situaciones donde muchas sustituciones de la misma variable se presentan en una declaración o un script. La sentencia SELECT simple ha sido ampliado para incluir un WHERE y ORDER BY. Estos bloques de construcción básicos ofrecen un lenguaje práctico y útil que se puede aplicar al mismo tiempo a construir su conocimiento de SQL.


DOS MINUTOS. 

Limitar las filas recuperadas por una consulta.

- La clausula WHERE extiende la sentencia SELECT proporcionando al lenguaje la capacidad de selección.
- Una o más condiciones constituyen la clausula WHERE. Estas condiciones de especificar las reglas para que los datos en una fila deben cumplir para ser elegible para la selección.
- Para caca fila se prueba la condición, hay términos a la izquierda y la derecha de un operador de comparación. Los términos de una condición puede ser valores de la columna, literales o expresiones.
- Los operadores de comparación pueden probar dos términos de muchas maneras. Las pruebas de igualdad o desigualdad son muy comunes, pero las comparaciones rango, conjunto, y el patrón están también disponibles.
- Comparación de rangos se realiza con el operador BETWEEN, que comprueba si un término se sitúa entre los valores de inicio y fin determinado límite.
- Pertenencia a un conjunto se pone a prueba con el operador IN. Una condición basada en una comparación conjunto se considera verdadero si el término del lado izquierdo aparece en el entre comillas simples, delimitado por comas situado en el lado derecho.
- El operador LIKEEEEE permite patrones de carácter literal que se ajustará con literales de otros valores de la columna, o expresiones que se evalúan. El símbolo de porcentaje (%) se comporta como un comodín que coincide con cero o más caracteres. El guión bajo (_) se comporta como un comodín solo carácter que coincide exactamente con un carácter distinto.
- Los operadores booleanos incluyen AND, OR y NOT. Los operadores AND y OR permiten múltiples cláusulas condicionales que se determine. Estos se refieren a veces como varias cláusulas WHERE.
- El operador NOT niega el operador de comparación que participan en una condición.

Ordenar las Filas recuperadas por una consulta.
- Los resultados se ordenan utilizando la cláusula ORDER BY. Filas recuperadas pueden ser ordenados de acuerdo a una o más columnas especificando los nombres de columna o de su posición numérica en la cláusula SELECT.
- La salida ordenada se pueden organizar en orden ascendente o descendente utilizando los modificadores de DESC o ASC después de los términos de clasificación en la cláusula ORDER BY.

Sustitución Ampersand
- Sustitución de ampersand facilita la reutilización de sentencia SQL, proporcionando un medio para sustituir los elementos de una declaración en tiempo de ejecución. La misma sentencia de SQL por lo tanto, se puede ejecutar varias veces con diferentes parámetros de entrada.
- Sustitución de ampersand solo requiere intervención del usuario para todas las apariciones de la variable de sustitución en el comunicado. Doble sustitución de ampersand necesario que el usuario sólo una vez por ocurrencia de una variable de sustitución, ya que define una variable de sesión persistente con el valor de entrada.
- Persistencia de sesión de las variables se puede establecer de forma explícita con el comando DEFINE. El comando UNDEFINE se puede utilizar para desarmar tanto implícita (la sustitución de ampersand doble) y define explícitamente las variables de sesión.


- El comando VERIFY controla la configuración del entorno si SQL PLUS despliega el viejo y nueva versión de las líneas de la declaración que contienen la variables que se están sustituyendo.

Comentarios