oracle 10g - tema 2 - restricción y ordenación de datos

38
Copyright © 2004, Oracle. Todos los derechos reservados. Restricción y Ordenación de Datos

Upload: aula-cero

Post on 22-Mar-2016

251 views

Category:

Documents


3 download

DESCRIPTION

Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

TRANSCRIPT

Page 1: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Copyright © 2004, Oracle. Todos los derechos reservados.

Restricción y Ordenación de Datos

Page 2: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-2

Copyright © 2004, Oracle. Todos los derechos reservados.

Objetivos

Al finalizar esta lección, debería estar capacitado para:

� Limitar las filas recuperadas por una consulta

� Ordenar las filas recuperadas por una consulta

� Utilizar la sustitución ampersand en iSQL*Pluspara restringir y ordenar la salida en el tiempo de ejecución

Objetivos

Al recuperar datos de la base de datos, puede que necesite:� Restringir las filas de los datos que se muestran� Especificar el orden en el que se muestran las filas

Esta lección explica las sentencias SQL que se utilizan para realizar estas acciones.

Page 3: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-3

Copyright © 2004, Oracle. Todos los derechos reservados.

Limitación de Filas mediante una Selección

�recuperar todoslos empleados del departamento 90�

EMPLOYEES

Limitación de Filas mediante una Selección

En el ejemplo de la diapositiva, suponga que desea mostrar todos los empleados deldepartamento 90. Las filas con un valor 90 en la columna DEPARTMENT_ID son las únicas que se devolverán. Este método de restricción es la base de la cláusula WHERE en SQL.

Page 4: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-4

Copyright © 2004, Oracle. Todos los derechos reservados.

Limitación de las Filas que se Seleccionan

� Restrinja las filas que se devuelven mediante la cláusula WHERE:

� La cláusula WHERE sigue a la cláusula FROM.

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

Limitación de las Filas que se Seleccionan

Puede restringir las filas que se devuelven desde la consulta mediante la cláusula WHERE. Una cláusula WHERE contiene una condición que se debe cumplir y sigue directamente a lacláusula FROM. Si la condición es verdadera, se devuelve la fila que cumple la condición.

En la sintaxis:WHERE restringe la consulta a las filas que cumplan una condicióncondition se compone de nombres de columna, expresiones,

constantes y un operador de comparación

La cláusula WHERE puede comparar valores en columnas, valores de literales, expresiones aritméticas o funciones. Consta de tres elementos:

� Nombre de columna� Condición de comparación� Nombre de columna, constante o lista de valores

Page 5: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-5

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT employee_id, last_name, job_id, department_idFROM employeesWHERE department_id = 90 ;

Uso de la Cláusula WHERE

Uso de la Cláusula WHERE

En el ejemplo, la sentencia SELECT recupera el identificador de empleado, el nombre, el identificador de puesto y el número de departamento de todos los empleados que están en el departamento 90.

Page 6: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-6

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, job_id, department_idFROM employeesWHERE last_name = 'Whalen' ;

Cadenas de Caracteres y Fechas

� Las cadenas de caracteres y los valores de fechavan entre comillas simples.

� Los valores de caracteres son sensibles a mayúsculas/minúsculas y los valores de fecha son sensible al formato.

� El formato de fecha por defecto es DD-MON-RR.

Cadenas de Caracteres y Fechas

Las cadenas de caracteres de la cláusula WHERE deben ir entre comillas simples (''). Sin embargo, las constantes numéricas no deben ir entre comillas simples.

Todas las búsquedas de caracteres son sensibles a mayúsculas/minúsculas. En el ejemplo siguiente, no se devuelve ninguna fila porque la tabla EMPLOYEES almacena los apellidos en caracteres de mayúsculas/minúsculas mezclados.

SELECT last_name, job_id, department_idFROM employeesWHERE last_name = 'WHALEN';

Las bases de datos Oracle almacenan fechas en un formato numérico interno, que representa el siglo, el año, el mes, el día, las horas, los minutos y los segundos. La visualización de fecha por defecto es DD-MON-RR.

Nota: Para obtener detalles sobre el formato RR y sobre cómo cambiar el formato de fecha por defecto, consulte la lección siguiente.

Page 7: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-7

Copyright © 2004, Oracle. Todos los derechos reservados.

