3 Consultas y subconsultas En SQL, la sentencia SELECT permite escribir una consulta o requerimiento de acceso a datos almacenados en una base de datos relacional. Dichas consultas SQL van desde una operación simple al mostrar datos desde una única tabla, hasta operaciones complejas que involucran la unión de varias tablas, expresiones compuestas para restringir las filas resultantes, etc. Cuando una consulta posee cierto grado de complejidad es útil dividirla en partes, lo cual brinda mayor flexibilidad en el reuso de partes y mejor legibilidad de la consulta como un todo. Subconsultas se utilizan para dividir una consulta en varias partes. Una subconsulta es una consulta en sí misma que posee existencia dentro de una consulta de nivel superior. Dicho mecanismo de subconsultas puede utilizarse en cualquier sentencia DML. Por otro lado, Oracle9i provee diferentes herramientas de software para interactuar con la base de datos y realizar tareas de administración. Dos de estas herramientas son SQL*Plus e isql*plus. Utilizando SQL*Plus es posible ejecutar cualquier sentencia SQL y cualquier programa PL/SQL, formatear resultados provenientes de consultas, y administrar la base de datos. isql*plus es la interfase web de SQL*Plus.
3.1 Subconsultas (subqueries) En la figura (1) se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en cuenta la relación de los mismos con el Material del Estudiante (kit). Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:? Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas o unidad asociados al Material del Estudiante (Kit).? Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los subtemas, temas o unidad asociados al Material del Estudiante (Kit).? Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a los tratados en el Material del Estudiante (Kit). Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al Material del Estudiante (Kit).
31 Subconsultas (subqueries) 3.1.1 Objetivos Una subconsulta es una consulta dentro de una consulta. En una consulta que posea varias partes, una subconsulta responde una parte del requerimiento, y la consulta padre responde la otra parte. Cuando se anidan varias subconsultas, la consulta más interna es evaluada en primer lugar. Subconsultas pueden utilizarse en cualquier sentencia DML. Subconsultas utilizadas en la cláusula FROM, en una consulta de nivel tope, son denominadas vistas en línea (inline view). Vistas en línea son tratadas en un tema posterior. Subconsultas que aparecen en la cláusula WHERE de una consulta son denominadas subconsultas anidadas. Cuando una columna de la tabla utilizada en la consulta padre es referenciada en la subconsulta, dicha subconsulta se denomina subconsulta correlacionada. Una subconsulta escalar retorna una única fila conformada por un único valor de columna. Dicho tema abarca la funcionalidad de los diferentes tipos de subconsultas
31 Subconsultas (subqueries) 3.1.2 Cuestionario de Iniciación Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las preguntas de iniciación. Si desea, puede desplegar su respuesta.
31 Subconsultas (subqueries) 3.1.3 Descripción de las Subconsultas Una subconsulta es una sentencia SELECT que está incluida en una cláusula de otra sentencia SQL. Se pueden construir comandos simples y potentes usando subconsultas. Pueden ser muy útiles cuando se necesita seleccionar filas de una tabla con una condición que depende de los datos que están en la misma tabla o en alguna otra. Se puede poner la subconsulta en algunas de las siguientes cláusulas de un comando SQL:? Cláusula WHERE.? Cláusula HAVING.? Cláusula FROM de una sentencia SELECT o DELETE (este tema se desarrollará mas adelante). Frecuentemente se refiere a una subconsulta como un SELECT anidado, un sub-select, o una sentencia SELECT interna. (1) Guía? Una subconsulta debe estar encerrada entre paréntesis.? La subconsulta debe aparecer a la derecha del operador de comparación.? Las subconsultas no pueden contener una cláusula ORDER BY. Se puede tener una sola cláusula ORDER BY para una sentencia SELECT, y específicamente debe ser la última cláusula en la sentencia SELECT principal. Orden de Procesamiento de las Subconsultas Anidadas Primero se ejecuta la subconsulta (SELECT anidado) y su resultado se pasa para completar la condición de la consulta principal, o externa. (2)
1 Subconsultas (subqueries) 3.1.4 Subconsultas de una sola Fila Una subconsulta de filas simples devuelve una sola fila desde la sentencia SELECT anidada. Este tipo de subconsulta utiliza un operador de fila simple. El ejemplo presentado en la sección 3.1.3, contiene una subconsulta de filas simples, ya que devuelve un solo valor: el número del departamento en la cual trabaja Vargas. Se pueden mostrar los datos resultantes de una consulta principal usando una función de grupo en una subconsulta para devolver una fila simple. (1) Un error común es que una subconsulta de fila simple dé como resultado más de una fila. (2)
3.1 Subconsultas (subqueries) 3.1.5 Subconsultas de varias Filas Las subconsultas que devuelven más de una fila se denominan subconsultas de filas múltiples. Se debe usar un operador de filas múltiples, tal como IN, en lugar de un operador de fila simple. Este operador espera uno o más valores. (1) Operadores de Filas Múltiples Además del operador IN, SQL ofrece los operadores que se detallan a continuación para escribir condiciones de búsqueda en subconsultas que devuelven más de una fila. (2)
3.1 Subconsultas (subqueries) 3.1.6 Subconsultas en la cláusula HAVING Además de la cláusula WHERE, las subconsultas también se pueden usar en la cláusula HAVING. Primero se ejecuta la subconsulta y el resultado es devuelto a la cláusula HAVING de la consulta principal. (1)
3.1 Subconsultas (subqueries) 3.1.7 AP: Subconsultas de una sola Fila Laboratorio 3.1.7 Subconsultas de una sola fila Problemas en los que se requieran seleccionar filas de una tabla con alguna condición que dependa de datos ubicados en la misma tabla o en alguna otra. Duración Estimada: 40 min. 3.1 Subconsultas (subqueries) 3.1.8 AP : Subconsultas de varias Filas Laboratorio 3.1.8 Subconsultas de varias filas Problemas en los que se requieran seleccionar filas de una tabla con alguna condición que dependa de datos ubicados en la misma tabla o en alguna otra. Inconvenientes con valores nulos dentro de subconsultas.
3.1 Subconsultas (subqueries) 3.1.9 AI: Manejo de Subconsultas Teniendo en cuenta la consulta principal sobre la tabla EMPLOYEES y las cuatro subconsultas que se podrían anexar a la misma, una con flechas cada una de las opciones de subconsultas presentadas con el resultado que crea correcto
31 Subconsultas (subqueries) 3.1.10 Síntesis Una subconsulta es una consulta dentro de una consulta. La escritura de subconsultas es una forma eficaz de manipular datos. Es posible escribir subconsultas de una sola fila y de múltiples filas. Subconsultas de una sola fila retornan cero o una fila; mientras que subconsultas de múltiples filas retornan cero o más filas. Los operadores de subconsultas más comúnmente utilizados son: IN y EXISTS. Una subconsulta puede aparecer en la cláusula WHERE o en la cláusula FROM. Las mismas pueden también reemplazar nombres de tablas en sentencias DELETE, INSERT y UPDATE. Subconsultas que retornan un resultado formado por una fila y una columna son denominadas subconsultas escalares. Subconsultas escalares pueden ser utilizadas en la mayoría de lugares donde puede ser utilizada una expresión.
3.2 Producción de una salida legible con isql*plus En la figura (1) se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en cuenta la relación de los mismos con el Material del Estudiante (kit). Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:? Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas o unidad asociados al Material del Estudiante (Kit).? Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los subtemas, temas o unidad asociados al Material del Estudiante (Kit).? Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a los tratados en el Material del Estudiante (Kit).? Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al Material del Estudiante (Kit)
3.2 Producción de una salida legible con isql*plus 3.2.1 Objetivos SQL*Plus, ampliamente utilizado por DBAs y desarrolladores para interactuar con la base de datos, es una herramienta poderosa propietaria de Oracle9i Server. Utilizando SQL*Plus es posible ejecutar cualquier sentencia SQL y cualquier programa PL/SQL, formatear resultados provenientes de consultas, y administrar la base de datos. ISQL*Plus es la interfase web de SQL*Plus (en la versión actual, se encuentra disponible únicamente bajo plataforma Windows). SQL*Plus se encuentra empaquetado conjuntamente con el software Oracle y puede ser instalado utilizando la rutina de instalación del software cliente en cualquier PC. Dicha herramienta es automáticamente instalada cuando se instala el software servidor. Este tema discute las capacidades de SQL*Plus y su utilización. Los comandos SQL*Plus son un súper conjunto de los comandos isql*plus.
3.2 Producción de una salida legible con isql*plus 3.2.2 Cuestionario de Iniciación Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las preguntas de iniciación. Si desea, puede desplegar su respuesta.
3.2 Producción de una salida legible con isql*plus 3.2.3 Efectos interactivos del isql*plus (& y &&) En isql*plus, se pueden usar variables de sustitución de tipo ampersand (&) simple para almacenar valores en forma temporal. La utilización de variables de sustitución sirve a varios propósitos, entre ellos:? Especificar un rango de fechas dentro del cual se efectuarán los cálculos.? Reportar al usuario solamente los datos que le son relevantes.? Identificar datos para un área determinada.? Pasar valores de una sentencia SQL a otra.? Obtener el ingreso de parámetros desde un archivo en lugar de solicitarlos al usuario.? Cambiar dinámicamente encabezados y pies de páginas. Nota: isql*plus no soporta chequeos de validación sobre lo que ingresa el usuario. Variables de Sustitución de Tipo Ampersand (&) Simple Cuando se ejecuta una consulta, con frecuencia los usuarios desean restringir dinámicamente los datos devueltos. isql*plus provee esta flexibilidad mediante el uso de variables. Se debe usar el signo ampersand (&) para identificar a cada variable en una sentencia SQL. No es necesario definir el valor para cada variable. (1) &variable_usuario: indica una variable en una sentencia SQL. Si la variable no existe, isql*plus le solicita al usuario un valor. isql*plus descarta la nueva variable una vez que ésta es usada. Con un ampersand simple, el usuario es interrogado cada vez que se ejecuta el comando, para evitar tener que ingresar el valor de una variable de sustitución cada vez que se ejecute el comando, se debe utilizar un doble ampersand (&&), lo que produce que el valor ingresado la primera vez que se ejecuta el comando, se almacene para toda la sesión.
3.2 Producción de una salida legible con isql*plus 3.2.4 Definición de Variables Se pueden definir variables de usuario antes de ejecutar una sentencia SELECT. isql*plus provee un comando para definir e inicializar variables del usuario: DEFINE (1). Guía? El comando DEFINE creará una variable si la misma no existe, y si existe la redefinirán automáticamente.? Cuando se usa el comando DEFINE, se deben utilizar apóstrofos para encerrar una cadena de caracteres que contenga un espacio en blanco. El Comando UNDEFINE Las variables permanecen definidas hasta que:? Se aplica el comando UNDEFINE sobre una variable.? Se termina la sesión de isql*plus. Cuando se aplica UNDEFINE sobre una variable, se pueden verificar los cambios con el comando DEFINE. Cuando finaliza la sesión isql*plus, se pierden las variables definidas en la misma. En la figura (2), se muestra un ejemplo en donde se define, inicializa, usa y elimina una variable de usuario.
32 Producción de una salida legible con isql*plus 3.2.5 El comando VERIFY Para confirmar los cambios en la sentencia, se usa el comando SET VERIFY de isql*plus. Si SET VERIFY está configurado con el valor ON, obliga a isql*plus a mostrar el texto del comando antes y después que el mismo reemplace las variables de sustitución por sus valores. (1) Recuerde que en una cláusula WHERE, los valores de tipo fecha y carácter deben estar encerrados entre apóstrofos. La misma regla se aplica a la sustitución de variables. A fin de evitar el ingreso de los apóstrofos en tiempo de ejecución, se debe encerrar, en la misma sentencia SQL, al ampersand (&) y a la variable dentro de apóstrofos. (2) Las variables de sustitución se pueden usar no solamente en la cláusula WHERE de una sentencia SQL, sino que además pueden usarse para sustituir cláusulas ORDER BY, nombres de tablas, nombres de columnas, expresiones, texto o sentencias SELECT completas(3).
3.2 Producción de una salida legible con isql*plus 3.2.6 Selección de parámetros del isql*plus En isql*plus se puede configurar el entorno de trabajo para cada sesión abierta a través de las Variables de Sistema. Existen dos formas de personalizar el entorno de trabajo, una es a través de la pantalla Variables del Sistema que se encuentra dentro de la opción Preferencias (1) y la otra es utilizando el comando SET (2). SET system_variable value Todas las variables de sistema toman valores por defecto cuando se inicia una sesión. - Link de ayuda: https://helot.cs.cf.ac.uk
3.2 Producción de una salida legible con isql*plus 3.2.7 AP: Consultas con condiciones Interactivas Laboratorio 3.2.7 Consultas con condiciones Interactivas Utilización de variables de sustitución isql*plus con el fin de dar la posibilidad al operador de modificar la/s condición/es de búsqueda/s. Duración Estimada: 40 min. 3.2 Producción de una salida legible con isql*plus 3.2.8 AP: Consultas con Campos Interactivos Laboratorio 3.2.8 Consultas con Campos Interactivos Utilización de variables de sustitución en isql*plus con el fin de dar la posibilidad al operador de elegir tanto las tablas como sus respectivas columnas a mostrar. Duración Estimada: 20 min
3.2 Producción de una salida legible con isql*plus 3.2.9 AI: Efectos interactivos de isql*plus con & Siga los pasos indicados en esta actividad para practicar la interacción de usuario con isql*plus.
3.2 Producción de una salida legible con isql*plus 3.2.10 AI: Efectos interactivos de isql*plus con && Siga los pasos indicados en esta actividad para practicar la interacción de usuario con isql*plus.
32 Producción de una salida legible con isql*plus 3.2.11 Síntesis SQL*Plus es la herramienta nativa de Oracle9i para interactuar con la base de datos. SQL*Plus soporta todas las sentencias SQL y posee comandos propios para dar formato y para mejorar la utilización de la herramienta. En Oracle9i, SQL*Plus incluye comandos que dan soporte a la administración de base de datos. Utilizando esta herramienta, es posible producir sentencias SQL interactivas y reportes con determinado formato de salida. SQL*Plus manipula su propio buffer donde almacena sentencias SQL. Es posible editar el buffer utilizando comandos de edición SQL*Plus. El comando DESCRIBE es utilizado para recuperar información acerca de una tabla, vista, función o procedimiento. Múltiples comandos SQL y SQL*Plus pueden ser almacenados en un archivo y ejecutados como una unidad. Tales archivos se denominan scripts. En SQL*Plus, el comando SET es utilizado para configurar el ambiente de trabajo. El comando COLUMN es utilizado para definir las características de las columnas presentes en una consulta SQL. Es posible definir variables en SQL*Plus. Variables también pueden ser utilizadas en sentencias SQL. Determinados valores serán aceptados como entrada de usuario cuando la sentencia SQL es ejecutada. Variables definidas en SQL*Plus siempre poseen el tipo de dato CHAR. isql*plus es la interfase web de SQL*Plus. isql*plus consiste de tres capas: la capa cliente (browser), la capa intermedia (Oracle HTTP Server e isql*plus Server), y la capa de base de datos (base de datos y Oracle 9i y Oracle Net). Ciertos comandos SQL*Plus no se encuentran disponibles en isql*plus.