Condiciones de Comparación

Distinto de<>

Entre dos valores (ambos inclusive)BETWEEN...AND...

Se corresponde con cualquier valor de una

lista

IN(set)

Se corresponde con un patrón de caracteresLIKE

Es un valor nuloIS NULL

Menor que<

Menor o igual que<=

Mayor o igual que>=

Mayor que>

Igual que=

SignificadoOperador

Condiciones de Comparación

Las condiciones de comparación se utilizan en condiciones que comparan una expresión con otro valor u otra expresión. Se utilizan en la cláusula WHERE en el siguiente formato:

Sintaxis

... WHERE expr operator value

Ejemplo... WHERE hire_date = '01-JAN-95'... WHERE salary >= 6000... WHERE last_name = 'Smith'

No se puede utilizar un alias en la cláusula WHERE.

Nota: Los símbolos != y ^= también pueden representar la condición no igual que.

Page 8: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-8

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, salaryFROM employeesWHERE salary <= 3000 ;

Uso de Condiciones de Comparación

Uso de Condiciones de Comparación

En el ejemplo, la sentencia SELECT recupera el apellido y el salario de la tabla EMPLOYEESde cualquier empleado cuyo salario es menor o igual que 3.000 dólares. Observe que hay un valor explícito suministrado para la cláusula WHERE. El valor explícito 3000 se compara con el valor de salario de la columna SALARY de la tabla EMPLOYEES.

Page 9: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-9

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, salaryFROM employeesWHERE salary BETWEEN 2500 AND 3500 ;

Uso de la Condición BETWEEN

Utilice la condición BETWEEN para mostrar filas basadasen un rango de valores:

Límite inferior Límite superior

Uso de la Condición BETWEEN

Puede mostrar filas basándose en un rango de valores mediante la condición de rangoBETWEEN. El rango que especifique contiene un límite inferior y uno superior.

La sentencia SELECT de la diapositiva devuelve filas de la tabla EMPLOYEES de cualquier empleado cuyo salario esté entre los 2.500 y los 3.500 dólares.

Los valores que se especifican con la condición BETWEEN también se incluyen. Debe especificar el límite inferior en primer lugar.

También puede utilizar la condición BETWEEN en valores de caracteres:SELECT last_name FROM employees WHERE last_name BETWEEN 'King' AND 'Smith';

Page 10: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-10

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT employee_id, last_name, salary, manager_idFROM employeesWHERE manager_id IN (100, 101, 201);

Uso de la Condición IN

Utilice la condición IN de miembro para comprobar los valores incluidos en una lista:

Uso de la Condición IN

Para probar valores en un juego de valores especificado, utilice la condición IN. La condiciónIN se conoce también como condición de miembro.

El ejemplo de la diapositiva muestra los números de empleado, los apellidos, los salarios y los números de empleado de supervisor para todos los empleados cuyo número de empleado de supervisor sea 100, 101 ó 201.

La condición IN se puede utilizar con cualquier tipo de datos. El ejemplo siguiente devuelve una fila de la tabla EMPLOYEES para cualquier empleado cuyo apellido se incluya en la listade nombres de la cláusula WHERE:

SELECT employee_id, manager_id, department_idFROM employeesWHERE last_name IN ('Hartstein', 'Vargas');

Si los caracteres o las fechas se utilizan en la lista, deben ir entre comillas simples ('').

Page 11: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-11

Uso de la Condición LIKE

Puede que no siempre sepa qué valor buscar exactamente. La condición LIKE permiteseleccionar filas que se correspondan con un patrón de caracteres. La operación de correspondencia de patrones de caracteres se conoce como búsqueda con comodines. Sepueden utilizar dos símbolos para crear la cadena de búsqueda.

La sentencia SELECT de la diapositiva devuelve el nombre de empleado de la tablaEMPLOYEES de cualquier empleado cuyo nombre empiece por S. Observe la S en mayúsculas. Los nombres que empiecen por s no se devolverán.

La condición LIKE se puede utilizar como método abreviado para algunas comparaciones BETWEEN. El ejemplo siguiente muestra los apellidos y las fechas de contratación de todos los empleados que se hayan incorporado entre enero de 1995 y diciembre de 1995:

SELECT last_name, hire_dateFROM employeesWHERE hire_date LIKE '%95';

Símbolo Descripción

% Representa cualquier secuencia de cero o más caracteres

_ Representa cualquier carácter simple

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT first_nameFROM employeesWHERE first_name LIKE 'S%' ;

Uso de la Condición LIKE

� Utilice la condición LIKE para realizar búsquedascon comodines de valores válidos de cadenas de búsqueda.

� Las condiciones de búsqueda pueden contenerliterales de números o caracteres:� % denota cero o muchos caracteres.

� _ denota un carácter.

Page 12: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-12

Copyright © 2004, Oracle. Todos los derechos reservados.

� Puede combinar caracteres que se correspondancon un patrón:

� Puede utilizar el identificador ESCAPE para buscar los símbolos % y _ reales.

SELECT last_nameFROM employeesWHERE last_name LIKE '_o%' ;

Uso de la Condición LIKE

Combinación de Caracteres Comodín

Los símbolos % y _ se pueden utilizar en cualquier combinación con caracteres de literales. El ejemplo de la diapositiva muestra los apellidos de todos los empleados cuyos apellidos tengan la letra o como segundo carácter.

Opción ESCAPE

Cuando necesite una correspondencia exacta de los propios caracteres % y _, utilice la opciónESCAPE. Esta opción especifica qué es el carácter de escape. Si desea buscar las cadenas que contienen �SA_�, puede utilizar esta sentencia SQL:

SELECT employee_id, last_name, job_idFROM employees WHERE job_id LIKE '%SA\_%' ESCAPE '\';

La opción ESCAPE identifica la barra invertida (\) como carácter de escape. En el patrón, el carácter de escape va delante del carácter de subrayado (_). Esto provoca que Oracle Server interprete el carácter de subrayado literalmente.

Page 13: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-13

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, manager_idFROM employeesWHERE manager_id IS NULL ;

Uso de las Condiciones NULL

Compruebe si hay valores nulos con el operador IS NULL.

Uso de las Condiciones NULL

Las condiciones NULL son la condición IS NULL y la condición IS NOT NULL.

La condición IS NULL comprueba si hay valores nulos. Un valor nulo significa que el valor no está disponible, no está asignado, es desconocido o no es aplicable. Por tanto, no puedeprobar con = porque un valor nulo no puede ser igual ni desigual a ningún valor. El ejemplo de la diapositiva recupera los apellidos y los supervisores de todos los empleados que no tienen supervisor.

He aquí otro ejemplo: para mostrar el apellido, el identificador de puesto y la comisión de todos los empleados que no están autorizados a recibir comisión, utilice esta sentencia SQL:

SELECT last_name, job_id, commission_pctFROM employeesWHERE commission_pct IS NULL;

Page 14: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-14

Copyright © 2004, Oracle. Todos los derechos reservados.

Condiciones Lógicas

Devuelve TRUE si la condición siguiente es falsa

NOT

Devuelve TRUE si alguna de las condiciones componentes es verdadera

OR

Devuelve TRUE si ambas condiciones componentes son verdaderas

AND

SignificadoOperador

Condiciones Lógicas

Una condición lógica combina el resultado de dos condiciones componentes para crear un único resultado basándose en esas condiciones, o invierte el resultado de una sola condición. Se devuelve una fila sólo si el resultado global de la condición es verdadero.

En SQL, hay disponibles tres operadores lógicos:� AND� OR� NOT

Hasta ahora, todos los ejemplos han especificado únicamente una condición en la cláusulaWHERE. Puede utilizar varias condiciones en una cláusula WHERE mediante los operadoresAND y OR.

Page 15: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-15

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >=10000AND job_id LIKE '%MAN%' ;

Uso del Operador AND

AND requiere que ambas condiciones sean verdaderas:

Uso del Operador AND

En el ejemplo, ambas condiciones deben ser verdaderas para que se seleccione algún registro. Por tanto, sólo se seleccionan los empleados que tengan un cargo que contenga la cadena�MAN� y que ganen 10.000 dólares o más.

Todas las búsquedas de caracteres son sensibles a mayúsculas/minúsculas. No se devuelve ninguna fila si �MAN� no está en mayúsculas. Las cadenas de caracteres deben ir entre comillas.

Tabla de Verdad de AND

La tabla siguiente muestra los resultados de la combinación de dos expresiones con AND:

AND TRUE FALSE NULL

TRUE TRUE FALSE NULL

FALSE FALSE FALSE FALSE NULL NULL FALSE NULL

Page 16: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-16

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000OR job_id LIKE '%MAN%' ;

Uso del Operador OR

OR requiere que una de las condiciones sea verdadera:

Uso del Operador OR

En el ejemplo, una de las condiciones debe ser verdadera para que se seleccione algún registro. Por tanto, se selecciona cualquier empleado que tenga un identificador de puesto que contenga la cadena �MAN� o que gane 10.000 dólares o más.

Tabla de Verdad de OR

La tabla siguiente muestra los resultados de la combinación de dos expresiones con OR:

OR TRUE FALSE NULL

TRUE TRUE TRUE TRUE

FALSE TRUE FALSE NULLNULL TRUE NULL NULL

Page 17: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-17

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, job_idFROM employeesWHERE job_id

NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;

Uso del Operador NOT

Uso del Operador NOT

El ejemplo de la diapositiva muestra el apellido y el identificador de puesto de todos los empleados cuyo identificador de puesto no es IT_PROG, ST_CLERK o SA_REP.

Tabla de Verdad de NOT

La tabla siguiente muestra el resultado de aplicar el operador NOT a una condición:

Nota: El operador NOT también se puede utilizar con otros operadores SQL, comoBETWEEN, LIKE y NULL.

... WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')

... WHERE salary NOT BETWEEN 10000 AND 15000

... WHERE last_name NOT LIKE '%A%'

... WHERE commission_pct IS NOT NULL

NOT TRUE FALSE NULL FALSE TRUE NULL

Page 18: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-18

Copyright © 2004, Oracle. Todos los derechos reservados.

Reglas de Prioridad

Puede utilizar paréntesis para sustituir las reglas de prioridad.

Distinto de6

Condición lógica NOT7

Condición lógica AND8

Condición lógica OR9

IS [NOT] NULL, LIKE, [NOT] IN4

[NOT] BETWEEN5

Condiciones de comparación3

Operador de concatenación2

Operadores aritméticos1

SignificadoOperador

Reglas de Prioridad

Las reglas de prioridad determinan el orden en que se evalúan y se calculan las expresiones. La tabla muestra el orden de prioridad por defecto. Puede sustituir este orden por defecto poniendo entre paréntesis las expresiones que desee calcular primero.

Page 19: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-19

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, job_id, salaryFROM employeesWHERE job_id = 'SA_REP'OR job_id = 'AD_PRES'AND salary > 15000;

Reglas de Prioridad

SELECT last_name, job_id, salaryFROM employeesWHERE (job_id = 'SA_REP'OR job_id = 'AD_PRES')AND salary > 15000;

1

2

1. Ejemplo de Prioridad y el Operador AND

En este ejemplo, hay dos condiciones:� La primera condición es que el identificador de puesto sea AD_PRES y el salario sea

mayor de 15.000 dólares.� La segunda condición es que el identificador de puesto sea SA_REP.

Por tanto, la sentencia SELECT se interpreta así:

�Seleccionar la fila si un empleado es presidente y gana más de 15.000 dólares o si el empleado es representante de ventas.�

2. Ejemplo del Uso de Paréntesis

En este ejemplo, hay dos condiciones:� La primera condición es que el identificador de puesto sea AD_PRES o SA_REP.� La segunda condición es que el salario sea mayor de 15.000 dólares.

Por tanto, la sentencia SELECT se interpreta así:

�Seleccionar la fila si un empleado es presidente o representante de ventas y si el empleado gana más de 15.000 dólares.�

Page 20: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-20

Copyright © 2004, Oracle. Todos los derechos reservados.

Uso de la Cláusula ORDER BY

� Para ordenar las filas recuperadas, utilice la cláusula ORDER BY:� ASC: orden ascendente, por defecto

� DESC: orden descendente

� La cláusula ORDER BY se coloca al final de la sentencia SELECT:

SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date ;

Uso de la Cláusula ORDER BY

El orden de las filas que se devuelven en el resultado de una consulta no está definido. Se puede utilizar la cláusula ORDER BY para ordenar las filas. Si utiliza la cláusula ORDER BY, debe ser la última cláusula de la sentencia SQL. Puede especificar una expresión, un alias o una posición de columna como condición de ordenación.

SintaxisSELECT exprFROM table[WHERE condition(s)][ORDER BY {column, expr, numeric_position} [ASC|DESC]];

En la sintaxis:ORDER BY especifica el orden en el que se muestran las filas recuperadasASC ordena las filas en orden ascendente (ordenación por defecto)DESC ordena las filas en orden descendente

Si no se utiliza la cláusula ORDER BY, el orden no se define y Oracle Server puede no recuperar las filas en el mismo orden para la misma consulta dos veces. Utilice la cláusulaORDER BY para mostrar las filas en un orden específico.

Page 21: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-21

Copyright © 2004, Oracle. Todos los derechos reservados.

Ordenación

� Ordenación en orden descendente:

� Ordenación por alias de columna:

� Ordenación por varias columnas:

SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date DESC; 1

SELECT employee_id, last_name, salary*12 annsalFROM employeesORDER BY annsal ;

2

SELECT last_name, department_id, salaryFROM employeesORDER BY department_id, salary DESC;

3

Ordenación de Datos por Defecto

El orden por defecto es ascendente:� Los valores por defecto se muestran con los valores más bajos en primer lugar

(por ejemplo, de 1 a 999).� Los valores se muestran con el valor más antiguo en primero lugar (por ejemplo, 01-

ENE-92 antes que 01-ENE-95).� Los valores de caracteres se muestran por orden alfabético (por ejemplo, A al principio y

Z al final).� Los valores nulos se muestran al final en las secuencias ascendentes y al principio en

las descendentes.� Puede ordenar por una columna que no esté en la lista SELECT.

Ejemplos1. Para invertir el orden en que se muestran las filas, especifique la palabra clave DESC

después del nombre de columna en la cláusula ORDER BY. El ejemplo de la diapositiva ordena el resultado por el empleado contratado más recientemente.

2. Puede utilizar un alias de columna en la cláusula ORDER BY. El ejemplo de la diapositiva ordena los datos por salario anual.

3. Puede ordenar resultados de consultas por más de una columna. El límite de ordenación es el número de columnas de la tabla en cuestión. En la cláusula ORDER BY, especifique las columnas y separe los nombres de columna mediante comas. Si desea invertir el orden de una columna, especifique DESC después de su nombre.

Page 22: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-22

Copyright © 2004, Oracle. Todos los derechos reservados.

Variables de Sustitución

... salary = ? �

... department_id = ? �

... last_name = ? ...

Deseo consultardiferentesvalores.

Variables de Sustitución

Los ejemplos hasta ahora han sido codificados. En una aplicación finalizada, el usuario dispararía el informe y el informe se ejecutaría sin pedir al usuario que realice ninguna acción. El rango de datos lo predeterminaría le cláusula fija WHERE del archivo de comandos iSQL*Plus.

Con iSQL*Plus, puede crear informes que pidan a los usuarios que suministren sus propios valores para restringir el rango de datos devueltos por variables de sustitución. Puede embebervariables de sustitución en un archivo de comandos o en una única sentencia SQL. Unavariable se puede considerar un contenedor en el que los valores se almacenan temporalmente. Al ejecutarse la sentencia, el valor se sustituye.

Page 23: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-23

Copyright © 2004, Oracle. Todos los derechos reservados.

Variables de Sustitución

� Utilice las variables de sustitución de iSQL*Plus para:� Almacenar valores temporalmente con las

sustituciones de ampersand simple (&) y ampersand doble (&&)

� Utilice variables de sustitución para complementar:� Condiciones WHERE

� Cláusulas ORDER BY

� Expresiones de columna

� Nombres de tablas� Sentencias SELECT completas

Variables de Sustitución (continuación)

En iSQL*Plus, puede utilizar las variables de sustitución ampersand simple (&) paraalmacenar valores temporalmente.

Puede predefinir variables mediante el comando DEFINE de iSQL*Plus. DEFINE crea y asigna un valor a una variable.

Ejemplos de Rangos Restringidos de Datos� Información de cifras sólo para el trimestre actual o el rango de fechas especificado� Información sobre datos relevantes únicamente para el usuario que solicita el informe� Visualización de personal únicamente de un departamento dado

Otros Efectos Interactivos

Los efectos interactivos no se restringen a la interacción directa del usuario con la cláusula WHERE. Se pueden utilizar los mismos principios para alcanzar otros objetivos como, por ejemplo:

� Obtener valores de entrada de un archivo y no de una persona� Transferir valores de una sentencia SQL a otra

iSQL*Plus no soporta las comprobaciones de validación (excepto el tipo de datos) en la entrada de usuario.

Page 24: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-24

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id = &employee_num ;

Uso de la Variable de Sustitución &

Utilice una variable con un ampersand (&) como prefijo para pedir un valor al usuario:

Variable de Sustitución Ampersand Simple

Al ejecutar un informe, los usuarios a menudo desean restringir los datos que se devuelven dinámicamente. iSQL*Plus suministra esta flexibilidad con variables de usuario. Utilice un ampersand (&) para identificar cada variable de la sentencia SQL. No es necesario que definael valor de cada variable.

El ejemplo de la diapositiva crea una variable de sustitución iSQL*Plus para un número de empleado. Al ejecutarse una sentencia, iSQL*Plus pide al usuario un número de empleado y muestra entonces el número de empleado, el apellido, el salario y el número de departamentode ese empleado.

Con el ampersand simple, se hace la petición al usuario cada vez que se ejecuta el comando, si no existe la variable.

Notación Descripción

&user_variable Indica una variable en una sentencia SQL; si la variableno existe, iSQL*Plus pide al usuario un valor(iSQL*Plus descarta una nueva variable cuando la ha utilizado.)

Page 25: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-25

Copyright © 2004, Oracle. Todos los derechos reservados.

Uso de la Variable de Sustitución &

101

1

2

Variable de Sustitución Ampersand Simple (continuación)

Cuando iSQL*Plus detecta que la sentencia SQL contiene un ampersand, se le pide que introduzca un valor para la variable de sustitución especificada en la sentencia SQL.

Tras introducir un valor y hacer clic en el botón Continue, se muestran los resultados en el área de salida de la sesión iSQL*Plus.

Page 26: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-26

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT last_name, department_id, salary*12FROM employeesWHERE job_id = '&job_title' ;

Valores de Carácter y de Fecha con Variables de Sustitución

Utilice comillas simples para los valores de fecha y de carácter:

Especificación de Valores de Carácter y de Fecha con Variables de Sustitución

En una cláusula WHERE, los valores de fecha y de carácter deben ir entre comillas simples. Se aplica la misma regla a las variables de sustitución.

Ponga la variable entre comillas simples dentro de la propia sentencia SQL.

La diapositiva muestra una consulta para recuperar los apellidos de empleado, los números de departamento y los salarios anuales de todos los empleados basándose en el valor del cargo de la variable de sustitución de iSQL*Plus.

Page 27: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-27

Copyright © 2004, Oracle. Todos los derechos reservados.

Especificación de Nombres de Columna, Expresiones y Texto

SELECT employee_id, last_name, job_id,&column_nameFROM employeesWHERE &conditionORDER BY &order_column ;

salary

salary > 15000

last_name

Especificación de Nombres de Columna, Expresiones y Texto

No sólo puede utilizar las variables de sustitución en la cláusula WHERE de una sentenciaSQL, sino que también las puede utilizar para sustituir nombres de columna, expresioneso texto.

Ejemplo

El ejemplo de la diapositiva muestra el número de empleado, el apellido, el cargo y cualquier otra columna que especifique el usuario en tiempo de ejecución, de la tabla EMPLOYEES. Para cada variable de sustitución de la sentencia SELECT , se le pide que introduzca un valory debe hacer clic en Continue para proseguir.

Si no introduce un valor de sustitución, obtiene un error al ejecutar la sentencia anterior.

Nota: Una variable de sustitución se puede utilizar en cualquier parte de la sentenciaSELECT, excepto como primera palabra en el prompt de comandos.

Page 28: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-28

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT employee_id, last_name, job_id, &&column_nameFROM employeesORDER BY &column_name ;

Uso de la Variable de Sustitución &&

Utilice el ampersand doble (&&) si desea volver a utilizarel valor de variable sin pedir al usuario que realice una acción cada vez:

Variable de Sustitución Ampersand Doble

Puede utilizar la variable de sustitución ampersand doble (&&) si desea volver a utilizar el valor de variable sin pedir al usuario que realice una acción cada vez. El usuario verá el prompt para el valor sólo una vez. En el ejemplo de la diapositiva, se pide al usuario que proporcione el valor para la variable column_name sólo una vez. El valor que suministra el usuario (department_id) se utiliza tanto para visualización como para la ordenación de los datos.

iSQL*Plus almacena el valor que se suministra mediante el comando DEFINE; lo vuelve a utilizar siempre que se haga referencia al nombre de variable. Cuando una variable de usuario está en su lugar, debe utilizar el comando UNDEFINE para suprimirlo de esta forma:

UNDEFINE column_name

Page 29: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-29

Copyright © 2004, Oracle. Todos los derechos reservados.

Uso del Comando DEFINE de iSQL*Plus

� Utilice el comando DEFINE de iSQL*Plus para crear y asignar un valor a una variable.

� Utilice el comando UNDEFINE de iSQL*Plus para eliminar una variable.

DEFINE employee_num = 200

SELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id = &employee_num ;

UNDEFINE employee_num

Uso del Comando DEFINE de iSQL*Plus

El ejemplo que se muestra crea una variable de sustitución para un número de empleado mediante el comando DEFINE. En tiempo de ejecución, esto muestra el número de empleado, el apellido, el salario y el número de departamento de ese empleado.

Como la variable se crea mediante un comando DEFINE de iSQL*Plus, no se pide al usuario que introduzca un valor para el número de empleado. En vez de eso, se sustituye automáticamente el valor de variable definido en la sentencia SELECT.

La variable de sustitución EMPLOYEE_NUM está presente en la sesión hasta que el usuario anule la definición o salga de la sesión iSQL*Plus.

Page 30: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-30

Copyright © 2004, Oracle. Todos los derechos reservados.

old 3: WHERE employee_id = &employee_numnew 3: WHERE employee_id = 200

SET VERIFY ONSELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id = &employee_num;

Uso del Comando VERIFY

Utilice el comando VERIFY para alternar la visualizaciónde la variable de sustitución, tanto antes como despuésde que iSQL*Plus reemplace con valores las variables de sustitución:

Uso del Comando VERIFY

Para confirmar los cambios en la sentencia SQL, utilice el comando VERIFY de iSQL*Plus. Al definir SET VERIFY ON se fuerza a que iSQL*Plus muestre el texto de un comandoantes y después de reemplazar con valores las variables de sustitución.

El ejemplo de la diapositiva muestra los valores antiguo y nuevo de lacolumna EMPLOYEE_ID.

Variables de Sistema de iSQL*Plus

iSQL*Plus utiliza diversas variables de sistema que controlan el entorno de trabajo. Una de esas variables es VERIFY. Para obtener una lista completa de todas las variables de sistema, puede emitir el comando SHOW ALL.

Page 31: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-31

Copyright © 2004, Oracle. Todos los derechos reservados.

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table[WHERE condition(s)][ORDER BY {column, expr, alias} [ASC|DESC]] ;

Resumen

En esta lección ha aprendido a:� Utilizar la cláusula WHERE para restringir filas de salida:

� Utilizar las condiciones de comparación� Utilizar las condiciones BETWEEN, IN, LIKE y NULL

� Aplicar los operadores AND, OR y NOT

� Utilizar la cláusula ORDER BY para ordenar filas de salida:

� Utilizar la sustitución ampersand en iSQL*Plus para restringir y ordenar la salida en el tiempo de ejecución

Resumen

En esta lección, ha aprendido a restringir y ordenar las filas que se devuelven con una sentencia SELECT. También ha aprendido a implementar diversos operadores y condiciones.

Mediante las variables de sustitución de iSQL*Plus, puede agregar flexibilidad a las sentencias SQL. Puede consultar a los usuarios en tiempo de ejecución y permitir que especifiquen criterios.

Page 32: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-32

Copyright © 2004, Oracle. Todos los derechos reservados.

Práctica 2: Visión General

Esta práctica cubre los temas siguientes:

� Selección de datos y cambio del orden de las filas que se muestran

� Restricción de filas mediante la cláusula WHERE

� Ordenación de filas mediante la cláusula ORDER BY

� Uso de variables de sustitución para agregar flexibilidad a las sentencias SELECT de SQL

Práctica 2: Visión General

En esta práctica, creará más informes, que incluirán sentencias que utilicen las cláusulasWHERE y ORDER BY. Haga que las sentencias SQL sean más reutilizables y genéricas incluyendo la sustitución ampersand.

Page 33: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-33

Práctica 2

El departamento de recursos humanos necesita su ayuda para crear algunas consultas.1. Por motivos presupuestarios, el departamento de recursos humanos necesita un informe

que muestre los apellidos y el salario de los empleados que ganen más de 12.000 dólares. Guarde la sentencia SQL en un archivo denominado lab_02_01.sql. Ejecute la consulta.

2. Cree un informe que muestre el apellido del empleado y el número de departamento del empleado número 176.

3. El departamento de recursos humanos necesita buscar los empleados con salarios altos y bajos. Modifique lab_02_01.sql para mostrar el apellido y el salario de cualquierempleado cuyo salario no está en el rango de 5.000 a 12.000 dólares. Guarde la sentencia SQL en un archivo de texto denominado lab_02_03.sql.

Page 34: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-34

Práctica 2 (continuación)4. Cree un informe para mostrar el apellido, el identificador de puesto y la fecha de inicio

para los empleados con los apellidos Matos y Taylor. Ordene la consulta por orden ascendente por fecha de inicio.

5. Muestre el apellido y el número de departamento de todos los empleados de los departamentos 20 y 50 en orden alfabético ascendente por nombre.

6. Modifique lab_02_03.sql para enumerar el apellido y el salario de los empleados que ganan entre 5.000 y 12.000 dólares y están en el departamento 20 ó 50. Etiquete las columnas como Employee y Monthly Salary, respectivamente. Vuelva a guardar lab_02_03.sql como lab_02_06.sql. Ejecute la sentencia en lab_02_06.sql.

Page 35: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-35

Práctica 2 (continuación)7. El departamento de recursos humanos necesita un informe que muestre el apellido y la

fecha de contratación de todos los empleados contratados en 1994.

8. Cree un informe que muestre el apellido y el cargo de todos los empleados que no tengan supervisor.

9. Cree un informe que muestre el apellido, el salario y la comisión de todos los empleados que ganen comisiones. Ordene los datos en orden descendente por salario y comisiones.

10. Los miembros del departamento de recursos humanos desean tener más flexibilidad con las consultas que está creando. Quieren un informe que muestre el apellido y el salario de empleados que ganen más que una cantidad que el usuario especificará tras un prompt. (Puede utilizar la consulta que creó en el ejercicio de la Práctica 1 y modificarla.) Guarde esta consulta en un archivo denominado lab_02_10.sql. Si introduce 12.000 cuando aparezca el prompt, el informe mostrará estos resultados:

Page 36: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-36

Práctica 2 (continuación)11. El departamento de recursos humanos quiere ejecutar informes basados en un supervisor.

Cree una consulta que pida al usuario un identificador de supervisor y genere elidentificador de empleado, el apellido, el salario y el departamento de los empleados de ese supervisor. El departamento de recursos humanos quiere poder ordenar el informe por una columna seleccionada. Puede probar los datos con estos valores:

manager ID = 103, ordenado por apellido de empleado:

manager ID = 201, ordenado por salario:

manager ID = 124, ordenado por identificador de empleado:

Page 37: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-37

Práctica 2 (continuación)

Si le queda tiempo, realice los siguientes ejercicios:12. Muestre el apellido de todos los empleados cuya tercera letra sea la a.

13. Muestre el apellido de todos los empleados que tengan tanto una a como una e en su apellido.

Si desea afrontar un desafío mayor, realice estos ejercicios:14. Muestre el apellido, el puesto de trabajo y el salario de todos los empleados que sean

representante de ventas o administrativo y cuyo salario sea distinto de 2.500, 3.500 ó7.000 dólares.

15. Modifique lab_02_06.sql para mostrar el apellido, el salario y la comisión de todos los empleados cuyo importe de comisión sea del 20 %. Vuelva a guardar lab_02_06.sql como lab_02_15.sql. Vuelva a ejecutar la sentencia en lab_02_15.sql.

Page 38: Oracle 10G - Tema 2 - Restricción y Ordenación de Datos

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I 2-38