curso_sql_certificacion

602
Culp a de ® Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de examen (Examen 1Z0-051) SOBRE LOS AUTORES John Watson (Oxford, el Reino Unido) trabaja para Consultores de dirección BPLC, dando clases y consultando en todas partes de Europa y África. Él era con la universidad de Oracle durante varios años en Sudáfrica, y antes de que esto trabajara para varias compañías, ministerios, y organizaciones no gubernamentales en Inglaterra y Europa. Él es OCP calificado tanto en base de datos como en administración de Servidor de Aplicación. John es el autor de varios libros y numerosos artículos

Transcript of curso_sql_certificacion

Page 1: curso_sql_certificacion

Culpa

de ®

Base de datos de Oracle de OCA 11g:

Fundamentos de SQL I Guía de examen (Examen 1Z0-

051) SOBRE LOS AUTORES

John Watson (Oxford, el Reino Unido) trabaja para Consultores de dirección BPLC, dando clases y consultando en todas partes de Europa y África. Él era con la universidad de Oracle durante varios años en Sudáfrica, y antes de que esto trabajara para varias compañías, ministerios, y organizaciones no gubernamentales en Inglaterra y Europa. Él es OCP calificado tanto en base de datos como en administración de Servidor de Aplicación. John es el autor de varios libros y numerosos artículos sobre la tecnología y tiene 25 años de la experiencia en ELLO.

Roopesh Ramklass (Sudáfrica), OCP, es un especialista de Oracle independiente con más de 10 años de experiencia en una amplia variedad de ELLO entornos. Éstos incluyen el diseño de software y el desarrollo, el análisis de sistemas, courseware

Page 2: curso_sql_certificacion

desarrollo, y conferencia. Él ha trabajado para el Apoyo de Oracle y ha dado clases en la universidad de Oracle en Sudáfrica durante varios años. Roopesh es experimentado en dirección y ejecución de ELLO proyectos de desarrollo, incluso aprovisionamiento de sistemas de infraestructura, desarrollo de software, e integración de sistemas.

Sobre el Redactor Técnico Bruce Swart (Sudáfrica) trabaja para 2Cana Soluciones y tiene más de 14 años de experiencia en ELLO. Manteniendo un gran interés para otros docentes, él ha realizado varios papeles incluso developer, analista, jefe de equipo, administrador, director de proyecto, consultor, y conferenciante. Él es OCP calificado tanto en base de datos como en papeles de developer. Él ha dado clases en la universidad de Oracle en Sudáfrica durante varios años y también ha hablado en numerosas conferencias de Oracle User Group locales. Su pasión ayuda a otros a conseguir la grandeza.

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

®

Base de datos de Oracle de OCA 11g:

Page 3: curso_sql_certificacion

Fundamentos de SQL I Guía de examen (Examen

1Z0-051)

John Watson Roopesh Ramklass

Esta publicación y CD pueden ser usados en estudiantes asistentes para prepararse para la Base de datos de Oracle OCP 11g: Fundamentos de SQL I examen. Ni Oracle Corporation ni McGraw-Hill Companies garantizan que el uso de esta publicación y CD asegurará el paso del examen relevante.

Nueva York Chicago San Francisco Lisboa Londres Madrid Ciudad de México Milano Nueva Delhi San Juan Seúl Singapur Sydney Toronto

Copyright © 2008 por McGraw-Hill Companies, Inc. Reservados todos los derechos. Fabricado en los Estados Unidos de América. Excepto como permitido bajo la Ley de derechos de autor de los Estados Unidos de 1976, ninguna parte de esta publicación puede ser reproducida o distribuida en cualquier forma o por cualquier medio, o almacenada en una base de datos o sistema de recuperación, sin el permiso escrito previo del editor.

0-07-164380-X

El material en este eBook también aparece en la versión de letra de este título: 0-07-159786-7.

Todas las marcas registradas son marcas registradas de sus dueños respectivos. Más bien que poner un símbolo de marca registrada después de cada acontecimiento de un nombre que tiene marca registrada, usamos nombres de una moda editorial sólo, y a la ventaja del dueño de marca registrada, sin la intención de la infracción de la marca registrada. Donde tales designaciones aparecen en este libro, ellos han sido imprimidos con letras mayúsculas iniciales.

Page 4: curso_sql_certificacion

McGraw-Hill eBooks está disponible con descuentos de cantidad especiales para usar como premios y promociones de ventas, o para el uso en programas de capacitación corporativos. Para más información, por favor póngase en contacto con George Hoare, Ventas Especiales, en [email protected] o (212) 904-4069.

TÉRMINOS DE USO

Esto es una obra con derechos de autor y McGraw-Hill Companies, Inc. ("McGraw-Hill") y sus licenciadores reservan todos los derechos en y al trabajo. El uso de este trabajo es sujeto a estos términos. Excepto como permitido bajo la Ley de derechos de autor de 1976 y el derecho de almacenar y recuperar una copia del trabajo, usted no puede descompilar, desmontar, invertir al ingeniero, reproducir, modificar, crear trabajos derivados basados en, transmitir, distribuir, diseminar, vender, publicar o sublicenciar el trabajo o cualquier parte de él sin el consentimiento previo de McGraw-Hill. Usted puede usar el trabajo para su propio uso privado y no comercial; cualquier otro uso del trabajo es estrictamente prohibido. Su derecho de usar el trabajo puede ser terminado si usted deja de cumplir con estos términos.

EL TRABAJO ES PROPORCIONADO "COMO ES." McGRAW-HILL Y SUS LICENCIADORES NO HACEN NINGUNAS GARANTÍAS O GARANTÍAS EN CUANTO A LA EXACTITUD, SUFICIENCIA O COMPLETO DE O RESULTADOS PARA SER OBTENIDOS DE USAR EL TRABAJO, INCLUSO CUALQUIER INFORMACIÓN A QUE PUEDAN TENER ACCESO A TRAVÉS DEL TRABAJO VÍA EL ENLACE O POR OTRA PARTE, Y EXPRESAMENTE RECHAZAR CUALQUIER GARANTÍA, EXPRESO O IMPLICADO, INCLUSO, PERO NO LIMITADOS CON GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD O APTITUD PARA UN PROPÓSITO PARTICULAR. McGraw-Hill y sus licenciadores no garantizan o garantizan que las funciones contenidas en el trabajo cumplirán con sus requisitos o que su operación será ininterrumpida o error libre. Ni McGraw-Hill ni sus licenciadores deben ser obligados a usted o alguien más para cualquier inexactitud, error u omisión, sin tener en cuenta la causa, con el trabajo o para cualquier daño que resulta de allí. McGraw-Hill no tiene ninguna responsabilidad del contenido de cualquier información tenida acceso a través del trabajo. De ninguna manera van McGraw-Hill y/o sus licenciadores ser obligados de cualquier daño indirecto, secundario, especial, punitivo, consiguiente o similar que resulte del uso de o inhabilidad de usar el trabajo, aun si alguno de ellos ha sido informado de la posibilidad de tales daños. Esta limitación de la responsabilidad debe aplicarse a cualquier reclamación o causar que si tal reclamación o causa se levantan en contrato, agravio o por otra parte.

DOI: 10.1036/0071597867

Con gracias a Silvia para hacer vida de valor de vida. John -

Ameetha, usted ha sido maravillosamente soportante y quiero a gracias para cada momento que usted comparte conmigo.

-Roopesh

Esta página intencionadamente se dejó en blanco

CONTENIDO DE UN VISTAZO

1 Oracle Server y el Paradigma Relacional .......... 1

2 Extracción de datos Usando la sentencia SQL Select ...............51

3 Restricción y Ordenación de Datos ................................. 103

4 Funciones de fila sola ...................................... 169

5 Utilización de Funciones de Conversión y Expresiones Condicionales … 227

Page 5: curso_sql_certificacion

6 Obtención de Datos Agregados Usando las Funciones de Grupo........... 273

7 Pruebas Datos de Múltiples Tablas .......................... 309

8 Utilización de Subconsultas para Solucionar problemas ........................... 357

9 Utilización de los Operadores SET ..................................... 381

10 Manipulación de Datos ......................................... 403

11 Utilización Select de DDL para Crear y Manejar Tablas ............. 449

12 Creación de Otros Objetos de Esquema .............................. 487

Apéndice ................................................ 533

Glosario ................................................. 537

Índice .................................................... 555

vii

Esta página intencionadamente se dejó en blanco Para más información sobre este título, haga clic aquí

CONTENIDO

Introducción ........................................ xix

1 Oracle Server y el Paradigma Relacional........................ 1Posición Server Technologies............................. 3

La Arquitectura de Servidor de Oracle....................... 3El Servidor de Aplicación de Oracle........................ 5

Page 6: curso_sql_certificacion

Oracle gerente de Empresa............................ 7Grid Informática.................................... 8Exercise 1-1: Investigue Su Base de datos y

Entorno de aplicación.......................... 9Herramientas de desarrollo y Lenguajejes..................... 9

Entienda Estructuras Relacionales............................. 10 Filas y Tablas.................................... 11 Normalización de Datos................................. 14 Ejercicio 1-2: Realice un Extenso

Análisis relacional............................... 20 Concepto del lenguajeje SQL................................ 23

Estándares de SQL..................................... 23 Comandos de SQL.................................... 23 Un Lenguajeje orientada al conjunto............................. 25

Use las Herramientas de Cliente....................................... 26 SQL*Plus......................................... 26 SQL Developer..................................... 33

Cree los Esquemas de Pruebas........................... 37 Usuarios y Esquemas................................. 38 Esquemas OE y HR ............................ 38

Creación de Esquema de pruebas...................... 42 ✓ Taladradora De dos minutos................................... 45

Q&A TEST.......................................... 46

ix xBase de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

Pregunta de laboratorio...................................... 48mí Respuestas de Prueba................................... 49Respuesta de laboratorio........................................ 50

2 Extracción de datos Usando la sentencia SQL Select ... 51 Capacidad de la sentencia SQL Select ................

Introducción de la sentencia de SQL Select................

Page 7: curso_sql_certificacion

El Comando DESCRIBE table...................... se entrenan 2-1: Descripción del Esquema HR................................ Capacidades de la Select

Ejecución de una sentencia Select básica........................... Sintaxis de la Select SENTENCIA Primitiva............Las reglas están hechas para ser seguidas....................... Ejercicio 2-2: Contestación a Nuestro Primer

Preguntas con SQL............................... Expresiones de SQL y Operadores...................... el.. NULO no Es Nada................................... Ejercicio 2-3: Experimentación con Expresiones y la Comando DUAL....................

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

52 52 53

55 57 59 59 64

67 70 81

86 90 92 94 96 98

3 Restricción y Comandoación de Datos ..................... 103 Limite las Filas Recuperadas por una Pregunta..........................

EL DONDE cláusula................................. Operadores de comparación............................... Ejercicio 3-1: Utilización del Operador PARECIDO............... Operadores booleanos................................ Reglas de precedencia de.....................................

Clasifique las Filas Recuperadas por una Pregunta........................... El PEDIDO POR Cláusula.............................. se entrenan 3-2: Comandoación de Utilización de Datos

el PEDIDO POR Cláusula............................ 104

141 Contenido

Substitución de signo ""....................................

Page 8: curso_sql_certificacion

Variables de substitución............................... Defina y Verifique................................... Ejercicio 3-3: Utilización de Substitución de Signo ""...........

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

xi

142 353111494

4 Funciones de fila sola ........................... 169 Describa Diversos tipos de Funciones Disponibles en SQL............

Definición de una Función................................. Tipos de Funciones.................................. Use Carácter, Número, y Funciones de Fecha

en Select SENTENCIAS................................... La utilización de Funciones de Conversión de Instancia de Carácter............. Ejercicio 4-1: Utilización de las Funciones de Conversión de Instancia..... Utilización de Funciones de Manipulaciones de Carácter............... Ejercicio 4-2: Utilización de las Funciones de Manipulación de Instancia... Utilización de Funciones Numéricas............................ que trabaja con Fechas................................. Utilización de Funciones de Fecha.............................. los.. se entrenan 4-3: Utilización de las Funciones de Fecha...............

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

170170174

177

5 Utilización de Funciones de Conversión y Expresiones condicionales....................... 227

Describa Diversos tipos de Conversión Funciones Disponibles en SQL................................

Funciones de conversión............................... Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión de TO_DATE.......................

Utilización de las Funciones de Conversión....................... 228228

231232

xii

Page 9: curso_sql_certificacion

Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

Ejercicio 5-1: Convertir Fechas en Carácteres La utilización de la Función de TO_CHAR.....................

Aplique Expresiones Condicionales en una Select SENTENCIA........... Funciones que anidan................................... Ejercicio 5-2: Utilización NULLIF y NVL2

para Lógica Condicional Simple....................... Funciones condicionales............................... Ejercicio 5-3: Utilización la Función DECODIFICAR...........

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

6 Obteniendo de Utilización de Datos Agregada

239245245

251 las Funciones de Grupo.......................... 273

Describa las Funciones de Grupo................................ Definición de Funciones de Grupo......................... Tipos y Sintaxis de Funciones de Grupo...................

Identifique las Funciones de Available Group........................ Utilización de las Funciones de Grupo........................... Ejercicio 6-1: Utilización de las Funciones de Grupo............. Funciones de Nested Group.............................

Datos de grupo Usando el GRUPO POR Cláusula...................... Creating Groups de Datos............................. El GRUPO POR Cláusula.............................. que se agrupa por Columnas Múltiples...................... los.. se entrenan 6-2: Agrupación de Datos Basados

en Columnas Múltiples............................ los.. incluyen o Excluyen Filas Agrupadas Usando la Cláusula que TIENE......

Resultados de Restricting Group............................ la Cláusula que TIENE.............................. los.. se entrenan 6-3: Utilización la Cláusula que TIENE.............

Page 10: curso_sql_certificacion

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

274 274

292 294 844212087 Contenido

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

xiii

305306308

7 Pruebas de Datos de Tablas Múltiples .............. 309 Escriba Select SENTENCIAS a Datos de Acceso de

Más de Un Table Using Equijoins y Nonequijoins........ Tipos de Junturas...................................... que se afilia a Tablas Usando Sintaxis de SQL:1999.................. que califica a Nombres de Columna Ambiguos.................. la Cláusula de JUNTURA NATURAL......................... Ejercicio 7-1: Utilización de la JUNTURA NATURAL............ la JUNTURA Natural USANDO Cláusula..................... La JUNTURA Natural EN Cláusula......................... Ejercicio 7-2: Utilización del NATURAL

Cláusula de JOINON................................ de N-camino Junturas y Condiciones de Juntura Adicionales............. Nonequijoins......................................

Afíliese a una Comando a Sí Usando una Autojuntura.......................... La conexión a una Comando a Sí Usando la Cláusula JOINON.... los.. se entrenan 7-3: Realización de una Autojuntura..................

Datos de vista que no Encuentran una Condición de Juntura Usando Junturas Externas.....................................

Interior contra Junturas Externas............................ el.. dejó Junturas Externas.................................. derecho de.. Junturas Externas................................... Junturas Externas llenas.................................. los.. se entrenan 7-4: Realización de una Juntura externa...............

Genere un producto Cartesiano de Dos o más Tablas.............. La creación de productos Cartesianos Usando Junturas Enfadadas.......... los.. se entrenan 7-5: Realización de una Juntura enfadada................

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

Page 11: curso_sql_certificacion

310

324

334 335 336 337 991325235

xiv Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

8 Utilización de Subconsultas para Solucionar problemas.............. 357

Defina Subconsultas......................................... 358 Ejercicio 8-1: Tipos de Subpregunta..................... 359 Describen los Tipos de

problemas Que las Subconsultas Pueden Solucionar..... 360 Uso de un SET de Resultado de Subpregunta con Objetivos de Comparación.....

360 Transformación de Estrella................................. 361 Generan una Comando de la Cual SELECCIONAR............... 362 Generan Valores para la Proyección........................ 362 Generan Filas para ser Pasadas a una Select DML......... 363 Ejercicio 8-2: Subconsultas Más complejas..............

363 Liste los Tipos en una lista de Subconsultas.................................. 364

Solo - y Subconsultas de Fila múltiple................... 365 Subconsultas Correlacionadas............................... 366 Ejercicio 8-3: Investigue el Diferente

Tipos de Subpregunta................................ 367 Escriben Subconsultas de Fila múltiple y Fila sola................. 369

Ejercicio 8-4: Escriba una Pregunta Que es Confiable y Usuario Simpático................................. 370

✓ Taladradora De dos minutos................................... 374 Q&A Mí Prueba.......................................... 375

Pregunta de laboratorio...................................... 378 Mí Respuestas de Prueba................................... 379 Respuesta de Laboratorio........................................ 380

9 Utilización de los Operadores de SET ........................ 381 Describa a los Operadores de SET.................................. 382

SETs y Diagramas de Venn.............................. 383 Principios generales de Operador de SET....................... 384 Ejercicio 9-1: Describa a los Operadores de SET.............. 385

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta Sola...................................... 386

La UNIÓN TODO el Operador........................... 387 El Operador de

Page 12: curso_sql_certificacion

UNIÓN............................... 387 El Operador CRUZAR...........................388 el MENOS Operador............................... 389 Ejemplos Más

complejos............................. 390 Ejercicio 9-2: Utilización de los Operadores de SET................ 392

Contenido

Controle el Pedido de Filas Devueltas..........................

xv

393 Ejercicio 9-3: Controle el Pedido de Filas Devueltas..... 394

✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................

Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

396 397

10 Datos de Manipulación ............................. 403 Describa Cada Lenguaje de Manipulación de Datos (DML) Select.....

INSERCIÓN........................................ ACTUALIZACIÓN de........................................... BORRAR........................................ FUSIÓN de............................................ TRUNCADO...................................... DML Frainstancias de Select.............................

Filas de inserción en una Comando..................................... Ejercicio 10-1: Use el Comando de INSERCIÓN.......... Filas de actualización de.. en

una Comando..................................... Ejercicio 10-2: Use el Comando de ACTUALIZACIÓN........... Borre Filas de una

Comando................................... Borrar Filas con BORRAR...................... los.. se entrenan 10-3: Use el BORRAR Comando........... Borrar Filas con TRUNCADO..................... FUSIÓN..........................................

Transacciones de control....................................... Transacciones de base de datos............................... Las Select de Control de Transacción................... Ejercicio 10-4: Use DESTINAR y

ROLLBACK Manda........................... ✓ Taladradora De dos minutos................................... Q&A Mí

Prueba.......................................... Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

404 405 406 407 408 409 409 413 417 628473423

Page 13: curso_sql_certificacion

586195184

xvi Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

11 Utilización Select de DDL a Cree y Maneje Tablas ..................... 449

Clasifique los Objetos de Base de datos Principales......................... 450 Tipos de objeto....................................... 450 Usuarios y Esquemas.................................. 452 Objetos de Esquema de Nombramiento............................. 453 Objeto Namespaces.................................

455 Ejercicio 11-1: Determine Que Objetos Son Accesibles a Su Sesión...................... 455 Examinan la Estructura de

Comando.................................. 456 Ejercicio 11-2: Investigue Estructuras de Comando............ 457 Lista los Tipos

de datos Que están Disponibles para Columnas.............. 457 Ejercicio 11-3: Investigue los Tipos de datos

en el esquema de HORA................................ 461 Crean una Comando Simple...................................... 462

La creación de Tablas con Especificaciones de Columna............. 462 Tablas de Creación de Subconsultas....................... 464 Definiciones de Comando Cambiadoras después de Creación................ 465 Caída y Truncamiento de Tablas....................... 466 Ejercicio 11-4: Cree Tablas.......................

467 Explique Como Coacciones Son Creadas

en el momento de Creación de Comando..............................469 Los Tipos de Coacciones............................. 470 Coacciones de Definición................................ 473 Ejercicio 11-5: Trabajo con Coacciones................ 476

✓ Taladradora De dos minutos................................... 478 Q&A Mí Prueba.......................................... 479

Pregunta de laboratorio...................................... 482 Mí Respuestas de Prueba................................... 483 Respuesta de Laboratorio........................................ 484

12 Creación de Otros Objetos de Esquema .................. 487 Cree Vistas Simples y Complejas............................ 488

¿Por qué Vistas de Uso en Absoluto?............................... 489 Vistas Simples y Complejas........................... 492 CREAN LA VISTA, CAMBIAN VISTA, y VISTA DE GOTA....... 493 Ejercicio 12-1: Cree Vistas........................ 496

Contenido

Page 14: curso_sql_certificacion

Recupere Datos de Vistas................................... Ejercicio 12-2: Use Vistas........................ los.. crean Sinónimos Privados y

Públicos........................... Ejercicio 12-3: Cree y Sinónimos de Uso............. Cree, Mantenga, y Secuencias de

Uso.......................... Creación de Secuencias................................. Utilización de Secuencias.................................. los.. se entrenan 12-4: Cree y Secuencias de Uso.............

Cree y Mantenga Índices................................ Para qué los Índices Son...............................

xvii

497 Tipos de Índice ..................................... 511 La creación y la Utilización de Índices........................... La modificación y la Caída de Índices....................... Ejercicio 12-5: Creación de Índices.....................

✓ Taladradora De dos minutos................................... Q&A Mí Prueba.......................................... Pregunta de laboratorio...................................... mí Respuestas de Prueba................................... Respuesta de laboratorio........................................

515

Apéndice ..................................... 533

Glosario ...................................... 537

Índice ........................................ 555

Esta página intencionadamente se dejó en blanco

Page 15: curso_sql_certificacion

INTRODUCCIÓN

Capítulo 1:

Oracle Server Technologies y el Paradigma Relacional

El conjuntos de productos de tecnologías de servidor de Oracle es más que una base de datos. También está el Servidor de Aplicación de Oracle y el Oracle Enterprise Manager. Tomados en conjunto, éstos son las tecnologías de servidor que conforman el GRID, grid es un entorno emergente para manejar al completo entornos IT y proporcionar recursos a petición de los usuarios.

El paradigma relacional para la gestión de base de datos de información fue la primeraformalizados en los años 60 y ha sido constantemente perfeccionado desde entonces. Un paradigma esun conjunto de normas acordadas por todas las partes interesadas que especifica cómo los problemasdebe entenderse y abordarse. Existen otros paradigmas dentro de los datosprocesar mundo. La base de datos Oracle es una implementación de un

Page 16: curso_sql_certificacion

RelacionalDatabase Management System (RDBMS) que se ajusta al paradigma relacional,pero luego va más allá para incluir algunos aspectos de otros paradigmas comomodelos jerárquicos y orientada a objetos

El lenguajeje de consulta estructurado (SQL, que se pronuncia "sequel") es una organización internacionalestándar para la gestión de los datos almacenados en bases de datos relacionales. Oracle Database 11g ofreceuna aplicación de SQL que es en general compatible con el estándar actual,que es SQL-2003. Los detalles completos de la Conformidad en el Apéndice B del SQLReferencia del lenguajeje, que es parte de la biblioteca de documentación de Oracle Database.Como regla general, se puede suponer Compatibilidad.A lo largo de este libro, dos herramientas se utilizan ampliamente para ejercicios: SQL * Plus ySQL Developer. Estas son las herramientas que los desarrolladores utilizan a diario en su trabajo. laejercicios y muchos de los ejemplos se basan en dos conjuntos de demostración de datos,conocidos como los esquemas de recursos humanos y la OE. Hay instrucciones sobre cómo iniciar laherramientas y crear los esquemas de demostración, aunque es posible que necesite la ayuda deel administrador de base de datos local para empezar.

Este capítulo consiste en descripciones resumidas de Oracle Server Technologies; los conceptos detrás del paradigma relacional y normalización de datos en estructuras relacionales; el lenguaje SQL; las herramientas de cliente; y los esquemas de pruebas.

OBJETIVO DE CERTIFICACIÓN 1.01

Posición Server Technologies Posición Server Technologies

Page 17: curso_sql_certificacion

3Hay una familia de productos que componen las tecnologías de servidor de Oracle:

■ La Base de datos de Oracle ■ El Servidor de Aplicación de Oracle■ El Enterpise Manager de Oracle ■ Varios herramientas de desarrollo de aplicaciones y lenguajes

Estos productos tienen cada uno una posición en el conjunto de productos de Oracle. La base de datos es el repositorio para datos y el motor que maneja el acceso a ello. El Servidor de Aplicación de Oracle ejecuta el software de la parte de usuarios finales: esto genera el interface de usuario en la forma de ventanas mostradas en los navegadores de los usuarios y presenta llamadas a extracción y modificación de datos a la base de datos para su ejecución. El Enterprise Manager de Oracle es una herramienta de administración integral para controlar, gestionar y realizar el ajuste de los procesos de Oracle y también (a través de plug-ins) de productos de terceros. Por último,hay herramientas y lenguajes para el desarrollo de aplicaciones, ya sea en aplicaciones que ejecutar en máquinas de los usuarios finales en el modelo cliente-servidor, o aplicaciones que se ejecutan centralizada en servidores de aplicaciones. La combinación de las tecnologías de servidor y las herramientas de desarrollo configuran una plataforma para desarrollo y entrega de aplicaciones

La Arquitectura de Servidor de Oracle Una base de datos de Oracle es un conjunto de archivos en el disco. Estos existen hasta

que estos archivos sean deliberadamente borrados. No hay ningunos límites prácticos

en el tamaño y el número de estos archivos, y por lo tanto no hay límites prácticos en

el tamaño de una base de datos. El acceso a la base de datos es a través de la instancia

de Oracle. La instancia es un conjunto de estructuras de memoria y procesos: estos

existen en la unidad (es) centrales de proceso y en la memoria del nodo de servidor, y

esta existencia es temporal. Una instancia puede ser arrancada y parada. Los usuarios

de la base de datos establecen sesiones contra la instancia, y la instancia entonces

maneja todos los

4Capítulo 1:

Oracle Server Technologies y el Paradigma Relacional

accesos a la base de datos. Es absolutamente imposible en el entorno de Oracle para cualquier usuario

Page 18: curso_sql_certificacion

tener el contacto directo con la base de datos. Uns instancia de Oracle con una base de datos de Oracle configura un servidor de Oracle.

El modelo de procesamiento puesto en práctica por el servidor de Oracle es el del procesamiento cliente-servidor, a menudo denominado como de dos capas. En el modelo cliente-servidor, la generación del interface de usuario y la mayor parte de la lógica de aplicación están separadas de la gestión de los datos. Para una aplicación desarrollada usando SQL (como serán todas las aplicaciones de base de datos relacionales ), esto significa que la parte de cliente genera los comandos de SQL, y la parte de servidor los ejecuta. Esta es la arquitectura cliente-servidor básica, con (por regla general) una red de área local entre las dos partes. El protocolo de comunicaciones de red usado entre el proceso de usuario y el proceso de servidor es el protocolo patentado del Oracle, Oracle NET.

La parte de cliente consiste de dos componentes: los usuarios y los procesos de usuario. La parte de servidor tiene tres componentes: el proceso servidor que ejecuta el SQL, el instancia, y la base de datos en sí misma. Cada usuario se relaciona con un proceso de usuario. Cada proceso de usuario se relaciona con un proceso de servidor, por lo general a través de una red de área local. Los procesos de servidor se relacionan con la instancia, y la instancia con la base de datos. La figura 1-1 muestra esta relación esquemáticamente.

Una sesión es un proceso de usuario que se comunica con un proceso de servidor. Habrá por lo general un proceso de usuario por usuario y un proceso de servidor por proceso de usuario. Los procesos de servidor y usuario que configuran las sesiones son lanzados a petición por usuarios y terminados cuando ya no es requerido; esto es el ciclo de log-on y log-off en el sistema. Los procesos de instancia y las estructuras de memoria son lanzados por el administrador de base de datos y persisten hasta que el administrador deliberadamente los termine; esto es el ciclo de cierre e inicializador de la base de datos.

El proceso de usuario puede ser cualquier software de lado del cliente que sea capaz de la conexión a un proceso de servidor de Oracle. En todas partes de este libro, dos procesos de usuario serán usados extensivamente: SQL*Plus y Developer SQL. Éstos son procesos simples proporcionados por Oracle para establecer sesiones contra un servidor de Oracle y publicar ad hoc SQL.

Componentes de la parte cliente componentes de la parte servidor

Usuario Proceso usuario Proceso servidor Instancia

Componentes de la sesión

Base de Datos

Figura 1.1 La conexión indirecta entre un usuario y una base de datos

Una alternativa extensamente usada es el TOAD de QUEST Software, aunque este es un software licenciado y antes de usarlo siempre hay que asegurar que la licencia es legal. Las aplicaciones de usuario final tendrán que ser escritas con algo más sofisticado que

Page 19: curso_sql_certificacion

estas herramientas, algo capaz de gestionar ventanas, menús, diálogos en pantalla etcétera. Tal aplicación podría ser escrita con los productos de Oracle developper Suite ; con Microsoft Access conectado con el drivers ODBC de Oracle; con cualquier lenguaje de tercera generación (como C o Java) al que Oracle ha provisto con una biblioteca de llamadas a funciones que le dejarán interactuar con el servidor o con cualquier tipo de herramientas de terceros compatibles con Oracle. El proceso de usuario que se conecta no es realmente con el servidor de Oracle . Cuando un usuario final rellena un impreso y hace clic en un botón Submit, el proceso de usuario generará una sentencia de INSERCIÓN y lo enviará a un proceso de servidor para la ejecución contra la instancia y la base de datos. Por lo que corresponde al servidor está sentencia de INSERCIÓN podría haber sido directamente tecleada en SQL*Plus como lo que es conocido como SQL ad hoc.

Nunca olvide que toda la comunicación con un servidor de Oracle sigue este modelo cliente-servidor . La separación del código de usuario del código de servidor se remonta a las primeras versiones de la base de datos y es inevitable. Aun si el proceso de usuario se ejecuta en la misma máquina que el servidor, la arquitectura cliente-servidor todavía se cumple, y los protocolos de red todavía son usados para las comunicaciones entre los dos procesos. Las aplicaciones que se ejecutan en un entorno de servidor de aplicación (descrito en la siguiente sección) también siguen el modelo cliente-servidor para su acceso a la base de datos.

La forma más simple del servidor de base de datos es una instancia conectada a una base de datos, pero en un entorno más complejo una base de datos puede ser abierta por muchas instancias. Esto es conocido como un RAC. RAC puede traer muchas ventajas potenciales, que pueden incluir la escalabilidad, el rendimiento, y tiempo de indisponibilidad cero. La capacidad de añadir dinámicamente más instancias que se ejecutan en más nodos a una base de datos es una parte principal de la contribución de la base de datos.

El Servidor de Aplicación de Oracle Con la aparición de la Web como la plataforma de comunicaciones estándar para la entrega de

aplicaciones a usuarios finales ha surgido la necesidad de servidores de aplicación. Un servidor de

aplicación reemplaza el software del lado del cliente tradicionalmente instalado en el terminal del usuario

final; esto ejecuta aplicaciones centralizadas, presentándolas a los usuarios en ventanas mostradas en los

navegadores web locales. Las aplicaciones hacen el uso de datos almacenado en uno o varios servidores

de base de datos.

El Servidor de Aplicación de Oracle es una plataforma para desarrollo, despliegue, y gestion de aplicaciones web. Una aplicación web puede ser definida como cualquier aplicación con la cual los usuarios se comuniquen vía HTTP. Las aplicaciones web por lo general se ejecutan en al menos tres capas: una capa de base de datos que maneja el acceso a los datos, la capa de cliente (a menudo un navegador web)

Page 20: curso_sql_certificacion

que gestiona la ventana local para comunicaciones con los usuarios, y una capa de aplicación en el medio que ejecuta la lógica de programa que genera el interface de usuario y las llamadas SQL a la base de datos.

Las aplicaciones web pueden ser desarrolladas con varias tecnologías, la predominante entre ellas es Java. Las aplicaciones escritas en Java deberían cumplir con la especificación J2EE (Java 2 Edición de Empresa) estándar, que define como las aplicaciones deberían ser empaquetadas y desplegadas. J2EE y los estándares relacionados son controlados por Sun Microsystems y aceptados por prácticamente todos los desarrolladores de software. El Servidor de Aplicación de oracle es un servidor de aplicación compatible con J2EE. La implementación de oracle de los estándares permite el balanceo automático de carga y la tolerancia a fallos por medio del uso de clusters J2EE en diferentes máquinas. El clusterizar permite virtualizar la provisión del servicio de aplicación; los usuarios solicitan una aplicación que podría estar disponible en varias sitios, y el cluster trabaja sirviendo la petición del sitio más óptimo. Si un sitio falla, los otros tomarán su carga, y más recursos pueden ser puestos a disposición de una aplicación si es necesario. La capacidad de separar la petición de un servicio de su sitio desde la cual es servida y añadir o eliminar servidores J2EE de un cluster dinámicamente es una parte principal de la contribución del Servidor de Aplicación de Oracle al GRID.

Es importante notar que el compromiso del Oracle a las normas internacionales es muy fuerte. Las aplicaciones que se ejecutan en el entorno de Servidor de Aplicación de Oracle pueden conectar a cualquier base de datos para la cual haya drivers compatibles con Java; no es necesario usar una base de datos de Oracle. Las aplicaciones desarrolladas con los conjuntos de herramientas del Servidor de Aplicación de Oracle pueden ser desplegadas en un servidor de aplicación de terceros compatible con J2EE.

El modelo de procesamiento más simple de aplicaciones web es tres capa: una capa de cliente que

maneja el interface de usuario; una capa media que genera el interface y envía los comandos SQL a la capa de datos; y una capa de datos que maneja los datos sí mismo. En el entorno de Oracle, la capa de cliente será un navegador (como Mozilla o Microsoft Internet Explorer) que se maneja la gestión de la ventana local, controla el teclado, y rastrea movimientos de ratón. La capa media será un Servidor de Aplicación de Oracle que ejecuta el software (probablemente escrito en Java) que genera las ventanas enviadas a la capa de cliente para la visualización y los comandos SQL enviados a la capa de datos para su ejecución. La capa de datos será un servidor de Oracle: una instancia y una base de datos. En este entorno de tres capas, hay dos tipos de sesiones: sesiones de usuario final de la capa de cliente a la capa media, y sesiones de base de datos de la capa media a la capa de datos. Las sesiones de usuario final serán establecidas mediante HTTP. Las sesiones de base de datos son sesiones cliente-servidor que consisten en un proceso de usuario y un proceso de servidor,descrito en la sección anterior.

Es posible para una aplicación usar un mapeo uno-a-uno de la sesión de usuario final a la sesión de base de datos: cada usuario, desde su navegador, establecerá una sesión contra el servidor de aplicación, y el servidor de aplicación establecerá entonces una sesión contra el servidor de base de datos con el nombre del usuario. Sin embargo, se ha probado que este modelo es muy ineficaz cuando comparado con el modelo de reutilización de conexión. Con la reutilización de conexión, el servidor de aplicación establece un número de sesiones relativamente pequeño de base de datos persistentes y pone a disposición de las peticiónes (haciendo cola de solicitudes si es necesario) a un relativamente gran número de sesiones de usuario final contra el servidor de aplicación.

Page 21: curso_sql_certificacion

Desde el punto de vista de la base de datos, esto no significa ninguna diferencia si un comando SQL viene de un proceso de lado del cliente, como el SQL*Plus o Microsoft Access o de una sesión reutilizada de un servidor de aplicación. En el primer caso, todo el proceso de usuario se encuentra en una máquina; en éste, el proceso de usuario ha sido dividido en dos capas: una capa de aplicaciones que genera el interface de usuario y una capa de cliente que lo muestra.

Oracle Enterprise Manager

El creciente tamaño y complejidad de las instalaciones IT hace que la gestión de ellas sea una tarea difícil. Esto no es sorprendente: nadie ha dicho que la gestión de un entorno eficaz necesariamente debe ser simple. Sin embargo, las herramientas de gestión pueden hacer la tarea más fácil y el personal de gestión más productiva

FIGURE 1-2

Browser

Browser

Stateful persistent sessions over Oracle Net

Browser

Browser

Application server

Database server

Stateless nonpersistent sessions over

HTTP

Page 22: curso_sql_certificacion

El Oracle Enterprise manager se presenta en tres formas:

■ Control de Base de datos■ Control de Servidor de Aplicación ■ Grid Control

La parte de enterprise manager de Oracle que viene como Database Control es un instrumento gráfico para la gestión de una base de datos, que puede ser una base de datos en RAC. Este consiste en un proceso de Java que se ejecuta en la máquina del servidor de base de datos. Los administradores se conectan al Control de Base de datos mediante un navegador, y el Control de Base de datos entonces conecta al servidor de base de datos. El Control de base de datos tiene funciones para la gestión en tiempo real y supervisar, ejecutar trabajos planificados, y avisar de alertas de forma interactiva y por el e-mail.

El Enterprise manager de oracle Application Server Control es un instrumento gráfico para manejar una instancia del servidor de aplicación o un grupo de instancias. La tecnología que se agrupa es dependiente de la versión. Hasta el Servidor de Aplicación de Oracle 10g Release 2, los servidores de aplicación clusterizados fueron manejados como una "granja", con un repositorio de metadatos (típicamente residente en una base de datos de Oracle) como el punto de gestión central. Des la release 3en adelante, la tecnología está basada en cluster de J2EE , que no es patentado al Oracle.

El enterprise manager de oracle Grid Control globaliza el entorno de gestión. Un repositorio de gestión (residente en una base de datos de Oracle) y uno o varios servidores de administración para manejar el entorno completo: todas las bases de datos y servidores de aplicación, dondequiera que ellos puedan estar. El Grid Control también puede manejar los nodos, o máquinas, en las cuales los servidores se ejecutan, así como (a través de plug-ins) una amplia gama de productos de terceros Cada nodo administrado se ejecuta un proceso de agente, que se encarga de controlar el destino gestionada en el nodo: estado de los trabajos en ejecución en su contra y presentación de informes, los niveles de actividad y las condiciones de alerta al servidor(es) de gestión.

El Grid Control da una vista holística del entorno y, si está bien configurado, hace la administración mucho más productiva que sin el. Se hace posible para un administrador manejar con eficacia cientos de servidores.

Computación grid Fundamental para el concepto de computación Grid es la virtualización. Esto significa que en todos

los niveles hay una capa de abstracción entre lo que se pide y lo que se proporciona. Los usuarios finales piden un servicio de aplicación y dejan que el GRID calcule qué servidor del cluster de aplicación J2EE puede proporcionarla mejor. Los servidores de aplicación piden un servicio de base de datos y dejan al GRID que decida de que nodo del RAC los datos mejor pueden ser servidos. Dentro del GRID hay un mapeo de los posibles servicios a los proveedores de servicios disponibles, y existen algoritmos para la asignación de la carga de trabajo y recursos de forma apropiada.

Page 23: curso_sql_certificacion

El resultado es que los usuarios finales no tienen ni la capacidad ni la necesidad de conocer de donde sus recursos de computación en realidad le están siendo ofrecidos. La analogía a menudo es presentada como con el suministro de la electricidad doméstica: es suministrado a petición, y el dueño de la casa no tiene ninguna forma de saber qué central eléctrica le provee actualmente.

El Grid no es exclusivo al Oracle. Al nivel físico, algún sistema operativo y los vendedores de hardware proporcionan capacidades parecidas al Grid. Éstos incluyen la capacidad de dividir a servidores en máquinas virtuales y dinámicamente añadir o eliminar CPU(s) y RAM de las máquinas virtuales según la demanda. Esto es conceptualmente similar al enfoque del Oracle de dinámicamente la asignación de servidores de aplicación y recursos de servidor de base de datos a servicios lógicos. No hay razón por la cual los dos enfoques no puedan ser combinados. Ambos están trabajando hacia la misma meta y pueden trabajar juntos. El resultado debería ser un entorno donde los recursos adecuados estén siempre disponibles a la carta, sin tener que hacer frente a los problemas de exceso de capacidad en algunos momentos y bajo rendimiento en otros. También debería ser posible diseñar un entorno de red sin ningún punto de fallo único, logrando así el objetivo de tiempo de actividad del 100 por ciento que está siendo demandada por muchos usuarios. El desarrollador de aplicaciones SQL no tiene que saber como el Grid ha sido configurado. El SQL será invocado de un servidor de aplicación y ejecutado por un instancia contra una base de datos: El Grid se encargará de asegurarse de que en cualquier momento hay disponibles pools de servidores de aplicaciones e instancias de tamaño adecuado para la carga de trabajo actual.

Herramientas de desarrollo y Lenguajejes Las tecnologías de servidor de Oracle incluyen varias utilidades para desarrollar aplicaciones, algunas

existen dentro de la base de datos, otros son externas a ella.

Dentro de la base de datos, es posible usar tres lenguajes. El que es inevitable, y que es el objeto de este libro, es SQL. SQL es usado para el acceso a los datos, pero no puede ser usado para desarrollar aplicaciones completas. Este no tiene ninguna función para desarrollar interfaces de usuario, y este también carece de las estructuras procesales necesarias de manipular filas individualmente. Los otros dos lenguajes disponibles dentro de la base de datos llenan estos huecos. Ellos son PL/SQL y Java. PL/SQL es un lenguaje de la tercera generación (3GL) patentado por Oracle. Este tiene las construcciones habituales de procedimiento (if-then-else y looping) y las utilidades para diseñar el interface de usuario. En el código de PL/SQL, uno puede insertar llamadas a SQL. Así, una aplicación PL/SQL podría usar SQL para recuperar una o varias filas de la base de datos, luego realizar varias acciones basadas en su contenido, y luego crear más SQL para escribir filas de nuevo a la base de datos. El Java ofrece una capacidad similar de insertar llamadas de SQL dentro del código Java. Esta es la tecnología estándar en industria: cualquier programador de Java debe ser capaz de escribir código que funcione con una base de datos Oracle (o con cualquier otra base de datos compatible con Java.)

Otros lenguajes están disponibles para desarrollar aplicaciones cliente-servidor que se ejecutan desde fuera de la base de datos. Los más comúnmente usados son C y Java, pero es posible usar la mayor parte de los principales leguajes 3GLs. Para todos estos lenguajes, Oracle Corporation proporciona OCI (Interface de Llamada de Oracle) bibliotecas que dejan al código escrito en estas lenguajes establecer sesiones contra una base de datos de Oracle e invocar comandos de SQL.

Page 24: curso_sql_certificacion

Muchas organizaciones no querrán usar un lenguaje 3GL para desarrollar aplicaciones de base de datos. Oracle Corporation proporciona herramientas de desarrollo de aplicaciones rápidas como la Oracle Developer Suite , y hay también muchos productos de tercero. Éstos pueden hacer que los programadores sean mucho más productivos que si ellos trabajaran con un lenguaje 3GL. Como los lenguajes, todos estos herramientas de desarrollo de aplicaciones terminan por hacer la misma cosa: los comandos de SQL son enviadas al servidor de base de datos para la ejecución.

OBJETIVO DE CERTIFICACIÓN 1.02

Comprendiendo las Estructuras Relacionales Un punto crítico para entender SQL es la compresión del paradigma relacional y la capacidad de

normalizar datos en estructuras relacionales. La normalización es el trabajo de analistas de sistemas, ya

que ellos modelan la información comercial en una forma conveniente para almacenar en tablas

relacionales. Es una ciencia que puede ser estudiada durante años, y hay muchas escuelas del

pensamiento que han desarrollado sus propios métodos y notas.

Filas y Tablas El paradigma relacional modela los datos como tablas de dos dimensiones. Una tabla consta de una

serie de filas, cada una consistente en un conjunto de columnas. Dentro de una tabla, todas las filas tienen la misma estructura de columnas, aunque es posible que en algunas filas algunas columnas puedan tener un valor nulo. Un ejemplo de una tabla sería una lista de EMPLOYEES, cada empleado representado por una fila. Las columnas podrían ser el número de empleado, el nombre, y un código para el departamento para el cual el empleado trabaja. Cualquier empleado no actualmente asignado a un departamento tendría esta columna en blanco. Otra tabla podría representar los DEPARTMENTS: una fila por departamento, con columnas para el código del departamento y el nombre del departamento.

Una nota de terminología: que Oracle se refiere como a una tabla también puede ser llamada una relación o una entidad. Las filas son a veces llamadas registros o tuplas, y las columnas pueden ser llamadas atributos o campos. El número de "filas en la tabla" es el "cardinalidad de las tuplas."

Las tablas relacionales se crean con ciertas reglas que restringen y definen los datos. Al nivel de columna, cada columna debe ser de un cierto tipo de datos, tal como numérico, fecha, o carácter. El tipo de datos carácter es el más general, ya que puede aceptar cualquier tipo de datos. Al nivel de fila, por lo general cada fila debe tener alguna característica que la identifica únicamente: esto podría ser el valor de una columna, como el número de empleado y el número de departamento en los ejemplos precedentes, que no pueden ser repetidos en filas diferentes. También puede haber reglas que definen relaciones entre las tablas, tal como la regla general de que cada empleado debe tener asignado un código de departamento que puede ser relacionado con una fila en la tabla de DEPARTMENTS. Lo siguiente son ejemplos de las definiciones de datos tabuladas:

Page 25: curso_sql_certificacion

Tabla DEPARTMENTS:

Column Name Description Data Type Length

DEPTNO Department number Numeric 2

DNAME Department name Character 14

Tabla EMPLOYEES:

Column Name Description Data Type Length

EMPNO Employee number Numeric 4

ENAME Employee name Character 10

DEPTNO Department number Numeric 2

Las tablas podrían contener estas filas:DEPARTMENTS

DEPTNO DNAME

10 ACCOUNTING

20 RESEARCH

30 SALES

40 OPERATIONS

EMPLOYEES:

EMPNO ENAME DEPTNO

7369 SMITH 20

7499 ALLEN 30

7521 WARD 30

7566 JONES 20

7654 MARTIN 30

7698 BLAKE 30

7782 CLARK 10

7788 SCOTT 20

Page 26: curso_sql_certificacion

Viendo las tablas, la estructura de dos dimensiones es clara. Cada fila es de longitud fija, cada columna es de longitud fija (rellenada con espacios cuando sea necesario), y las filas son delimitadas con una nueva línea. Las filas se han almacenado con el fin de código, perose trata de una cuestión al azar, no de diseño: las tablas relacionales no imponen ningún orden particular en sus filas. Departamento número 10 tiene un empleado y departamentonúmero 40 no tiene ninguno. Los cambios en los datos suelen ser muy eficiente con el modelo relacional. Los nuevos EMPLOYEES se pueden añadir a la tabla de EMPLOYEES, o pueden ser trasladados de un departamento a otro simplemente cambiando el valor DEPTNO en su fila.Considere una estructura alternativa, donde los datos son almacenados según el paradigma jerárquico. El modelo jerárquico fue desarrollado antes del modelo relacional, por motivos de tecnología. En los primeros días de informática, los dispositivos de almacenamiento carecían de la capacidad de mantener muchos archivos separados que eran necesarios para mantener muchas tablas relacionales. Note que este problema es evitado en la base de datos de Oracle abstrayendo el almacenamiento físico (archivos) del almacenamiento lógico (tablas): no hay ninguna conexión directa entre tablas y archivos y seguramente no necesita el trazar un mapa de uno a uno. En efecto, muchas tablas pueden ser almacenadas en muy pocos archivos.

Una estructura jerárquica almacena todos los datos relacionados en una unidad. Por ejemplo, el registro para un departamento incluiría este todo los EMPLOYEES del departamento. El paradigma jerárquico puede ser muy rápido y muy eficiente en cuanto a espacio. Un acceso a fichero puede ser todo lo que se necesita para recuperar todos los datos para satisfacer una consulta. Los EMPLOYEES y los DEPARTMENTS mencionados anteriormente pueden ser almacenados jerárquicamente de la siguiente manera:

10,ACCOUNTING,7782,CLARK

20,RESEARCH,7369,SMITH,7566,JONES,7788,SCOTT

30,SALES,7499,ALLEN,7521,WARD,7654,MARTIN,7698,BLAKE

40,OPERATIONS

En este ejemplo, las filas y las columnas son de la longitud variable. Las columnas son delimitadas con una coma, filas con una nueva línea. La extracción de datos es típicamente muy eficiente si la consulta puede desplazarse por la jerarquía: si uno conoce el departamento de un empleado, el empleado puede ser encontrado rápidamente. Si uno no lo conoce, la recuperación puede ser lenta. Los cambios en datos pueden ser un problema si el cambio requiere el movimiento. Por ejemplo, para mover al empleado 7566, JONES de la RESEARCH a SALES implicaría un esfuerzo considerable por parte de la base de datos porque el movimiento tiene que ser realizarse como un borrado en una línea y una inserción en otra. Note que en este ejemplo, mientras es posible tener un departamento sin EMPLOYEES (el departamento de OPERACIONES) es absolutamente imposible tener un empleado sin un departamento: no hay ningún lugar donde poner a él o ella. Esto es excelente si hay una regla comercial declarando que todos los EMPLOYEES deben estar en un departamento, pero no es tan bueno si no es el caso.

El paradigma relacional es muy eficiente en muchos aspectos para muchos tipos de datos, pero no es apropiado para todas las aplicaciones. Por regla general, un análisis relacional debería ser el primer enfoque tomado para el modelado de un sistema. Sólo si resulta apropiado debe uno recurrir a estructuras relacionales. Las aplicaciones donde el modelo relacional ha demostrado ser altamente eficaz incluyen prácticamente todo el procesamiento de transacciones en línea (OLTP) y Sistemas de Soporte de

Page 27: curso_sql_certificacion

Decisiones (DSS). El paradigma relacional puede ser exigente en sus requisitos de hardware y en la habilidad necesaria para desarrollar aplicaciones a su alrededor, pero si los datos caben, ha resultado ser el modelo más versátil. Puede haber, por ejemplo, problemas causados por la necesidad de mantener los índices que mantienen las relaciones entre las tablas y los requisitos de espacio de mantener de múltiples copias de los datos indexados en los propios índices y en las tablas en las que residen las columnas. Sin embargo, el diseño relacional es en la mayoría de circunstancias, el modelo óptimo.

Varios editores de software han producido sistemas de administración de bases de datos que se basan (con niveles variados de la exactitud) en el paradigma relacional; Oracle es sólo uno. La IBM era quizás la primera compañía para destinar recursos a ello, pero su producto (que más tarde se desarrolló en DB2) no fue trasladado a plataformas no IBM durante muchos años. El Servidor SQL de Microsoft es otra base de datos relacional que ha sido limitada por las plataformas en las cuales se ejecuta. Las bases de datos de oracle, por el contrario, siempre se han portado a todas las plataformas principales desde la primera versión. Tal vez sea esto lo que le dio la ventaja de Oracle en el mercado RDBMS.

Resumen del Lenguaje SQL

SQL está definido, desarrollado y controlado por organismos internacionales. Oracle Corporation no tiene por que ajustarse con el estándar SQL, pero ha decido hacerlo. El lenguaje en sí puede considerarse como algo muy simple (sólo hay 16 comandos), pero en la práctica la codificación SQL puede ser extraordinariamente complicada.

Estándares de SQL El Lenguaje de consulta estructurada (SQL) fue inventada primero por un grupo de investigación de

IBM en los años 70, pero de hecho Oracle Corporation (entonces comerciando como Relational Software, Inc.) afirma haber vencido a IBM al llegar al mercado unas semanas antes con la primera versión comercial: Oracle 2, lanzado en 1979. Desde entonces el lenguaje ha evolucionado enormemente y ya no es dirigida por ninguna organización. SQL es ahora una norma internacional Es administrado por los comités de ISO y ANSI. ISO es la Organización Internacional de Normalización, con sede en Ginebra; ANSI es el American National Standards Institute, con sede en Washington, DC. Los dos organismos cooperan, y sus normas de SQL son idénticas.

Las primeras versiones de la base de datos de Oracle usaron una implementación de SQL que tenía algunas desviaciones significativas del estándar. Esto no era porque el Oracle era deliberadamente quería ser diferente: era por lo general porque Oracle puso en práctica aspectos que estaban por delante del estándar, y cuando el estándar se puso al corriente, este usó una sintaxis diferente. Un ejemplo es la relación externa, que Oracle puso en práctica mucho antes que el estándar SQL; cuando el estándar SQL introdujo la relación externa, Oracle añadió la compatibilidad a la nueva sintaxis de relación manteniendo el soporte a su propia sintaxis patentada. Oracle Corporation garantiza el cumplimiento futuro mediante la inserción de personal en los diversos comités de la ISO y ANSI y ahora está ayudando a conducir el estándar SQL adelante.

Mandatos SQL Éstos son los 16 comandos de SQL, separados en los grupos comúnmente usados:

Page 28: curso_sql_certificacion

El Lenguaje de Manipulación de Datos (DML) comandos:

■ SELECT ■ INSERT ■ UPDATE ■ DELETE ■ MERGE

El Lenguaje de Definición de Datos (DDL) comandos:

■ CREATE ■ ALTER■ DROP ■ RENAME ■ TRUNCATE■ COMMENT

El Lenguaje de Control de Datos (DCL) comandos:

■ GRANT ■ REVOKE

El Lenguaje de Control de Transacción (TCL) comandos:

■ COMMIT ■ ROLLBACK ■ SAVEPOINT

El primer comando, SELECT, es el tema principal de los Capítulos 2 a 9. Los comandos de DML restantes son cubiertos en el Capítulo 10, junto con los comandos de TCL.

DDL es detallado en los Capítulos 11 y 12. DCL, que tiene que ver con la seguridad, sólo es brevemente mencionado: esto más cae más en el dominio del administrador de base de datos que de los desarrolladores.

Un Lenguaje orientada al conjunto La mayor parte de lenguajes 3GLs son procidementales. Los programadores que trabajan en lenguajes

procedimentales especifican que hacer con datos, una fila a la vez. Programadores que trabajan en un lenguaje orientado a conjuntos dicen lo que ellos quieren hacer a un grupo de filas y dejan el trabajo de como hacerlo a la base de datos, sin embargo muchas filas están en el conjunto.

Los lenguajes de procedimientos son por lo general menos eficientes que lenguajes orientadas al conjunto en cuanto a la gestión de datos, tanto en cuanto al desarrollo como en cuanto a la ejecución. Una rutina de procedimiento para recorrer a través de un grupo de filas y actualizar uno a uno implica muchas líneas de código, donde SQL puede hacer toda la operación con un solo comando: aumenta la productividad de los programadores. Durante la ejecución del programa, el código procesa la orden en la base de datos sin ninguna opción, sino que debe ejecutar el código que se ha escrito. Con SQL, el programador declara lo que él o ella quieren hacer, pero no como hacerlo: la base de datos tiene la libertad de calcular como mejor realizar la operación. Esto dará por lo general mejores resultados.

Donde SQL deja de proveer una solución completa consiste en que es puramente una lenguaje de acceso a los datos. La mayor parte de aplicaciones necesitarán construcciones procedimentales, como el

Page 29: curso_sql_certificacion

control de flujo: ramificaciones condicionales e iteración. Ellos también tendrán por lo general que control de pantalla, instalaciones de interface de usuario, y variables. SQL no tiene nada de esto. SQL es un lenguaje orientado al conjunto capaz únicamente de dar el acceso a los datos. Para el desarrollo de aplicaciones, uno necesitará por lo tanto un lenguaje procedimental que pueda invocar llamadas de SQL. Es por lo tanto necesario para SQL trabajar con una lenguaje de procedimientos.

Considere una aplicación que solicita al usuario un nombre, recupera todas las personas con ese nombre de una tabla, se le solicita al usuario que elija una de ellas, a continuación, elimina a la persona elegida. El lenguaje procesal dibujará una pantalla y generará apremio para un nombre. El usuario ingresará el nombre. El lenguaje procedimental construirá una sentencia SQL select usando el nombre y enviará la sentencia por medio de una sesión de base de datos al servidor de base de datos para la ejecución. El servidor devolverá un conjunto de filas (toda la gente con aquel nombre) al lenguaje procedimental, que formateará el conjunto para la visualización al usuario y le solicitará para que elija uno (o más) de ellos. El identificador para la persona elegida (o la gente) será usado entonces para construir una senténcia SQL de borrado para que el servidor la ejecute. Si el identificador es un identificador único (la clave primaria) entonces el conjunto de filas para ser borradas será un conjunto de sólo una fila; si el identificador es no único, entonces el conjunto seleccionado para la eliminación sería más grande. El código procedimental no sabrá nada sobre el probable tamaño de los conjuntos recuperados o borrados.

Uso de las Herramientas de Cliente Hay numerosos herramientas que pueden ser usados para conectarse a una base de datos de Oracle.

Dos de las más básicas son SQL*Plus y SQL Developer. Éstos son proporcionados por Oracle Corporation y son absolutamente adecuados para la mayor parte del trabajo que un desarrollador o un administrador de base de datos tienen que hacer. La opción entre ellos es en parte un asunto de preferencias personales, en parte para hacerse con el entorno, y en parte con la funcionalidad. El de SQLDeveloper indudablemente ofrece mucho más funcionalidad que SQL*Plus, pero es más exigente, necesita un terminal gráfico, mientras que SQL*Plus puede ser usado en dispositivos en modo de carácter.

Oracle Corporation tiene una historia de producir herramientas simples para relacionarse con una base de datos que a los usuarios les disgustó y que por lo tanto cayó al desuso. Más recientemente, éstos incluyen la herramienta iSQL*Plus que fue introducida con la versión 9i y abandonada con la versión 11g. La herramienta que mas ha durado es SQL*Plus, y aunque Oracle Corporation promueva al SQL Developer muy fuertemente como un remplazo, a toda la gente que trabaja en el entorno de Oracle le aconsejan el familiarizarse con el.

SQL*Plus SQL*Plus es una herramienta cliente-servidor para conectar a una base de datos y enviar ad hoc SQLcomandos. También puede ser usada para crear el código de PL/SQL y tiene funciones para formatear

resultados. Está disponible en todas las plataformas a las cuales la base de datos ha sido portada - las secciones que siguen dan algún detalle de la utilización de SQL*Plus en Linux y Windows. No hay ningunas diferencias significativas con la utilización de SQL*Plus en ninguna otra plataforma.

En términos de arquitectura, SQL*Plus es un proceso de usuario escrito en C. Este establece una sesión contra una instancia y una base de datos sobre el protocolo de Red de Oracle. Las plataformas para el cliente y el servidor pueden ser diferentes. Por ejemplo, no hay ninguna razón de no usar SQL*Plus en una sesión de comandos de Windows para conectar a una base de datos que se ejecuta en un mainframe (o al revés) a condición de que las Red de Oracle hayan sido configuradas para hacer la conexión.

Page 30: curso_sql_certificacion

SQL*Plus en Linux El archivo ejecutable SQL*Plus en una instalación de Linux es sqlplus. LA dirección donde se

encuentre este archivo será dependiente de la instalación , pero será típicamente algo como:

/u01/app/oracle/product/db_1/bin/sqlplus

Su cuenta de Linux debería ser configurada apropiadamente para ejecutar SQL*Plus. Hay algunas variables de entorno que tendrán que ser puestas. Éstos son

ORACLE_HOME PASO LD_LIBRARY_PATH

La variable ORACLE_HOME señala al directorio de instalación. Un Oracle HOME es el directorio de

instalación de software de oracle: elconjunto de archivos y directorios que contienen el código ejecutable y

algunos archivos de configuración. El PATH debe incluir el directorio de bin en el Oracle Home. El

LD_LIBRARY_PATH debería de incluir el directorio lib en el Oracle Home, pero en la práctica usted

puede trabajar sin poner esto. La figura 1-5 muestra una ventana de terminal de Linux y algunas pruebas para

ver si el entorno es correcto.

En la Figura 1-5, el primer comando echo comprueba si las tres variableshan sido configuradas correctamente: hay un ORACLE_HOME, y los directorios bin y liblos cuales se establecen como el primer elemento de las variables PATH y LD_LIBRARY_PATH. A continuación, se confirma que el ejecutable SQL * Plus realmente está disponible en el PATH. Finalmente, SQL*Plus es ejecutado con un nombre de usuario, una contraseña, y un identificador de conexión pasándoselo en la línea de comandos. Si las pruebas no devuelven resultados aceptables y SQL*Plus no se

Page 31: curso_sql_certificacion

ejecuta deberían de hablar con su administrador de sistema y su administrador de base de datos. Algunos errores comunes con la entrada en el sistema en sí mismo son descritos en la sección "Creación y Pruebas de una Conexión a la base de datos" más tarde en este capítulo.

El formato de la cadena es el nombre de usuario de inicio de sesión de base de datos seguido de una barra diagonal como carácter delimitador, tras el cual va la contraseña del usuario seguida de un símbolo @ como delimitador, y por último, una conexión de Oracle NET. En este ejemplo, el nombre de usuario es system y cuya contraseña es orácle, y la base de datos se identifica mediante ORCL.

Después de entrar en el sistema, las siguientes líneas del texto muestran la versión de SQL*Plus usado, que es 11.1.0.6.0, la versión de la base de datos a la cual la conexión ha sido hecha (que resulta ser el mismo como la versión de la herramienta SQL*Plus), y qué opciones han sido instaladas dentro de la base de datos. La última línea es prompt al usuario, SQL>, en este punto el usuario puede escribir cualquier comando SQL*Plus o SQL. Si la entrada al sistema no tiene éxito con cualquier nombre de usuario (probablemente no system) que usted ha sido asignado, deberían hablar de ello con su administrador de base de datos.

SQL*Plus en Windows Históricamente, siempre había dos versiones de SQL*Plus para el Microsoft Windows: la versión en modo carácter y la versión gráfica. La versión de carácter es el ejecutable sqlplus.exe, y la versión gráfica era sqlplusw.exe. Con el lanzamiento de la actual release la versión gráfica ya no existe, pero muchos desarrolladores preferirán usarlo y las versiones portadas con versiones más antiguas son herramientas absolutamente buenas para trabajar con una base de datos 11g. No hay ningún problema con la mezcla de versiones : un 11g como cliente de SQL*Plus puede conectar a una base de datos 10g, y cliente en 10g de SQL*Plus puede conectar a una base de datos 11g. Después de instalación por defecto de la base de datos de Oracle o sólo del cliente de Oracle en Windows, SQL*Plus estará disponible como un acceso en el menú de INICIO de Windows. La forma de acceso será como sigue:

1. Comience 2. Programas 3. Oracle-OraDB11g_home1 4. Desarrollo de aplicaciones 5. SQL*Plus

Sin embargo, el paso exacto será específico de la instalación. La figura 1-6 muestra una entrada en el

sistema a una base de datos con SQL*Plus, ejecutando el acceso. La primera línea del texto muestra la

versión de SQL*Plus, que es la 11.1.0.4.0, y la hora en que el programa fue ejecutado.La tercera línea de

texto es un símbolo de inicio:

Escriba el nombre de usuario:

seguido de la de cadena de conexión en el sistema que se introducido manualmente, que era

system/oracle@orcl

Un cambio que a algunos les gusta hacer en el acceso directo que lanza SQL * Plus, es el evitar que se presente inmediatamente un mensaje de inicio de sesión. Para ello, se añadie la opción NOLOG al final del comando

sqlplus/nolog

Page 32: curso_sql_certificacion

En vez del acceso del menú de INICIO:se puede simplemente abrir una ventana de comando y ejecútarlo. El programa inmediatamente presenta un símbolo de inicio para entrar en el sistema, a menos que usted lo invoque con la opción de NOLOG descrita arriba.

A 1-6

Figura 1.6.conexión a base de datos con SQL*plus.Las pruebas del entorno y la necesidad de iniciar las variables si ellas no soncorrectas, como se ha descrito anteriormente para una instalación de Linux, no son por lo general

necesarios en una instalación de Windows. Esto es porque las variables son puestas en el Registro de Windows por el Oracle Universal Instaler cuando el software es instalado. Si SQL*Plus no se ejecuta con éxito, compruebe las variables de Registro. La figura 1-7 muestra la sección relevante del Registro, visualizado enWindows con regedit.exe. Dentro del Registro, navegue a la clave:

KEY_OraDb11g_home1 de ORACLE en SOFTWARE de la entrada HKEY_LOCAL_MACHINE El elemento final de este paso de navegación tendrá un nombre diferente si allí tienen Varias instalaciones 11g en la máquina.

Estos se refieren a la ubicación del ejecutable sqlplus.exe y la ruta del menú Inicio de navegación para alcanzar el acceso directo que va a poner en marcha.

Creando y Probando una Conexión a la base de datos SQL*Plus no tiene ningún modo de almacenar cadenas de conexión a la base de datos. Cada vez que un usuario desea conectar a una base de datos, el usuario debe decir a SQL*Plus quién es y a que base de datos desea conectarse. Hay variaciones según la seguridad específica para el sitio.

Page 33: curso_sql_certificacion

FIGURA 1-7

Las variables de registro

Instalaciones, pero los medios más comunes del acceso a la base de datos es presentando un nombre de usuario y una contraseña. Hay dos formas comúnmente usadas para identificar la base de datos ya sea dando un alias que se resuelve en los detalles completos de conexión, o mediante la introducción de todos los detalles.

Desde la línea de comandos del sistema operativo, se ejecutan estos comandos de SQL * Plus para conectar la base de datos como usuario SCOTT cuya contraseña es TIGRE. uso de cada una de las opciones:

sqlplus scott/tiger@orcl sqlplus scott/[email protected]:1521/orcl.bplc.com

El primer ejemplo usa un alias, orcl, para identificar la base de datos. Esto debe ser resueltoen el detalle completo de conexión. Esta resolución puede ser hecha de varios modos, pero de una u otra forma debe ser llevada a cabo. Las técnicas habituales para esto deben usar un archivo de texto llamado tnsnames.ora, o conectar con un directorio LDAP, como Directorio Activo de Microsoft o Directorio de Internet de Oracle del Oracle.

El segundo ejemplo proporciona todos los detalles para conectar en la línea de comandos. Los detalles de conexión necesarios son el hostname del servidor en el cual el instancia de base de datos se ejecuta; el puerto de TCP en el cual esta escuchando el listener de la base de datos de Oracle; y el servicio de base de datos al cual el usuario desea que el listener de la base de datos le conecte. La primera técnica, donde el usuario sólo tiene que escribir un alias, requiere que el administrador de base de datos configure un mecanismo de resolución de nombre; la segunda técnica sólo puede trabajar si el usuario sabe los detalles él mismo.

Hay varias circunstancias que causarán que un intento de conexión SQL*Plus de fallar. La figura 1-8

Page 34: curso_sql_certificacion

ilustra algunos más problemas comunes.

FIGURA 1-8

Figura 1.8. algunos problemas comunesEn primer lugar, el usuario inicia SQL * Plus desde una ventana de comandos del sistema operativo

Windows, usando la opción NOLOG para evitar el mensaje de login inmediata. No hay problema hasta ahora.En segundo lugar, desde el indicador SQL>, el usuario emite una petición de conexión, lo que falla con un error conocido:

ORA-1254: TNS: no se pudo resolver el identificador de conexión especificado

Este error se debe a que el identificador de conexión dada, wrongalias, no se puede resolver en los detalles de conexión de base de datos por el TNS (Transparent Network Substrate-no es un acrónimo particularmente facil de recordar) de la capa de red de Oracle. El método de resolución de nombres a utilizar y su configuración es un asunto para el administrador de base de datos. En este caso, el error es evidente: el usuario ha introducido el identificador de conexión equivocado.El segundo intento de conexión proporciona el identificador correcto, ORCL. Esta falla con

ORA-12541: TNS: no se escucha

Esto indica que el identificador de conexión se ha resuelto correctamente en la direcciónde un listener de base de datos, pero que el listener no se está ejecutando realmente. Tenga en cuenta que otra posibilidad sería que la resolución de la dirección está defectuosa y está enviando SQL * Plus a la dirección equivocada. A raíz de este error, el usuario debe comunicarse con el administrador de la base de datos y pedirle que inicie el listener. A continuación, intente de nuevo.La tercera petición de conexión falla con

ORA-12514: TNS: el listener no sabe actualmente el descriptor de servicio requerido en la conexión.

Este error se genera por el listener de la base de datos. SQL * Plus ha encontrado el listener sin problemas, pero el listener no puede hacer la conexión hacia el servicio de la base de datos. La razón más probable para esto es que la instancia de base de datos no ha sido iniciada, por lo que el usuario debe solicitar al administrador de la base de datos para que la inicie y, a continuación, inténtelo de nuevo.La cuarta solicitud de conexión falla con

Page 35: curso_sql_certificacion

ORA-01017: invalid nombre de usuario / contraseña, inicio de sesión denegado

Para recibir este mensaje, el usuario debe tener contacto con la base de datos. El usuario tiene acceso a la instancia de base de datos la cual está en ejecución. El usuario sólo tiene la contraseña o nombre de usuario incorrecto. Tenga en cuenta que el mensaje no indica si se trata de la contraseña o el nombre de usuario que está mal si lo hiciera, sería dar información

.Finalmente, el quinto intento de conexión es satisfactoria

El ejemplo precedente demuestra una técnica de resolución de los problemas que usted usará con frecuencia.

SQL Developer El Developer de SQL es un instrumento para conectar a una base de datos de Oracle (o, de hecho,

algunas bases de datos de no oracle también) y ejecutar ad hoc comandos de SQL. Este también puede manejar objetos de PL/SQL. A diferencia de SQL*Plus, es un instrumento gráfico con asistentess para acciones comúnmente necesarias. El SQL Developer está escrito en Java y requiere que un Entorno de runtime de Java (JRE) .

Siendo escrito en Java, el SQL Developer está disponible en todas las plataformas que soportan la versión apropiada del JRE. No hay ninguna diferencia significativa entre plataformas.

Instalación y ejecución de SQL developerEl SQL Developer no se instala con el Oracle Universal Instaler, que es usado para instalar todos los

otros productos de Oracle. Este no existe en un Oracle Home, pero es un producto completo en si mismo. La última versión puede ser descargada del sitio web de Oracle Corporation.

Una instalación de la base de datos 11g incluirá una copia del SQL Developer, pero no será la versión actual.

Para instalar el SQL Developer, descomprima el archivo de ZIP. Eso es todo. Este realmente requiere tener la versión JDK1.5, que la versión 1.5 del runtime de Java, esté disponible: esta pertenece a Sun Microsystems. Pero si JDK1.5 (o una versión posterior) no está disponible ya en la máquina utilizada, hay versiones autoinstalable del SQL Developer para Windows que la incluye. Para otras plataformas aparte de Windows, el JDK1.5 debe ser preinstalado. Descárguelo de la web de Sun Microsystems e instálela según las directrices específicas para la plataforma. Para comprobar que el JDK está disponible con la versión correcta, de un sistema operativo ejecute el siguiente comando:

Java - versión

Esto debería devolver algo como lo siguiente:

la Java de versión "1.5.0_13" de Java (TM) 2 Entorno de tiempo de Ejecución, Edición Estándar (construyen 1.5.0_13-b05) HotSpot de Java (TM) Cliente VM (construyen 1.5.0_13-b05, modo mezclado, compartiendo)

Si no sale algo como esto, usando wich Java puede ayudar a identificar el problema: el PATH

podría estar apuntando a una versión incorrecta. Una vez que el SQL Developer ha sido descomprimido, cambie su directorio actual al directorio en el cual el SQL Developer fue descomprimido y lo ejecuta. En Windows, el

el archivo ejecutable es sqldeveloper.exe. En Linux, es el shell script sqldeveloper.sh.

Page 36: curso_sql_certificacion

Acuérdese de comprobar que la variable de entorno de VISUALIZACIÓN(DISPLAY) ha sido puesta a un valor conveniente (tal como 127.0.0.1:0.0, si el SQL Developer está siendo ejecutado en la consola de sistema) antes de ejecutar el shell script.

Cualquier problema con instalar el JRE y lanzar SQL Developer debería ser notificado a su administrador de sistema.

Figura 1.9, interfaz de usuario de sql developer

La Figura 1-9 de Interface de Usuario de SQL Developer muestra el Interface de Usuario de SQL Developer después de conectar a una base de datos.

La disposición general de la ventana SQL Developer es un panel de la izquierda para la navegaciónbalrededor de los objetos, y un panel de la derecha para mostrar e introducir información.

En la figura, el panel de la izquierda muestra que una conexión se ha hecho a unabase de datos. La conexión se denomina orcl_sys. Este nombre es sólo una etiqueta elegida cuando la conexión se ha definido, pero la mayoría de los desarrolladores utilizan algún tipo de convención en los nombres en este caso, el nombre elegido es el identificador de base de datos, que es ORCL,y el nombre del usuario con el que se ha realizado la conexión, que era sys. Las ramas de debajo listan todos los tipos de objetos posibles que pueden ser manejados. Al desplegar las ramas se enumeran los objetos. El panel de la derecha tiene una parte superior que solicita al usuario que escriba una instrucción SQL y una parte inferior que muestra el resultado de la ejecución. La disposición de paneles y las fichas visibles en ellos es muy customizable.

Los botones de menú a través de la barra de menú superior dan el acceso a las funciones estándares:

■ Archivo:en esta opción se puede realizar lo siguiente: desde donde se puede guardar el trabajo y la salida de la herramienta.■ Editar:da la opción de elegir desde donde se puede deshacer, rehacer, copiar, pegar, buscar, etc.SQL Developer interfaz de usuario.■ Navegar: permite moverse entre los marcos de la ventana y para desplazarse por el código que se está editando.■ Ejecutar: permite la ejecución de las sentencias SQL, scripts SQL o bloque PL / SQL en el que se está trabajando.■ Depurar: en lugar de ejecutar un bloque completo de código, permite ejecutarlo paso a paso hiendo línea a línea con puntos de interrupción.■ Opciones: permite seleccionar las fuentes que se utilizarán al escribir código SQL y PL / SQL,así como los caracteres tales como la terminación de palabras clave y sangrado automático.■ Herramientas: permite el enlace a programas externos, como SQL * Plus.

Page 37: curso_sql_certificacion

■ Herramientas de Migración: permite migrar aplicaciones diseñadas para otras bases de datos (Microsoft Access, SQL Server y MySQL) al entorno Oracle.■ Ayuda: Es bastante bueno.

SQL Developer puede ser una herramienta muy útil, y es muy personalizable. Experimente con él, lea la Ayuda, y configurar la interfaz de usuario de la manera que mejor funcione para usted.El SQL Developer puede ser un instrumento muy útil, y es muy personalizable. Experimente

con el, lea la ayuda, y configure la interfaz de usuario de la manera que mejor funcione para usted.

Creación de Conexiones a la Base de Datos La Conexión a la base de datos puede ser creada y guardada para su reutilización. La figura 1-10 muestra la ventana donde las conexiones pueden ser definidas. Para alcanzar esta ventana, haga clic "el +" símbolo visible en la paleta de Conexiones mostrada antes en la Figura 1-9.

El nombre de la conexión es arbitraria. En este ejemplo, el nombre elegido es el nombre del identificador de base de datos de conexión (ORCL) con el sufijo del nombre de usuario (hr) que se integrarán en la conexión.

El nombre de usuario y la contraseña deben ser ambos suministrados, pero sólo el nombre de usuario será guardado a menos que la casilla guardar password sea seleccionada. Guardar una contraseña significa que las futuras conexiones pueden ser hechas sin la petición de ninguna contraseña. Esto es conveniente, pero muy peligroso si hay cualquier posibilidad que el ordenador desde el que usted está trabajando no sea seguro. En efecto, usted delega la autenticación a su sistema operativo local: si usted puede entrar en el sistema, usted puede entrar en el sistema a la base de datos.

FIGURA 1-10

Page 38: curso_sql_certificacion

Figura 1.10:como definir una nueva conexión de base de datos.Asumiendo que usted está utilizando SQL Developer para conectarse a una base de datos Oracle en

lugar de bases de datos de otro fabricante, seleccione la ficha Oracle.La casilla desplegable te da la opción de conectarse como sysdba. Una conexión sysdba es necesaria antes de ciertas operaciones particularmente importates (como el arranque y parada de la base de datos) puedan llevarse a cabo.

Los botones de radio :Tipo de conexión le permiten elegir entre tres opciones:

■ Básico Este pedirá el nombre del equipo del servidor de base de datos, el puerto en el que escucha la base de datos aceptará solicitudes de conexión, y la instancia (SID) o el servicio al que la conexión se realizará■ TNS Si un método de resolución de nombres se ha configurado, un alias de la base de datos se pueden introducir, en lugar de todos los detalles necesarios para la opción Básica.■ Avanzada permite la entrada de una completa cadena de conexión JDBC (Java Database Connectivity). Esta es completamente independiente de Oracle y podría ser utilizada para conectar con cualquier base de datos que se ajusta al estándar JDBC.

La selección básica requiere que el usuario conozca cómo conectarse a la base de datos, la selección TNS requiere alguna configuración que sea hecha en la máquina cliente por el administrador de la base de datos, a fin de que el alias se pueda resolver en los detalles de conexión.

GUIÓN & SOLUCIÓN

Cree los Esquemas de Pruebas A lo largo de este libro, hay cientos de ejemplos de ejecución de código SQL en las tablas de datos. En

su mayor parte, los ejemplos usan tablas que pertenecen dos esquemas de demostración proporcionados por Oracle: el esquema HR, que simula una sencilla aplicación de recursos humanos, y el esquema OE,

Page 39: curso_sql_certificacion

que simula una aplicación de entrada de pedidos más complicados.Estos esquemas se pueden crear cuando se crea la base de datos, es una opción presentada por el Asistente de configuración de base de datos. Si no existen, se pueden crear después mediante la ejecución de algunos scripts que existen en el Oracle Home de la base de datos.

Un esquema de demostración anterior era SCOTT (password TIGER). Este esquema es más simple que el de recursos humanos o el de OE. Muchas personas con una larga experiencia de Oracle prefieren utilizar este esquema, el script de creación del mismo es utlsampl.sql.

Usuarios y Esquemas En primer lugar, dos definiciones. En el lenguaje de Oracle, un usuario de base de datos, es una persona

que puede iniciar sesión en la base de datos. Un esquema de base de datos es todos los objetos en la base de datos de propiedad de un usuario. Los dos términos a menudo se pueden utilizar indistintamente, ya que hay una relación de uno a uno entre los usuarios y esquemas. Tenga en cuenta que un esquema se crea inicialmente vacío, cuando un usuario se crea con el comando CREATE USER.Los esquemas se utilizan para almacenar objetos. Estos pueden ser objetos de datos, tales como tablas u objetos de programación, tales como PL / SQL, los procedimientos almacenados. Los inicios de sesión de usuario se usan para conectarse a la base de datos y tener acceso a estos objetos. De forma predeterminada, los usuarios tienen acceso a los objetos en su propio esquema y no a otros, pero la mayoría de las aplicaciones pueden cambiar esta situación. Por lo general, un esquema puede ser utilizado para el almacenamiento de datos a los que se tiene acceso por otros usuarios los cuales tienen permiso para usar los objetos, a pesar de que ellos no son propietarios. En la práctica, muy pocos usuarios tendrán los objetos en su propio esquema, o permiso para crearlos: tendrán derechos de acceso (que será estrictamente controlado) sólo a los objetos en otro esquema. Estos objetos serán utilizados por todos los usuarios que ejecutan la aplicación cuyos datos almacena el esquema. Por el contrario, los usuarios que poseen los esquemas de almacenamiento de datos no suelen poder iniciar una sesión de base de datos: el único propósito de su esquema es contener los datos utilizados por otros.Es imposible que un objeto de datos de exista de forma independiente de un esquema. O en otras palabras, todas las tablas deben tener un propietario. El propietario es el usuario en cuyo esquema reside la tabla. El identificador único de una tabla (o cualquier otro objeto de esquema) es el nombre de usuario, seguido por el nombre del objeto. De ello se deduce que no es posible que dos tablas con el mismo nombre que existan en el mismo esquema, pero que dos tablas con el mismo nombre (aunque posiblemente diferentes estructuras o contenidos) puedan existir en diferentes esquemas. Si un objeto no existe en el propio esquema, para poder acceder a ella hay que calificar su nombre con el nombre del esquema en el que reside. Por ejemplo, hr.employees es la tabla llamada Employees del esquema del usuario de recursos humanos. Sólo unusuario conectado como HR podría llegar a la tabla haciendo referencia a los EMPLOYEES sin un calificador de nombre de esquema.

Esquemas OE y HR El esquema de pruebas de HR consiste de siete tablas, conectadas por la clave primaria con relaciones de clave foránea. La figura 1-11 ilustra las relaciones entre las tablas, como un diagrama

entidad-relación.

Page 40: curso_sql_certificacion

FIGURA 1-11

Page 41: curso_sql_certificacion

Figura 1.11. Diagrama entidad-relación HR.

Dos de las relaciones mostradas en la figura 1-11 pueden no ser inmediatamente comprensibles. En primer lugar, existe una relación de muchos a uno de los EMPLOYEES a los EMPLOYEES. Esto es lo que se conoce como una clave externa que se referencia a sí misma. Esto significa que muchos EMPLOYEES se pueden conectar a un empleado, y se basa en el hecho de que muchos EMPLOYEES pueden tener un director, pero el director también es un empleado. La relación es implementada por la columna manager_id la cual es una clave externa a employee_id, que es la clave principal de la tabla.La segunda relación que puede requerir explicación es la que se encuentra entre los DEPARTMENTS y EMPLOYEES, la cual es bidireccional. La relación de departamento a varios EMPLOYEES es una relación que indica que puede haber muchos miembros del personal en cada departamento, con base en la columna dept_id de EMPLOYEES la cual es una clave externa a la columna principal dept_id de DEPARTMENTS. El empleado a varios DEPARTMENTS es una relación la cual muestra que un empleado puede ser el director de varios DEPARTMENTS y es implementado por la columna manager_id que es una clave externa en la tabla DEPARTMENTS con la columna employee_id que es clave principal en la tabla EMPLOYEES.

La Tabla 1-1 muestra las columnas de cada tabla en el esquema HR, usando la siguiente notación :para indicar las claves principales (#), claves foráneas (\), y si las columnas son opcionales (o) o obligatorio (*).Comando Columnas

Las tablas son:Tabla 1-1 con las tablas y columnas del schema HR

Tablas ColumnasREGIONS #* region_id

o region_name

COUNTRIES #* country_id

o country_name

\o region_id

LOCATIONS #* location_id

o street_address

o postal_code

* city

o state_province

\o country_id

DEPARTMENTS #* department_id

* department_name

Page 42: curso_sql_certificacion

\o manager_id

\o location_id

EMPLOYEES #* employee_id

o first_name

* last_name

* e-mail

o phone_number

* hire_date

\* job_id

o salary

o commission_pct

\o manager_id

\o department_id

JOBS #* job_id

* job_title

o min_salary

o max_salary

JOB_HISTORY #* employee_id

#* start_date

* end_date

\* job_id

\o department_id

Las tablas son:

■ REGIONS tiene filas de las principales áreas geográficas.■ COUNTRIES tiene una fila por cada país, los cuales están opcionalmente asignados a una región.■ LOCATIONS incluye las direcciones individuales, que están opcionalmente asignados a un país.■ DEPARTMENTS tiene una fila para cada departamento, opcionalmente asignado a una ubicación y, opcionalmente, con un director (que debe existir como un empleado).■ EMPLOYEES tiene una fila para cada empleado, cada uno de los cuales debe ser asignado a un puesto de trabajo y, opcionalmente, a un departamento y con un director. Los directores deben ser ellos mismos EMPLOYEES.■ JOBS lista todos los posibles puestos de trabajo en la organización. Es posible que muchos EMPLOYEES tengan el mismo trabajo.■ JOB_HISTORY enumera los trabajos anteriores realizados por los EMPLOYEES, identifican de forma única por employee_id y start_date, no es posible que un empleado mantenga dos trabajos al mismo tiempo. Cada registro de historial de trabajos se referirá a un empleado, quien ha tenido un trabajo en ese momento y pudo haber sido miembro de un departamento.

Creación de Esquema de pruebas Los esquemas de pruebas opción en el Asistente de Configuración de Base de datos cuando este crea una base de datos. Después de la creación de base de datos, los

Page 43: curso_sql_certificacion

esquemas deberían ser desbloqueados y su activada sus contraseñas; en ausencia las cuentas son bloqueadas, lo que significa que usted no puede entrar en el sistema con ellas. Estos comandos, que podrían ser ejecutados desdee SQL*Plus o SQL Developer, lo permitirán entrar en el sistema como los usuarios HR y OE utilizando las contraseñas HR y OE:

alter user hr account unlock identified by hr;alter user oe account unlock identified by oe;

Estos comandos para modificar un usuario sólo se pueden ejecutar cuando está conectado a una base de datos con un usuario con privilegios de DBA, tales como system.Si los esquemas no fueron creados durante la creación de la base de datos, pueden crearse más tarde por ejecutando scripts existentes en el Oracle Home de la base de datos. Estosscripts deben ser ejecutados desde SQL * Plus o SQL Developer con un usuario con privilegios SYSDBA. La secuencia de comandos le pedirá ciertos valores mientras se ejecuta. Por ejemplo, en Linux, primer lanzamos el SQL * Plus desde una consola de sistema operativo:

sqlplus / as sysdba

Hay varias opciones para esta conexión, pero la sintaxis anterior por lo general funciona si la base de datos se ejecuta en la misma máquina donde se ejecuta SQL * Plus. A continuación, invocar el script desde el prompt SQL>:

SQL> @? / Demo / schema / human_resources / hr_main.sql

El carácter "?" Es una variable que SQL * Plus se expandirá con la ruta de acceso al directorio Oracle Home. La secuencia de comandos le pedirá la contraseña de RRHH, tablespace por defecto, y tablespace temporal, la contraseña SYS, y un destino para un archivo de log de la ejecución del script. Los valores típicos para tablespace por defecto, y tablespace temporal son el de USERS y TEMP, pero éstos tendrán que haber sido creados ya. Después de que finalice, conectarse a la base de datos como el usuario HR. Para verificarlo para ello: ejecute estas sentencias:

SQL> show user;

Usted verá que está conectado actualmente como el usuario HR; entonces ejecutando:

SQL> select table_name form user_tables;

Verá una lista de las siete tablas del esquema de HR. Para crear el esquema OE, siga el mismo proceso,ejecutando el script:

?/demo/schema/order_entry/oe_main.sql

Page 44: curso_sql_certificacion

El proceso para crear los esquemas en Windows es idéntico, excepto por el sentido

de los delimitadores que son en sentido contrario, en Windows se ejecutaría de la

siguiente forma:

? \demo\schema\human_resources\hr_main.sql

RESUMEN DE CERTIFICACIÓN SQL es una lenguaje para el acceso gerente a datos normalizados almacenados en el

relacional bases de datos. No es una lenguaje de desarrollo de aplicaciones, pero es invocado por tales lenguajejes cuando ellos tienen que tener acceso a datos. Las tecnologías de servidor de Oracle proporcionan una plataforma a desarrollar y desplegar tales aplicaciones. La combinación de las tecnologías de servidor de Oracle y SQL causa un entorno que se conforma con el paradigma de base de datos relacional que es una tecnología de habilitación para la Computación grid.

44 Capítulo 1:

Oracle Server Technologies y el Paradigma Relacional

Los numerosos herramientas de cliente pueden ser usados para conectar a una base de datos de Oracle. Dos

a condición de que por Oracle Corporation sean SQL*Plus y Developer SQL: SQL*Plus es instalado como la parte de cada cliente de Oracle y base de datos de Oracle instala, pero el Developer SQL puede ser instalado como un producto separado. Tanto los herramientas pueden ser usados para prepararse para los exámenes OCP, como los estudiantes deberían ser familiares con ambos.

Los esquemas de pruebas almacenan datos de ejemplo que son usados para ilustrar el uso de SQL, y también de instalaciones de desarrollo de Oracle más avanzadas.

Taladradora de dos

minutos

45

✓TALADRADORA DE DOS MINUTOS

Posición Server Technologies ❑ La base de datos de Oracle almacena y maneja el acceso a datos de usuario. ❑ El Servidor

Page 45: curso_sql_certificacion

de Aplicación de Oracle ejecuta aplicaciones que conectan a usuarios al base de datos.

❑ gerente de Empresa de Oracle es un instrumento para bases de datos gerentes, servidores de aplicación,

y, de ser deseado, el entorno de calcular entero. ❑ Lenguajejes incorporadas en la base de datos para el desarrollo de aplicaciones son SQL,

PL/SQL, y Java.

Entienda Estructuras Relacionales ❑ Datos debe ser normalizado en tablas de dos dimensiones. ❑ Tablas son conectados por

claves foráneas y primarias. ❑ diagramas de relación de la Entidad representan las tablas

gráficamente.

Resuma la Lenguaje SQL ❑ Los comandos de DML son ESCOGIDOS, INSERCIÓN, ACTUALIZACIÓN, BORRAR, y

FUSIÓN. ❑ Los comandos de DDL son CREAN, CAMBIAN, DEJAN CAER, RENOMBRAN,

TRUNCAN, y COMENTARIO. ❑ Los comandos de DCL son la SUBVENCIÓN y REVOCAN. ❑ Los

comandos de TCL son DESTINAN, ROLLBACK, y SAVEPOINT.

Use los Herramientas de Cliente ❑ el SQL*Plus es una herramienta de línea de comandos instalada en el Oracle a Casa. ❑ SQL

Developer es un instrumento gráfico instalado en su propio directorio. ❑ Ambos herramientas

requieren una conexión a la base de datos, consistiendo en un nombre de usuario, una contraseña, y un identificador conectar.

Cree los Esquemas de Pruebas ❑ Los esquemas de pruebas son proporcionados por el Oracle para facilitar aprender, pero

debe ser creado antes de que ellos puedan ser usados.

46 Capítulo 1:

Oracle Server Technologies y el Paradigma Relacional

MÍ PRUEBA

Posición Server Technologies

1. Que componentes de ESTO entorno puede el gerente de Empresa de Oracle Grid Control ¿pueda? (Elija la mejor respuesta.) A. Bases de datos de oracle productos de servidores de aplicación de B. Oracle C. Third-party D. Las máquinas de servidor E. Todos los susodichos

2. ¿Qué las lenguajejes pueden ejecutar dentro de la base de datos? (Elija todo que se aplican.) A. SQL B. C C. PL/SQL D. Java E. Cualquier otra lenguaje conectada con las bibliotecas OCI

Page 46: curso_sql_certificacion

Entienda Estructuras Relacionales

3. Los datos que son modelados en una forma conveniente para tratar en una base de datos relacional

pueden ser descrito como siendo (Eligen la mejor respuesta.) A. Forma primero normal B. Third forma normal C. Forma anormal D. Forma paranormal

4. Un diagrama de relación de la entidad muestra datos modelados en (Elija la mejor respuesta.) A. Tablas de dos dimensiones B. Tablas multidimensionales C. Estructuras jerárquicas D. Estructuras orientadas al objeto

Resuma la Lenguaje SQL Mí Prueba

47 5. SQL es una lenguaje orientada al SET. ¿Cuál de estos aspectos es una consecuencia de esto?

(Elija el la mejor respuesta.) A. Las filas individuales deben tener un identificador único. B. Sets de usuarios puede ser manejado en grupos. C. Las select de SQL pueden ser colocadas dentro de bloques del código en otras lenguajejes, como la Java y

PL/SQL. D. Una select puede afectar filas múltiples.

6. ¿Cuál de estas construcciones no es la parte de la lenguaje SQL? (Elija todo que se aplican.) A. Iteración, basada en HACEN.. MIENTRAS B. Iteración, basada en PARA.. DESPUÉS C. Ramifiarse, basado en SI.. ENTONCES.. MÁS D. Control de transacción, basado en DESTINAN E. Control de transacción, basado en ROLLBACK

Use los Herramientas de Cliente

7. ¿Cuáles de estas select en cuanto al Developer SQL es correcta? (Elija dos respuestas.)

A. El Developer de SQL no puede conectar a bases de datos antes que la liberación 10g. B. El

Developer de SQL puede ser instalado fuera de un Oracle a Casa. C. El Developer de SQL

puede almacenar contraseñas. D. El Developer de SQL confía en un directorio LDAP para la

resolución de nombre.

8. ¿Cuáles de lo siguiente es requisitos para usar al Developer SQL? (Elija dos correcto respuestas.) A. Un Entorno de Tiempo de ejecución de Java B. Las bibliotecas OCI C. Un método de resolución de nombre, como LDAP o un TNSNAMES.ORA archiva D. Las bibliotecas SQL*Plus E. Un terminal gráfico

48 Capítulo 1:

Oracle Server Technologies y el Paradigma Relacional

Cree los Esquemas de Pruebas

9. ¿Dónde pueden los esquemas de pruebas ser creados? (Elija la mejor respuesta.)

Page 47: curso_sql_certificacion

A. Los esquemas de pruebas deben ser creados en una base de datos de pruebas. B. Los esquemas

de pruebas no pueden ser creados en una base de datos de producción. C. Los esquemas de

pruebas pueden ser creados en cualquier base de datos. D. Los esquemas de pruebas pueden ser

creados en cualquier base de datos si el usuario de pruebas es creado primero. 10. ¿Cómo puede usted mover un esquema de un usuario al otro? (Elija la

mejor respuesta.) A. Use el comando de ESQUEMA MOVE CAMBIAR. B. Usted no puede mover un esquema de un usuario al otro. C. Un esquema sólo puede ser movido si es vacío (o si todos los objetos dentro de ello han sido dejados caer). D. Adjunte al nuevo usuario al esquema, luego separe al viejo usuario del esquema.

Capítulo 2: Este capítulo explora los conceptos de extracción o recuperación de los datos almacenados en tablas relacionales usando la instrucción SELECT. La sentencia se presentó en su forma básica y progresivamente se irá ampliando la funcionalidad de la misma. A medida que aprende las reglas que rigen esta sentencia, un punto importante a recordar es que la instrucción SELECT nunca altera la información almacenada en la base de datos. En su lugar, se proporciona un método para la extracción de la información en modo de sólo lectura.

Enumerar la capacidad de la Sentencias SQL: SELECT

Saber cómo recuperar datos en un formato fijo utilizando un lenguaje de consulta es el primer paso hacia la comprensión de la capacidad de las sentencia SELECT. Al proporcionar la relación existente entre la teoría de cómo se almacenan los datos en las tablas y la visualización práctica de la estructura de estas tablas. Estos temas forman un precursor importante a la discusión de las capacidades de la instrucción SELECT. Las tres áreas principales exploradas son:

■ Presentación de la sentencia SQL SELECT

■ El comando DESCRIBE TABLE

Page 48: curso_sql_certificacion

■ Capacidades de la sentencia SELECT

La introducción del SQL Select SENTENCIA La instrucción SELECT de Lenguaje de Consulta Estructurado (SQL) tiene que ser la única construcción no hablada de lenguaje que es más potente. La sentencia SELECT es un mecanismo elegante, flexible, extensible, que se ha creado para recuperar información de una tabla de base de datos. Una base de datos serviría de poco si no se pudiera consultar para responder todo tipo de preguntas. Por ejemplo, usted puede tener una base de datos que contiene los registros financieros personales, como sus estados de cuenta bancarios, sus facturas de servicios públicos, y sus nóminas. Desde aquí se puede consultar a la base de datos el obtener una lista actualizada y ordenada de sus facturas de servicios eléctricos durante los últimos seis meses o consultar su estado de cuenta para obtener una lista de los pagos realizados a una cuenta determinada en el mismo período. La mayor funcionalidad de la instrucción SELECT es su encapsulamiento en un simple formato que permite realizar preguntas que se harán a la base de datos de una manera natural.

Las tablas, también conocidas como relaciones, se componen de filas de información divididas por

columnas. Consideremos dos de las tablas de ejemplo presentados en el capítulo anterior: la tabla

EMPLOYEES y la tabla DEPARTMENTS. Este conjunto de datos de la muestra se basa en la

información de recursos humanos (HR) de una organización ficticia. En la terminología Oracle, cada

tabla pertenece a un esquema (propietario): en este caso el esquema HR. La tabla EMPLOYEES

almacena filas o registros de información. Estos contienen varios atributos (columnas) que describen cada

empleado en la organización. La tabla DEPARTMENTS contiene información descriptiva sobre cada

departamento dentro de la organización, almacenado como filas de datos divididas en columnas.

Suponiendo una conexión a una base de datos que contiene el esquema HR muestra está disponible,

utilizando SQL * Plus o SQL Developer puede establecer una sesión de usuario. Una vez conectado a la

base de datos, usted está listo para comenzar su gira de SQL.

El mandato DESCRIBE TABLE

Para obtener las respuestas que uno busca, hay que hacer las preguntas correctas. Una comprensión de los

términos de referencia, que en este caso, son tablas relacionales, es esencial para la formulación de las

preguntas correctas. Una descripción de la estructura de una tabla es útil para establecer qué preguntas se

pueden hacer de la misma. El servidor de Oracle almacena información acerca de todas las tablas en un

conjunto especial de tablas que es el diccionario de datos, Almacena definiciones de objetos de base de

datos en un formato centralizado, ordenado y estructurado.

Page 49: curso_sql_certificacion

Una clara distinción debe hacerse entre almacenar la definición y el contenido de una tabla. La definición

de una tabla incluye información como el nombre de la tabla, propietario de la tabla, los detalles sobre las

columnas que lo componen, y su tamaño físico de almacenamiento en disco. Esta información también se

denomina metadatos. El contenido de una tabla se almacena en filas y se refiere a los datos.

La estructura de metadatos de una tabla puede obtenerse mediante una consulta a la base de datos para el

listado de columnas que la componen utilizando el comando DESCRIBE. La forma general de la sintaxis

de este comando es intuitiva:

DESC [RIBE] <SCHEMA>. Nombretabla

El comando describe puede reducirse a DESC. Todos las tablas pertenecen a un esquema o propietario.

Si usted está describiendo una tabla que pertenece al esquema al que se ha conectado, el <SCHEMA>

parte del comando puede ser omitido. La figura 2-1 muestra cómo la tabla employees se describe desde

SQL * Plus después de conectarse a la base de datos como el usuario HR con el comando DESCRIBE

EMPLOYEES y cómo la tabla DEPARTMENTS

Figura 2.1, descripción de las tablas employees, departments y dual

Page 50: curso_sql_certificacion

es descrita usando el comando corto: DESC HR.DEPARTMENTS. El prefijo HR puede ser omitido ya que la tabla comando de DEPARTAMENTS pertenece al esquema de HR. El esquema de HR (y cualquier otro esquema) tienen acceso a una tabla especial llamada DUAL, que pertenece al esquema SYS. Esta tabla puede ser estructuralmente descrita con el comando: DESCRIBE SYS.DUAL.

La descripción de tablas obtiene resultados interesantes y útiles. Usted sabe qué columnas de una tabla pueden ser seleccionadas ya que sus nombres son mostrados. Usted también sabe la naturaleza de los datos contenidos en estas columnas ya que el tipo de datos de columna es expuesto. Se hablan de tipos de datos de columna detalladamente en el Capítulo 11. Para la discusión corriente, es suficiente considerar las columnas de tipo de datos diferentes explicado en esta sección.

Las columnas numéricas a menudo son especificadas como el NÚMBER (p, s), donde el primer parámetro es la precisión y el segundo es la escala. En la Figura 2-1, la columna de SALARY de la tabla de EMPLOYEES tiene un tipo de datos de: el NÚMBER (8,2). Esto significa que los valores almacenados en esta columna pueden tener como máximo 8 dígitos. De estos 8 dígitos, 2 debe ser a la derecha de la coma decimal. Un valor de SALARY de 999999.99 es aceptable, pero un valor de SALARY de 9999999.9 no lo es, aunque ambos números contengan 8 dígitos.

VARCHAR2 (longitud) las columnas de este tipo de datos almacenan datos de carácter alfanumérico de longitud variable, donde la longitud determina el número máximo de caracteres que una columna puede contener. La columna FIRST_NAME de la tabla EMPLOYEES tiene el tipo de datos VARCHAR2 (20), lo que significa que esta puede almacenar los nombres de los EMPLOYEES de hasta 20 caracteres. Note que si esta columna no contiene ningún datos o su contenido es menor de 20 caracteres, esta no usará el mismo espacio que usaría para almacenar un nombre con 20 carácteres de longitud. El tipo de datos CHAR(size)especifica columnas de longitud fija donde el espacio de fila es preasignado para contener un número fijo de carácteres sin tener en cuenta sus contenido. El CHAR es mucho menos usado que VARCHAR2. A menos que la longitud de los datos sea previsible y constante, el tipo de datos de CHAR utiliza el almacenamiento ineficazmente, rellenando el espacio no usado mediante espacios. Las columnas con tipos de datos DATE y TIMESTAMP almacenan la información de tiempo y la fecha. DATE almacena un momento en el tiempo con precisión incluyendo día, mes, año, horas, minutos, y segundos. El TIMESTAMP (f) almacena la misma información que DATE, pero también es capaz de almacenar segundos fraccionarios.

Una variedad de tipos de datos está disponible para el uso como tipos de datos de columna. Muchos tienen un objetivo especializado como Binary Large Objects (BLOBs), usados para almacenar datos binarios como música o vídeo. La gran mayoría de tablas, sin embargo, usa los tipos de datos de columna primitivos: NÚMBER, VARCHAR2, y DATE.El tipo de datos TIMESTAMP se ha hecho extensamente usado desde su introducción en el Oracle 9i. Familiarizarse e interacctuar con estos tipos de datos le preparan para tratar con una amplia variedad de consulatas relacionadas con la base de datos.

Las columnas obligatorias, que son obligadas a almacenar datos para cada fila, son

Page 51: curso_sql_certificacion

expuestas por la columna de salida "Null?" del comando DESCRIBE que tiene el valor: NOT NULL. Oracle garantiza que cualquier columna de datos que son restringidos por el NOT NULL cuando la tabla es creada debe contener algún dato. Es importante notar que NULL tiene el sentido especial para el servidor de Oracle. NULL se refiere a una ausencia de datos. Los espacios en blanco no cuentan como NULL ya que ellos están presentes en la fila y tienen un poco de longitud aunque ellos no sean visibles.

Ejercicio 2.1EJERZA 2-1 Descripción del Esquema de Recursos humanos

El esquema de HR contiene siete tablas que representan un modelo de datos de un Departamento de recursos humanos ficticio. La tabla de EMPLOYEES, que almacena detalles del personal, y la tabla DEPARTMENTS, que contiene los detalles de los departamentos en la organización, ha sido descrita. En este ejercicio gradual, una conexión es hecha usando al Developer de SQL con el usuario de HR y las cinco tablas de muestra restantes son descritas. Ellos son la tabla de JOBS, que guarda la pista de los tipos de trabajo diferentes disponibles en la organización, y la tabla JOB_HISTORY, que guarda la pista de los detalles de trabajo de empleados que cambiaron trabajo, pero permanecieron en la organización. Para entender el modelo de datos mas adelante, las tablas LOCATIONS, COUNTRIES, y REGIONS, que guardan la pista de la información geográfica que pertenece a DEPARTMENTS en la organización, serán descritas.

1. Inicie el SQL Developer y elija Nuevo del menú de Archivo. Elija conexión de Datos- BASE. Si esta es la primera vez que usted conecta a la base de datos del SQL Developer, se requiere que usted cree una conexión. Proporcione un nombre de conexión descriptivo e introduzca la HR como el nombre de usuario. El resto de detalles de conexión deberían ser obtenidos de su administrador de base de datos. Una vez que la conexión es guardada, elija el botón Conectar.

2. Navegue al editor de SQL, que es la sección titulada introduzca instruccion SQL.3. Escriba el siguiente comando:: DESCRIBE JOBS. La terminación de este comando con un

punto y coma es opcional.

4. Ejecute el comando DESCRIBE, pulsando la tecla F5 o haciendo clic el chasquido en el icono de flecha triangular verde localizado en la barra de herramientas encima del editor de SQL.

5. La descripción de la tabla JOBS aparece en el cuadro d Resultados como se muestra en la figura siguiente.

Page 52: curso_sql_certificacion

6. Los pasos 3 a 5 pueden ser repetidos para describir el resto de tablas JOB_HISTORY , LOCATIONS, COUNTRIES, y REGIONS.

7. El SQL Developer proporciona una alternativa al comando DESCRIBE cuando se quiere la obtención de la información estructural de tablas. 8. Navegue a la tabla LOCATIONS usando al navegante de Árbol localizado en el marco izquierdo debajo del nombre de conexión. 9. El SQL Developer describe la tabla automáticamente en la parte derecha como mostrado en la ilustración siguiente.

Capacidades de la sentencia SELECT

Las tablas de bases de datos relacionales están construidas sobre una sólida base matemática llamada teoría

relacional. En esta teoría, las relaciones o tablas, son manipuladas por un lenguaje formal llamado álgebra

relacional. SQL es una interpretación comercial de las construcciones relacionales algebraicas. Tres

Page 53: curso_sql_certificacion

conceptos de la teoría relacional abarcan la capacidad de la sentencia SELECT: proyección, selección y

unión.

Proyección se refiere a la restricción de atributos (columnas) seleccionados de una relación o tabla. Al

solicitar información de una tabla, puede solicitar el ver todas las columnas. Por ejemplo, en la tabla

HR.DEPARTMENTS, puede recuperar todas las filas y columnas, con una instrucción SELECT simple.

Esta consulta devolverá los datos de DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID y

LOCATION_ID para cada registro de departamento almacenado en la tabla. ¿Y si quisiera un listado que

contenga sólo las columnas DEPARTMENT_NAME y MANAGER_ID? Bueno, consultaría sólo esas dos

columnas de la tabla. Esta restricción de columnas se denomina proyección.

La selección se refiere a la restricción de las tuplas o filas seleccionadas de una relación (tabla). A menudo

no es deseable recuperar todas las filas de una tabla. Las tablas pueden contener muchas filas y, en lugar de

preguntar por todos ellos, la selección proporciona un medio para restringir las filas devueltas. Tal vez se le

ha pedido a identificar sólo a los empleados que pertenecen al departamento 30. Con la selección es

posible limitar el conjunto de resultados a dichas filas de datos que tienen un valor de DEPARTMENT_ID

30.

La unión, como un concepto relacional, se refiere a la interacción de las tablas entre sí en una consulta.

Estas relaciones proporcionan el mecanismo para unir tablas entre sí. La unión se discutirá ampliamente en

Capítulo7.

Suponga que hay una necesidad de recuperar las direcciones de correo electrónico de todos los empleados

que trabajan en el departamento de ventas. La columna EMAIL pertenece a la tabla EMPLOYEES,

mientras que la columna DEPARTMENT_NAME pertenece a la tabla DEPARTMENTS. Proyección y la

selección de la tabla de departamentos pueden utilizarse para obtener el valor DEPARTMENT_ID que

corresponde al departamento de ventas. Las filas coincidentes en la tabla empleados pueden estar unidos a

la tabla DEPARTMENTS basado en este valor DEPARTMENT_ID común. La columna de correo

electrónico, entonces puede ser proyectado de este conjunto de resultados.

La sentencia SQL SELECT se rige matemáticamente por estos tres principios. Una combinación ilimitada

de proyecciones, selecciones, y uniones proporciona el lenguaje para extraer los datos relacionales

necesarios.

Ejecute una Select SENTENCIA Básica

Las capacidades prácticas de la instrucción SELECT se realizan en su ejecución. La clave para la ejecución de cualquier sentencia de lenguaje de consulta es un conocimiento profundo de su sintaxis y las reglas que rigen su uso. Este tema se trata en primer lugar. Será seguido por una discusión de la ejecución de una consulta de básica antes de usar expresiones y operadores, que aumentan exponencialmente la utilidad de los datos almacenados en las tablas relacionales. A continuación, el concepto de un valor nulo se desmitifica, y sus trampas son expuestas. Estos temas se tratarán en las siguientes cuatro secciones:

Page 54: curso_sql_certificacion

■ La sintaxis de la instrucción SELECT básica■ Las reglas están para ser seguidas■ SQL expresiones y operadores■ NULL no es nada

Sintaxis de la declaración SELECT Básica

En su forma más primitiva, la instrucción SELECT apoya la proyección de columnas y la creación de expresiones aritméticas, de carácter, y de fecha. También facilita la eliminación de los valores duplicados del conjunto de resultados. La sintaxis básica instrucción SELECT es la siguiente:SELECT * | {columna [DISTINCT] | expresión [alias], ...} FROM table;Las palabras clave especiales o palabras reservadas de la sintaxis de la sentencia SELECT aparecen en mayúsculas. Al utilizar los comandos, sin embargo, el uso en mayúsculas o minñusculas de las palabras reservadas en la sentencia de consulta no importa. Las palabras reservadas no se pueden utilizar como nombres de columna u otros nombres de objetos de bases de datos. SELECT ,DISTINCT, y FROM son tres elementos clave. Una instrucción SELECT está siempre provista de dos o más cláusulas.Las dos cláusulas obligatorias son la cláusula SELECT y la cláusula FROM. La barra vertical | se utiliza para denotar OR. Así que usted puede leer la primera forma de la declaración anterior SELECT como:SELECT * FROM tabla;En este formato, el símbolo de asterisco (*) se utiliza para designar a todas las columnas. SELECT *es una manera sucinta de pedir al servidor de Oracle que devuelva todas las columnas posibles. Se utiliza el símbolo como un atajo que ahorra tiempo en lugar de escribir SELECT column1, column2, column3, columna4, ..., ColumnX, para seleccionar todas las columnas. La cláusula FROM especifica qué tabla se consultará para buscar las columnas solicitadas en la cláusula SELECT.Puede ejecutar el siguiente comando SQL para recuperar todas las columnas y todas las filas de la tabla de regiones en el esquema HR:

SELECT * FROM regions;

Como se muestra en la Figura 2-2, cuando se ejecuta este comando en SQL * Plus, devuelve todas las filas de datos y todas las columnas que pertenecen a esta tabla. El uso del asterisco en una instrucción SELECT se refiere a veces como un consulta "ciega" porque las columnas exactas que se deben buscar no se especifican.La segunda forma de la instrucción SELECT básica tiene la misma cláusula FROM como la primera forma, pero la cláusula SELECT es diferente:

{SELECT columna [DISTINCT] | expresión [alias], ...} FROM tabla;

Esta cláusula SELECT se puede simplificar en dos formatos:SELECT column1 (posiblemente otras columnas o expresiones) [alias opcional] OSELECT DISTINCT col1 (posiblemente otras columnas o expresiones) [alias opcional]

FIGURA 2-2

Page 55: curso_sql_certificacion

Figura 2.2 proyección de todas las columnas de la tabla REGIONS.

Un alias es un nombre alternativo para hacer referencia a una columna o una

expresión. Los alias se utilizan típicamente para la visualización de salida en una forma

fácil de utilizar. También sirven como una forma abreviada de referirse a columnas o

expresiones para escribir menos. Los alias se discutirán en detalle más adelante en este

capítulo. Al enumerar explícitamente sólo las columnas correspondientes en la cláusula

SELECT que, en efecto, proyectan el subconjunto exacto de los resultados que desea

recuperar. La declaración siguiente devolverá sólo la columna REGION_NAME de la

tabla de regiones como se muestra en la Figura 2-2:

SELECT REGION_NAME

FROM REGIONS;

Se le puede consultar que devuelva todas las funciones de los puestos de la

organización que los empleados han ocupado. Para ello se puede ejecutar el comando:

SELECT * FROM JOB_HISTORY. Sin embargo, la sentencia SELECT * devuelve

además las columnas EMPLOYEE_ID, START_DATE, y END_DATE. El conjunto de

r resultados que contiene sólo las columnas job_id y DEPARTMENT_ID se puede

obtener con la sentencia ejecutada en SQL * Plus, que se muestra en la Figura 2-3.

Page 56: curso_sql_certificacion

Figura 2.3 proyección de la tabla JOB_HISTORY

El uso de la palabra clave DISTINCT permite eliminar las filas duplicadas del

conjunto de resultados. En numerosas situaciones se requiere un único conjunto de filas

único. Es importante

Observar que el criterio empleado por el servidor Oracle para determinar si una a fila

es única o distinta depende completamente de lo que es especificado después de la

palabra clave DISTINCT en la cláusula SELECT. Seleccionar los valores de JOB_ID

distintos de la tabla de HISTORIA JOB_ devolverá los ocho distintos tipos de trabajo

como se muestra en la Figura 2-4.

Page 57: curso_sql_certificacion

Figura 2.4. Distintos JOB_ID de la tabla JOB_HISTORY.Compárese esta salida con la Figura 2-3, donde diez filas son devueltas. ¿Puede usted ver que hay dos

ocurrencias de los valores AC_ACCOUNT y ST_CLERK JOB_ID? Éstas son las dos filas duplicadas que han sido eliminadas buscando valores de JOB_ID distintos. Si seleccionamos los distintos valores de la columna DEPARTMENT_ID en la tabla JOB_ HISTORY devuelve sólo seis filas, como la Figura 2-5 muestra. Los valores de DEPARTMENT_ ID 50, 80, 90, y 110 tienen dos ocurrencias en la comando JOB_HISTORY, y por ello cuatro filas han sido eliminadas buscando los diferentes valores de DEPARTMENT_ID.

Un aspecto importante de la palabra clave DISTINCT es la eliminación de valores duplicados en combinaciones de columnas. Hay diez filas en la tabla JOB_HISTORY. Ocho filas contienen valores de JOB_ID distintos. Seis filas contienen valores de DEPARTMENT_ID distintos. ¿Puede usted adivinar cuántas filas contienen combinaciones distintas de valores de DEPARTMENT_ID y JOB_ID? La figura 2-6 nos muestra,

FIGURA 2-4

FIGURA 2-5

ISTORY

Page 58: curso_sql_certificacion

Figura 2.6 Combinaciones de JOB_ID y DEPARTMENT_ID únicos en la tabla JOB_HISTORY

Que hay nueve filas devueltas en el conjunto de resultados que contienen combinaciones diferentes de JOB_ID y DEPARTMENT_ID, vemos que una fila de la Figura 2-3 es eliminado. Esta es, por supuesto, la fila que contiene un valor JOB_ID de ST_CLERK y un valor DEPARTMENT_ID de 50.

Reglas Se suponen para ser Seguidas SQL es una lenguaje bastante estricta en términos de reglas de sintaxis, pero permanece

simple y bastante flexible para apoyar una variedad de programar estilos. Esta sección habla de algunas reglas básicas que gobiernan select de SQL.

La mayúscula o la Minúscula es un asunto del gusto personal sobre el instancia en el cual las select SQL son presentadas a la base de datos. Los ejemplos usados hasta ahora han sido escritos en la mayúscula. Muchos developeres, incluso los autores de este libro, prefieren escribir sus select SQL en la minúscula. También hay un error común que SQL reservó la necesidad de palabras

Ejecute una Select SENTENCIA Básica

65

ser especificado en mayúscula. Otra vez, esto es hasta usted. La adhesión a un formato consecuente y estandarizado es aconsejada. Las tres select siguientes son sintácticamente equivalentes:

SELECCIONE * DE LOCATIONS; Escogido * de LOCATIONS; seleccione * de LOCATIONS;

Hay una advertencia en cuanto a la sensibilidad de instancia. Relacionándose con

literal valores, el instancia realmente importa. Considere la columna JOB_ID de la comando JOB_HISTORY. Esta columna contiene filas de datos que resultan ser almacenados en la base de datos en la mayúscula; por ejemplo, SA_REP y ST_CLERK. Solicitando que el SET de resultados ser restringido por una columna literal, el instancia sea crítico. El servidor de Oracle

trata la petición de todas las filas en la comando JOB_HISTORY que contienen un valor de St_Clerk en la columna JOB_ID diferentemente

Las select de SQL pueden de ST_CLERK en columna JOB_ID. sea presentado a la base de datos en tampoco Metadata sobre la base de datos diferente objeta la minúscula o la mayúscula. Usted debe pagar es almacenado en ausencia en la mayúscula en los datos atención cuidadosa al instancia relacionándose diccionario. Si usted pregunta un diccionario

Page 59: curso_sql_certificacion

de base de datos con el carácter datos literales y aliases. comando para devolver una lista de tablas poseídas por la Petición de una columna llamada JOB_ID o Esquema de HORA, es probable que los nombres de tabla job_id devuelvan la misma columna, pero devuelto son almacenados en la mayúscula. Esto hace la petición de filas donde los JOB_ID valoran no significan que una comando no puede ser creada con es el PRESIDENTE es diferente de preguntar un nombre minúsculo; puede ser. Son sólo más filas donde el valor de JOB_ID es el presidente. común y el comportamiento por defecto del Carácter de Oracle los datos literales siempre deberían ser el servidor para crear y almacenar tablas, columnas, y trató en una manera sensible al instancia.

otro objeto de base de datos metadata en mayúscula en el diccionario de base de datos.

Select Terminators de la petición de todas las filas que tienen un valor

Los puntos y coma son generalmente usados como la select de SQL terminators. SQL*Plus siempre requiere una select terminator, y por lo general un punto y coma es usado. Una select SQL sola o hasta los grupos de select asociadas a menudo son guardados ya que la escritura archiva para el futuro uso. Las select individuales en escrituras SQL son comúnmente terminadas por una ruptura de línea (o retorno) y una cuchillada avanzada en la siguiente línea, en vez de un punto y coma. Usted puede crear una select SENTENCIA, terminarlo con una ruptura de línea, incluir una cuchillada avanzada para ejecutar la select, y guardarlo en un archivo de escritura. El archivo de escritura puede ser llamado entonces desde dentro SQL*Plus. Note que el Developer SQL hace

66 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

no requieren una select terminator si sólo una select sola está presente, pero no se opondrá si uno es usado. Es la práctica buena para terminar siempre sus select SQL con un punto y coma. Varios ejemplos de select SQL*Plus siguen:

seleccione country_name, country_id, location_id de COUNTRIES; ciudad sentencia, location_id,

Page 60: curso_sql_certificacion

state_province, country_id de LOCATIONS /

El primer ejemplo del código demuestra dos reglas importantes. En primer lugar, la select es terminado por un punto y coma. En segundo lugar, la select entera es escrita en una línea. Es completamente aceptable para una select SQL ser escrito en una línea o atravesar líneas múltiples mientras ningunas palabras en la select atraviesan líneas múltiples. La segunda muestra del código demuestra una select que atraviesa tres líneas que es terminado por una nueva línea y ejecutado con una cuchillada avanzada.

La sangría, la Legibilidad, y la Práctica Buena Consideran la pregunta siguiente:

Una técnica común empleado por algunos diseñadores de pregunta de examen prueba la atención al detalle. Un signo de puntuación ausente solo como un punto y coma puede hacer la diferencia entre una respuesta correcta y uno incorrecto. La ortografía incorrecta del objeto llama la atención al detalle de prueba adicional. Pueden pedirle elegir la select correcta que pregunta la comando de REGIONS. Una de las opciones puede parecer correcta, pero se refiere a la comando de REGIÓN. Este error de ortografía puede llevar a una select incorrecta elegida.

ciudad sentencia, location_id, state_province, country_id de LOCATIONS /

Este ejemplo resalta las ventajas de sangrar su select SQL para realzar la legibilidad de su código. El servidor de Oracle no se opone si la select entera es escrita en una línea sin la sangría. Es la práctica buena para separar cláusulas diferentes de la select SENTENCIA en líneas diferentes. Cuando una expresión en una cláusula es particularmente compleja, a menudo es mejor separar aquel término de la select en una nueva línea. Desarrollando SQL para encontrar sus necesidades de obteniendo, el proceso

a menudo es iterativo. El intérprete SQL es mucho más útil durante el desarrollo si las expresiones complejas son aisladas en líneas separadas, ya que los errores son por lo general lanzados al formato de: "ERROR en línea X:" Esto hace el proceso de depuración mucho más simple.

Ejecute una Select SENTENCIA Básica

67

GUIÓN & SOLUCIÓN Usted quiere construir y ejecutar preguntas contra tablas almacenadas en una base de datos de Oracle. ¿Es encajonado usted a la utilización de SQL*Plus o Developer SQL? No. El oracle proporciona SQL*Plus y Developer SQL como herramientas libres para crear y ejecutar preguntas. Hay numerosos herramientas disponibles del Oracle (por ejemplo, Descubridor, Formas, y JDeveloper) y otro tercero - vendedores que proporcionan un interface a las tablas almacenadas en una base de datos de Oracle. Para explorar su entorno de base de datos adelante, le gustaría una lista de tablas, poseídas por su esquema corriente, disponible para usted preguntar. ¿Cómo interroga usted el diccionario de base de datos para proporcionar este metadata? El diccionario de datos es un SET de tablas y las vistas de las otras tablas que pueden ser preguntadas vía SQL. La select TABLE_NAME escogido de TABLAS USER_; pregunta el diccionario de base de datos para una lista de nombres de tabla que pertenecen al usuario corriente. ¿Preguntando la comando de JOBS para cada fila que contiene sólo el JOB_ID y columnas MAX_SALARY, es una proyección, selección, o juntura realizada? Una proyección es realizada ya que las columnas en la comando de JOBS han sido restringidas al JOB_ID y

Page 61: curso_sql_certificacion

columnas MAX_SALARY.

EJERCICIO 2-2 Contestando a Nuestras Primeras Preguntas con SQL En este ejercicio gradual, una conexión es hecha usando SQL*Plus como el usuario de

HORA a conteste a dos preguntas usando la select SENTENCIA.

Pregunta 1: en Cuántos los DEPARTMENTS únicos tienen EMPLOYEES que actualmente trabajan ¿ellos?

1. Comience SQL*Plus y conecte al esquema de HORA. 2. Usted puede ser al principio tentado encontrar la respuesta en los DEPARTMENTS

comando. Un estudio cuidadoso revela que la pregunta pide la información sobre EMPLOYEES. Esta información está contenida en la comando de EMPLOYEES.

3. La palabra "única" debería dirigirle para usar la palabra clave DISTINTA.

68 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

4. Combinando los pasos 2 y 3, usted puede construir la select SQL siguiente:

seleccione department_id distinto de EMPLOYEES;

5. Como mostrado en la ilustración siguiente, esta pregunta devuelve 12 filas. Note esto la tercera fila es vacía. Esto es un valor nulo en la columna DEPARTMENT_ID.

6. La respuesta a la primera pregunta es por lo tanto: Once DEPARTMENTS únicos tienen

los EMPLOYEES que trabajan en ellos, pero al menos un empleado no han sido adjudicados a un departamento.

Pregunta 2: ¿Cuántos COUNTRIES están allí en la región de Europa?

Page 62: curso_sql_certificacion

1. Esta pregunta comprende dos partes. Considere la comando de REGIONS, que contiene cuatro REGIONS cada uno únicamente identificado por un valor de REGION_ID, y la comando de COUNTRIES, que tiene una columna REGION_ID que indica a que la región un país pertenece.

2. La primera pregunta tiene que identificar el REGION_ID de la región de Europa. Esto

es llevado a cabo por la select SQL:

seleccione * de REGIONS;

3. La ilustración siguiente muestra que la región de Europa tiene un REGION_ID valor de 1:

Ejecute una Select SENTENCIA Básica

69

4. Para identificarse que los COUNTRIES tienen 1 como su REGION_ID, usted necesita a ex - ecute la pregunta de SQL siguiente

seleccione region_id, country_name de COUNTRIES;

5. A mano contando las filas de país con un REGION_ID de 1 en el siguiente la ilustración ayuda a contestar a la segunda pregunta:

Page 63: curso_sql_certificacion

6. La respuesta a la segunda pregunta es por lo tanto: hay ocho COUNTRIES en la región de Europa por lo que el modelo de datos de HORA está referido.

70 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

Expresiones de SQL y Operadores La forma general de la select SENTENCIA introdujo la noción esto columnas y las expresiones son seleccionables. Una expresión es por lo general arreglada de una operación realizada en uno o varios valores de columna. Los operadores que pueden seguir valores de columna para formar una expresión dependen del tipo de datos de la columna. Ellos son los cuatro operadores aritméticos cardinales (adición, substracción, multiplicación, y división) para columnas numéricas; el operador de encadenamiento para carácter o columnas de cuerda; y la adición y operadores de substracción para fecha y columnas timestamp. Como en la aritmética regular, hay un pedido predefinido de la evaluación (precedencia de operador) cuando más de un operador ocurre en una expresión. Los soportes redondos tienen la precedencia más alta. La división y las operaciones de multiplicación son siguientes en la jerarquía y son evaluadas antes de adición y substracción, que tienen la precedencia más baja. Estos niveles de precedencia son mostrados en la Tabla 2-1.

Las operaciones con el mismo nivel de la precedencia son evaluadas de la izquierda a la derecha. Los soportes redondos pueden ser por lo tanto usados para hacer cumplir la precedencia de operador no por defecto. La utilización de soportes generosamente cuando la construcción de expresiones complejas es la práctica buena y es animada. Esto lleva al código legible que es menos propenso al error. Las expresiones abren un gran número de posibilidades de manipulación de datos útiles.

Los Operadores aritméticos Consideran el ejemplo de la comando JOB_HISTORY, que almacena la fecha de inicio y la fecha de finalización del término de un empleado en un papel de trabajo anterior. Puede ser útil con objetivos de pensión o impuesto, por ejemplo, de contar cuanto un empleado trabajó en aquel papel. Esta información puede ser obtenida usando una expresión aritmética. Hay unos elementos interesantes tanto de la select SQL como de los resultados devueltos de la Figura 2-7 aquella autorización discusión adicional.

Cinco elementos han sido especificados en la cláusula SENTENCIA. Los primeros cuatro son columnas regulares de la comando JOB_HISTORY a saber: EMPLOYEE_ID, JOB_ID, FECHA de START_, y END_DATE. Los dos términos últimos proporcionan la información de la fuente requerida calcular el número de días que un empleado llenó una posición particular. Considere que el empleado número 176 en la novena fila de salida. Este empleado comenzó como unas Ventas

TABLA 2-1 Nivel de precedencia Símbolo de operador

Page 64: curso_sql_certificacion

Operación

Precedencia Más alto

Soportes o paréntesis

de Aritmética Medio

División

Operadores Medio

Multiplicación

Más bajo Substracción

Más bajo Adición

Ejecute una Select SENTENCIA Básica

71

LA FIGURA 2-7 La expresión aritmética para calcular el número de días trabajó

Page 65: curso_sql_certificacion

Gerente el 1 de enero de 1999 y empleo terminado el 31 de diciembre de 1999. Por lo tanto, este empleado trabajó durante exactamente un año, que, en 1999, consistió en 365 días.

El número de días durante los cuales un empleado fue empleado puede ser calculado usando el quinto elemento en la cláusula SENTENCIA, que es una expresión. Esta expresión demuestra que la aritmética realizada en columnas que contienen la información de fecha devuelve valores numéricos que representan un cierto número de días.

Para hacer cumplir la precedencia de operador de la operación de substracción, la subexpresión end_date-start_date es encerrada en soportes redondos. Un día fue añadido para compensar la pérdida aritmética de un día que proviene de la operación de substracción. Suliste que un empleado comenzó el trabajo el 1 de enero y salió más tarde ese día. Un día debe ser añadido a la fórmula, por otra parte la subexpresión end_date-start_date volvería incorrectamente los días cero trabajaron.

72 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

Una fórmula hipotética para predecir la probabilidad de un meteorito se ducha en a la región geográfica particular ha sido ideada. Las dos expresiones puestas en una lista en la Figura 2-8 son idénticas excepto la expresión de % de Probabilidad de Ducha de Meteorito. Sin embargo, como los resultados en la comando siguiente demuestran, un cálculo diferente está siendo hecho por cada expresión. Note que las dos expresiones se diferencian muy ligeramente. La expresión 2 tiene un par de paréntesis al mismo final, encerrando (10 5). Considere como las expresiones son evaluadas para la región de Asia donde REGION_ID es 3 como mostrado en la comando siguiente:

Paso

1. 2.

3.

4.

Page 66: curso_sql_certificacion

5.

6.

Expresión 1

region_id * 10052010 5

Substituya region_id con el valor: 3 * 10052010 5 Los operadores con la precedencia más alta son la dos división y operadores de multiplicación. Éstos deben ser evaluados primero. Si más de un operador con el mismo nivel de la precedencia está presente en una expresión, entonces éstos serán evaluados de la izquierda a la derecha. Por lo tanto, la primera subexpresión para ser evaluada es: 3*100: 300 52010 5 La siguiente subexpresión para ser evaluada es: 300/5:

602010 5 La siguiente subexpresión para ser evaluada es: 20/10: 60 2 5 Los operadores restantes son una adición y un operador de substracción que comparten el mismo nivel de la precedencia. Éstos serán por lo tanto evaluados de la izquierda a la derecha. La siguiente subexpresión para ser evaluada es: 60+2: 62 557

Expresión 2

region_id * 100520(10 5)

Substituya region_id con el valor: 3 * 100520(10 5) El operador con la precedencia más alta es el par de paréntesis y éstos deben ser evaluados primero. Por lo tanto, la primera subexpresión para ser evaluada es: (10 5):

Los 3*1005205 Los siguientes operadores en la expresión con la precedencia más alta son la dos división y operadores de multiplicación. Si más de un operador con el mismo nivel de la precedencia está presente en una expresión, entonces éstos serán evaluados de la izquierda a la derecha. Por lo tanto, la siguiente subexpresión para ser evaluada es: 3*100: 3005205

La siguiente subexpresión para ser evaluada es: 3005: 60205 La siguiente subexpresión para ser evaluada es: 205:

60464

Ejecute una Select SENTENCIA Básica

73

LA FIGURA 2-8 Uso del encadenamiento y operadores aritméticos

Page 67: curso_sql_certificacion

Las expresiones ofrecen posibilidades interminables y son una de las construcciones fundamentales en select SENTENCIAS. Como usted practica SQL en su entorno de base de datos de prueba, usted puede encontrar dos errores de Oracle infames: "ORA-00923: DE palabra clave no encontrada donde esperado" y "ORA-00942: la comando o la vista no existen".Else son indicativos de ortografía o errores de puntuación, como la ausencia de citas de inclusión alrededor de literales de carácter. No sea perturbado por estos mensajes. Recuerde, usted no puede causar daño a la base de datos si todo que usted hace selecciona datos. Es una operación sólo para leer y el peor que usted puede hacer es ejecutan una pregunta de nonperformant.

74 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

La expresión y Column Aliasing Figure 2-7 introdujeron un nuevo concepto llamado la columna aliasing. Note como la columna de expresión tiene un título significativo llamado Días EMPLOYEES. Este título es un alias. Un alias es un nombre alterno para una columna o una expresión. Si esta expresión no hiciera el uso de un alias, el título de columna sería: (FECHA-START_DATE de END_) +1, que es poco atractivo y no muy descriptivo. Los aliases son sobre todo útiles con expresiones o cálculos y pueden

Page 68: curso_sql_certificacion

ser puestos en práctica de varios modos. Hay unas reglas que gobiernan el uso de aliases de columna en select SENTENCIAS. En la Figura 2-7, el alias dado para la expresión deliberada llamada "Días EMPLOYEES" fue especificado dejando un espacio y escribiendo el alias en dobles comillas. Estas comillas son necesarias por dos motivos. En primer lugar, este alias es arreglado de más de una palabra. En segundo lugar, la preservación de instancia de un alias sólo es posible si el alias es doble citado. Ya que la Figura 2-9 muestra, "ORA-00923: DE

LA FIGURA 2-9 Uso de columna y aliases de expresión

Ejecute una Select SENTENCIA Básica

75

la palabra clave no encontrada donde esperado" error es devuelta cuando un alias multiredactado no es doble citado.

El error ORA-00923 no es al azar generado por el servidor. El intérprete de Oracle trata de tratar la select y encuentra un problema con ella. Como esto trata esta select particular, esto encuentra un problema con la línea 2. Un símbolo de asterisco es insertado en el punto de partida del problema: la palabra Empleada. La línea 2 fue tratada y la expresión era aliased con la palabra Días. El espacio después de Días indica al intérprete de Oracle que, ya que no hay ninguna coma adicional para indicar otro término que pertenece a la cláusula SENTENCIA, es completo. Por lo tanto, esto espera encontrar el DE la cláusula después. En cambio esto encuentra la palabra Empleada y cede este error. Los mensajes de error del servidor de Oracle son informativos y usted debería leerlos con cuidado para resolver problemas. Este error es evitado encerrando un alias que contiene un espacio u otros carácteres especiales, tal como # y $, en dobles comillas como mostrado alrededor del alias "Días EMPLOYEES" en la Figura 2-7.

El segundo ejemplo en la Figura 2-9 ilustra otra característica interesante de la columna aliasing. Han prescindido otra vez de dobles comillas y un carácter subrayar es substituido por el espacio entre las palabras para evitar un error devuelto. El intérprete de Oracle trata la select, no encuentra ningún problema, y la ejecuta. Note que aunque el alias fuera especificado como Date_ Empleado, con sólo las cartas de título del alias capitalizado, el título de expresión fue devuelto como DATE_EMPLOYED: todas las cartas fueron automáticamente convertidas a la mayúscula. Así, para conservar el instancia del alias, debe ser encerrado en dobles comillas.

Los aliases encontrados hasta ahora han sido especificados dejando un espacio después de una columna o expresión e insertando el alias. SQL ofrece un modo más formalizado de insertar aliases. El YA QUE la palabra clave es insertada entre la columna o expresión y el alias. La figura 2-10 ilustra el uso variado de los tipos diferentes de columna aliasing. Tanto el EMPLOYEE_ID como las columnas JOB_ID son aliased utilización el COMO la palabra clave, mientras los "Días" expresión Empleada son aliased utilización de un espacio. El YA QUE la palabra clave es opcional ya que también es posible usar un espacio antes de especificar un alias, como hablado antes. El uso del COMO la palabra clave realmente mejora, sin embargo, la legibilidad de select SQL, y los autores creen que es SQL bueno codificación del hábito de formarse.

El carácter y el Operador de Encadenamiento de Cuerda Los dobles símbolos de tubo || representan al operador de encadenamiento de carácter. Este operador es usado para afiliarse a expresiones de carácter o columnas juntos para crear una expresión de carácter más grande. Las columnas de una comando pueden ser conectadas el uno con el otro o con series de carácteres literales para crear una expresión de carácter consiguiente.

76 Capítulo 2:

Page 69: curso_sql_certificacion

Extracción de datos Usando el SQL Select SENTENCIA

FIGURA 2-10

Uso del COMO palabra clave para especificar aliases de columna

La figura 2-8 muestra que el operador de encadenamiento es bastante flexible para ser usado tiempos múltiples y casi en todas partes en una expresión de carácter. Aquí, el carácter literal ser concadenado a los contenido de datos de la columna REGION_NAME. Esta nueva serie de carácteres es concadenada adelante al carácter la "región literal está en el Planeta tierra," y la expresión entera es aliased con la columna amistosa que encabeza "la Posición Planetaria." Note como cada fila en el SET de resultados es construida por la aplicación sistemática de la expresión a cada valor de fila de la comando.

Considere la primera fila de datos de la "Posición Planetaria" columna de expresión. Esto devuelve "La región de Europa está en el Planeta tierra." Una oración legible por las filas de datos ha sido creada concadenando series literales de carácteres y espacios al uno o el otro lado del valor de columna REGION_NAME de cada fila. La columna REGION_ID ha sido aliased para mostrar que las columnas regulares así como las expresiones pueden ser aliased. Adelante, los títulos de columna son en ausencia mostrados en la mayúscula, pero pueden ser anulados usando un alias como "región Id." Los tipos de datos de las columnas preguntadas determinan como SQL*Plus y el Developer SQL presente sus datos por defecto salida. Si el tipo de datos es numérico entonces los datos de columna son formateados para ser correctos alineado. Si el tipo de datos es el carácter o la fecha, entonces los datos de columna son formateados para ser dejados alineados.

Literales y la Comando DUAL Ejecute una Select SENTENCIA Básica

77

Page 70: curso_sql_certificacion

Los valores literales en expresiones son un acontecimiento común. Estos valores se refieren a numérico, carácter, o fecha y valores de tiempo encontrados en cláusulas SENTENCIAS que no provienen de ningún objeto de base de datos. La concatenación de literales de carácter a datos de columna existentes puede ser útil, como introducido en la Figura 2-8. ¿Y el procesamiento de literales que no tienen nada que ver con datos de columna existentes? Para asegurar el consecuencia relacional, el Oracle ofrece una solución inteligente del problema de usar la base de datos para evaluar expresiones que no tienen nada que ver con ninguna comando o columnas. Para conseguir que la base de datos evalúe una expresión, una select SENTENCIA sintácticamente legal debe ser presentada. ¿Y si usted quisiera saber la suma de dos números o dos literales numéricos? Estas preguntas sólo pueden ser contestadas relacionándose con la base de datos en una manera relacional. El oracle soluciona el problema de la interacción relacional con la base de datos que actúa sobre expresiones literales ofreciendo una comando especial llamada DUAL. Recuerde la comando DUAL descrita en la Figura 2-1. Esto contiene una columna llamada el SIMULADOR del tipo de datos de carácter. Usted puede ejecutar la pregunta: SELECCIONE * DEL DUAL, y el valor de datos "X" es devuelto como los contenido de la columna FALSA. La comando DUAL permite que expresiones literales sean seleccionadas de ello para el procesamiento y vuelve la expresión causa su fila sola. Es excepcionalmente útil ya que esto habilita una variedad de solicitudes de procesamiento diferentes para ser hechas de la base de datos. Usted puede querer saber cuantos segundos allí son en un año. La figura 2-11 demuestra una expresión aritmética ejecutada contra la comando DUAL. Las pruebas de expresiones complejas durante el desarrollo, preguntando la comando dual, son un método eficaz de evaluar si estas expresiones trabajan correctamente. Las expresiones literales pueden ser preguntadas de cualquier comando, pero recordar que la expresión será tratada para cada fila en la comando.

seleccione 'literal' || 'tratando la utilización de la comando de REGIONS' de REGIONS;

La select precedente devolverá cuatro líneas en el SET de resultados, ya que hay cuatro filas de datos en la comando de REGIONS.

Dos Citas Solas o el Operador de Cotización Alternativo Las cadenas de caracteres literales concadenadas hasta ahora han sido palabras singulares prepended y han añadido a expresiones de columna. Estos literales de carácter son especificados usando comillas solas. Por ejemplo:

seleccione 'Soy un carácter cuerda literal'

78 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

LA FIGURA 2-11 Utilización de la comando DUAL

Page 71: curso_sql_certificacion

¿Y los literales de carácter que contienen comillas solas? Plurals plantean un problema particular para el carácter procesamiento literal. Considere la select siguiente:

escogido 'Plural tiene una cotización demasiado' del dual;

Como el ejemplo en la Figura 2-12 muestra, ejecutando esta select causa un ORA- 00923 error de Oracle para ser generado. Esto podría parecer a un error raro, pero después del examen más cercano, el intérprete de Oracle con éxito trata la select SENTENCIA hasta la posición 16, en cual punto esto espera "un DE" la cláusula. La posición 1 para colocar 16 es:

seleccione 'a Plural

Ejecute una Select SENTENCIA Básica

79

FIGURA 2-12

Error tratando con literales con citas implícitas

El servidor de Oracle trata este segmento para significar que el carácter literal 'Plural' es aliased como la columna "s". A este punto, el intérprete espera "un DE" la cláusula, pero en cambio encuentra que la palabra "tiene". Esto entonces genera un error.

¿De este modo, cómo son palabras que contienen comillas solas tratadas con? Hay esencialmente dos mecanismos disponibles. El más popular de éstos debe añadir una comilla sola adicional al lado de cada comilla sola que ocurre naturalmente en la cadena de caracteres. La figura 2-13 demuestra como el error anterior es evitado reemplazando el carácter 'Plural literal con el literal 'Plural'' s.

El segundo ejemplo en la Figura 2-13 muestra que la utilización de dos citas solas para manejarse cada cotización sola que ocurre naturalmente en un carácter literal

Page 72: curso_sql_certificacion

puede hacerse sucia y susceptible de errores como el número de aumentos de literales afectados. El oracle ofrece una manera comandoada de tratar con este tipo del carácter literal en la forma de la cotización alternativa (q) el operador. Note que el problema consiste en que el Oracle eligió los carácteres de cotización solos como el par especial de símbolos que encierran o envuelven cualquier otro carácter literal. Estos símbolos que encierran el carácter podrían haber sido algo además de comillas solas.

Teniendo en cuenta esto, considere la cotización alternativa (q) operador. El operador q le habilita para elegir de un SET de pares posibles de símbolos envolventes para literales de carácter como alternativas a los símbolos de cotización solos. Las opciones son cualquier byte solo

80 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

LA FIGURA 2-13 Uso de dos citas solas con literales con citas implícitas

o carácter de multibyte o los cuatro soportes: (soportes redondos), {tirantes rizados}, [corchetes], o <corchetes angulares>. Usando al operador q, el carácter delimiter puede ser con eficacia cambiado de una comilla sola a cualquier otro carácter, como mostrado en la Figura 2-14.

La sintaxis del operador de cotización alternativo es como sigue: el

Page 73: curso_sql_certificacion

q'delimiter'character literal que puede incluir las citas solas delimiter' donde delimiter puede ser cualquier carácter o soporte. Los primeros y segundos ejemplos en la Figura 2-14 muestran el uso de corchetes angulares y corchetes como el carácter delimiters, mientras el tercer ejemplo demuestra como una mayúscula "X" ha sido usada como el carácter especial delimiter símbolo por el operador de cotización alternativo.

Ejecute una Select SENTENCIA Básica

81

LA FIGURA 2-14 La cotización alterna (q) operador

NULO no Es Nada El concepto de un valor nulo fue introducido en la discusión más temprana del comando DESCRIBIR. Tanto el cero de número como un espacio en blanco son diferentes del nulo ya que ellos ocupan el espacio. Nulo se refiere a una ausencia de datos. Una fila que contiene un valor nulo carece de datos de aquella columna. Nulo es formalmente definido como un valor que es no disponible, no adjudicado, desconocido, o inaplicable. En otras palabras, las reglas de contratación con valores nulos necesitan el estudio cuidadoso. El frainstancia de prestar atención al tratamiento especial que los valores nulos requieren llevará casi seguramente a un error, o peor, una respuesta inexacta.

Los valores nulos pueden ser un concepto complicado para venir a apretones con. El

Page 74: curso_sql_certificacion

problema proviene de la ausencia de nulo en una línea numérica. No es un valor verdadero, tangible que puede estar relacionado con el mundo físico. Nulo es un placeholder en una columna no obligatoria hasta

82 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

DENTRO DEL EXAMEN

Hay dos objetivos de certificación en este capítulo. Las capacidades de la select SENTENCIA introducen los tres conceptos teóricos fundamentales de proyección, selección, y conexión. Los ejemplos prácticos que ilustran la selección incluyen la construcción de la cláusula SENTENCIA y la utilización de la palabra clave DISTINTA para limitar las filas volvió. La proyección es demostrada en ejemplos donde las columnas y las expresiones son restringidas para la recuperación. Segundo objec-tive de ejecutar una select SQL mide su entendimiento de la forma básica de la select SENTENCIA. El examen mide dos aspectos. En primer lugar, la sintaxis es medida: se requiere que usted manche errores de sintaxis. Los errores de sintaxis de SQL son levantados cuando el intérprete de Oracle no entiende una select. Estos errores

podría tomar la forma de select que fallan terminators, como un punto y coma ausente, no encerrando literales de carácter en operadores de cotización apropiados, o las select que hacen el uso del inválido reservaron palabras.

En segundo lugar, el sentido de una select es mea-sured. Usted será presentado un syntacti-cally select legítima y pedido elegir entre descrip-exacto e inexacto tions de aquella select. El examen mide el conocimiento alrededor de los objetivos de certificación usar preguntas de formato selectas múltiples. Su entendimiento de columna aliasing, aritmética y operadores de encadenamiento, carácter cotización literal, el operador de cotización alternativo, sintaxis de select de SQL, y tipos de datos de columna básicos será probado.

algunos verdaderos datos son almacenados en su lugar. Hasta entonces, precávase de conducir la aritmética con columnas nulas.

Esta sección se concentra en relacionarse con datos de columna nulos con la afirmación SENTENCIA y su impacto a expresiones.

No las Tablas de Columnas Nulas y Nullable almacenan filas de datos que están divididos en una o varias columnas. Estas columnas tienen nombres y tipos de datos asociados con ellos. Algunos de ellos son obligados por reglas de base de datos de ser columnas obligatorias. Es obligatorio para algunos datos ser almacenado en el NO columnas NULAS en cada fila. Cuando las columnas de una comando, sin embargo, no son obligadas por las coacciones de base de datos a sostener datos para una fila, estas columnas ejecutan el riesgo de ser vacías.

En la Figura 2-15, la comando de EMPLOYEES es descrita, y unas columnas son

Page 75: curso_sql_certificacion

seleccionadas de ella. Hay cinco NO columnas NULAS y seis columnas NULLABLE. Nullable es un término a veces solía describir una columna que es permitida almacenar valores nulos. Una de las columnas nullable es la columna COMMISSION_PCT.

Ejecute una Select SENTENCIA Básica

83

LA FIGURA 2-15 Valores nulos en la columna Commission_Pct

La figura 2-15 muestra las dos primeras filas de datos de la comando de EMPLOYEES. Esto es suficiente para ilustrar que ambos estos archivos de empleado tienen valores nulos en sus columnas COMMISSION_PCT.

El Developer de SQL hace simple observar valores nulos en columnas, como mostrado en la Figura 2-16. Aquí, la palabra (nula) es salida cuando se encuentra un valor nulo, como con la columna COMMISSION_PCT. El Developer de SQL apoya la personalización de esta descripción por defecto de datos de columna nulos.

La columna aliased como "Aritmética Nula" es una expresión arreglada de COMMISSION_PCT + EMPLOYEE_ID + 10. En vez de devolver un valor numérico, esta columna vueltas nulas. Hay una razón importante de esto:

Cualquier cálculo aritmético con un valor NULO siempre vuelve NULO.

84 Capítulo 2:

Page 76: curso_sql_certificacion

Extracción de datos Usando el SQL Select SENTENCIA

LA FIGURA 2-16 La aritmética nula siempre devuelve un valor nulo.

El oracle ofrece un mecanismo para relacionarse aritméticamente con valores NULOS usando las funciones generales habladas en el Capítulo 5. Como la expresión de columna aliased como "División por el Nulo" ilustra, hasta la división por un valor nulo resulta en el nulo, a diferencia de la división por el cero, que causa un error. Finalmente, note el impacto de la palabra clave nula cuando usado con el operador de encadenamiento de carácter. Nulo es concadenado entre el FIRST_NAME y columnas LAST_NAME, aún no tiene ningún impacto. Los operadores de encadenamiento de carácter no hacen instancia nulo, mientras las operaciones aritméticas que implican valores nulos siempre resultan en el nulo.

Ejecute una Select SENTENCIA Básica

85

Las Claves foráneas y el diseño de modelo de Datos de Columnas Nullable a veces llevan a situaciones problemáticas cuando las tablas están relacionadas el uno con el otro vía una relación de clave foránea y primaria, pero la

Page 77: curso_sql_certificacion

columna en la cual la clave foránea está basada es nullable. La comando de DEPARTMENTS tiene, como su clave primaria, la columna

DEPARTMENT_ID. La comando de EMPLOYEES tiene una columna DEPARTMENT_ID que es reprimida por su relación de clave foránea a la columna DEPARTMENT_ID en la comando de DEPARTMENTS. Esto significa que ningún registro en la comando de EMPLOYEES es permitido tener en su columna DEPARTMENT_ID un valor que no está en la comando de DEPARTMENTS. Esta integridad de referencia forma la base para la tercera forma normal y es crítica a la integridad de base de datos total.

¿Pero y valores NULOS? ¿Puede la columna DEPARTMENT_ID en la comando de DEPARTMENTS contener nulls? La respuesta es no. El oracle insiste que cualquier columna que sea una clave primaria es implícitamente reprimida a ser obligatoria. ¿Pero y coacciones implícitas en columnas de clave foránea? Esto es un dilema para el Oracle, desde a fin de permanecer flexible y satisfacer el auditorio más amplio, no puede insistir que las columnas relacionadas a través de coacciones de integridad de referencia debieran ser obligatorias. Adelante, no todas las situaciones exigen esta funcionalidad.

GUIÓN & SOLUCIÓN Usted construye una expresión aritmética que calcula la renta imponible basada en SUELDO de un empleado y columnas COMMISSION_PCT, ambos de las cuales son nullable. ¿Es posible convertir los valores nulos en la una o la otra columna al cero para devolver siempre una renta imponible numérica? Sí, pero no con la información usted ha cubierto hasta ahora. Los valores nulos requieren manejarse especial. En el Capítulo 5, hablamos de la función de NVL, que proporciona un mecanismo para convertir valores nulos en valores de datos más aritméticos y amistosos. Un alias proporciona un mecanismo para renombrar una columna o una expresión. ¿Bajo qué condiciones debería usted encerrar un alias en dobles citas? Si un alias contiene más de una palabra o si el instancia de un alias debe ser conservado, entonces debería ser encerrado en dobles comillas. El frainstancia de doblar la cotización un alias multiredactado levantará un error de Oracle. El frainstancia de doblar la cotización un alias de palabra única causará el alias devuelto en la mayúscula. ¿Trabajando con el carácter valores literales que incluyen comillas solas, cómo debería usted especificar estos literales en la cláusula SENTENCIA sin levantar un error? Hay dos mecanismos disponibles. Más acercamiento común debe reemplazar cada cotización sola que ocurre naturalmente con dos citas solas. El otro enfoque debe hacer el uso del operador de cotización alterno para especificar a un par alterno de carácteres con los cuales encerrar literales de carácter.

86 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

La columna DEPARTMENT_ID en la comando de EMPLOYEES es realmente nullable. Por lo tanto, el riesgo existe que hay archivos con valores de DEPARTMENT_ID nulos presentes en esta comando. De hecho, hay tales archivos en la comando de EMPLOYEES. El modelo de datos de HORA permite a EMPLOYEES, correctamente o no, no para pertenecer a ningún departamento. Realizando junturas relacionales entre tablas, es completamente posible perder o excluir ciertos archivos que contienen nulls en la columna de juntura. El capítulo 7 explora modos de tratar con este desafío.

Page 78: curso_sql_certificacion

EJERZA 2-3 Experimentación con Expresiones y la Comando DUAL En este ejercicio gradual una conexión es hecha usando al Developer de SQL como la

HORA usuario. Use expresiones y operadores para contestar a tres preguntas relacionadas con la select SENTENCIA: Pregunta 1: se demostró antes como el número de días durante los cuales los EMPLOYEES fueron EMPLOYEES en un trabajo podría ser calculado. ¿Para cuántos años fueron EMPLOYEES los EMPLOYEES realizando estos papeles de trabajo y cual eran sus EMPLOYEE_ID, JOB_ID, START_DATE, y valores de END_DATE? Alias la columna de expresión en su pregunta con los Años de alias EMPLOYEES. Suliste que un año consista en 365.25 días.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La proyección de columnas requeridas incluye EMPLOYEE_ID, JOB_ID,

START_DATE, END_DATE, y una expresión llamada Años EMPLOYEES de la comando JOB_HISTORY.

3. La expresión puede ser calculada dividiéndose un más la diferencia entre END_DATE y START_DATE antes de 365.25 días, como mostrado después:

seleccione employee_id, job_id, start_date, end_date, ((end_date-start_date) + 1)/365.25 "Años EMPLOYEES" de job_history;

4. La ejecución de la select SENTENCIA precedente cede los resultados mostrados en

la ilustración siguiente: Ejecute una Select SENTENCIA Básica

87

Page 79: curso_sql_certificacion

Pregunta 2: Pregunte la comando de JOBS y devuelva una expresión sola de la forma El Trabajo que Id para el trabajo <job_title's> es: <job_id>. Tome la nota que el job_title debería tener un apóstrofe y un "s" añadido a ello para leer más naturalmente. Una muestra de esto salida para el presidente de organización es: "El Trabajo Id para el trabajo presidencial es: AD_PRES." Alias esta expresión de columna como "Descripción del trabajo" usando el COMO palabra clave.

1. Hay soluciones múltiples de este problema. El enfoque elegido aquí es manejarse las comillas solas que ocurren naturalmente con una cotización sola adicional.

2. Una expresión sola aliased como la Descripción del trabajo se requiere y puede ser la estafa - structed disecando el requisito en el literal "El Trabajo Id para" ser concadenado a la columna JOB_TITLE. Esta cuerda es entonces concat-enated al literal "'s el trabajo es:" que es concadenado adelante a la columna JOB_ID. Una comilla sola adicional es añadida para ceder la select SENTENCIA que sigue:

seleccione 'El Trabajo que Id para el ' || job_title || '''s trabajo es:' || job_id COMO "Descripción del trabajo" de JOBS;

88 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

3. Los resultados de esta pregunta de SQL son mostrados en la ilustración siguiente:

Pregunta 3: Utilización de la comando DUAL, calcule el área de un círculo con el radio 6000 unidades, con la pi que es aproximadamente 22/7. Use la fórmula: área = pi × radio × radio. Alias el resultado como "área".

1. El funcionamiento con la comando DUAL puede parecer al principio curioso. Usted se acostumbra a

Page 80: curso_sql_certificacion

como su funcionalidad se hace más aparente. Esta pregunta implica escogido - ing una expresión aritmética literal de la comando DUAL para ceder una fila sola respuesta calculada que no está basada en los valores de columna en ninguna comando.

2. La expresión puede ser calculada usando la select SQL siguiente; notar el uso de soportes para precedencia.

escogido (22/7) * (6000 * 6000) área de dual

3. Los resultados devolvieron el espectáculo el área aproximada del círculo como 113142857.14

unidades cuadradas.

RESUMEN DE CERTIFICACIÓN Resumen de certificación

89

La construcción de select SENTENCIA forma la base para la mayoría de interacciones esto ocurre con una base de datos de Oracle. Estas interacciones pueden tomar la forma de preguntas publicadas del Developer SQL o SQL*Plus o cualquier número del Oracle y otro tercero - herramientas de cliente. En su corazón, estos herramientas traducen peticiones de la información en select SENTENCIAS, que son ejecutadas entonces por la base de datos.

La estructura de una comando ha sido descrita. Las filas de datos han sido recuperadas y el formato orientado al SET de los resultados fue revelado. Los resultados fueron refinados por la proyección. En otras palabras, sus preguntas sólo pueden incluir las columnas usted está interesado en recuperar y excluye las columnas restantes en una comando.

Las reglas de sintaxis SENTENCIAS son básicas y flexibles, y los errores de lenguaje deberían ser raros debido a su gramática Parecida a un inglesa. La terminación de select usando puntos y coma, respeto al carácter sensibilidad del instancia literal, y conciencia de valores nulos debería asistir con la evitación de errores.

Las expresiones exponen una vista de posibilidades de manipulación de datos por la interacción de aritmética y operadores de carácter con columna o datos literales, o una combinación de los dos.

La forma general de la select SENTENCIA fue explorada y la fundación para la extensión de esta select fue construida.

El Mí los ejercicios de Prueba son arreglados de dos componentes. El primer componente consiste de preguntas que le dan una idea sobre lo que pueden preguntarle durante el examen. El segundo componente le habilita para practicar el conocimiento de la lenguaje hablado en este capítulo en un formato de laboratorio. Hablan de las soluciones de ambas categorías de preguntas detalladamente en la sección de soluciones.

90 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

Page 81: curso_sql_certificacion

✓TALADRADORA DE DOS MINUTOS

Liste las Capacidades en una lista de SQL Select SENTENCIAS ❑ Las tres operaciones fundamentales que SELECCIONAN select son capaces de

son la proyección, la selección, y la conexión. ❑ Proyección se refiere a la restricción de columnas seleccionadas de una comando.

Utilización proyección, usted sólo recupera las columnas del interés y no cada columna posible.

❑ Selección se refiere a la extracción de filas de una comando. La selección incluye el restricción adicional de las filas extraídas basadas en varios criterios o condi-tions. Esto permite que usted sólo recupere las filas que son del interés y no cada fila en la comando.

❑ Conexión implica conectar dos o más tablas basadas en atributos comunes. La conexión permite que datos sean almacenados en la tercera forma normal en tablas distintas, en - lugar de en una comando grande.

❑ Una combinación ilimitada de proyecciones, las selecciones, y las junturas proveen el lenguaje para extraer los datos relacionales requeridos.

❑ Una definición estructural de una comando puede ser obtenido usando DESCRIBIR comando.

❑ Columnas en tablas almacenan tipos diferentes de datos usando varios tipos de datos, lo más común de que son NÚMERO, VARCHAR2, FECHA, y TIMESTAMP.

❑ El NÚMERO de tipo de datos (x, y) implica que la información numérica almacenó en esto la columna puede tener en la mayor parte de dígitos x, pero al menos y de estos dígitos debe aparecer a la derecha de la coma decimal.

❑ El comando DESCRIBIR pone en una lista los nombres, tipos de datos, y estado nullable de todas las columnas en una comando.

❑ columnas Obligatorias también son mandados a como NO columnas NULAS

Ejecute una Select SENTENCIA Básica ❑ La sintaxis de la cláusula SENTENCIA primitiva es como sigue:

SELECCIONE * | {column|expression [distinto] [alias], } ❑ La select SENTENCIA también es referido como una pregunta SENTENCIA y comprende

al menos dos cláusulas, a saber la cláusula SENTENCIA y el DE cláusula. Taladradora de dos minutos

91

❑ La cláusula SENTENCIA determina la proyección de columnas. En otras palabras, el

Page 82: curso_sql_certificacion

La cláusula SENTENCIA especifica qué columnas son incluidas en los resultados devueltos. ❑ El asterisco (*) el operador es usado como un símbolo de comodín para indicar todas las columnas.

De este modo, la select SENTENCIA * DE CUENTAS devuelve todas las columnas disponibles en la comando de CUENTAS.

❑ el DE la cláusula especifica la comando de la fuente o tablas de las cuales los artículos son seleccionado. ❑ Los artículos de preceder de palabra clave DISTINTOS en las causas de cláusula

SENTENCIAS combinaciones duplicadas de estos artículos para ser excluidos del SET de resultados devuelto.

❑ SQL select debería ser terminado con un punto y coma. Como una alternativa, una nueva línea puede ser añadida después de que una select y una cuchillada avanzada pueden ser usadas para ejecutar la select.

❑ SQL select puede ser escrito y ejecutado en minúscula o mayúscula. Estar cuidadoso relacionándose con literales de carácter ya que éstos son sensibles al instancia. ❑

operadores Aritméticos y el operador de encadenamiento de cuerda que afecta a Cnel - el umn y los datos literales forman la base de expresiones SQL. el � Expresiones y columnas regulares

puede ser aliased utilización el COMO la palabra clave o por la salida de un espacio entre la columna o expresión y el alias. ❑ Si un alias contiene palabras

múltiples o el instancia del alias es importante, esto debe ser encerrado en dobles comillas. ❑ Naturalmente ocurrir las citas solas en un carácter literal

pueden ser seleccionadas por la fabricación de uso de una cotización sola adicional por cotización que ocurre naturalmente o del operador de cotización alternativo.

❑ La comando DUAL es una columna sola y comando de fila sola que a menudo está acostumbrada evalúe expresiones que no se refieren a columnas específicas o tablas. ❑ Columnas que no son

gobernadas por un NO la coacción NULA tiene el el potencial para almacenar valores nulos y es a veces mandado a como nullable columnas. ❑ valores

NULOS no son el mismo como un espacio en blanco o cero. Los valores NULOS se refieren a una ausencia de datos. Nulo es definido como un valor que es no disponible, no adjudicado, desconocido, o inaplicable.

❑ Precaución debe ser ejercido trabajando con valores nulos desde la aritmética con un valor nulo siempre cede un resultado nulo.

92 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

MÍ PRUEBA Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

La prueba siguiente es típica de las preguntas y el formato del OCP 11g examen del tema "Recuperar Datos usando el SQL Select SENTENCIA." Estas preguntas a menudo hacen el uso del esquema de Recursos humanos.

Liste las Capacidades en una lista de SQL Select SENTENCIAS

1. Qué pregunta crea una proyección del DEPARTMENT_NAME y LOCATION_ID

Page 83: curso_sql_certificacion

¿columnas de la comando de DEPARTMENTS? (Elija la mejor respuesta.) A. SELECCIONE DEPARTMENT_NAME distinto, LOCATION_ID

DE DEPARTMENTS; B. SELECCIONE DEPARTMENT_NAME, LOCATION_ID

DE DEPARTMENTS; C. SELECCIONE DEPT_NAME, LOC_ID

DE DEPARTAMENTO; D. SELECCIONE DEPARTMENT_NAME COMO "LOCATION_ID"

DE DEPARTMENTS; 2. Después de describir la comando de EMPLOYEES, usted descubre que la columna de SUELDO

tiene unos datos tipo del NÚMERO (8,2). ¿Qué valor (es) de SUELDO no será permitido en esta columna? (Elija todo que se aplican.) A. SALARY=12345678 B. SALARY=123456.78 C. SALARY=12345.678 D. SALARY=123456 E. SALARY=12.34

3. Después de describir la comando JOB_HISTORY, usted descubre que el START_DATE y END_ Las columnas de FECHA tienen un tipo de datos de FECHA. Considere la expresión FECHA de END_DATE-START_. (Elija dos select correctas.) A. Un valor del tipo de datos de FECHA es devuelto. B. Un valor del NÚMERO de tipo es devuelto. C. Un valor del tipo VARCHAR2 es devuelto.

Mí Prueba

93

D. La expresión es inválida ya que la aritmética no puede ser realizada en columnas con la FECHA

tipos de datos. E. La expresión representa los días entre el END_DATE y START_DATE menos un

día. 4. La comando de DEPARTMENTS contiene una columna DEPARTMENT_NAME con el tipo de

datos VARCHAR2 (30). (Elija dos select verdaderas sobre esta columna.) A. Esta columna puede almacenar datos de carácter hasta un máximo de 30 carácteres. B. Esta columna debe almacenar datos de carácter que son al menos 30 carácteres mucho tiempo. C. El tipo de datos VARCHAR2 es reemplazado por el tipo de datos de TRABAJO POR HORAS. D. Esta columna puede almacenar datos en una columna con el tipo de datos VARCHAR2 (50) a condición de que el

los contenido son como máximo 30 carácteres mucho tiempo.

Ejecute una Select SENTENCIA Básica

5. ¿Qué select informa sobre valores de JOB_ID únicos de la comando de EMPLOYEES? (Elija

todos esto se aplica.) A. SELECCIONE JOB_ID DE EMPLOYEES; B. SELECCIONE JOB_ID único DE EMPLOYEES; C. SELECCIONE JOB_ID distinto, EMPLOYEE_ID DE EMPLOYEES; D. SELECCIONE JOB_ID distinto DE EMPLOYEES;

6. Elija las dos select ilegales. Las dos select correctas producen resultados idénticos. El dos select ilegales harán que un error sea levantado: A. SELECCIONE DEPARTMENT_ID || 'representa el ' ||

DEPARTMENT_NAME ||' Departamento' como "Información de Departamento" DE DEPARTMENTS;

B. SELECCIONE DEPARTMENT_ID || 'representa el ||

Page 84: curso_sql_certificacion

DEPARTMENT_NAME ||' Departamento' como "Información de Departamento" DE DEPARTMENTS;

C. seleccione department_id || 'representa el ' || department_name || 'Departamento' "Información de Departamento" de DEPARTMENTS;

D. DEPARTMENT_ID escogido representa el Departamento DEPARTMENT_NAME como "Información de departamento" DE DEPARTMENTS;

94 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

7. ¿Qué expresiones no devuelven valores NULOS? (Elija todo que se aplican.)

A. escogido ((10 + 20) * 50) + nulo de dual; B. escogido 'esto es un ' || nulo || 'prueba con nulls'

del dual; C. escogido nulo/0 de dual; D. seleccionan nulo || 'prueba' || nulo como "la Prueba" del

dual;

8. Elija la sintaxis correcta para devolver todas las columnas y las filas de los datos de la comando de

EMPLOYEES.

A. seleccione todos de EMPLOYEES; B. seleccionan employee_id, first_name, last_name,

first_name, department_id

de EMPLOYEES; C. seleccionan el % de EMPLOYEES; D. seleccionan * de

EMPLOYEES; E. seleccionan *.* de EMPLOYEES;

9. El carácter siguiente expresión literal es seleccionado de la comando DUAL:

SELECCIONE 'la Coda '' s el juguete de esfuerzo favorito es su anillo naranja' del DUAL; (Elija el

resultado que es devuelto.) A. Un error sería devuelto debido a la presencia del dos juguete de

esfuerzo de favorito de B. Coda de citas adyacente es su anillo naranja C. Coda '' s juguete de

esfuerzo favorito es su anillo naranja D. 'Coda '' s juguete de esfuerzo favorito es su anillo naranja'

10. Hay cuatro filas de datos en la comando de REGIONS. Considere la select SQL siguiente:

SELECCIONE '6 * 6' "área" DE REGIONS; ¿Cuántas filas de resultados son devueltas y que valor es

devuelto por la columna de área? (Elija la mejor respuesta.) A. 1 fila volvió, la columna de área

contiene el valor 36 B. 4 filas volvieron, la columna de área contiene el valor 36 para 4 fila de filas

C. 1 devuelta, la columna de área contiene el valor 6 * 6 D. 4 filas volvieron, la columna de área

contiene el valor 6 * 6 para 4 filas E. Un error de sintaxis es devuelto.

PREGUNTA DE LABORATORIO En este capítulo usted trabajó por ejemplos en el esquema de Recursos humanos. El oracle proporciona a número de esquemas de ejemplo para usted para experimentar con y aprender conceptos diferentes de. Para los ejercicios prácticos, usted usará la Entrada de Pedido, u OE, esquema. Las soluciones para estos ejercicios

Pregunta de laboratorio

95

será provisto utilización posterior al Developer de SQL. Usando al Developer de SQL o SQL*Plus,

Page 85: curso_sql_certificacion

conecte al esquema OE y complete las tareas siguientes.

1. Obtenga la información estructural para el PRODUCT_INFORMATION y PIDE tablas. 2. Seleccione los valores de SALES_REP_ID únicos de la comando de PEDIDOS. Cuántos diferente

¿los representantes de ventas han sido adjudicados a pedidos en la comando de PEDIDOS? 3. Cree un SET de resultados basado en la comando de PEDIDOS que incluye el ORDER_ID,

ORDER_ FECHA, y columnas ORDER_TOTAL. Note como los ORDER_DATE salida es formateado diferentemente del START_DATE y columnas END_DATE en la comando de HORA JOB_ID.

4. La comando PRODUCT_INFORMATION almacena datos en cuanto a los productos disponibles para la venta

en un ficticio ESTO ferretería. Produzca un SET de resultados que serán útiles para un vendedor. Información de producto de extracto en el formato <PRODUCT_NAME> con código: <PRODUCT_ ID> tiene el estado de: <PRODUCT_STATUS>. Alias la expresión como "producto". Los resultados deberían proporcionar el LIST_PRICE, el MIN_PRICE, la diferencia entre LIST_PRICE, y MIN_PRICE aliased como "Ahorros de Max Actual," junto con una expresión adicional que toma la diferencia entre LIST_PRICE y MIN_PRICE y se divide esto por el PRECIO LIST_ y luego multiplica el total por 100. Esta última expresión debería ser aliased como "% de Max Discount."

5. Calcule la área de superficie de la Tierra usando la comando DUAL. Alias esta expresión como "El área de la tierra." La fórmula para calcular el área de una esfera es: 4r2. Suliste, para este ejemplo, que la tierra sea una esfera simple con un radio de 3,958.759 millas y que es 22/7.

96 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

MÍ PRUEBAN RESPUESTAS

Liste las Capacidades en una lista de SQL Select SENTENCIAS

1. ® B. Una proyección es una restricción intencional de las columnas devueltas de una

comando. ✓® A es eliminado ya que la pregunta no tiene nada que ver con duplicados, peculiaridad, ˚o unicidad de datos. C incorrectamente selecciona columnas inexistentes llamadas DEPT_NAME y LOC_ID de una comando inexistente llamada el departamento. El D devuelve sólo una de las columnas solicitadas: DEPARTMENT_NAME. En vez de proyectar además la columna LOCATION_ID de la comando de DEPARTMENTS, esto intenta al alias la columna DEPARTMENT_NAME como LOCATION_ID.

2. el ® A y C. Columns con el tipo de datos NÚMERO (8,2) puede almacenar, como máximo, ocho dígitos; de que, ✓

como máximo, dos de aquellos dígitos son a la derecha de la coma decimal. Aunque A y C sean

las respuestas correctas, noten que ya que la pregunta es expresada negativamente, estos valores

no son permitidos ser almacenados en tal columna. A no es permitido porque contiene ocho dígitos

de número entero, pero el tipo de datos es reprimido a almacenar seis dígitos de número entero y

dos dígitos fraccionarios. El C no es permitido ya que tiene tres dígitos fraccionarios y el tipo de

datos permite un máximo de dos dígitos fraccionarios.

Page 86: curso_sql_certificacion

Los ® B, D, y E pueden ser legítimamente almacenados en este tipo de datos y, por lo tanto, son ˚ incorrectorespuestas a esta pregunta. El D muestra que los números sin la parte fraccionaria son valores legítimos para esta columna, mientras el número de dígitos en la parte de número entero no excede seis dígitos.

3. ® B y E. El resultado de aritmética entre dos valores de fecha representa un cierto número de días. ✓Los ® A, C, y D son incorrectos. Es un error común para esperar el resultado de aritmética ˚entre dos valores de fecha para ser una fecha también, entonces A puede parecer plausible, pero es falso.

4. ® A y D. La escala del tipo de datos VARCHAR2, especificado entre paréntesis, determina su ✓

capacidad máxima para almacenar datos de carácter como mencionado por A. Si un valor de datos

que es como máximo 30 carácteres mucho tiempo es almacenado en cualquier tipo de datos,

también puede ser almacenado en esta columna como declarado por D. ® el B es incorrecto porque es posible almacenar datos de carácter de cualquier longitud hasta 30 carácteres ˚en esta columna. El C es falso, ya que el tipo de datos de TRABAJO POR HORAS existe en la paralela con el tipo de datos VARCHAR2.

Ejecute una Select SENTENCIA Básica 5. ® D. Los valores de JOB_ID únicos son proyectados de la comando de EMPLOYEES aplicando el ✓

Palabra clave DISTINTA a sólo la columna JOB_ID. Los ® A, B, y C son eliminados desde Unas vueltas una lista sin restricción de valores de JOB_ID incluso ˚duplicados; el B hace el uso de la palabra clave ÚNICA en el contexto incorrecto; y C selecciona el

Mí Respuestas de Prueba

97

combinación distinta de JOB_ID y valores de EMPLOYEE_ID. Esto tiene el efecto de devolver todas las filas de la comando de EMPLOYEES ya que la columna EMPLOYEE_ID contiene valores únicos para cada registro de empleado. Además, el C devuelve dos columnas, que no es lo que fue al principio solicitado.

6. los ® B y D representan las dos select ilegales que devolverán errores de sintaxis si ellos son ✓

ejecutado. Esto es una pregunta complicada porque esto pide las select ilegales y no las select

legales. El B es ilegal porque falla una cotización sola que encierra el carácter literal "representa

el." D es ilegal porque esto no hace el uso de citas solas para encerrar sus literales de carácter. Los ® A y C son las select legales y, por lo tanto, en el contexto de la pregunta, son el ˚respuestas incorrectas. A y C parecen ser diferentes ya que el instancia de las select SQL es diferente y Unos usos la palabra clave de alias COMO, mientras que C sólo deja un espacio entre la expresión y el alias. Aún tanto A como C producen resultados idénticos.

7. los ® B y D no devuelven valores nulos ya que las expresiones de carácter no son afectadas en mismo ✓

camino por valores nulos como expresiones aritméticas. Los B y D no hacen instancia de la

presencia de valores nulos en sus expresiones y devuelven los literales de carácter restantes.

Page 87: curso_sql_certificacion

Los ® A y C devuelven valores nulos porque cualquier expresión aritmética que implique una voluntad nula ˚devuelva un nulo.

8. ® D. Un asterisco es el operador SQL que implica que todas las columnas deben ser seleccionadas de un ✓

comando. Los ® A, B, C, y E son incorrectos. Unos usos TODA la palabra reservada pero pierden cualquier columna ˚la especificación y generará, por lo tanto, un error. El B selecciona algunas columnas, pero no todas las columnas y, por lo tanto, no contesta a la pregunta. Los C y E hacen el uso de operadores de selección ilegales.

9. ® B. La llave a la identificación del resultado correcto está en el entendimiento del papel de ✓ solo

comillas. El literal entero es encerrado por un par de citas para evitar la generación de un error. Las

dos citas adyacentes son necesarias para delimitar la cotización sola que aparece en el literal B. Los ® A, C, y D son incorrectos. A es eliminado ya que ningún error es devuelto. C inexactamente devuelve ˚dos citas adyacentes en la expresión literal y D vuelven un literal con todas las citas todavía presentan. El servidor de Oracle borra las citas usadas como el carácter delimiters después de tratar el literal.

10. ® D. La expresión literal '6 * 6' es seleccionada una vez para cada fila de datos en las REGIONS ✓

comando. Los ® A, B, C, y E son incorrectos. Unas vueltas una fila en vez de cuatro y calculan el producto ˚6 * 6. Los operadores de cotización de inclusión ejecutan 6 * 6 un carácter literal y no un literal numérico que puede ser calculado. B correctamente devuelve cuatro filas, pero incorrectamente evalúa el carácter literal como un literal numérico. C incorrectamente devuelve una fila en vez de cuatro y E es incorrecto, porque la select SQL dada puede ser ejecutada.

98 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

RESPUESTA DE LABORATORIO La asunción es hecha esto una base de datos de Oracle está disponible para usted para practicar con. La

base de datos el administrador (DBA) en su organización puede asistirle con instalarse y establecerse esto. Para cualquier instrumento de cliente, como SQL*Plus o Developer SQL para conectar a la base de datos, un proceso de oyente debería ejecutarse y la base de datos debe ser abierta. Además, usted debería solicitar que la HORA y las cuentas de esquema OE sean abiertas y que las contraseñas ser reinicializadas. Si estos esquemas de muestra no están presentes, es un asunto simple para conseguir que el DBA ejecute las escrituras, que son instaladas cuando la base de datos es instalada, para crearlos. Conecte al esquema OE usando SQL*Plus o Developer SQL.

1. El comando DESCRIBIR nos da la descripción estructural de una comando. El siguiente la ilustración muestra estas dos tablas descritas:

Respuesta de laboratorio

Page 88: curso_sql_certificacion

99

2. La petición de valores únicos por lo general implica usar la palabra clave DISTINTA como la parte de su

Select SENTENCIA. Los dos componentes de la select implican la cláusula SENTENCIA y el DE la cláusula. Le pidieron valores de SALES_REP_ID únicos DE la comando de PEDIDOS. Es simple traducir esta solicitud a la select SENTENCIA siguiente:

seleccione sales_rep_id distinto de pedidos;

De los resultados en la ilustración, usted puede contestar a la pregunta original: hay nueve los representantes de ventas diferentes responsables de pedidos puestos en una lista en la comando de PEDIDOS, pero hay un pedido que contiene valores nulos en sus espacios de SALES_REP_ID.

3. Cuando pedido crear un SET de resultados, esto traduce para SELECCIONAR una o varias columnas de una comando.

En este instancia, su cláusula SENTENCIA es construida de las tres columnas solicitadas. Hay no

100 Capítulo 2:

Extracción de datos Usando el SQL Select SENTENCIA

Page 89: curso_sql_certificacion

la petición de valores únicos, así no hay ninguna necesidad de considerar la palabra clave DISTINTA. EL DE La cláusula sólo tienen que incluir la comando de PEDIDOS para construir la select SENTENCIA siguiente:

seleccione order_id, order_date, order_total de pedidos;

Considere salida en la ilustración siguiente, expresamente la columna ORDER_DATE. Esto la columna contiene el día, mes, año, horas, minutos, segundos, y segundos fraccionarios hasta seis sitios decimales o exacto hasta un millonésimo de un segundo. La descripción de la comando de PEDIDOS expone ORDER_DATE como un TIMESTAMP (6) con la columna TIMEZONE LOCAL. Esto significa que los datos en esta columna pueden ser provistos de la precisión fraccionaria hasta seis sitios decimales y que los datos son conscientes del huso horario. Básicamente, los datos pueden ser trabajados en por la gente en husos horarios diferentes. Entonces el Oracle proporciona un tipo de datos que normaliza la hora local al huso horario de base de datos para evitar la confusión. Comparado con el START_DATE y columnas END_DATE en la comando de HORA JOB_ID, el tipo de datos de columna de FECHA ORDER_ es mucho más sofisticado. Esencialmente, sin embargo, tanto estos tipos de datos almacenan la fecha como la información de tiempo, pero a niveles que se diferencian de la precisión.

Respuesta de laboratorio

101

4. La cláusula SENTENCIA para contestar a esta pregunta debería contener una expresión aliased como "el producto"

arreglado de encadenamientos de literales de carácter con el PRODUCT_NAME, PRODUCT_ID, y columnas PRODUCT_STATUS. Además, la cláusula SENTENCIA debe contener el LIST_PRICE y columnas MIN_PRICE y dos expresiones aritméticas adicionales aliased como "Ahorros de Max Actual" y "% de Max Discount." El DE la cláusula sólo tienen que incluir la comando de INFORMACIÓN PRODUCT_. Siga construyendo cada una de las tres expresiones por su parte y liste a todos ellos juntos. La expresión "de producto" podría ser sacada con la select SENTENCIA siguiente:

seleccione product_name ||' con el código: '|| product_id' ||' tiene el estado

de: '|| order_ estado COMO producto

La "expresión" de Ahorros de Max Actual podría ser sacada con la select SENTENCIA siguiente:

list_price escogido - min_price COMO "Ahorros de Max Actual"

La "expresión" de % de Max Discount toma el cálculo para "Ahorros de Max Actual", divide esto la cantidad por el LIST_PRICE, y lo multiplica por 100. Podría ser sacado con la select SENTENCIA siguiente:

Escogido ((list_price-min_price)/list_price) * 100 COMO "% de Max Discount"

Estas tres expresiones, junto con las dos columnas regulares, forman la cláusula SENTENCIA

ejecutada contra la comando PRODUCT_INFORMATION como mostrado después:

102 Capítulo 2:

Page 90: curso_sql_certificacion

Extracción de datos Usando el SQL Select SENTENCIA

5. La comando DUAL versátil claramente se forma el DE la cláusula. La cláusula SENTENCIA es más

interesante, ya que ningunas columnas actuales están siendo seleccionadas, sólo una expresión aritmética. Una select SENTENCIA posible para sacar este cálculo podría ser:

escogido (4 * (22/7) * (3958.759 * 3958.759)) COMO "el área de la Tierra" de dual;

Este cálculo se acerca que la área de superficie del planeta tierra es 197016572.595304 millas cuadradas.

3La restricción y la Comandoación de Datos

OBJETIVOS DE CERTIFICACIÓN

3.01 Limite las Filas Recuperadas por una Pregunta

3.02 Clasifique las Filas Recuperadas por una Consulta 3.03 Substitución de signo ""

Page 91: curso_sql_certificacion

Q&A

Taladradora de dos minutos

Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

104 Capítulo 3:

La restricción y la Comandoación de Datos

La limitación de las columnas recuperadas por una select SENTENCIA es conocida

como la proyección y fue introducida en el Capítulo 2. La restricción de las filas volvió es

Page 92: curso_sql_certificacion

conocido como la selección. Este capítulo habla el DONDE la cláusula, que es un realce a la

selección

funcionalidad de la select SENTENCIA. EL DONDE La cláusula especifica una o varias condiciones esto el servidor de Oracle evalúa para restringir las filas devueltas por la select. Un realce de lenguaje adicional es introducido por el PEDIDO POR la cláusula, que proporciona capacidades de comandoación de datos. La substitución de signo "" introduce una manera de reutilizar la misma select para ejecutar preguntas diferentes substituyendo elementos de pregunta en el tiempo de ejecución. Este área del tiempo de ejecución ligando en select SQL es a fondo explorada.

OBJETIVO DE CERTIFICACIÓN 3.01

Limite las Filas Recuperadas por una Pregunta Uno de los principios de piedra angular en la teoría relacional es la selección. La

selección es utilización actualizada el DONDE cláusula de la select SENTENCIA. Las condiciones que restringen el dataset volvieron toman muchas formas y actúan sobre columnas así como expresiones. Sólo aquellas filas en una comando que se conforman con estas condiciones son devueltas. Las condiciones restringen filas usando a operadores de comparación junto con columnas y valores literales. Los operadores booleanos proporcionan un mecanismo para especificar que condiciones múltiples de restringir las filas volvieron. Booleano, condicional, hablan de encadenamiento, y operadores aritméticos para establecer su pedido de la precedencia cuando los encuentran en una select SENTENCIA. Las cuatro áreas siguientes son investigadas:

■ el DONDE cláusula ■ operadores de Comparación ■ operadores Booleanos ■ reglas de Precedencia

EL DONDE cláusula EL DONDE la cláusula amplía la select SENTENCIA proporcionando la lenguaje a restrinja filas devueltas basado en una o varias condiciones. El interrogatorio de una comando con sólo el ESCOGIDO y DE cláusulas causa cada fila de datos almacenados en la comando

Limite las Filas Recuperadas por una Pregunta

Page 93: curso_sql_certificacion

105

ser devuelto. Usando la palabra clave DISTINTA, los valores duplicados son excluidos, y las filas consiguientes son restringidas hasta cierto punto. ¿Y si la información muy específica sea requerida de una comando, por ejemplo, sólo los datos donde una columna contiene un valor específico? ¿Cómo recuperaría usted los COUNTRIES que pertenecen a la región de Europa de la comando de COUNTRIES? ¿Y recuperar sólo a aquellos EMPLOYEES que trabajan como representantes de ventas? Estas preguntas son contestadas usando el DONDE la cláusula para especificar exactamente qué filas deben ser devueltas. El formato del SQL select SENTENCIA que incluye el DONDE la cláusula es:

SELECCIONE * | {column|expression [distinto] [alias], } DE comando [DONDE condición (ones)];

Los ESCOGIDOS y DE cláusulas fueron examinados en el Capítulo 2. El DONDE la cláusula siempre sigue el DE la cláusula. Los corchetes indican que el DONDE la cláusula es opcional. Una o varias condiciones pueden ser aplicadas simultáneamente para restringir el SET de resultado. Una condición es especificada comparando dos términos usando a un operador condicional. Estos términos pueden ser valores de columna, literales, o expresiones. El operador de igualdad más comúnmente es usado para restringir SETs de resultado. Dos ejemplos de DONDE las cláusulas son mostradas después:

seleccione country_name de COUNTRIES donde region_id=3;

seleccione last_name, first_name de EMPLOYEES donde job_id ='SA_REP';

El primer ejemplo proyecta la columna COUNTRY_NAME de los COUNTRIES comando. En vez de seleccionar cada fila, el DONDE la cláusula restringe las filas volvió a sólo aquellos que contienen unos 3 en la columna REGION_ID. El segundo ejemplo proyecta dos columnas, LAST_NAME y FIRST_NAME de la comando de EMPLOYEES. Las filas volvieron son restringidos a aquellos que contienen el valor SA_REP en sus columnas JOB_ID.

Las Condiciones de Condiciones basadas del modo numérico deben ser formuladas apropiadamente para tipos de datos de columna diferentes. Las condiciones que restringen filas basadas en columnas numéricas pueden ser especificadas de varios modos diferentes. Considere la columna de SUELDO en la comando de EMPLOYEES. Esta columna tiene un tipo de datos del NÚMERO (8,2). La figura 3-1 muestra dos caminos diferentes en los cuales la columna de SUELDO ha sido restringida. Los primeros y segundos ejemplos

106 Capítulo 3:

La restricción y la Comandoación de Datos

FIGURA 3-1

Dos modos de seleccionar valores numéricos en un DONDE cláusula

Page 94: curso_sql_certificacion

recupere el LAST_NAME y valores de SUELDO de los EMPLOYEES que ganan 10.000$. Note la diferencia en el DONDE las cláusulas de las preguntas siguientes. La primera pregunta especifica el número 10000, mientras el segundo encierra el número dentro de citas solas como un carácter literal. Ambos formatos son aceptables para el Oracle ya que una conversión de tipo de datos implícita es realizada cuando necesario.

seleccione last_name, sueldo de EMPLOYEES donde sueldo = 10000;

seleccione last_name, sueldo de EMPLOYEES donde sueldo = '10000';

Una columna numérica puede ser comparado con otra columna numérica en la

misma fila construir un DONDE la condición de cláusula, como la pregunta siguiente demuestra:

seleccione last_name, sueldo de EMPLOYEES donde sueldo = department_id;

El primer ejemplo en la Figura 3-2 muestra como el DONDE la cláusula es demasiado

restrictiva y no causa ningunas filas seleccionadas. Esto es porque la variedad de valores de SUELDO es 2100 a 999999.99, y la variedad de valores de DEPARTMENT_ID es 10 a 110. Ya que no hay ningún traslapo en la variedad de DEPARTMENT_ID y valores de SUELDO, no hay ningunas filas que satisfagan esta condición y por lo tanto nada es devuelto. El ejemplo también ilustra como un DONDE la condición de cláusula compara una columna numérica con el otro.

Limite las Filas Recuperadas por una Pregunta

107

FIGURA 3-2

La utilización el DONDE cláusula con expresiones numéricas

El segundo ejemplo en la Figura 3-2 demuestra la ampliación el DONDE condición de cláusula de comparar una columna numérica, SUELDO, a la expresión numérica:

Page 95: curso_sql_certificacion

DEPARTMENT_ID*100. Para cada fila, el valor en la columna de SUELDO es comparado con el producto del valor de DEPARTMENT_ID y 100. El DONDE la cláusula también permite expresiones a ambos lados del operador de comparación. Usted podría publicar la select siguiente para ceder resultados idénticos:

seleccione last_name, sueldo de EMPLOYEES donde sueldo/10 = department_id*10;

Como en álgebra regular, la expresión (SUELDO = DEPARTMENT_ID * 100) es equivalente a (SUELDO/10 = DEPARTMENT_ID * 10). El aspecto notable sobre este ejemplo es que los términos a ambos lados del operador de comparación son expresiones.

Las Condiciones de Condiciones basadas en el carácter que determinan qué filas son seleccionadas basadas en datos de carácter, son especificadas encerrando literales de carácter en la cláusula condicional, dentro de citas solas. La columna JOB_ID en la comando de EMPLOYEES tiene un tipo de datos de VARCHAR2 (10). Suliste que usted quiso un informe que consiste en los valores LAST_NAME de aquellos EMPLOYEES actualmente EMPLOYEES como representantes de ventas. El valor de JOB_ID para un representante de ventas es SA_REP. La select siguiente produce tal informe.

seleccione last_name de EMPLOYEES donde job_id ='SA_REP';

108 Capítulo 3:

La restricción y la Comandoación de Datos

Si usted tratara de especificar el carácter literal sin las citas, un error de Oracle sería levantado. Recuerde que el carácter los datos literales son el instancia sensible, entonces el siguiente DONDE las cláusulas no son equivalentes.

La cláusula 1: donde la Cláusula 2 job_id=SA_REP: donde job_id ='Sa_Rep' la Cláusula 3: donde job_id ='sa_rep'

La cláusula 1 genera "ORA-00904: "SA_REP": identificador inválido" error desde

entonces SA_REP literal no es envuelto en citas solas. La cláusula 2 y la Cláusula 3 son sintácticamente correctas, pero no equivalentes. Adelante, ninguna de estas cláusulas cede cualesquiera datos ya que no hay ningunas filas en la comando de EMPLOYEES que tengan valores de columna JOB_ID que son Sa_Rep o sa_rep, como mostrado en la Figura 3-3.

Las condiciones basadas en el carácter no son limitadas con la comparación de valores de columna con literales. Ellos también pueden ser especificados usando otras columnas de carácter y expresiones. El LAST_NAME y las columnas FIRST_NAME son ambos especificados como VARCHAR2 (25) los datos teclearon columnas. Considere la pregunta:

seleccione employee_id, job_id de EMPLOYEES donde last_name=first_name;

Page 96: curso_sql_certificacion

Tanto el LAST_NAME como las columnas FIRST_NAME aparecen a ambos lados

del operador de igualdad en el DONDE cláusula. Ningunos valores literales están presentes; por lo tanto no

FIGURA 3-3

La utilización el DONDE cláusula con datos de carácter

Limite las Filas Recuperadas por una Pregunta

109

los carácteres de cotización solos son necesarios para delimitarlos. Esta condición estipula que sólo las filas que contienen el mismo valor de datos (un partido sensible al instancia exacto) en el LAST_NAME y columnas FIRST_NAME serán devueltas. Esta condición es demasiado restrictiva y, ya que la Figura 3-4 muestra, ningunas filas son devueltas.

Las expresiones basadas en el carácter forman una o ambas partes de una condición separada por un operador condicional. Estas expresiones pueden ser formadas concadenando valores literales con una o varias columnas de carácter. Las cuatro cláusulas siguientes demuestran algunas opciones para condiciones basadas en el carácter:

Cláusula 1: donde Un || last_name || first_name = 'Un Rey' Cláusula 2: donde first_name ||' '|| last_name = last_name ||' '|| first_name Cláusula 3: donde 'SA_REP' || 'Rey' = job_id || last_name Cláusula 4: donde job_id || last_name = 'SA_REP' || 'Rey'

FIGURA 3-4

Carácter basado en la columna DONDE cláusula

110 Capítulo 3:

La restricción y la Comandoación de Datos

Page 97: curso_sql_certificacion

La cláusula 1 concadena el literal "A" de cuerda al LAST_NAME y FIRST_ Columnas de NOMBRE. Esta expresión es comparado con el literal "Un Rey," y cualquier fila que cumpla esta condición es devuelta. La cláusula 2 demuestra que las expresiones de carácter pueden ser colocadas a ambos lados del operador condicional. La cláusula 3 ilustra que las expresiones literales también pueden ser colocadas a la izquierda del operador condicional. Es lógicamente equivalente a la cláusula 4, que ha cambiado el operands en la cláusula 3 alrededor. Las ambas cláusulas 3 y 4 causan la misma fila de datos devueltos, como mostrado en la Figura 3-5.

Las columnas de FECHA de Condiciones basadas en la fecha son útiles almacenando información de tiempo y fecha. Los literales de fecha deben ser encerrados en comillas solas justo como datos de carácter; por otra parte un error es levantado. Cuando usado en el condicional DONDE cláusulas, las columnas de FECHA son

FIGURA 3-5

Equivalencia de expresiones condicionales

Limite las Filas Recuperadas por una Pregunta

111

comparado con otras columnas de FECHA o a literales de fecha. Los literales son automáticamente convertidos en valores de FECHA basados en el formato de fecha por defecto, que es DD-MON-RR. Si un literal ocurre en una expresión que implica una columna de FECHA, es automáticamente convertido en un valor de fecha usando la máscara de formato por defecto. DD representa días, MON representa las tres primeras cartas de un mes, y RR representa un Año 2000-año dócil (es decir si RR está entre 50 y 99, entonces el servidor de Oracle vuelve el siglo anterior, más esto devuelve el siglo corriente). El año de cuatro dígitos apretado, YYYY, también puede ser especificado. Considere las cuatro select SQL siguientes:

La select 1: seleccione employee_id de job_history donde start_date = end_date;

La select 2: seleccione employee_id de job_history donde start_date = '01-JAN-2001';

La select 3: seleccione employee_id de job_history donde start_date = '01-JAN-01';

La select 4: seleccione employee_id de job_history donde start_date = '01-JAN-99';

La primera select prueba la igualdad entre dos columnas de FECHA. Las filas que contienen los mismos valores en su START_DATE y columnas END_DATE serán devueltos. Note, sin embargo, que los valores de FECHA sólo son iguales el uno al otro si hay un partido exacto entre todos sus componentes incluso día, mes, año, horas, minutos, y segundos. El capítulo 4 habla de los detalles de almacenar valores de FECHA. Hasta entonces, no se preocupe de las horas, minutos, y componentes de segundos.

En el DONDE la cláusula de la segunda select, la columna START_DATE es comparado con el carácter literal: '01-JAN-2001'. El componente de año de cuatro dígitos entero (YYYY) ha sido especificado. Esto es aceptable para el servidor de Oracle, y todas las filas en la comando JOB_HISTORY con la columna START_DATE valoran igual al primero de enero de 2001 será devuelto.

La tercera select es equivalente al segundo ya que el literal '01-JAN-01' es convertido a 01-JAN-2001

Page 98: curso_sql_certificacion

de valor de fecha. Esto es debido al componente RR que es menos de 50, entonces el siglo (veintiuno) corriente, 20, es prefijado al año componente de RR para proporcionar un valor de siglo. Todas las filas en la comando JOB_HISTORY con valores de columna START_DATE = 01-JAN-2001 serán devueltas.

112 Capítulo 3:

La restricción y la Comandoación de Datos

El componente de siglo para el literal '01-JAN-99' se hace el anterior el siglo (veinte), 19, cede un valor de fecha de 01-JAN-1999 para la cuarta select, ya que el componente RR, 99, es mayor que 50. Las filas en la comando JOB_HISTORY con valores de columna START_DATE = 01-JAN-1999 serán devueltas.

La aritmética usando la adición y operadores de substracción es apoyada en expresiones que implican valores de FECHA. Una expresión como: END_DATE - la FECHA de START_ devuelve un valor numérico que representa el número de días entre la FECHA START_ y END_DATE. Una expresión como: START_DATE + 30 vueltas un valor de FECHA que es 30 días más tarde que START_DATE. Entonces la expresión siguiente es legítima, como mostrado en la Figura 3-6:

seleccione employee_id de job_history donde start_date + 30 = '31-JAN-99';

Esta pregunta devuelve filas de la comando JOB_HISTORY que contiene un

START_ Valor de FECHA igual hasta 30 días antes 31-JAN-1999. Por lo tanto, sólo las filas con un valor de 01-JAN-1999 en la columna START_DATE serán recuperadas.

FIGURA 3-6

La utilización el DONDE cláusula con expresiones numéricas

Limite las Filas Recuperadas por una Pregunta

113

Las cláusulas condicionales comparan dos términos usando a operadores de comparación. Es importante entender los tipos de datos de los términos implicados entonces ellos pueden ser encerrados en citas solas, si es necesario. Un error común debe suponer que un DONDE la cláusula es sintácticamente correcta, cuando de hecho, esto pierde la cita

Operadores de comparación

Page 99: curso_sql_certificacion

las señales que delimitan literales de fecha o carácter. Otro descuido común no es consciente que los términos a la izquierda y el derecho del operador de comparación en una cláusula condicional pueden ser expresiones, columnas, o valores literales. Ambos estos conceptos pueden ser probados en el examen.

El operador de igualdad es usado extensivamente para ilustrar el concepto de restringir filas usando un DONDE cláusula. Hay varios operadores alternativos que también pueden ser usados. Los operadores de desigualdad como "menos que" o "mayor que o igual a" pueden ser usados para devolver filas que se conforman con condiciones de desigualdad. El ENTRE el operador facilita la comparación basada en la variedad con la prueba si un valor de columna está entre dos valores. El EN el ingreso de SET de prueba de operador, entonces una fila es devuelta si el valor de columna probado en la condición es un miembro de un SET de literales. Al modelo que empareja al operador de comparación LE GUSTA es muy potente, permitiendo componentes de datos de columna de carácter ser emparejado a literales que se conforman con un modelo específico. El último operador de comparación hablado en esta sección es SER el operador NULO, que devuelve filas donde el valor de columna contiene un valor nulo. Estos operadores pueden ser usados en cualquier combinación en el DONDE hablarán de la cláusula y después.

La igualdad y la Desigualdad que Limita las filas devueltas por una pregunta implican especificar un conveniente DONDE cláusula. Si la cláusula es demasiado restrictiva, entonces pocos o ningunas filas son devueltos. Si la cláusula condicional es demasiado ampliamente especificada, entonces más filas que se requieren son devueltos. La exploración de los operadores disponibles diferentes debería proveerle de la lenguaje para solicitar exactamente aquellas filas en las cuales usted está interesado. Las pruebas para la igualdad en una condición son tanto naturales como intuitivas. Tal condición es formada usando el "es igual a" (=) operador. Una fila es devuelta si la condición de igualdad es verdad para aquella fila. Considere la pregunta siguiente:

seleccione last_name, sueldo de EMPLOYEES donde job_id ='SA_REP';

114 Capítulo 3:

La restricción y la Comandoación de Datos

La columna JOB_ID de cada fila en la comando de EMPLOYEES es probada de la igualdad con el carácter SA_REP literal. Para la información de carácter para ser igual, debe haber un partido sensible al instancia exacto. Cuando tal partido es encontrado, los valores para las columnas proyectadas, LAST_NAME y SUELDO, son devueltos para aquella fila, como mostrado en la Figura 3-7. Note que aunque la cláusula condicional esté basada en la columna JOB_ID, no es necesario para esta columna ser proyectado por la pregunta.

Las condiciones basadas en la desigualdad realzan el DONDE especificación de cláusula. Extiéndase y modelo que empareja comparaciones son operadores de igualdad y desigualdad de utilización posibles, pero a menudo es preferible usar el ENTRE y COMO operadores para estas comparaciones. Los operadores de desigualdad son

Page 100: curso_sql_certificacion

descritos en la Tabla 3-1. Los operadores de desigualdad permiten que preguntas basadas en la variedad sean

realizadas. Puede requerirse que usted proporcione un SET de resultados donde un valor de columna es mayor que otro valor.

FIGURA 3-7

Condiciones basadas en el operador de igualdad

Limite las Filas Recuperadas por una Pregunta

115

TABLA 3-1

Operadores de desigualdad

Operador

¡<> <=> = <>! =

Descripción

Menos que Mayor que Menos que o igual a Mayor que o igual a No igual a No igual a

Por ejemplo, la pregunta siguiente puede ser publicada para obtener una lista de LAST_NAME y valores de SUELDO para EMPLOYEES que ganan más que 5000$:

seleccione last_name, sueldo de EMPLOYEES donde sueldo> 5000;

Del mismo modo, para obtener una lista de EMPLOYEES que ganan menos de

3000$, el siguiente la pregunta puede ser presentada:

seleccione last_name, sueldo de EMPLOYEES donde sueldo <3000;

Los operadores de desigualdad compuestos (arreglado de más de un símbolo) son

utilizados en las cuatro cláusulas siguientes:

Cláusula 1: donde sueldo <= 3000; Cláusula

Page 101: curso_sql_certificacion

2: donde sueldo > = 5000; Cláusula 3: donde sueldo <> department_id; Cláusula 4: donde sueldo ! = 4000+department_id;

La cláusula 1 devuelve aquellas filas que contienen un valor de SUELDO que es

menos que o igual a 3000. La cláusula 2 obtiene datos donde el valor de SUELDO es mayor que o igual a 5000, mientras las cláusulas 3 y 4 demuestran las dos formas del "no igual a" operadores. La cláusula 3 devuelve las filas que tienen valores de columna de SUELDO que no son iguales a los valores de DEPARTMENT_ID. El suplente "no igual" al operador en la cláusula 4 ilustra que las columnas, los literales, y las expresiones pueden ser todos comparados usando a operadores de desigualdad. La cláusula 4 devuelve aquellas filas que contienen un valor de SUELDO que no es igual a la suma del DEPARTMENT_ID para aquella fila y 4000.

La desigualdad numérica es naturalmente intuitiva. La comparación de carácter y términos de fecha, sin embargo, es más compleja. Las pruebas de la desigualdad de carácter son interesantes ya que las cuerdas comparadas a ambos lados del operador de desigualdad son convertidas

116 Capítulo 3:

La restricción y la Comandoación de Datos

a una representación numérica de sus carácteres. Basado en el SET de caracteres de base de datos y NLS (Apoyo de Lenguaje Nacional) configuraciones, cada cadena de caracteres es adjudicada un valor numérico. Estos valores numéricos forman la base para la evaluación de la comparación de desigualdad. Considere la select siguiente:

seleccione last_name de EMPLOYEES donde last_name <'Rey';

El carácter 'Rey' literal es convertido a una representación numérica. Asunción un SET de caracteres de base de datos US7ASCII con configuraciones NLS AMERICANAS, el 'Rey' literal es convertido en una suma de sus valores de carácter ordinales: K + yo + n + g = (75+105+110+103=393). Para cada fila en la comando de EMPLOYEES, la columna de NOMBRE de LAST_ es de manera similar convertida a un valor numérico. Si este valor es menos de 393, entonces la fila es seleccionada. El mismo proceso para comparar datos numéricos usando a los operadores de desigualdad se aplica a datos de carácter. La única diferencia es que los datos de carácter son convertidos implícitamente por el servidor de Oracle a un valor numérico basado en

Page 102: curso_sql_certificacion

ciertas configuraciones de base de datos. Las comparaciones de desigualdad que actúan sobre valores de fecha siguen un

proceso similar a datos de carácter. El servidor de Oracle almacena fechas en un formato numérico interno, y estos valores son comparados dentro de las condiciones. El segundo de junio de un cierto año ocurre antes que el tercero de junio del mismo año. Por lo tanto, el valor numérico de la fecha 02-JUN-2008 es menos que el valor numérico de la fecha 03-JUN-2008. Considere la pregunta siguiente:

seleccione last_name de EMPLOYEES donde hire_date <'01-JAN-2000';

Esta pregunta recupera cada registro de empleado que contiene un valor de

HIRE_DATE esto es antes que '01-JAN-2000'. Las filas con el empleado HIRE_DATE=31-DEC-1999 serán devueltas, mientras las filas con el empleado que HIRE_DATE valora más tarde que el primero de enero de 2000 no serán devueltas, como mostrado en la Figura 3-8.

EL DONDE la cláusula es una extensión fundamental a la select SENTENCIA y forma la parte de la mayor parte de preguntas. Aunque muchos operadores de comparación existan, la mayoría de condiciones están basados en la comparación de dos términos usando tanto la igualdad como los operadores de desigualdad.

La Comparación de variedad con el ENTRE el Operador el ENTRE el operador prueba si una columna o la expresión valoran caídas dentro de una variedad de dos valores límites. El artículo debe ser al menos el mismo como el valor límite inferior, o como máximo el mismo como el valor límite más alto, o caída dentro de la variedad, para la condición de ser verdad.

Limite las Filas Recuperadas por una Pregunta

117

FIGURA 3-8

Condiciones basadas en los operadores de desigualdad

Page 103: curso_sql_certificacion

Suliste que usted quiere los apellidos de EMPLOYEES que ganan un sueldo en la variedad de 3400$ y 4000$. Una solución posible usando el ENTRE el operador es como sigue:

seleccione last_name de EMPLOYEES donde sueldo entre 3400 y 4000;

Este operador permite el DONDE condición de leer en una manera inglesa natural. Los apellidos de todos los EMPLOYEES que ganan de 3400$ a 4000$ serán devueltos. Hablan de operadores booleanos como Y, O, y NO más tarde en este capítulo, pero ellos son introducidos aquí para realzar la descripción del ENTRE el operador. El Y operador es usado para especificar múltiple DONDE las condiciones, todo de las cuales debe estar satisfecho para una fila para ser devuelta. Usando el Y operador, el ENTRE el operador es equivalente a dos condiciones usando el "mayor que o igual a" y

118 Capítulo 3:

La restricción y la Comandoación de Datos

"menos que o igual a" operadores, respectivamente. La select SQL precedente es equivalente a la select siguiente, como mostrado en la Figura 3-9.

seleccione last_name de EMPLOYEES donde sueldo> = 3400 y sueldo <= 4000;

El valor de SUELDO para una fila es probado primero si es mayor que o igual a 3400 y segundo si es menos que o igual a 4000. Si ambas condiciones están satisfechas, el valor de LAST_NAME de la parte de formas de fila del SET de resultados. Si sólo un o ninguna de las condiciones están satisfechos, la fila no es seleccionada.

Las condiciones especificadas con el ENTRE el operador pueden ser por lo tanto equivalentemente denotadas usando dos condiciones basadas en la desigualdad, pero es más corto y más simple a

FIGURA 3-9

EL ENTRE operador

Limite las Filas Recuperadas por una Pregunta

119

especifique la condición de variedad usando el ENTRE el operador. La implicación de esta equivalencia es que el mecanismo utilizado para evaluar numérico, carácter, y fecha operands por los operadores de desigualdad es el mismo para el ENTRE el operador. La pregunta siguiente prueba si el valor de columna HIRE_DATE es más tarde que 1994 24-JUL-, pero antes que 07-JUN-1996:

Page 104: curso_sql_certificacion

seleccione first_name, hire_date de EMPLOYEES donde hire_date entre '24-JUL-1994' y '07-JUN-1996';

Usted no es restringido a la especificación de valores literales como el operands al ENTRE el operador, ya que éstos pueden ser valores de columna y expresiones, como lo siguiente:

seleccione first_name, hire_date de EMPLOYEES donde '24-JUL-1994' entre hire_date+30 y '07-JUN-1996';

Para una fila para ser devuelta por esta pregunta, el literal 24-JUL-1994 de fecha debe caerse entre la columna HIRE_DATE de la fila valoran más 30 días y el literal 07-JUN-1996 de fecha.

La Comparación de SET con el EN el Operador el EN el operador prueba si un artículo es un miembro de un SET de valores literales. El SET es especificado por una coma que separa los literales y los encierra en soportes redondos. Si los literales son carácter o valores de fecha, entonces éstos deben ser delimitados usando citas solas. Usted puede incluir tantos literales en el SET como usted desea. Considere el ejemplo siguiente:

seleccione last_name de EMPLOYEES donde sueldo en (1000,4000,6000);

El valor de SUELDO en cada fila es comparado para la igualdad con los literales especificados en el SET. Si el valor de SUELDO iguala 1000, 4000, o 6000, el valor de LAST_NAME para aquella fila es devuelto. El Booleano O el operador, hablado más tarde en este capítulo, son usados para especificar múltiple DONDE las condiciones, al menos un de las cuales debe estar satisfecho para una fila para ser devuelta. El EN el operador es por lo tanto equivalente a una serie de O condiciones. La select SQL precedente puede ser escrita usando múltiple O cláusulas de condición, por ejemplo:

seleccione last_name de EMPLOYEES donde sueldo = 1000 O sueldo = 4000 O sueldo = 6000;

120 Capítulo 3:

La restricción y la Comandoación de Datos

Esta select devolverá LAST_NAME de un empleado si al menos un del DONDE las condiciones de cláusula son verdad; esto tiene el mismo sentido que la select anterior que usa el EN el operador, como mostrado en la Figura 3-10.

Las pruebas del ingreso de SET usando el EN el operador son más sucintas que la utilización múltiple O condiciones, especialmente como el número de miembros en el SET aumenta. Las dos select siguientes demuestran el uso del EN el operador con datos de CARÁCTER y FECHA.

seleccione last_name de EMPLOYEES donde last_name en ('Rey', 'Garbharran', 'Ramklass');

seleccione last_name de EMPLOYEES donde hire_date en ('01-JAN-1998', '01-DEC-1999');

La Comparación de modelo con el Operador PARECIDO Para examinar, el ENTRE el operador proporciona una manera concisa de especificar que las condiciones basadas en la variedad, y el EN el operador proporcionan un método

Page 105: curso_sql_certificacion

óptimo al ingreso de equipo de prueba. Ahora presentamos al operador PARECIDO, que es diseñado exclusivamente para datos de carácter y proporciona un mecanismo potente a buscar cartas o palabras.

COMO es acompañado por dos carácteres de comodín: el símbolo de porcentaje (%) y el carácter subrayar (_). El símbolo de porcentaje es usado para especificar el cero o más carácteres de comodín, mientras el carácter subrayar especifica un carácter de comodín. Un comodín puede representar cualquier carácter.

FIGURA 3-10

EL EN operador

Limite las Filas Recuperadas por una Pregunta

121

Puede solicitarse que usted proporcione una lista de EMPLOYEES cuyos nombres comienzan con la carta "A". La pregunta siguiente puede ser usada para proporcionar este SET de resultados:

seleccione first_name de EMPLOYEES donde first_name como 'Un %';

El carácter literal comparado con que la columna FIRST_NAME es es encerrado en citas solas como un carácter regular literal. Además, esto tiene un símbolo de porcentaje, que tiene un sentido especial en el contexto del operador PARECIDO. El símbolo de porcentaje substituye el cero o más carácteres añadidos a la carta A. Los archivos de empleado con valores de FIRST_NAME que comienzan con la carta A son devueltos.

Los carácteres de comodín pueden aparecer al principio, medio o al final de carácter literal. Ellos pueden parecer hasta solos como en:

donde first_name como '%';

En este instancia, cada fila que contiene un valor de FIRST_NAME que no es nulo será devuelto. Los símbolos de comodín no son obligatorios usando al operador PARECIDO. En tales instancias, COMO se comporta como un operador de igualdad que prueba de partidos de carácter exactos; tan los dos siguientes DONDE las cláusulas son equivalentes:

donde last_name como 'Rey'; donde last_name = 'Rey';

El símbolo de comodín subrayar substituye exactamente un otro carácter en a literal. Considere la busca de EMPLOYEES cuyos apellidos son cuatro cartas mucho tiempo, comienzan con un "K", tienen una segunda carta desconocida, y final con un ng. Usted puede publicar la select siguiente:

donde last_name como 'K_ng';

Según el dataset, usted puede recuperar a EMPLOYEES llamados al Rey, Kong, y Kung. Una manera alterna de realizar el modelo correspondiente es usar una serie interminable de O condiciones, pero conseguir los resultados precedentes sin usar al operador PARECIDO es prohibitivamente complejo. Por ejemplo, puede ser conseguido con la serie siguiente de O condiciones:

donde last_name = 'Kang' O last_name = 'Kbng' O last_name = 'Kcng' OR last_name = 'Kzng'

Page 106: curso_sql_certificacion

Este ejemplo es incompleto, ya que no es factible poner cada carácter posible en una lista esto podría ser substituido. Este ejemplo demuestra el esfuerzo escarpado requerido substituir un carácter solo sin usar al operador PARECIDO y subrayar

122 Capítulo 3:

La restricción y la Comandoación de Datos

símbolo de comodín. Para un número desconocido (cero o más) de substituciones de carácter, las posibilidades son exponencialmente más grandes que para la substitución de carácter solo. No es prácticamente posible realizar el modelo de carácter que empareja sin el uso del operador PARECIDO y los símbolos de comodín.

Como la Figura 3-11 muestra, los dos símbolos de comodín pueden ser usados independientemente, juntos, o hasta tiempos múltiples en un single DONDE condición. La primera pregunta recupera aquellos archivos donde COUNTRY_NAME comienza con la carta "I" seguida del cero o más carácteres, uno de los cuales debe ser una minúscula "a".

La segunda pregunta recupera aquellos COUNTRIES cuyos nombres contienen la carta "i" como su quinto carácter. La longitud de los valores de COUNTRY_NAME y la carta con la cual ellos comienzan es sin importancia. Los cuatro subrayan símbolos de comodín que preceden a la minúscula "i" en el DONDE la cláusula representa exactamente cuatro carácteres (que podría ser cualquier carácter). La quinta carta debe ser un "i", y el símbolo de porcentaje

FIGURA 3-11

Los símbolos de comodín del operador PARECIDO

Limite las Filas Recuperadas por una Pregunta

123

especifica que el COUNTRY_NAME puede tener el cero o más carácteres del sexto carácter adelante.

¿Y el guión cuando usted busca un literal que contiene un porcentaje o subraya el carácter? El oracle proporciona una manera de inhibir temporalmente su sentido especial y considerarlos como carácteres regulares usando el identificador de FUGA. La comando de JOBS contiene valores de JOB_ID que son literalmente especificados con un carácter subrayar, como el SA_MAN, AD_VP, MK_REP, y SA_REP. Suliste que haya, además, una fila en la comando de JOBS con un JOB_ID de SA%MAN. El aviso allí no es subrayan el carácter en este JOB_ID. ¿Cómo puede valores ser recuperado de la comando de JOBS si usted busca valores de JOB_ID que comienzan con los carácteres SA _? Considere la select SQL siguiente:

seleccione * de JOBS donde job_id como 'SA _ %';

Esta pregunta devolverá las filas SA_REP, SA_MAN, y SA%MAN. El no cumplen con el requisito en este ejemplo desde una fila adicional, SA%MAN, no

Page 107: curso_sql_certificacion

conformándose con el criterio que esto comienza con los carácteres SA _, también es devuelto, como el primer ejemplo en espectáculos de Figura 3-12.

Naturalmente ocurrir subraya el carácter puede ser evitado (o tratado como un símbolo no especial regular) la utilización del identificador de FUGA junto con un carácter de FUGA. El segundo ejemplo en la Figura 3-12 muestra la select SQL que recupera los archivos de comando de JOBS con los valores de JOB_ID iguales a SA_MAN y SA_REP y que se conforma con el requisito original:

seleccione job_id de JOBS donde job_id como 'SA \_ %' se escapan '\';

FIGURA 3-12

El identificador de FUGA y otros por el estilo operador

124 Capítulo 3:

La restricción y la Comandoación de Datos

El identificador de FUGA instruye al servidor de Oracle de tratar cualquier carácter encontrado después del carácter de barra invertida como un símbolo no especial regular sin sentido de comodín. En el precedente DONDE cláusula, cualquier valor de JOB_ID que comience con los tres carácteres "SA _" será devuelto. Tradicionalmente, el carácter de FUGA es el símbolo de barra invertida, pero no tiene que ser. La select siguiente es equivalente a la anterior, pero usa un símbolo de dólar como el carácter de FUGA en cambio.

seleccione job_id de JOBS donde job_id como 'el SA$ _ %' evitan 'el $';

El símbolo de porcentaje puede ser de manera similar evitado cuando ocurre

naturalmente como datos de carácter. Suliste, hay un requisito para recuperar la fila con JOB_ID hipotético: SA%MAN introducido antes. El interrogatorio de la comando de JOBS para valores de JOB_ID, como el SA%MAN usando el código siguiente causa los archivos SA_MAN y SA%MAN devuelto.

seleccione job_id de JOBS donde job_id como 'SA%MAN';

El servidor de Oracle interpreta el símbolo de porcentaje en el DONDE cláusula

como a símbolo de comodín cuando usado con el operador PARECIDO. Obtener la fila con JOB_ID: SA%MAN usando al operador PARECIDO, el símbolo de porcentaje puede ser evitado usando la select siguiente:

seleccione job_id de JOBS donde job_id como 'SA \FUGA' DE HOMBRE de % '\';

La barra invertida es definida como el carácter de FUGA que instruye el Oracle servidor no para hacer instancia de las propiedades de comodín del símbolo que ocurre inmediatamente después de la barra invertida. De esta manera, ambos símbolos de

Page 108: curso_sql_certificacion

comodín pueden ser usados como carácteres especializados o como regulares en segmentos diferentes de la misma cadena de caracteres.

EJERZA 3-1 Utilización del Operador PARECIDO Recupere una lista de valores de DEPARTMENT_NAME que se terminan con las

tres cartas "ing" de la comando de DEPARTMENTS.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La cláusula SENTENCIA es

DEPARTMENT_NAME ESCOGIDO

3. El DE la cláusula es DE DEPARTMENTS

Limite las Filas Recuperadas por una Pregunta

125 4. El DONDE la cláusula debe realizar una comparación entre el DEPARTMENT_

Valores de columna de NOMBRE y un modelo de carácteres que comienzan con cero o más carácteres pero se terminan con tres carácteres específicos, "ing".

5. El operador que habilita el modelo de carácter correspondiente es el operador PARECIDO. El modelo con el cual la columna DEPARTMENT_NAME debe conformarse es '%ing'. El símbolo de comodín de porcentaje indica que el cero o más carácteres pueden preceder a la serie "ing" de carácteres.

6. Así, el DONDE la cláusula es DONDE DEPARTMENT_NAME COMO '%ing' 7. La ejecución de esta select devuelve el SET de

resultados que emparejan este modelo como mostrado en la ilustración siguiente:

126 Capítulo 3:

La restricción y la Comandoación de Datos

La Comparación nula con SER el Operador NULO valores NULOS inevitablemente encuentra su camino en tablas de base de datos. A menudo hace falta que sólo aquellos archivos que contienen un valor NULO en una columna específica sean buscados. SER el operador NULO sólo selecciona las filas donde un valor de columna específico es NULO. Las pruebas de valores de columna para la igualdad con el NULO son realizadas usando SER el operador NULO en vez del "es igual" al operador (=).

Considere la pregunta siguiente que trae la columna LAST_NAME de la comando de EMPLOYEES para aquellas filas que hacen almacenar valores NULOS en la columna COMMISSION_PCT:

seleccione last_name de EMPLOYEES donde commission_pct es nulo;

Page 109: curso_sql_certificacion

Esto DONDE la cláusula lee naturalmente y sólo recupera los archivos que contienen Valores de COMMISSION_PCT nulos. Como la Figura 3-13 muestra, la pregunta usando el "es igual" al operador no devuelve ninguna fila, mientras la pregunta usando SER el operador NULO hace.

Operadores booleanos Los datos son restringidos usando un DONDE cláusula con una condición sola. Los operadores booleanos o lógicos habilitan condiciones múltiples para ser especificadas en el DONDE la cláusula de la select SENTENCIA. Esto facilita una capacidad de extracción de datos más refinada. Considere el aislamiento de aquellos archivos de empleado con valores de FIRST_NAME que comienzan con la carta "J" y quiénes ganan un mayor COMMISSION_PCT que el 10 por ciento. En primer lugar, los datos en la comando de EMPLOYEES deben ser restringidos a valores de FIRST_NAME como "J %", y en segundo lugar, los valores de COMMISSION_PCT para los archivos deben ser probados para averiguar si ellos son más grandes que el 10 por ciento. Estas dos condiciones separadas pueden tener que ver usando el Booleano Y operador y son aplicadas consecutivamente en un DONDE cláusula. Un SET de resultado que se conforma con algunas o todas condiciones o con la negación de una o varias condiciones puede ser especificado usando a operadores Booleanos.

EL Y Operador el Y operador fusiona condiciones en una condición más grande a la cual una fila debe conformarse para ser incluida en el SET de resultados. Los operadores booleanos son definidos usando tablas de verdad. La tabla 3-2, el Y comando de verdad de operador, resume su funcionalidad.

Si dos condiciones especificaran en un DONDE la cláusula es afiliada con un Y operador, entonces una fila es probada consecutivamente de la conformidad a ambas condiciones antes de ser recuperada. Si esto no se conforma con ninguno o sólo una de las condiciones, la fila es excluida ya que el resultado es FALSO. Si la fila contiene un valor NULO que causa una de las condiciones de evaluar al NULO, entonces aquella fila es excluida. Una fila sólo será

Limite las Filas Recuperadas por una Pregunta

127

FIGURA 3-13

La utilización de SER operador NULO

Page 110: curso_sql_certificacion

TABLA 3-2

Y Comando de Verdad de Operador

Condición X

FALSO VERDADERO FALSO VERDADERO VERDADERO NULO FALSO NULO NULO

Page 111: curso_sql_certificacion

Condición Y

FALSO FALSO VERDADERO VERDADERO NULO VERDADERO NULO FALSO NULO

Resultado

FALSO FALSO FALSO VERDADERO NULO NULO FALSO FALSO NULO

128 Capítulo 3:

La restricción y la Comandoación de Datos

Page 112: curso_sql_certificacion

devuelto si cada condición afiliada con un Y operador evalúa al VERDADERO. En un guión con más de dos condiciones afiliadas con el Y operador, sólo los datos que se conforman con cada condición serán devueltos.

Los archivos de empleado con valores de FIRST_NAME que comienzan con la carta "J" y COMMISSION_PCT mayor que el 10 por ciento pueden ser recuperados usando la pregunta siguiente:

seleccione first_name, last_name, commission_pct, hire_date de EMPLOYEES donde first_name como 'J %' y commission_pct> 0.1;

Note que el DONDE la cláusula ahora tiene dos condiciones, pero sólo un DONDE palabra clave. El Y operador separa las dos condiciones. Para especificar condiciones adelante obligatorias, simplemente añádalos y asegure que ellos son separados por adicional Y operadores. Usted puede especificar tantas condiciones como usted desea. Recuerde, sin embargo, más Y condiciones especificadas, más restrictivo la pregunta se hace. La figura 3-14 muestra la pregunta precedente seguida de dos restricciones adicionales. El valor de HIRE_DATE debe ser más grande que 01-JUN-1996, y el LAST_NAME debe contener la carta "o". La primera pregunta devuelve cuatro filas. Note que el adicional Y las condiciones en la segunda pregunta están satisfechos por sólo dos filas.

EL U OPERADOR EL U OPERADOR separa condiciones múltiples, al menos un de las cuales debe estar satisfecho por la fila seleccionada para garantizar la inclusión en el SET de resultados. La tabla 3-3, el O comando de verdad de operador, resume su funcionalidad.

TABLA 3-3

O Comando de Verdad de Operador

Condición X

FALSO VERDADERO FALSO VERDADERO VERDADERO NULO FALSO NULO NULO

Condición Y

FALSO FALSO VERDADERO VERDADERO NULO VERDADERO NULO FALSO NULO

Resultado

FALSO VERDADERO VERDADERO VERDADERO VERDADERO VERDADERO NULO NULO

NULO

Limite las Filas Recuperadas por una Pregunta

Page 113: curso_sql_certificacion

129

FIGURA 3-14

La utilización el Y operador

Si dos condiciones especificaran en un DONDE la cláusula es afiliada con UN U OPERADOR entonces una fila es probada consecutivamente de la conformidad a o a ambas condiciones antes de ser recuperada. La conformación con sólo uno del O condiciones es suficiente para el registro para ser devuelto. Si esto no se conforma con ninguna de las condiciones, la fila es excluida ya que el resultado es FALSO. Una fila sólo será devuelta si al menos una de las condiciones asociadas con UN U OPERADOR evalúa al VERDADERO.

Recuperar archivos de empleado que tienen valores de FIRST_NAME que comienzan con la carta B o aquellos con un mayor COMMISSION_PCT que el 35 por ciento pueden ser escritos como:

seleccione first_name, last_name, commission_pct, hire_date de EMPLOYEES donde first_name como 'B %' o commission_pct> 0.35;

130 Capítulo 3:

La restricción y la Comandoación de Datos

Note que las dos condiciones son separadas por el O palabra clave. Todo el empleado

Page 114: curso_sql_certificacion

los archivos con valores de FIRST_NAME que comienzan con una mayúscula "B" serán devueltos sin tener en cuenta sus valores de COMMISSION_PCT, aun si ellos son NULOS. Todos aquellos archivos que tienen COMMISSION_PCT valoran mayor que el 35 por ciento, sin tener en cuenta con qué la carta sus valores de FIRST_NAME comienza, también es devuelto.

Adelante O las condiciones pueden ser especificadas separándolos con UN U OPERADOR. Más O condiciones usted especifica, menos restrictivo su pregunta se hace. La figura 3-15 muestra la pregunta precedente con dos adicional O condiciones. El valor de HIRE_DATE debe ser más grande que 01-JAN-2000 o el LAST_NAME deben comenzar con la carta "B". La primera pregunta devuelve menos filas que la segunda pregunta ya que más filas encuentran las condiciones menos restrictivas en la segunda pregunta que en el primer.

FIGURA 3-15

La utilización EL U OPERADOR

Limite las Filas Recuperadas por una Pregunta

GUIÓN & SOLUCIÓN 131

Usted tiene una pregunta compleja con condiciones múltiples. ¿Hay una restricción del número de condiciones que usted puede especificar en el DÓNDE cláusula? ¿Hay un límite del número de operadores de comparación que usted puede usar en una pregunta sola? No. Usted puede especificar cualquier número de condiciones en el DONDE cláusula separada por los operadores Booleanos. No hay ningún límite usando a los operadores de comparación, y ellos pueden ser especificados tiempos múltiples si es necesario en una pregunta sola. Usted ha sido encargado para localizar filas en la comando de EMPLOYEES donde los valores de SUELDO contienen los números 8 y 0 adyacentes el uno al otro. La columna de SUELDO tiene un tipo de datos de NÚMERO. ¿Es posible usar al operador de comparación PARECIDO con datos numéricos? Sí. El oracle automáticamente echa los datos en el tipo de datos requerido, de ser posible. En este instancia, los valores de SUELDO numéricos son momentáneamente "cambiados" en datos de carácter que permiten el uso del operador PARECIDO localizar modelos correspondientes. La pregunta siguiente localiza las filas requeridas: SELECCIONE * DE EMPLOYEES DONDE SUELDO COMO 'EL %80 %';" ¿Restringiendo las filas volvió de la comando de JOBS a aquellos que contienen el valor SA_REP en la columna JOB_ID, son una proyección, selección o juntura realizada? Una selección es realizada ya que las filas son restringidas.

EL NO Operador el NO el operador niega a operadores condicionales. Una fila seleccionada debe conformarse con la parte de enfrente lógica de la condición a fin de ser incluida en el SET de resultados. La tabla 3-4, el NO comando de verdad de operador, resume su funcionalidad.

Los operadores condicionales pueden ser negados por el NO operador como mostrado por el DONDE las cláusulas pusieron en una lista en la Tabla 3-5.

Como los ejemplos en la Tabla 3-5 sugieren, el NO el operador puede ser muy útil. Es

Page 115: curso_sql_certificacion

importante entender que el NO el operador niega al operador de comparación en una condición, si es una igualdad, desigualdad, variedad basada, modelo correspondiente, ingreso de SET, u operador de pruebas nulo.

TABLA 3-4

EL NO Comando de Verdad de Operador

Condición X

FALSO VERDADERO NULO

NO Condición X

VERDADERO FALSO NULO

132 Capítulo 3:

La restricción y la Comandoación de Datos

TABLA 3-5

Condiciones Negadas por el NO Operador

Positivo

donde last_name ='King' donde first_name COMO 'R %' donde department_id EN (10,20,30) donde sueldo ENTRE 1

y 3000 donde commission_pct es NULO

Negativo

donde NO (last_name ='King') donde first_name NO COMO 'R %' donde department_id NO EN (10,20,30)

donde sueldo NO ENTRE 1 y 3000 donde commission_pct no es NULO

Recuperar al empleado registra con valores de FIRST_NAME que no comienzan con la carta "B" o aquellos que no cumplen con un mayor COMMISSION_PCT que el 35 por ciento puede ser escrito como:

seleccione first_name, last_name, commission_pct, hire_date de EMPLOYEES donde first_name no como 'B %' o no (commission_pct> 0.35);

Note que las dos condiciones todavía son separadas por EL U OPERADOR y el

Page 116: curso_sql_certificacion

NO el operador acaba de ser añadido sólo a ellos.

Y y O son operadores Booleanos que habilitan múltiple DONDE condiciones de cláusula para ser especificadas en una pregunta sola. Todas las condiciones separadas por un Y operador deben evaluar al verdadero después de probar los valores de una fila para impedirle ser excluido del SET de resultados finales. Sin embargo, sólo una de las condiciones separadas por UN U OPERADOR debe evaluar al verdadero para evitar su exclusión del SET de resultados finales. Si cinco condiciones, A, B, C, D, y E, ocurren en un DONDE la cláusula como DONDE A y B o C o D y E, entonces una fila será devuelta si ambas condiciones A y B son realizadas, o sólo condición C son encontrados, o sólo condición D es encontrada, o ambas condiciones D y E son realizados.

Reglas de precedencia La aritmética, el carácter, la comparación, y las expresiones Booleanas fueron examinados en el contexto del DONDE cláusula. ¿Pero cómo se relacionan estos operadores el uno con el otro? Los operadores aritméticos se suscriben a una jerarquía de precedencia. Las expresiones acorchetadas son evaluadas antes de multiplicación y operadores de división, que son evaluados antes de operadores de adición y substracción. Del mismo modo, hay una jerarquía de precedencia para los operadores antes mencionados como mostrado en la Tabla 3-6.

Los operadores al mismo nivel de la precedencia son evaluados de la izquierda a la derecha si los encuentran juntos en una expresión. Cuando el NO el operador modifica el

Limite las Filas Recuperadas por una Pregunta

133

TABLA 3-6

Jerarquía de Precedencia de operador

Nivel de precedencia

12345

6

78910 11

Símbolo de operador

()/, * ,

|| =, <>, <=>, =

¡[NO] COMO, NO ES NULO, [NO] EN [NO] ENTRE! =, <> NO Y O

Page 117: curso_sql_certificacion

Operación

Paréntesis o División de soportes y Adición de multiplicación e Igualdad de Encadenamiento de substracción y

desigualdad comparación

Modelo, nulo, y SET comparación

Comparación de variedad No igual a NO condición lógica Y condición lógica O condición lógica

COMO, es NULO, y EN operadores de comparación, su nivel de precedencia permanece el mismo como la forma positiva de estos operadores.

Considere la select SENTENCIA siguiente que demuestra la interacción de varios operadores diferentes:

seleccione last_name,salary,department_id,job_id,commission_pct de EMPLOYEES donde last_name como '%a %' y sueldo> department_id * 200 o job_id en ('MK_REP', 'MK_MAN') y commission_pct no es nulo

El LAST_NAME, SUELDO, DEPARTMENT_ID, JOB_ID, y Las columnas de COMMISSION_PCT son proyectadas de la comando de EMPLOYEES basada en dos condiciones distintas. La primera condición recupera los archivos que contienen el carácter "a" en el espacio de LAST_NAME Y con un valor de SUELDO mayor que 200 veces el valor de DEPARTMENT_ID. El producto de DEPARTMENT_ ID y 200 es tratado antes del operador de desigualdad ya que la precedencia de la multiplicación es más alta que la comparación de desigualdad.

La segunda condición trae aquellas filas con valores JOB_ID DEL HOMBRE MK_ o de MK_REP en el cual los valores de COMMISSION_PCT no son nulos. Para una fila para ser devuelta por esta pregunta, las primeras O segundas condiciones tienen que ser realizadas. La figura 3-16 ilustra tres preguntas. La consulta 1 devuelve cuatro filas. La consulta 2 está basada en la primera condición sólo hablada y devuelve cuatro filas. La consulta 3 está basada en la segunda condición y devuelve filas cero.

134 Capítulo 3:

La restricción y la Comandoación de Datos

FIGURA 3-16

Precedencia de operador en el DONDE cláusula

Page 118: curso_sql_certificacion

El cambio del pedido de las condiciones en el DONDE la cláusula cambia su sentido debido a la precedencia diferente de los operadores. Considere la muestra de código siguiente:

seleccione last_name,salary,department_id,job_id,commission_pct de EMPLOYEES donde last_name como '%a %' y sueldo> department_id * 100 y commission_pct no es nulo o job_id = 'MK_MAN'

Hay dos condiciones compuestas en esta pregunta. La primera condición recupera los archivos con el carácter "a" en el LAST_NAME paran y devuelven la pelota Y un valor de SUELDO mayor que 100 veces el valor de DEPARTMENT_ID Y donde el valor de COMMISSION_PCT no es nulo. La segunda condición trae aquellas filas con valores JOB_ID de MK_MAN. Una fila es devuelta por esta pregunta, si esto se conforma para condicionar un O condición dos, pero no necesariamente a ambos.

Limite las Filas Recuperadas por una Pregunta

135

FIGURA 3-17

Efecto de cláusula de condición que pide debido a reglas de precedencia

Page 119: curso_sql_certificacion

Como la Figura 3-17 ilustra, esta pregunta devuelve seis filas. Esto espectáculos adicionales la división de la pregunta en dos preguntas basadas en sus dos condiciones compuestas. La primera condición causa cinco filas devueltas mientras los segundos resultados en la recuperación de sólo una fila con un valor JOB_ID de MK_MAN.

Los operadores booleanos O y Y permiten múltiple DONDE condiciones de cláusula ser especificado. El Booleano NO el operador niega a un operador condicional y puede ser usado varias veces dentro de la misma condición. La igualdad, desigualdad, ENTRE, EN, y COMO

los operadores de comparación prueban dos términos dentro de una condición sola. Sólo un operador de comparación es usado por cláusula condicional. La distinción entre Booleano y operadores de comparación es importante y forma la base para muchas preguntas relacionadas con este capítulo en el examen.

136 Capítulo 3:

La restricción y la Comandoación de Datos

OBJETIVO DE CERTIFICACIÓN 3.02

Clasifique las Filas Recuperadas por una Pregunta Los diccionarios de lenguaje regulares clasifican palabras en comando alfabético. Las

páginas imprimidas en a el libro es clasificado numéricamente en comando ascendente desde el principio hasta el final. Las realizaciones prácticas de selección y proyección han sido cubiertas hasta ahora. La utilidad de datasets recuperado puede ser considerablemente realzada con un mecanismo para pedir o clasificar la información. La información puede ser clasificada por comando alfabético, numéricamente, del más temprano al último, o en ascensión o bajada del pedido. Adelante, los datos pueden ser clasificados por una o varias columnas, incluso columnas que no son puestas en una lista en la cláusula SENTENCIA. La comandoación es realizada una vez que los resultados de una select SENTENCIA han sido traídos. Los parámetros de comandoación no influyen en los archivos devueltos por una pregunta, sólo la presentación de los resultados. Exactamente las mismas filas son devueltas por una select incluso una cláusula de clase como son

Page 120: curso_sql_certificacion

devueltos por una select excluyendo una cláusula de clase. Sólo el pedido de salida puede diferenciarse. La comandoación de los resultados de una pregunta es llevada a cabo usando el PEDIDO POR la cláusula.

El PEDIDO POR Cláusula Cuando las tablas son creadas, ellos son al principio vacíos y no contienen ningunas

filas. Como filas son insertados, actualizados, y borrados por uno o varios usuarios o sistemas de aplicación, el pedido original de las filas almacenadas es perdido. El servidor de Oracle no puede y no garantizar que las filas son almacenadas secuencialmente. Esto no es un problema ya que un mecanismo para clasificar dataset recuperado está disponible en la forma del PEDIDO POR la cláusula.

Esta cláusula es responsable de transformar salida de una pregunta en datos clasificados más prácticos, fáciles de usar. El PEDIDO POR la cláusula siempre es la última cláusula en una select SENTENCIA. Como la sintaxis llena de la select SENTENCIA es cada vez más expuesta, usted observará nuevas cláusulas añadidas pero ninguno de ellos será colocado después del PEDIDO POR la cláusula. El formato del PEDIDO POR la cláusula en el contexto del SQL select SENTENCIA es como sigue:

SELECCIONE * | {column|expression [distinto] [alias], } DE la comando [DONDE condición (ones)] [PIDEN POR {Cnel (es) |expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]];

Clasifique las Filas Recuperadas por una Pregunta

137

La ascensión y la Bajada de la Comandoación del pedido de Comandoación ascendente son naturales para la mayor parte de tipos de datos y son por lo tanto el pedido de clase por defecto usado siempre que el PEDIDO POR la cláusula sea especificado. Un pedido de comandoación ascendente por números es el más bajo al más alto, mientras es el más temprano al último para fechas y por comando alfabético para carácteres. La primera forma del PEDIDO POR la cláusula muestra que los resultados de una pregunta pueden ser clasificados por una o varias columnas o expresiones:

PEDIDO POR Cnel (es) |expr; Suliste que un informe es solicitado que debe contener LAST_ de un empleado

NOMBRE, HIRE_DATE, e información de SUELDO, clasificada por comando alfabético por la columna LAST_NAME para todos los representantes de ventas y gerentes de marketing. Este informe podría ser extraído con la select SENTENCIA siguiente:

seleccione last_name, hire_date, sueldo de EMPLOYEES donde job_id en ('SA_REP', 'MK_MAN') piden por last_name;

Los datos seleccionados pueden ser pedidos por cualquiera de las columnas de las tablas en el DE la cláusula, incluso aquellos que no aparecen en la lista SENTENCIA. Los resultados de la pregunta precedente pueden ser clasificados por la columna COMMISSION_PCT, como mostrado en la Figura 3-18.

El segundo ejemplo en la Figura 3-18 muestra que añadiendo la palabra clave DESC al PEDIDO POR la cláusula, las filas son devueltas clasificadas en el pedido inclinado basado en la columna COMMISSION_PCT. El tercer ejemplo demuestra NULLS opcional ÚLTIMAS palabras claves, que

Page 121: curso_sql_certificacion

especifican que si la columna de clase contiene valores nulos, entonces estas filas deben ser puestas en una lista últimas después de clasificar las filas restantes basadas en su NO valores NULOS. Para especificar que las filas con valores nulos en la columna de clase deberían ser mostradas primero, añada el NULLS PRIMERAS palabras claves al PEDIDO POR la cláusula.

El ejemplo siguiente clasifica un basado dataset en una expresión. Esta expresión calcula el valor de un empleado a una compañía basada en su HIRE_DATE y valores de SUELDO. Esta fórmula toma el valor de HIRE_DATE y resta un número especificado de días para devolver una fecha más temprana. El número de días restados es calculado dividiendo el valor de SUELDO por 10. La expresión es aliased como EMP_VALUE como sigue:

seleccione last_name, sueldo, hire_date, hire_date-(sueldo/10) emp_value de EMPLOYEES donde job_id en ('SA_REP', 'MK_MAN') piden por emp_value;

138 Capítulo 3:

La restricción y la Comandoación de Datos

FIGURA 3-18

La comandoación de datos usando el PEDIDO POR cláusula

La expresión EMP_VALUE es iniciada con el valor de HIRE_DATE y es compensada adelante en el pasado basado en el espacio de SUELDO. La fecha EMP_VALUE más temprana parece primera en el SET de resultado salida ya que el PEDIDO POR la cláusula especifica que los resultados serán clasificados por el alias de expresión. Note que los resultados podrían ser clasificados por la expresión explícita y el alias podría ser omitido ya que EN el pedido POR LA FECHA HIRE_ - (SUELDO/10), pero aliases de utilización ejecuta la pregunta más fácil a leer.

Page 122: curso_sql_certificacion

Varias opciones por defecto implícitas son seleccionadas cuando usted usa el PEDIDO POR la cláusula. El más importante de éstos es que a menos que DESC sea especificado, se supone que el pedido de clase suba. Si los valores nulos ocurren en la columna de clase, se supone que el pedido de clase por defecto sea NULLS ÚLTIMO para comandoaciones ascendentes y NULLS PRIMERO para bajar clases. Si ningún PEDIDO POR la cláusula es especificado, la misma pregunta ejecutada en tiempos diferentes puede volver el mismo SET de causa el pedido de fila diferente, entonces ningunas asunciones deberían ser hechas en cuanto al pedido de fila por defecto.

Comandoación posicional Clasifique las Filas Recuperadas por una Pregunta

139 El oracle ofrece una manera alterna y más corta de especificar la columna de clase o expresión. En vez de especificar el nombre de columna, la posición de la columna como ocurre en la lista SENTENCIA es añadida al PEDIDO POR la cláusula. Considere el ejemplo siguiente:

seleccione last_name, hire_date, sueldo de EMPLOYEES donde job_id en ('SA_REP', 'MK_MAN') piden por 2;

El PEDIDO POR la cláusula especifica los dos literales numéricos. Esto es equivalente a especificando el PEDIDO POR HIRE_DATE, ya que la columna HIRE_DATE es la segunda columna seleccionada en la cláusula SENTENCIA.

La comandoación posicional sólo se aplica a columnas en la lista SENTENCIA que hacen asociar una posición numérica con ellos. La modificación de la pregunta precedente para clasificar los resultados por la columna JOB_ID no es la comandoación posicional posible que usa ya que esta columna no ocurre en la lista SENTENCIA.

Los Resultados de Comandoación compuestos de una pregunta pueden ser clasificados por más de una columna usando la comandoación compuesta. Dos o más columnas pueden ser especificadas (literalmente o posicionalmente) como el criterio de comandoación compuesto por comas que los separan en el PEDIDO POR la cláusula. Piense que el requisito trae el JOB_ID, LAST_NAME, SUELDO, y valores de HIRE_DATE de la comando de EMPLOYEES. Los requisitos adicionales son que los resultados deben ser clasificados en el comando alfabético inverso por JOB_ID primero, luego en la ascensión del comando alfabético por LAST_NAME, y finalmente en el pedido numéricamente inclinado basado en la columna de SUELDO. La select SENTENCIA siguiente cumple estos requisitos:

seleccione job_id, last_name, sueldo, hire_date de EMPLOYEES donde job_id en ('SA_REP', 'MK_MAN') piden por job_id desc, last_name, 3 desc;

Cada columna implicada en la clase es puesta en una lista dejada a directamente en el comando de

importancia separado por comas en el PEDIDO POR la cláusula, incluso el modificador DESC, que ocurre dos veces en esta cláusula. Este ejemplo también demuestra especificaciones de columna literales y posicionales que se mezclan. Como la Figura 3-19 muestra, hay varias filas con el mismo valor de JOB_ID, por ejemplo, SA_REP. Para estas filas, los datos son clasificados por comando alfabético por el criterio de comandoación secundario, que es la columna LAST_NAME.

140

Page 123: curso_sql_certificacion

Capítulo 3:

La restricción y la Comandoación de Datos

FIGURA 3-19

Comandoación compuesta usando el PEDIDO POR cláusula

Para las filas con mismo JOB_ID y mismos valores de columna LAST_NAME, como el SA_REP y Smith, estas filas son clasificadas en el pedido de bajada numérico por la tercera columna de clase, SUELDO.

El concepto de clasificar datos es por lo general a fondo probado. La sintaxis del PEDIDO POR la cláusula es términos de clase francos, pero múltiples como expresiones, columnas, y specifiers posicional, conectado con pedidos de clase inclinados por unos

términos y pedidos de comandoación ascendente por otros, proporcione un mecanismo de comandoación de datos potente que viene con un aumento correspondiente de la complejidad. Esta complejidad a menudo es probada, tan asegure que usted tiene un entendimiento sólido del PEDIDO POR la cláusula.

Page 124: curso_sql_certificacion

EJERZA 3-2 Datos de Comandoación Usando el PEDIDO POR Cláusula Clasifique las Filas Recuperadas por una Pregunta

141 La comando de JOBS contiene descripciones de tipos diferentes de JOBS que un empleado en la organización puede ocupar. Esto contiene el JOB_ID, JOB_TITLE, MIN_SALARY, y columnas MAX_SALARY. Se requiere que usted escriba una pregunta que extrae el JOB_TITLE, MIN_SALARY, y columnas MAX_SALARY, así como una expresión llamada el DESACUERDO, que es la diferencia entre el MAX_SALARY y valores de MIN_SALARY, para cada fila. Los resultados sólo deben incluir valores de JOB_TITLE que contienen la palabra "President" o "gerente". Clasifique la lista en el pedido inclinado basado en la expresión de DESACUERDO. Si más de una fila tiene el mismo valor de DESACUERDO, entonces, además, clasifican estas filas por JOB_TITLE en el pedido alfabético inverso.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula SENTENCIA es

SELECCIONE JOB_TITLE, MIN_SALARY, MAX_SALARY, (MAX_SALARY - MIN_SALARY) DESACUERDO

3. El DE la cláusula es DE JOBS

4. El DONDE las condiciones deben permitir sólo aquellas filas cuyo JOB_TITLE la columna contiene la cuerda "presidente" O la cuerda "gerente".

5. El DONDE la cláusula es DONDE JOB_TITLE COMO '%President %' O JOB_TITLE COMO '%Manager %'

6. La comandoación es llevada a cabo con el PEDIDO POR la cláusula. La comandoación compuesta es

utilización requerida tanto la expresión de DESACUERDO como la columna JOB_TITLE en pedido inclinado.

7. El PEDIDO POR cláusula es PEDIDO POR DESACUERDO DESC, JOB_TITLE DESC. Usted puede especificar alternativamente la expresión explícita en el PEDIDO POR la cláusula en vez del alias de expresión.

142 Capítulo 3:

La restricción y la Comandoación de Datos

8. La ejecución de la select devuelve un SET de resultados que emparejan este modelo como mostrado en la ilustración siguiente.

Page 125: curso_sql_certificacion

OBJETIVO DE CERTIFICACIÓN 3.03

Substitución de signo "" Como las preguntas son desarrolladas y perfeccionadas, ellos pueden ser guardados para

el futuro uso. A veces, las preguntas se diferencian muy ligeramente, y es deseable tener una forma más genérica de la pregunta que tiene una variable o placeholder definió lo que puede ser substituido en el tiempo de ejecución.

Substitución de signo ""

143

El oracle ofrece esta funcionalidad en la forma de la substitución de signo "". Cada elemento de la select SENTENCIA puede ser substituido, y la reducción de preguntas a sus elementos principales para facilitar la reutilización puede guardarle las horas del trabajo aburrido y reiterativo. Las áreas siguientes son examinadas en esta sección:

■ variables de Substitución ■ DEFINIR y VERIFICAN comandos

Variables de substitución La llave al entendimiento de variables de substitución debe considerarlos como

placeholders. Una pregunta de SQL es formada de dos o más cláusulas. Cada cláusula puede estar

Page 126: curso_sql_certificacion

dividida en subcláusulas, que son por su parte arregladas del texto de carácter. Cualquier texto, subcláusula o elemento de cláusula, o hasta la pregunta de SQL entera son un candidato por la substitución. Considere la select SENTENCIA en su forma general:

SELECCIONE * | {column|expression [distinto] [alias], } DE la comando [DONDE condición (ones)] [PIDEN POR {Cnel (es) |expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]];

Usando la substitución, usted inserta valores en los elementos puestos en bastardilla,

eligiendo que palabras claves opcionales para usar en sus preguntas. Cuando la columna LAST_NAME en la comando de EMPLOYEES se requiere, la pregunta es construida usando la forma general de la select SENTENCIA y substituyendo el nombre de columna LAST_NAME en el lugar de la columna de palabra en la cláusula SENTENCIA y el nombre de tabla; EMPLOYEES en lugar de la comando de palabra en el DE cláusula.

La Substitución de Signo "" sola La forma más básica y popular de la substitución de elementos en una select SQL es la substitución de signo "" sola. El carácter de signo "" (&) es el símbolo elegido para designar una variable de substitución en una select y precede al nombre de variable sin espacios entre ellos. Cuando la select es ejecutada, el servidor de Oracle trata la select, nota una variable de substitución, e intenta resolver el valor de esta variable de uno de dos modos. En primer lugar, esto comprueba si la variable es definida en la sesión de usuario. (Hablan del comando DEFINIR más tarde en este capítulo.) Si la variable no es definida, el proceso de usuario apremio para un valor que será substituido en el lugar de la variable. Una vez que un valor es presentado, la select es completa y es ejecutada por el servidor de Oracle. La variable de substitución de signo "" es resuelta en el tiempo de ejecución y es a veces conocida como tiempo de ejecución ligando o substitución de tiempo de ejecución.

144 Capítulo 3:

La restricción y la Comandoación de Datos

Un requisito común en el departamento de HORA de muestra puede deber recuperar el misma información para EMPLOYEES diferentes en tiempos diferentes. Quizás se requiere que usted busque la información de contacto como datos PHONE_NUMBER dados NOMBRE de LAST_ o valores de EMPLOYEE_ID. Esta solicitud genérica puede ser escrita como sigue:

seleccione employee_id, last_name, phone_number de EMPLOYEES donde last_name = &LASTNAME o employee_id = &EMPNO;

Como la Figura 3-20 muestra, ejecutando esta pregunta, el servidor de Oracle le

apremio a introduzca un valor para la variable llamada LASTNAME. Usted escribe el apellido de un empleado, si usted lo sabe, por ejemplo, 'Rey'. Si usted no sabe el apellido, pero sabe el

Page 127: curso_sql_certificacion

Número de identificación de empleado, usted puede teclear en cualquier valor y pulsar la

TECLA DE ENTRADA para presentar el valor. El oracle entonces le apremio para escribir un valor para la variable EMPNO. Después de teclear en un valor, por ejemplo, 0, y golpear ENTER, no hay ningunas variables de substitución restantes para el Oracle para resolverse y la select siguiente es ejecutada:

seleccione employee_id, last_name, phone_number de EMPLOYEES donde last_name = 'Rey' o employee_id = 0;

Las variables pueden ser adjudicadas cualquier nombre alfanumérico que sea un

nombre de identificador válido. El literal que usted substituye cuando apremio por una variable debe ser un tipo de datos apropiado para aquel contexto; por otra parte, un ORA-00904: el error de identificador inválido es devuelto. Si la variable se supone para substituir un carácter o valor de fecha, las necesidades literales para ser encerradas en citas solas. Una técnica útil debe encerrar la variable de substitución de signo "" en citas solas tratando con valores de fecha y carácter. De esta manera,

FIGURA 3-20

Substitución de signo "" sola

Substitución de signo ""

145

se requiere que el usuario presente un valor literal sin preocuparse de la inclusión de ello en citas. La select siguiente vuelve a escribir el anterior, pero encierra la variable LASTNAME en citas:

seleccione employee_id, last_name, phone_number, e-mail de EMPLOYEES donde last_name = '&LASTNAME' o employee_id = &EMPNO;

Cuando apremio para un valor para substituir a la variable LASTNAME, usted puede por ejemplo, presente al Rey de valor sin cualquier cita sola, ya que éstos están presentes ya y cuando la substitución de tiempo de ejecución es realizada, el primer DONDE la condición de cláusula se resolverá a: DONDE LAST_NAME = 'Rey'.

La doble Substitución de Signo "" Allí es ocasiones cuando se refiere una variable de substitución tiempos múltiples en la misma pregunta. En tales situaciones, el servidor de Oracle le apremio para escribir un valor para cada acontecimiento de la variable de substitución de signo "" sola. Para escrituras complejas esto puede ser muy ineficaz y aburrido. La select siguiente recupera el FIRST_NAME y columnas LAST_NAME de la comando de EMPLOYEES para aquellas filas que contienen el mismo SET de carácteres en ambos estos espacios:

seleccione first_name, last_name de EMPLOYEES donde last_name como '%&SEARCH%' y first_name como '%&SEARCH%';

Las dos condiciones son idénticas, pero se aplican a columnas diferentes. Cuando esto la select es ejecutada, usted es apremio primero para escribir un valor de substitución para la variable de BÚSQUEDA usada en la comparación con la columna LAST_NAME. A partir de entonces, usted es apremio para escribir un valor de substitución para la variable de BÚSQUEDA usada en la comparación

Page 128: curso_sql_certificacion

con la columna FIRST_NAME. Esto plantea dos problemas. En primer lugar, es ineficaz para escribir el mismo valor dos veces, pero segundo y lo que es más importante los errores tipográficos pueden confundir la pregunta ya que el Oracle no verifica que el mismo valor literal es entrado cada vez que las variables de substitución con el mismo nombre son usadas. En este ejemplo, la asunción lógica es que los contenido de las variables substituidas deberían ser el mismo, pero el hecho que las variables tienen el mismo nombre no tiene ningún sentido al servidor de Oracle y esto no hace ninguna tal asunción. El primer ejemplo en la Figura 3-21 muestra los resultados de ejecutar la pregunta precedente y presentar dos valores distintos para la variable de substitución de BÚSQUEDA. En este ejemplo particular, los resultados son incorrectos ya que el requisito debía recuperar FIRST_NAME y pares de NOMBRE de LAST_ que contuvieron la serie idéntica de carácteres.

146 Capítulo 3:

La restricción y la Comandoación de Datos

FIGURA 3-21

Doble substitución de signo ""

En situaciones cuando se refiere una variable de substitución tiempos múltiples en la misma pregunta y su intención son que la variable debe tener el mismo valor en cada acontecimiento en la select, es preferible hacer el uso de la doble substitución de signo "". Esto implica prefijar el primer acontecimiento de la variable de substitución que ocurre tiempos múltiples en una pregunta, con dos símbolos de signo "" en vez de uno. Cuando el servidor de Oracle encuentra una doble variable de substitución de signo "", un valor de sesión es definido para aquella variable y usted no es apremio para escribir un valor para ser substituido por esta variable en referencias subsecuentes.

El segundo ejemplo en la Figura 3-21 demuestra como la variable de BÚSQUEDA es precedida por dos signos "" en la condición con la columna FIRST_NAME y a partir de entonces es prefijada por un signo "" en la condición con la columna LAST_NAME. Cuando ejecutado, usted es apremio para escribir un valor para ser

Page 129: curso_sql_certificacion

substituido por la variable de BÚSQUEDA sólo una vez para la condición con la columna FIRST_NAME. Este valor es automáticamente resuelto entonces del valor de sesión de la variable en referencias subsecuentes a ello, como en la condición con la columna LAST_NAME. Para no definir la variable de BÚSQUEDA, usted tiene que usar el comando de UNDEFINE descrito más tarde en este capítulo.

Substitución de signo ""

147

Si usted trabaja como un developer, administrador de base de datos, o usuario final comercial, todo SQL le pregunta el encuentro puede ser ampliamente clasificado como ad hoc o repitió preguntas. Las preguntas ad hoc son select por lo general únicas escritas durante un poco de ejercicio de investigación de datos que con poca probabilidad serán reutilizados. Las preguntas repetidas son aquellos que son ejecutados con frecuencia o periódicamente, que son por lo general guardados ya que la escritura archiva y ejecutado con poco a ninguna modificación siempre que requerido. La reutilización previene el tiempo de reurbanización costoso y permite que estas preguntas consecuentes se beneficien potencialmente de los aspectos de afinación automáticos natales del Oracle engranados hacia el rendimiento de pregunta que mejora.

La substitución de Nombres de Columna elementos Literales del DONDE cláusula han sido el foco de la discusión sobre la substitución hasta ahora, pero prácticamente cualquier elemento de una select SQL es un candidato por la substitución. En la select siguiente, el FIRST_NAME y las columnas JOB_ID son estáticos y siempre serán recuperados, pero la tercera columna seleccionada es variable y especificada como una variable de substitución llamada: Coronel. El SET de resultado es clasificado adelante por esta columna variable en el PEDIDO POR la cláusula:

seleccione first_name, job_id, &&col de EMPLOYEES donde job_id en ('MK_MAN', 'SA_MAN') piden por &col;

Como la Figura 3-22 demuestra, en el tiempo de ejecución, usted es apremio para proporcionar un

valor para el doble signo "" la variable llamó al Coronel. Usted podría escribir, por ejemplo, la columna llamada el SUELDO y presentar su ingreso. La select que ejecuta realiza la substitución y recupera el FIRST_NAME, JOB_ID, y columnas de SUELDO de la comando de EMPLOYEES clasificada por el SUELDO.

A diferencia de carácter y literales de fecha, las referencias de nombre de columna no requieren citas solas tanto cuando explícitamente especificado como cuando substituido vía la substitución de signo "".

Substituyendo Expresiones y texto Casi cualquier elemento de una select SQL puede ser substituido en el tiempo de ejecución. La coacción consiste en que el Oracle requiere al menos que la primera palabra sea estática. En instancia de la select SENTENCIA, en el muy mínimo, la palabra clave SENTENCIA se requiere y el resto de la select puede ser substituido como sigue:

escogido &rest_of_statement;

148 Capítulo 3:

La restricción y la Comandoación de Datos

Page 130: curso_sql_certificacion

FIGURA 3-22

Substitución de nombres de columna

Cuando ejecutado, usted es apremio para presentar un valor para la variable llamada: REST_OF_STATEMENT, que podría ser cualquier pregunta legítima, como el DEPARTMENT_NAME de DEPARMENTS. Si usted presenta este texto como introducido para la variable, la pregunta que es ejecutada será resuelta a la select siguiente:

seleccione department_name de DEPARTMENTS;

Considere la forma general de la select SQL vuelta a escribir usando el signo "" substitución, como mostrado después:

seleccione &SELECT_CLAUSE de &FROM_CLAUSE donde &WHERE_CLAUSE piden por &ORDER_BY_CLAUSE;

La utilidad de esta select es discutible, pero esto realmente ilustra el concepto de substitución con eficacia. Como la Figura 3-23 muestra, la select precedente permite que cualquier pregunta hablada hasta ahora sea presentada en el tiempo de ejecución. La primera ejecución pregunta la comando de REGIONS, mientras la segunda ejecución pregunta la comando de COUNTRIES. Los candidatos útiles por la substitución de signo "" son select que son ejecutadas tiempos múltiples y se diferencian ligeramente el uno del otro.

Substitución de signo ""

149

FIGURA 3-23

La substitución de expresiones y texto

Page 131: curso_sql_certificacion

Defina y Verifique La doble substitución de signo "" es usada para evitar el ingreso reiterativo cuando la misma variable ocurre tiempos múltiples en una select. Cuando una doble substitución de signo "" ocurre, la variable es almacenada como una variable de sesión. Como la select ejecuta, todos los acontecimientos adicionales de la variable son automáticamente resueltos usando la variable de sesión almacenada. Cualquier ejecución subsecuente de la select dentro de la misma sesión automáticamente resuelve las variables de substitución de valores de sesión almacenados. Esto no siempre es deseable y en efecto limita la utilidad de variables de substitución. El oracle realmente proporciona, sin embargo, un mecanismo a UNDEFINE estas variables de sesión.

150 Capítulo 3:

La restricción y la Comandoación de Datos

DENTRO DEL EXAMEN

Hay tres objetivos de certificación en este capítulo. La limitación de las filas recuperadas por una pregunta introdujo el DONDE la cláusula, que prácticamente demuestra el concepto de la selección. Las condiciones que limitan las filas volvieron están basados en comparaciones usando el ENTRE, EN, COMO, Igualdad, e Inequal-ity operadores. Su entendimiento cuidadoso de estos operadores de comparación y su comportamiento con el carácter, numérico, y tipos de datos de fecha será examinado, junto con como ellos son diferentes del Booleano NO, Y, y U OPERADORES.

La utilización del PEDIDO POR la cláusula para clasificar resultados recuperados es opcional y muy útil. Las preguntas de examen que prueban los conceptos de la comandoación tradicional, posicional, y compuesta, junto con como los valores NULOS pueden ser manejados, son comunes. Cuando términos

Page 132: curso_sql_certificacion

de clase múltiples son

presente en el PEDIDO POR la cláusula, es aceptan - capaz de especificar pedidos de comandoación ascendente por unos y bajando pedidos de clase por otros. Es un error común para olvidar que el Oracle pro - vides esto mezcló el aspecto de comandoación también para la especificación del NULLS FIRST|LAST modificador.

Su entendimiento de la substitución usando signos "" solos y dobles así como DEFINIR y comandos de UNDEFINE será probado. Pueden darle una select que incluye una doble substitución de signo "" vari-capaz que es referido posteriormente tiempos múltiples en la select, junto con una variable de substitución de signo "" sola; se esperará que usted entienda las diferencias en su comportamiento. Su entendimiento de nombre de columna, expresión, y substitución de texto también será medido.

El comando VERIFICAR es específico para SQL*Plus y controla si los elementos substituidos son repetidos en la pantalla del usuario antes de la ejecución de una select SQL que variables de substitución de usos. Hablan de estos comandos en las siguientes secciones.

DEFINIR y las variables de nivel de Sesión de Comandos de UNDEFINE son implícitamente creados cuando los se los refieren al principio en select SQL usando la doble substitución de signo "". Ellos persisten o permanecen disponibles para la duración de la sesión o hasta que ellos sean explícitamente indeterminados. Una sesión se termina cuando el usuario sale su instrumento de cliente como SQL*Plus o cuando el proceso de usuario es terminado anormalmente.

Substitución de signo ""

151

El problema con variables de sesión persistentes es ellos tienden a quitar mérito a la naturaleza genérica de select que variables de substitución de signo "" de uso. Por suerte, estas variables de sesión pueden ser borradas con el comando de UNDEFINE. Dentro de una escritura o en la línea de comandos de SQL*Plus o Developer SQL, la sintaxis para no definir variables de sesión es como sigue:

Variable de UNDEFINE; Considere un ejemplo genérico simple que selecciona una columna estática y

variable de la comando de EMPLOYEES y clases salida de basado en la columna variable. La columna estática podría ser la columna LAST_NAME.

seleccione last_name, &&COLNAME de EMPLOYEES donde department_id=30 piden por &COLNAME;

La primera vez que esta select ejecuta, usted es apremio para introducir un valor para la variable llamada COLNAME. Vaya a suponer que usted escriba el SUELDO. Este valor es substituido y la select ejecuta. Una ejecución subsecuente de esta select dentro de la misma sesión no apremio para ningún valor de COLNAME ya que es definido ya como el SUELDO en el contexto de esta sesión y sólo puede ser indeterminado con NO DEFINIR el comando de COLNAME, como mostrado en la Figura 3-24. Una vez que la variable ha sido indeterminada, la siguiente ejecución de la select apremio al usuario para un valor para la variable COLNAME.

Page 133: curso_sql_certificacion

El comando DEFINIR sirve dos objetivos. Esto puede ser usado para recuperar una lista de todas las variables actualmente definidas en su sesión SQL; esto también puede ser usado explícitamente para definir un valor para una variable referida como una variable de substitución por una o varias select durante la vida de aquella sesión. La sintaxis para las dos variantes del comando DEFINIR es como sigue:

DEFINA; DEFINA variable=value;

Como la Figura 3-25 demuestra, una variable llamada EMPNAME es definida explícitamente tener el valor 'Rey'. Los independientes DEFINEN el comando en SQL*Plus entonces devuelve varias variables de sesión prefijadas con un carácter subrayar así como otras variables familiares, incluso EMPNAME y dobles variables de substitución de signo "" implícitamente definidas antes. Dos ejemplos de pregunta diferentes pero simplistas son ejecutados, y la variable de substitución explícitamente definida EMPNAME es referido por ambas preguntas. Finalmente, la variable es INDETERMINADA.

152 Capítulo 3:

La restricción y la Comandoación de Datos

FIGURA 3-24

El comando de UNDEFINE

Page 134: curso_sql_certificacion

La capacidad del instrumento de cliente SQL de apoyar variables persistentes por la sesión puede ser apagada y en como requerido usando el comando de SET. El comando de SET no es un comando de lenguaje SQL, pero mejor dicho un comando de control de entorno SQL. Especificando el SET DEFINEN LEJOS, el instrumento de cliente (por ejemplo, SQL*Plus) no guarda variables de sesión o adjunta el sentido especial al símbolo de signo "". Esto permite que el símbolo de signo "" sea usado como un carácter literal ordinario si es necesario. El SET DEFINE el comando de ON|OFF por lo tanto determina si la substitución de signo "" está disponible en su sesión.

Substitución de signo ""

153

FIGURA 3-25

El comando DEFINIR

El ejemplo siguiente usa el símbolo de signo "" como un valor literal. Cuando ejecutado, usted es apremio para sugerir que un valor para liga la variable SID.

seleccione 'Coda & Sid' del dual;

Apagando la funcionalidad de substitución de signo "" como sigue, esta pregunta

puede sea ejecutado sin apremio:

SET DEFINE DE 'Coda & Sid' escogido de dual; SET DEFINE EN

Una vez que la select ejecuta, el SET DEFINEN EN el comando puede ser usado encender la funcionalidad de substitución atrás. Si DEFINEN es HECHO RESALTAR

Page 135: curso_sql_certificacion

y el contexto que un signo "" es usado en una select no puede ser resuelto literalmente, el Oracle devuelve un error.

154 Capítulo 3:

La restricción y la Comandoación de Datos

GUIÓN & SOLUCIÓN La lista SENTENCIA de una pregunta contiene una columna sola. ¿Es posible clasificar los resultados recuperados por esta pregunta por otra columna? Sí. A menos que la comandoación posicional sea usada, el PEDIDO POR la cláusula es independiente de la cláusula SENTENCIA en una select. Las variables de substitución de signo "" apoyan la reutilizabilidad de select SQL reiterativamente ejecutadas. ¿Si un valor substituido debe ser usado tiempos múltiples en partes diferentes de la misma select, es posible ser apremio para presentar un valor de substitución sólo una vez y para aquel valor para ser automáticamente substituido durante referencias subsecuentes a la misma variable? Sí. Los dos métodos que pueden ser usados son la doble substitución de signo "" o el comando DEFINIR. Ambos métodos causan el ingreso de suministro de usuario para una variable de substitución específica una vez. Este valor permanece atado a la variable para la duración de la sesión a menos que sea explícitamente INDETERMINADO. Usted ha sido encargado para recuperar el LAST_NAME y valores de DEPARTMENT_ID para todas las filas en la comando de EMPLOYEES. Salida debe ser clasificada por el nullable DEPARTMENT_ID columna, y todas las filas con valores de DEPARTMENT_ID nulos deben ser puestas en una lista últimas. ¿Es posible proporcionar los resultados como solicitado? Sí. El PEDIDO POR la cláusula asegura la comandoación por columnas que potencialmente contienen valores NULOS permitiendo los modificadores NULLS PRIMERO o NULLS ÚLTIMO ser especificadas. La pregunta siguiente localiza las filas requeridas: SELECCIONE LAST_NAME, DEPARTMENT_ID del PEDIDO DE EMPLOYEES POR DEPARTMENT_ID NULLS ÚLTIMO;

El Comando VERIFICAR Como hablado antes, dos categorías de comandos están disponibles tratando con el servidor de Oracle: la lenguaje de SQL manda y los comandos de control de cliente SQL. La select SENTENCIA es un ejemplo de un comando de lenguaje, mientras el comando de SET controla el entorno de cliente SQL. Hay muchos lenguaje diferente y controla comandos disponibles, pero los comandos de control pertinentes a la substitución son DEFINEN y VERIFICAN.

El comando VERIFICAR controla si la variable de substitución presentada es mostrada onscreen entonces usted puede verificar que la substitución correcta ha ocurrido. Un mensaje es mostrado pruebas la vieja cláusula seguida de la nueva cláusula que contiene el valor substituido. El comando VERIFICAR es encendido y Fuera el conjunto de comandos VERIFICAN A ON|OFF. Como la Figura 3-26 muestra, VERIFIQUE es apagado primero, una pregunta que usa la substitución de signo "" es ejecutada, y usted es apremio para introducir un valor. El valor es substituido entonces, las carreras de select, y sus resultados son mostrados.

VERIFIQUE es encendido entonces, la misma pregunta es ejecutada, y usted es apremio para introducir un valor. Una vez que el valor es introducido y antes de que la select comience la ejecución, el Oracle muestra la cláusula que contiene la referencia a la variable de substitución como la vieja cláusula con su número de línea y, inmediatamente debajo de esto, la nueva cláusula muestra la select que contiene el valor

Page 136: curso_sql_certificacion

substituido. Substitución de signo ""

155

FIGURA 3-26

El comando VERIFICAR

EJERZA 3-3 Substitución de Signo "" de Utilización Un cálculo común realizado por el Departamento de recursos humanos está relacionado

con el cálculo de impuestos impuesto sobre un empleado. Aunque, esto sea hecho para todos los EMPLOYEES, siempre hay unos EMPLOYEES que disputan el impuesto descontado de sus ingresos. El impuesto descontado por empleado es calculado obteniendo el sueldo anual para el empleado y multiplicando esto por la tasa impositiva corriente, que puede variar del año al año. Se requiere que usted escriba una pregunta reutilizable usando la tasa impositiva corriente y el número EMPLOYEE_ID como ingresos y devuelva el EMPLOYEE_ID, FIRST_NAME, SUELDO, SUELDO ANUAL (SUELDO * 12), TAX_RATE, e IMPUESTO (TAX_RATE * SUELDO ANUAL) información.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La lista sentencia debe incluir las cuatro columnas especificadas así como dos ex -

pressions. La primera expresión aliased como el SUELDO ANUAL es un cálculo simple, mientras la segunda expresión aliased como el IMPUESTO depende del TAX_RATE. Ya que la TASA IMPOSITIVA puede variar, este valor debe ser substituido en el tiempo de ejecución.

156 Capítulo 3:

La restricción y la Comandoación de Datos

Page 137: curso_sql_certificacion

3. La cláusula SENTENCIA es SELECCIONE &&EMPLOYEE_ID, FIRST_NAME, SUELDO, SUELDO * 12 COMO "SUELDO ANUAL", &&TAX_RATE, (&TAX_RATE * (SUELDO * 12)) COMO "EL IMPUESTO"

4. El doble signo "" que precede a EMPLOYEE_ID y TAX_RATE en el La cláusula SENTENCIA estipula al Oracle que cuando la select es ejecutada el usuario debe ser apremio para presentar un valor para cada variable de substitución que será usada dondequiera que los se los refieran posteriormente como &EMPLOYEE_ID y &TAX_RATE, respectivamente.

5. El DE la cláusula es DE EMPLOYEES 6. El DONDE la cláusula sólo debe permitir la fila cuyo valor de EMPLOYEE_ID es especificado en tiempo de ejecución. 7. El DONDE la cláusula es DONDE EMPLOYEE_ID = &EMPLOYEE_ID 8. La ejecución de esta select devuelve el SET de

resultados mostrados en el siguiente ilustración.

RESUMEN DE CERTIFICACIÓN Resumen de certificación

157

EL DONDE la cláusula proporciona la lenguaje que habilita la selección en el

ESCOGIDO select. Los criterios para la inclusión o excluyendo filas toman la forma de condiciones. Operadores de comparación que usan, dos términos son el uno comparado con el otro y la condición es evaluada como verdadero o falso para cada fila. Estos términos pueden ser valores de columna, literales, o expresiones. Si la suma Booleana de los resultados de cada condición evalúa al verdadero para una fila particular, entonces aquella fila es recuperada. Los operadores condicionales permiten que términos sean el uno comparado con el otro en una variedad de caminos incluso igualdad, desigualdad, variedad basada, ingreso de SET, y modelo de carácter que empareja la comparación.

Una vez que un SET de datos es aislado por su pregunta, el PEDIDO POR la cláusula facilita clasificar las filas recuperadas basadas en numérico, fecha o columnas de carácter o expresiones. Los resultados pueden ser clasificados usando combinaciones de columnas o expresiones o ambos. Los datos son clasificados en comando ascendente en ausencia.

Las select genéricas, reutilizables pueden ser construidas usando variables de substitución de signo "" que apremio para valores de tiempo de ejecución durante la ejecución. Las variables de substitución persistentes por la sesión pueden ser definidas y son muy convenientes en situaciones donde muchas substituciones de la misma variable ocurren en una select o escritura.

La select SENTENCIA simple ha sido ampliada para incluir un DONDE, y PEDIDO POR la cláusula. Estos componentes básicos básicos ofrecen una lenguaje práctica y útil que puede ser aplicada mientras usted construye su conocimiento de SQL.

158 Capítulo 3:

Page 138: curso_sql_certificacion

La restricción y la Comandoación de Datos

✓TALADRADORA DE DOS MINUTOS

Limite las Filas Recuperadas por una Pregunta ❑ el DONDE la cláusula amplía la select SENTENCIA proporcionando la lenguaje

esto habilita la selección. ❑ Una o varias condiciones constituyen un DONDE cláusula. Estas condiciones especifican

las reglas a las cuales los datos en fila deben conformarse para ser elegibles para la selección. ❑ Para cada fila probada en una condición, hay términos a la izquierda y el derecho de a

operador de comparación. Los términos en una condición pueden ser valores de columna, literales, o expresiones.

❑ operadores de Comparación puede probar dos términos desde muchos puntos de vista. Igualdad o desigualdad

las pruebas son mucho común, pero variedad, SET, y las comparaciones de modelo también están disponibles. ❑ comparación de Variedad es realizado usando el ENTRE el operador, que prueba

si un término se cae entre principio dado y valores límites de final. ❑ ingreso de SET es probado usando el EN el operador. Una condición basada en un SET

la comparación evalúa al verdadero si el término de izquierda es puesto en una lista en el SET citado del modo solo, delimitado por la coma en la derecha.

❑ El operador PARECIDO habilita modelos de carácter literales para ser emparejados con otros literales, valores de columna, o expresiones evaluadas. El símbolo de porcentaje (%) se comporta como un comodín que empareja el cero o más carácteres. El símbolo subrayar (_) se comporta como un comodín de carácter solo que empareja exactamente un otro carácter.

❑ operadores Booleanos incluyen el Y, O, y NO operadores. El Y y O los operadores habilitan cláusulas condicionales múltiples para ser especificadas. Éstos son a veces mandados a como múltiples DONDE cláusulas.

❑ el NO el operador niega al operador de comparación implicado en una condición.

Clasifique las Filas Recuperadas por una Pregunta ❑ Resultados son clasificados usando el PEDIDO POR la cláusula. Las filas recuperadas pueden

ser pedido según una o varias columnas especificando los nombres de columna o su posición numérica en la cláusula SENTENCIA.

❑ El clasificado salida puede ser arreglado en utilización de comando ascendente o bajada el DESC o los modificadores ASC después de la clase llaman en el PEDIDO POR la

cláusula.

Page 139: curso_sql_certificacion

Substitución de signo "" Taladradora de dos minutos

159 ❑ substitución de Signo "" facilita la reutilización de select SQL proporcionando un medio

substituir elementos de una select en tiempo de ejecución. La misma select SQL puede ser por lo tanto ejecutada tiempos múltiples con parámetros de ingreso diferentes.

❑ substitución de signo "" Sola requiere la introducción de datos por el usuario para cada acontecimiento de

la variable de substitución en la select. La doble substitución de signo "" requiere la introducción de datos por el usuario sólo una vez por acontecimiento de una variable de substitución, ya que esto define una variable persistente por la sesión con el valor de ingreso dado.

❑ variables persistentes por la Sesión puede ser puesto explícitamente usando el comando DEFINIR. El comando de UNDEFINE puede ser usado para no poner a ambos implícitamente (doble substitución de signo "") y variables de sesión explícitamente definidas.

❑ VERIFICAR el ajuste ambiental controla si SQL*Plus muestra el las viejas y nuevas versiones de líneas de select que contienen variables de substitución.

160 Capítulo 3:

La restricción y la Comandoación de Datos

MÍ PRUEBA Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Limite las Filas Recuperadas por una Pregunta

1. ¿Qué dos cláusulas de la select SENTENCIA facilitan la selección y la proyección?

A. ESCOGIDO, DE B. PEDIDO POR, DONDE C. ESCOGIDO, DONDE D. ESCOGIDO, PIDA

POR

2. Elija la pregunta que extrae el LAST_NAME, JOB_ID, y valores de SUELDO del La comando de EMPLOYEES para archivos que tienen valores de JOB_ID de SA_REP o de MK_MAN y tienen el SUELDO valora en la variedad de 1000$ a 4000$. Los ESCOGIDOS y DE cláusulas son LAST_NAME escogido, JOB_ID, SUELDO DE EMPLOYEES: A. DONDE JOB_ID EN ('SA_REP', 'MK_MAN')

Y SUELDO> 1000 Y SUELDO <4000; B. DONDE JOB_ID EN ('SA_REP', 'MK_MAN')

Y SUELDO ENTRE 1000 Y 4000; C. DONDE JOB_ID COMO '% DE SA_REP' Y '% DE MK_MAN'

Y SUELDO> 1000 Y SUELDO <4000; D. DONDE JOB_ID = 'SA_REP'

Page 140: curso_sql_certificacion

Y SUELDO ENTRE 1000 Y 4000 O JOB_ID ='MK_MAN'; 3. ¿Cuál del siguiente DÓNDE cláusulas contiene un error? Los ESCOGIDOS y DE cláusulas son

SELECCIONE * DE EMPLOYEES: A. DONDE HIRE_DATE EN ('02-JUN-2004'); B. DONDE SUELDO EN ('1000', '4000', '2000'); C. DONDE JOB_ID EN (SA_REP, MK_MAN); D. DONDE COMMISSION_PCT ENTRE 0.1 Y 0.5;

Mí Prueba

161

4. Elija el DONDE la cláusula que extrae los valores de DEPARTMENT_NAME que contienen el carácter "er" literal de la comando de DEPARTMENTS. Los ESCOGIDOS y DE cláusulas son DEPARTMENT_NAME escogido DE DEPARTMENTS: A. DONDE DEPARTMENT_NAME EN (' %e%r'); B. DONDE DEPARTMENT_NAME COMO '%er %'; C. DONDE DEPARTMENT_NAME ENTRE 'e' Y 'r'; D. DONDE DEPARTMENT_NAME CONTIENE 'e%r';

5. ¿Qué dos de las condiciones siguientes son equivalentes el uno al otro? A. DONDE COMMISSION_PCT ES B NULO. DONDE COMMISSION_PCT = C NULO. DONDE COMMISSION_PCT EN D (NULO). DONDE NO (COMMISSION_PCT NO ES NULO)

6. ¿Qué tres de las condiciones siguientes son equivalentes el uno al otro? A. DONDE SUELDO <=5000 Y SUELDO> =2000 B. DONDE SUELDO EN (2000,3000,4000,5000) C. DONDE SUELDO ENTRE 2000 Y 5000 D. DONDE SUELDO> 1999 Y SUELDO <5001 E. DONDE SUELDO> =2000 Y <=5000

Clasifique las Filas Recuperadas por una Pregunta

7. Elija una select falsa sobre el PEDIDO POR la cláusula.

A. Usando el PEDIDO POR la cláusula, siempre aparece como la última cláusula en una select

SENTENCIA. B. El PEDIDO POR la cláusula puede aparecer en una select SENTENCIA que no

contiene a DONDE cláusula.

C. El PEDIDO POR la cláusula especifica uno o varios términos por los cuales las filas recuperadas son clasificadas.

Estos términos sólo pueden ser nombres de columna. D. La comandoación posicional es llevada a cabo especificando la posición numérica de una

columna como ello ap- peras en la lista SENTENCIA, en el PEDIDO POR cláusula.

8. La pregunta siguiente recupera el LAST_NAME, SUELDO, y valores de COMMISSION_PCT para EMPLOYEES cuyo LAST_NAME comienza con la carta R. Basado en la pregunta siguiente, elija el PEDIDO POR la cláusula que primeras clases los resultados por la columna COMMISSION_PCT,

162 Capítulo 3:

La restricción y la Comandoación de Datos

el listado de los asalariados de comisión más altos primero, y luego clasifica los resultados en comando ascendente por la columna de SUELDO. Cualquier archivo con COMMISSION_PCT

Page 141: curso_sql_certificacion

nulo debe parecer último: SELECCIONE LAST_NAME, SUELDO, COMMISSION_PCT DE EMPLOYEES DONDE LAST_NAME COMO 'R %' A. PEDIDO POR COMMISSION_PCT DESC, 2; B. PEDIDO POR 3 DESC, 2 ASC NULLS ÚLTIMO; C. PEDIDO POR 3 DESC NULLS ÚLTIMO, 2 ASC; D. PEDIDO POR COMMISSION_PCT DESC, SUELDO ASC;

Substitución de signo ""

9. El comando DEFINIR explícitamente declara una variable de substitución persistente por la sesión

con a valor específico. ¿Cómo es esto variable referido en una select SQL? Considere una expresión que calcula el impuesto sobre el SUELDO de un empleado basado en la tasa impositiva corriente. ¿Para la variable de substitución persistente por la sesión siguiente, qué select correctamente se refiere a la variable TAX_RATE? DEFINA TAX_RATE=0.14 A. SUELDO ESCOGIDO *:TAX_RATE IMPUESTO DE EMPLOYEES; B. SUELDO ESCOGIDO * &TAX_RATE IMPUESTO DE EMPLOYEES; C. SUELDO ESCOGIDO * :&&TAX IMPUESTO DE EMPLOYEES; D. SUELDO ESCOGIDO * IMPUESTO de TAX_RATE DE EMPLOYEES;

10. Usando variables de substitución de signo "" en la pregunta siguiente, cuantas veces le va ¿sea apremio para introducir un valor para la variable llamada HACEN TRABAJOS TEMPORALES la primera vez que esta pregunta es ejecutada? SELECCIONE FIRST_NAME, '&JOB' DE EMPLOYEES DONDE JOB_ID COMO 'el % '||&JOB||' %' Y '&&JOB' ENTRE UN Y 'Z'; A. 0 B. 1 C. 2 D. 3

PREGUNTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

Pregunta de laboratorio

163

Un cliente requiere una unidad de disco duro y una tarjeta de gráficos para su comandoador personal. Ella quiere gastar entre 500$ y 800$ en la unidad de discos, pero es insegura del coste de una tarjeta de gráficos. Su único requisito es que la resolución apoyada por la tarjeta de gráficos debería ser 1024768 o 12801024. Como el representante de ventas, usted ha sido encargado para escribir una pregunta que busca la comando PRODUCT_INFORMATION donde el valor de PRODUCT_NAME comienza con el HD (disco duro) o GP (procesador de gráficos) y sus precios de catálogo. Recuerde que los precios de catálogo de disco duro deben estar entre 500$ y 800$ y los procesadores de gráficos tienen que apoyar 1024768 o 12801024. Clasifique los resultados en la bajada del pedido de LIST_PRICE.

164 Capítulo 3:

La restricción y la Comandoación de Datos

MÍ PRUEBAN RESPUESTAS

Limite las Filas Recuperadas por una

Page 142: curso_sql_certificacion

Pregunta 1. ® C. La cláusula SENTENCIA facilita la proyección especificando la lista de columnas para ser ✓

proyectado de una comando, mientras el DONDE la cláusula facilita la selección limitando

las filas recuperó basado en sus condiciones. Los ® A, B, y D son incorrectos porque el DE la cláusula especifica la fuente de las filas que son ˚proyectado y el PEDIDO POR la cláusula es usado para clasificar las filas seleccionadas.

2. ® B. El EN el operador eficazmente prueba si el JOB_ID para una fila particular es cualquiera SA_ ✓

EL REPRESENTANTE o MK_MAN, mientras el ENTRE el operador eficazmente mide si el valor

de SUELDO de un empleado se cae dentro de la variedad requerida. Los ® A y C excluyen a EMPLOYEES que ganan un sueldo de 1000$ o 4000$, desde éstos SUELDO ˚los valores son excluidos por los operadores de desigualdad. C también selecciona valores de JOB_ID como % SA_REP y % MK_MAN, potencialmente seleccionando valores de JOB_ID incorrectos. El D es el derecho de mitad. La primera mitad devuelve las filas con el JOB_ID igual a SA_REP que tiene valores de SUELDO entre 1000$ y 4000$. Sin embargo, la segunda parte (el O cláusula), correctamente prueba del JOB_ID igual al HOMBRE MK_, pero no hace instancia de la condición de SUELDO.

3. ® C. Los literales de carácter que son comparado con la columna JOB_ID por el EN el operador deben ✓

sea encerrado por comillas solas. Los ® A, B, y D son sintácticamente correctos. Note que B no requiere citas alrededor del ˚literales numéricos. Tenerlos, sin embargo, no causa un error.

4. ® B. El operador PARECIDO prueba la columna DEPARTMENT_NAME de cada fila para valores ✓

esto contiene los carácteres "er". Los símbolos de porcentaje antes y después del carácter literal

indican que cualquier carácter que encierra el literal "er" es permisible. Los ® A y C son sintácticamente correctos. Unos usos el EN el operador, que está acostumbrado al equipo de prueba ˚ingreso. El C prueba si el valor alfabético de la columna DEPARTMENT_NAME está entre la carta "e" y la carta "r". Finalmente, el D usa la palabra "contiene", que no puede ser usado en este contexto.

5. ® A y D. SER el operador NULO correctamente evalúa la columna COMMISSION_PCT para ✓

Valores NULOS. El D usa el NO operador para negar la versión ya negativa de SER el operador

NULO, no es NULO. Dos negativas devuelven un positivo, y por lo tanto A y D son equivalentes. Los ® B y C son incorrectos ya que los valores NULOS no pueden ser probados por el operador de igualdad o el ˚EN operador.

Mí Respuestas de Prueba

165

6. ® A, C, y D. Cada una de estas condiciones prueba de valores de SUELDO en la variedad de 2000$ a ✓

5000$.

Page 143: curso_sql_certificacion

Los ® B y E son incorrectos. El B excluye valores como 2500$ de su SET, y E es ilegal ya que es ˚las ausencias de la columna de SUELDO llaman la referencia por el Y operador.

Clasifique las Filas Recuperadas por una Pregunta 7. ® C. Los términos especificados en un PEDIDO POR la cláusula pueden incluir nombres de columna, ✓ posicional

la comandoación, valores numéricos, y expresiones. Los ® A, B, y D son verdad. ˚

8. ® C. La comandoación posicional es realizada, y el tercer término en la lista SENTENCIA, COMMISSION_ ✓

P.C., es clasificado primero en el pedido inclinado, y cualquier valor de COMMISSION_PCT nulo

es puesto en una lista último. El segundo término en la lista SENTENCIA, SUELDO, es clasificado

después en comando ascendente. Los ® A, B, y D son incorrectos. No especifica que hacer con COMMISSION_ nulo ˚Los valores de P.C., y el comportamiento por defecto durante una clase inclinada deben poner NULLS en una lista PRIMERO. El B aplica el NULLS ÚLTIMO modificador a la columna de SUELDO en vez de la columna de P.C. COMMISSION_, y D no hace instancia de NULLS completamente.

Substitución de signo "" 9. ® B. Puede referirse una variable de substitución persistente por la sesión usando un símbolo de signo "" ✓

desde dentro cualquier select SQL ejecutada en aquella sesión. Los ® A, C, y D son incorrectos. A y D intentan referirse a la variable de substitución que usa ˚un prefijo de colon a su nombre y el nombre de variable solo. Éstos son referencias inválidas a variables de substitución en SQL. El C se refiere a una variable llamada el IMPUESTO y no TAX_RATE variable.

10. ® D. La primera vez que esta select es ejecutada, dos variables de substitución de signo "" solas son ✓

encontrado antes de la tercera doble variable de substitución de signo "". Si la primera referencia en

línea una de la pregunta contuviera una doble substitución de signo "", usted sólo sería apremio

para introducir un valor una vez. Los ® A, B, y C son incorrectos ya que usted es apremio tres veces para introducir un valor para el TRABAJO ˚variable de substitución. En ejecuciones subsecuentes de esta select en la misma sesión usted no será apremio para introducir un valor para esta variable.

166 Capítulo 3:

La restricción y la Comandoación de Datos

RESPUESTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

Se requiere que usted pregunte la comando PRODUCT_INFORMATION en el esquema OE para el

Page 144: curso_sql_certificacion

PRODUCT_NAME y columnas LIST_PRICE. Las filas seleccionadas deben conformarse con cualquiera de dos condiciones. La primera condición consiste en que el PRODUCT_NAME debe comenzar con los carácteres 'HD' y su LIST_PRICE debe caerse a la variedad entre 500$ y 800$. Alternativamente, la fila puede engañar - forma a la segunda condición que el PRODUCT_NAME debe comenzar con los carácteres 'GP' y contener los carácteres '1024'. Finalmente, los resultados deben ser clasificados en la bajada del pedido de LIST_PRICE.

1. Comience al Developer SQL y conecte al esquema OE. 2. La cláusula SENTENCIA es SELECCIONE PRODUCT_NAME, LIST_PRICE

3. El DE la cláusula es DE PRODUCT_INFORMATION

4. La primera condición es PRODUCT_NAME COMO '% DE HD' Y LIST_PRICE ENTRE 500 Y 800

5. La segunda condición es PRODUCT_NAME COMO '% DE GP%1024'

6. Desde la primera o segunda condición debe ser realizada por una fila a fin de ser recuperada, estas dos condiciones deben ser separadas con el Booleano U OPERADOR.

7. El DONDE la cláusula es DONDE (PRODUCT_NAME COMO '% DE HD' Y LIST_PRICE ENTRE 500 Y 800) O (PRODUCT_NAME COMO '% DE GP%1024')

8. El PEDIDO POR cláusula es PEDIDO POR LIST_PRICE DESC

9. La ejecución de esta select devuelve el SET de resultados que emparejan este modelo como mostrado en

la ilustración: Respuesta de laboratorio

167

Esta página intencionadamente se dejó en blanco

4Funciones de fila sola

OBJETIVOS DE CERTIFICACIÓN

Page 145: curso_sql_certificacion

4.01

4.02

Describa Diversos tipos de Funciones Disponibles en SQL

Use Carácter, Número, y Fecha Funciones en Select SENTENCIAS

✓Q&A

Taladradora de dos minutos

Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

170 Capítulo 4:

Funciones de fila sola

Las funciones son una maravillosa extensión

a SQL y proporcionan una primera vislumbre de los apoyos de Oracle de capacidades procesales.

Page 146: curso_sql_certificacion

Las lenguajejes procesales permiten un nivel rico de la programación

esto cede una variedad casi ilimitada de posibilidades de manipulación de datos. Servidor de oracle

pone en práctica una lenguaje procesal patentada llamada PL/SQL, o SQL procesal. Una variedad de los objetos de programmatic llamados pueden ser construidos usando PL/SQL. Éstos incluyen procedimientos, funciones, y paquetes. Aunque la escritura de PL/SQL sea relativamente franca, un entendimiento cuidadoso de SQL es un requisito previo y el foco de este guía. Las funciones habladas en este capítulo son encajonadas a programas de PL/SQL envasados y suministrados por el Oracle como aspectos incorporados.

OBJETIVO DE CERTIFICACIÓN 4.01

Describa Diversos tipos de Funciones Disponibles en SQL

Las funciones de SQL están ampliamente divididas en aquellos que calculan y

devuelven un valor para cada fila en un conjunto de datos y aquellos que devuelven un valor agregado solo para todas las filas. Las dos áreas siguientes son exploradas:

■ Definición de una función ■ Tipos de funciones

Definición de una Función Una función es un programa escrito para aceptar opcionalmente parámetros de ingreso,

funcionar un operación, o vuelta un valor solo. Una función devuelve sólo un valor por ejecución.

Tres componentes importantes forman la base de definir una función. El primer es la lista de parámetro de ingreso. Esto especifica el cero o más argumentos que pueden ser pasados a una función como introducido para el procesamiento. Estos argumentos o parámetros pueden ser de tipos de datos que se diferencian, y unos son obligatorios mientras los otros pueden ser opcionales. El segundo componente es el tipo de datos de su valor consiguiente. Después de la ejecución, sólo un valor es devuelto por la función. El tercer encapsula los detalles del procesamiento realizado por la función y contiene el código de programación que opcionalmente manipula los parámetros de ingreso, realiza cálculos y operaciones, y genera un valor de retorno.

Una función a menudo es descrita como una caja negra que toma un ingreso, realiza a cálculo, y vueltas un valor como ilustrado por la ecuación siguiente. En vez de

Describa Diversos tipos de Funciones Disponibles en SQL

171

Page 147: curso_sql_certificacion

concentrándose en sus detalles de realización, usted es animado a concentrarse en los aspectos que las funciones incorporadas proporcionan.

F (x, y, z, ) = resultado; las Funciones pueden ser anidadas dentro de otras funciones, como el F1 (x, y,

F2 (a, b), z), donde F2, que toma dos parámetros de ingreso, a y b, y forma el tercer de cuatro parámetros presentados a F1. Las funciones pueden actuar sobre cualquier tipo de datos disponible, el más popular que es carácter, fecha, y datos numéricos. Estos operands pueden ser columnas o expresiones.

Como un ejemplo, considere una función que calcula la edad de una persona. La función de EDAD toma un parámetro de ingreso de fecha, que es el cumpleaños de la persona. El resultado devuelto por la función de EDAD es un número que representa la edad de una persona. El cálculo de caja negra implica obtener la diferencia durante años entre la fecha corriente y el parámetro de ingreso de cumpleaños.

El funcionamiento en datos de Carácter de Datos de Carácter o cuerdas es versátil ya que ellos facilitan el almacenamiento de casi cualquier tipo de datos. Las funciones que actúan sobre datos de carácter son ampliamente clasificadas como conversión de instancia y funciones de manipulación de carácter. La cuerda siguiente las funciones incorporadas son examinadas detalladamente más tarde en este capítulo, pero una breve descripción es proporcionada aquí.

INFERIOR, SUPERIOR, e INITCAP son las funciones de conversión de instancia que converten una columna de carácter dada, literal, o expresión en minúscula, mayúscula, o instancia inicial, respectivamente:

más abajo ('SQL') = sql superior ('sql') = SQL initcap ('sql') = Sql

Las funciones de manipulación de carácter son excepcionalmente potentes e incluyen el LA LONGITUD, CONCAT, SUBSTR, INSTR, LPAD, RPAD, NETO, y REEMPLAZAN funciones.

La LONGITUD (cuerda) función usa una cadena de caracteres como un parámetro de ingreso y devuelve un valor numérico que representa el número de carácteres presentes en aquella cuerda:

longitud ('Una cuerda corta') = 14

El CONCAT (ensartan 1, ensartan 2) la función toma dos cuerdas y concadena o se afilia a ellos del mismo modo que el operador de encadenamiento || hace:

concat ('los is' de SQL,' fácil a aprender. ') = SQL es fácil a aprender.

172 Capítulo 4:

Funciones de fila sola

El SUBSTR (cuerda, comience la posición, el número de carácteres) la función acepta tres parámetros y devuelve una cuerda que consiste en el número de carácteres extraídos de la cuerda de la fuente, que comienza en la posición de principio especificada:

substr ('http://www.domain.com', 12,6) = dominio

El INSTR (cuerda de la fuente, busque el artículo, [posición de principio], [el

acontecimiento enésimo de la búsqueda

Page 148: curso_sql_certificacion

artículo]) la función devuelve un número que representa la posición en la cuerda de la fuente, que comienza de la posición de principio dada, donde el acontecimiento enésimo del artículo de búsqueda comienza:

instr ('http://www.domain.com','. ', 1,2) = 18

El LPAD (cuerda, longitud después de acolchado, rellenando cuerda) y RPAD (cuerda,

longitud después rellenando, rellenando la cuerda) las funciones añaden una serie de acolchado de carácteres a la izquierda o derecho de una cuerda hasta que esto alcance la longitud especificada después del acolchado.

La función NETA literalmente recorta de conducción o rastreo (o ambos) cadenas de caracteres de una cuerda de la fuente dada:

rpad ('#PASSWORD#', 11, '#') = #PASSWORD## lpad ('#PASSWORD#', 11, '#') = ##PASSWORD# neto ('#' de '#PASSWORD#') = CONTRASEÑA

REEMPLAZAR (cuerda, busque el artículo, el artículo de reemplazo) la función

localiza la búsqueda el artículo en una cuerda dada y lo reemplaza con el artículo de reemplazo, devolviendo una cuerda con valores reemplazados:

reemplace ('#PASSWORD#', 'PALABRA', 'PUERTO') = #PASSPORT#

Actuando sobre Datos Numéricos Muchas funciones incorporadas numéricas están disponibles. Unos calculan raíces cuadradas, realizan exponentiation, y converten números en el formato hexadecimal. Hay demasiado para mencionar, y muchos los cálculos matemáticos, científicos, y financieros populares han sido expuestos como funciones incorporadas por el Oracle.

Tres funciones numéricas comunes, examinadas más tarde en este capítulo, son REDONDAS, TRUNC, y MOD. POR AHÍ (número, precisión decimal) facilita acabar un número al valor más bajo o más alto dado un formato de precisión decimal:

la vuelta (42.39,1) = 42.4

El TRUNC (número, precisión decimal) la función deja o trunca el número dado un valor de precisión decimal:

trunc (42.39,1) = 42.3

Describa Diversos tipos de Funciones Disponibles en SQL

El MOD (dividendo, divisor) devuelve el resto de una operación de división:

mod (42,10) = 2

El funcionamiento en información de Fecha

173 El funcionamiento con valores de fecha puede ser provocativo. La realización de la aritmética de fecha que acomoda años bisiestos y longitudes de mes variables puede ser frustrante y susceptible de errores. El oracle se dirige a este desafío proporcionando el apoyo natal a la aritmética de fecha y varias funciones

Page 149: curso_sql_certificacion

de fecha incorporadas, como el MONTHS_BETWEEN, ADD_MONTHS, LAST_DAY, NEXT_DAY, SYSDATE, POR AHÍ, y TRUNC.

El MONTHS_BETWEEN (fecha 1, fecha 2) la función devuelve el número de meses entre dos fechas, mientras el ADD_MONTHS (fecha 1, número de meses) devuelve la fecha que resulta de añadir un número especificado de meses a una fecha:

months_between ('01-FEB-2008', '01-JAN-2008') = 1 add_months ('01-JAN-2008', 1) = 01-FEB-2008

Los LAST_DAY (fecha 1) funcionan vueltas el día anterior del mes que el la fecha especificada se cae en, mientras el NEXT_DAY (fecha 1, día de la semana) devuelve la fecha en cual el día especificado siguiente de las caídas de semana después de la fecha dada:

last_day ('01-FEB-2008') = 29-FEB-2008 next_day ('01-FEB-2008', 'el viernes') = 08-FEB-2008

La función de SYSDATE no toma ningunos parámetros y devuelve un valor de fecha esto representa la fecha de servidor corriente y tiempo. POR AHÍ (fecha, formato de precisión de fecha) y TRUNC (fecha, formato de precisión de fecha) por ahí y truncado un valor de fecha dado a la precisión de fecha más cercana formatean como día, mes, o año:

sysdate = 17-DEC-2007 por ahí (sysdate, 'mes') = 01-JAN-2008 trunc (sysdate, 'mes') = 01-DEC-2007

Las funciones de fila sola son usadas en casi cada pregunta publicada por analistas, developeres, y administradores. Buscando datos de carácter, la función NETA con frecuencia es usada para eliminar espacios suplementarios que ocurren en espacios de carácter. Las funciones de conversión de instancia son usadas para estandarizar los datos de columna. Esto facilita la busca más exacta y eficiente desde el instancia en el cual los datos de carácter son capturados a menudo es inconsecuente.

174 Capítulo 4:

Funciones de fila sola

Tipos de Funciones Hablan de dos amplios tipos de funciones que actúan sobre filas solas y múltiples, respectivamente, después. Esta distinción es esencial para el entendimiento del contexto más grande en el cual las funciones son usadas. El oracle continuamente se esfuerza por asegurar que su interpretación comercial de SQL se conforma con normas internacionales. Esto facilita la facilidad de la migración de habilidades y sistemas a través de vendedores y proveedores del software RDBMS. La realización del oracle de SQL es dócil con el ANSI:1999 (Instituto de Estándares Nacional americano) el estándar para SQL. Más recientemente, esto reclamó la conformidad parcial al estándar SQL:2003 endosado por amba organización internacional para la normalización (Organización internacional para la Estandarización) y ANSI. Las funciones de SQL han sido estandarizadas, y el Oracle ha documentado a aquellos que son totalmente o parcialmente dóciles al estándar SQL:2003.

Las Funciones de fila sola Allí son varias categorías de funciones de fila sola incluso el carácter, numérico, fecha, conversión, y general. El foco de este capítulo está en el carácter, numérico, y funciones de fila sola de fecha. Éstos son funciones que

Page 150: curso_sql_certificacion

actúan sobre una fila de un dataset a la vez. Si una pregunta selecciona 10 filas, la función es ejecutada 10 veces, una vez por fila con los valores de aquella fila como introducido a la función.

Como la Figura 4-1 muestra, dos columnas de la comando de REGIONS han sido seleccionadas junto con una expresión usando la función de LONGITUD con la columna REGION_NAME.

La longitud de la columna REGION_NAME es calculada para cada fila, depruebas que la función ha ejecutado cuatro veces separadas, devolviendo un resultado por fila.

Las funciones de fila sola manipulan los artículos de datos en fila para extraerlos y formatearlos con objetivos de visualización. Los valores de ingreso a una función de fila sola pueden ser el usuario - constantes especificadas o literales, datos de columna, variables, o las expresiones opcionalmente suministradas por otro anidaron funciones de fila sola. Anidar de funciones de fila sola es una técnica comúnmente usada. Las funciones pueden devolver un valor con un tipo de datos diferente de sus parámetros de ingreso. Como la Figura 4-1 demuestra, la función de LONGITUD acepta un parámetro de ingreso de carácter y vuelve un numérico salida.

Hablan de funciones de conversión como TO_CHAR, TO_NUMBER, y TO_DATE en el Capítulo 5. Ellos cambian el tipo de datos de datos de columna o expresiones que permiten otras funciones actuar sobre ellos. También hablan de las funciones generales en el Capítulo 5. Ellos simplifican el funcionamiento con valores NULOS y facilitan la lógica condicional dentro de una select SENTENCIA. Éstos incluyen el NVL, NVL2, NULLIF, SE FUNDEN, INSTANCIA, y DECODIFICAN funciones.

Aparte de su inclusión en la lista SENTENCIA de una pregunta de SQL, las funciones de fila sola pueden ser usadas en el DONDE y PEDIDO POR cláusulas. Suliste que haya un requisito para poner filas en una lista de la comando de REGIONS donde la longitud de los datos de columna REGION_NAME es al menos cinco carácteres mucho tiempo. Hay un adicional

Describa Diversos tipos de Funciones Disponibles en SQL

175

LA FIGURA 4-1 Una función de fila sola

Page 151: curso_sql_certificacion

necesidad de esta lista para ser clasificada en pedido alfabético basado en el valor del último carácter en la columna REGION_NAME. EL DONDE La cláusula es mostrada aquí:

donde longitud (region_name)> 4

Para obtener el último carácter en una cuerda, la función de SUBSTR es usada con el Columna de REGION_NAME como la cuerda de la fuente. La longitud del REGION_NAME es usada como la posición de principio, produciendo el PEDIDO siguiente POR la cláusula:

pedido por substr (region_name, longitud (region_name), 1)

Como la Figura 4-2 muestra, sólo tres de las cuatro REGIONS son devueltas, y la lista es clasificado en el pedido alfabético basado en el último carácter en la columna REGION_NAME para cada fila.

Las Funciones de fila múltiple Como el nombre sugieren, esta categoría de funciones actúa sobre más de una fila a la vez. Los usos típicos de funciones de fila múltiple incluyen el cálculo de la suma o el promedio de los valores de columna numéricos o contar el número total de archivos en SETs. Éstos son a veces conocidos como agregación o funciones de grupo y son explorados en el Capítulo 7.

176 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-2 Funciones en ESCOGIDO, DONDE, y PEDIDO POR cláusulas

Page 152: curso_sql_certificacion

Las funciones de fila sola son ejecutadas para cada fila en el conjunto de datos seleccionado. Este concepto es implícitamente probado vía ejemplos prácticos en el examen. Las funciones siempre devuelven sólo un valor de un tipo de datos predeterminado. Ellos pueden aceptar el cero o más parámetros de tipos de datos que se diferencian. Las funciones de carácter de fila sola

como la LONGITUD, SUBSTR, e INSTR son con frecuencia usados juntos, y se requiere un entendimiento cuidadoso de éstos. Recuerde que los parámetros de ingreso que pueden ser implícitamente convertidos a los tipos de datos requeridos por funciones son aceptables para el Oracle.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

OBJETIVO DE CERTIFICACIÓN 4.02

Page 153: curso_sql_certificacion

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS 177

Esta sección conduce una investigación detallada de las funciones de fila sola

introducidas antes. Un enfoque estructurado será tomado que incluye descripciones de función, reglas de sintaxis, descripciones de parámetro, y ejemplos de uso. Las funciones de conversión de instancia de carácter son examinadas, seguidas de las funciones de manipulación de carácter. Después, las funciones numéricas son examinadas, y la sección concluye con una discusión de las funciones de fecha.

La utilización de Funciones de Conversión de Instancia de Carácter Los datos de carácter pueden ser guardados en tablas de numerosas fuentes, incluso la

aplicación interfaces y programas de lote. No está seguro suponer que los datos de carácter hayan sido destinados en una manera consecuente. Las funciones de conversión de instancia de carácter sirven dos objetivos importantes. Ellos pueden ser usados primero, para modificar el aspecto de un artículo de datos de carácter con objetivos de visualización y en segundo lugar, ejecutarlos consecuente para operaciones de comparación. Es más simple buscar una cuerda usando un formato de instancia consecuente en vez de probar cada permutación de carácteres mayúsculos y minúsculos que podrían emparejar la cuerda. Es importante recordar que estas funciones no cambian los datos almacenados en tablas. Ellos todavía forman la parte de la pregunta de SQL sólo para leer.

Las funciones de carácter hablaron después esperan parámetros de cuerda. Éstos pueden ser cualquier cuerda literal, valor de columna de carácter, o expresión que causa un valor de carácter. Si es un numérico o un valor de fecha, es implícitamente convertido en una cuerda.

La Función INFERIOR La función INFERIOR converte una serie de carácteres en sus equivalentes minúsculos. Esto no añade carácteres suplementarios o acorta la longitud de la cuerda inicial. Los carácteres mayúsculos son convertidos en sus equivalentes minúsculos. Numérico, la puntuación, o carácteres especiales no es ignorada.

La función INFERIOR puede tomar sólo un parámetro. Su sintaxis es más BAJA (s). El las preguntas siguientes ilustran el uso de esta función:

La consulta 1: seleccione más abajo (100) de la Consulta 2 dual: seleccione más abajo (100+100) de la Consulta 3 dual: seleccione más abajo ('La SUMA '|| '100+100' ||' = 200') de dual

178 Capítulo 4:

Funciones de fila sola

Page 154: curso_sql_certificacion

Las consultas 1 y 2 devuelven las cuerdas 100 y 200, respectivamente. El parámetro al BAJE la función en la consulta 3 es una expresión de carácter y la cuerda devuelta por la función es "La suma 100 + 100 = 200."

La consulta 4: seleccione más abajo (SYSDATE) de la Consulta 5 dual: seleccione más abajo (SYSDATE+2) del dual

Suliste que la fecha de sistema actual sea: 17-DEC-2007. Vuelta de consultas 4 y 5 las cuerdas 17-dec-2007 y 19-dec-2007, respectivamente. Las expresiones de fecha son evaluadas e implícitamente convertidas en datos de carácter antes de que la función INFERIOR sea ejecutada.

Como la Figura 4-3 muestra, la función INFERIOR es usada en el DONDE la cláusula para localizar los archivos con las minúsculas "u" y "r" adyacente el uno al otro en el LAST_NAME para y devuelve la pelota.

Piense que la escritura de una pregunta alternativa devuelve los mismos resultados sin usar la función INFERIOR. Podría ser hecho como sigue:

seleccione first_name, last_name de EMPLOYEES donde last_name como '%ur %'

LA FIGURA 4-3 La función INFERIOR

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

o last_name como '%UR %' o last_name como '%uR %' o last_name como '%Ur %'

179 Esta pregunta trabajos pero es incómoda, y el número de O cláusulas requeridas

aumentos exponencialmente como la duración de los aumentos de cadena de búsqueda.

La Función SUPERIOR La función SUPERIOR es la parte de enfrente lógica de la función INFERIOR y converte una serie de carácteres en sus equivalentes mayúsculos. Esto no añade carácteres suplementarios o acorta la longitud de la cuerda inicial. Todos los carácteres minúsculos son convertidos en sus equivalentes mayúsculos. Numérico, la puntuación, o carácteres especiales no es ignorada.

La función SUPERIOR toma sólo un parámetro. Su sintaxis es SUPERIOR (s). Las preguntas siguientes ilustran el uso de esta función:

La consulta 1: seleccione superior (1+2.14) de la Consulta 2 dual: seleccione superior (SYSDATE) del dual

La consulta 1 devuelve la cuerda 3.14. El parámetro a la función SUPERIOR en la consulta 2 es SYSDATE, que devuelve la fecha de sistema actual. Ya que este valor es devuelto en la mayúscula en ausencia, ninguna conversión de instancia es realizada.

La función SUPERIOR es usada en la Figura 4-4 para extraer las filas de la comando de COUNTRIES donde los valores de COUNTRY_NAME contienen las cartas "U", "S", y "A" en aquel pedido. Las cartas "U", "S", y "A" no tienen que ser adyacentes el uno al otro.

La escritura de una pregunta alternativa para devolver los mismos resultados sin usar las funciones SUPERIORES o INFERIORES podría ser hecha usando una pregunta con ocho condiciones:

Page 155: curso_sql_certificacion

SELECCIONE * DE COUNTRIES DONDE country_name como '%u%s%a %' o country_name como '% de %u%s%A' o country_name como '%u%S%a %' o country_name como '% de %u%S%A' o country_name como '%U%s%a %' o country_name como '% de %U%s%A' o country_name como '%U%S%a %' o country_name como '% DE %U%S%A'

Esta pregunta trabajos pero es incómoda. El número de O las cláusulas se requieren aumentos exponencialmente como la duración de los aumentos de cadena de búsqueda.

La Función de INITCAP La función de INITCAP converte una serie de carácteres en el instancia capitalizado. A menudo es usado con objetivos de presentación de datos. Las primeras cartas de cada palabra en la cuerda son convertidas a sus equivalentes mayúsculos, mientras las cartas restantes de cada palabra son convertidas a sus equivalentes minúsculos. Una palabra es por lo general una serie de carácteres adyacentes separados por un espacio o subraye, pero otros carácteres tal como

180 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-4 La función SUPERIOR

Page 156: curso_sql_certificacion

el símbolo de porcentaje, el signo de admiración, o el signo de dólar son separadores de palabra válidos. La puntuación o los carácteres especiales son considerados como separadores de palabra válidos.

La función de INITCAP puede tomar sólo un parámetro. Su sintaxis es INITCAP (s). Las preguntas siguientes ilustran el uso de esta función:

La consulta 1: seleccione initcap (21/7) de la Consulta 2 dual: seleccione initcap (SYSDATE) de la Consulta 3 dual: seleccione initcap ('init letras mayúsculas o init_cap o init%cap') del dual

La consulta 1 devuelve el cociente 3 como una cuerda. La consulta 2 devuelve la

cadena de caracteres valor de la fecha de sistema actual, con la parte de mes cambiada de mayúscula a instancia inicial. Suponiendo que la fecha de sistema actual sea 17-DEC-2007, la consulta 2 por lo tanto devuelve 17-Dec-2007. La consulta 3 devuelve Letras mayúsculas Init O Init_Cap O Init%Cap.

Las preguntas en la Figura 4-5 seleccionan el LAST_NAME y valores de JOB_ID de la comando de EMPLOYEES para aquellos EMPLOYEES con valores de LAST_NAME que comienzan con la carta "H". La primera pregunta aplica la función de INITCAP a la cláusula SENTENCIA entera. La segunda pregunta muestra como la función de INITCAP es aplicada por separado a cada componente de carácter. Ambas preguntas ceden resultados idénticos.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

181

LA FIGURA 4-5 La función de INITCAP

Page 157: curso_sql_certificacion

EJERZA 4-1 Utilización de las Funciones de Conversión de Instancia Recupere una lista de todo FIRST_NAME y valores de LAST_NAME del La comando de EMPLOYEES donde FIRST_NAME contiene la cadena de caracteres "li".

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula SENTENCIA es

SELECCIONE FIRST_NAME, LAST_NAME 3. El DE la cláusula es

DE EMPLOYEES

182 Capítulo 4:

Funciones de fila sola

4. El DONDE la cláusula debe comparar los valores de columna FIRST_NAME con a modelo de carácteres que contienen todas las combinaciones de instancia posibles de la cuerda "li". Por lo tanto, si el FIRST_NAME contiene las cadenas de caracteres "LI", "Li", "lI", o "li", aquella fila debe ser recuperada.

5. El operador PARECIDO es usado para el carácter correspondiente, y cuatro combinaciones puede ser extraído con cuatro DONDE cláusulas separadas por el O palabra clave. Sin embargo, las funciones de conversión de instancia pueden simplificar la condición. Si la función INFERIOR es usada en la columna FIRST_NAME, la comparación puede ser hecha con uno DONDE condición de cláusula. El SUPERIOR o INITCAP func-tions también podrían ser usados.

6. El DONDE la cláusula es DONDE MÁS ABAJO (FIRST_NAME) COMO '%li %' 7. La ejecución de esta select devuelve los

nombres de los EMPLOYEES que contienen los carácteres "li" como mostrado en esta ilustración:

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

Utilización de Funciones de Manipulaciones de Carácter Algunos aspectos más potentes para surgir del Oracle son el carácter

183 funciones de manipulación. Su utilidad en la manipulación de datos es casi sin el par, y muchos profesionales técnicos sazonados azotan juntos una escritura rápida para masajear artículos de datos con funciones de manipulación de carácter SQL. Anidar estas funciones es común. El operador de encadenamiento (||) es generalmente usado en vez de la función de CONCAT. La LONGITUD, INSTR, SUBSTR, y REEMPLAZAN

Page 158: curso_sql_certificacion

funciones a menudo se encuentran en la compañía de cada uno como hacen RPAD, LPAD, y NETO.

La Función de CONCAT La función de CONCAT se afilia a dos literales de carácter, columnas, o expresiones para ceder una expresión de carácter más grande. Numérico y literales de fecha son implícitamente dados el papel de carácteres cuando ellos ocurren como parámetros a la función de CONCAT. Numérico o expresiones de fecha son evaluados antes de ser convertido a cuerdas listas para ser concadenadas.

La función de CONCAT toma dos parámetros. Su sintaxis es CONCAT (s1, s2), donde s1 y s2 representan literales de cuerda, valores de columna de carácter, o expresiones que causan valores de carácter. Las preguntas siguientes ilustran el uso de esta función:

La consulta 1: seleccione concat (1+2.14,' se acerca la pi') de la Consulta 2 dual: seleccione concat ('Hoy es:', SYSDATE) de dual

La consulta 1 vuelve la cuerda "3.14 se acerca la pi." La expresión numérica es evaluado para devolver el número 3.14. Este número es automáticamente cambiado en la cadena de caracteres "3.14", que es concadenado al carácter literal en el segundo parámetro. El segundo parámetro a la función de CONCAT en la consulta 2 es SYSDATE, que devuelve la fecha de sistema actual. Este valor es implícitamente convertido a una cuerda a la cual el literal en el primer parámetro es concadenado. Si la fecha de sistema es 17-DEC-2007, la consulta 2 vuelve la cuerda "Hoy es 17-DEC-2007."

Piense que la utilización de la función de CONCAT se afilia a tres términos para devolver una cadena de caracteres. Ya que CONCAT toma sólo dos parámetros, sólo es posible afiliarse a dos términos con un instancia de esta función. La solución es anidar la función de CONCAT dentro de otra función de CONCAT, como mostrado aquí:

seleccione concat ('Outer1', concat ('Inner1',' Inner2')) del dual;

La primera función de CONCAT tiene dos parámetros: el primer es el literal

"Outer1", mientras el segundo es una función de CONCAT anidada. La segunda función de CONCAT toma dos parámetros: el primer es el literal "Inner1", mientras el segundo es el literal "Inner2". Esta pregunta causa la cuerda siguiente: Outer1 Inner1 Inner2. Las funciones anidadas son descritas detalladamente en el Capítulo 5.

184 Capítulo 4:

Funciones de fila sola

La función de CONCAT fue usada en la Figura 4-6 para extraer las filas del Comando de EMPLOYEES donde el DEPARTMENT_ID=100. El objetivo era producir una cuerda sola literal salida de la función CONCAT del formato FIRST_NAME LAST_NAME gana el SUELDO.

Esta tarea simple fue transformada en un cuatro nivel complejo profundamente anidó el SET de llamadas a la función. Como el segundo ejemplo en la Figura 4-6 demuestra, el operador de encadenamiento realiza la tarea equivalente en una manera más simple.

Page 159: curso_sql_certificacion

La Función de LONGITUD La función de LONGITUD devuelve el número de carácteres que constituyen una cadena de caracteres. Esto incluye literales de carácter, columnas, o expresiones. Numérico y literales de fecha son automáticamente dados el papel de carácteres cuando ellos ocurren como parámetros a

LA FIGURA 4-6 La función de CONCAT

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

185

la función de LONGITUD. Numérico o expresiones de fecha son evaluados antes de ser convertido a cuerdas listas para ser medidas. Los espacios en blanco, las paletas, y los carácteres especiales son todos contados por la función de LONGITUD.

La función de LONGITUD toma sólo un parámetro. Su sintaxis es la LONGITUD (ES), donde s representa cualquier cuerda literal, valor de columna de carácter, o expresión que causa un valor de carácter. Las preguntas siguientes ilustran el uso de esta función:

La consulta 1: la longitud sentencia (1+2.14 ||' se acerca la pi') de la Consulta 2 dual: longitud sentencia (SYSDATE) de dual

La consulta 1 devuelve el número 20. La expresión numérica es evaluada para volver el número 3.14. Este número es dado el papel de la cadena de caracteres "3.14", que es concadenado entonces al carácter literal "se acerca la pi." La cadena de caracteres consiguiente contiene 20 carácteres. La consulta 2 primero evalúa la función de SYSDATE, que devuelve la fecha de sistema actual. Este valor es automáticamente convertido a una cadena de caracteres cuya longitud es determinada entonces. Suponer que la fecha de sistema volvió es 17-DEC-07, las vueltas de consulta 2 valoran 9.

La función de LONGITUD es usada en la Figura 4-7 para extraer el valor de COUNTRY_NAME con la longitud mayor que diez carácteres de la comando de COUNTRIES.

LA FIGURA 4-7 La función de LONGITUD

186 Capítulo 4:

Funciones de fila sola

El LPAD y las Funciones de RPAD El LPAD y funciones de RPAD, también conocidas como dejado almohadilla y funciones de almohadilla correctas, devuelven una cuerda rellenada de un número especificado de carácteres a la izquierda o el derecho de la cuerda de la fuente respectivamente. Las cadenas de caracteres usadas para el acolchado incluyen literales de carácter, valores de columna, o expresiones. Numérico y literales de fecha son implícitamente dados el papel de carácteres cuando ellos ocurren como parámetros a funciones de RPAD o el LPAD. Numérico o expresiones de fecha son evaluados antes de ser convertido a cuerdas destinadas al acolchado. Los espacios en blanco, las paletas, y los carácteres especiales pueden ser usados como el acolchado de

Page 160: curso_sql_certificacion

carácteres. El LPAD y las funciones de RPAD toman tres parámetros. Su sintaxis es LPAD (s,

n, p) y RPAD (s, n, p), donde s representa la cuerda de la fuente, el n representa la longitud final de la cuerda devuelta, y p especifica la cadena de caracteres para ser usada como el acolchado. Si LPAD es usado, los carácteres de acolchado p son añadidos a la izquierda de s de cuerda de la fuente hasta que esto alcance la longitud n. Si RPAD es usado, los carácteres de acolchado p son añadidos a la derecha de s de cuerda de la fuente hasta que esto alcance la longitud n. Note que si el parámetro n es más pequeño que o igual a la longitud de la fuente ensartan s, entonces ningún acolchado ocurre y sólo los primeros carácteres n de s son devueltos.

Las preguntas siguientes ilustran el uso de esta función: Pregunta 1: escogido lpad (1000+200.55,14,' * ') de dual

Pregunta 2: escogido rpad (1000+200.55,14,' * ') de dual

Pregunta 3: escogido lpad (SYSDATE, 14, '$#') de dual

Pregunta 4: escogido rpad (SYSDATE, 4, '$#') de dual

La consulta 1 devuelve una 14 cadena de caracteres: ******* 1200.55. La expresión

numérica es evaluado para devolver el número 1200.55. Este número es dado el papel de la cuerda "1200.55" de la longitud siete (incluso la coma decimal). Para conseguir la longitud final de 14 carácteres, 7 asteriscos son dejados rellenados a la cuerda. La consulta 2 devuelve la cuerda "1200.55 *******."

La función de LPAD en la consulta 3 tiene una longitud de cuerda objetivo de 14 carácteres. Suliste que SYSDATE devuelva un valor de fecha de 9 carácteres: 17-DEC-07. Esta fecha es convertida en una cuerda, y la cuerda de acolchado es sistemáticamente aplicada para alcanzar la longitud objetivo. Esto vuelve: $#$#$17-DEC-07. Note que aunque la cuerda de acolchado consista en dos carácteres ($#), la cuerda no fue aplicada regularmente ya que hay símbolos de tres dólares y dos símbolos de picadillo. Esto es porque LPAD y RPAD rellenarán la cuerda de la fuente tanto como posible con la cuerda de acolchado hasta que la longitud objetivo sea alcanzada. La función de RPAD en la consulta 4 tiene una longitud objetivo de 4 carácteres, pero la función SYSDATE sola devuelve un valor de 9 carácteres. Por lo tanto ningún acolchado ocurre y, suponiendo que la fecha de sistema actual sea 17-DEC-07, los cuatro primeros carácteres de la fecha convertida son devueltos: 17-D.

El LPAD y las funciones de RPAD son usados en la Figura 4-8 para formatear los resultados en una manera más comandoada y más presentable. Los resultados devueltos por esta pregunta son idénticos

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

187

Page 161: curso_sql_certificacion

LA FIGURA 4-8 El LPAD y funciones de RPAD

a aquellos en la Figura 4-6 pero han sido ejecutados más usuario utilización amistosa del LPAD y funciones de RPAD.

La Función NETA La función NETA borra carácteres desde el principio o el final de literales de carácter, columnas o expresiones para ceder el que artículo de carácter potencialmente más corto. Numérico y literales de fecha son automáticamente dados el papel de carácteres cuando ellos ocurren como parámetros a la función NETA. Numérico o expresiones de fecha son evaluados primero antes de ser convertido a cuerdas listas para ser recortadas.

La función NETA toma un parámetro arreglado de un opcional y un componente obligatorio. Su sintaxis es NETA ([trailing|leading|both] trimstring de s). La cuerda para ser recortada (s) es obligatoria. Los puntos siguientes ponen en una lista las reglas que gobiernan el uso de esta función:

■ NETO (s) borra espacios de ambos lados de la cuerda de ingreso. ■ NETO (rastreo trimstring de s) borra todos los acontecimientos de trimstring del

el final de la cuerda s si esto está presente.

188 Capítulo 4:

Funciones de fila sola

■ NETO (conduciendo trimstring de s) borra todos los acontecimientos de trimstring del

Page 162: curso_sql_certificacion

el principio de la cuerda s si esto está presente. ■ NETO (ambos trimstring de s) borra todos los acontecimientos de trimstring del

el principio y el final de la cuerda s si esto está presente.

Las preguntas siguientes ilustran el uso de esta función:

La consulta 1: seleccione neto (el rastreo 'e' de 1+2.14 ||' es la tarta') de la Consulta 2 dual: seleccione neto (ambos '*' de '******* ******* escondido') de la Consulta 3 dual: seleccione neto (1 de sysdate) del dual

La consulta 1 evalúa la expresión numérica para devolver el número 3.14. Esto el número es dado el papel entonces de la cadena de caracteres "3.14", que es concadenado entonces al carácter literal para construir la cuerda "3.14 es la tarta." La función NETA entonces borra cualquier acontecimiento del carácter "e" a partir del final de la cuerda para volver "3.14 se acerca la pi." La consulta 2 pela lejos todos los acontecimientos del asterisco carácter neto desde el principio y el final del carácter literal y vueltas la cuerda "Escondida." Note que aunque un carácter neto sea especificado, acontecimientos múltiples serán recortados si ellos consecutivamente están presentes. La consulta 3 tiene dos aspectos interesantes. El carácter neto no es encerrado en citas y es implícitamente convertido a un carácter. La función de SYSDATE devuelve la fecha de sistema actual, que es supuesta ser 17-DEC-07. Ya que ninguna palabra clave es especificada para rastreo, conducción, o ambas direcciones netas, la falta de ambos se aplica. Por lo tanto todos los acontecimientos del carácter 1 al principio o final de la cuerda de fecha son recortados causando 7-DEC-07 ser devueltos.

La función NETA usada en la Figura 4-9 no parece hacer algo excepto el examen más cercano revela un uso práctico común para ella. Como hablado antes, los datos son con frecuencia entrados en tablas de base de datos de aplicación por una variedad de fuentes. Puede resultar que los espacios son por casualidad entrados y guardados en los espacios de carácter involuntariamente. La cuerda neta artificial en el DONDE la cláusula simula el espacio de LAST_NAME rellenado de espacios. Esto podría dificultar la busca de EMPLOYEES con valores LAST_NAME de Smith. El adorno del espacio rellenó el espacio de LAST_NAME habilita la busca exacta y elimina el riesgo de espacios involuntarios que pueden estar presentes en datos de carácter. Recuerde que cuando ningunos parámetros además de la cuerda s son especificados a la función NETA entonces su comportamiento por defecto es recortar (ambos '' de s).

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

189

LA FIGURA 4-9 La función NETA

Page 163: curso_sql_certificacion

La Función de INSTR (en la Cuerda) La función de INSTR localiza la posición de una cadena de búsqueda dentro de una cuerda dada. Esto devuelve la posición numérica en la cual el acontecimiento enésimo de la cadena de búsqueda comienza, con relación a una posición de principio especificada. Si la cadena de búsqueda no está presente el cero de vueltas de función de INSTR.

Numérico y literales de fecha son implícitamente dados el papel de carácteres cuando ellos ocurren como parámetros a la función de INSTR. Numérico o expresiones de fecha son evaluados primero antes de ser convertido a cuerdas listas para ser buscadas.

La función de INSTR toma cuatro parámetros arreglados de dos opcional y dos argumentos obligatorios. La sintaxis es INSTR (cuerda de la fuente, cadena de búsqueda, [posición de principio de búsqueda], [acontecimiento enésimo]). El valor por defecto para la posición de principio de búsqueda es 1 o el principio de la cuerda de la fuente. El valor por defecto para el acontecimiento enésimo es 1 o el primer acontecimiento. Las preguntas siguientes ilustran la función de INSTR con expresiones de fecha y numérico:

La consulta 1: seleccione instr (3+0.14,'. ') de la Consulta 2 dual: seleccione instr (sysdate, 'DICIEMBRE') del dual

190 Capítulo 4:

Funciones de fila sola

La consulta 1 evalúa la expresión numérica para devolver el número 3.14. Esto el número es implícitamente dado el papel de la cuerda 3.14. El carácter de período es buscado y el primer acontecimiento de él ocurre en la posición 2. La consulta 2 evalúa la función de SYSDATE y converte la fecha devuelta en una cuerda. Suliste que la fecha de sistema actual sea 17-DEC-07. El primer acontecimiento del DICIEMBRE de carácteres ocurre en la posición 4. Considere las preguntas siguientes con datos de carácter que ilustran los valores por defecto y los terceros y cuartos parámetros de la función de INSTR:

La consulta 3: seleccione instr ('1#3#5#7#9#', '#') de la Consulta 4 dual: seleccione instr ('1#3#5#7#9#', '#', 5) de la Consulta 5 dual: seleccione instr ('1#3#5#7#9#', '#', 3,4) del dual

La consulta 3 busca el primer acontecimiento del símbolo de picadillo en la cuerda de

la fuente el principio en posición 1 y posición de vueltas 2. La consulta 4 tiene el número 5

Page 164: curso_sql_certificacion

como su tercer parámetro que indica que la búsqueda del símbolo de picadillo debe comenzar en la posición 5 en la cuerda de la fuente. El acontecimiento subsecuente del símbolo de picadillo está en la posición 6, que es devuelto por la pregunta. La consulta 5 tiene los números 3 y 4 como sus terceros y cuartos parámetros. Esto indica que la búsqueda del símbolo de picadillo debe comenzar en la posición 3 en la cuerda de la fuente. La consulta 5 entonces devuelve el número 10, que es la posición del cuarto acontecimiento del símbolo de picadillo cuando la búsqueda comienza en la posición 3.

La función de INSTR usó en archivos de vueltas de Figura 4-10 de la comando de DEPARTMENTS donde los valores de DEPARTMENT_NAME tienen el carácter n como su tercer carácter.

La función de INSTR a menudo es usada en la combinación con la función de SUBSTR en programas de herramienta diseñados para extraer datos codificados de corrientes de datos electrónicas.

La Función de SUBSTR (Subcuerda) La función de SUBSTR extrae y devuelve un segmento de una cuerda de la fuente dada. Esto extrae una subserie de una longitud especificada de la cuerda de la fuente que comienza en una posición dada. Si la posición de principio es más grande que la longitud de la cuerda de la fuente, nula es devuelta. Si el número de carácteres para extraer de una posición de principio dada es mayor que la longitud de la cuerda de la fuente, el segmento volvió es la subcuerda de la posición de principio al final de la cuerda.

Numérico y literales de fecha son automáticamente dados el papel de carácteres cuando ellos ocurren como parámetros a la función de SUBSTR. Numérico y expresiones de fecha son evaluados antes de ser convertido a cuerdas listas para ser buscadas.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

191

LA FIGURA 4-10 La función de INSTR

Page 165: curso_sql_certificacion

La función de SUBSTR toma tres parámetros, con los primeros dos siendo obligatorios. Su sintaxis es SUBSTR (cuerda de la fuente, comience la posición, [el número de carácteres para extraer]). El número por defecto de carácteres para extraer es igual al número de carácteres de la posición de principio al final de la cuerda de la fuente. Las preguntas siguientes ilustran la función de SUBSTR con expresiones de fecha y numérico:

La consulta 1: seleccione substr (10000-3,3,2) de la Consulta 2 dual: seleccione substr (sysdate, 4,3) del dual

La consulta 1 evalúa la expresión numérica para devolver el número 9997. Esto el número es automáticamente cambiado en la cadena de caracteres 9997. La búsqueda de la subcuerda comienza en la posición 3 y los dos carácteres de aquella posición adelante son extraídos, cediendo la subcuerda 97. La consulta 2 evalúa la función de SYSDATE y converte la fecha volvió en una cadena de caracteres. Suliste que la fecha de sistema actual sea 17-DEC-07. La búsqueda de la subcuerda comienza en la posición 4 y los tres carácteres de aquella posición adelante son extraídos, cediendo el diciembre de subcuerda.

192 Capítulo 4:

Funciones de fila sola

Considere las preguntas siguientes con datos de carácter que ilustran el comportamiento por defecto del parámetro opcional de la función de SUBSTR:

La consulta 3: seleccione substr ('1#3#5#7#9#', 5) de la Consulta 4 dual: seleccione substr ('1#3#5#7#9#', 5,6) de la Consulta 5 dual: seleccione substr ('1#3#5#7#9#',-3,2) del dual

La consulta 3 extrae la subcuerda que comienza en la posición 5. Ya que el tercer

parámetro es no especificado, la longitud de extracción por defecto es igual al número de carácteres de e incluso la posición de principio al final de la cuerda de la fuente, que es 6. Por lo tanto la consulta 3 es equivalente a la consulta 4 y la subcuerda devuelta por ambas preguntas es 5#7#9#. La pregunta cinco tiene el número-3 como su posición de principio. El parámetro de posición de principio negativo instruye el Oracle de comenzar la busca de 3 carácteres a partir del final de la cuerda. Por lo tanto comience la posición es tres carácteres a partir del final de la cuerda, que es la posición 8. El tercer parámetro es 2, que causa la subcuerda #9 ser devuelto.

La función de SUBSTR usó en archivos de vueltas de Figura 4-11 de la comando de EMPLOYEES, donde los dos primeros carácteres en los valores de JOB_ID son d. C. Esta función ha sido usada adelante en la lista SENTENCIA para extraer el carácter inicial del espacio FIRST_NAME de cada empleado en el SET de resultado.

LA FIGURA 4-11 La función de SUBSTR

Page 166: curso_sql_certificacion

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

GUIÓN & SOLUCIÓN 193

Le gustaría buscar una cadena de caracteres almacenada en la base de datos. El instancia en el cual es almacenado es desconocido y allí conduce potencialmente y arrastra espacios que rodean la cuerda. ¿Puede tal búsqueda ser realizada? Sí. La solución más simple es RECORTAR primero la conducción y rastreo de espacios de la columna y luego convertir los datos de columna usando una función de conversión de instancia como INFERIOR, SUPERIOR, o INITCAP para simplificar el número de comparaciones requeridas en el DONDE condición de cláusula. Le han pedido extraer los tres últimos carácteres de la columna LAST_NAME en la comando de EMPLOYEES. ¿Puede tal pregunta ser realizada sin usar la función de LONGITUD? Sí. El SUBSTR (cuerda de la fuente, comience la posición, el número de carácteres) la función toma tres parámetros. Si la posición de principio es puesta a-3, y el número del parámetro de carácteres es establecido a tres o es omitido, los tres últimos carácteres de los datos de columna LAST_NAME es recuperado. La pregunta siguiente puede ser usada: SELECCIONE SUBSTR (LAST_NAME,-3) DE EMPLOYEES; Le gustaría extraer una 10 cadena de caracteres consecuente basada en la columna de SUELDO en la comando de EMPLOYEES. Si el valor de SUELDO es menos de 10 carácteres mucho tiempo, los ceros deben ser añadidos a la izquierda del valor para ceder una 10 cadena de caracteres. ¿Es posible esto?

Sí. La función de LPAD puede ser usada como sigue: SELECCIONE LPAD (SUELDO, 10,0) DE EMPLOYEES;

La Función REEMPLAZAR La función REEMPLAZAR reemplaza todos los acontecimientos de un artículo de búsqueda en una cuerda de la fuente con un término de reemplazo y devuelve la cuerda de la fuente modificada. Si la longitud del término de reemplazo es diferente de aquel del artículo de búsqueda, entonces las longitudes del devuelto y cuerdas de la fuente serán diferentes. Si la cadena de búsqueda no es encontrada, la cuerda de la fuente es devuelta sin alterar. Numérico y literales de fecha y expresiones son evaluados antes de ser implícitamente dado el papel de carácteres cuando ellos ocurren como parámetros a la función REEMPLAZAR.

La función REEMPLAZAR toma tres parámetros, con los primeros dos siendo obligatorios. Su sintaxis es REEMPLAZAN (cuerda de la fuente, busque el artículo, [término de reemplazo]). Si el parámetro de término de reemplazo es omitido, cada acontecimiento del artículo de búsqueda es borrado de la cuerda de la fuente. En otras palabras, el artículo de búsqueda es reemplazado por una cuerda vacía. Las preguntas siguientes ilustran la función REEMPLAZAR con expresiones de fecha y numérico:

La consulta 1: escogido reemplazan (10000-3, '9', '85') de la Consulta 2 dual: escogido reemplazan (sysdate, 'DICIEMBRE', 'NOVIEMBRE') del dual

194 Capítulo 4:

Funciones de fila sola

Page 167: curso_sql_certificacion

La consulta 1 evalúa la expresión numérica para devolver el número 9997, que es molde como la cadena de caracteres "9997". La cadena de búsqueda es el carácter "9", que ocurre tres veces en la fuente. Cada carácter de búsqueda es substituido con la cuerda de reemplazo "85", cediendo la cuerda "8585857". La consulta 2 evalúa la función de SYSDATE y converte la fecha volvió en una cadena de caracteres. Suliste que la fecha de sistema actual sea 17-DEC-07. La cadena de búsqueda "DICIEMBRE" ocurre una vez que en la fuente ensartan y es reemplazado con los carácteres "NOVIEMBRE", cediendo el resultado 17-NOV-07. Note que esto es una cadena de caracteres y no un valor de fecha. Considere las preguntas siguientes con datos de carácter, que ilustran el comportamiento por defecto del parámetro opcional de la función REEMPLAZAR:

La consulta 3: escogido reemplazan ('1#3#5#7#9#', '#', '->') de la Consulta 4 dual: escogido reemplazan ('1#3#5#7#9#', '#') del dual

El símbolo de picadillo en la consulta 3 es especificado como el carácter de

búsqueda y el la cuerda de reemplazo es especificada como->. El símbolo de picadillo ocurre cinco veces en la fuente, y la cuerda consiguiente es: 1-> 3-> 5-> 7-> 9->. La consulta 4 no especifica una cuerda de reemplazo. El comportamiento por defecto es reemplazar por lo tanto la cadena de búsqueda con una cuerda vacía que, en efecto, borra el carácter de búsqueda completamente de la fuente, causando la cuerda "13579" devuelto.

La función REEMPLAZAR usó en archivos de vueltas de Figura 4-12 de la comando de EMPLOYEES donde los valores de JOB_ID son SA_MAN, pero esto modifica la columna de SUELDO reemplazando cada 0 con 000 y aliasing la nueva expresión como el Sueldo de Sueño.

EJERZA 4-2 Utilización de las Funciones de Manipulación de Instancia El sobre imprimir restringe el espacio de destinatario a 16 carácteres. Idealmente, el

destinatario el espacio contiene FIRST_NAME de los EMPLOYEES y valores de LAST_NAME separados por un espacio solo. Cuando la longitud combinada de FIRST_NAME de un empleado y LAST_NAME excede 15 carácteres, el espacio de destinatario debería contener su nombre oficial. El nombre oficial de un empleado es arreglado de la primera carta de su NOMBRE de FIRST_ y los 14 primeros carácteres de su LAST_NAME.

Se requiere que usted recupere una lista de FIRST_NAME y valores de LAST_NAME y nombres oficiales para EMPLOYEES donde la longitud combinada de FIRST_NAME y LAST_NAME excede 15 carácteres.

1. Comience SQL*Plus y conecte al esquema de HORA. Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

195

LA FIGURA 4-12 La función REEMPLAZAR

Page 168: curso_sql_certificacion

2. El nombre oficial es construido concadenando el primer carácter en el FIRST_NAME paran y devuelven la pelota con un espacio y los 14 primeros carácteres del espacio de NOMBRE de LAST_ para devolver una cuerda que es 16 carácteres mucho tiempo. La función de SUBSTR es usada para extraer partes de apellido y la inicial.

3. La cláusula SENTENCIA es SELECCIONE FIRST_NAME, LAST_NAME, SUBSTR (FIRST_NAME, 1,1) ||' '|| SUBSTR (LAST_NAME, 1,14) FORMAL_NAME

4. El DE la cláusula es DE EMPLOYEES 5. El DONDE la cláusula debe limitar los archivos volvió a

sólo aquellos donde las longitudes combinadas de su FIRST_NAME y LAST_NAME exceden 15 carácteres.

6. El DONDE la cláusula es DONDE LONGITUD (FIRST_NAME) + LONGITUD (LAST_NAME)> 15

196 Capítulo 4:

Funciones de fila sola

7. La ejecución de esta select devuelve el SET siguiente de resultados:

Page 169: curso_sql_certificacion

Utilización de Funciones Numéricas Hay una variedad de funciones numéricas incorporadas proporcionadas por el Oracle con

el cual esto rivaliza el cajas de herramientas matemáticas de paquetes de software de hoja de cálculo populares. Differentiator significativo entre funciones numéricas y otras es que ellos aceptan y devuelven datos sólo numéricos. El oracle proporciona funciones numéricas a solucionar trigonométrico, exponentiation, y problemas logarítmicos, entre otros. Este guía se concentra en tres funciones de fila sola numéricas: POR AHÍ, TRUNC, y MOD, hablado después.

La Función REDONDA Numérica La función REDONDA realiza una operación de doblamiento en un valor numérico basado en la precisión decimal especificada. El valor volvió es o acorralado o abajo basado en el valor numérico del dígito significativo en la posición de precisión decimal especificada. Si la precisión decimal especificada es n, el dígito significativo al doblamiento

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

197

es encontrado (n + 1) sitios a la derecha de la coma decimal. Si es negativo, el dígito significativo al doblamiento es encontrado sitios de n a la izquierda de la coma decimal. Si el valor numérico del dígito significativo es mayor que o igual a 5, un "rodeo" ocurre, más "redondear" ocurre.

La función REDONDA toma dos parámetros. Su sintaxis es REDONDA (número de la fuente, precisión decimal). El parámetro de número de la fuente representa cualquier literal numérico, columna, o expresión. El parámetro de precisión decimal especifica el nivel del doblamiento y es opcional. Si el parámetro de precisión decimal es ausente, el nivel por defecto del doblamiento es el cero, el que significa que doblan sobre la fuente al número entero más cercano.

Considere los grados decimales puestos en una lista en la Tabla 4-1 para el número 1234.5678. Los valores de precisión decimales negativos están localizados a la izquierda de la coma decimal mientras los valores positivos son encontrados a la

Page 170: curso_sql_certificacion

derecha. Si el parámetro de precisión decimal es un, entonces doblan sobre el número de la

fuente al décimo más cercano. Si es dos, entonces doblan sobre la fuente al centésimo más cercano, etcétera. Las preguntas siguientes ilustran el uso de esta función:

Pregunta 1: escogido la vuelta (1601.916718,1) de dual Pregunta 2: escogido la vuelta (1601.916718,2) de dual Pregunta 3: escogido por ahí (1601.916718,-3) de dual Pregunta 4: escogido la vuelta (1601.916718) de dual

La consulta 1 tiene un parámetro de precisión decimal (n) de 1, que implica que la

fuente doblan sobre el número al décimo más cercano. Desde los centésimo (n + 1) el dígito es 1 (menos de 5), ningún doblamiento ocurre y el número volvió es 1601.9. El parámetro de precisión decimal en la consulta 2 es 2, entonces doblan sobre el número de la fuente al centésimo más cercano. Ya que la unidad de milésimos es 6 (mayor que 5), el rodeo ocurre y el número volvió es 1601.92. El parámetro de precisión decimal de la consulta 3 es-3. Ya que es negativo, el dígito significativo para el doblamiento es encontrado 3 sitios a la izquierda de

TABLA 4-1

Descripciones de Precisión decimales

Precisión decimal

-4 - 3 - 2 - 1123

Doblamiento significativo sobre Dígito

1234567

Posición decimal

Miles (n ×1000) Cientos (n ×100) Decenas (n ×10) Unidades (n ×1) Décimo (n ÷10) Centésimo (n ÷100)

Milésimos (n ÷1000)

198 Capítulo 4:

Funciones de fila sola

Page 171: curso_sql_certificacion

la coma decimal, en el dígito de cientos, que es 6. Ya que la unidad de cientos es 6, el rodeo ocurre y el número volvió es 2000. La consulta 4 ha prescindido del parámetro de precisión decimal. Esto implica que el doblamiento es hecho al número entero más cercano. Ya que la décima unidad es 9, el número es acorralado y 1602 es devuelto.

El ejemplo mostrado en la Figura 4-13 selecciona a EMPLOYEES que trabajan como encargados de ventas y computa un sobresueldo de lealtad basado en el número de días empleó doblado al número entero más cercano. La función REDONDA está acostumbrada alrededor de la parte fraccionaria de la diferencia entre la fecha de sistema actual y el HIRE_DATE para cada encargado de ventas.

La Función de TRUNC numérica (Truncada) La función de TRUNC realiza una operación de truncamiento en un valor numérico basado en la precisión decimal especificada. Un truncamiento numérico es diferente de redondear porque el valor que resulta deja caer los números en la precisión decimal especificada y no intenta acorralar o abajo si la precisión decimal es positiva. Sin embargo, si (n) especificado de la precisión decimal es negativo, el valor de ingreso está zeroed abajo de la posición decimal enésima.

LA FIGURA 4-13 La función REDONDA numérica

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

La función de TRUNC toma dos parámetros. Su sintaxis es TRUNC (fuente

199 número, precisión decimal). El número de la fuente representa cualquier literal numérico, columna, o expresión. La precisión decimal especifica el nivel del truncamiento y es opcional. Si el parámetro de precisión decimal es ausente, el nivel por defecto del doblamiento es el cero, el que significa que el número de la fuente es truncado al número entero más cercano.

Si el parámetro de precisión decimal es 1, entonces el número de la fuente es truncado en su unidad de décimo. Si es 2, es truncado en su unidad de centésimo, etcétera. Las preguntas siguientes ilustran el uso de esta función: Pregunta 1: escogido trunc (1601.916718,1) de dual Pregunta 2: escogido trunc (1601.916718,2) de dual Pregunta 3: escogido trunc (1601.916718,-3) de dual Pregunta 4: escogido trunc (1601.916718) de dual

La consulta 1 tiene un parámetro de precisión decimal de 1, que implica que la fuente

Page 172: curso_sql_certificacion

el número es truncado en su unidad de décimo y el número volvió es 1601.9. El parámetro de precisión decimal (n) en la consulta 2 es 2, entonces el número de la fuente es truncado en su unidad de centésimo y el número volvió es 1601.91. Note que este resultado sería diferente si una operación de doblamiento fuera realizada ya que el dígito en la posición (n + 1) es 6 (mayor que 5). La consulta 3 especifica un número negativo (3) como su precisión decimal. Tres sitios a la izquierda de la coma decimal implican que el truncamiento pasa en el dígito de cientos como mostrado antes en la Tabla 4-1. Por lo tanto, el número de la fuente está zeroed abajo de su dígito (6) de cientos y el número volvió es 1000. Finalmente, la consulta 4 no tiene un parámetro de precisión decimal que implica que el truncamiento es hecho en el nivel de número entero de la precisión. El número volvió es 1601.

El departamento de finanzas ha tenido derecho a un premio departamental superior por el cual la compañía decidió recompensar a su personal de finanzas ajustando sus sueldos. Ya que el ajuste de sueldo fraccionario causa números con tres sitios decimales, la función de TRUNC es usada para truncar el aumento de sueldo propuesto a un número entero, como mostrado en la Figura 4-14.

La Función de MOD (Módulo) La función de MOD devuelve el resto numérico de una operación de división. Dos números, el dividendo (número dividido) y el divisor (número para dividirse en) son proporcionados, y una operación de división es realizada. Si el divisor es un factor del dividendo, MOD devuelve el cero ya que no hay ningún resto. Si el divisor es el cero, ninguna división por el error cero es devuelta y la función de MOD devuelve un cero en cambio. Si el divisor es más grande que el dividendo, entonces la función de MOD devuelve el dividendo como su resultado. Esto es porque esto divide tiempos cero en el divisor, dejando el resto igual al dividendo.

200 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-14 La función de TRUNC numérica

Page 173: curso_sql_certificacion

La función de MOD toma dos parámetros. Su sintaxis es MOD (dividendo, divisor). El dividendo y los parámetros de divisor representan un literal numérico, columna, o expresión, que puede ser negativa o positiva. Las preguntas siguientes ilustran el uso de esta función:

Pregunta 1: escogido mod (6,2) de dual

Pregunta 2: escogido mod (5,3) de dual

Pregunta 3: escogido mod (7,35) de dual

Pregunta 4: escogido mod (5.2,3) de dual

La consulta 1 se divide 6 en 2 perfectamente, cediendo 0 como el resto. La consulta 2 se

divide 5 en 3, ceder 1 con resto 2. La consulta 3 intenta dividirse 7 en 35. Ya que el divisor es más grande que el dividendo, el número 7 es devuelto como el valor de módulo. La consulta 4 tiene una fracción impropia como el dividendo. La división 5.2 por 3 producciones 1 con resto 2.2.

Cualquier número par dividido en 2 naturalmente no tiene ningún resto, pero los números impares divididos en 2 siempre tienen un resto de 1. Por lo tanto, la función de MOD a menudo es usada se distinguen entre hasta números impares y.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

La columna EMPLOYEE_ID en la comando de EMPLOYEES almacena un número secuencial único para cada principio de registro con el empleado número 100. El

201 primero 12 EMPLOYEES deben ser asignados a uno de cuatro equipos en una manera de retorno al punto de origen para una tarea particular. La figura 4-15 muestra como esto es llevado a cabo usando la función de MOD.

Los archivos de los 12 EMPLOYEES son aislados con un ENTRE el operador en el DONDE cláusula. La función de MOD es aplicada a la división de los valores de columna EMPLOYEE_ID por el literal 4 numérico. Como la Figura 4-15 muestra, la función de MOD asigna los números 0 a 3 a cada fila en una manera de retorno al punto de origen.

LA FIGURA 4-15 La función de MOD

Page 174: curso_sql_certificacion

202 Capítulo 4:

Funciones de fila sola

Los valores por defecto asumidos por los parámetros opcionales de funciones no siempre son intuitivos, pero a menudo son probados. Por ejemplo, la vocación de la función de SUBSTR con sólo los dos primeros parámetros causa la función que extrae una subcuerda de una posición de principio al final de la cuerda de la fuente dada. El parámetro opcional tanto para el numérico como para fecha TRUNC

Funcionamiento con Fechas

y las funciones REDONDAS son el nivel de la precisión. Por ejemplo, la vocación de la función de TRUNC numérica sin especificar el nivel del truncamiento causa el número siendo truncado al número entero más cercano. Es útil ser familiar con los valores por defecto asumidos por parámetros opcionales para estas funciones.

La fecha funciones incorporadas proporciona una manera conveniente de solucionar problemas relacionados con la fecha sin tener que guardar la pista de años bisiestos o el número de días en meses particulares. Hablaremos del almacenamiento de fechas por el Oracle y las máscaras de formato de fecha por defecto antes de que conduzcamos un examen detallado de la función de SYSDATE. Seguiremos hablando de la aritmética de fecha y las funciones de manipulación de fecha: ADD_MONTHS, MONTHS_BETWEEN, LAST_DAY, NEXT_DAY, POR AHÍ, y TRUNC.

El Almacenamiento de fecha en las Fechas de Base de datos es almacenado internamente en un formato numérico que apoya el almacenamiento de siglo, año, mes, y detalles de día, así como información de tiempo, como horas, minutos, y segundos. Estos atributos de fecha están disponibles para cada, valor de columna literal, o expresión que es del tipo de datos de fecha.

Cuando tienen acceso a la información de fecha de una comando, el formato por defecto de los resultados comprende dos dígitos que representan el día, una abreviatura de tres cartas del mes, y dos dígitos que representan el componente de año. En ausencia, estos componentes son separados con guiones en SQL*Plus y pasan cuchilladas en el Developer SQL. La figura 4-16 muestra los contenido de la columna START_DATE de la comando JOB_HISTORY. Note que la pregunta es realizada en el Developer SQL, entonces los elementos de fecha son separados por cuchilladas avanzadas.

Aunque el componente de siglo no sea mostrado en ausencia, es almacenado en la base de datos cuando el valor de fecha es insertado o actualizado y está disponible para

Page 175: curso_sql_certificacion

la recuperación. Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

203

LA FIGURA 4-16 Almacenamiento de fecha por defecto en la base de datos

El formato en el cual una fecha es mostrada se menciona como su máscara de formato. Hay varios códigos de formateo o las máscaras de formato de fecha disponibles, como mostrado en la Tabla 4-2.

Hablan de la lenguaje para formatear artículos de fecha usando la variedad llena de máscaras de formato de fecha en el Capítulo 5. La máscara de formato de DD-MON-RR es la falta para visualización e ingreso. Insertando o actualizando la información de fecha, el componente de siglo es obtenido de la función de SYSDATE si no es suministrado. La máscara de formato de fecha RR se diferencia de la máscara de formato de YY ya que es puede ser usado para especificar siglos diferentes basados durante los años corrientes y especificados. El componente de siglo adjudicado

204 Capítulo 4:

Funciones de fila sola

Page 176: curso_sql_certificacion

TABLA 4-2

Máscaras de Formato de fecha

Máscara de formato

DD MON YY YYYY RR CENTÍMETROS CÚBICOS HH HH24 MI SS

Descripción de formato

Día del Mes de mes del año año De dos dígitos año De cuatro dígitos incluso siglo año De dos dígitos

(Año 2000-dócil) Horas de siglo De dos dígitos con Segundos de Minutos de tiempo de la mañana y de

veinticuatro horas de la tarde

a una fecha con su año especificado con la fecha RR el formato puede ser mejor entendido considerando los principios siguientes:

■ Si los dos dígitos del año corriente y año especificado están entre 0 y 49, el siglo corriente es devuelto. Suliste que la fecha presente es 02-JUN-2007. El siglo devuelto para la fecha 24-JUL-04 en el formato de DD-MON-RR es 20.

■ Si los dos dígitos del año corriente están entre 0 y 49 y el especificado el año se cae entre 50 y 99, el siglo anterior es devuelto. Suliste que la fecha corriente es 02-JUN-2007. El siglo devuelto para 24-JUL-94 es 19.

■ Si los dos dígitos de los años corrientes y especificados están entre 50 y 99, el el siglo corriente es devuelto en ausencia. Suliste que la fecha corriente es 1975 02-JUN-. El siglo devuelto para 24-JUL-94 es 19.

■ Si los dos dígitos del año corriente están entre 50 y 99 y el especificado el año se cae entre 0 y 49, el próximo siglo es devuelto. Suliste que la fecha corriente es 02-JUN-1975. El siglo devuelto para 24-JUL-07 es 20.

La Función de SYSDATE La función de SYSDATE no toma ningunos parámetros y devuelve la fecha de sistema actual y tiempo según el servidor de base de datos. En ausencia la función de SYSDATE devuelve los componentes DD-MON-RR de la fecha de sistema actual. Es importante recordar que SYSDATE no devuelve la fecha y tiempo como especificado por su

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

205

reloj de sistema local. Si el servidor de base de datos está localizado en un huso horario diferente de un cliente que pregunta la base de datos, la fecha y tiempo volvió se diferenciará del reloj de sistema operativo local en la máquina de cliente. La pregunta para recuperar la fecha de servidor de base de datos

Page 177: curso_sql_certificacion

es como sigue:

seleccione sysdate del dual

Hablaron brevemente de la Aritmética de Aritmética de fecha con columnas de fecha y expresiones en el Capítulo 2. Las ecuaciones siguientes ilustran un principio importante en cuanto a la aritmética de fecha:

Date1 - Date2 = Num1 Date1 - Num1 = Date2 Date1 = Date2 + Num1

Una fecha puede ser restada de otra fecha. La diferencia entre dos los artículos de fecha representan el número de días entre ellos. Cualquier número, incluso fracciones, puede ser añadido a o restado de un artículo de fecha. En este contexto el número representa varios días. La suma o la diferencia entre un número y un artículo de fecha siempre devuelven un artículo de fecha. Este principio implica que la adición, multiplicándose, o dividiendo dos artículos de fecha no es permitida.

Para ilustrar el componente de tiempo del SYSDATE funcionan ya que esto pertenece a la aritmética de fecha, el entorno de Developer SQL ha sido temporalmente modificado para mostrar la información de tiempo así como la información de fecha.

Para modificar el entorno de Developer SQL para mostrar la información de tiempo para columnas de fecha, en ausencia, navegan a Herramientas | Preferencias | Base de datos | Parámetros de NLS | Formato de Fecha. Cambie la máscara de visualización por defecto (DD/MON/RR) a (DD/MON/RR HH24:MI:SS).

Una función de conversión, de que hablarán detalladamente en el Capítulo 5, es introducida aquí para ayudar a este ejemplo. La figura 4-17 demuestra como la función de conversión TO_DATE es usada para convertir el literal 02-JUN-2008 de fecha con 12:10 de componente de tiempo en un tipo de datos de fecha.

La primera pregunta en la cifra es disecada como sigue: dos días antes del segundo de junio, 12:10 son el treinta y un de mayo, 12:10, que es la fecha y tiempo devuelto por la expresión 1. La adición de 0.5 días o 12 horas hasta 12:10 02/JUN/08, como la expresión 2 demuestra, causa la fecha 03/JUN/08 y el tiempo 00.10 devuelto. La expresión 3 añade 6/24 o seis horas, causando la fecha 02/JUN/08, 18.10 devuelto.

206 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-17 La función de SYSDATE y aritmética de fecha

Page 178: curso_sql_certificacion

La columna HIREDATE para EMPLOYEES con valores DEPARTMENT_ID de 30 es restada del artículo de fecha 02/JUN/96 12:10 en la segunda pregunta de la cifra. El número de días entre estas dos fechas es devuelto para cada fila. Note que cuando el valor de columna HIREDATE ocurre más tarde que 02/JUN/96, un número negativo es devuelto.

Utilización de Funciones de Fecha Las funciones de manipulación de fecha proporcionan un medio confiable y exacto del

funcionamiento con artículos de fecha. Estas funciones proporcionan tal facilidad y flexibilidad para la manipulación de fecha que muchos especialistas de integración, los administradores de base de datos, y otros developeres hacen el uso frecuente de ellos.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

La Función de MONTHS_BETWEEN

207 La función de MONTHS_BETWEEN devuelve un valor numérico que representa el número de meses entre dos valores de fecha. Los literales de fecha en el formato DD-MON-RR o DD-MON-YYYY son automáticamente dados el papel de artículos de fecha cuando ellos ocurren como parámetros a la función de MONTHS_BETWEEN.

La función de MONTHS_BETWEEN toma dos parámetros obligatorios. Su sintaxis es MONTHS_BETWEEN (fecha de inicio, fecha de finalización). La función computa la diferencia en meses entre la fecha de inicio y fecha de finalización. Si la fecha de finalización ocurre antes de la fecha de inicio, un número negativo es devuelto. La diferencia entre los dos parámetros de fecha puede consistir en un número entero y un componente fraccionario. El número entero representa el número de meses entre las dos fechas. El componente fraccionario representa los días y tiempo restante después de que la diferencia de número entero entre años y meses es calculada y está basada durante un mes de 31 días. Un número entero sin la parte fraccionaria es devuelto si los componentes de día de las fechas comparadas son el mismo o el día anterior de sus meses respectivos.

Las preguntas siguientes ilustran la función de MONTHS_BETWEEN:

La consulta 1: seleccione sysdate, sysdate+31, sysdate+62, sysdate+91, months_between (sysdate+91,

Page 179: curso_sql_certificacion

sysdate) de la Consulta 2 dual: seleccione months_between ('29-mar-2008', '28-feb-2008') de la Consulta 3 dual: seleccione months_between ('29-mar-2008', '28-feb-2008') * 31 de la Consulta 4 dual: seleccione months_between (to_date ('29-feb-2008'), to_date ('28-feb-2008 12:00:00', 'dd-mon-yyyy hh24:mi:ss'))* 31 del dual;

Suliste que la fecha corriente sea 29-DEC-2007. La primera expresión en la consulta 1 devuelve el número 1, como el mes entre

El 29-DEC-2007 es 29-JAN-2008 (31 días más tarde). La segunda expresión de manera similar devuelve 2 meses entre 29-DEC-2007 y 29-FEB-2008 (62 días más tarde). Desde el febrero de 2008 tiene 29 días, 91 días deben ser añadidos a 29-DEC-2007 para conseguir 29-MAR-2008, y el MONTHS_BETWEEN (29-MAR-2008, 29-DEC-2007) la función devuelve exactamente tres meses en la tercera expresión en la consulta 1.

La consulta 2 implícitamente converte los literales de fecha en artículos de fecha del formato DD-MON-YYYY. Ya que ninguna información de tiempo es proporcionada, el Oracle supone que el tiempo sea la medianoche durante ambos días, o 0:00:00. La función de MONTHS_BETWEEN devuelve aproximadamente 1.03225806. El componente de número entero indica que hay un mes entre estas dos fechas. El examen más cercano del componente fraccionario de manera interesante revela que hay exactamente un mes entre 28-MAR-2008 y 28-FEB-2008. El componente fraccionario debe representar por lo tanto el

208 Capítulo 4:

Funciones de fila sola

diferencia antigua. Esto incluiría diferencias en horas, minutos, y segundos también, pero para este ejemplo, los componentes de tiempo son idénticos. Multiplicándose 0.03225806 por 31 vueltas 1, ya que el componente fraccionario devuelto por MONTHS_ ENTRE está basado durante un mes de 31 días.

Del mismo modo, la consulta 3 devuelve el número entero 32. La consulta 4 demuestra como el componente de tiempo es factored en el cálculo por la función de MONTHS_BETWEEN, que devuelve aproximadamente 0.016129. Hay una diferencia de 12 horas entre el principio y parámetros de fecha de finalización, entonces los meses cero entre ellos son correctos. La multiplicación de la parte fraccionaria por 31 producciones 0.5 días, que equivale a la diferencia de 12 horas.

La función de MONTHS_BETWEEN usada en la Figura 4-18 devuelve archivos de la comando JOB_HISTORY. Los meses entre las fechas un empleado comenzó en un trabajo particular y se terminó aquel trabajo son computados, y los resultados son clasificados en el pedido inclinado.

Un error común es a funcione y los MONTHS_BETWEEN suponen que el tipo de datos de vuelta del solo- la función de fecha ambos vuelve unas funciones de fila numéricas son el mismo como la categoría valor. Es importante ser familiar con la función pertenece a. Esto sólo es verdad de los principios de la aritmética de fecha, ya que son las funciones numéricas. Carácter y fecha común para suponer erróneamente que las funciones puedan valores de retorno de cualesquiera datos la diferencia entre dos fechas es una fecha, tipo. Por ejemplo el carácter INSTR cuando de hecho es un número.

Page 180: curso_sql_certificacion

La Función de ADD_MONTHS La función de ADD_MONTHS devuelve un artículo de fecha calculado añadiendo un número especificado de meses a un valor de fecha dado. Los literales de fecha en el formato DD-MON-RR o DD-MON-YYYY son automáticamente dados el papel de artículos de fecha cuando ellos ocurren como parámetros a la función de ADD_MONTHS.

La función de ADD_MONTHS toma dos parámetros obligatorios. Su sintaxis es ADD_MONTHS (fecha de inicio, número de meses). La función computa el plazo establecido después de añadir el número especificado de meses a la fecha de inicio. El número de meses puede ser negativo, causando un plazo establecido antes que la fecha de inicio devuelta. El número de meses puede ser fraccionario, pero el componente fraccionario no es ignorado y el componente de número entero es usado.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

209

LA FIGURA 4-18 La función de MONTHS_BETWEEN

Las tres preguntas en la Figura 4-19 ilustran el comportamiento de la función de ADD_MONTHS.

La primera pregunta en la cifra devuelve 07-MAY-2009 ya que el componente de día permanece el mismo si posible y el mes es incrementado por uno. La segunda pregunta tiene dos dimensiones interesantes. El parámetro que especifica el número de meses para

Page 181: curso_sql_certificacion

añadir contiene un componente fraccionario, que no es ignorado. Por lo tanto, es equivalente a ADD_MONTHS ('31-dec-2008', 2). Añadiendo dos meses a la fecha el 31-DEC-2008 debería devolver la fecha 31-FEB-2009, pero no hay ninguna tal fecha, tan el día anterior del mes, 28-FEB-2009, es devuelto. Ya que el número de meses añadidos en la tercera pregunta es-12, la fecha 07-APR-2008 es devuelta, que es 12 meses antes de la fecha de inicio.

210 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-19 La función de ADD_MONTHS

EJERZA 4-3 Utilización de las Funciones de Fecha Se requiere que usted obtenga una lista de EMPLOYEE_ID, LAST_NAME, e HIRE_ LA FECHA valora por los EMPLOYEES que han trabajado más de 100 meses entre la fecha ellos fueron contratados y 01-JAN-2000.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula SENTENCIA es

SELECCIONE EMPLOYEE_ID, LAST_NAME, HIRE_DATE 3. El DE la cláusula es

DE EMPLOYEES

Page 182: curso_sql_certificacion

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

211

4. El DONDE la cláusula debe comparar los meses entre la fecha dada literal y los HIRE_DATE valoran con el literal 100. 5 numérico. La función de MONTHS_BETWEEN

puede ser usada en el DONDE cláusula. 6. El DONDE la cláusula es DONDE MONTHS_BETWEEN ('01-JAN-2000', HIRE_DATE)> 100 7. La ejecución de esta

select devuelve el SET de resultados mostrados en el siguiente ilustración:

La Función de NEXT_DAY La función de NEXT_DAY devuelve la fecha cuando el siguiente acontecimiento de un día especificado de la semana ocurre. Los literales que pueden ser implícitamente dados el papel de artículos de fecha son aceptables cuando ellos ocurren como parámetros a la función de NEXT_DAY.

La función de NEXT_DAY toma dos parámetros obligatorios. Su sintaxis es NEXT_DAY (fecha de inicio, el día de la semana). La función computa la fecha en la cual el día del parámetro de semana después ocurre después de la fecha de inicio. El día de la semana

212 Capítulo 4:

Funciones de fila sola

el parámetro puede ser un valor de carácter o un valor entero. Los valores aceptables son determinados por el parámetro de base de datos NLS_DATE_LANGUAGE pero

Page 183: curso_sql_certificacion

los valores por defecto son al menos los tres primeros carácteres del nombre de día o valores enteros, donde 1 representa el domingo, 2 representa el lunes, etcétera. Los valores de carácter que representan los días de la semana pueden ser especificados en cualquier instancia. El nombre corto puede ser más largo que tres carácteres, por ejemplo, el domingo puede ser referido como el sol, sund, sunda o el domingo.

Las tres preguntas en la Figura 4-20 ilustran el comportamiento de la función de NEXT_DAY.

El 01-JAN-2009 es un jueves. Por lo tanto, la próxima vez que un martes ocurre será cinco días más tarde 06-JAN-2009, que es lo que la primera pregunta en la cifra recupera. La segunda pregunta especifica el carácter WEDNE literal, que es interpretado como el miércoles.

LA FIGURA 4-20 La función de NEXT_DAY

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

GUIÓN & SOLUCIÓN 213

Usted desea recuperar la duración de empleo en días para cada empleado. ¿Es posible realizar tal cálculo? Sí. La función de SYSDATE puede ser usada para obtener la fecha de sistema actual. La pregunta siguiente computa la duración restando la columna HIRE_DATE del valor devuelto por la función de SYSDATE: SELECCIONE SYSDATE-HIRE_DATE DE EMPLOYEES; Usted es encargado con la identificación de la fecha que el sobresueldo de personal de final del año será pagado. Los sobresueldos son por lo general pagados el viernes pasado en diciembre. ¿Puede la fecha de sobresueldo ser computada usando la función de NEXT_DAY? Sí. Si la función de NEXT_DAY es llamada con el SET de parámetro de fecha de inicio hasta el día anterior en diciembre y el SET de día de búsqueda al viernes, entonces el primer viernes en enero es devuelto. Restar siete días desde esta fecha cede la fecha del viernes pasado en diciembre. Considere la pregunta siguiente para el año 2009: SELECCIONE NEXT_DAY ('31-DEC-2009', 'el viernes')-7 del DUAL; Los EMPLOYEES que trabajan en ESTO que el departamento ha movido a nuevas oficinas y, aunque los cuatro últimos dígitos de sus números de teléfonos sean el mismo, el SET de los tres dígitos 423 son cambiados a 623. Un número de teléfono típico de ESTO empleado es 590-423 - 4567. Se requiere que usted provea una lista de los nombres de los EMPLOYEES con sus viejos y nuevos números de teléfonos. ¿Puede esto poner en una lista ser proporcionado? Sí. La función REEMPLAZAR es usada. Reemplazar cada 4 con unos 6 cambiará dígitos que no deberían ser cambiados también, entonces la cuerda para ser reemplazada debe ser únicamente especificada. La pregunta siguiente proporciona la lista: SELECCIONE FIRST_NAME, LAST_NAME, REEMPLACE (PHONE_NUMBER, '.423. ', '.623.') DE EMPLOYEES DONDE DEPARTMENT_ ID=60

El próximo miércoles después de que el 01-JAN-2009 es 07-JAN-2009. La tercera pregunta usa la forma de número entero para especificar el quinto día de la semana. Asumiendo los valores por defecto donde el domingo es representado por el número 1, el quinto día es el jueves. La próxima vez otro jueves ocurre después de que el 01-JAN-2009 es 08-JAN-2009.

La Función de LAST_DAY La función de LAST_DAY devuelve la fecha del día anterior en el mes un día especificado pertenece a. Los literales que pueden ser implícitamente dados el papel de artículos de fecha son aceptables cuando ellos ocurren

Page 184: curso_sql_certificacion

como parámetros a la función de LAST_DAY. La función de LAST_DAY toma un parámetro obligatorio. Su sintaxis es el DÍA

LAST_ (fecha de inicio). La función extrae el mes que el parámetro de fecha de inicio pertenece a y calcula la fecha del día anterior de aquel mes. Las dos preguntas en la Figura 4-21 ilustran el comportamiento de la función de LAST_DAY.

214 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-21 La función de LAST_DAY

El día anterior en el mes de enero de 2009 es 31-JAN-2009, que es devuelto por el LAST_DAY ('01-JAN-2009') llamada a la función en la primera pregunta en la cifra. La segunda pregunta extrae a los EMPLOYEES con valores JOB_ID de IT_PROG. El número de días trabajados por estos EMPLOYEES en su primer mes del empleo es calculado restando los valores de HIRE_DATE del LAST_DAY de aquel mes.

La Fecha Función REDONDA La fecha función REDONDA realiza una operación de doblamiento en un valor basado en un formato de precisión de fecha especificado. El valor volvió es o acorralado o abajo al formato de precisión de fecha más cercano.

Page 185: curso_sql_certificacion

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

DENTRO DEL EXAMEN 215

Hay dos objetivos de certificación en este capítulo. Los diversos tipos de funciones de SQL son descritos y el concepto de una función es definido. Una distinción es hecha entre el solo - funciones de fila, que ejecutan una vez para cada fila en un dataset, y funciones de fila múltiple, que ejecutan una vez para todas las filas en un conjunto de datos-. Las funciones de fila sola pueden ser usadas en el ESCOGIDO, DONDE, y PEDIDO POR cláusulas de la select SENTENCIA.

El segundo objetivo está relacionado con el uso de carácter, numérico, y funciones de fecha en preguntas. El examen prueba su entender - ing de estas funciones proporcionando ejemplos prácticos de su uso. Pueden pedirle predecir que los resultados volvieron o identificar er-rors inherente en la sintaxis de estos ejemplos.

Las funciones pueden tomar cero o más parámetros de ingreso, algunos de los cuales pueden ser obligatorios

mientras los otros son opcionales. Param-obligatorios eters son puestos en una lista primero, y los parámetros opcionales siempre son últimos. Los errores comunes están relacionados con la confusión sobre el sentido de LOCATIONS de parámetros en funciones. Un carácter func-tion como INSTR toma cuatro parámetros, con los primeros dos siendo obligatorios. El primer es la cuerda de la fuente; el segundo es la cadena de búsqueda, mientras el tercer y el cuarto no siempre son intuitivos y pueden ser fácilmente olvidados o mezclados bien. Esté seguro de recordar el sentido de parámetros en LOCATIONS diferentes. Otro error relacionado con parámetros está relacionado con confu-sion sobre los valores por defecto usados por el Oracle cuando los parámetros opcionales no son especificados. Puede esperarse que usted prediga que los resultados volvieron de llamadas a la función que no tienen todos sus parámetros opcionales especificados.

La fecha función REDONDA toma un obligatorio y un parámetro opcional. Su sintaxis es REDONDA (fecha de la fuente, [formato de precisión de fecha]). El parámetro de fecha de la fuente representa cualquier valor que pueda ser implícitamente convertido en un artículo de fecha. El parámetro de formato de precisión de fecha especifica el nivel del doblamiento y es opcional. Si es ausente, el nivel por defecto del doblamiento es el día. Esto significa que doblan sobre la fecha de la fuente hasta el día más cercano. Los formatos de precisión de fecha incluyen el siglo (CENTÍMETROS CÚBICOS), año (YYYY), cuarto (Q), mes (MM), semana (W), día (DD), hora (HH), y minuto (MI). Hablan de muchos de estos formatos en el Capítulo 5.

El rodeo al siglo es equivalente a la adición de un al siglo corriente. El rodeo al próximo mes ocurre si el componente de día es mayor que 16, más redondeando al principio del mes corriente ocurre. Si el mes se cae entre un y seis, entonces el doblamiento al año devuelve la fecha a principios del año corriente, más esto devuelve la fecha a principios del año siguiente. La figura 4-22 muestra cuatro artículos en la lista SENTENCIA, cada uno que da la vuelta sobre una fecha literal a un nivel diferente de la precisión.

Page 186: curso_sql_certificacion

216 Capítulo 4:

Funciones de fila sola

LA FIGURA 4-22 La fecha función REDONDA

El primer artículo dobla sobre la fecha hasta el día más cercano. Ya que el tiempo es 13:00, que es después 12:00, doblan sobre la fecha a la medianoche al día siguiente, o 03-JUN-2009 00:00. El segundo artículo dobla sobre la fecha hasta el mismo día de la semana que el primer día del mes y devuelve 01-JUN-2009. El tercer artículo dobla sobre la fecha al principio del mes siguiente, ya que el componente de día es 16 y devuelve 01-JUL-2009. El cuarto artículo es acorralado a la fecha a principios del año siguiente ya que el componente de mes es 7, y 01-JAN-2010 es devuelto.

La Fecha Función de TRUNC La fecha función de TRUNC realiza una operación de truncamiento en un valor de fecha basado en un formato de precisión de fecha especificado.

La fecha función de TRUNC toma un obligatorio y un parámetro opcional. Su sintaxis es TRUNC (fecha de la fuente, [formato de precisión de fecha]). El parámetro de fecha de la fuente representa cualquier valor que pueda ser implícitamente convertido en un artículo de fecha. El parámetro de formato de precisión de fecha especifica el nivel del truncamiento y es opcional. Si es ausente, el nivel por defecto del truncamiento es el día. Esto significa que cualquier componente de tiempo

Resumen de certificación

217

Page 187: curso_sql_certificacion

LA FIGURA 4-23 La fecha función de TRUNC

de la fuente la fecha es establecida a la medianoche o 0:00:00 (00 horas, 00 minutos y 00 segundos). El truncamiento al nivel de mes establece la fecha de la fecha de la fuente hasta el primer día del mes. El truncamiento al nivel de año devuelve la fecha a principios del año corriente. La figura 4-23 muestra cuatro artículos en la lista SENTENCIA, cada uno que trunca una fecha literal a un nivel diferente de la precisión.

El primer artículo pone el componente de tiempo de 13:00 a 00:00 y devuelve el día corriente. El segundo artículo trunca la fecha hasta el mismo día de la semana que el primer día del mes y devuelve 01-JUN-2009. El tercer artículo trunca la fecha al principio del mes corriente y devuelve 01-JUN-2009. El cuarto artículo es truncado a la fecha a principios del año corriente y devuelve 01-JAN-2009.

RESUMEN DE CERTIFICACIÓN Las funciones de fila sola exponencialmente realzan las posibilidades de manipulación

de datos ofrecido por select SQL. Estas funciones ejecutan una vez para cada fila de datos seleccionados. Ellos pueden ser usados en el ESCOGIDO, DONDE, y PEDIDO POR cláusulas en una select SENTENCIA.

218 Capítulo 4:

Funciones de fila sola

Hablaron de la naturaleza de caja negra de las funciones de PL/SQL incorporadas y una distinción entre múltiple y funciones de fila sola fue hecha. Un alto nivel - la descripción que describe como el carácter, numérico, e información de fecha puede ser

Page 188: curso_sql_certificacion

manipulado por funciones de fila sola fue proporcionada antes de explorar sistemáticamente varias funciones de llave detalladamente.

Las funciones de conversión de instancia del carácter fueron descritas antes de introducir las funciones de manipulación de carácter. Hablaron de las funciones numéricas POR AHÍ, TRUNC, y MOD, pero éstos representan la punta del iceberg ya que el Oracle proporciona una caja de herramientas enorme de funciones matemáticas y numéricas. La aritmética de fecha y el almacenamiento fueron brevemente explorados antes de tomar una mirada detallada a las funciones de fecha.

Hay numerosas funciones de fila sola disponibles, y no se requiere que usted memorice su cada detalle. El entendimiento de las amplias categorías de funciones de fila sola y ser introducido en el carácter común, numérico, y funciones de fecha proporcionan un punto de partida a su descubrimiento de su utilidad.

Taladradora de dos minutos

219

✓TALADRADORA DE DOS MINUTOS

Describa Diversos tipos de Funciones Disponibles en SQL ❑ Funciones aceptan cero o más parámetros de ingreso, pero siempre devuelven un resultado

de un tipo de datos predeterminado. ❑ funciones de Fila sola ejecutan una vez para cada fila seleccionada, mientras la fila múltiple

las funciones ejecutan una vez para el SET entero de filas preguntadas. ❑ funciones de Carácter son la conversión del instancia o la manipulación del carácter

funciones.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS ❑ La función de INITCAP acepta una serie de carácteres y devuelve cada palabra

en instancia de título. ❑ La función que computa el número de carácteres en una cuerda incluso

los espacios y los carácteres especiales son la función de LONGITUD. ❑ La función de INSTR devuelve la posición posicional del acontecimiento enésimo de

una serie especificada de carácteres en una cuerda de la fuente. ❑ La función de SUBSTR extrae y devuelve un segmento de una fuente dada

cuerda. ❑ La función REEMPLAZAR substituye cada acontecimiento de un artículo de búsqueda en

el cuerda de la fuente con un término de reemplazo y vueltas la cuerda de la fuente modificada.

❑ Una operación de módulo devuelve el resto de una operación de división y es disponible vía la función de MOD.

Page 189: curso_sql_certificacion

❑ La función REDONDA numérica dobla sobre números o abajo al nivel especificado de precisión.

❑ La función de SYSDATE es tradicionalmente ejecutado contra la comando DUAL y vueltas fecha corriente y tiempo del servidor de base de datos.

❑ Fecha teclea siglo de tienda, año, mes, día, hora, minutos, y segundos información.

❑ La diferencia entre dos artículos de fecha siempre es un número que representa el número de días entre estos dos artículos.

220 Capítulo 4:

Funciones de fila sola

❑ Cualquier número, incluso fracciones, puede ser añadido a o restado de una fecha el artículo y en este contexto el número representa un número especificado de días. ❑ La función de

MONTHS_BETWEEN computa el número de meses entre dos parámetros de fecha dados y está basado durante un mes de 31 días. ❑ La función de

LAST_DAY es usado para obtener el día anterior en un mes dado a cualquiera artículo de fecha válido.

MÍ PRUEBA Mí Prueba

221

Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en este capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Describa Diversos tipos de Funciones Disponibles en SQL

1. ¿Qué select en cuanto a funciones de fila sola son verdad? (Elija todo que se aplican.)

A. Ellos pueden devolver más de un resultado. B. Ellos ejecutan una vez para cada registro

tratado. C. Ellos pueden tener cero o más parámetros de ingreso. D. Ellos deben tener al menos un

parámetro obligatorio.

2. ¿Cuáles de éstos es funciones de conversión de instancia del carácter de fila sola? (Elija todo que se

aplican.)

A. MÁS ABAJO B. C MÁS PEQUEÑO. INITCASE D. INITCAP

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

3. Que valor es devuelto después de ejecutar la select siguiente: LONGITUD SENTENCIA ('¿How_long_is_a_piece_of_string?') DE DUAL; (Elija la mejor respuesta.) A. 29 B. 30 C. 24 D. Ninguno de los susodichos

Page 190: curso_sql_certificacion

4. Que valor es devuelto después de ejecutar la select siguiente: SELECCIONE SUBSTR ('¿How_long_is_a_piece_of_string?', 5,4) DE DUAL; (Elija la mejor respuesta. ¿) A. mucho tiempo B. _long C. cuerda? D. Ninguno de los susodichos

222 Capítulo 4:

Funciones de fila sola

5. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE INSTR (¿'How_long_is_a_piece_of_string?',' _ ', 5,3) DE DUAL; (Elija la mejor respuesta.) A. 4 B. 14 C. 12 D. Ninguno de los susodichos

6. ¿Qué valor es devuelto después de ejecutar la select siguiente? ESCOGIDO REEMPLAZAN (¿'How_long_is_a_piece_of_string?',' _ ','') DE DUAL; (Elija la mejor respuesta.) A. ¿Cuánto de largo es una pieza de cuerda? B. ¿How_long_is_a_piece_of_string? ¿C. Howlongisapieceofstring? D. Ninguno de los susodichos

7. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE MOD (14,3) DE DUAL; (Elija la mejor respuesta.) A. 3 B. 42 C. 2 D. Ninguno de los susodichos

8. La asunción SYSDATE=07-JUN-1996 12:05, que valor es devuelto después de ejecutar el ¿select siguiente? SELECCIONE ADD_MONTHS (SYSDATE,-1) del DUAL; (Elija la mejor respuesta.) A. 12:05 de 07-MAY-1996 B. 12:05 de 06-JUN-1996 C. 12:05 de 07-JUL-1996 D. Ninguno de los susodichos

9. ¿Qué valor es devuelto después de ejecutar la select siguiente? Tome la nota esto 01-JAN-2009 ocurre un jueves. (Elija la mejor respuesta.) SELECCIONAN NEXT_DAY ('01-JAN-2009', 'wed') DE DUAL; A. 07-JAN-2009 B. 31-JAN-2009 C. Wednesday D. Ninguno de los susodichos

Pregunta de laboratorio

223

10. La asunción SYSDATE=30-DEC-2007, que valor es devuelto después de ejecutar el siguiente ¿select? SELECCIONE TRUNC (SYSDATE, 'AÑO') DEL DUAL; (Elija la mejor respuesta.) A. 31-DEC-2007 B. 01-JAN-2008 C. 01-JAN-2007 D. Ninguno de los susodichos

PREGUNTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

Varias citas fueron solicitadas por precios en impresoras a color. La información de proveedor no es el provecho - capaz de la fuente habitual, pero usted sabe que el número de identificación de proveedor es empotrado en la columna CATALOG_URL de la comando PRODUCT_INFORMATION. Se requiere que usted recupere el PRODUCT_NAME y valores de CATALOG_URL y extraiga el número de proveedor de la columna CATALOG_URL para todos los productos que tienen tanto las palabras el COLOR como IMPRESORA en la columna PRODUCT_DESCRIPTION almacenada en cualquier instancia.

224 Capítulo 4:

Funciones de fila sola

Page 191: curso_sql_certificacion

MÍ PRUEBAN RESPUESTAS

Describa Diversos tipos de Funciones Disponibles en SQL 1. los ® B y funciones de C. Single-row ejecutan una vez para cada registro seleccionado en un dataset y puede ✓

no tome ningunos parámetros de ingreso, como SYSDATE, o muchos parámetros de ingreso. Los ® A y D son incorrectos porque una función por definición devuelve sólo un resultado y hay ˚muchas funciones sin parámetros.

2. ® A y D. La función INFERIOR converte el instancia del parámetro de cuerda de ingreso a su ✓

el equivalente minúsculo, mientras INITCAP converte el parámetro de ingreso dado al

instancia de título. Los ® B y C no son nombres de función válidos. ˚

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS 3. ® B. La función de LONGITUD computa el número de carácteres en una cuerda de ingreso dada ✓

incluso espacios, paletas, signo de puntuación, y otros carácteres especiales no imprimibles. Los ® A, C, y D son incorrectos. ˚

4. ® A. La función de SUBSTR extrae una subcuerda de cuatro carácteres de ✓ de cuerda de ingreso dado

el comienzo con e incluso el quinto carácter. Los carácteres en LOCATIONS 1 a 4 son How_.

Comenzando con el carácter en la posición 5, los cuatro siguientes carácteres forman la palabra

"mucho tiempo". Los ® B, C, y D son incorrectos porque B es una subcuerda de cinco carácteres que comienza en la posición 4, ˚¿mientras anillo?, que también es cinco carácteres mucho tiempo, comienza cinco carácteres a partir del final de la cuerda dada.

5. ® B. La función de INSTR devuelve la posición que el acontecimiento enésimo de la cadena de búsqueda ✓

puede ser encontrado después de comenzar la búsqueda de una posición de principio dada. La

cadena de búsqueda es el carácter subrayar, y el tercer acontecimiento de este carácter que

comienza de la posición 5 en la cuerda de la fuente ocurre en la posición 14. Los ® A, C, y D son incorrectos ya que la posición 4 es el primer acontecimiento de la cadena de búsqueda y ˚la posición 12 es el tercer acontecimiento si la búsqueda comenzara en la posición 1.

6. ® C. Todos los acontecimientos del carácter subrayar son reemplazados por una cuerda vacía, que ✓

los borra de la cuerda. Los ® A, B, y D son incorrectos. A es incorrecto porque los carácteres subrayar no son ˚reemplazado por espacios, y B no cambia la cuerda de la fuente.

7. ® C. Cuando 14 está dividido en 3, la respuesta es 4 con el resto 2. ✓Los ® A, B, y D son incorrectos. ˚

Respuesta de laboratorio

Page 192: curso_sql_certificacion

225

8. ® A. El menos un parámetro indica a la función de ADD_MONTHS que la fecha para ser ✓

devuelto debe ser un mes antes de la fecha dada. Los ® B, C, y D son incorrectos. El B es un día y no un mes antes de la fecha dada. El C es un ˚mes después de la fecha dada.

9. ® A. Desde el primero de enero de 2009 caídas un jueves, la fecha del miércoles siguiente ✓

es seis días más tarde. Los ® B, C, y D son incorrectos. El B vuelve el día anterior del mes al cual la fecha dada se cae, ˚y C devuelve una cadena de caracteres en vez de una fecha.

10. ® C. La fecha función de TRUNC no realiza el doblamiento y desde el nivel de ✓

el truncamiento es el AÑO, los componentes de mes y día de la fecha dada no son ignorados y el

primer día del año al cual esto pertenece es devuelto. Los ® A, B, y D son incorrectos. Unas vueltas el día anterior en el mes en cual la fecha dada ˚ocurre, y B devuelve un resultado conseguido redondeando en vez del truncamiento.

RESPUESTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE, complete las tareas siguientes.

1. Comience al Developer SQL y conecte al esquema OE. 2. Una entrada CATALOG_URL típica mira

como sigue: www.supp-102094.com/cat/hw/p1797.html. El número de identificación de proveedor es consecuentemente seis carácteres mucho tiempo y comienza del diecisiete carácter del valor de CATALOG_URL. La función de SUBSTR es usada para extraer este valor.

3. La cláusula SENTENCIA es por lo tanto SELECCIONE PRODUCT_NAME, CATALOG_URL, SUBSTR (CATALOG_URL, 17, 6) PROVEEDOR

4. El DE la cláusula es DE PRODUCT_INFORMATION

5. Los archivos recuperados deben ser limitados con los que contienen tanto las palabras el COLOR como

IMPRESORA. Estas palabras pueden ocurrir en cualquier pedido y pueden estar presentes en mayúscula o minúscula o instancia mezclado. Cualquiera de las funciones de conversión de instancia puede estar acostumbrada al acuerdo con cuestiones de instancia, pero porque las dos palabras pueden ocurrir en cualquier pedido, dos condiciones son necesarias. La función SUPERIOR será usada para la conversión de instancia para la comparación.

6. La primera condición es SUPERIOR (PRODUCT_DESCRIPTION) COMO '%COLOR %'

226 Capítulo 4:

Funciones de fila sola

7. La segunda condición es

Page 193: curso_sql_certificacion

SUPERIOR (PRODUCT_DESCRIPTION) COMO '%PRINTER %' 8. El DONDE cláusula es DONDE SUPERIOR (PRODUCT_DESCRIPTION) COMO '%COLOR %' Y SUPERIOR (PRODUCT_DESCRIPTION) COMO '%PRINTER %'

9. La ejecución de la select devuelve el SET de resultados que emparejan este modelo como mostrado en el

ilustración siguiente:

5Utilización de Funciones de Conversión y Expresiones Condicionales

OBJETIVOS DE CERTIFICACIÓN

5.01

5.02

Describa Diversos tipos de Funciones de Conversión Disponibles en SQL

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión de TO_DATE

5.03

✓Q&A

Aplique Expresiones Condicionales en una Select SENTENCIA

Page 194: curso_sql_certificacion

Taladradora de dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

228 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

Hablaron de funciones que actúan

sobre numérico, fecha, e información de carácter en el Capítulo 4, y la familiaridad con aquel

contenido es asumida en este capítulo. A veces los datos no están disponibles en el formato exacto

que una función es definida para aceptar, causando un tipo de datos

falta de armonía. Para evitar errores de falta de armonía, el Oracle implícitamente converte tipos de datos compatibles. Implícito hablan de la conversión antes de introducir funciones de conversión explícitas, que son usadas para conversiones de tipo de datos confiables.

Page 195: curso_sql_certificacion

El concepto de funciones que anidan es definido y una categoría de funciones generales apuntadas a la simplificación de interacciones con valores NULOS es introducida. Éstos incluyen el NVL, NVL2, NULLIF, y SE FUNDEN funciones.

La lógica condicional, o la capacidad de mostrar resultados diferentes según valores de datos, es expuesta por el INSTANCIA de funciones condicional y DECODIFICAR. Estas funciones proporcionan la lógica "si entonces más" en el contexto de un SQL preguntan.

OBJETIVO DE CERTIFICACIÓN 5.01

Describa Diversos tipos de Funciones de Conversión Disponibles en SQL

Las funciones de conversión de SQL son funciones de fila solas diseñadas para cambiar la

naturaleza del tipo de datos de un valor de columna, expresión o literal. TO_CHAR, TO_NUMBER y TO_DATE son las tres funciones de conversión el más extensamente usadas y son hablados detalladamente. La función de TO_CHAR converte numérico e información de fecha en carácteres, mientras TO_NUMBER y TO_DATE converten datos de carácter en números y fechas, respectivamente. Hablan de los conceptos de la conversión de tipo de datos implícita y explícita en la siguiente sección.

Funciones de conversión El oracle permite que columnas sean definidas con ANSI, DB2, y tipos de datos

SQL/DS. Éstos son convertidos internamente a tipos de datos de Oracle. Este enfoque permite que aplicaciones escritas para otros sistemas de base de datos sean emicapas al Oracle con la facilidad.

Las definiciones de comando son obtenidas usando el comando DESCRIBIR hablado en El capítulo 2. Cada columna tiene un tipo de datos asociado que reprime la naturaleza

de Describa Diversos tipos de Funciones de Conversión Disponibles en SQL

229

los datos esto puede almacenar. Una columna de NÚMERO no puede almacenar la información de carácter. Una columna de FECHA no puede almacenar carácteres arbitrarios o números. Sin embargo, los equivalentes de carácter tanto de número como de información de fecha pueden ser almacenados en un espacio de VARCHAR2.

Si una función que acepta un parámetro de ingreso de carácter encuentra un número en cambio, el Oracle automáticamente la converte en su carácter equivalente. Si una función que acepta un número o un parámetro de fecha encuentra un valor de carácter, hay condiciones específicas en las cuales la conversión de tipo de datos automática ocurre. La FECHA y los tipos de datos de NÚMERO son muy

Page 196: curso_sql_certificacion

estrictos comparado con VARCHAR2 y TRABAJO POR HORAS. Aunque las conversiones de tipo de datos implícitas estén disponibles, es más confiable para convertir

explícitamente valores de un tipo de datos a otra conversión de fila sola de utilización funciones. Convertir la información de carácter a NÚMERO y FECHA confía en máscaras de formato, de que hablan más tarde en esta sección.

Cuando los valores numéricos son suministrados como introducido a funciones que esperan parámetros de carácter, la conversión de tipo de datos implícita asegura que ellos son tratados como valores de carácter. Del mismo modo, las cadenas de caracteres que consisten en dígitos numéricos son implícitamente convertidas en valores numéricos si posible cuando una falta de armonía de tipo de datos ocurre. Pero tener cuidado con conversiones implícitas. Hay algunos instancias cuando esto no trabaja tan esperado, como en el siguiente DONDE cláusula. Considere datos restrictivos de una tabla T basados en una columna C de carácter, que contiene la cuerda '100 cláusula de condición '.El DONDE C = '100' trabajos como usted podría esperar, pero la condición DONDE C=100 devuelve un error de número inválido.

Los Valores de Conversión de Tipo de datos implícitos que no comparten tipos de datos idénticos con parámetros de función son implícitamente convertidos al formato requerido de ser posible. VARCHAR2 y los tipos de datos de TRABAJO POR HORAS son colectivamente referidos como tipos de carácter. Los espacios de carácter son flexibles y permiten el almacenamiento de casi cualquier tipo de la información. Por lo tanto, la FECHA y los valores de NÚMERO pueden ser fácilmente convertidos a sus equivalentes de carácter. Estas conversiones son conocidas como número al carácter y fecha a conversiones de carácter. Considere las preguntas siguientes:

La consulta 1: longitud sentencia (1234567890) de dual La consulta 2: longitud sentencia (SYSDATE) de dual

Ambas preguntas usan la función de LONGITUD, que toma una cadena de caracteres parámetro. El número 1234567890 en la consulta 1 es implícitamente convertido en una cadena de caracteres, '1234567890', antes de ser evaluado por la función de LONGITUD,

230 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

que devuelve el número 10. La consulta 2 primero evalúa la función de SYSDATE, que es supuesta ser 07-APR-38. Esta fecha es implícitamente convertida en la cadena de caracteres '07-APR-38', y la función de LONGITUD devuelve el número 9.

Es poco común para datos de carácter para ser implícitamente convertidos en tipos de datos numéricos desde la única condición en la cual esto ocurre es si los datos de carácter representan un número válido. La cadena de caracteres '11' será implícitamente convertida a un número, pero '11.123.456' no será, como las preguntas siguientes demuestran:

Pregunta 3: escogido mod ('11', 2) de dual

Pregunta 4: escogido

Page 197: curso_sql_certificacion

mod ('11.123', 2) de dual Pregunta 5: escogido mod ('11.123.456', 2) de dual

Pregunta 6: escogido mod ('11$', 2) de dual

Las consultas 3 y 4 implícitamente converten las cadenas de caracteres '11' y '11.123'

en el los números 11 y 11.123, respectivamente, antes de la función de MOD los evalúan y devuelven los resultados 1 y 1.123. La consulta 5 devuelve el error "ORA-1722: el número inválido," cuando el Oracle trata de realizar un carácter implícito para numerar la conversión. Esto falla porque la cuerda '11.123.456' no es un número válido. La consulta 6 también falla con el error de número inválido, ya que el símbolo de dólar no puede ser implícitamente convertido en un número.

El carácter implícito para fechar conversiones es posible cuando la cadena de caracteres se conforma con los modelos de fecha siguientes: [D|DD] separator1 [MON|MONTH] separator2 [R|RR|YY|YYYY]. Los D y DD representan un día solo y de 2 dígitos del mes. MON es una abreviatura de 3 carácteres, mientras el MES es el nombre completo durante un mes. Los R y RR representan un año solo y de 2 dígitos. YY y YYYY representan un 2-y año de 4 dígitos, respectivamente. El separator1 y los elementos separator2 pueden ser la mayor parte de signos de puntuación, espacios, y paletas. La tabla 5-1 demuestra el carácter implícito para fechar la conversión, poniendo en una lista varias llamadas a la función y los resultados vueltas de Developer de SQL.

TABLA 5-1

Ejemplos de Carácter Implícito para fechar Conversión

Llamada a la función add_months ('24-JAN-09', 1) add_months ('1\january/8', 1) months_between ('13*jan*8', '13/feb/2008') add_months ('01$jan/08', 1) add_months (¡'13! jana08', 1)

add_months ('24-JAN-09 18:45', 1)

Formatee DD-MON-RR D\MONTH/R DD*MON*R, DD/MON/YYYY DD$MON/RR JANA es un mes inválido

DD-MON-RR HH24:MI

Resultados 24/FEB/09 01/FEB/08 - 1

01/FEB/08 ORA-1841: el año (apretado) debe estar entre-4713 y +9999 y no ser 0 Real Academia de Bellas Artes O 1830: el formato de fecha imagina finales antes de convertir la cuerda de ingreso entera

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

Conversión de Tipo de datos explícita

Page 198: curso_sql_certificacion

231 El oracle ofrece muchas funciones para convertir artículos de un tipo de datos al otro, conocido como funciones de conversión de tipo de datos explícitas. Éstos devuelven un valor garantizado para ser el tipo requerido y ofrecer un método seguro y confiable de convertir artículos de datos.

EL NÚMERO y los artículos de FECHA pueden ser convertidos explícitamente en artículos de carácter usando la función de TO_CHAR. Una cadena de caracteres puede ser explícitamente cambiada en un NÚMERO usando la función de TO_NUMBER. La función de TO_DATE es usada para convertir cadenas de caracteres en artículos de FECHA. Las máscaras de formato del oracle habilitan una amplia gama del control de carácter al número y carácter para fechar conversiones.

Las funciones de conversión explícitas son críticas a la manipulación de fecha, carácter, e información numérica. Las preguntas en este tema prueban su entendimiento de modelos de formato comúnmente usados o máscaras. Las preguntas de uso prácticas típicamente toman la forma, "Lo que es devuelto cuando el TO_DATE, TO_CHAR, y

OBJETIVO DE CERTIFICACIÓN 5.02

¿Las funciones de TO_NUMBER son aplicadas a los valores de datos siguientes y formatean máscaras?" Éstos a menudo son anidados dentro de funciones más amplias, y es común ser pedido predecir el resultado de una llamada a la función, como el TO_CHAR (TO_DATE ('01-JAN-00', 'DD-MON-RR), 'Día').

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

Este objetivo de certificación contiene una descripción sistemática del TO_NUMBER, TO_DATE, y funciones de TO_CHAR, con ejemplos. La discusión de TO_CHAR está dividida en la conversión de dos tipos de artículos a carácteres: FECHA y NÚMERO. Esta separación es garantizada por la disponibilidad de máscaras de formato diferentes para controlar la conversión a valores de carácter. Estas funciones de conversión existen junto a muchos otros, pero tienden a estar el más extensamente usadas. Esta sección se concentra en las factibilidades de usar las funciones de conversión.

232 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

Page 199: curso_sql_certificacion

Utilización de las Funciones de Conversión Muchas situaciones exigen el uso de funciones de conversión. Ellos pueden extenderse

de el formateo de la FECHA para y devuelve la pelota en un informe al contrato de un seguro que los dígitos numéricos extraídos de espacios de carácter son correctamente convertidos en números antes de aplicarlos en una expresión aritmética.

La tabla 5-2 ilustra la sintaxis de la fila sola conversión de tipo de datos explícita funciones.

Los parámetros de apoyo de lenguaje nacionales opcionales (nls_parameters) son útiles para especificar la lenguaje y formato en el cual los nombres de fecha y elementos numéricos son devueltos. Estos parámetros son por lo general ausentes, y los valores por defecto para elementos, como día o nombres de mes y las abreviaturas son usadas. Como la Figura 5-1 muestra, hay una vista en público disponible llamada NLS_SESSION_PARAMETERS que contiene los parámetros NLS para su sesión corriente. El valor de NLS_CURRENCY por defecto es el símbolo de dólar, pero esto puede ser cambiado al nivel de sesión de usuario. Por ejemplo, para cambiar el dinero al 3 carácter mucho tiempo ensartan GBP, el comando siguiente puede ser publicado:

CAMBIE LA SESIÓN puso NLS_CURRENCY ='GBP';

Convertiendo Números a Carácteres Usando la Función de TO_CHAR La función de TO_CHAR devuelve un artículo de tipo de datos VARCHAR2. Cuando aplicado a artículos del NÚMERO de tipo, varias opciones de formateo están disponibles. La sintaxis es como sigue:

TO_CHAR (number1, [formato], [nls_parameter]), El parámetro number1 es obligatorio y debe ser un valor que es o puede ser

implícitamente convertido en un número. El parámetro de formato opcional puede ser usado para especificar la información de formateo numérica como anchura, símbolo monetario, la posición de una coma decimal, y grupo (o miles) separadores y debe ser encerrado en el solo

TABLA 5-2

Sintaxis de Funciones de Conversión de Tipo de datos Explícitas

TO_NUMBER (char1, [formatean la máscara], [nls_parameters]) = num1 TO_DATE (char1, [máscara de formato], [nls_parameters]) = date1

TO_CHAR (num1, [formatean la máscara], [nls_parameters]) = char1 TO_CHAR (date1, [máscara de formato], [nls_parameters]) = char1

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

233

Page 200: curso_sql_certificacion

LA FIGURA 5-1 Apoyo de Lenguaje nacional (NLS) parámetros de sesión

comillas. Hay otras opciones de formateo para números convertidos en carácteres, algunos de los cuales son puestos en una lista en la Tabla 5-3. Considere las dos preguntas siguientes:

La consulta 1: seleccione to_char (00001) ||' es un número especial'

del dual; La consulta 2: seleccione to_char (00001, '0999999') ||' es un número especial' del dual;

La consulta 1 evalúa el número 00001, borra los ceros principales, converte el el número 1 en el carácter '1' y vueltas la cadena de caracteres '1 es un número especial'. La consulta 2 aplica la máscara de formato numérica '0999999' al número 00001, convertiéndolo en la cadena de caracteres '0000001'. Después del encadenamiento a los literales de carácter, la cuerda volvió es '0000001 es un número especial'. El cero y 6 nines en la máscara de formato indican a la función de TO_CHAR que los ceros principales deben ser mostrados y que la anchura de visualización debe ser puesta a siete carácteres. Por lo tanto, la cuerda devuelta por la función de TO_CHAR contiene siete carácteres.

234 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

LA TABLA 5-3 Descripción de formato Elemento de Elemento Formato Resultado de Carácter de

número

Page 201: curso_sql_certificacion

Numérico

9Anchura numérica

9999 12 12

Máscaras de formato 0

Visualizaciones ceros principales 09999 0012 00012

.Posición de decimal

09999.999 030.40 00030.400

punto

DSeparador decimal

09999D999 030.40 00030.400

la posición (el período es

falta)

,Posición de coma

09999 999 03040 00003 040

símbolo

G Posición de separador de grupo 09999G999 03040 00003 040 (la coma es por defecto)

$Signo de dólar

099999$

Page 202: curso_sql_certificacion

03040 003040$

LMoneda local

L099999 03040

GBP003040 si

el nls_currency es puesto a GBP

MI Posición de signo menos

99999MI 3040

3040

para negativas

PR Negativas de abrigo en

99999PR 3040

<3040>

paréntesis

EEEE Nota científica

99.99999EEEE 121.976

1.21976E+02

Unls_dual_currency

U099999 03040

CAD003040 si nls_dual_

el dinero es puesto al diseño asistido por comandoador

VSe multiplica por 10n tiempos

9999V99 3040

304000

(n es el número de

nines después V)

Page 203: curso_sql_certificacion

S+ o - el signo es prefijado

S999999 3040

+3040

La pregunta en la Figura 5-2 recupera el JOB_TITLE y columnas MAX_SALARY de la comando de JOBS para las filas con la palabra "presidente" en la columna JOB_TITLE. MAX_SALARY ha sido formateado adelante para tener un símbolo monetario de dólar, una coma miles de separador, y una coma decimal. Cuando una máscara de formato es más pequeña que el número convertido, como ilustrado en el cuarto artículo en la lista SENTENCIA, una serie de símbolos de picadillo es devuelta en cambio. Cuando una máscara de formato contiene menos componentes fraccionarios que el número, doblan primero sobre ello al número de sitios decimales en la máscara de formato antes de ser convertidos.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

235

LA FIGURA 5-2 TO_CHAR funcionan con números

Convertir números en carácteres es una manera confiable de asegurar que las funciones y la sintaxis SQL general, que espera el ingreso de carácter, no devuelven errores cuando los números son encontrados. Convertir números en cadenas de caracteres es común cuando los datos numéricos deben ser formateados para relatar objetivos. Las máscaras de formato que apoyan el dinero, miles de separadores, y separadores de coma decimal son con frecuencia

Page 204: curso_sql_certificacion

usadas presentando datos financieros.

Convertiendo Fechas a Carácteres Usando la Función de TO_CHAR Usted puede aprovechar una variedad de modelos de formato para convertir artículos de FECHA en casi cualquier representación de carácter de una fecha usando TO_CHAR. Su sintaxis es como sigue:

TO_CHAR (date1, [formato], [nls_parameter]), Sólo el parámetro date1 es obligatorio y debe tomar la forma de un valor

esto puede ser implícitamente convertido a una fecha. El parámetro de formato opcional es el instancia sensible y debe ser encerrado en citas solas. La máscara de formato especifica qué elementos de fecha son extraídos y si el elemento debería ser descrito por un largo o un nombre abreviado. Los nombres de días y meses son automáticamente rellenados

236 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

con espacios. Éstos pueden ser borrados usando un modificador para la máscara de formato llamada el modo llenar (de) el operador. Prefijando el modelo de formato con las cartas de, el Oracle es instruido de recortar todos los espacios de los nombres de días y meses. Hay muchas opciones de formateo para fechas convertidas en carácteres, algunos de los cuales son puestos en una lista en la Tabla 5-4.

Considere las tres preguntas siguientes:

La consulta 1: seleccione to_char (sysdate) ||' es hoy ''s la fecha'

del dual; La consulta 2: seleccione to_char (sysdate, 'Mes') || 'es un tiempo especial' del dual; la Consulta 3: seleccione to_char (sysdate, 'fmMonth') || 'es un tiempo especial' del dual;

Si la fecha de sistema actual es 03/JAN/09 y el formato de visualización por defecto

es DD/MON/RR, entonces la consulta 1 vuelve la cadena de caracteres '03/JAN/09 es la fecha de hoy'. Hay dos componentes notables en la consulta 2. En primer lugar, sólo el componente de mes de la fecha de sistema actual es extraído para la conversión a un tipo de carácter. En segundo lugar,

TABLA 5-4

Máscaras de Formato de fecha durante Días, Meses, y Años

Elemento de formato YYY YYY YYYY RR AÑO

MM MES DE MON DDD DDD DY DÍA

Page 205: curso_sql_certificacion

El último dígito de la descripción del año dos Últimos dígitos del año tres Últimos dígitos del año año De cuatro dígitos año De dos dígitos (ver el Capítulo 3 para detalles) la ortografía inglesa sensible al Instancia del año

Mes de dos dígitos abreviatura De tres cartas de mes ortografía inglesa sensible al Instancia de Día de mes de la semana día De dos dígitos de Día de mes del año abreviatura De tres cartas de día ortografía inglesa sensible al Instancia de día

Resultado 575975 1975 75 DIECINUEVE SETENTA Y CINCO el 06 de junio JUNIO 202153 LUNES MON

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

237

ya que la máscara de formato es el instancia sensible y 'el Mes' aparece en el instancia de título, la cuerda volvió es 'enero es un tiempo especial'. No hay ninguna necesidad de añadir que un espacio delante del literal 'es un tiempo especial' ya que la función de TO_CHAR automáticamente rellena el nombre del mes con un espacio. Si la máscara de formato en la consulta 2 fuera 'el MES', la cuerda volvió sería 'ENERO es un tiempo especial'. El del modificador es aplicado a la consulta 3, y la cuerda consiguiente es 'enero es un tiempo especial'. La nota allí no es ningún espacio entre enero y el literal 'es un tiempo especial'. En la Tabla 5-4, suliste que los elementos funcionen en la fecha 02-JUN-1975 y el año corriente es 2009.

Los elementos de formato de fecha que pertenecen a semanas, cuartos, siglos, y otras máscaras de formato menos comúnmente usadas son puestos en una lista en la Tabla 5-5. La columna de resultado es obtenida evaluando la función de TO_CHAR usando la fecha 24-SEP-1000 A.C., con la máscara de formato de la columna de elemento de formato en la comando.

El componente de tiempo de un tipo de datos de tiempo de fecha es extraído usando los modelos de formato en la Tabla 5-6. El resultado es obtenido evaluando la función de TO_CHAR usando la fecha incluso su componente de tiempo 27-JUN-2010 21:35:13, con la máscara de formato en la columna de elemento de formato en la Tabla 5-6.

TABLA 5-5

Máscaras de Formato de Fecha Menos comúnmente Usadas

WWW de Elemento de formato QCC S CENTÍMETROS CÚBICOS precedentes, YYYY, o AÑO IYYY, IYY, IY, yo

A.C., d. C., a. de J.C. y d.J.C. J

Page 206: curso_sql_certificacion

IW

RM

La Semana de descripción de la Semana de mes del año Cuarto del Siglo de año Si la fecha es A.C., un menos es prefijada para resultar fechas de organización internacional para la normalización de cuatro, tres, dos, y un dígito, respectivamente A.C. o d. C. y período espaciado a. de J.C. o d.J.C días del día de Julian desde el 31 de diciembre 4713 A.C. semana de estándar de organización internacional para la normalización (1 a 53) mes de número romano

Resultado 439310 - 10,-1000 o - MIL

1000, 000, 00, 0

A.C.

1356075

39

IX

238 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

TABLA 5-6

Máscara de Formato de fecha para Componentes de Tiempo

Elemento de formato de la mañana, de la tarde, de la mañana y de la TARDE. HH, HH12 y HH24 MI SS SSSSS

Hora de indicadores Meridian de descripción de día, 1-12 horas, y Minuto de 0-23 horas (0-59) Segundo (0-59) Segundos la medianoche pasada (0-86399)

Resultado de la tarde 09, 09, 21 35 13 77713

Varios otros elementos que pueden ser usados en modelos de formato de tiempo de fecha son resumidos en la Tabla 5-7. Los signos de puntuación son usados para separar elementos de formato. Tres tipos de sufijos existen para formatear componentes de

Page 207: curso_sql_certificacion

elementos tiempo de fecha. Además, los literales de carácter pueden ser incluidos en mo de formato de fecha del si ellos son encerrados en dobles comillas. Los resultados en la Tabla 5-7 son obtenidos aplicando la función de TO_CHAR usando la fecha 12/SEP/08 14:31 con las máscaras de formato puestas en una lista en la descripción y formatean la columna de máscara.

La comando JOB_HISTORY guarda la pista de JOBS ocupados por EMPLOYEES en la compañía. La pregunta en la Figura 5-3 recupera una oración descriptiva sobre la fecha que sale de cada empleado basado en su END_DATE, EMPLOYEE_ID, y espacios de JOB_ID. Una expresión de carácter es concadenada a una llamada a la función TO_CHAR con un modelo de formato de: 'fmDay "el "ddth "de" Mes YYYY'. El del modificador es usado para recortar espacios en blanco que arrastran los nombres de los días más cortos y meses más cortos. Los dos literales de carácter encerrados en dobles comillas son las palabras: el y "de". El modelo de formato 'de th' es aplicado al elemento de fecha 'dd' para crear un ordinal

TABLA 5-7

Máscaras de Formato de Fecha diversas

¡Elemento de formato -/.,?#! "cualquier carácter literal"

TH

SP

THSP o SPTH

Descripción y Signos de puntuación de Máscara de Formato: literales de Carácter 'de MM.YY': '"semana" W "de" Mes' texto Posicional u ordinal: 'DDth "de" Mes' número Explicado detalladamente: 'Mes de MmSP Yyyysp' Explicado detalladamente posicional o número ordinal: 'hh24SpTh'

Resultado 09.08 Semana el 2 de septiembre

El 12 de septiembre

El nueve de septiembre Dos mil ocho Catorce

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

239

LA FIGURA 5-3 TO_CHAR funcionan con fechas

Page 208: curso_sql_certificacion

día tal como el 17mo o 31er. El modelo de formato 'de Mes' muestra el nombre completo del elemento de mes de la columna END_DATE en el instancia de título. Finalmente, la máscara de formato de YYYY recupera el componente de año de 4 dígitos.

EJERCICIO 5-1 Fechas que Converten en Carácteres Usando la Función de TO_CHAR

Se requiere que usted recupere una lista de FIRST_NAME y valores de LAST_NAME y un la expresión basada en la columna HIRE_DATE para EMPLOYEES alquilada un sábado. La expresión debe ser aliased como START_DATE y un valor HIRE_DATE de 17-FEB-1996 debe devolver la cuerda siguiente:

El sábado, 17 de febrero, Mil novecientos noventa y seis.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. El DONDE la cláusula es

DONDE TO_CHAR (HIRE_DATE, 'fmDay') = 'el sábado'

240 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

El del modificador es necesario para borrar el rastreo de impresos ya que una comparación con un carácter literal es realizada y se requiere un partido exacto.

3. La expresión START_DATE es TO_CHAR (HIRE_DATE, 'fmDay, "el "ddth "de" Mes, Yyyysp.') La máscara de formato de año lo causa ser explicada detalladamente en el instancia de título.

4. La cláusula SENTENCIA es por lo tanto SELECCIONE FIRST_NAME, LAST_NAME, TO_CHAR (HIRE_DATE, 'fmDay, "el "ddth "de"

Page 209: curso_sql_certificacion

Mes, Yyyysp.') START_DATE 5. El DE la cláusula es

DE EMPLOYEES 6. La ejecución de esta select devuelve los nombres de los EMPLOYEES y el START_DATE

expresión como mostrado en la ilustración siguiente abajo: Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

241

Convertiendo Carácteres a Fechas Usando la Función de TO_DATE La función de TO_DATE devuelve un artículo de la FECHA de tipo. Las cadenas de caracteres convertidas a fechas pueden contener todos o sólo un subconjunto de los elementos tiempo de fecha que comprenden una FECHA. Cuando las cuerdas con sólo un subconjunto de los elementos tiempo de fecha son convertidas, el Oracle proporciona valores por defecto para construir una fecha completa. Los componentes de cadenas de caracteres tienen que ver con elementos tiempo de fecha diferentes usando un modelo de formato o máscara. La sintaxis es como sigue:

TO_DATE (string1, [formato], [nls_parameter]), Sólo el parámetro string1 es obligatorio y si ninguna máscara de formato es suministrada, string1

debe tomar la forma de un valor que puede ser implícitamente convertido en una fecha. El parámetro de formato opcional siempre es casi usado y es especificado en comillas solas. Las máscaras de formato son idénticas a los puestos en una lista en las Tablas 5-4, 5-5, y 5-6. La función de TO_DATE tiene un modificador fx que es similar a del usado con la función de TO_CHAR. el fx especifica un partido exacto para string1 y la máscara de formato. Cuando el modificador fx es especificado, los artículos de carácter que no emparejan exactamente la máscara de formato ceden un error. Considere las cinco preguntas siguientes:

La consulta 1: seleccione to_date ('25-DEC-2010') del dual; La consulta 2: seleccione to_date ('el 25 de diciembre') del dual; la Consulta 3: seleccione to_date ('el 25 de diciembre', 'DD-MON') del dual; la Consulta 4: seleccione to_date ('25-DEC-2010 18:03:45', 'DD-MON-YYYY HH24:MI:SS') del dual; la Consulta 5: seleccione to_date ('25-DEC-10', 'fxDD-MON-YYYY') del dual;

La consulta 1 evalúa la cuerda 25-DEC-2010 y tiene la información suficiente a implícitamente convértalo en un artículo de FECHA con una máscara por defecto de DD-MON-YYYY. El separador de guión podría ser substituido con otro carácter de puntuación. Ya que ningunos componentes de tiempo son proporcionados, el tiempo para esta fecha convertida es puesto a la medianoche o 0:00:00. La consulta 2 no puede convertir implícitamente la cuerda en una fecha porque hay información insuficiente y "ORA-01840: el valor de ingreso no es el bastante mucho tiempo para el error" de formato de fecha es devuelto. Suministrando una máscara de formato DD-MON a la cuerda el 25 de diciembre en la consulta 3, el Oracle puede emparejar el número 25 a DD y el mes abreviado llaman DICIEMBRE al componente MON. El año y los componentes de tiempo son ausentes, entonces el año corriente devuelto por la función de SYSDATE es usado y el tiempo es puesto a la medianoche. Si el año corriente es 2009, la consulta 3 devuelve la fecha 25/DEC/09 0:00:00. La consulta 4 realiza una conversión completa de una cuerda con todos los elementos tiempo de fecha presentes, y ningunos valores por defecto son suministrados por el Oracle. La consulta 5 usa el modificador fx en su máscara de formato. Ya que el componente de año de la cuerda es 10 y la máscara de formato correspondiente es YYYY, los resultados de modificador fx en "ORA-01862: el valor numérico no empareja la longitud del error" de artículo de formato devuelto.

242

Page 210: curso_sql_certificacion

Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-4 La función de TO_DATE

La función de TO_DATE es usada en el DONDE la cláusula en la Figura 5-4 para limitar las filas volvió para aquellos EMPLOYEES contratados después del 12 de enero de 2000. La máscara de formato empareja 01 al MM, 12 a DD y 2000 a YYYY.

Convertiendo Carácteres a Números Usando la Función de TO_NUMBER La función de TO_NUMBER devuelve un artículo del NÚMERO de tipo. Las cadenas de caracteres convertidas en números deben ser apropiadamente formateadas de modo que cualquier componente no numérico sea traducido o quitado con una máscara de formato apropiada. La sintaxis es como sigue:

TO_NUMBER (string1, [formato], [nls_parameter]), Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

GUIÓN & SOLUCIÓN 243

Su tarea es extraer la parte de mes y día de una columna de fecha y compararla con los componentes

Page 211: curso_sql_certificacion

correspondientes de la fecha de sistema actual. ¿Puede tal comparación ser realizada? Sí. La función de TO_CHAR usada en un artículo de fecha con una máscara de formato como 'DD-MON' hace que el componente de mes y día sea aislado. Este valor puede ser comparado con la fecha de sistema actual usando la expresión siguiente: TO_CHAR (SYSDATE, 'DD-MON') Se requiere un informe de ganancias y pérdidas con los resultados mostrados como sigue: si la cantidad es negativa, debe ser encerrada en corchetes angulares. La cantidad debe ser mostrada con un signo de dólar principal. ¿Pueden los resultados ser recuperados en el formato especificado? Sí. La cantidad numérica debe ser convertida en una cadena de caracteres usando la función de TO_CHAR con una máscara de formato que lo encierra en corchetes angulares si es negativo y precede a ello con un signo de dólar. La llamada a la función siguiente recupera los resultados en el formato requerido: TO_CHAR (CANTIDAD, 'PR de 999999$') Le piden introducir datos de empleado pasados en la comando JOB_HISTORY de una fuente basada en el papel, pero la información de fecha de inicio sólo está disponible como el año que el empleado comenzó. ¿Puede esto valorar ser convertido en el primero de enero del año? Sí. Considere la llamada a la función de conversión FECHA de TO_ ('2000', 'YYYY') para un empleado que comenzó en el año 2000. Si esta fecha es extraída como sigue, la cadena de caracteres el 01/01/2000 es devuelta TO_CHAR (TO_DATE ('2000', 'YYYY'), 'MM/DD/YYYY')

Sólo el parámetro string1 es obligatorio y si ninguna máscara de formato es suministrada, debe ser un valor que puede ser implícitamente convertido en un número. El parámetro de formato opcional es especificado en comillas solas. Las máscaras de formato son idénticas a los puestos en una lista en la Tabla 5-3. Considere las dos preguntas siguientes:

La consulta 1: seleccione el to_number ('1.000,55$') del dual; La consulta 2: seleccione to_number ('1.000,55$', '999.999,99$') del dual;

La consulta 1 no puede realizar una conversión implícita a un número debido al dólar signo, coma, y período y vueltas el error, "ORA-1722: número inválido." La consulta 2 empareja el símbolo de dólar, coma, y período de la cuerda a la máscara de formato y, aunque la anchura numérica sea más grande que la anchura de cuerda, el número 1000.55 es devuelto.

La figura 5-5 muestra como la función de SUBSTR era usada primero para extraer los ocho últimos carácteres de la columna de carácter PHONE_NUMBER. El TO_NUMBER

244 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-5 La función de TO_NUMBER

Page 212: curso_sql_certificacion

la función era usada entonces para convertir estos ocho carácteres, incluso una coma decimal, en un número que fue multiplicado por 10000, para EMPLOYEES que pertenecen a DEPARTMENT_ID 30.

Lea las preguntas de examen muy con cuidado. La función de TO_NUMBER converte artículos de carácter en números. Si usted converte un número usando una máscara de formato más corta, un error es devuelto. Si usted converte un número basado en un formato más largo

máscara, el número original es devuelto. Procure no confundir conversiones TO_NUMBER con TO_CHAR. Por ejemplo, TO_NUMBER (123.56, '999.9') devuelve un error, mientras TO_CHAR (123.56, '999.9') vuelve 123.6.

Aplique Expresiones Condicionales en una Select SENTENCIA

245

OBJETIVO DE CERTIFICACIÓN 5.03

Aplique Expresiones Condicionales en una Select SENTENCIA

Las funciones anidadas fueron introducidas en el Capítulo 4, pero una discusión formal de

este concepto es proporcionado en esta sección. Dos nuevas categorías de funciones también son introducidas. Éstos incluyen las funciones generales, que proporcionan la lenguaje a tratar con eficacia con valores NULOS, y las funciones condicionales, que apoyan la lógica condicional en expresiones. Este objetivo de certificación cubre las áreas siguientes:

Page 213: curso_sql_certificacion

■ Anidó funciones ■ funciones Generales ■ funciones Condicionales

Funciones anidadas Las funciones anidadas usan salida de una función como el ingreso al otro. Funciones siempre devuelva exactamente un resultado. Por lo tanto, usted puede considerar de fuentes fidedignas una llamada a la función del mismo modo ya que usted iba un valor literal, cuando parámetros de ingreso de suministro a una función. Las funciones de fila solas pueden ser anidadas a cualquier nivel de la profundidad. La forma general de una función es como sigue:

Function1 (parámetro 1, parameter2, ) = result1 Substitución de llamadas a la función

como parámetros a otras funciones puede llevar un expresión, como lo siguiente:

F1 (param1.1, F2 (param2.1, param2.2, F3 (param3.1)), param1.3) Anidó las

funciones son evaluadas primero antes de que sus valores de retorno sean usados como

paramétricos ingreso a otras funciones. Ellos son evaluados del íntimo a los niveles más extremos. La expresión precedente es evaluada como sigue:

1. El F3 (param3.1) es evaluado y su valor de retorno proporciona el tercer parámetro

funcionar F2 y puede ser llamado: param2.3. 2. F2 (param2.1, param2.2, param2.3) es evaluado y su valor de retorno provee

el segundo parámetro para funcionar F1 y es param1.2.

246 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

3. F1 (param1.1, param1.2, param1.3) es evaluado y el resultado es devuelto a el programa de vocación.

Se dice que la función F3 es anidada tres niveles profundamente en este ejemplo. Considere el pregunta siguiente:

longitud sentencia (to_char (to_date ('28/10/09', 'DD/MM/RR'), 'fmMonth')) de dual;

Hay tres funciones en la lista SENTENCIA que, del interior a niveles externos, son TO_DATE, TO_CHAR y LONGITUD. La pregunta es evaluada como sigue:

1. La función íntima es evaluada primero. TO_DATE ('28/10/09', 'DD/MM/RR') converte la cadena de caracteres el 28/10/09 en la FECHA valoran 28-OCT-2009. La máscara de formato de RR es usada para la parte de año. Por lo tanto, el componente de siglo volvió es el siglo corriente (el veintiuno), ya que el componente de año está entre 0 y 49.

2. La segunda función íntima es evaluada después. TO_CHAR ('28-OCT-2009', 'el fmMonth') converte la fecha dada basada en la máscara de formato de Mes y

Page 214: curso_sql_certificacion

devuelve el octubre de cadena de caracteres. El del modificador recorta el rastreo de espacios en blanco del nombre del mes.

3. Finalmente, la LONGITUD ('octubre') función es evaluada y las vueltas de pregunta

el número 7.

GUIÓN & SOLUCIÓN ¿Son anidados funciones evaluadas del nivel más extremo al nivel íntimo? No. Las funciones anidadas son resueltas del nivel anidado íntimo que se mueve externo. ¿Deben todas las funciones en una expresión anidada devolver el mismo tipo de datos? No. Los tipos de datos de los parámetros de funciones anidadas pueden ser diferentes el uno del otro. Es importante asegurar que los tipos de datos correctos siempre son suministrados a funciones para evitar errores. ¿Hay una manera más simple de mostrar la información de SUELDO de la comando de EMPLOYEES en la forma 13.000$ sin usar la select siguiente? SELECCIONE 'el $' || SUBSTR (SUELDO, 1, MOD (LONGITUD (SUELDO), 3)) || ',' || SUBSTR (SUELDO, MOD (LONGITUD (SUELDO), 3) +1) Sí. Una solución simple y elegante es usar la función de TO_CHAR con 'G999 de 99$' TO_CHAR escogido de la máscara de formato (SUELDO, 'G999 de 99$') DE EMPLOYEES;

Funciones generales Aplique Expresiones Condicionales en una Select SENTENCIA

247 Las funciones generales simplifican el funcionamiento con columnas que potencialmente contienen valores nulos. Estas funciones aceptan parámetros de ingreso de todos los tipos de datos. Los servicios que ellos ofrecen son relevantes principalmente para valores nulos.

Las funciones examinadas en las siguientes secciones incluyen la función de NVL, que proporciona un valor alternativo para usar si se encuentra un nulo. La función de NVL2 realiza una evaluación condicional de su primer parámetro y devuelve un valor si un nulo es encontrado y una alternativa si el parámetro no es nulo. La función de NULLIF compara dos términos y devuelve un resultado nulo si ellos son iguales, por otra parte devuelve el primer término. La función FUNDIR acepta un número ilimitado de parámetros y devuelve el primer parámetro no nulo más esto vuelve nulo.

La Función de NVL que La función de NVL evalúa si una columna o la expresión de cualquier tipo de datos son nulas o no. Si el término es nulo, una alternativa no el valor nulo es devuelto; por otra parte, el término inicial es devuelto.

La función de NVL toma dos parámetros obligatorios. Su sintaxis es NVL (original, ifnull), donde original representa el término probado e ifnull es el resultado devuelto si el término original evalúa al nulo. Los tipos de datos de los parámetros originales e ifnull siempre deben ser compatibles. Ellos deben ser o del mismo tipo, o debe ser posible convertir implícitamente ifnull al tipo del parámetro original. La función de NVL devuelve un valor con el mismo tipo de datos que el parámetro original. Considere las tres preguntas siguientes:

Page 215: curso_sql_certificacion

La consulta 1: seleccione nvl (1234) del dual; La consulta 2: seleccione nvl (nulo, 1234) del dual; la Consulta 3: no seleccione nvl (substr ('abecé', 4), 'Ningunos exists' de subcuerda) del dual;

Ya que la función de NVL toma dos parámetros obligatorios, la consulta 1 vuelve el error, "ORA-00909: número inválido de argumentos." Las vueltas de consulta 2 1234 después de la palabra clave nula son probadas y encontradas ser nulas. La consulta 3 implica una función de SUBSTR anidada que intenta extraer el cuarto carácter de una 3 cadena de caracteres. Las vueltas de función interiores nulas, dejando el NVL (nulo, 'Ningunos exists' de subcuerda) funcionan para ejecutar, que entonces no devuelve la cuerda 'Ningunos exists' de subcuerda.

La figura 5-6 muestra dos preguntas casi idénticas. Ambas preguntas seleccionan filas donde el LAST_NAME comienza con la carta E. El LAST_NAME, el SUELDO, y las columnas COMMISSION_PCT también son seleccionados. La diferencia entre las preguntas está en la expresión deliberada aliased como MONTHLY_COMMISSION. Debido al NVL

248 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-6 La función de NVL

función en la primera pregunta, los resultados numéricos son devueltos. La segunda pregunta devuelve algunos valores nulos y un artículo numérico aunque 1000 sea añadido

Page 216: curso_sql_certificacion

a cada fila.

Es atractivo zambullirse en y construir una expresión compleja que comprende a muchos anidó llamadas a la función, pero este enfoque evoluciona con práctica y experiencia. Conceptúe una solución de una pregunta y divídalo abajo en las llamadas a la función componentes. La comando DUAL es útil para pruebas lógicas ad hoc y depuración de llamadas a la función separadas. No tenga miedo de ejecutar preguntas tan muchas veces como usted desea perfeccionar los componentes antes de ensamblarlos en componentes cada vez más más grandes. Pruebe y depure de éstos hasta que la expresión final sea formada.

La Función de NVL2 La función de NVL2 proporciona un realce a NVL, pero sirve un objetivo muy similar. Esto evalúa si una columna o la expresión de cualquier tipo de datos son nulas o no.

Aplique Expresiones Condicionales en una Select SENTENCIA

249

Si el primer término no es nulo, el segundo parámetro es devuelto, más el tercer parámetro es devuelto. Recuerde que la función de NVL es diferente ya que devuelve el término original si no es nulo.

La función de NVL2 toma tres parámetros obligatorios. Su sintaxis es NVL2 (original, ifnotnull, ifnull), donde original representa el término probado. Ifnotnull es devuelto de ser original no es nulo, e ifnull es devuelto de ser original es nulo. Los tipos de datos del ifnotnull y parámetros ifnull deben ser compatibles, y ellos no pueden ser del tipo MUCHO TIEMPO. Ellos deben ser o del mismo tipo, o debe ser posible convertir ifnull al tipo del parámetro ifnotnull. El tipo de datos devuelto por la función de NVL2 es el mismo como aquel del parámetro ifnotnull. Considere las tres preguntas siguientes:

La consulta 1: seleccione nvl2 (1234,1, 'una cuerda') del dual; la Consulta 2: seleccione nvl2 (nulo, 1234,5678) del dual; la Consulta 3: no seleccione nvl2 (substr ('abecé', 2), 'No bc', 'Ninguna subcuerda') del dual;

El término de ifnotnull en la consulta 1 es un número y el parámetro ifnull es 'una cuerda'. Ya que hay una incompatibilidad de tipo de datos entre ellos, "ORA-01722: el número inválido" error es devuelto. La consulta 2 devuelve el parámetro ifnull, que es 5678. La consulta 3 extrae los carácteres "bc" utilización de la función de SUBSTR y el NVL2 ('bc', No bc', 'Ninguna Subcuerda') la función es evaluada. El parámetro ifnotnull, la cuerda 'No bc', es devuelto.

Los espectáculos de figura 5-7 como la función de NVL2 es usada para proveer el texto descriptivo que clasifica a EMPLOYEES con valores de LAST_NAME que comienzan con "F" en la comisión y no encargar a asalariados basados en el nullable COMMISSION_PCT columna.

La Función de NULLIF La función de NULLIF prueba dos términos de la igualdad. Si ellos son iguales la función devuelve un nulo, más devuelve el primer de los dos términos probados.

La función de NULLIF toma dos parámetros obligatorios de cualquier tipo de datos. La sintaxis es NULLIF (ifunequal, comparison_term), donde los parámetros ifunequal y comparison_term son comparados. Si ellos son idénticos, entonces NULO es devuelto. Si ellos se diferencian, el parámetro ifunequal es devuelto. Considere las tres preguntas siguientes:

La consulta 1: seleccione nullif (1234,1234) del dual; La consulta 2: seleccione nullif (1234,123+1) del dual; la Consulta 3: seleccione nullif ('24-JUL-2009', '24-JUL-09') del dual;

Page 217: curso_sql_certificacion

La consulta 1 devuelve un valor nulo ya que los parámetros son idénticos. La aritmética la ecuación en la consulta 2 no es implícitamente evaluada, y la función de NULLIF encuentra

250 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-7 La función de NVL2

1234 diferente de 123+1, entonces esto devuelve el parámetro ifunequal, que es 1234. Los literales de carácter en la consulta 3 no son implícitamente convertidos PARA fechar artículos y son comparados como dos cadenas de caracteres por la función de NULLIF. Ya que las cuerdas son de longitudes diferentes, el parámetro ifunequal 24-JUL-2009 es devuelto.

La figura 5-8 muestra como NULLIF es anidado como un parámetro a la función de NVL2. La función de NULLIF sí mismo tiene el SUBSTR y funciones de carácter SUPERIORES empotradas en la expresión usada como su parámetro ifunequal. La columna de E-MAIL es comparado con una expresión, formada concadenando el primer carácter del FIRST_NAME al equivalente mayúsculo de la columna LAST_NAME, para EMPLOYEES con 4 carácter nombres largos. Cuando estos términos son iguales, NULLIF devuelve un nulo, más devuelve el parámetro ifunequal evaluado. Esto es usado como un parámetro a NVL2. La función de NVL2 proporciona el texto descriptivo que clasifica filas como emparejando el modelo o no.

Aplique Expresiones Condicionales en una Select SENTENCIA

251

Page 218: curso_sql_certificacion

LA FIGURA 5-8 La función de NULLIF

EJERZA 5-2 Utilización NULLIF y NVL2 para Lógica Condicional Simple Se requiere que usted devuelva un SET de filas de la comando de EMPLOYEES con Valores de DEPARTMENT_ID de 100. El SET también debe contener FIRST_NAME y valores de LAST_NAME y una expresión aliased como NAME_LENGTHS. Esta expresión debe devolver la cuerda 'Longitud Diferente' si la longitud del FIRST_NAME se diferencia de aquel de los LAST_NAME, más la cuerda 'Misma Longitud' debe ser devuelta.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La expresión NAME_LENGTHS puede ser calculada de varios modos. El

la solución proporcionó usos la función de NULLIF para probar si los valores de LONGITUD volvieron para el FIRST_NAME y las columnas LAST_NAME son

252 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

el mismo. Si ellos son, NULO es devuelto, más la LONGITUD del LAST_NAME es devuelta. Si la función externa (NVL2) consigue un parámetro NULO, la cuerda 'Misma Longitud' es devuelta, más la cuerda 'Longitud Diferente' es devuelta.

3. La cláusula SENTENCIA es por lo tanto

Page 219: curso_sql_certificacion

SELECCIONE FIRST_NAME, LAST_NAME, NVL2 (NULLIF (LONGITUD (NOMBRE de LAST_), LONGITUD (FIRST_NAME)), 'Longitud Diferente', 'Misma Longitud') NAME_LENGTHS

4. El DE la cláusula es DE EMPLOYEES 5. El DONDE cláusula es DONDE DEPARTMENT_ID=100 6. La ejecución de esta select devuelve los nombres de los

EMPLOYEES y el NAME_LENGTHS expresión como mostrado en la ilustración siguiente:

Aplique Expresiones Condicionales en una Select SENTENCIA

253

La Función FUNDIR La función FUNDIR devuelve el primer valor no nulo de su lista de parámetro. Si todos sus parámetros son nulos, entonces nulo es devuelto.

La función FUNDIR toma dos parámetros obligatorios y cualquier número de parámetros opcionales. La sintaxis es SE FUNDEN (expr1, expr2, , exprn), donde expr1 es devuelto si no es nulo, más expr2 si no es nulo, etcétera. FÚNDASE es una forma general de la función de NVL, ya que las dos ecuaciones siguientes ilustran:

FÚNDASE (expr1, expr2) = NVL (expr1, expr2) SE FUNDEN (expr1, expr2, expr3) = NVL (expr1, NVL (expr2, expr3)) El tipo de datos SE FUNDE vueltas si un no el valor nulo es encontrado es el mismo como esto

del primer no parámetro nulo. Evitar "ORA-00932: tipos de datos inconsecuentes" error, todos no los parámetros nulos deben tener tipos de datos compatibles con el primer no parámetro nulo. Considere las tres preguntas siguientes:

La consulta 1: escogido se funden (nulo, nulo, nulo, 'una cuerda') del dual; la

Consulta 2: escogido se funden (nulo, nulo, nulo) del dual; la Consulta 3: escogido no

se funden (substr ('abecé', 4), 'No bc', 'Ninguna subcuerda') del dual;

La consulta 1 devuelve el cuarto parámetro: una cuerda, ya que esto es el primero no

nulo el parámetro encontrado. La consulta 2 vuelve nulo porque todos sus parámetros son nulos. La consulta 3 evalúa su primer parámetro, que es una función de SUBSTR anidada, y lo encuentra siendo nulo. El segundo parámetro no es nulo entonces la cuerda 'No bc' es devuelta.

El STATE_PROVINCE, POSTAL_CODE, y la información de CIUDAD fueron recuperados de la comando de LOCATIONS para las filas con valores COUNTRY_ID del Reino Unido, ESTO, o JP. Como la Figura 5-9 muestra, la función FUNDIR devuelve el valor de STATE_PROVINCE para una fila si no es nulo. Si es nulo el valor de POSTAL_CODE es devuelto. Si es nulo, el espacio de CIUDAD es devuelto, más el resultado es nulo.

Los parámetros de la función general NVL2 puede ser confuso si usted es familiar ya con NVL. NVL (original, ifnull) vueltas originales si no es nulo, más ifnull es devuelto. El NVL2 (original, ifnotnull, ifnull) la función vuelve ifnotnull de ser original no es

Page 220: curso_sql_certificacion

nulo,

más el ifnull es devuelto. La confusión puede levantarse porque el segundo parámetro en la función de NVL es ifnull, mientras el segundo parámetro en la función de NVL2 es ifnotnull. Esté consciente al sentido de las LOCATIONS de parámetro en funciones.

254 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-9 La función FUNDIR

Funciones condicionales La lógica condicional, también lógica conocida "como si entonces más", se refiere a la

elección de un paso de ejecución basada en valores de datos que encuentran ciertas condiciones. Las funciones condicionales, como DECODIFICAN y la expresión de INSTANCIA, devuelven valores diferentes basados en la evaluación de condiciones de comparación. Estas condiciones son especificadas como parámetros a la función DECODIFICAR y la expresión de INSTANCIA. La función DECODIFICAR es específica para el Oracle, mientras la expresión de INSTANCIA es ANSI SQL dócil. Un ejemplo de lógica "si entonces más" es: si el valor de país es Brasil o Australia, entonces devuelva el Hemisferio del sur, más devuelva el Hemisferio norte.

Page 221: curso_sql_certificacion

La Función DECODIFICAR Aunque su nombre parezca misterioso, esta función es franca. La función DECODIFICAR pone en práctica "si entonces más" lógica condicional probando sus dos primeros términos de igualdad y vueltas el tercer si ellos son iguales y opcionalmente devuelven otro término si ellos no son.

Aplique Expresiones Condicionales en una Select SENTENCIA

255

La función DECODIFICAR toma al menos tres parámetros obligatorios, pero puede tomar muchos más. La sintaxis de la función es DECODIFICAN (expr1, comp1, iftrue1, [comp2, iftrue2... [compN, iftrueN]], [iffalse]). Estos parámetros son evaluados como mostrado en el ejemplo de pseudocódigo siguiente:

Si expr1 = comp1 entonces devuelven iftrue1 más si expr1 = comp2 entonces devuelven iftrue2

...... más si expr1 = compN entonces devuelven iftrueN más vuelva nulo | iffalse;

Expr1 es comparado con comp1. Si ellos son iguales, entonces iftrue1 es devuelto. Si expr1 no es igual a comp1, entonces lo que pasa después depende de si los parámetros opcionales comp2 e iftrue2 están presentes. Si ellos son, entonces expr1 es comparado con comp2. Si ellos son iguales, entonces iftrue2 es devuelto. Si no, lo que pasa después depende de si adelante compn, iftruen pares existen, y el ciclo sigue hasta que ningunos términos de comparación permanezcan. Si ningunos partidos han sido encontrados y si el parámetro iffalse es definido, entonces iffalse es devuelto. Si el parámetro iffalse no existe y ningunos partidos son encontrados, un valor nulo es devuelto.

Todos los parámetros a la función DECODIFICAR pueden ser expresiones. El tipo de datos de vuelta es el mismo como aquel del primer artículo de comparación correspondiente. La expresión expr1 es implícitamente convertida al tipo de datos del primer parámetro de comparación comp1. Como los otros parámetros de comparación los comp2compn son evaluados, ellos también son implícitamente convertidos al mismo tipo de datos que comp1. Decodifique piensa que dos nulls son equivalentes, tan si expr1 es nulo y comp3 es el primer parámetro de comparación nulo encontrado, entonces el parámetro de resultado correspondiente iftrue3 es devuelto. Considere las tres preguntas siguientes:

La consulta 1: escogido decodifican (1234 123, '123 es un partido') del dual; la Consulta 2: escogido decodifican (1234 123, '123 no es un partido', 'Ningún partido') del dual; la Consulta 3: escogido decodifican ('búsqueda', 'comp1', 'true1', 'comp2', 'true2', 'busque', 'true3', substr ('2search', 2,6)), 'true4', 'falso') del dual;

La consulta 1 compara el número 1234 con el primer término de comparación 123. Ya que ellos no son iguales, el primer término de resultado no puede ser devuelto. Adelante, como no hay ninguna falta iffalse el parámetro definido, un nulo es devuelto. La consulta 2 es idéntica al primer salvo que un parámetro iffalse es definido. Por lo tanto, desde 1234 no es igual a 123, la cuerda 'Ningún partido' es devuelta. La consulta 3 averigua los parámetros de comparación para un partido. El carácter llama 'comp1' y 'comp2' no son iguales a la búsqueda, entonces el

256 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

Page 222: curso_sql_certificacion

los resultados true1 y true2 no son devueltos. Un partido es encontrado en tercer 'comp3' de término de comparación (parámetro 6), que contiene la búsqueda de cuerda. Por lo tanto, el tercer término de resultado iftrue3 (parámetro 7) conteniendo la cuerda 'true3' es devuelto. Note que ya que un partido ha sido encontrado, ninguna busca adicional ocurre. De este modo, aunque el cuarto término de comparación (parámetro 8) también sea un partido a expr1, esta expresión nunca es evaluada, porque un partido fue encontrado en un término de comparación más temprano.

Los acontecimientos distintos de los valores de columna COUNTRY_ID en la comando de LOCATIONS han sido clasificados en COUNTRIES de Hemisferio del Norte o en del sur usando una función DECODIFICAR. La figura 5-10 muestra como la columna COUNTRY_ID es la expresión que un partido es buscado. Si el valor de COUNTRY_ID es Ferrocariles Británicos (Brasil) o AU (Australia), entonces la función devuelve la cuerda Hemisferio del sur, más el Hemisferio norte es devuelto.

LA FIGURA 5-10 La función DECODIFICAR

Aplique Expresiones Condicionales en una Select SENTENCIA

DENTRO DEL EXAMEN 257

Los objetivos de certificación en este capítulo son medidos principalmente con ejemplos prácticos que requieren que usted prediga los resultados devueltos por una expresión. Las funciones de conversión explícitas con sus muchas máscaras de formato son probadas. La función de TO_CHAR; de modificador; y el sp, th, y los modelos de formato de spth son comúnmente examinados. El uso de la función de TO_CHAR para convertir números en carácteres es probado, y el hincapié a menudo es hecho en las máscaras de formato que determinan anchura numérica, símbolo de dólar, separador de grupo, y formatos de separador decimales.

Muchas preguntas consisten en expresiones con funciones anidadas, y es esencial para usted saber como interpretar y remontarlos. El íntimo a la secuencia más extrema de la evaluación de funciones anidadas es importante y debe ser recordado.

Las funciones generales NVL, NVL2, NULLIF, y SE FUNDEN todos pertenecen a

La Expresión de INSTANCIA

funcionamiento con NULO. Ya que los valores nulos son frecuentes en muchas bases de datos, se requiere un entendimiento cuidadoso de todas estas funciones, en particular NVL y NVL2.

La función DECODIFICAR y la expresión de INSTANCIA son a veces percibidas como complejas y difíciles de entender. Ellos son, sin embargo, dos de las funciones más simples y más útiles garantizadas para ser examinados. Preste la atención al sentido posicional de los parámetros usando la función DECODIFICAR. La expresión de INSTANCIA simple y buscada se diferencia de las funciones habladas antes. Esto es debido al bloque de CASEEND, que encierra a uno o varios pares

Page 223: curso_sql_certificacion

WHENOELR y opcionalmente un MÁS select. Práctica con esta expresión y usted aprenderá rápidamente su estructura legible y estandarizada.

Prácticamente todos los terceros y cuartos lenguajejes de programación de generación ponen en práctica una select de instancia. Como la función DECODIFICAR, la expresión de INSTANCIA facilita "si entonces más" lógica condicional. Hay dos variantes de la expresión de INSTANCIA. La expresión de INSTANCIA simple pone el artículo de búsqueda condicional en una lista una vez, y la igualdad con el artículo de búsqueda es probada por cada expresión de comparación. La expresión de INSTANCIA buscada pone una condición separada en una lista para cada expresión de comparación.

258 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

La expresión de INSTANCIA toma al menos tres parámetros obligatorios, pero puede tomar muchos más. Su sintaxis depende de si un simple o una expresión de INSTANCIA buscada son usados. La sintaxis para la expresión de INSTANCIA simple es como sigue:

INSTANCIA search_expr CUANDO comparison_expr1 ENTONCES iftrue1 [CUANDO comparison_expr2 ENTONCES iftrue2

CUANDO comparison_exprN ENTONCES iftrueN MÁS iffalse] FINAL

La expresión de INSTANCIA simple es encerrada dentro de un bloque de CASEEND

y consiste en al menos una select WHENELN. En su forma más simple, con una select WHENELN, el search_expr es comparado con el comparison_expr1. Si ellos son iguales, entonces el resultado iftrue1 es devuelto. Si no, un valor nulo es devuelto a menos que MÁS EL COMPONENTE sea definido, en cuyo instancia, la falta iffalse valor es devuelta. Cuando más de una select WHENELN existe en la expresión de INSTANCIA, buscando una expresión de comparación correspondiente sigue hasta que un partido sea encontrado.

La búsqueda, la comparación, y los parámetros de resultado pueden ser valores de columna, expresiones, o literales, pero deben ser todos del mismo tipo de datos. Considere la pregunta siguiente:

escogido instancia substr (1234,1,3) cuando '134' entonces '1234 es un partido' cuando '1235' entonces '1235 es un partido' cuando concat ('1', '23') entonces concat ('1', '23') ||' no es un partido' más 'ningún partido'

final de dual;

La expresión de búsqueda sacada del SUBSTR (1234,1,3) es el carácter cuerda 123. El primer CUANDO... ENTONCES La select compara la cuerda 134 con 123. Ya que ellos no son iguales, la expresión de resultado no es evaluada. La segunda select WHENELN compara la cuerda 1235 con 123 y otra vez, ellos no son iguales. La tercera select WHENELN compara los resultados sacados del CONCAT ('1', '23') expresión, que es 123, a la expresión de búsqueda. Ya que ellos son idénticos, la tercera expresión de resultados '123 es un partido', es devuelto.

Page 224: curso_sql_certificacion

El LAST_NAME y las columnas HIRE_DATE para EMPLOYEES con valores DEPARTMENT_ID de 10 o 60 son recuperados junto con dos expresiones numéricas y una expresión de INSTANCIA, como mostrado en la Figura 5-11.

Suliste que SYSDATE sea 01-JAN-2008. La expresión numérica aliased como AÑOS devuelve un valor truncado obtenido dividiendo los meses de servicio por 12.

Aplique Expresiones Condicionales en una Select SENTENCIA

259

LA FIGURA 5-11 La expresión de INSTANCIA

Cinco categorías de la comandoación de lealtad basada durante años del servicio son definidas truncando el cociente obtenido dividiendo los meses del servicio por 60. Esto forma la expresión de búsqueda en la select de INSTANCIA. Ninguna de las filas en el dataset empareja la expresión de comparación en la primera select WHENELN, pero ya que la Figura 5-11 muestra, cinco filas encontraron las select WHENELN restantes y una fila es agarrada por el MÁS select.

La sintaxis para la expresión de INSTANCIA buscada es como sigue:

INSTANCIA CUANDO condition1 ENTONCES iftrue1 [CUANDO condition2 ENTONCES iftrue2

CUANDO conditionN ENTONCES iftrueN MÁS iffalse] FINAL

260 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

Page 225: curso_sql_certificacion

La expresión de INSTANCIA buscada es encerrada dentro de un bloque de CASEEND y consiste en al menos una select WHENELN. En su forma más simple con una select WHENELN, el condition1 es evaluado; si es verdad, entonces el resultado iftrue1 es devuelto. Si no, un valor nulo es devuelto a menos que MÁS EL COMPONENTE sea definido, en cuyo instancia la falta iffalse valor es devuelta. Cuando más de una select WHENELN existe en la expresión de INSTANCIA, buscando una expresión de comparación correspondiente sigue hasta que uno sea encontrado. La pregunta para recuperar el SET idéntico de resultados a los obtenidos en la Figura 5-11, usando una expresión de INSTANCIA buscada es puesta en una lista después:

seleccione last_name, hire_date, trunc (months_between (sysdate, hire_date)/12) años, el trunc (months_between (sysdate, hire_date)/60) "Años dividió el instancia cuando trunc (months_between (sysdate, hire_date)/60) <1 entonces cuando trunc (months_between (sysdate, hire_date)/60) <2 entonces cuando trunc (months_between (sysdate, hire_date)/60) <3 entonces cuando trunc (months_between (sysdate, hire_date)/60) <4 entonces más 'Mobiliario' termine la Lealtad de EMPLOYEES donde department_id en (60,10);

por 5",

'Interne' a 'Junior' 'Intermedio' 'Senior'

EJERZA 5-3 Utilización la Función DECODIFICAR Se solicita que usted pregunte la comando de LOCATIONS para filas con el valor

EE.UU en el Columna de COUNTRY_ID. Una expresión aliased como LOCATION_INFO se requiere evaluar los valores de columna STATE_PROVINCE y devuelve la información diferente según la comando siguiente. Clasifique salida basado en la expresión LOCATION_INFO.

Si STATE_PROVINCE es Washington Texas California Nueva Jersey

El valor volvió es La cuerda 'Oficina central' La cuerda 'Pozos de petróleo' El valor de columna de CIUDAD El valor de columna STREET_ADDRESS

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La expresión LOCATION_ID puede ser calculada de varios modos diferentes.

Esto incluye la utilización de una expresión de INSTANCIA o una función DECODIFICAR. La solución debajo de usos DECODIFICA.

Aplique Expresiones Condicionales en una Select SENTENCIA

261

3. La cláusula SENTENCIA es ESCOGIDO DECODIFICAN (STATE_PROVINCE, 'Washington', 'los Cuarteles generales, 'Texas', los Pozos de petróleo, 'California', CIUDAD, 'Nueva Jersey', STREET_ADDRESS) el Aviso de LOCATION_INFO la mezcla de literales de carácter y columnas especificadas como parámetros a la

Page 226: curso_sql_certificacion

función DECODIFICAR. 4. El DE la cláusula es

DE EMPLOYEES 5. El DONDE cláusula es DONDE COUNTRY_ID ='US' 6. El PEDIDO POR cláusula es PEDIDO POR LOCATION_INFO 7. El resultado de ejecutar esta select es mostrado en la

ilustración siguiente:

262 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

RESUMEN DE CERTIFICACIÓN Este capítulo añade las funciones de fila solas introducidas antes. Los conceptos del tipo de datos implícito y explícito conversión son explicados junto con los riesgos de fiabilidad asociados con conversiones implícitas.

La fecha al carácter y el número a conversiones de carácter son descritos usando la función de TO_CHAR. Una variedad de modelos de formato o máscaras está disponible. La función de TO_NUMBER realiza el carácter para numerar conversiones, mientras la función de TO_DATE realiza el carácter para fechar conversiones de tipo de datos.

Las funciones anidadas y su evaluación son una de las lecciones más valiosas en este capítulo. El entendimiento de este concepto fundamental es crucial. Las funciones generales NVL, NVL2, NULLIF, y SE FUNDEN son diseñadas para simplificar el funcionamiento con valores nulos y proporcionar la funcionalidad lógica condicional básica.

DECODIFIQUE es una función específica para el Oracle que apoya la lógica "si entonces más" en el contexto de una select SQL junto con la expresión de INSTANCIA ANSI-dócil. Las dos variantes son el INSTANCIA simple y expresiones de INSTANCIA buscadas. Estas funciones condicionales son francas y muy útiles.

La conversión, las funciones generales, y condicionales añaden considerablemente al conocimiento foundational de SQL que usted adquirió de capítulos anteriores y le sostendrá en el lugar bueno mientras que usted progresa con su aprendizaje.

Taladradora de dos minutos

263

✓TALADRADORA DE DOS MINUTOS

Describa Diversos tipos de Funciones de Conversión Disponibles en SQL ❑ Cuando los valores no emparejan los parámetros definidos de funciones, Oracle

Page 227: curso_sql_certificacion

tentativas de convertirlos en los tipos de datos requeridos. Esto es conocido como la conversión implícita.

❑ conversión Explícita ocurre cuando una función como TO_CHAR es invocada a cambie el tipo de datos de un valor.

❑ La función de TO_CHAR realiza la fecha al carácter y el número al carácter conversiones de tipo de datos.

❑ artículos de Carácter son explícitamente transformados en valores de fecha usando el TO_DATE

función de conversión. ❑ artículos de Carácter son cambiados en valores de número usando el TO_NUMBER

función de conversión.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE ❑ La función de TO_CHAR devuelve un artículo de tipo VARCHAR2. los � modelos de

Formato o máscaras prescriben modelos que las cadenas de caracteres deben emparejar facilitar conversión exacta y consecuente en artículos de fecha o número.

❑ Cuando la función de TO_CHAR realiza el número a conversiones de carácter, la máscara de formato puede especificar el dinero, la anchura numérica, la posición del operador decimal, miles de separador, y muchos otros códigos de formateo.

❑ Las máscaras de formato disponibles cuando TO_CHAR es usado para convertir el carácter los artículos hasta ahora incluyen el día, la semana, el mes, el cuarto, año, y siglo. ❑

máscaras de Formato siempre debe ser especificado encerrado en citas solas. ❑ realizando la fecha a la conversión de carácter, la máscara de formato especifica que

los elementos de fecha son extraídos y si el elemento debería ser descrito por un nombre largo o abreviado.

❑ términos de Carácter, como nombres de día y mes, extraídos de fechas con el La función de TO_CHAR es automáticamente rellenada de espacios que pueden ser recortados prefijando la máscara de formato con el del modificador.

264 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

❑ La función de TO_DATE tiene un modificador fx que especifica un partido exacto para la cadena de caracteres para ser convertida y la fecha formatea la máscara.

Aplique Expresiones Condicionales en una Select SENTENCIA ❑ funciones que Anidan usan salida de una función como el ingreso al otro. ❑ La

función de NVL devuelve el artículo original sin alterar o una alternativa el artículo si el término inicial es nulo.

❑ La función de NVL2 devuelve un nuevo si - artículo nulo si el artículo original es nulo o un

alternativa si no el artículo nulo si el término original no es nulo. ❑ La función de NULLIF prueba dos términos de la igualdad. Si ellos son iguales, la

función

Page 228: curso_sql_certificacion

vueltas nulas, más esto devuelve el primer de los dos términos probados. ❑ La función FUNDIR devuelve el primer valor no nulo de su parámetro

lista. Si todos sus parámetros son nulos, entonces un valor nulo es devuelto. ❑ La función DECODIFICAR pone en práctica "si entonces más" lógica

condicional por las pruebas de dos términos para igualdad y vuelta del tercer término si ellos son iguales o, opcionalmente, algún otro término si ellos no son.

❑ hay dos variantes de la expresión de INSTANCIA usada para facilitar "si entonces más"

lógica condicional: el INSTANCIA simple y expresiones de INSTANCIA buscadas.

MÍ PRUEBA Mí Prueba

265 Las preguntas siguientes medirán su entendimiento del material presentado en este capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Describa Diversos tipos de Funciones de Conversión Disponibles en SQL 1. ¿Qué tipo de conversión es realizada por la select siguiente?

LONGITUD SENTENCIA (3.14285) DE DUAL; (Elija la mejor respuesta.) A. Conversión explícita B. Conversión implícita C. Conversión de función de TO_NUMBER D. Ninguno de los susodichos

2. Elija cualquier select incorrecta en cuanto a funciones de conversión. (Elija todo que se aplican.) A. TO_CHAR puede convertir artículos de fecha a artículos de carácter. B. TO_DATE puede convertir artículos de carácter para fechar artículos. C. TO_CHAR puede convertir números a artículos de carácter. D. TO_DATE puede convertir artículos de fecha a artículos de carácter.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

3. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE TO_NUMBER (1234.49, '999999.9') DE DUAL; (Elija la mejor respuesta.) A. 1234.49 B. 001234.5 C. 1234.5 D. Ninguno de los susodichos

4. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE TO_CHAR (1234.49, '999999.9') DE DUAL; (Elija la mejor respuesta.) A. 1234.49 B. 001234.5 C. 1234.5 D. Ninguno de los susodichos

266 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

5. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente? SELECCIONE TO_CHAR (SYSDATE, 'fmMONTH, AÑO') DE DUAL; (Elija la mejor

Page 229: curso_sql_certificacion

respuesta.) A. JULIO DE 2009 B. JULIO, DOS MIL NUEVE C. EL 09 DE JULIO D. Ninguno de los susodichos

6. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente? SELECCIONE TO_CHAR (SYSDATE, 'MES fmDDth') DE DUAL; (Elija la mejor respuesta.) A. El 12 de julio B. El 12 de julio C. EL DOCE DE JULIO D. Ninguno de los susodichos

Aplique Expresiones Condicionales en una Select SENTENCIA 7. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente?

SELECCIONE TO_CHAR (TO_DATE (TO_CHAR (SYSDATE, 'DD') ', DD'), 'AÑO') DE DUAL; (Elija la mejor respuesta.) A. 2009 B. DOS MIL NUEVE C. 12-JUL-2009 D. Ninguno de los susodichos

8. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE NVL2 (NULLIF ('CODA', 'SID'), 'PERRO DE AGUAS', 'TERRIER') DE DUAL; (Elija la mejor respuesta.) A. PERRO DE AGUAS B. TERRIER C. D nulo. Ninguno de los susodichos

9. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE NVL (SUBSTR ('de la mañana yo NULO', 10), 'SÍ yo de la mañana') DE DUAL; (Elija la mejor respuesta.) A. NINGÚN B. C nulo. SÍ yo de la mañana D. Ninguno de los susodichos

Pregunta de laboratorio

267 10. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente?

ESCOGIDO DECODIFICAN (TO_CHAR (SYSDATE, 'MM') ', 02', 'IMPUESTO DEBIDO', 'PARTIDO') DE DUAL; (Elija la mejor respuesta.) A. B debido fiscal. PARTIDO C. 02 D. Ninguno de los susodichos

PREGUNTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

Como la parte de una nueva iniciativa de mercadotecnia, le piden preparar una lista de cumpleaños de cliente que ocurren entre hace dos días y siete días de ahora. La lista debería recuperar filas de la comando de CLIENTES que incluyen el CUST_FIRST_NAME, CUST_LAST_NAME, CUST_EMAIL, y DATE_ OF_BIRTH columnas en comando ascendente basado en los componentes de mes y día del valor de NACIMIENTO DATE_OF_. Se requiere que una expresión adicional aliased como el CUMPLEAÑOS devuelva a un sabio mes-descriptivo basado en la comando siguiente. Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución descrita aquí.

CUMPLEAÑOS Hace dos días Hace un día Hoy Mañana Dos días en el futuro Dentro de siete días de hoy

CADENA DE CARACTERES Anteayer Ayer Hoy Mañana Pasado mañana más Tarde esta semana

268 Capítulo 5:

Page 230: curso_sql_certificacion

Utilización de Funciones de Conversión y Expresiones Condicionales

MÍ PRUEBAN RESPUESTAS Describa Diversos tipos de Funciones de Conversión Disponibles en

SQL

1. ® B. Dan el número 3.14285 como un parámetro a la función de LONGITUD. Hay unos datos ✓

teclee la falta de armonía, pero el Oracle implícitamente converte el parámetro a la cadena de

caracteres '3.14285', permitiendo la función funcionar correctamente. Los ® A, C, y D son incorrectos. La conversión explícita ocurre cuando una función como TO_CHAR es ˚ejecutado. El C es la longitud correcta de la cuerda '3.14285', pero no preguntan para esto en la pregunta.

2. ® D. Dates sólo son convertidos en cadenas de caracteres usando TO_CHAR y no el TO_DATE ✓

función. Los � ® A, B, y C son select correctas.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE 3. ® D. "ORA-1722: el número inválido" error es devuelto porque la select es ✓

la tentativa de convertir un número usando una máscara de formato incompatible. Si la expresión

fuera TO_NUMBER (1234.49, '999999.99'), el número 1234.49 sería devuelto. los ® A, B, y D

son incorrectos. ˚

4. ® C. Para el número 1234.49 para emparejar el carácter formatean la máscara con un lugar decimal,

doblan primero sobre el número a 1234.5 antes de que TO_CHAR lo converta en la cuerda

'1234.5'. los ® A, B, y D son incorrectos. Poder no ser devuelto porque la máscara de formato

sólo permite un ˚carácter después de la coma decimal. El B sería devuelto si la máscara de formato fuera '009999.9'.

5. ® B. Los componentes de AÑO y MES de la máscara de formato separada por una coma y un ✓

el espacio indica que TO_CHAR debe extraer los valores de año y mes explicados detalladamente

en la mayúscula separada por una coma y un espacio. El del modificador borra impresos

suplementarios de los componentes explicados detalladamente. los ® A, C, y D son incorrectos. Si

la máscara de formato fuera 'MON, YYYY' o 'MON-YY', A y C, ˚respectivamente, sería devuelto.

6. ® A. El componente DD devuelve el día del mes en la mayúscula. Ya que es un número, esto ✓

no importa, a menos que la máscara 'th' sea aplicada, en cuyo instancia aquel componente es

especificado en la mayúscula. El MES devuelve el mes explicado detalladamente en la mayúscula.

los ® B, C, y D son incorrectos. El B sería devuelto si la máscara de formato fuera 'fmddth el

Mes', ˚y C sería devuelto si la máscara de formato fuera 'fmDDspth el MES'.

Page 231: curso_sql_certificacion

Aplique Expresiones Condicionales en una Select SENTENCIA Respuesta de laboratorio

269 7. ® B. El íntimo anidó la función es TO_CHAR (SYSDATE, 'DD'), que extrae el ✓

componente de día de SYSDATE y vueltas el carácter 12. La siguiente función ejecutada es

TO_DATE ('12', 'DD') donde el carácter 12 es dado el papel del componente de día. Cuando una

fecha tan incompleta es proporcionada, valores de sustitutos de Oracle de la función de

SYSDATE; ya que SYSDATE es 12-JUL-2009, esto es la fecha usada. La función más extrema

ejecutada en TO_CHAR ('12-JUL-2009', 'AÑO') devuelve el año explicado detalladamente como

DOS MIL NUEVE. Los ® A, C, y D son incorrectos. ˚

8. ® A. La función de NULLIF compara sus dos parámetros y, ya que ellos son diferentes, el ✓

el primer parámetro es devuelto. El NVL2 ('CODA', 'PERRO DE AGUAS', 'TERRIER') la

llamada a la función devuelve el PERRO DE AGUAS ya que su primer parámetro no es nulo. Los ® B, C, y D son incorrectos. ˚

9. ® C. El carácter literal 'de la mañana NULO' soy nueve carácteres mucho tiempo. Por lo tanto, tratando de obtener ✓

una subcuerda que comienza en el décimo carácter devuelve un nulo. La función externa

entonces se hace NVL (NULO, 'SÍ yo de la mañana'), causando la cuerda 'SÍ yo de la mañana' ser

devuelta. Los ® A, B, y D son incorrectos. ˚

10. ® B. La función íntima TO_CHAR (SYSDATE, 'MM') causa la cadena de caracteres ✓

'07' devuelto. La función externa es DECODIFICAN ('07', '02', 'IMPUESTO DEBIDO',

'PARTIDO'). Desde '07' no es igual a '02', el 'PARTIDO' más componente es devuelto. Los ® A, C, y D son incorrectos. Sólo ser devuelto si el componente de mes extrajera ˚de SYSDATE era '02'.

RESPUESTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

1. Comience al Developer SQL y conecte al esquema OE. 2. El dataset debe ser restringido a filas de la comando de CLIENTES donde DATE_OF_BIRTH

los valores primero tienen el mismo mes que el mes corriente, y en segundo lugar, el componente de día del DATE_OF_BIRTH está entre hace dos días y siete días de ahora. Hay por lo tanto dos condiciones que arreglan el DONDE cláusula.

270 Capítulo 5:

Utilización de Funciones de Conversión y Expresiones Condicionales

3. La primera condición del DONDE la cláusula es

TO_CHAR (DATE_OF_BIRTH, 'MON') =TO_CHAR (SYSDATE, 'MON')

4. La segunda condición es

Page 232: curso_sql_certificacion

TO_NUMBER (TO_CHAR (DATE_OF_BIRTH, 'DD')) - TO_NUMBER (TO_CHAR (SYSDATE, 'DD')) ENTRE-2 Y 7

5. La expresión de CUMPLEAÑOS puede ser calculada de varios modos. Basado en el precedente DONDE cláusula, usted es asegurado que el dataset es limitado con el SET correcto de filas. La cláusula SENTENCIA tiene que recuperar y manipular los archivos para la visualización apropiada. La expresión de INSTANCIA proporciona la funcionalidad a la lógica condicional y conviene bien a esta situación.

6. El instancia probado está basado en el componente de día del DATE_OF_BIRTH menos el día el componente volvió por la función de SYSDATE. Por ejemplo, si la diferencia es-2, entonces la cuerda 'Anteayer' es devuelta. Las condiciones de INSTANCIA diferentes son probadas es una manera similar. MÁS EL COMPONENTE agarra cualquier fila que no empareja las condiciones de INSTANCIA y devuelve la cuerda 'Más tarde en la semana'.

7. La cláusula SENTENCIA es por lo tanto

SELECCIONE CUST_FIRST_NAME, CUST_LAST_NAME, CUST_EMAIL, DATE_OF_BIRTH, INSTANCIA TO_NUMBER (TO_CHAR (DATE_OF_BIRTH, 'DD')) - TO_NUMBER (TO_CHAR (SYSDATE, 'DD')) CUANDO-2 ENTONCES 'Anteayer' CUANDO-1 ENTONCES 'Ayer' CUANDO 0 ENTONCES 'Hoy' CUANDO 1 ENTONCES 'Mañana' CUANDO 2 ENTONCES 'Pasado mañana' MÁS 'Más tarde esta semana' CUMPLEAÑOS DE FINAL

8. El DE la cláusula es

DE CLIENTES

9. El PEDIDO POR cláusula es

PEDIDO POR TO_CHAR (DATE_OF_BIRTH, 'MMDD')

Respuesta de laboratorio

271

10. La ejecución de esta select devuelve el SET de resultados que emparejan este modelo como mostrado en

la ilustración siguiente para SYSDATE=08-JAN-2008:

Esta página intencionadamente se dejó en blanco

6El obteniendo de Datos Agregados Usando las Funciones de Grupo

Page 233: curso_sql_certificacion

OBJETIVOS DE CERTIFICACIÓN

6.01 Describa las Funciones de Grupo

6.04 Incluya o Excluya Utilización de Filas Agrupada

la Cláusula que TIENE 6.02

Identifique las Funciones de Available Group ✓

Taladradora de dos minutos

6.03 Datos de grupo Usando el GRUPO POR

Cláusula Q&A

Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

274 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

Page 234: curso_sql_certificacion

Las funciones de fila sola, exploradas en los

Capítulos 4 y 5, devuelven un valor solo para cada fila en un SET de resultados. El grupo o las

funciones agregadas actúan sobre filas múltiples. Ellos son usados para contar el número de filas o

encontrar el promedio de valores de columna específicos en un dataset.

Muchas operaciones estadísticas, como el cálculo de la desviación estándar, medianas, y promedios, dependen de la ejecución de funciones contra datos agrupados y no filas sólo solas.

Las funciones de grupo son examinadas en dos etapas. En primer lugar, hablan de su objetivo y la sintaxis. En segundo lugar, un análisis detallado del AVG, SUMA, MINUTO, MAX, y funciones de CONDE es conducido. El concepto de agrupación o segregación de datos basados en uno o varios que la columna valora es explorado antes de presentar el GRUPO POR la cláusula.

EL DONDE la cláusula restringe filas en un dataset antes de la agrupación, mientras la cláusula que TIENE los restringe después de la agrupación. Este capítulo concluye con una discusión de la cláusula que TIENE.

OBJETIVO DE CERTIFICACIÓN 6.01

Describa las Funciones de Grupo Las funciones de grupo de SQL son definidas y hablan de las variantes diferentes. La

sintaxis

Page 235: curso_sql_certificacion

del grupo seleccionado las funciones son explicadas, hablan de sus tipos de datos, y el efecto de la palabra clave DISTINTA en ellos es explorado. Esta discusión está dividida en dos áreas principales:

■ la Definición del grupo funciona ■ Tipos y sintaxis de funciones de grupo

Definición de Funciones de Grupo Las funciones de grupo actúan sobre datos agregados y devuelven un resultado solo por

grupo. Estos grupos por lo general consisten en el cero o más filas de datos. Las funciones de fila sola son definidas con la fórmula: F (x, y, z, ) = resultado, donde x, y, z son parámetros de ingreso. La función F ejecuta en una fila del conjunto de datos a la vez y devuelve un resultado para cada fila. Las funciones de grupo pueden ser definidas usando la fórmula siguiente:

F (g1, g2, g3, , gn) = result1, result2, result2, , resultn; La función de grupo ejecuta una vez para cada racimo de filas y devuelve un single

resultado por grupo. Estos grupos pueden ser tablas enteras o partes de tablas asociadas usando un valor común o atributo. Si todas las filas en tablas son presentadas como un

Describa las Funciones de Grupo

275

el grupo a la función de grupo entonces un resultado es devuelto. Una o varias funciones de grupo pueden aparecer en la lista SENTENCIA como sigue:

SELECCIONE group_function (columna o expresión), DE la comando [DONDE ] [la COMANDO BY]

Considere la comando de EMPLOYEES. Hay 107 filas en esta comando. Los grupos

pueden sea creado basado en los valores comunes aquella parte de filas. Por ejemplo, las filas que comparten el mismo valor de DEPARTMENT_ID pueden ser agrupadas juntos. A partir de entonces, las funciones de grupo son ejecutadas por separado contra cada grupo único.

Como la Figura 6-1 muestra, hay 12 valores de DEPARTMENT_ID distintos en la comando de EMPLOYEES incluso un valor nulo. Las filas son distribuidas en 12 grupos basados en valores de DEPARTMENT_ID comunes. La función de CONDE ejecuta 12 veces, una vez para cada grupo. Note que los grupos distintos no contienen el mismo número de filas.

Las funciones de grupo agregan varios valores de filas múltiples en un resultado solo. Ellos son extensamente usados para relatar objetivos y también son conocidos como funciones sumarias o agregadas. Los datos agregados útiles, como totales de suma, promedios, y cuentas a menudo forman la base de cálculos estadísticos más sofisticados. Es útil tener un entendimiento bueno de los datos almacenados en sus tablas de aplicación para maximizar la calidad de su obteniendo agregado.

Page 236: curso_sql_certificacion

Tipos y Sintaxis de Funciones de Grupo Una breve descripción de las funciones de grupo el más comúnmente usadas es

proporcionada después. Muchos son examinados detalladamente más tarde en este capítulo.

La función de CONDE cuenta el número de filas en un grupo. Su sintaxis es como sigue: CONDE ({* | [DISTINCT|ALL] expr});

Esta sintaxis puede ser deconstructed en las formas siguientes:

1. CONDE (*) 2. CONDE (expr distinto) 3. CONDE (TODO expr) 4. CONDE (expr)

Cuando el CONDE (*) es invocado, todas las filas en el grupo, incluso aquellos con nulls o valores duplicados son contadas. Cuando el CONDE (expr distinto) es ejecutado, los acontecimientos sólo únicos de expr son contados para cada grupo. TODA la palabra clave es la parte de la sintaxis por defecto, entonces CONDE (TODO expr) y CONDE (expr) son equivalentes. Éstos cuentan el número de acontecimientos no nulos de expr en cada grupo. El tipo de datos de expr puede ser

276 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

FIGURA 6-1

Funciones de grupo que actúan sobre 12 grupos

Page 237: curso_sql_certificacion

NÚMERO, FECHA, TRABAJO POR HORAS, o VARCHAR2. Si expr es un nulo, no es ignorado a menos que él sea manejado usando una función general como NVL, NVL2, o FUNDIRSE.

La función de AVG calcula el valor medio de una columna numérica o expresión en un grupo. Su sintaxis es como sigue:

AVG ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas siguientes:

1. AVG (expr distinto) 2. AVG (TODO expr) 3. AVG (expr) Describa las Funciones de Grupo

277

Cuando AVG (expr distinto) es invocado, los valores distintos de expr son sumados y divididos en el número de acontecimientos únicos de expr. AVG (TODO expr) y AVG (expr) añaden los valores no nulos de expr para cada fila y dividen la suma en el número de filas no nulas en el grupo. El tipo de datos del parámetro expr es el NÚMERO.

La función de SUMA devuelve el total agregado de los valores de expresión numéricos no nulos en un grupo. Esto tiene la sintaxis siguiente:

SUMA ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas siguientes:

1. SUMA (expr distinto) 2. SUMA (TODO expr) 3. SUMA (expr)

LA SUMA (expr distinto) proporciona un total añadiendo que todos los valores únicos volvieron después de que el expr es evaluado para cada fila en el grupo. SUMA (expr) y SUMA (TODO expr) proporcionan un total añadiendo expr para cada fila en el grupo. Los valores nulos no son ignorados. El tipo de datos de expr es el NÚMERO.

MAX y las funciones de MINUTO devuelven el valor de expr (más grande) y mínimo máximo (más pequeño) en un grupo. Su sintaxis es como sigue:

MAX ([DISTINCT|ALL] expr); el MINUTO ([DISTINCT|ALL] expr) Esta sintaxis puede ser deconstructed en las formas siguientes:

1. MAX (expr distinto); MINUTO (expr distinto) 2. MAX (TODO expr); MINUTO (TODO expr) 3. MAX (expr); MINUTO (expr);

MAX (expr), MAX (TODO expr) y MAX (expr distinto) examina los valores para expr en un grupo de filas y vuelta el valor más grande. Los valores nulos no son ignorados. MINUTO (expr), MINUTO (TODO expr) y MINUTO (expr distinto) examinan los valores de expr en un grupo de filas y devuelven el valor más pequeño. El tipo de datos del parámetro expr puede ser NÚMERO, FECHA, TRABAJO POR HORAS o VARCHAR2.

STDDEV y las funciones de DESACUERDO son dos de mucho Oracle de funciones de grupo estadístico provee. El DESACUERDO tiene la sintaxis siguiente:

DESACUERDO ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas siguientes:

1. DESACUERDO (expr distinto) 2. DESACUERDO (TODO expr) 3. DESACUERDO (expr)

278

Page 238: curso_sql_certificacion

Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

STDDEV tiene la sintaxis siguiente: STDDEV ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas siguientes:

1. STDDEV (expr distinto) 2. STDDEV (TODO expr) 3. STDDEV (expr)

El desacuerdo estadístico se refiere a la variabilidad de tanteos en una muestra o el SET de datos. EL DESACUERDO (expr distinto) devuelve la variabilidad de datos no nulos únicos en un grupo. DESACUERDO (expr) y DESACUERDO (TODO expr) devuelven la variabilidad de datos no nulos en el grupo.

STDDEV calcula la desviación estándar estadística, que es el nivel de la desviación del valor medio en un grupo. Es sacado encontrando la raíz cuadrada del desacuerdo. STDDEV (expr distinto) devuelve la desviación estándar de datos no nulos únicos en un grupo. STDDEV (expr) y STDDEV (TODO expr) devuelven la desviación estándar de datos no nulos en el grupo. El tipo de datos del parámetro expr es el NÚMERO.

Hay dos reglas fundamentales de recordar estudiando funciones de grupo. En primer lugar, ellos siempre actúan sobre un grupo solo de filas a la vez. El grupo puede ser uno de muchos grupos en los cuales un dataset ha sido segmentado o puede ser una comando entera. La función de grupo ejecuta una vez por grupo. En segundo lugar, las filas con nulls que ocurre en columnas de grupo o expresiones no son ignoradas, a menos que una función general como NVL, NVL2, o SE FUNDA es proporcionado para manejárselos.

Considere el ejemplo siguiente. Si el valor medio para COMMISSION_PCT es recuperado de la comando de EMPLOYEES, sólo los valores no nulos se consideran. La expresión AVG (COMMISSION_PCT) añade que el 35 P.C. COMMISSION_ no nulo valora y divide el total en 35. El promedio basado en 107 filas puede ser computado usando la expresión AVG (NVL (COMMISSION_PCT, 0)).

OBJETIVO DE CERTIFICACIÓN 6.02 Identifique las Funciones de Available Group

279

Page 239: curso_sql_certificacion

Identifique las Funciones de Available Group Hablaron sólo de las variantes diferentes de funciones de grupo y su sintaxis. Esto la sección proporciona ejemplos que demuestran la aplicación de estas funciones. Hablan de las interacciones de funciones de grupo con valores nulos y la palabra clave DISTINTA, y el concepto de funciones de grupo que anidan también se considera. Las funciones de grupo disponibles son identificadas y exploradas bajo los títulos siguientes:

■ Utilización del grupo funciona ■ funciones de grupo que Anidan

Utilización de las Funciones de Grupo La aplicación práctica de funciones de grupo es demostrada usando AVG, SUMA,

MINUTO, MAX, y CONDE. Estos el grupo funciona toda la vuelta resultados numéricos. Además, el MINUTO y las funciones de MAX pueden devolver resultados de fecha y carácter. Estas cinco funciones actúan sobre valores no nulos, pero, a diferencia de los demás, el CONDE (*) la llamada a la función también cuenta filas con valores nulos. La palabra clave DISTINTA es usada para reprimir las filas presentadas a las funciones de grupo.

Los analistas con frecuencia desean saber el valor medio o total agregado de una columna o una expresión. Esto es simple de conseguir la utilización de la mayor parte de paquetes de hoja de cálculo. La utilización de las funciones de grupo SQL para el obteniendo proporciona dos ventajas de usar una hoja de cálculo para el análisis. En primer lugar, ellos ofrecen una plataforma conveniente para realizar cálculos usando datos vivos de tiempo real. En segundo lugar, ellos tienen el análisis fácil en cuenta de cada valor en un dataset o de grupos específicos de valores.

El Conde Function La ejecución de CONDE en una columna o una expresión devuelve un valor entero que representa el número de filas en el grupo. La función de CONDE tiene la sintaxis siguiente:

CONDE ({* | [DISTINCT|ALL] expr}); hay un parámetro que puede ser cualquiera *, que representa todas las columnas

incluso valores nulos, o una columna específica o expresión. Puede ser precedido por el DISTINTO o TODAS las palabras claves. Considere las preguntas siguientes:

La consulta 1: seleccione a la cuenta (*) de la Consulta 2 de EMPLOYEES: seleccione a la cuenta (commission_pct) de EMPLOYEES

280 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

La consulta 3: seleccione a la cuenta (commission_pct distinto) de la Consulta 4 de EMPLOYEES: seleccione a la cuenta (hire_date), cuenta (manager_id) de EMPLOYEES

La consulta 1 cuenta las filas en la comando de EMPLOYEES y devuelve el número entero 107. La consulta 2 cuenta las filas con valores de COMMISSION_PCT no nulos y vuelve 35. La consulta 3 considera las 35 filas no nulas, determina el número de valores únicos, y vuelve 7. La consulta 4 demuestra dos aspectos. En primer lugar, funciones de grupo

Page 240: curso_sql_certificacion

múltiples pueden ser usadas en la misma lista SENTENCIA y en segundo lugar, la función de CONDE es usada tanto en una columna de FECHA como en una columna de NÚMERO. Los números enteros 107 y 106 son devueltos ya que hay 107 valores de HIRE_DATE no nulos y 106 valores de MANAGER_ID no nulos en el grupo.

Tres expresiones adyacentes usando la función de CONDE son mostradas en la Figura 6-2. Esta pregunta ilustra que hay 107 archivos de empleado en la comando de EMPLOYEES. Adelante, estos 107 EMPLOYEES son asignados a 12 DEPARTMENTS, incluso DEPARTMENTS nulos, y trabajo en 19 JOBS únicos.

La Función de SUMA El total agregado de una columna o una expresión es computada con la función de SUMA. Su sintaxis es como sigue:

SUMA ([DISTINCT|ALL] expr); Un parámetro numérico, opcionalmente precedido por el DISTINTO o TODOS

palabras claves, es proporcionado a la función de SUMA, que devuelve un valor numérico. Considere las preguntas siguientes:

Pregunta 1: escogido suma (2) de EMPLOYEES

Pregunta 2: escogido suma (sueldo) de EMPLOYEES

Pregunta 3: escogido suma (sueldo distinto) de EMPLOYEES

Pregunta 4: escogido suma (commission_pct) de EMPLOYEES

FIGURA 6-2

La función de CONDE

Identifique las Funciones de Available Group

281

Hay 107 filas en la comando de EMPLOYEES. La consulta 1 añade el número 2 a través de 107 filas y vuelve 214. La consulta 2 toma el valor de columna de SUELDO para cada fila en el grupo, que en este instancia es la comando entera, y devuelve la cantidad de sueldo total de 691400. La consulta 3 devuelve un total de 397900 ya que pagan a muchos EMPLOYEES el mismo sueldo y la palabra clave DISTINTA sólo añade valores únicos en la columna al total. La consulta 4 vuelve 7.8 después de añadir los valores no nulos.

La figura 6-3 muestra dos preguntas. El primer calcula el número de días entre la fecha de sistema actual y el valor en la columna HIRE_DATE. La aritmética de fecha es realizada para cada fila. El número volvió es añadido usando una llamada a la función de

Page 241: curso_sql_certificacion

SUMA. El resultado está dividido en 365.25 para dar el número total de años trabajados por todos los EMPLOYEES corrientes. La segunda pregunta muestra que la función de SUMA devuelve "ORA-00932: datatypes inconsecuente" error si es proveído de un argumento no numérico.

La Función de AVG El valor medio de una columna o expresión divide la suma en el número de filas no nulas en el grupo. La función de AVG tiene la sintaxis siguiente:

AVG ([DISTINCT|ALL] expr); Un parámetro numérico, precedido por el DISTINTO o TODAS las palabras claves, es

a condición de que a la función de AVG, que devuelve un valor numérico. Considere las preguntas siguientes:

Pregunta 1: escogido avg (2) de EMPLOYEES Pregunta 2: escogido avg (sueldo) de EMPLOYEES Pregunta 3: escogido avg (sueldo distinto) de EMPLOYEES Pregunta 4: escogido avg (commission_pct) de EMPLOYEES

FIGURA 6-3

La función de SUMA

282 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

Hay 107 filas en la comando de EMPLOYEES. La consulta 1 añade el número 2 a través 107 filas y dividen el total en el número de filas para devolver el número 2. Los literales numéricos presentados a la función de AVG son devueltos sin alterar. La consulta 2 añade el valor de SUELDO para cada fila para obtener la cantidad de sueldo total de 691400. Esto está dividido en las 107 filas con valores de SUELDO no nulos para devolver los 6461.68224 medios. Usted puede esperar que la consulta 3 devuelva un resultado más pequeño que la consulta 2, pero esto no hace. Hay 57 valores de sueldo únicos, que cuando añadido, cede un total de 397900. La división 397900 por 57 vueltas 6980.70175 como el promedio de los valores de sueldo distintos. La consulta 4 puede producir resultados inesperados si no correctamente entendido. La adición de los valores no nulos, incluso duplicados, produce un total de 7.8. Hay 35 archivos de empleado con valores de COMMISSION_PCT no nulos. La división 7.8 por 35 producciones COMMISSION_PCT medio de 0.222857143.

La figura 6-4 muestra dos preguntas. Las primeras listas el LAST_NAME y columnas JOB_ID con una expresión que calcula el número total de años trabajaron por

Page 242: curso_sql_certificacion

programadores en la organización. Los segundos usos los AVG funcionan para calcular el número medio de años durante los cuales los programadores corrientes han sido EMPLOYEES.

MAX y las Funciones de MINUTO MAX y funciones de MINUTO actúan sobre NÚMERO, FECHA, TRABAJO POR HORAS, y tipos de datos VARCHAR2. Ellos devuelven un valor del mismo tipo de datos que sus argumentos de ingreso, que son los artículos más grandes o más pequeños en el grupo. Cuando aplicado PARA fechar artículos, MAX devuelve la última fecha y el MINUTO devuelve el más temprano.

FIGURA 6-4

La función de AVG

Identifique las Funciones de Available Group

283

Las cadenas de caracteres son convertidas a representaciones numéricas de sus carácteres constituyentes basados en las configuraciones NLS en la base de datos. Cuando la función de MINUTO es aplicada a un grupo de cadenas de caracteres, la palabra que parece primera por comando alfabético es devuelta, mientras MAX devuelve la palabra que parecería última. MAX y las funciones de MINUTO tienen la sintaxis siguiente:

MAX ([DISTINCT|ALL] expr); MINUTO ([DISTINCT|ALL] expr) Ellos toman un parámetro precedido por el DISTINTO o TODAS las palabras claves. Considerar

las preguntas siguientes:

La consulta 1: minuto escogido (commission_pct), máximo (commission_pct) de la Consulta 2 de EMPLOYEES: minuto escogido (start_date), máximo (end_date) de la Consulta 3 job_history: minuto escogido (job_id), máximo (job_id) de EMPLOYEES

La consulta 1 devuelve los valores numéricos 0.1 y 0.4 para mínimo y máximo COMMISSION_PCT valora en la comando de EMPLOYEES. Note que los valores nulos para COMMISSION_PCT no son ignorados. La consulta 2 evalúa una columna de FECHA e indica que START_DATE más temprano en la comando JOB_HISTORY es 17-SEP-1987 y último END_DATE es 31-DEC-1999. La consulta 3 devuelve AC_ACCOUNT y ST_MAN como los valores de JOB_ID que aparecen en general por comando alfabético en la comando de EMPLOYEES.

La primera pregunta mostrada en la Figura 6-5 usa a MAX y funciones de MINUTO para obtener la información sobre EMPLOYEES con valores JOB_ID de SA_REP. Los resultados indican que los representantes de ventas que trabajan para las duraciones más cortas y más largas eran

FIGURA 6-5

El MINUTO y funciones de MAX

Page 243: curso_sql_certificacion

284 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

alquilado en 21-APR-2000 y 30-JAN-1996, respectivamente. Además, los representantes de ventas que ganan los sueldos más grandes y más pequeños ganan 11500 y 6100, respectivamente. La segunda pregunta trae los valores de LAST_NAME para los representantes de ventas a quien HIRE_DATE mínimo y máximo y los valores de SUELDO se aplican.

EJERZA 6-1 Utilización de las Funciones de Grupo La comando de COUNTRIES almacena una lista de valores de COUNTRY_NAME. Le

requieren calcular la longitud media de todos los nombres del país. Deben doblar sobre cualquier componente fraccionario al número entero más cercano.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La longitud del valor de nombre del país para cada fila es calculada usando el

Función de LONGITUD. La longitud media puede ser determinada usando la función de AVG. Pueden doblar sobre ello al número entero más cercano usando la función REDONDA.

3. La cláusula SENTENCIA usando el alias AVERAGE_COUNTRY_NAME_LENGTH es

SELECCIONE POR AHÍ (AVG (LONGITUD (COUNTRY_NAME))) AVERAGE_COUNTRY_NAME_LENGTH

4. El DE la cláusula es DE COUNTRIES

5. La ejecución de esta select devuelve una fila sola que representa el promedio longitud de todos los nombres del país en la comando de COUNTRIES, como mostrado en la ilustración siguiente:

Identifique las Funciones de Available Group

GUIÓN & SOLUCIÓN 285

Le gustaría recuperar la fecha más temprana de una columna que almacena la información de FECHA. ¿Puede un grupo funcionar ser utilizado para recuperar este valor? Sí. La función de MINUTO actúa sobre numérico, fecha, y datos de carácter. Cuando la función de MINUTO es ejecutada contra una columna de FECHA, el valor de fecha más temprano es devuelto. Las estadísticas sumarias son requeridas por altos directivos. Esto incluye detalles como el número de EMPLOYEES, coste de sueldo de personal total, sueldo más bajo, y los valores de sueldo más altos. ¿Puede tal informe ser dibujado usando una pregunta? Sí. No hay ninguna restricción al número de funciones de grupo puestas en una lista en la cláusula SENTENCIA. El informe solicitado puede ser dibujado usando la pregunta siguiente: SELECCIONE AL CONDE (*) Num_Employees, SUMA (SUELDO) Tot_Salary_Cost, MINUTO (SUELDO) el Sueldo Más bajo, MAX (SUELDO)

Page 244: curso_sql_certificacion

Sueldo de Máximo DE EMPLOYEES; Le piden poner el número en una lista de JOBS únicos realizados por EMPLOYEES en la organización. Contar los archivos de JOB_ID le dará todos los JOBS. ¿Es posible contar los JOBS únicos? Sí. La palabra clave DISTINTA puede ser usada con las funciones agregadas. Para contar valores de JOB_ID únicos en la comando de EMPLOYEES, usted puede publicar la pregunta: SELECCIONE AL CONDE (JOB_ID distinto) DE EMPLOYEES;

Funciones de Nested Group Recuerde que las funciones de fila sola pueden ser anidadas o empotradas a cualquier

nivel de la profundidad. Las funciones de grupo sólo pueden ser anidadas dos niveles profundamente. Tres funciones de grupo de utilización de formatos son mostradas aquí:

El G1 (group_item) = resultado G1 (G2 (group_item) = resultado G1 (G2 (G3 (group_item))) no es permitido. Las funciones de grupo son representadas por la carta G seguida de un número. El primer

la forma simple no contiene ningún anidó funciones. Los ejemplos incluyen la SUMA (group_item) o AVG (group_item) funciones que devuelven un resultado solo por grupo. La segunda forma apoya dos anidó funciones de grupo, como la SUMA (AVG (group_item)). En este instancia, un GRUPO POR la cláusula es obligatorio ya que el valor medio del group_item por grupo es calculado antes de ser agregado por la función de SUMA.

La tercera forma es rechazada por el Oracle. Considere una expresión que anida tres funciones de grupo. Si la función de MAX es aplicada al ejemplo anterior, la expresión MAX (SUMA (AVG (group_item))) es formado. Las dos funciones de grupo interiores devuelven un valor solo que representa la suma de un SET de valores medios. Esta expresión se hace MAX (valor solo). Una función de grupo no puede ser aplicada a un valor solo.

286 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

La figura 6-6 demuestra dos preguntas. Ambos restringen las filas devueltas a aquellos con Valores de DEPARTMENT_ID de nulo, 40, y 80. Éstos son divididos entonces por sus valores de DEPARTMENT_ID en tres grupos. La primera pregunta calcula la suma de los valores de COMMISSION_PCT para cada grupo y devuelve los valores 0.15, nulo, y 7.65. La consulta 2 contiene las funciones de grupo anidadas, que pueden ser evaluadas como sigue: AVG (SUMA (COMMISSION_PCT)) = (0.15 + 7.65)/2 = 3.9.

FIGURA 6-6

Funciones de grupo anidadas

Datos de grupo Usando el GRUPO POR Cláusula

287

Page 245: curso_sql_certificacion

Las funciones de fila sola pueden ser anidadas a cualquier nivel, pero las funciones de grupo pueden ser anidadas a, como máximo, dos niveles profundamente. La llamada a la función anidada CONDE (SUMA (AVG (X))) devuelve el error, "ORA-00935: la función de grupo es anidada demasiado profundamente." Es aceptable para

la fila sola de nido funciona dentro de funciones de grupo. Considere la pregunta siguiente: SELECCIONE LA SUMA (AVG (LONGITUD (NOMBRE de LAST_))) DE EMPLOYEES GROUP POR DEPARTMENT_ID. Esto calcula la suma de la longitud media de valores de LAST_NAME por departamento.

OBJETIVO DE CERTIFICACIÓN 6.03

Datos de grupo Usando el GRUPO POR Cláusula Las funciones de grupo hablaron de grupos de uso más tempranos de filas que comprenden

la comando entera. Esta sección explora la división de un SET de datos en grupos que usan el GRUPO POR la cláusula. Las funciones de grupo pueden ser aplicadas a estos subconjuntos o racimos de filas. Hablan de la sintaxis de funciones de grupo y el GRUPO POR la cláusula en las áreas siguientes:

■ Creación de grupos de datos ■ El GRUPO POR cláusula ■ Agrupación por columnas múltiples

Creating Groups de Datos Una comando tiene al menos una columna y cero o más filas de datos. En muchas

tablas estos datos requieren que el análisis lo transforme en la información útil. Es un requisito de obteniendo común para calcular la estadística de un SET de datos divididos en grupos que usan atributos diferentes. Las funciones de grupo de utilización de ejemplos anteriores funcionaron contra todas las filas en una comando. La comando entera fue tratada como un grupo grande.

Los grupos de datos dentro de un SET son creados asociando filas con propiedades comunes o atributos el uno con el otro. A partir de entonces, las funciones de grupo pueden ejecutar contra cada uno de estos grupos. Los grupos de datos incluyen filas enteras y no columnas específicas.

Page 246: curso_sql_certificacion

288 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

Considere la comando de EMPLOYEES. Esto comprende 11 columnas y 107 filas. Usted podría crear grupos de filas que comparten un valor de DEPARTMENT_ID común. La función de SUMA puede ser usada entonces para crear totales de sueldo por departamento. Otro SET posible de grupos puede compartir valores de columna JOB_ID comunes. La función de grupo AVG puede ser usada entonces para identificar el sueldo medio pagado a EMPLOYEES en JOBS diferentes.

Un grupo es definido como un subconjunto de dataset entero compartimiento de uno o varios atributos comunes. Estos atributos son típicamente valores de columna, pero también pueden ser expresiones. El número de grupos creados depende de los valores distintos presentes en el atributo común.

Como la Figura 6-7 muestra, hay 12 valores de DEPARTMENT_ID únicos en la comando de EMPLOYEES. Si las filas son agrupadas usando valores de DEPARTMENT_ID comunes, habrá 12 grupos. Si una función de grupo es ejecutada contra estos grupos, habrá 12 valores devueltos, ya que ejecutará una vez para cada grupo.

La agrupación de datos y la utilización de funciones sumarias son extensamente utilizadas para relatar objetivos. Es valioso practicar la segmentación de un SET de datos en agrupaciones diferentes. El oracle proporciona la lenguaje analítica a deconstruct datasets en grupos, divida éstos en subgrupos adicionales, etcétera. Las funciones de agrupación agregadas pueden ser ejecutadas entonces contra estos grupos y subgrupos.

El GRUPO POR Cláusula La select SENTENCIA es realzada por la adición del GRUPO POR la cláusula. Esta cláusula facilita la creación de grupos. Aparece después el DONDE cláusula, pero antes del PEDIDO POR la cláusula, como sigue:

SELECCIONE column|expression|group_function (column|expression [alias]), } DE la comando [DONDE la condición (ones)] [GRUPO POR {Cnel (es) |expr}] [PIDE POR {Cnel (es) |expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]]; La columna o la expresión especificada en el GRUPO POR la cláusula también son conocidas como

el atributo que se agrupa y es el componente por el cual las filas son agrupadas. El dataset es segmentado basado en el atributo que se agrupa. Considere la pregunta siguiente:

máximo escogido (sueldo), el conde (*) del grupo de EMPLOYEES por department_id pide por department_id

Datos de grupo Usando el GRUPO POR Cláusula

289

FIGURA 6-7

Page 247: curso_sql_certificacion

DEPARTMENT_ único ID valora en la comando de EMPLOYEES

El atributo que se agrupa en este ejemplo es la columna DEPARTMENT_ID. El dataset, que las funciones de grupo en la lista SENTENCIA deben actuar, está dividido en 12 grupos, un para cada departamento. Para cada grupo (departamento), el valor de sueldo máximo y el número de filas son devueltos. Ya que los resultados son clasificados por DEPARTMENT_ID, la tercera fila en el SET de resultados contiene los valores 11000 y 6. Esto indica que 6 EMPLOYEES tienen un valor DEPARTMENT_ID de 30. De estos 6, el asalariado más alto tiene un valor de SUELDO de 11000. Esta pregunta demuestra que el atributo que se agrupa no tiene que ser incluido en la lista SENTENCIA.

290 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

Es común ver el atributo que se agrupa en la lista SENTENCIA junto a la agrupación funciones. Si un artículo, que no es una función de grupo, aparece en la lista SENTENCIA y no hay ningún GRUPO POR la cláusula, "ORA-00937: el error" de función de grupo de ni-un-solo-grupo es levantado. Si un GRUPO POR la cláusula está presente pero aquel artículo no es un atributo que se agrupa, entonces "ORA-00979: no un GRUPO SEGÚN la expresión" error es devuelto.

Cualquier artículo en la lista SENTENCIA que no es una función de grupo debe ser un

Page 248: curso_sql_certificacion

atributo que se agrupa del GRUPO POR la cláusula. Si una función de grupo es colocada en un DONDE cláusula, "ORA-00934: la función

de grupo no es permitida aquí" el error es devuelto. Imponer condiciones de nivel del grupo es conseguido usando la cláusula de discusión en la siguiente sección. Las funciones de grupo pueden ser, sin embargo, usadas como la parte del PEDIDO POR la cláusula.

La primera pregunta en la Figura 6-8 levanta un error ya que la columna END_DATE está en la lista SENTENCIA con una función de grupo y no hay ningún GRUPO POR la cláusula. Un error "ORA-00979" es devuelto de la segunda pregunta ya que el artículo START_DATE es puesto en una lista en la cláusula SENTENCIA, pero no es un atributo que se agrupa.

La tercera pregunta divide las filas JOB_HISTORY en grupos basados en el componente de año de 4 dígitos de la columna END_DATE. Cuatro grupos son creados usando este atributo de agrupación. Éstos representan años diferentes cuando los EMPLOYEES terminaron sus JOBS. El CONDE muestra el número de EMPLOYEES que salió sus JOBS durante cada uno

FIGURA 6-8

El GRUPO POR cláusula

Datos de grupo Usando el GRUPO POR Cláusula

291

de estos años. Los resultados son puestos en una lista en el pedido inclinado basado en la expresión "de Número de EMPLOYEES". Note que la función de grupo de CONDE está presente en el PEDIDO POR la cláusula.

Un dataset está dividido en grupos que usan el GRUPO POR la cláusula. El atributo que se agrupa es la llave común compartida por miembros de cada grupo. El atributo que se agrupa es por lo general una columna sola, pero puede ser columnas múltiples o

La agrupación por Columnas Múltiples

una expresión que no puede estar basada en funciones de grupo. Note que sólo la agrupación de atributos y funciones de grupo es permitida en la cláusula SENTENCIA usando el GRUPO POR.

Una extensión potente al GRUPO POR la cláusula usa atributos de agrupación múltiples. El oracle permite a datasets ser dividido en grupos y permite que estos grupos estén divididos adelante en subgrupos que usan un atributo de agrupación diferente. Considere las dos preguntas siguientes:

Page 249: curso_sql_certificacion

La consulta 1: seleccione department_id, sume (commission_pct) de EMPLOYEES donde commission_pct no es el grupo nulo por la Consulta 2 department_id: seleccione department_id, job_id, sume (commission_pct) de EMPLOYEES donde commission_pct no es el grupo nulo por department_id, job_id

La consulta 1 restringe las filas devueltas de la comando de EMPLOYEES a las 35

filas con valores de COMMISSION_PCT no nulos. Estas filas están divididas entonces en dos grupos: 80 y NULO basado en el atributo de agrupación de DEPARTMENT_ID. El SET de resultado contiene dos filas, que devuelven la suma de los valores de COMMISSION_PCT para cada grupo.

La consulta 2 es similar a la primera excepto ello tiene un artículo adicional: JOB_ID tanto en el ESCOGIDO como en GRUPO POR cláusulas. Este segundo atributo de agrupación descompone los dos grupos basados en DEPARTMENT_ID en los componentes JOB_ID constituyentes que pertenecen a las filas en cada grupo. Los valores de JOB_ID distintos para filas con DEPARTMENT_ID=80 son SA_REP y SA_MAN. El valor de JOB_ID distinto para filas con DEPARTMENT_ID nulo es SA_REP. Por lo tanto, la consulta 2 devuelve dos agrupaciones, uno que consiste en dos subgrupos, y otro con sólo un, como mostrado en la Figura 6-9.

292 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

FIGURA 6-9

El GRUPO POR cláusula con columnas múltiples

EJERZA 6-2 Datos que se Agrupan Basados en Columnas Múltiples El análisis del volumen de ventas de personal es un requisito de obteniendo común.

Requieren a usted cree un informe que contiene el número de EMPLOYEES que dejó sus JOBS, agrupados por el año en el cual ellos se marcharon. Los JOBS que ellos realizaron también se requieren. Los resultados deben ser clasificados en el pedido inclinado basado en el número de EMPLOYEES en cada grupo. El informe debe poner en una lista el año, el JOB_ID, y el número de EMPLOYEES que dejó un trabajo particular en aquel año.

Page 250: curso_sql_certificacion

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La comando JOB_HISTORY contiene el END_DATE y columnas JOB_ID,

que constituyen la fuente de datos para este informe. 3. El componente de año es extraído usando la función de TO_CHAR. El número

de EMPLOYEES que salieron un trabajo particular en cada año es obtenido usando al CONDE (*) función.

4. La cláusula SENTENCIA es TO_CHAR (END_DATE, 'YYYY') "Año que Sale", JOB_ID, CONDE (*)

"Número de EMPLOYEES" 5. El DE la cláusula es

DE EMPLOYEES

6. No hay DONDE cláusula. Datos de grupo Usando el GRUPO POR Cláusula

293 7. Ya que el informe requiere que EMPLOYEES sean puestos en una lista antes del año y JOB_ID,

estos dos artículos deben aparecer en el GRUPO POR la cláusula, que es el GRUPO POR TO_CHAR (END_DATE, 'YYYY'), JOB_ID

8. La comandoación es realizada con PEDIDO POR CONDE (*) DESC 9. La ejecución de esta select devuelve el informe de volumen de

ventas de personal solicitado como mostrado en la ilustración siguiente:

294 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

GUIÓN & SOLUCIÓN Usted desea imprimir insignias de nombre para los EMPLOYEES que trabajan como representantes de ventas. ¿Puede la longitud de los valores de LAST_NAME más cortos y más largos ser determinada para estos EMPLOYEES? Sí. MAX y las funciones de MINUTO aplicadas al espacio de LAST_NAME determinarán los nombres más cortos y más largos como mostrado en la pregunta siguiente: MINUTO ESCOGIDO (LONGITUD (LAST_NAME)), MAX (LONGITUD (LAST_NAME)) DE EMPLOYEES DONDE JOB_ID ='SA_REP'; ¿Es posible contar los archivos en cada grupo, primero dividiendo los archivos de empleado antes del año del empleo, luego por el trabajo, y finalmente por el sueldo? Sí. La agrupación por columnas múltiples es una opción potente que permite el análisis de grano fino como mostrado en la pregunta siguiente: SELECCIONE AL CONDE (*), TO_CHAR (HIRE_DATE, 'YYYY'), JOB_ID, SUELDO DE EMPLOYEES GROUP POR TO_CHAR (HIRE_DATE, 'YYYY'), JOB_ID, SUELDO ¿Hay un límite del número de grupos dentro de grupos que pueden ser formados? No. No hay ningún límite del número de grupos y subgrupos que pueden ser formados.

OBJETIVO DE CERTIFICACIÓN 6.04

Page 251: curso_sql_certificacion

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

La creación de grupos de datos y aplicando funciones agregadas es muy útil. Un

refinamiento a estos aspectos es la capacidad de incluir o excluir resultados basados en condiciones de nivel del grupo. Esta sección introduce la cláusula que TIENE. Una distinción clara es hecha entre el DONDE cláusula y la cláusula que TIENE. La cláusula que TIENE es explicada en las áreas siguientes:

■ Restricción de grupo resulta ■ La cláusula que TIENE

Resultados de Restricting Group DONDE las condiciones de cláusula restringen filas devueltas por una pregunta. Las filas

son incluidas basadas en si ellos realizan las condiciones puestas en una lista y son a veces conocidos como resultados de nivel de la fila. Filas que se agrupan usando el GRUPO POR cláusula y aplicando un conjunto Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

295

funcione a estos resultados de vueltas de grupos a menudo referidos como resultados de nivel del grupo. La cláusula que TIENE proporciona la lenguaje para restringir resultados de nivel del grupo.

La pregunta siguiente limita las filas recuperadas de la comando JOB_HISTORY especificando un DONDE la condición basada en la columna DEPARTMENT_ID valora.

seleccione department_id de job_history donde department_id en (50,60,80,110);

Esta pregunta devuelve siete filas. Si el DONDE la cláusula era ausente, diez filas sería recuperado. Suliste que usted quiere saber cuantos EMPLOYEES fueron EMPLOYEES antes en cada uno de estos DEPARTMENTS. Hay siete filas que pueden ser a mano agrupadas y contadas. Sin embargo, si hay un gran número de filas, una función agregada como el CONDE puede ser usada, como mostrado en la pregunta siguiente:

seleccione department_id, cuenta (*) de job_history donde department_id en (50,60,80,110) grupo por department_id;

Esta pregunta es muy similar a la select anterior. La función agregada EL CONDE fue añadido a la lista SENTENCIA, y un GRUPO POR la cláusula DEPARTMENT_ID también fue añadido. Cuatro filas con su cuenta de fila agregada son devueltas y está claro que las siete filas originales restringidas por el DONDE cláusula fueron agrupados en cuatro grupos basados en valores de DEPARTMENT_ID comunes, como mostrado en la comando siguiente:

DEPARTMENT_ID CONDE (*) 50 260 180 2110 2

Suliste que usted quiso refinar esta lista para incluir sólo aquellos DEPARTMENTS con más de un empleado. La cláusula que TIENE limita o restringe las filas de nivel del grupo como

Page 252: curso_sql_certificacion

requerido. Esta pregunta debe realizar los pasos siguientes:

1. Considere el nivel de la fila entero dataset. 2. Limite el basado dataset en cualquiera DONDE condiciones de cláusula.

296 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

3. Segmente los datos en uno o varios grupos que usan los atributos que se agrupan especificado en el GRUPO POR cláusula. 4. Aplique cualquier función agregada para crear un nuevo

nivel del grupo dataset. Cada fila puede ser considerado como una agregación de sus datos de nivel de la fila de la fuente basados en los grupos creados.

5. Limite o restrinja los datos de nivel del grupo con una condición de cláusula que TIENE. Sólo los resultados de nivel del grupo que emparejan estas condiciones son devueltos.

La elección del contexto apropiado para usar un DONDE o una cláusula que TIENE depende de o físico o filas de nivel del grupo debe ser restringida. Las filas que contienen datos almacenados en columnas son a veces llamadas filas actuales o físicas. Cuando las filas (físicas) actuales son restringidas, una o varias condiciones son impuestas usando un DONDE cláusula. Cuando estas filas son agrupadas juntos, una o varias funciones agregadas pueden ser aplicadas, cediendo una o varias filas de nivel del grupo. Éstos no son filas físicas, pero agregaciones temporales de datos. Grupo - las filas de nivel son restringidas usando condiciones impuestas por una cláusula que TIENE.

La Cláusula que TIENE La forma general de la select SENTENCIA es realzada adelante por la adición de la cláusula que TIENE y se hace:

SELECCIONE column|expression|group_function (column|expression [alias]), } DE la comando [DONDE la condición (ones)] [GRUPO POR {Cnel (es) |expr}] [TENIENDO group_condition (s)] [PIDE POR {Cnel (es) |expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]]; Una diferencia importante entre la cláusula que TIENE y otro ESCOGIDO

las cláusulas de select son que sólo puede ser especificado si un GRUPO POR la cláusula está presente. Esta dependencia es prudente ya que las filas de nivel del grupo deben existir antes de que ellos puedan ser restringidos. La cláusula que TIENE puede ocurrir antes del GRUPO POR la cláusula en la select SENTENCIA. Sin embargo, es más común colocar la cláusula que TIENE después del GRUPO POR la cláusula. Toda la agrupación es realizada y las funciones de grupo son ejecutadas antes de la evaluación de la cláusula que TIENE.

Los espectáculos de pregunta siguientes como la cláusula que TIENE es usada para restringir dataset agregado. Los archivos de la comando JOB_HISTORY están divididos en cuatro grupos. Las filas que encuentran la condición de cláusula que TIENE (contribuyendo más de una fila a la cuenta de fila de grupo) son devueltas:

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

Page 253: curso_sql_certificacion

seleccione department_id, cuenta (*) de job_history donde department_id en (50,60,80,110) grupo por department_id que tiene la cuenta (*)> 1

297 Tres filas con valores DEPARTMENT_ID de 50, 80, y 110, cada uno con a

CONDE (*) valor de 2, son devueltos. La figura 6-10 muestra tres preguntas. La consulta 1 divide los 107 archivos de la

comando de EMPLOYEES en 19 grupos basados en valores de JOB_ID comunes. El sueldo medio para cada grupo JOB_ID y el conde de fila agregado es computado. La consulta 2 refina los resultados por excluyendo con reservas aquellas filas agregadas donde el

FIGURA 6-10

La cláusula que TIENE

298 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

el sueldo medio es menos que o igual a 10000, usando una cláusula que TIENE. La consulta 3 demuestra que los operadores Booleanos pueden ser usados para especificar condiciones de cláusula múltiples que TIENEN.

La cláusula que TIENE sólo puede ser especificada cuando un GRUPO POR la cláusula está presente. Un GRUPO POR la cláusula puede ser especificado sin una cláusula que TIENE. Condiciones múltiples pueden ser impuestas por a

EJERZA 6-3 Utilización la Cláusula que TIENE

TENER cláusula usando el Booleano Y, O, y NO operadores. Las condiciones de cláusula que TIENEN restringen datos de nivel del grupo y deben contener una función de grupo o una expresión que usa el que.

La compañía planea una unidad de disco de reclutamiento y quiere identificar los días de la semana durante la cual 20 o más EMPLOYEES fueron contratados. Su informe debe poner en una lista los días y el número de EMPLOYEES contratado en cada uno de ellos.

Page 254: curso_sql_certificacion

1. Comience SQL*Plus y conecte al esquema de HORA. 2. Los archivos de EMPLOYEES deben estar divididos en grupos basados durante el día

componente de la columna HIRE_DATE. El número de EMPLOYEES por grupo puede ser obtenido usando la función de CONDE.

3. La cláusula SENTENCIA es SELECCIONE TO_CHAR (HIRE_DATE, 'DÍA'), CONDE (*)

4. No DONDE la cláusula se requiere desde todas las filas físicas de los EMPLOYEES

la comando se considera. 5. El GRUPO POR cláusula es

GRUPO POR TO_CHAR (HIRE_DATE, 'DÍA') Este GRUPO POR la cláusula potencialmente crea siete filas de nivel del grupo, un para cada día de la semana.

6. La función de CONDE en la cláusula SENTENCIA entonces pone el número en una lista de personal

los miembros EMPLOYEES durante cada día. La cláusula que TIENE debe ser usada para restringir estas siete filas a sólo aquellos donde la cuenta es mayor que o igual a 20.

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

7. La cláusula que TIENE es TENER CONDE (*)> = 20 8. El DE cláusula es DE EMPLOYEES

299 9. La ejecución de esta select devuelve los días de la semana en cual 20 o más

los EMPLOYEES fueron contratados como mostrado en la ilustración siguiente:

DENTRO DEL EXAMEN

Los objetivos de certificación en este capítulo son examinados usando ejemplos prácticos y guiones que requieren que usted para predecir re sults volviera de preguntas de SQL. Estas preguntas se concentran en dividir datasets en grupos que usan uno o varios atributos de agrupación.

Entienda las limitaciones de funciones de grupo que anidan. Recuerde que las funciones de grupo deben existir en la cláusula SENTENCIA si hay un GRUPO POR la cláusula. La cláusula que TIENE puede

Page 255: curso_sql_certificacion

ocurrir antes del GRUPO POR la cláusula, pero es por lo general seguida de ello. Un error es devuelto si la cláusula que TIENE es usada sin un GRUPO POR la cláusula. Recuerde que TENER

la cláusula puede contener condiciones múltiples, pero cada uno debe contener una función de grupo. Saber como interpretar y remontar anidó las funciones de fila sola y grupo son esenciales, tan muchas

preguntas contienen expresiones con funciones anidadas. El íntimo al pedido más extremo de la evaluación de grupo anidado y funciones solas es idéntico y debe ser recordado.

Hay muchas funciones de grupo incorporadas disponibles, pero los exámenes probarán su bajo - posición del CONDE, SUMA, AVG, MAX, y funciones de MINUTO. Asegure que usted tiene un entendimiento cuidadoso de estas funciones y como ellos se relacionan con la palabra clave DISTINTA y valores NULOS.

300 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

RESUMEN DE CERTIFICACIÓN Funciones de fila múltiples y el concepto de datos que se dividen en grupos son

descritos en este capítulo. Hay grupo múltiple o las funciones agregadas disponibles. La llave funciona para crear totales de suma; calculando promedios, mínimos, o máximos; y la obtención de una cuenta de registro es explorada detalladamente.

Las diferencias entre funciones de grupo que anidan y funciones de fila sola son investigadas, y las limitaciones del antiguo son explicadas. La creación de grupos que usan atributos de agrupación comunes es encarnada con la introducción del GRUPO POR la cláusula a la select SENTENCIA. Los datos de nivel de la fila son limitados por condiciones especificadas en el DONDE cláusula. También hablan de la restricción de datos de nivel del grupo usando la cláusula que TIENE.

Taladradora de dos minutos

301

✓TALADRADORA DE DOS MINUTOS

Describa las Funciones de Grupo ❑ funciones de Grupo también son conocidos como fila múltiple, conjunto, o resumen

funciones. Ellos ejecutan una vez para cada grupo de datos y agregan los datos de filas múltiples en un resultado solo para cada grupo.

Page 256: curso_sql_certificacion

❑ Grupos puede estar tablas enteras o partes de una comando agrupada juntos por un común agrupación de atributo.

Identifique las Funciones de Available Group ❑ El CONDE de una función devuelve un valor entero que representa el número

de filas en un grupo. ❑ La función de SUMA devuelve un total agregado de todo el numérico no nulo

la expresión valora en un grupo. ❑ La función de AVG divide la suma de una columna o expresión por el número

de filas no nulas en un grupo. ❑ MAX y funciones de MINUTO actúan sobre NÚMERO, FECHA, TRABAJO POR

HORAS, y Tipos de datos de VARCHAR2. Ellos devuelven un valor que es el artículo más grande o más pequeño en el grupo.

❑ funciones de Grupo sólo puede ser anidado dos niveles profundamente.

Datos de grupo Usando el GRUPO POR Cláusula ❑ El GRUPO POR la cláusula especifica que las filas de atributo que se agrupan deben tener

en común para ellos para ser agrupado juntos.

❑ El GRUPO POR la cláusula facilita la creación de grupos dentro de un SET seleccionado de datos y aparece después el DONDE cláusula, pero antes del PEDIDO POR la cláusula.

❑ Cualquier artículo a la lista SENTENCIA que no es una función de grupo debe ser una agrupación

atributo. ❑ funciones de Grupo puede no ser colocado en un DONDE cláusula. ❑ Datasets puede ser dividido en grupos y adelante dividido en subgrupos

basado en atributos de agrupación múltiples.

302 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE ❑ filas que se Agrupan usando una agrupación común atribuyen con el GRUPO

POR la cláusula y la aplicación de una función agregada a cada uno de estos grupos devuelven resultados de nivel del grupo.

❑ La cláusula que TIENE proporciona la lenguaje para limitar los resultados de nivel del grupo

devuelto. ❑ La cláusula que TIENE sólo puede ser especificado si hay un GRUPO POR la

cláusula presente.

❑ Toda la agrupación es realizado y las funciones de grupo son ejecutadas antes de la evaluación

Page 257: curso_sql_certificacion

la cláusula que TIENE.

MÍ PRUEBA Mí Prueba

303 Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Describa las Funciones de Grupo

1. ¿Qué resultado es devuelto por la select siguiente? SELECCIONE A CONDE (*) DE DUAL; (Elija la mejor respuesta.) A. B nulo. 0 C. 1 D. Ninguno de los susodichos

2. Elija una select correcta en cuanto a funciones de grupo. A. Las funciones de grupo sólo pueden ser usadas cuando un GRUPO POR la cláusula está presente. Las funciones de B. Group pueden actuar sobre filas múltiples a la vez. Las funciones de C. Group sólo actúan sobre una fila sola a la vez. Las funciones de D. Group pueden ejecutar tiempos múltiples dentro de un grupo solo.

Identifique las Funciones de Available Group

3. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE LA SUMA (SUELDO) DE EMPLOYEES; Suliste que haya 10 archivos de empleado y cada uno contiene un valor de SUELDO de 100, excepto 1, que tiene un valor nulo en el espacio de SUELDO. (Elija la mejor respuesta.) A. 900 B. 1000 C. D nulo. Ninguno de los susodichos

4. ¿Qué valores son devueltos después de ejecutar la select siguiente? SELECCIONE AL CONDE (*), CONDE (SUELDO) DE EMPLOYEES; Suliste que haya 10 archivos de empleado y cada uno contiene un valor de SUELDO de 100, excepto 1, que tiene un valor nulo en su espacio de SUELDO. (Elija todo que se aplican.) A. 10 y 10 B. 10 y C nulo. 10 y 9 D. Ninguno de los susodichos

304 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

5. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE AVG (NVL (SUELDO, 100)) DE EMPLOYEES; Suliste que haya diez archivos de empleado y cada uno contiene un valor de SUELDO de 100, excepto un empleado, que tiene un valor nulo en el espacio de SUELDO. (Elija la mejor respuesta.) A. B nulo. 90 C. 100 D. Ninguno de los susodichos

Datos de grupo Usando el GRUPO POR Cláusula

6. ¿Qué valor es devuelto después de ejecutar la select siguiente? SELECCIONE LA SUMA ((AVG (LONGITUD (NVL (SUELDO, 0))))) DE EMPLOYEES

Page 258: curso_sql_certificacion

GROUP POR EL SUELDO; Suliste que haya diez archivos de empleado y cada uno contiene un valor de SUELDO de 100, excepto uno, que tiene un valor nulo en el espacio de SUELDO. (Elija la mejor respuesta.) A. Un error es devuelto B. 3 C. 4 D. Ninguno de los susodichos

7. ¿Cuántos archivos son devueltos por la pregunta siguiente? SELECCIONE LA SUMA (SUELDO), DEPARTMENT_ID DE EMPLOYEES GROUP POR DEPARTMENT_ID; Suliste que haya 11 no nulo y 1 valores de DEPARTMENT_ID únicos nulos. Todos los archivos tienen un valor de SUELDO no nulo. (Elija la mejor respuesta.) A. 12 B. 11 C. D nulo. Ninguno de los susodichos

8. ¿Qué valores son devueltos después de ejecutar la select siguiente? SELECCIONE JOB_ID, MAX_SALARY DE JOBS GROUP POR MAX_SALARY; Suliste que la comando de JOBS tenga diez archivos con el mismo valor JOB_ID de DBA y el mismo valor MAX_SALARY de 100. (Elija la mejor respuesta.) A. Una fila de salida con los valores DBA, 100 B. Diez filas de salida con los valores DBA, 100 C. Un error es devuelto D. Ninguno de los susodichos

Pregunta de laboratorio

305

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

9. ¿Cuántas filas de datos son devueltas después de ejecutar la select siguiente? SELECCIONE DEPT_ID, SUMA (NVL (SUELDO, 100)) DE EMP GROUP POR DEPT_ID que TIENE LA SUMA (SUELDO)> 400; Suliste que la comando EMP tenga diez filas y cada uno contiene un valor de SUELDO de 100, excepto uno, que tiene un valor nulo en el espacio de SUELDO. Las cinco primeras y segundas filas tienen valores DEPT_ID de 10 y 20, respectivamente. (Elija la mejor respuesta.) A. Dos filas B. Una fila C. Filas cero D. Ninguno de los susodichos

10. ¿Cuántas filas de datos son devueltas después de ejecutar la select siguiente? SELECCIONE DEPT_ID, SUME (SUELDO) DE EMP GROUP POR DEPT_ID que TIENE LA SUMA (NVL (SUELDO, 100))> 400; Suliste que la comando EMP tenga diez filas y cada uno contiene un valor de SUELDO de 100, excepto uno, que tiene un valor nulo en el espacio de SUELDO. Las cinco primeras y segundas filas tienen valores DEPT_ID de 10 y 20, respectivamente. (Elija la mejor respuesta.) A. Dos filas B. Una fila C. Filas cero D. Ninguno de los susodichos

PREGUNTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

La comando PRODUCT_INFORMATION pone en una lista artículos que son orderable y otros que son planeados, obsoletos, o en el desarrollo. Se requiere que usted prepare un informe que los grupos no - orderable productos por su PRODUCT_STATUS y muestran el número de productos en cada grupo y la suma del LIST_PRICE de los productos por grupo. Adelante, sólo las filas de nivel del grupo, donde la suma del LIST_PRICE es mayor que 4000, deben ser mostradas. Un producto es nonorderable si el valor de PRODUCT_STATUS no es igual a la cuerda 'orderable'. Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución propuesta.

306 Capítulo 6:

El obteniendo de Datos Agregados Usando las Funciones de Grupo

Page 259: curso_sql_certificacion

MÍ PRUEBAN RESPUESTAS Describa las Funciones de Grupo

1. ® C. La comando DUAL se pelea y una columna. El CONDE (*) función devuelve el ✓

número de filas en una comando o grupo. Los ® A, B, y D son incorrectos. ˚

2. ® B. Por definición, las funciones de grupo pueden actuar sobre filas múltiples a la vez, a diferencia de la fila sola ✓

funciones. Los ® A, C, y D son select incorrectas. Una función de grupo puede ser usada sin un GRUPO POR ˚cláusula. En este instancia, dataset entero es hecho funcionar en como un grupo. La función de CONDE a menudo es ejecutada contra una comando entera, que se comporta como un grupo. El D es incorrecto. Una vez que un dataset ha sido dividido en grupos diferentes, cualquier función de grupo ejecuta una vez por grupo.

Identifique las Funciones de Available Group 3. ® A. La función de conjunto de SUMA no hace instancia de valores nulos y añade valores no nulos. Desde nueve ✓

las filas contienen el valor de SUELDO 100, 900 es devuelto. Los ® B, C, y D son incorrectos. El B sería devuelto si la SUMA (NVL (SUELDO, 100)) fuera ˚ejecutado. El C es una opción atractiva ya que la aritmética regular con valores NULOS devuelve un resultado NULO. Sin embargo, las funciones agregadas, excepto el CONDE (*), no hacen instancia de valores NULOS.

4. ® C. El CONDE (*) considera todas las filas incluso aquellos con valores NULOS. CONDE (SUELDO) ✓

sólo considera las filas no nulas. Los ® A, B, y D son incorrectos. ˚

5. ® C. La función de NVL converte un valor NULO en 100. A partir de entonces, el promedio ✓

la función añade que el SUELDO valora y obtiene 1000. La división de esto por el número de

archivos vuelve 100. Los ® A, B, y D son incorrectos. El B sería devuelto si AVG (NVL (SUELDO, 0)) fuera seleccionado. Esto ˚es interesante de notar que si el AVG (SUELDO) fuera seleccionado, 100 también habría sido devuelto, ya que la función de AVG sumaría los valores no nulos y dividiría el total en el número de filas con valores de SUELDO no nulos. Entonces AVG (SUELDO) sería calculado como: 900/9=100.

Datos de grupo Usando el GRUPO POR Cláusula 6. ® C. El dataset es segmentado basado en la columna de SUELDO. Esto crea dos grupos: un ✓

con valores de SUELDO de 100 y otro con un valor de SUELDO nulo. La longitud media del

SUELDO valora 100 es 3 para las filas en el primer grupo. El valor de sueldo NULO es convertido

primero Mí Respuestas de Prueba

Page 260: curso_sql_certificacion

307

en el número 0 por la función de NVL, y la longitud media del SUELDO es 1. La función de SUMA funciona a través de los dos grupos que añaden los valores 3 y 1 vuelta 4. Los ® A, B, y D son incorrectos. Parecer plausible desde funciones de grupo no puede ser anidado más ˚que dos niveles profundamente. Aunque haya cuatro funciones, sólo dos son funciones de grupo mientras los demás son funciones de fila sola evaluadas antes de las funciones de grupo. El B sería devuelto si la SUMA de expresión (AVG (LONGITUD (SUELDO))) fuera seleccionada.

7. ® A. Hay 12 valores de DEPARTMENT_ID distintos. Ya que esto es el atributo que se agrupa, ✓

12 grupos son creados, incluso 1 con un valor de DEPARTMENT_ID nulo. Por lo tanto 12 filas son

devueltas. Los ® B, C, y D son incorrectos. ˚

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

8. ® C. Para un GRUPO POR la cláusula para ser usada, una función de grupo debe aparecer en la

lista SENTENCIA. ✓Los ® A, B, y D son incorrectos ya que la select es sintácticamente inexacta y es rechazada ˚por Oracle. No confunda la columna llamada MAX_SALARY para MAX (SUELDO) función.

9. ® B. Dos grupos son creados basados en sus valores de DEPT_ID comunes. El grupo con ✓

Los valores de DEPT_ID de diez consisten en cinco filas con valores de SUELDO de 100 en cada

uno de ellos. Por lo tanto, la SUMA (SUELDO) que la función devuelve 500 para este grupo, y

esto satisface la SUMA QUE TIENE (SUELDO)> 400 cláusula. El grupo con valores DEPT_ID

de 20 tiene cuatro filas con valores de SUELDO de 100 y una fila con un SUELDO NULO. LA

SUMA (SUELDO) Sólo vuelve 400 y este grupo no satisface la cláusula que TIENE. Los ® A, C, y D son incorrectos. Precávase de la SUMA (NVL (SUELDO, 100)) la expresión en el ˚Cláusula SENTENCIA. Esta expresión selecciona el formato de salida. Esto no restringe o limita el dataset en de todos modos.

10. ® A. Dos grupos son creados basados en sus valores de DEPT_ID comunes. El grupo con ✓

Los valores de DEPT_ID de 10 consisten en cinco filas con valores de SUELDO de 100 en cada uno

de ellos. Por lo tanto la SUMA (NVL (SUELDO, 100)) la función vuelve 500 para este grupo y esto

satisface la SUMA QUE TIENE (SUELDO)> 400 cláusula. El grupo con valores DEPT_ID de 20

tiene cuatro filas con valores de SUELDO de 100 y una fila con un SUELDO nulo. La SUMA (NVL

(SUELDO, 100)) vuelve 500 y este grupo satisface la cláusula que TIENE. Por lo tanto dos filas son

devueltas. Los ® B, C, y D son incorrectos. Aunque la cláusula SENTENCIA contenga la SUMA (SUELDO), ˚que vuelve 500 y 400 para los dos grupos, la cláusula que TIENE contiene la SUMA (NVL (SUELDO, 100)) expresión, que especifica los criterios de exclusión o inclusión para una fila de nivel del grupo.

308 Capítulo 6:

Page 261: curso_sql_certificacion

El obteniendo de Datos Agregados Usando las Funciones de Grupo

RESPUESTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución propuesta aquí.

1. Comience al Developer SQL y conecte al esquema OE. 2. El dataset debe ser restringido a filas de la comando PRODUCT_INFORMATION donde el

PRODUCT_STATUS no es igual a la cuerda 'orderable'. Ya que este carácter literal puede haber sido introducido en el instancia variado, una función de conversión de instancia como el SUPERIOR puede ser usada.

3. El DONDE la cláusula es DONDE SUPERIOR (PRODUCT_STATUS) <> 'ORDERABLE'

4. Ya que el dataset debe ser segmentado en grupos basados en la columna PRODUCT_STATUS, el GRUPO POR select es GRUPO POR PRODUCT_STATUS

5. El dataset es dividido ahora en grupos diferentes basados en su PRODUCT_STATUS valores. Por lo tanto, el CONDE (*) función puede ser usado para obtener el número de productos en cada grupo. La SUMA (LIST_PRICE) función agregada puede ser usada para calcular la suma de los valores de LIST_PRICE para todas las filas en cada grupo.

6. La cláusula SENTENCIA es por lo tanto SELECCIONE A CONDE (*), SUMA (LIST_PRICE), PRODUCT_STATUS

7. La cláusula que TIENE que restringe filas de nivel del grupo es por lo tanto TENER SUMA (LIST_PRICE)> 4000

8. El DE la cláusula es DE PRODUCT_INFORMATION

9. La ejecución de esta select devuelve el informe requerido como mostrado en la ilustración siguiente.

7La pruebas de Datos de Tablas Múltiples

OBJETIVOS DE CERTIFICACIÓN

Page 262: curso_sql_certificacion

7.01

7.02

7.03

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using Equijoins y Nonequijoins

Afíliese a una Comando a Sí Usando unos Datos de Vista de Autojuntura que no Encuentran una Juntura Condición Usando Junturas Externas

7.04

✓Q&A

Genere un producto Cartesiano de Dos o más Tablas

Taladradora de dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

310 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Los tres pilares de la teoría relacional son la selección, la proyección, y la

Page 263: curso_sql_certificacion

conexión. Este capítulo se concentra en la realización práctica de la conexión. Las filas de tablas

diferentes son

asociado el uno con el otro usando junturas. El apoyo a la conexión tiene implicaciones para el camino

los datos son almacenados en tablas de base de datos. Muchos modelos de datos, como tercera forma normal o esquemas de estrella han surgido para explotar este aspecto.

Las tablas pueden ser afiliadas de varios modos. La técnica más común es llamada un equijoin. Una fila tiene que ver con una o varias filas en otra comando basada en la igualdad de valores de columna o expresiones. Las tablas también pueden ser afiliadas usando un nonequijoin. En este instancia, una fila tiene que ver con una o varias filas en otra comando si sus valores de columna caen a una variedad determinada por operadores de desigualdad.

Una técnica menos común debe asociar filas con otras filas en la misma comando. Esta asociación está basada en columnas con relaciones lógicas y por lo general jerárquicas el uno con el otro. Esto es llamado una autojuntura. Las filas con entradas nulas o que se diferencian en columnas de juntura comunes son excluidas cuando equijoins y nonequijoins son realizados. Una juntura externa está disponible para traer estas filas cojas o quedadas huérfanas si es necesario.

Una juntura enfadada o el producto Cartesiano son formados cuando cada fila de una comando es afiliada a todas las filas en el otro. Esta juntura a menudo es el resultado de ausencia o condiciones de juntura inadecuadas, pero es de vez en cuando intencional.

OBJETIVO DE CERTIFICACIÓN 7.01

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using Equijoins y Nonequijoins

Este objetivo de certificación recibe la cobertura extensa en este capítulo. Es crucial a aprendizaje de los conceptos y lenguaje para realizar junturas. Los tipos diferentes de junturas son introducidos en sus formas primitivas que perfilan las amplias categorías que están disponibles. Una discusión a fondo de varias cláusulas de juntura es conducida entonces. Hablan de la sintaxis de Oracle ANSI-dócil y tradicional moderna, pero el hincapié es hecho en la sintaxis moderna. Esta sección concluye con una

Page 264: curso_sql_certificacion

discusión Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

311

de nonequijoins y condiciones de juntura adicionales. La conexión es descrita concentrándose en las ocho áreas siguientes:

■ los Tipos de las junturas ■ tablas que se Unen usando la sintaxis de SQL:1999 ■ Calificación a la columna ambigua llama ■ La cláusula de JUNTURA NATURAL ■ La JUNTURA natural USANDO la cláusula ■ La JUNTURA natural EN la cláusula ■ N-camino junturas y condiciones de juntura adicionales ■ Nonequijoins

Tipos de Junturas Dos junturas básicas son el equijoin y el nonequijoin. Equijoins son más con frecuencia usados. Las junturas pueden ser realizadas entre tablas múltiples, pero la mayor parte de la discusión siguiente usará dos tablas hipotéticas para ilustrar los conceptos y lenguaje de junturas. La primera comando es llamada la fuente y el segundo es llamado el objetivo. Las filas en la fuente y tablas objetivo comprenden una o varias columnas. Como un ejemplo, suliste que la fuente y el objetivo sean los COUNTRIES y tablas de REGIONS del esquema de HORA, respectivamente.

La comando de COUNTRIES contiene tres columnas llamadas COUNTRY_ID, COUNTRY_NAME, y REGION_ID. La comando de REGIONS consiste de dos columnas llamadas REGION_ID y REGION_NAME. Los datos en estas dos tablas están relacionados el uno con el otro basado en la columna REGION_ID común. Considere las preguntas siguientes:

La consulta 1: seleccione * de COUNTRIES donde country_id ='CA'; la Consulta 2: seleccione region_name de REGIONS donde region_id = '2';

El nombre de la región a la cual un país pertenece puede ser determinado por la obtención de su valor de REGION_ID. Este valor es usado para afiliarse a ello con la fila en la comando de REGIONS con mismo REGION_ID. La consulta 1 recupera los valores de columna asociados con la fila de la comando de COUNTRIES donde el COUNTRY_ ID ='CA'. El valor REGION_ID de esta fila es 2. La consulta 2 trae las Américas REGION_NAME de la comando de REGIONS para la fila con REGION_ID=2. Equijoining facilita la recuperación de valores de columna de tablas múltiples usando una pregunta sola.

312 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

La fuente y las tablas objetivo pueden ser cambiadas, entonces la comando de REGIONS podría ser el la fuente y la comando de COUNTRIES podrían ser el objetivo. Considere las dos preguntas siguientes:

Page 265: curso_sql_certificacion

La consulta 1: seleccione * de REGIONS donde region_name ='Americas'; la Consulta 2: seleccione country_name de COUNTRIES donde region_id = '2';

La consulta 1 trae una fila con un valor REGION_ID de 2. Participar en esto puso

marcha atrás la manera permite que la pregunta siguiente sea preguntada: ¿Qué COUNTRIES pertenecen a la región de Américas? Las respuestas de la segunda pregunta son cinco valores de COUNTRY_NAME: Argentina, Brasil, Canadá, México, y los Estados Unidos de América. Estos resultados pueden ser obtenidos de una pregunta sola que se afilia a las tablas juntos. La lenguaje para realizar equijoins, nonequijoins, junturas externas, y junturas enfadadas es introducida después, junto con una discusión de la sintaxis de juntura de Oracle tradicional.

Las Junturas naturales La juntura natural es puesta en práctica usando tres cláusulas de juntura posibles que usan las palabras claves siguientes en combinaciones diferentes: JUNTURA NATURAL, UTILIZACIÓN, y EN.

Cuando la fuente y las tablas objetivo comparten columnas idénticamente llamadas, es posible realizar una juntura natural entre ellos sin especificar una columna de juntura. Esto es a veces referido como una juntura natural pura. En este guión, las columnas con los mismos nombres en la fuente y tablas objetivo automáticamente tienen que ver el uno con el otro. Las filas con valores de columna correspondientes en ambas tablas son recuperadas. La comando de COUNTRIES y REGIONS ambos comparte la columna REGION_ID. Ellos pueden ser naturalmente afiliados sin especificar columnas de juntura, como mostrado en las dos primeras preguntas en la Figura 7-1.

Las palabras claves de JUNTURA NATURALES instruyen el Oracle de identificar columnas con nombres idénticos entre tablas objetivo y la fuente. A partir de entonces, una juntura es implícitamente realizada entre ellos. En la primera pregunta, la columna REGION_ID es identificada como la columna única comúnmente llamada en ambas tablas. Las REGIONS son la comando de la fuente y aparecen después el DE la cláusula. La comando objetivo es por lo tanto COUNTRIES. Para cada fila en la comando de REGIONS, un partido para el valor de REGION_ID es buscado de todas las filas en la comando de COUNTRIES. Un SET de resultado interino es construido conteniendo filas que emparejan la condición de juntura. Este SET es restringido entonces por el DONDE cláusula. En este instancia, porque el valor de COUNTRY_NAME debe ser Canadá, el NOMBRE de REGION_ de Américas es devuelto.

La segunda pregunta muestra una juntura natural donde los COUNTRIES son la comando de la fuente. El valor de REGION_ID para cada fila en la comando de COUNTRIES es identificado y una búsqueda de una fila correspondiente en la comando de REGIONS es iniciada. Si los partidos son encontrados, los resultados interinos son limitados por cualquiera DONDE condiciones. Los COUNTRY_NAME de filas con Américas como su REGION_NAME son devueltos.

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

313

Page 266: curso_sql_certificacion

FIGURA 7-1

Junturas naturales

A veces más control debe ser ejercido en cuanto a cual columnas usar para junturas. Cuando hay nombres de columna idénticos en la fuente y apuntan tablas usted quiere excluir como columnas de juntura, el formato de JOINUSING puede ser usado. Recuerde que el Oracle no impone ninguna regla que declara que las columnas con el mismo nombre en dos tablas distintas deben tener una relación el uno con el otro. La tercera pregunta explícitamente especifica que la comando de REGIONS sea afiliada a la comando de COUNTRIES basada en valores comunes en sus columnas REGION_ID. Esta sintaxis permite que junturas naturales sean formadas en columnas específicas en vez de en todas las columnas comúnmente llamadas.

La cuarta pregunta demuestra el formato JOINON de la juntura natural, que permite que columnas de juntura sean explícitamente declaradas. Este formato no depende de las columnas en la fuente y apunta tablas que tienen nombres idénticos. Esta forma es más general y es el formato de juntura natural el más extensamente usado.

314 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Tenga cuidado usando junturas naturales puras ya que los diseñadores de base de datos pueden adjudicar el mismo nombre a columnas claves o únicas. Estas columnas pueden tener nombres como ID o SEQ_NO. Si una juntura natural pura es intentada entre tales tablas, los resultados ambiguos e inesperados

Page 267: curso_sql_certificacion

pueden ser devueltos.

Junturas externas No todas las tablas comparten una relación perfecta, donde cada registro en la comando de la fuente puede ser emparejado a al menos una fila en la comando objetivo. Hace falta de vez en cuando que las filas con la columna de juntura no correspondiente también valoren ser recuperadas por una pregunta. Esto puede parecer derrota el objetivo de junturas, pero tiene algunas ventajas prácticas.

Suliste a los EMPLOYEES y las tablas de DEPARTMENTS son afiliadas con valores de DEPARTMENT_ID comunes. Los archivos de EMPLOYEES con valores de DEPARTMENT_ID nulos son excluidos junto con valores ausentes de la comando de DEPARTMENTS. Una juntura externa trae estas filas.

Las Junturas enfadadas Una juntura enfadada o el producto Cartesiano sacan sus nombres de matemáticas, donde también es referido como un producto enfadado entre dos SETs o matrices. Esta juntura crea una fila de salida para cada combinación de la fuente y apuntan filas de comando.

Si la fuente y las tablas objetivo tienen tres y cuatro filas, respectivamente, una juntura enfadada entre ellos resultados en (34 12) filas devueltas. Considere a las cuentas de fila recuperadas de las preguntas en la Figura 7-2.

Los dos primeros recuentos de fila son realizados en los COUNTRIES y tablas de REGIONS que ceden 25 y 4 filas respectivamente. La tercera pregunta cuenta el número de filas volvió de una juntura enfadada de estas tablas y cede 100. La consulta 4 devolvería 100 archivos si el DONDE la cláusula era ausente. Cada una de las cuatro filas en la comando de REGIONS es afiliada a una fila de la comando de COUNTRIES. Cada fila volvió contiene cada columna de ambas tablas.

La Sintaxis de Juntura de oracle que Una sintaxis de juntura de Oracle patentada ha desarrollado lo que es estable y entendido por millones de usuarios. Esta sintaxis tradicional es apoyada por el Oracle y está presente en sistemas de software a través del mundo. Usted sin duda encontrará la sintaxis de juntura de Oracle tradicional que hace ahora el camino para la sintaxis ANSI-dócil estandarizada hablado en este capítulo.

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

315

FIGURA 7-2

Juntura enfadada

Page 268: curso_sql_certificacion

La sintaxis de juntura de Oracle tradicional apoya conexión natural, junturas externas, y junturas Cartesianos, como mostrado en las preguntas siguientes:

La consulta 1: REGIONS region_name sentencias, COUNTRIES country_name de REGIONS, COUNTRIES donde REGIONS region_id=countries.region_id; la Consulta 2: seleccione last_name, department_name de EMPLOYEES, DEPARTMENTS donde EMPLOYEES department_id (+) = DEPARTMENTS department_id; la Consulta 3: seleccione * de REGIONS, COUNTRIES;

La consulta 1 realiza una juntura natural especificando la juntura como una

condición en el DONDE cláusula. Esto es la diferencia más significativa entre el tradicional y ANSI SQL sintaxis de juntura. Tome la nota de la columna aliasing utilización de la COMANDO.COLUMN_NAME nota para quitar la ambigüedad a los nombres de columna idénticos. Hablan de esta nota detalladamente más tarde en este capítulo. La consulta 2 especifica la juntura entre la fuente y tablas objetivo como un DONDE condición. Hay un más el símbolo encerrado entre paréntesis (+) a la izquierda del signo igual que indica al Oracle que una juntura externa correcta debe ser realizada. Esta pregunta devuelve LAST_NAME de los EMPLOYEES y

316 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

sus valores de DEPARTMENT_NAME correspondientes. Además, la juntura externa recupera DEPARTMENT_NAME de las filas con valores de DEPARTMENT_ID no actualmente adjudicados a cualquier archivo de empleado. La consulta 3 realiza una juntura Cartesiano o enfadada por la exclusión de la condición de juntura.

La sintaxis de juntura de Oracle tradicional es extensamente usada. Sin embargo, el examen tasa su entendimiento de junturas y el ANSI SQL las formas de la su sintaxis. Esté preparado, aunque: algunas preguntas pueden dar un toque

Page 269: curso_sql_certificacion

su conocimiento de la sintaxis tradicional. Este conocimiento es útil ya que la sintaxis de Oracle tradicional es profundamente empotrada a través de sistemas de software por todo el mundo.

La conexión a Tablas Usando Sintaxis de SQL:1999 Antes del Oracle 9i, la sintaxis de juntura tradicional era la única lenguaje disponible

para la juntura tablas. Desde entonces, el Oracle ha introducido una nueva lenguaje que es dócil al ANSI SQL:1999 estándares. Esto no ofrece ningunas ventajas de rendimiento sobre la sintaxis tradicional. Las junturas naturales, externas, y enfadadas pueden ser escritas usando tanto SQL:1999 como Oracle tradicional SQL.

La forma general de la select SENTENCIA usando ANSI SQL:1999 sintaxis es como sigue:

SELECCIONE table1.column, table2.column DE table1 [la JUNTURA NATURAL table2] | [SE UNE table2 USANDO (column_name)] | [SE AFILIAN a table2 EN (table1.column_name = table2.column_name)] | [DEJADO | DERECHO | JUNTURA EXTERNA LLENA table2 EN (table1.column_name = table2.column_name)] | [La CRUZ SE AFILIA a table2]; Esto es disecado y los ejemplos son explicados en las siguientes secciones. El

la forma general de la sintaxis patentada al Oracle tradicional relevante para junturas es como sigue:

SELECCIONE table1.column, table2.column DE table1, table2 [DONDE (table1.column_name = table2.column_name)] | [DONDE (table1.column_name (+) = table2.column_name)] | [DONDE (table1.column_name) = table2.column_name) (+)]; Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

317

Si ningunas junturas o menos que junturas de n-1 son especificados en el DONDE las condiciones de cláusula, donde N se refiere al número de tablas en la pregunta, entonces una juntura Cartesiano o enfadada es realizada. Si un número adecuado de condiciones de juntura es especificado, entonces la primera cláusula condicional opcional especifica una juntura natural, mientras las dos segundas cláusulas opcionales especifican la sintaxis para junturas externas izquierdas y derechas.

Calificación a Nombres de Columna Ambiguos Las columnas con los mismos nombres pueden ocurrir en tablas implicadas en una

juntura. El las columnas llamadas DEPARTMENT_ID y MANAGER_ID son encontradas tanto en los EMPLOYEES como en tablas de DEPARTMENTS. La columna REGION_ID está presente tanto en las REGIONS como en tablas de COUNTRIES. El listado de tales columnas en una pregunta se hace problemático cuando el Oracle no puede resolver su origen. Las columnas con nombres únicos a través de las tablas implicadas en una juntura no causan ninguna ambigüedad, y el Oracle puede resolver fácilmente su

Page 270: curso_sql_certificacion

comando de la fuente. El problema de nombres de columna ambiguos es dirigido con la nota de punto. Una

columna puede ser prefijada por su nombre de tabla y un punto o símbolo de período para designar su origen. Esto lo diferencia de una columna con el mismo nombre en otra comando. La nota de punto puede ser usada en preguntas que implican cualquier número de tablas. Referirse a algunas columnas usando la nota de punto no implica que todas las columnas deben ser referidas de esta manera.

La nota de punto es realzada con aliases de comando. Un alias de comando proporciona un suplente, nombre por lo general más corto para una comando. Puede referirse una columna como TABLE_NAME.COLUMN_NAME o TABLE_ALIAS.COLUMN_NAME. Considere la pregunta mostrada en la Figura 7-3.

La comando de EMPLOYEES es aliased con el nombre corto EMP mientras la comando de DEPARTMENTS no es. La cláusula SENTENCIA se refiere al EMPLOYEE_ID y columnas MANAGER_ID como EMP.EMPLOYEE_ID y EMP.MANAGER_ID. La columna MANAGER_ID de la comando de DEPARTMENTS se menciona como DEPARTMENTS MANAGER_ID. La calificación a la columna EMPLOYEE_ID usando la nota de punto es innecesaria porque hay sólo una columna con este nombre entre las dos tablas. Por lo tanto, no hay ninguna ambigüedad.

La columna MANAGER_ID debe ser calificada para evitar la ambigüedad porque es presentado en ambas tablas. Ya que el formato de JOINUSING es aplicado, sólo DEPARTMENT_ID es usado como la columna de juntura. Si una JUNTURA NATURAL fuera empleada, tanto el DEPARTMENT_ID como las columnas MANAGER_ID serían usados. Si la columna MANAGER_ID no fuera calificada, "ORA-00918:column ambiguamente definió" el error sería devuelto. Si DEPARTMENT_ID fuera aliased, "ORA-25154:column la parte de USAR la cláusula no puede tener el calificador" error sería levantado.

318 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

FIGURA 7-3

Nota de punto

Page 271: curso_sql_certificacion

El Developer de SQL proporciona el título MANAGER_ID a la primera referencia hecha en la cláusula SENTENCIA. La cuerda "_1" es automáticamente añadida a la segunda referencia, creando el título MANAGER_ID_1.

La calificación a referencias de columna con la nota de punto para indicar la comando de una columna del origen tiene una ventaja de rendimiento. El tiempo es ahorrado porque el Oracle es dirigido al instante a la comando apropiada y no tiene que resolver el nombre de tabla.

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

La Cláusula de JUNTURA NATURAL La sintaxis general para la cláusula de JUNTURA NATURAL es como sigue:

SELECCIONE table1.column, table2.column DE JUNTURA NATURAL table1 table2;

319 La juntura natural pura identifica las columnas con nombres comunes en table1 y

table2 e implícitamente se afilia a las tablas usando todas estas columnas. Las columnas en la cláusula SENTENCIA pueden ser calificadas usando la nota de punto a menos que ellos sean una de las columnas de juntura. Considere las preguntas siguientes:

Pregunta de pregunta donde Pregunta de Pregunta

1: seleccione * de LOCATIONS COUNTRIES de juntura naturales; 2: seleccione * de LOCATIONS, LOCATIONS country_id de COUNTRIES = COUNTRIES country_id; 3: seleccione * de JOBS COUNTRIES de juntura naturales; 4: seleccione * de JOBS, COUNTRIES;

La juntura natural identifica columnas con nombres comunes entre las dos tablas. En la consulta 1, COUNTRY_ID ocurre en ambas tablas y se hace la columna de juntura. La consulta 2 es escrita usando la sintaxis de Oracle tradicional y recupera las mismas filas que la consulta 1. A menos que usted sea familiar con las columnas en la fuente y apunte tablas, las junturas naturales deben ser usadas con la precaución, ya que las condiciones de juntura son automáticamente formadas entre todas las columnas con nombres compartidos.

Page 272: curso_sql_certificacion

La consulta 3 realiza una juntura natural entre tablas de COUNTRIES y los JOBS. No hay ningunas columnas con nombres idénticos, causando un producto Cartesiano. La consulta 4 es equivalente a la consulta 3, y una juntura Cartesiano es realizada usando la sintaxis de Oracle tradicional.

La juntura natural es simple, pero propensa a una debilidad fundamental. Esto sufre el riesgo que dos columnas con el mismo nombre no pudieran tener ninguna relación y pueden no tener hasta tipos de datos compatibles. En la Figura 7-4, los COUNTRIES, LAS REGIONS, y las tablas SALE_REGIONS son descritos. La comando SALES_REGIONS fue construida para ilustrar el punto importante siguiente: Aunque esto tenga REGION_ ID en común con la comando de COUNTRIES, no puede ser naturalmente afiliado a ello porque sus tipos de datos son incompatibles. Los tipos de datos de los COUNTRIES. REGION_ID y las columnas SALES_REGIONS.REGION_ID son el NÚMERO y VARCHAR2, respectivamente. Los datos de carácter no pueden ser implícitamente convertidos en datos numéricos y "ORA-01722: el número inválido" error es incrementado. Las REGIONS.REGION_ID columna son del NÚMERO de tipo y sus datos están relacionados con los datos en la comando de COUNTRIES. Por lo tanto, la juntura natural entre la comando de COUNTRIES y REGIONS trabaja perfectamente.

320 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

FIGURA 7-4

La juntura natural

Page 273: curso_sql_certificacion

EJERZA 7-1 Utilización de la JUNTURA NATURAL La comando JOB_HISTORY comparte tres columnas idénticamente llamadas con el Comando de EMPLOYEES: EMPLOYEE_ID, JOB_ID, y DEPARTMENT_ID. Se requiere que usted describa las tablas y traiga el EMPLOYEE_ID, JOB_ID, DEPARTMENT_ID, LAST_NAME, HIRE_DATE, y valores de END_DATE para todas las filas recuperadas usando una juntura natural pura. El alias la comando de EMPLOYEES como EMP y la comando JOB_HISTORY como JH y uso puntea la nota donde posible.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. Las tablas son descritas usando los comandos EMPLOYEES de DESC y

El DESC JOB_HISTORY, y las columnas con nombres idénticos y sus tipos de datos puede ser examinado.

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

3. El DE la cláusula es DE JOB_HISTORY JH

4. La cláusula de JUNTURA es EMPLOYEES DE JUNTURA NATURALES EMP

5. La cláusula SENTENCIA es SELECCIONE EMP.LAST_NAME, EMP.HIRE_DATE, JH.END_DATE

321 6. La ejecución de esta select devuelve una fila sola con mismo EMPLOYEE_ID,

JOB_ID, y DEPARTMENT_ID valoran en ambas tablas y son mostrados en la ilustración siguiente:

Page 274: curso_sql_certificacion

La JUNTURA Natural USANDO Cláusula El formato de la sintaxis para la JUNTURA natural USANDO la cláusula es

como sigue:

SELECCIONE table1.column, table2.column DE table1 SE AFILIAN A LA UTILIZACIÓN de table2 (join_column1, join_column2);

322 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Mientras la juntura natural pura contiene la palabra clave NATURAL en su sintaxis, el La sintaxis de JOINUSING no hace. Un error es levantado si las palabras claves NATURALES y UTILIZACIÓN ocurren en la misma cláusula de juntura. La cláusula JOINUSING permite que una o varias columnas equijoin sean explícitamente especificadas entre paréntesis después de la palabra clave de UTILIZACIÓN. Esto evita los defectos asociados con la juntura natural pura. Muchas situaciones exigen que las tablas sólo sean afiliadas en ciertas columnas, y este formato satisface este requisito. Considere las preguntas siguientes:

Pregunta 1: seleccione * de COUNTRIES de juntura de LOCATIONS usando (country_id); Pregunta 2: seleccione * de LOCATIONS, COUNTRIES donde LOCATIONS country_id = COUNTRIES country_id; Pregunta 3: seleccione * de la utilización de COUNTRIES de juntura de JOBS;

La consulta 1 especifica que las LOCATIONS y las tablas de COUNTRIES

deben ser afiliado en valores de columna COUNTRY_ID comunes. Todas las columnas de estas tablas son recuperadas para las filas con valores de columna de juntura correspondientes. La consulta 2 muestra una pregunta tradicionalmente especificada que recupera las mismas filas que la consulta 1. La consulta 3 ilustra que una juntura Cartesiano no puede ser por casualidad especificada con la sintaxis JOINUSING desde sólo las columnas con nombres compartidos son permitidas después de la palabra clave de UTILIZACIÓN. Las columnas de juntura no pueden ser calificadas usando nombres de tabla o aliases cuando se los refieren. Ya que esta sintaxis de juntura potencialmente excluye algunas columnas con nombres idénticos de la cláusula de juntura, éstos deben ser calificados si se los refieren para evitar la ambigüedad.

Como la Figura 7-5 muestra, el JOB_HISTORY y las tablas de EMPLOYEES fueron afiliados basados en la presencia de valores iguales en su JOB_ID y columnas EMPLOYEE_ID. Las filas que se conforman con esta condición de juntura son recuperadas. Estas tablas comparten tres columnas idénticamente llamadas. La sintaxis JOINUSING permite la especificación de sólo dos de éstos como columnas de juntura. Note que aunque la columna tercera idénticamente llamada sea

Page 275: curso_sql_certificacion

DEPARTMENT_ID, es calificada con un alias de comando para evitar la ambigüedad. Sin embargo, las columnas de juntura en la cláusula SENTENCIA no pueden ser calificadas con aliases de comando.

La JUNTURA Natural EN Cláusula El formato de la sintaxis para la JUNTURA natural EN la cláusula es como sigue:

SELECCIONE table1.column, table2.column DE table1 SE AFILIAN a table2 EN (table1.column_name = table2.column_name); Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

323

FIGURA 7-5

Juntura natural usando la JOIN cláusula de UTILIZACIÓN

La juntura natural pura y las cláusulas JOINUSING dependen de columnas de juntura con nombres de columna idénticos. La cláusula JOINON permite la especificación explícita de columnas de juntura, sin tener en cuenta sus nombres de columna. Esto es la forma más flexible y extensamente usada de las cláusulas de juntura. El EN y palabras claves NATURALES no puede aparecer juntos en una cláusula de juntura. Las columnas equijoin son totalmente calificadas de table1.column1 = table2.column2 y son opcionalmente especificadas entre paréntesis después el EN la palabra clave. Las preguntas siguientes ilustran la cláusula JOINON:

La consulta 1: seleccione * de DEPARTMENTS d acompañan a EMPLOYEES e en (e.employee_id=d.department_id); la Consulta 2: seleccione * de EMPLOYEES e, DEPARTMENTS d donde e.employee_id=d.department_id;

Page 276: curso_sql_certificacion

324 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

GUIÓN & SOLUCIÓN

Se requiere que usted recupere la información de tablas múltiples, agrupe los resultados, y aplique una función agregada a ellos. ¿Puede un grupo funcionar ser usado contra datos de fuentes de comando múltiples? Afiliándose a dos tablas, hay un riesgo que entre ellos ellos contengan nombres de columna comunes. ¿Sabe el oracle qué tablas traer datos de si tales columnas están presentes en la lista SENTENCIA?

La cláusula de JUNTURA NATURAL es usada para afiliarse a filas de dos tablas basadas en columnas con nombres comunes que comparten valores idénticos. ¿Es posible afiliarse a dos tablas basadas en algunas columnas compartidas y no todos ellos?

Sí. La conexión a tablas múltiples por último cede un SET de datos que comprenden una o varias filas y columnas. Una vez que el dataset es creado, las funciones agregadas lo tratan como si los datos provinieron de una fuente. No. El oracle no sabe de que tabula tales columnas provienen, y un error es levantado. Las referencias de columna ambiguas pueden ser evitadas usando a calificadores. Los calificadores emplean la nota de punto para clarificar la comando de una columna del origen. Sí. La cláusula recomendada por afiliarse naturalmente a dos tablas basadas en una o varias de las columnas con nombres idénticos es JOINUSING. Un par de soportes sigue la cláusula de UTILIZACIÓN en la cual las columnas de juntura no calificadas son especificadas.

La consulta 1 recupera todos los valores de columna tanto de los DEPARTMENTS como de tablas de EMPLOYEES para las filas que encuentran una condición equijoin. Esta condición es realizada por valores de EMPLOYEE_ID que emparejan valores de DEPARTMENT_ID en la comando de DEPARTMENTS. La sintaxis de Oracle tradicional en la consulta 2 devuelve los mismos resultados que la consulta 1. Note las semejanzas entre la condición de juntura tradicional especificada en el DONDE cláusula y la condición de juntura especificada después el EN la palabra clave.

La columna START_DATE en la comando JOB_HISTORY es afiliada a la columna de FECHA HIRE_ en la comando de EMPLOYEES en la Figura 7-6. Este equijoin recupera los detalles de EMPLOYEES que trabajaron para la organización y cambiaron JOBS.

EJERZA 7-2 Utilización de la Cláusula JOINON NATURAL Cada registro en la comando de DEPARTMENTS tiene una columna MANAGER_ID

correspondiente un EMPLOYEE_ID valora en la comando de EMPLOYEES. Se requiere que usted produzca un informe con una columna aliased como gerentes. Cada fila debe contener una oración del formato FIRST_NAME LAST_NAME es el gerente del DEPARTMENT_NAME

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

325

Page 277: curso_sql_certificacion

FIGURA 7-6

Juntura natural usando la cláusula JOINON

departamento. El alias la comando de EMPLOYEES como E y la comando de DEPARTMENTS como D y uso puntea la nota donde posible.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La columna de gerentes puede ser construida concadenando el requerido

artículos y separación de ellos con espacios. 3. La cláusula SENTENCIA es

SELECCIONE E.FIRST_NAME ||' '|| E.LAST_NAME ||' es el gerente del '|| D.DEPARTMENT_NAME ||' departamento.' "Gerentes"

326 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

4. El DE la cláusula es DE LOS EMPLOYEES E 5. La cláusula JOINON es DEPARTMENTS DE JUNTURA D EN (E. EMPLOYEE_ID=D.MANAGER_ID).

6. La ejecución de esta select devuelve 11 filas que describen a los gerentes de cada uno departamento como mostrado en la ilustración siguiente:

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

Page 278: curso_sql_certificacion

De N-camino Junturas y Condiciones de Juntura Adicionales 327

Las junturas sólo habladas fueron demostradas usando dos tablas. No hay ninguna restricción del número de tablas que pueden estar relacionadas usando junturas. La tercera forma normal consiste en un SET de tablas conectadas por una serie de relaciones de clave foránea y primarias. Cruzar estas relaciones usando junturas habilita la recuperación consecuente y confiable de datos. Cuando junturas múltiples existen en una select, ellos son evaluados de la izquierda a la derecha. Considere la pregunta siguiente usando junturas naturales puras:

seleccione r.region_name, c.country_name, l.city, d.department_name de DEPARTMENTS d LOCATIONS de juntura naturales l COUNTRIES de juntura naturales c REGIONS de juntura naturales r

La juntura entre DEPARTMENTS y LOCATIONS crea un ínterin SET de resultado que consiste en 27 filas. Estas tablas proporcionan columnas de CIUDAD y el DEPARTMENT_NAME. Este SET es naturalmente afiliado a la comando de COUNTRIES. Ya que el SET interino no contiene la columna COUNTRY_ID, una juntura Cartesiano es realizada. Las 27 filas interinas son afiliadas a las 25 filas en la comando de COUNTRIES, cediendo un nuevo SET de resultados interino con 675 (2725) filas y tres columnas: DEPARTMENT_NAME, CIUDAD, y COUNTRY_NAME. Este SET es naturalmente afiliado a la comando de REGIONS. Otra vez, una juntura Cartesiano ocurre porque la columna REGION_ID es ausente del SET interino. El SET de resultado final contiene 2700 (675 4) filas y cuatro columnas. La utilización de junturas naturales puras con tablas múltiples es susceptible de errores y no recomendada.

El JOINUSING y la sintaxis JOINON son mejor satisfechos para unirse múltiple tablas. La pregunta siguiente se afilia a cuatro tablas usando la sintaxis de juntura natural

pura:

seleccione region_id, country_id, c.country_name, l.city, d.department_name de DEPARTMENTS d LOCATIONS de juntura naturales l COUNTRIES de juntura naturales c REGIONS de juntura naturales r

Esta pregunta correctamente cede 27 filas en el SET de resultados finales desde la

juntura requerida las columnas son puestas en una lista en la cláusula SENTENCIA. La pregunta siguiente demuestra como la cláusula JOINON es usada para traer las mismas 27 filas. Una condición de juntura sólo puede referirse a columnas en su alcance. En el ejemplo siguiente, la juntura de DEPARTMENTS a LOCATIONS puede no referirse a columnas en los COUNTRIES o tablas de REGIONS, pero la juntura entre COUNTRIES y REGIONS puede referirse a cualquier columna de las cuatro tablas implicadas en la pregunta.

seleccione r.region_name, c.country_name, l.city, d.department_name de DEPARTMENTS d LOCATIONS de juntura l en (l.location_id=d.location_id) COUNTRIES de juntura c en (c.country_id=l.country_id) REGIONS de juntura r en (r.region_id=c.region_id)

328 Capítulo 7:

Page 279: curso_sql_certificacion

La pruebas de Datos de Tablas Múltiples

La cláusula JOINUSING también puede ser usada para afiliarse a estas cuatro tablas como sigue:

seleccione r.region_name, c.country_name, l.city, d.department_name de DEPARTMENTS d LOCATIONS de juntura l usando (location_id) COUNTRIES de juntura c usando (country_id) REGIONS de juntura r usando (region_id)

EL DONDE la cláusula es usada para especificar condiciones que restringen el SET de resultados de a pregunte si esto contiene junturas o no. La cláusula JOINON también es usada para especificar condiciones que limitan el SET de resultados creado por la juntura. Considere las dos preguntas siguientes:

La consulta 1: seleccione d.department_name de DEPARTMENTS d LOCATIONS de juntura l en (l. LOCATION_ID=d. LOCATION_ID) donde d.department_name como 'P %'

La consulta 2: seleccione d.department_name de DEPARTMENTS d LOCATIONS de juntura l en (l. LOCATION_ID=d. LOCATION_ID y d.department_name como 'P %')

La consulta 1 usa un DONDE cláusula para restringir las 27 filas creadas por

equijoining el Las tablas de LOCATIONS y DEPARTMENTS basadas en su LOCATION_ID valoran a los tres que contienen valores de DEPARTMENT_ID que comienzan con la carta P. La consulta 2 pone en práctica la condición dentro de los soportes del EN la subcláusula y devuelve las mismas tres filas.

Cinco tablas son afiliadas en la Figura 7-7, causando una lista que describe a los EMPLOYEES de ganancia superiores e información geográfica sobre sus DEPARTMENTS.

Hay tres formatos de juntura naturales. La juntura natural pura usa la cláusula de JUNTURA NATURAL y se afilia a dos tablas basadas en todas las columnas con nombres compartidos. Los otros dos formatos usan el JOINUSING y cláusulas JOINON y también son referidos junturas como naturales. Ellos no usan la palabra clave NATURAL.

Preste la atención a la sintaxis, desde una cláusula de juntura tal como SENTENCIA * DE LA JUNTURA NATURAL TABLE1 TABLE2 USANDO (LA COLUMNA) puede parecer correcto, pero es, de hecho, sintácticamente incorrecto. Recuerde la UTILIZACIÓN, EN, y las palabras claves NATURALES son mutuamente exclusivas en el contexto de la misma cláusula de juntura.

Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

329

Page 280: curso_sql_certificacion

FIGURA 7-7

El N-camino se une y condiciones de juntura adicionales

Nonequijoins Nonequijoins emparejan valores de columna de tablas diferentes basadas en una expresión de desigualdad. El valor de la columna de juntura en cada fila en la comando de la fuente es comparado con los valores correspondientes en la comando objetivo. Un partido es encontrado si la expresión usada en la juntura, basada en un operador de desigualdad, evalúa al verdadero. Cuando tal juntura es construida, un nonequijoin es realizado.

Un nonequijoin es especificado usando la sintaxis JOINON, pero la condición de juntura contiene a un operador de desigualdad en vez de un signo igual.

330 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

El formato de la sintaxis para una cláusula nonequijoin es como sigue: SELECCIONE table1.column, table2.column DE table1 [SE UNEN table2 EN (table1.column_name <table2.column_name)] | [SE UNEN table2 EN (table1.column_name> table2.column_name)] | [SE UNEN table2 EN (table1.column_name <= table2.column_name)] | [SE UNEN table2 EN (table1.column_name> = table2.column_name)] | [SE AFILIAN a table2 EN (table1.column ENTRE table2.col1 Y table2.col2)] | Consideran las 15 primeras filas devueltas por la pregunta en la Figura 7-8. Los EMPLOYEES

Page 281: curso_sql_certificacion

la comando es nonequijoined a la comando de JOBS basada en la condición de juntura de desigualdad (2*E.SALARY <J.MAX_SALARY). La comando de JOBS almacena la variedad de sueldo para JOBS diferentes en la organización. El valor de SUELDO para cada registro de empleado es

FIGURA 7-8

Nonequijoins

Afíliese a una Comando a Sí Usando una

Autojuntura

331

doblado y comparado con todo MAX_SALARY valora en la comando de JOBS. Si la condición de juntura evalúa al verdadero, la fila es devuelta.

Las dos primeras filas muestran al empleado con un LAST_NAME de Abel que actualmente tiene un valor JOB_ID de SA_REP y gana un SUELDO de 11000. Éstos son las sólo dos filas en la comando de JOBS que satisfacen la condición de juntura de desigualdad (2*E.SALARY <J.MAX_SALARY) para este registro de empleado.

Nonequijoins no son comúnmente usados. El ENTRE el operador de variedad a menudo aparece con condiciones nonequijoin. Es más simple usar un ENTRE el operador en una condición que dos condiciones nonequijoin basadas en el menos que o igual a (<=) y el mayor que o igual a (> =) operadores.

OBJETIVO DE CERTIFICACIÓN 7.02

Afíliese a una Comando a Sí Usando una Autojuntura El almacenaje de datos jerárquicos en una comando relacional sola es llevado a cabo

asignando en la menor parte dos columnas por fila. Una columna almacena un identificador del registro paternal de la fila y las segundas tiendas el identificador de la fila. La asociación de filas el uno con el otro basado en una relación jerárquica requiere que el Oracle se afilie a una comando a sí. Hablan de esta técnica de autojuntura en la siguiente sección.

La conexión a una Comando a Sí Usando la Cláusula JOINON Suliste que hay una necesidad de almacenar un árbol genealógico en una comando

relacional. Hay varios enfoques uno podría tomar. Una opción es usar una comando llamada la FAMILIA con columnas llamadas ID, NOMBRE, MOELR_ID, y FAELR_ID, donde cada fila almacena nombre de una persona, Número de identificación único, y los valores de ID para sus padres.

Page 282: curso_sql_certificacion

Cuando dos tablas son afiliadas, cada fila de la comando de la fuente es sujetada a la condición de juntura con filas de la comando objetivo. Si la condición evalúa al verdadero, entonces la fila afiliada, consistiendo en columnas de ambas tablas, es devuelta.

Cuando las columnas de juntura provienen de la misma comando, se requiere una autojuntura. Conceptualmente, la comando de la fuente es duplicada para crear la comando objetivo. La autojuntura trabaja como una juntura regular entre estas tablas. Note que, internamente, el Oracle no hace

332 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

duplique la comando y esta descripción es simplemente proporcionada para explicar el concepto de la autoconexión. Considere las cuatro preguntas siguientes:

La consulta 1: seleccione id, nombre, faelr_id de la familia; la Consulta 2: seleccione el nombre de la familia donde id=&faelr_id; la Consulta 3: seleccione al papá f1.name, f2.name Niño de la familia f1 familia de juntura f2 en (f1.id=f2.faelr_id)

Para identificar al padre de una persona en la comando de FAMILIA, usted podría usar

la consulta 1 para ponerse ID de aquella persona, NOMBRE, y valor de FAELR_ID. En la consulta 2, el valor de FAELR_ID obtenido de la primera pregunta puede ser substituido para obtener el valor de NOMBRE del padre. Note que amba información de la fuente de consultas 1 y 2 de la comando de FAMILIA.

La consulta 3 realiza una autojuntura con la cláusula JOINON por aliasing la comando de FAMILIA como f1 y f2. El oracle trata éstos como tablas diferentes aunque ellos señalen a la misma comando física. El primer acontecimiento de la comando de FAMILIA, aliased como f1, es designado como la comando de la fuente, mientras el segundo acontecimiento, aliased como f2, es adjudicado como la comando objetivo. La condición de juntura en el EN la cláusula es de la fuente child_ de formato id=target.parent_id. La figura 7-9 muestra una muestra de datos de FAMILIA y demuestra una autojuntura de tres caminos a la misma comando.

EJERZA 7-3 Realización de una Autojuntura

Hay una relación jerárquica entre EMPLOYEES y sus gerentes. Ya que cada fila en la comando de EMPLOYEES la columna MANAGER_ID almacena el EMPLOYEE_ID del gerente de cada empleado. Usando una autojuntura en la comando de EMPLOYEES, se requiere que usted recupere LAST_NAME del empleado, EMPLOYEE_ID, LAST_NAME del gerente, y DEPARTMENT_ID del empleado para las filas con valores DEPARMENT_ID de 10, 20, o 30. Alias la comando de EMPLOYEES como E y el segundo instancia de la comando de EMPLOYEES como M de Clase los resultados basados en la columna DEPARTMENT_ID.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula SENTENCIA es

Page 283: curso_sql_certificacion

SELECCIONE A EMPLEADO E.LAST_NAME, E.EMPLOYEE_ID, E.MANAGER_ID, M LAST_NAME DE GERENTE, E.DEPARTMENT_ID.

3. El DE la cláusula con comando de la fuente y alias es DE EMPLOYEES E.

Afíliese a una Comando a Sí Usando una

Autojuntura

333

FIGURA 7-9

Autojuntura

4. La cláusula JOINON con la comando objetivo de aliased es ACOMPAÑE A EMPLOYEES M EN

(E.MANAGER_ID=M.EMPLOYEE_ID). 5. El DONDE cláusula es DONDE E.DEPARTMENT_ID EN (10,20,30). 6. El PEDIDO POR

cláusula es PEDIDO POR E.DEPARTMENT_ID.

334 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Page 284: curso_sql_certificacion

7. La ejecución de esta select devuelve nueve filas que describen a los gerentes de cada uno empleado en estos DEPARTMENTS como mostrado en la ilustración siguiente:

OBJETIVO DE CERTIFICACIÓN 7.03

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas Externas

Equijoins emparejan filas entre dos tablas basadas en la igualdad de los datos de columna almacenado en cada comando. Nonequijoins confían en filas correspondientes entre tablas basadas en una condición de juntura que contiene una expresión de desigualdad. Las filas de comando objetivo sin la columna de juntura correspondiente en la comando de la fuente no se requieren por lo general. Cuando ellos son

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas

Externas

335

requerido, sin embargo, una juntura externa es usada para traerlos. Varias variaciones de

Page 285: curso_sql_certificacion

junturas externas pueden ser usadas según si los datos de columna de juntura faltan en la fuente o tablas objetivo o ambos. Estas técnicas de juntura externas son descritas en los temas siguientes:

■ Interior contra junturas externas ■ junturas externas Izquierdas ■ junturas externas Correctas ■ junturas externas Llenas

Interior contra Junturas Externas Cuando equijoins y nonequijoins son realizados, filas de la fuente y objetivo las tablas son emparejadas usando una condición de juntura formulada con operadores de desigualdad e igualdad, respectivamente. Éstos se mencionan como junturas interiores. Una juntura externa es realizada cuando las filas, que no son recuperadas por una juntura interior, son devueltas.

Dos tablas a veces comparten la relación de niño paternal o un detalle del maestro. En el esquema de HORA de muestra hay varios pares de tablas con tal relación. Un par es tablas de EMPLOYEES y los DEPARTMENTS. La comando de DEPARTMENTS almacena una lista de maestro de valores de DEPARTMENT_ID y DEPARTMENT_NAME. Cada los EMPLOYEES registran hace reprimir una columna DEPARTMENT_ID a ser un valor que existe en la comando de DEPARTMENTS o nulo. Esto lleva a uno de los tres guiones siguientes. El cuarto guión podría ocurrir si la coacción entre las tablas fuera borrada.

1. Una fila de empleado tiene un valor de DEPARTMENT_ID que empareja una fila en el

Comando de DEPARTMENTS. 2. Una fila de empleado tiene un valor nulo en su columna DEPARTMENT_ID. 3. Hay filas en la comando de DEPARTMENTS con DEPARTMENT_ID

los valores que no son almacenados en ningún archivo de empleado. 4. Una fila de empleado tiene un valor de DEPARTMENT_ID que no es

presentado en el Comando de DEPARTMENTS.

El primer guión describe una juntura interior natural entre las dos tablas. Los segundos y terceros guiones causan muchos problemas. La conexión a los EMPLOYEES y tablas de DEPARTMENTS causa filas de empleado excluidas. Una juntura externa puede ser usada para incluir estas filas quedadas huérfanas en el SET de resultados. El cuarto guión debería ocurrir raramente en una base de datos bien diseñada, porque las coacciones de clave foránea prevendrían la introducción de archivos de niño sin valores paternales. Ya que esta fila será excluida por una juntura interior, puede ser recuperada usando una juntura externa.

336 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Una juntura externa izquierda entre la fuente y tablas objetivo devuelve los resultados de un la juntura interior así como las filas de la comando de la fuente excluida por aquella juntura interior. Una juntura externa correcta entre la fuente y tablas objetivo

Page 286: curso_sql_certificacion

devuelve los resultados de una juntura interior así como filas de la comando objetivo excluida por aquella juntura interior. Si una juntura devuelve los resultados de una juntura interior así como filas de ambos la fuente y tablas objetivo excluidas por aquella juntura interior, entonces una juntura externa llena ha sido realizada.

Junturas Externas izquierdas

El formato de la sintaxis para la cláusula de JUNTURA EXTERNA IZQUIERDA es

como siga:

SELECCIONE table1.column, table2.column DE table1 DEJÓ LA JUNTURA EXTERNA table2 EN (table1.column = table2.column); Una juntura externa izquierda realiza una juntura interior de table1 y table2 basado en el

condición especificada después el EN palabra clave. Cualquier fila de la comando a la izquierda de la palabra clave de JUNTURA excluida para no realizar la condición de juntura también es devuelta. Considere las dos preguntas siguientes:

La consulta 1: seleccione e.employee_id, e.department_id EMP_DEPT_ID, d.department_id DEPT_DEPT_ID, d.department_name de DEPARTMENTS el d abandonó a EMPLOYEES de juntura externos e en (d. DEPARTMENT_ID=e. DEPARTMENT_ID) donde d.department_name como 'P %' la Consulta 2: seleccione e.employee_id, e.department_id EMP_DEPT_ID, d.department_id DEPT_DEPT_ID, d.department_name de DEPARTMENTS los d acompañan a EMPLOYEES e en (d. DEPARTMENT_ID=e. DEPARTMENT_ID) donde d.department_name como 'P %'

Las consultas 1 y 2 son idénticas excepto las cláusulas de juntura, que tienen las

palabras claves JUNTURA EXTERNA IZQUIERDA y JUNTURA, respectivamente. La consulta 2 realiza una juntura interior y siete filas son devueltas. Estas filas comparten valores de DEPARTMENT_ID idénticos en ambas tablas. La consulta 1 devuelve las mismas siete filas y una fila adicional. Esta fila suplementaria es obtenida de la comando a la izquierda de la palabra clave de JUNTURA, que es la comando de DEPARTMENTS. Es la fila que contiene detalles del departamento de Nómina. La juntura interior no incluye esta fila ya que ningunos EMPLOYEES son adjudicados actualmente al departamento.

Una juntura externa izquierda es mostrada en la Figura 7-10. La juntura interior produce 27 filas con emparejar valores de LOCATION_ID en ambas tablas. Hay 43 filas en total, que implica que 16 filas fueron recuperadas de la comando de LOCATIONS, que está en el

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas

Externas

337

FIGURA 7-10

Juntura externa izquierda

Page 287: curso_sql_certificacion

dejado de la palabra clave de JUNTURA. Ninguna de las filas de la comando de DEPARTMENTS contiene cualquier de estos 16 valores de LOCATION_ID.

Junturas Externas correctas

El formato de la sintaxis para la cláusula de JUNTURA EXTERNA

CORRECTA es como sigue:

SELECCIONE table1.column, table2.column DE JUNTURA EXTERNA CORRECTA table1 table2 EN (table1.column = table2.column);

338 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Una juntura externa correcta realiza una juntura interior de table1 y table2 basado en la juntura condición especificada después el EN palabra clave. Las filas de la comando a la derecha de la palabra clave de JUNTURA, excluida por la condición de juntura, también son devueltas. Considere la pregunta siguiente:

seleccione e.last_name, d.department_name de DEPARTMENTS d EMPLOYEES

Page 288: curso_sql_certificacion

de juntura externos correctos e en (e.department_id=d.department_id) donde e.last_name como 'G %';

La juntura interior produce siete filas que contienen detalles para los EMPLOYEES

con Los valores de LAST_NAME que comienzan con G. La comando de EMPLOYEES es a la derecha de la palabra clave de JUNTURA. Cualquier archivo de empleado que no se conforme con la condición de juntura es incluido, a condición de que ellos se conformen con el DONDE condición de cláusula. Además, la juntura externa correcta trae un registro de EMPLEADO con un LAST_NAME de Subvención. Este registro actualmente tiene un valor de DEPARTMENT_ID nulo. La juntura interior excluye el registro ya que ningún DEPARTMENT_ID es adjudicado a este empleado.

Una juntura externa correcta entre el JOB_HISTORY y tablas de EMPLOYEES es mostrada en la Figura 7-11. La comando de EMPLOYEES es a la derecha de la palabra clave de JUNTURA. La palabra clave DISTINTA elimina combinaciones duplicadas de valores de JOB_ID de las tablas. Los resultados muestran los JOBS que los EMPLOYEES se han marchado históricamente. Los JOBS que ningunos EMPLOYEES han dejado también son devueltos.

Hay tres tipos de formatos de juntura externos. Cada uno de ellos realiza una juntura interior antes incluso filas la condición de juntura excluida. Si una juntura externa izquierda es realizada entonces filas excluidas por el

Junturas Externas llenas

la juntura interior, a la izquierda de la palabra clave de JUNTURA, también es devuelta. Si una juntura externa correcta es realizada entonces las filas excluidas por la juntura interior, a la derecha de la palabra clave de JUNTURA, son devueltas también.

El formato de la sintaxis para la cláusula de JUNTURA EXTERNA LLENA es

como sigue:

SELECCIONE table1.column, table2.column DE JUNTURA EXTERNA LLENA table1 table2 EN (table1.column = table2.column);

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas

Externas

339

FIGURA 7-11

Juntura externa correcta

Page 289: curso_sql_certificacion

Una juntura externa llena devuelve los resultados combinados de una juntura externa derecha e izquierda. Una juntura interior de table1 y table2 es realizada antes de que las filas excluidas por la condición de juntura de ambas tablas sean fusionadas en el SET de resultados.

La sintaxis de juntura de Oracle tradicional no apoya una juntura externa llena, que es típicamente realizada combinando los resultados de una juntura externa derecha e izquierda usando al operador de SET de UNIÓN descrito en el Capítulo 9. Considere la juntura externa llena mostrada en la Figura 7-12. El DONDE la cláusula que restringe los resultados a filas con valores de DEPARTMENT_ID nulos muestra las filas huérfanas en ambas tablas. Hay un registro en la comando de EMPLOYEES que no tiene ningunos valores de DEPARTMENT_ID, y hay 16 DEPARTMENTS a los cuales ningunos EMPLOYEES pertenecen.

340 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

FIGURA 7-12

Juntura externa llena

Page 290: curso_sql_certificacion

EJERZA 7-4 Realización de una Juntura externa La comando de DEPARTMENTS contiene detalles de todos los DEPARTMENTS en la

organización. Se requiere que usted recupere el DEPARTMENT_NAME y valores de DEPARTMENT_ID para aquellos DEPARTMENTS a los cuales ningunos EMPLOYEES son adjudicados actualmente.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La cláusula SENTENCIA es

SELECCIONE D.DEPARTMENT_NAME, D.DEPARTMENT_ID. Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas

Externas

GUIÓN & SOLUCIÓN 341

Los datos en dos tablas a las cuales usted desea afiliarse están relacionados, pero no comparten ninguna columna idénticamente llamada. ¿Es posible afiliarse a tablas usando columnas que no comparten el mismo nombre? Usted desea dividir al personal en cuatro grupos nombrados por las cuatro REGIONS en la comando de REGIONS. ¿Es posible obtener una lista de EMPLOYEE_ID, LAST_NAME, y valores de REGION_NAME para cada empleado afiliándose al EMPLOYEE_ID y columnas REGION_ID en una manera de retorno al punto de origen?

Se requiere que usted recupere una lista de NOMBRE de DEPARTMENT_ y valores de LAST_NAME para todos los DEPARTMENTS, incluso aquellos que actualmente no tienen ningunos EMPLOYEES adjudicados a ellos. En tales instancias la cuerda 'Ningunos EMPLOYEES' debería ser mostrada como el valor de columna de NOMBRE de LAST_. ¿Puede esto ser hecho usando junturas?

Page 291: curso_sql_certificacion

Sí. La cláusula JOINON es proporcionada para este fin. Esto proporciona una solución flexible y genérica de tablas que se unen basadas en nombres de columna no idénticos.

Sí. Los REGION_ID valoran variedades de 1 a 4. La adición 1 al resto de EMPLOYEE_ID dividido en 4 crea un valor en la variedad 1 a 4. La asignación de retorno al punto de origen de EMPLOYEES puede ser hecha como sigue: SELECCIONE LAST_NAME, EMPLOYEE_ID, REGION_NAME, DE EMPLOYEES SE AFILIAN A REGIONS EN (MOD (EMPLOYEE_ID, 4) +1 = REGION_ID) Sí. Según cual lado de la palabra clave de JUNTURA la comando de DEPARTMENTS es colocada, una juntura externa izquierda o correcta puede ser usada, ya que esto es la comando de donde las filas huérfanas provienen. La pregunta siguiente satisface la solicitud: SELECCIONE DEPARTMENT_NAME, NVL (NOMBRE de LAST_, 'Ningunos EMPLOYEES) del DERECHO DE EMPLOYEES DEPARTMENTS DE JUNTURA EXTERNOS USANDO (DEPARTMENT_ID)

3. El DE la cláusula con comando de la fuente y alias es DE LAS OFICINAS D. 4. La cláusula de JUNTURA

EXTERNA IZQUIERDA con comando objetivo de aliased es EMPLOYEES DE JUNTURA EXTERNOS ABANDONADOS E EN E.DEPARTMENT_ID=D.DEPARTMENT_ID.

5. El DONDE la cláusula es DONDE E.DEPARTMENT_ID ES NULO.

342 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

6. La ejecución de esta select devuelve dieciséis filas que describen los DEPARTMENTS a que ningunos EMPLOYEES son adjudicados actualmente como mostrado en la ilustración siguiente:

OBJETIVO DE CERTIFICACIÓN 7.04

Page 292: curso_sql_certificacion

Genere un producto Cartesiano de Dos o MoreTables Un producto Cartesiano de dos tablas puede ser conceptuado como afiliándose a cada

fila del comando de la fuente con cada fila en la comando objetivo. El número de filas en el SET de resultado creado por un producto Cartesiano es igual al número de filas en la comando de la fuente multiplicada por el número de filas en la comando objetivo. Los productos cartesianos pueden ser formados intencionadamente usando el ANSI SQL:1999 sintaxis de juntura enfadada. Esta técnica es descrita en la siguiente sección.

La creación de productos Cartesianos Usando Junturas Enfadadas El producto cartesiano es un término matemático. Esto se refiere al SET de datos

creados por la fusión de las filas de dos o más tablas juntos. La juntura enfadada es la sintaxis usada

Genere un producto Cartesiano de Dos o más Tablas

343

crear un producto Cartesiano afiliándose a tablas múltiples. Ambos términos a menudo son usados sinónimamente. El formato de la sintaxis para la cláusula de JUNTURA ENFADADA es como sigue:

SELECCIONE table1.column, table2.column DE LA CRUZ de table1 SE AFILIAN a table2;

Es importante observar que ninguna condición de juntura es especificada usando el EN o USANDO palabras claves. Un producto Cartesiano libremente asocia las filas de table1 con cada fila en table2. Las condiciones que limitan los resultados son permitidas en la forma de DONDE restricciones de cláusula. Si table1 y table2 contienen x y el número y de filas, respectivamente, el producto Cartesiano contendrá tiempos x y el número de filas. Los resultados de una juntura enfadada pueden ser usados para identificar filas huérfanas o generar un conjunto de datos grande para el uso en pruebas de aplicación. Considere las preguntas siguientes:

La consulta 1: seleccione * de job_history de juntura de cruz de JOBS; la Consulta 2: seleccione * de JOBS j cruz se afilian a job_history jh donde j.job_id ='AD_PRES';

La consulta 1 toma las 19 filas y 4 columnas de la comando de JOBS y las 10 filas y 5 columnas de la comando JOB_HISTORY y generan un SET grande de 190 archivos con 9 columnas. SQL*Plus presenta cualquier columna idénticamente llamada como títulos. El Developer de SQL añade subrayar y número a cada nombre de columna compartido y lo usa como el título. La columna JOB_ID es común tanto a los JOBS como a tablas JOB_HISTORY. Los títulos en el Developer SQL son marcados JOB_ID y

JOB_ID_1, respectivamente. La consulta 2 genera el mismo producto Cartesiano que el primer, pero las 190 filas son reprimidas por el DONDE cláusula

Usando la cruz

Page 293: curso_sql_certificacion

La figura 7-13 muestra que una juntura enfadada entre la sintaxis de juntura, un producto Cartesiano es

las REGIONS y tablas de COUNTRIES. intencionadamente generado. Involuntario

Hay 4 filas en REGIONS y 25 filas los productos Cartesianos son creados cuando

en COUNTRIES. Desde el DONDE la cláusula t h e re un re i n s u f fi c i e n t j o i n c o n d i t i o n s i n

limita la comando de REGIONS con 2 de 4 filas, un s t un t e m e n t. J o i n s t h un t s p e c i f y f ew e r

el producto Cartesiano produce 50 (252) que n-1 se afilian a condiciones uniéndose archivos. Los resultados son clasificados por comando alfabético, N tablas o que especifican la juntura inválida primero en el REGION_NAME y luego en las condiciones puede crear por descuido COUNTRY_NAME. El primer registro tiene productos Cartesianos. Una juntura natural pura el par de valores, Asia y Argentina. Cuando entre dos tablas que comparten no idénticamente los cambios de REGION_NAME, las columnas llamadas del primer registro causan una juntura Cartesiano tiene el par de valores, África y Argentina. ya que dos tablas son afiliadas, pero menos que Note que los valores de COUNTRY_NAME son una condición está disponible. repetido para cada REGION_NAME. la condición y sólo 10 filas son devueltas.

344 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

FIGURA 7-13

La juntura enfadada

Page 294: curso_sql_certificacion

EJERZA 7-5 Realización de una Juntura enfadada Se requiere que usted obtenga el número de filas en los EMPLOYEES y La comando de DEPARTMENTS así como el número de archivos que serían creados

Genere un producto Cartesiano de Dos o más Tablas

345

por un conducto pro Cartesiano de estas dos tablas. Confirme sus resultados contando explícitamente y multiplicando el número de filas presentes en cada una de estas tablas.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La cláusula SENTENCIA para encontrar el número de filas en el producto Cartesiano es

SELECCIONE AL CONDE (*). 3. El DE la cláusula es

DE EMPLOYEES. 4. El producto Cartesiano es realizado usando

CRÚCESE SE AFILIAN A DEPARTMENTS. 5. Los cargos explícitos por las filas presentes en las tablas de la fuente son realizados usando

SELECCIONE AL CONDE (*) DE EMPLOYEES; SELECCIONE AL CONDE (*) DE DEPARTMENTS;

6. La multiplicación explícita de los valores que resultan de las preguntas anteriores puede sea realizado preguntando la comando DUAL.

7. La ejecución de estas select revela que hay 107 archivos en el Comando de EMPLOYEES, 27 archivos en la comando de DEPARTMENTS, y 2889 archivos en el conducto pro Cartesiano de estos dos conjuntos de datos como mostrado en la ilustración siguiente:

346 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

DENTRO DEL EXAMEN

La conexión es un principio relacional fundamental. Los objetivos de certificación en este capítulo son examinados usando guiones prácticos en los cuales dos tablas son afiliadas. Se requiere que usted prediga el número de filas devueltas por una pregunta de juntura o tase si es syntacti-cally correcto o no. Las cláusulas de juntura naturales incluyen la JUNTURA NATURAL, JOINUSING, y JOINON.

Recuerde las reglas simples siguientes. Las palabras claves NATURALES, UTILIZACIÓN, y EN son mutuamente exclusivas. Ellos no pueden ser usados juntos en la misma cláusula de juntura. La juntura NATURAL pura no toma ningunas condiciones de juntura. La cláusula JOINUSING requiere unquali-fied referencias de columna en condiciones de juntura, que deben parecer entre paréntesis después de la palabra clave de UTILIZACIÓN.

Page 295: curso_sql_certificacion

Las autojunturas a menudo son usadas para averiguar datos jerárquicos almacenados en columnas separadas en la misma comando. Es una juntura poco común y poco hincapié es hecho en pruebas de su conocimiento de autoparticipa en el examen. Las junturas externas, sin embargo, forman una parte significativa del contenido de examen. Asegure que usted tiene un entendimiento sólido de junturas EXTERNAS IZQUIERDAS, CORRECTAS, y LLENAS.

Los productos cartesianos pueden ser creados inad-vertently o intencionadamente utilización de la cláusula de JUNTURA ENFADADA. Un error con frecuencia hecho en las etapas tempranas del aprendizaje sobre junturas es especificar menos condiciones de juntura que son neces-sary afiliándose a tablas múltiples. Esto lleva a junturas Cartesianos casuales y es a veces probado en los exámenes. Recuerde que uniéndose N tablas, al menos n-1 condiciones de juntura se requieren evitar una juntura Cartesiano.

RESUMEN DE CERTIFICACIÓN Los datos almacenados en tablas separadas pueden tener que ver el uno con el otro

usando diversos tipos de junturas. Las junturas permiten que datos sean almacenados en una manera relacional. Esto previene la necesidad de copias múltiples de los mismos datos a través de tablas múltiples.

Equijoins y nonequijoins se mencionan como junturas interiores. Ellos asocian filas de tablas múltiples que se conforman para afiliarse a condiciones y son especificadas usando a operadores de desigualdad o igualdad. Las filas que no se conforman con estas condiciones de juntura, que son generalmente excluidas por junturas interiores, pueden ser recuperadas con junturas externas. Las junturas externas izquierdas, correctas, y llenas facilitan la recuperación de filas huérfanas.

Hablan de la sintaxis de juntura SQL:1999-dócil ANSI detalladamente, y tres formas de la juntura natural son exploradas. Cada forma tiene un objetivo, y las ventajas y arriesga asociado con ellos se consideran.

Resumen de certificación

347

Las junturas asocian columnas de tablas múltiples que pueden compartir el mismo nombre. La nota de punto usa un método de calificar a columnas para quitarles la ambigüedad. Es acompañado por la comando aliasing, que no es estrictamente esencial, pero ayuda a mucho formulando junturas entre tablas con nombres larguísimos.

La recuperación de datos jerárquicos almacenados en una comando sola usando autojunturas se considera. De N-camino las junturas permiten que más de dos tablas sean afiliadas, y hablan de esta opción generalizada. Finalmente, las junturas enfadadas y los desafíos únicos asociados con ellos son examinados.

La conexión es uno de los pilares fundamentales de la teoría relacional y es crítica a su explotación acertada del potencial lleno esto ofertas de SQL.

348 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Page 296: curso_sql_certificacion

✓TALADRADORA DE DOS MINUTOS

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using Equijoins y Nonequijoins

❑ Equijoining ocurre cuando una pregunta trae valores de columna de tablas múltiples en que las filas realizan una condición de juntura basada en la igualdad.

❑ Una juntura natural pura es realizado usando la sintaxis de JUNTURA NATURAL cuando el la fuente y las tablas objetivo son implícitamente equijoined usando todas las columnas idénticamente llamadas.

❑ La sintaxis JOINUSING permite que una juntura natural sea formada en el específico columnas con nombres compartidos.

❑ nota de Dot se refiere a la calificación a una columna prefijándolo con su nombre de tabla y un punto o símbolo de período. Esto designa la comando de la cual una columna proviene y lo diferencia de columnas idénticamente llamadas de otras tablas.

❑ La cláusula JOINON permite la especificación explícita de columnas de juntura sin tener en cuenta sus nombres de columna. Esto proporciona un formato de conexión

flexible. Los � el EN, UTILIZACIÓN, y palabras claves NATURALES son mutuamente exclusivos y

por lo tanto no puede aparecer juntos en una cláusula de juntura. ❑ Un nonequijoin es realizado cuando los valores en las columnas de juntura realizan la juntura

condición basada en una expresión de desigualdad.

Afíliese a una Comando a Sí Usando una Autojuntura ❑ Una autojuntura se requiere cuando las columnas de juntura provienen de la misma comando.

Conceptualmente, la comando de la fuente es duplicada y una comando objetivo es creada. La autojuntura entonces trabaja como una juntura regular entre dos tablas distintas.

❑ Almacenaje de datos jerárquicos en una comando relacional requiere mínimo de dos columnas por fila. Una columna almacena un identificador del registro paternal de la fila y las segundas tiendas el identificador de la fila.

Vista DataThat no Encuentra una Condición de Juntura Usando Junturas Externas

❑ Cuando equijoins y nonequijoins son realizados, filas de la fuente y las tablas objetivo son emparejadas. Éstos se mencionan como junturas interiores.

Taladradora de dos minutos

349

Page 297: curso_sql_certificacion

❑ Una juntura externa es realizado cuando las filas, que no son recuperadas por un interior únase, son incluidos para la recuperación.

❑ Una juntura externa izquierda entre la fuente y tablas objetivo devuelve los resultados de un juntura interior y las filas ausentes esto excluyó de la comando de la fuente.

❑ Una juntura externa correcta entre la fuente y tablas objetivo devuelve los resultados de un juntura interior y las filas ausentes esto excluyó de la comando objetivo.

❑ Una juntura externa llena devuelve los resultados combinados de una juntura externa izquierda y derecho externo

juntura.

Genere un producto Cartesiano de Dos o más Tablas ❑ Un producto Cartesiano es a veces llamado una juntura enfadada. Es un matemático

el término que se refiere al SET de datos creados fusionando las filas de dos o más tablas. ❑ El cargo por las filas devueltas de un producto Cartesiano es igual al num-

el ber de filas en la comando de la fuente se multiplicó por el número de filas en la comando objetivo.

❑ Junturas que especifican a menos que condiciones de juntura de n-1 uniéndose N tablas, o esto especifica condiciones de juntura inválidas, por descuido crea productos Cartesianos.

350 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

MÍ PRUEBA Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using Equijoins y Nonequijoins

1. Los EMPLOYEES y las tablas de DEPARTMENTS tienen dos columnas idénticamente llamadas: DEPARTMENT_ID y MANAGER_ID. ¿Cuál de estas select se afilia a estas tablas basadas sólo en valores de DEPARTMENT_ID comunes? (Elija todo que se aplican.) A. SELECCIONE * DE EMPLOYEES DEPARTMENTS DE JUNTURA NATURALES; B. SELECCIONE * DE EMPLOYEES E DEPARTMENTS DE JUNTURA NATURALES D EN

E.DEPARTMENT_ID=D.DEPARTMENT_ID; C. SELECCIONE * DE EMPLOYEES UTILIZACIÓN DE DEPARTMENTS DE JUNTURA

NATURAL (DEPARTMENT_ID);

D. Ninguno de los susodichos 2. Los EMPLOYEES y las tablas de DEPARTMENTS tienen dos columnas idénticamente llamadas:

DEPARTMENT_ID y MANAGER_ID. ¿Qué select se afilian a estas tablas basadas en ambos valores de columna? (Elija todo que se aplican.) A. SELECCIONE * DE EMPLOYEES DEPARTMENTS DE JUNTURA NATURALES; B. SELECCIONE * DE LA UTILIZACIÓN DE DEPARTMENTS DE JUNTURA DE EMPLOYEES (DEPARTMENT_

Page 298: curso_sql_certificacion

ID, MANAGER_ID); C. SELECCIONE * DE EMPLOYEES E SE AFILIAN A DEPARTMENTS D EN

E.DEPARTMENT_ ID=D.DEPARTMENT_ID Y E.MANAGER_ID=D.MANAGER_ID;

D. Ninguno de los susodichos 3. ¿Qué juntura es realizada por la pregunta siguiente?

SELECCIONE E.JOB_ID, J.JOB_ID DE EMPLOYEES E SE AFILIAN A JOBS J EN (E.SALARY <J.MAX_SALARY); (Elija la mejor respuesta.) A. Equijoin B. Nonequijoin C. Juntura enfadada D. Juntura externa

4. ¿Cuáles de las select siguientes es sintácticamente correcta? (Elija todo que se aplican.) A. SELECCIONE * DE EMPLOYEES E SE AFILIAN A DEPARTMENTS D USANDO (DEPARTMENT_ID); B. SELECCIONE * DE DEPARTMENTS DE JUNTURA DE EMPLOYEES D USANDO (D.DEPARTMENT_ID);

Mí Prueba

351

C. SELECCIONE D.DEPARTMENT_ID DE DEPARTMENTS DE JUNTURA DE EMPLOYEES D UTILIZACIÓN

(DEPARTMENT_ID); D. Ninguno de los susodichos

5. ¿Cuáles de las select siguientes es sintácticamente correcta? (Elija todo que se aplican.) A. SELECCIONE E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, E.JOB_ID CURRENT_JOB DE

LOS JOB_HISTORY J CRUZ ACOMPAÑAN A EMPLOYEES E EN (J.START_DATE=E.HIRE_DATE); B. SELECCIONE E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, E.JOB_ID CURRENT_JOB

DE JOB_HISTORY LOS J ACOMPAÑAN A EMPLOYEES E EN (J.START_DATE=E.HIRE_DATE); C. SELECCIONE E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, E.JOB_ID CURRENT_JOB

DE JOB_HISTORY J EMPLOYEES DE JUNTURA EXTERNOS E EN (J.START_DATE=E. HIRE_DATE);

D. Ninguno de los susodichos 6. Elija una select correcta en cuanto a la pregunta siguiente:

SELECCIONE * DE EMPLOYEES E SE AFILIAN A DEPARTMENTS D EN (D.DEPARTMENT_ID=E.DEPARTMENT_ID) LOCATIONS DE JUNTURA L EN (L.LOCATION_ID =D.LOCATION_ID); no permiten a A. Joining tres tablas. B. Un producto Cartesiano es generado. C. La cláusula JOINON puede ser usada para junturas entre tablas múltiples. D. Ninguno de los susodichos

Afíliese a una Comando a Sí Usando una Autojuntura

7. ¿Cuántas filas son devueltas después de ejecutar la select siguiente? SELECCIONE * DE REGIONS REGIONS DE JUNTURA de R1 R2 EN (R1. REGION_ID=LENGTH (R2. REGION_NAME)/2); La comando de REGIONS contiene los datos de fila siguientes. (Elija la mejor respuesta.)

REGION_ID

1234

REGION_NAME

Page 299: curso_sql_certificacion

Europa Américas Asia Oriente Medio y África

A. 2B. 3C. 4D.

Ninguno de los susodichos

352 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas Externas

8. Elija una select correcta en cuanto a la pregunta siguiente. SELECCIONE C.COUNTRY_ID DE LOCATIONS L COUNTRIES DE JUNTURA EXTERNOS CORRECTOS C EN (L.COUNTRY_ID=C.COUNTRY_ID) DONDE L.COUNTRY_ID es A nulo. Ningunas filas en la comando de LOCATIONS hacen devolver los valores de COUNTRY_ID. B. Ningunas filas en la comando de COUNTRIES hacen devolver los valores de COUNTRY_ID. C. Las filas volvieron representan los valores de COUNTRY_ID para todas las filas en las LOCATIONS

comando. D. Ninguno de los susodichos

9. ¿Cuáles de las select siguientes es sintácticamente correcta? (Elija todo que se aplican.) A. SELECCIONE JH.JOB_ID DE JOB_HISTORY JH JOBS DE JUNTURA EXTERNOS

CORRECTOS J EN JH.JOB_ID=J.JOB_ID

B. SELECCIONE JOB_ID DE JOB_HISTORY JH JOBS DE JUNTURA EXTERNOS CORRECTOS J EN

(JH.JOB_ID=J.JOB_ID) C. SELECCIONE JOB_HISTORY.JOB_ID DE JOBS DE JUNTURA EXTERNOS

JOB_HISTORY EN JOB_HISTORY.JOB_ID=JOBS.JOB_ID

D. Ninguno de los susodichos

Genere un producto Cartesiano de Dos o más Tablas

10. Si la comando de REGIONS, que contiene 4 filas, es enfadada afiliado a la comando de

COUNTRIES, que ¿contiene 25 filas, cuántas filas aparecen en el SET de resultados finales? (Elija la mejor respuesta.) A. 100 filas de filas C. 25 de filas B. 4 D. Ninguno de los susodichos

PREGUNTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

Se requiere que usted produzca un informe de clientes que compraron productos con precios de catálogo de más de 1000$. El informe debe contener al cliente en general llama y los nombres de conducto pro y sus precios de catálogo. La información de cliente es almacenada en la comando de CLIENTES, que tiene la columna CUSTOMER_ID como su clave primaria. El nombre del producto y los detalles de precio de catálogo son almacenados en

Pregunta de laboratorio

Page 300: curso_sql_certificacion

353

la comando PRODUCT_INFORMATION con la columna PRODUCT_ID como su clave primaria. Otras dos tablas relacionadas pueden asistir en la generación del informe requerido: el O RDERS comando, que almacena el CUSTOMER_ID y O RDER_ID información, y el O RDER_ITEMS comando, que almacena los valores de PRODUCT_ID asociados con cada O RDER_ID.

Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución puesta en una lista.

354 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

MÍ PRUEBAN RESPUESTAS

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using Equijoins y Nonequijoins

1. ® D. Las preguntas en B y C incorrectamente contienen la palabra clave NATURAL. Si esto es borrado, ✓

ellos se afiliarán a los DEPARTMENTS y tablas de EMPLOYEES basadas en la columna

DEPARTMENT_ID. Los ® A, B, y C son incorrectos. Realizar una juntura natural pura que implícitamente se afilia a dos ˚las tablas en todas las columnas con nombres idénticos que, en este instancia, son DEPARTMENT_ID y MANAGER_ID.

2. ® A, B, y C. Estas cláusulas demuestran técnicas diferentes para afiliarse a las tablas en ambos el ✓

DEPARTMENT_ID y columnas MANAGER_ID. ® el D es incorrecto. ˚

3. ® B. La condición de juntura es una expresión basada en el menos que el operador de desigualdad. Por lo tanto, ✓

esta juntura es un nonequijoin. Los ® A, C, y D son incorrectos. Ser correcto si el operador en la condición de juntura ˚la expresión era un operador de igualdad. Las palabras claves de JUNTURA ENFADADAS o la ausencia de una condición de juntura causarían C ser verdadero. El D sería verdad si una de la cláusula de JUNTURA EXTERNA fuera usada en vez de la cláusula JOINON.

4. ® A. Esta select demuestra el uso correcto de la cláusula JOINUSING. ✓Los ® B, C, y D son incorrectos. El B es incorrecto ya que los nombres de columna sólo no calificados son permitidos ˚en los soportes después de la palabra clave de UTILIZACIÓN. El C es incorrecto porque la columna entre paréntesis después de la palabra clave de UTILIZACIÓN no puede ser referida con un calificador en la cláusula SENTENCIA.

5. ® el B demuestra el uso correcto de la cláusula JOINON. ✓Los ® A, C, y D son incorrectos. A es incorrecto ya que la cláusula de JUNTURA ENFADADA no puede contener ˚

Page 301: curso_sql_certificacion

EL EN palabra clave. El C es incorrecto ya que las palabras claves de JUNTURA EXTERNAS deben ser precedidas por la IZQUIERDA, DERECHO, o palabra clave LLENA.

6. ® C. La cláusula JOINON y las otras cláusulas de juntura pueden ser todos usadas para junturas entre ✓ múltiple

tablas. El JOINON y las cláusulas JOINUSING son mejor satisfechos para el N-camino junturas de comando.

los ® A, B, y D son incorrectos. A es falso ya que usted puede afiliarse a tantas tablas como usted

desea. Un ˚El producto cartesiano no es creado ya que hay dos condiciones de juntura y tres tablas.

Afíliese a una Comando a Sí Usando una Autojuntura 7. ® B. Tres filas son devueltas. Para la fila con un valor REGION_ID de 2, el REGION_NAME ✓

es Asia y mitad que la longitud del REGION_NAME también es 2. Por lo tanto esta fila es devuelta. Respuesta de laboratorio

La misma lógica causa las filas con valores REGION_ID de tres y cuatro y valores REGION_NAME de Europa y Américas devueltas. los ® A, C, y D son incorrectos. ˚

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas Externas

355 8. ® A. La juntura externa correcta trae las filas de COUNTRIES que la juntura interior entre el ✓

LAS LOCATIONS y las tablas de COUNTRIES han excluido. El DONDE la cláusula entonces

restringe los resultados eliminando los resultados de juntura interiores. Esto deja las filas de la

comando de COUNTRIES con la cual ningunos archivos de los archivos de comando de

LOCATIONS tienen que ver. Los ® B, C, y D son incorrectos. ˚

9. ® A. Esta select demuestra el uso correcto de la cláusula JOINON EXTERNA CORRECTA. ✓Los ® B, C, y D son incorrectos. La columna JOB_ID en la cláusula SENTENCIA en B no es calificada ˚y es por lo tanto ambiguo desde la comando de la cual esta columna viene no es especificado. El C usa una JUNTURA EXTERNA sin las palabras claves DEJADAS, DERECHO, o LLENO.

Genere un producto Cartesiano de Dos o más Tablas 10. ® A. La juntura enfadada asocia cada cuatro filas a partir de los tiempos de tabla 25 de REGIONS con el ✓

las filas de la comando de COUNTRIES que cede un SET de resultado que contiene 100 filas. Los ® B, C, y D son incorrectos. ˚

RESPUESTA DE LABORATORIO Usando al Developer de SQL o SQL*Plus, conecte al esquema OE, y complete las tareas siguientes. Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución siguiente puesta en una lista.

1. Comience al Developer SQL y conecte al esquema OE. 2. La lista SENTENCIA consiste en cuatro columnas de dos tablas, que tendrán que ver con cada uno

Page 302: curso_sql_certificacion

otra utilización de varias junturas. La cláusula SENTENCIA es CUST_FIRST_NAME escogido, CUST_LAST_NAME, PRODUCT_NAME, LIST_PRICE.

3. El DE la cláusula es DE CLIENTES.

4. El DONDE la cláusula es DONDE LIST_PRICE> 1000.

5. Las cláusulas de JUNTURA son interesantes desde el PRODUCT_INFORMATION y CLIENTES

tablas no directamente relacionadas. Ellos están relacionados por otras dos tablas.

356 Capítulo 7:

La pruebas de Datos de Tablas Múltiples

6. La comando de PEDIDOS debe ser afiliada primero a la comando de CLIENTES basada en el común

Valores de CUSTOMER_ID. La primera cláusula de juntura después el DE la cláusula de CLIENTES es PEDIDOS DE JUNTURA USANDO (CUSTOMER_ID).

7. Este SET debe ser afiliado entonces a la comando ORDER_ITEMS basada en valores de ORDER_ID comunes

ya que la comando ORDER_ITEMS puede conectar por último con la comando PRODUCT_INFORMATION. La segunda cláusula de juntura es la JUNTURA ORDER_ITEMS USANDO (ORDER_ID).

8. El eslabón perdido para unirse a la comando PRODUCT_INFORMATION basada en común Los valores de columna de PRODUCT_ID están disponibles ahora. La tercera cláusula de juntura es la JUNTURA PRODUCT_INFORMATION USANDO (PRODUCT_ID).

9. La ejecución de esta select devuelve el informe requerido como mostrado en la ilustración siguiente:

8La utilización de Subconsultas para Solucionar problemas

Page 303: curso_sql_certificacion

OBJETIVOS DE CERTIFICACIÓN

8.01 Defina Subconsultas

8.04 Escriba la Fila sola y la Fila múltiple

Subconsultas 8.02

Describa los Tipos de problemas

Que las Subconsultas Puedan Solucionar

✓Taladradora de dos minutos

8.03 Liste los Tipos en una lista de Subconsultas

Q&A Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

358 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

Los seis capítulos anteriores han tratado con la select SENTENCIA en detalles

Page 304: curso_sql_certificacion

considerables, pero en cada instancia la select SENTENCIA ha sido un comando solo, autónomo.

Este capítulo es el primero de dos que el espectáculo como dos o más comandos ESCOGIDOS pueden ser

combinado en una select. La primera técnica (cubierto en este capítulo) es el uso de subconsultas. Una subpregunta es una select SENTENCIA cuya salida está acostumbrado como introducido para otra select SENTENCIA (o en efecto para una select DML, como hecho en el Capítulo 10).El segunda técnica es el uso de operadores de SET, donde los resultados de varios comandos ESCOGIDOS son combinados en un SET de resultado solo.

OBJETIVO DE CERTIFICACIÓN 8.01

Defina Subconsultas Una subpregunta es una pregunta que es anidada dentro de un ESCOGIDO, INSERCIÓN,

ACTUALIZACIÓN, o BORRAR select o dentro de otra subpregunta. Una subpregunta puede devolver un SET de filas o sólo una fila a su pregunta paternal. Una subpregunta escalar es una pregunta que devuelve exactamente un valor: una fila sola, con una columna sola. Las subconsultas escalares pueden ser usadas en la mayor parte de sitios en una select SQL donde usted podría usar una expresión o un valor literal.

Los sitios en una pregunta donde una subpregunta puede ser usada son como sigue:

■ En la lista SENTENCIA usada para proyección de columna ■ En el DE cláusula ■ En el DONDE cláusula ■ En la cláusula que TIENE

Una subpregunta a menudo es referida como una pregunta interior, y la select dentro de la cual ocurre es llamada entonces la pregunta externa. No hay nada

Las subconsultas pueden ser anidadasincorrecto con esta terminología, salvo que esto mayo a una profundidad ilimitada en un DE cláusula implique que usted sólo puede tener dos niveles, interiores, pero a "sólo" 255 niveles en un DONDE y externo. De hecho, la realización de Oracle de cláusula. Ellos pueden ser usados en el ESCOGIDO las subconsultas no imponen ninguna lista de límites práctica y en el DE, DONDE, y al nivel de anidar: la profundidad de anidar TENIENDO cláusulas de una pregunta. permitido en el DE cláusula de una select

es ilimitado, y que en el DONDE la cláusula es hasta 255.

Defina Subconsultas

359

Page 305: curso_sql_certificacion

Una subpregunta puede tener cualquiera de las cláusulas habituales para selección y proyección. Lo siguiente es cláusulas requeridas:

■ Una lista SENTENCIA ■ UN DE cláusula

Lo siguiente es cláusulas opcionales:

■ DONDE GRUPO ■ POR ■ TENER

La subpregunta (o las subconsultas) dentro de una select deben ser ejecutadas antes el

la pregunta paternal que lo llama, a fin de que los resultados de la subpregunta puedan ser pasados al padre.

EJERZA 8-1 Tipos de Subconsultas

En este ejercicio, usted escribirá el código que demuestra los sitios donde las subconsultas pueden ser usadas. Use SQL*Plus o Developer SQL. Todas las preguntas deberían ser ejecutadas cuando conectado al esquema de HORA.

1. Inicio de sesión a su base de datos como HORA de usuario 2. Escriba una pregunta que usa subconsultas en la lista de proyección de columna. La pregunta

informará sobre los números corrientes de DEPARTMENTS y personal:

seleccione sysdate Hoy, (seleccione a la cuenta (*) de DEPARTMENTS) Dept_count, (cuenta sentencia (*) de EMPLOYEES) Emp_count del dual;

3. Escriba una pregunta para identificar a todos los EMPLOYEES que son gerentes. Esto va

requiera la utilización de una subpregunta en el DONDE la cláusula para seleccionar a todos los EMPLOYEES cuyo EMPLOYEE_ID aparece como un MANAGER_ID:

seleccione last_name de EMPLOYEES donde (employee_id en (seleccionan manager_id de EMPLOYEES));

360 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

4. Escriba una pregunta para identificar el sueldo más alto pagado en cada país. Esto va requiera la utilización de una subpregunta en el DE la cláusula:

máximo escogido (sueldo), country_id de (seleccione salary,department_id,location_id,country_id de EMPLOYEES DEPARTMENTS de juntura naturales LOCATIONS de juntura naturales)

grupo por country_id;

Page 306: curso_sql_certificacion

OBJETIVO DE CERTIFICACIÓN 8.02

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar

Hay muchas situaciones donde usted necesitará el resultado de una pregunta como el

ingreso para el otro.

Uso de un SET de Resultado de Subpregunta con Objetivos de Comparación

¿Qué EMPLOYEES tienen un sueldo que es menos que el sueldo medio? Esto podría ser contestado por dos select, o por una select sola con una subpregunta. El ejemplo siguiente usa dos select:

seleccione el avg (sueldo) de EMPLOYEES; seleccione last_name de EMPLOYEES donde sueldo <result_of_previous_query;

O bien, este ejemplo usa una select con una subpregunta:

seleccione last_name de EMPLOYEES donde el sueldo <(seleccionan el avg (sueldo) de EMPLOYEES);

En este ejemplo, la subpregunta es usada para substituir un valor en el DONDE

cláusula de la pregunta paternal: esto devuelve un valor solo, usado para la comparación con las filas recuperadas por la pregunta paternal.

La subpregunta podría devolver un SET de filas. Por ejemplo, usted podría usar el siguiente para encuentre todos los DEPARTMENTS que realmente tienen uno o varios EMPLOYEES

adjudicados a ellos:

seleccione department_name de DEPARTMENTS donde department_id en (seleccionan distinto (department_id) de EMPLOYEES);

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar

361

En el ejemplo precedente, la subpregunta es usada como una alternativa a una juntura. El mismo resultado podría haber sido conseguido con lo siguiente:

seleccione department_name de DEPARTMENTS EMPLOYEES de juntura interiores en EMPLOYEES department_id = grupo de DEPARTMENTS department_id por department_name;

Si la subpregunta va a devolver más de una fila, entonces la comparación

Page 307: curso_sql_certificacion

el operador debe ser capaz de aceptar valores múltiples. Estos operadores están EN, NO EN, CUALQUIERA, y TODOS. Si el operador de comparación es IGUAL, MAYOR QUE, o MENOS QUE (que cada uno sólo puede aceptar un valor), la pregunta paternal fallará.

La utilización NO EN es llena de problemas debido al modo que SQL se maneja NULLs. Por regla general, no use NO EN a menos que usted esté seguro que el SET de resultado no incluirá un NULO.

Transformación de estrella Una extensión del uso de subconsultas como una alternativa a una juntura debe habilitar

la estrella la transformación a menudo necesaria en aplicaciones de depósito de datos. Considere unas ventas de grabación de comando grandes. Cada venta es marcada como siendo de un producto particular a un comprador particular por un canal particular. Estos atributos son identificados por códigos, usados como claves foráneas para dimensionar tablas con filas que describen cada producto, comprador, y canal. Para identificar todas las ventas de libros a compradores en Alemania por pedidos de Internet, uno podría ejecutar una pregunta como esto:

seleccione de ventas s, productos p, compradores b, c de canales donde s.prod_code=p.prod_code y s.buy_code=b.buy_code y s.chan_code=c.chan_code y p.product ='Books' y b.country ='Germany' y c.channel ='Internet';

Esta pregunta usa el DONDE cláusula para afiliarse a las tablas y luego filtrar los

resultados. Lo siguiente es una pregunta alternativa que cederá el mismo resultado:

seleccione de ventas donde prod_code en (seleccionan prod_code de productos de donde producto ='Books') y buy_code en (seleccionan buy_code compradores donde país ='Germany') y chan_code en (seleccionan chan_code de canales donde canal ='Internet);

Volver a escribir de la primera select al segundo es la transformación de estrella.

Aparte de ser una estructura intrínsecamente más elegante (la mayor parte de developeres SQL

con cualquiera

362 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

el sentido de la estética estará de acuerdo con aquel), hay motivos técnicos por qué la base de datos puede ser capaz de ejecutarlo más eficazmente que la pregunta original. También, las preguntas de estrella son más fáciles a mantener; es muy simple añadir más dimensiones a la pregunta o reemplazar los literales solos ('Libros', 'Alemania', y 'Internet') con listas de valores.

Page 308: curso_sql_certificacion

Hay un parámetro de inicialización de instancia, STAR_TRANSFORMATION_ HABILITADO, que (de ser puesto al verdadero) permitirá que el Oracle pregunte optimizer para volver a escribir el código en preguntas de estrella.

Genere una Comando de la Cual SELECCIONAR Las subconsultas también pueden ser usadas en el DE la cláusula, donde ellos son a veces

mandados a como vistas de inline. Considere otro problema basado en el esquema de HORA: los EMPLOYEES son adjudicados a un departamento, y los DEPARTMENTS tienen una posición. Cada posición está en un país. ¿Cómo puede usted encontrar el sueldo medio del personal en un país, aunque ellos trabajen para DEPARTMENTS diferentes? Como esto:

seleccione el avg (sueldo), country_id de (seleccione salary,department_id,location_id,country_id de EMPLOYEES DEPARTMENTS de juntura naturales LOCATIONS de juntura naturales)

grupo por country_id;

La subpregunta construye una comando con el sueldo de cada empleado y el país en que su departamento está basado. La pregunta paternal entonces se dirige a esta comando, haciendo un promedio del SUELDO y agrupándose por COUNTRY_ID.

Genere Valores para Proyección El tercer lugar una subpregunta puede ir está en la lista SENTENCIA de una pregunta.

Como le puede ¿identifique el sueldo más alto y el precio de comisión más alto y así qué la comisión máxima pagada sería si el empleado asalariado más alto también tuviera el precio de comisión más alto? Como esto, con dos subconsultas:

escogido (seleccionan el máximo (sueldo) de EMPLOYEES) * (máximo escogido (commission_pct) de EMPLOYEES) / 100 del dual;

En este uso, la lista SENTENCIA solía prever que las columnas están siendo

pobladas con los resultados de las subconsultas. Una subpregunta usada en esta manera debe ser el escalar, o la pregunta paternal fallará con un error.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar

Genere Filas para ser Pasadas a una Select DML 363

Las select de DML son cubiertas detalladamente en el Capítulo 10. Por el momento,

considere estos ejemplos:

el inserción en sales_hist selecciona * de ventas donde fecha> sysdate-1; actualice el sueldo de SET de EMPLOYEES = (seleccione el avg (sueldo) de EMPLOYEES); borre de DEPARTMENTS donde department_id no en

Page 309: curso_sql_certificacion

(seleccionan department_id de EMPLOYEES);

El primer ejemplo usa una subpregunta para

identificar a el SET de filas en una comando que será insertada en el otro. El segundo ejemplo usa una subpregunta a

Una subpregunta puede ser usada calcule el sueldo medio de todos los EMPLOYEES y seleccionar filas para la introducción, pero no en a los pases este valor (una cantidad escalar) a una actualización VALORAN la cláusula de una select de INSERCIÓN. select. El tercer ejemplo usa una subpregunta a

recupere todos DEPARTMENT_IDs que están en el uso

y pasa la lista a un BORRAR comando, que borrará todos los DEPARTMENTS que no están en el uso.

Note que no es legal usar una subpregunta en la cláusula de VALORES de un inserción select; esto es fino:

el inserción en fechas selecciona sysdate del dual;

Pero esto no es:

el inserción en fechas (date_col) valores (seleccionan sysdate fom dual);

EJERZA 8-2 Subconsultas Más complejas En este ejercicio, usted escribirá algunas subconsultas más complicadas. Use

tampoco SQL*Plus o Developer SQL. Todas las preguntas deberían ser ejecutadas cuando conectado al esquema de HORA.

1. Inicio de sesión a su base de datos como HORA de usuario 2. Escriba una pregunta que identificará a todos los EMPLOYEES que trabajan en DEPARTMENTS

localizado en el Reino Unido. Esto requerirá tres niveles de subconsultas anidadas:

seleccione last_name de EMPLOYEES donde department_id en (seleccione department_id de DEPARTMENTS donde location_id en

(seleccione location_id de LOCATIONS

364 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

donde country_id = (seleccione country_id de COUNTRIES donde country_name ='United Reino')

));

Page 310: curso_sql_certificacion

3. Compruebe que el resultado del paso 2 es correcto ejecutando las subconsultas inde-

suspendidamente. En primer lugar, encuentre el COUNTRY_ID para el Reino Unido:

seleccione country_id de COUNTRIES donde country_name ='United Reino';

El resultado será el Reino Unido. Entonces encuentre las LOCATIONS

correspondientes:

seleccione location_id de LOCATIONS donde country_id = 'el Reino Unido';

El LOCATION_IDs volvió será 2400, 2500, y 2600. Entonces encuentre el DEPARTMENT_IDs de departamento en estas LOCATIONS:

seleccione department_id de DEPARTMENTS donde location_id en (2400,2500,2600);

El resultado será dos DEPARTMENTS, 40 y 80. Finalmente, encuentre a los

EMPLOYEES relevantes:

seleccione last_name de EMPLOYEES donde department_id en (40,80);

4. Escriba una pregunta para identificar a todos los EMPLOYEES que ganan más que el promedio

y quiénes trabajan en cualquier de ESTO DEPARTMENTS. Esto requerirá dos subconsultas, no anidó:

seleccione last_name de EMPLOYEES donde department_id en (seleccionan department_id de DEPARTMENTS donde department_name como 'ELLO %') y sueldo> (seleccionan el avg (sueldo) de EMPLOYEES);

OBJETIVO DE CERTIFICACIÓN 8.03

Liste los Tipos en una lista de Subconsultas Hay tres amplias divisiones de la subpregunta:

■ la Fila sola subpregunta subconsultas de Fila múltiple ■ ■ subconsultas Correlacionadas

Solo - y Subconsultas de Fila múltiple Liste los Tipos en una lista de Subconsultas

365 La subpregunta de fila sola devuelve una fila. Un instancia especial es la subpregunta escalar, que devuelve una fila sola con una columna. Las subconsultas escalares son

Page 311: curso_sql_certificacion

aceptables (y a menudo muy útiles) en prácticamente cualquier situación donde usted podría usar un valor literal, una constante, o una expresión. La fila múltiple subpregunta SETs de vuelta de filas. Estas preguntas comúnmente son usadas para generar SETs de resultado que serán pasados a un DML o select SENTENCIA para el procesamiento adicional. Tanto la fila sola como las subconsultas de fila múltiple serán evaluadas una vez, antes de que la pregunta paternal sea ejecutada.

Solo - y subconsultas de fila múltiple puede ser usado en el DONDE y las cláusulas que TIENEN de la pregunta paternal, pero hay restricciones de los operadores de comparación legítimos. Si el operador de comparación es alguno de estos en la comando siguiente, la subpregunta debe ser una subpregunta de fila sola:

Símbolo

= ¡>> = <<= <>! =

Sentido

igual mayor que mayor que o igual menos que menos que o igual no igual no igual

Si alguno de los operadores en la comando precedente es usado con una subpregunta

que vuelve más de una fila, la pregunta fallará. Los operadores en la comando siguiente pueden usar subconsultas de fila múltiple:

Símbolo

EN NO EN CUALQUIERA TODOS

Sentido

igual a cualquier miembro en una lista no igual a cualquier miembro en una lista devuelve filas que

emparejan cualquier valor a una lista devuelve filas que emparejan todos los valores en una lista

366 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

Los operadores de comparación válido para subconsultas de fila múltiple están EN, válido para subconsultas de fila sola son =,>,> =, NO EN, CUALQUIERA, y TODOS. <<=, y <>. Los operadores de comparación

Subconsultas correlacionadas Una subpregunta correlacionada tiene un método más complejo de la ejecución que solo - y subconsultas de fila múltiple y es potencialmente mucho más potente. Si unas columnas de referencias de subpregunta en la pregunta paternal, entonces su resultado será dependiente de la pregunta paternal. Esto hace imposible evaluar la subpregunta antes de evaluar la pregunta paternal. Considere esta select, que pone en una lista a

Page 312: curso_sql_certificacion

todos los EMPLOYEES que ganan menos que el sueldo medio:

seleccione last_name de EMPLOYEES donde el sueldo <(seleccionan el avg (sueldo) de EMPLOYEES);

La subpregunta de fila sola sólo tiene que ser ejecutada una vez, y su resultado

substituido en la pregunta paternal. Pero ahora considere una pregunta que pondrá en una lista a todos los EMPLOYEES cuyo sueldo es menos que el sueldo medio de su departamento. En este instancia, la subpregunta debe ser ejecutada para cada empleado para determinar el sueldo medio para su departamento; es necesario pasar el código de departamento del empleado a la subpregunta. Esto puede ser hecho como sigue:

seleccione p.last_name, p.department_id de EMPLOYEES p donde p.salary <(seleccionan avg (s.salary) de EMPLOYEES s donde s.department_id=p.department_id);

En este ejemplo, la subpregunta se refiere a una columna, p.department_id, de la lista sentencia de la pregunta paternal. Esto es la señal que, más bien que evaluar la subpregunta una vez, debe ser evaluado para cada fila en la pregunta paternal. Para ejecutar la pregunta, el Oracle mirará cada fila en EMPLOYEES y, como esto hace así, ejecute la subpregunta usando el DEPARTMENT_ID de la fila de empleado corriente.

El flujo de ejecución es como sigue:

1. Comience en la primera fila de la comando de EMPLOYEES. 2. Lea el DEPARTMENT_ID y el SUELDO de la fila corriente. 3. Ejecute la subpregunta usando el DEPARTMENT_ID del paso 2.

Liste los Tipos en una lista de

Subconsultas

367

4. Compare el resultado del paso 3 con el SUELDO del paso 2, y vuelva el la fila si el SUELDO es menos que el resultado. 5. Avance a la siguiente fila en

la comando de EMPLOYEES. 6. Repita del paso 2.

Una subpregunta de fila múltiple o fila sola es evaluada una vez, antes de evaluar la pregunta externa; una subpregunta correlacionada debe ser evaluada una vez para cada fila en la pregunta externa. Una subpregunta correlacionada puede ser sola - o la fila múltiple, si el operador de comparación es apropiado.

Las subconsultas correlacionadas pueden ser una construcción muy ineficaz, debido a la necesidad de la ejecución repetida de la subpregunta. Siempre trate de encontrar un enfoque alternativo.

EJERCICIO 8-3 Investiga los Tipos diferentes de Subconsultas En este ejercicio, usted demostrará problemas que pueden ocurrir con tipos diferentes de subconsultas. Use SQL*Plus o Developer SQL. Todas las preguntas deberían ser ejecutadas cuando conectado al esquema de HORA: se supone que la comando de EMPLOYEES tiene los conjuntos estándares de filas.

Page 313: curso_sql_certificacion

1. Inicio de sesión a su base de datos como HORA de usuario 2. Escriba una pregunta para determinar quién gana más que el Sr. Tobias:

seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el sueldo de EMPLOYEES donde last_name =' Tobias) piden por last_name;

Esto devolverá 86 nombres, en comando alfabético.

3. Escriba una pregunta para determinar quién gana más que el Sr. Taylor:

seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor') piden por last_name;

Esto fallará con el error "ORA-01427: la subpregunta de fila sola vuelve más que una fila." La ilustración siguiente muestra las pocas últimas líneas de salida del paso 2 seguido del paso 3 y el error, ejecutado con SQL*Plus.

368 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

4. Determine por qué la pregunta en el paso 2 tuvo éxito, pero fallado en el paso 3. La respuesta

está en el estado de los datos:

seleccione a la cuenta (last_name) de EMPLOYEES donde last_name =' Tobias; seleccione a la cuenta (last_name) de EMPLOYEES donde last_name =' Taylor';

El uso del "mayor que" el operador en las preguntas para los pasos 2 y 3 requiere una subpregunta de fila sola, pero la subpregunta usada puede devolver cualquier número de filas, según el predicado de búsqueda usado.

5. Fije el código en los pasos 2 y 3 de modo que las select tengan éxito no importa que LAST_NAME es usado. Hay dos soluciones posibles: uno usa a un operador de comparación diferente que puede manejarse una subpregunta de fila múltiple; los otros usos una subpregunta que siempre será la fila sola.

La primera solución:

seleccione last_name de EMPLOYEES donde

Page 314: curso_sql_certificacion

el sueldo> todos (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor') piden por last_name;

La segunda solución:

seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el máximo (sueldo) de EMPLOYEES donde last_name =' Taylor') piden por last_name;

Escriba Subconsultas de Fila múltiple y Fila sola

GUIÓN & SOLUCIÓN 369

Como le puede mejor diseñar subconsultas tales que ellos no fallarán con "ORA-01427: ¿la subpregunta de fila sola devuelve más de una fila" errores?

A veces hay una opción entre utilización de una subpregunta o utilización de un poco de otra técnica: la transformación de estrella es un ejemplo. ¿Cuál es mejor?

OBJETIVO DE CERTIFICACIÓN 8.04

Hay dos técnicas comunes: use una agregación de modo que si usted realmente consigue filas múltiples ellos sean reducidos a uno, o usar uno del EN, CUALQUIERA, o TODOS los operadores de modo que no importe si filas múltiples son devueltas. Pero éstos son ambos las soluciones del hacker; la verdadera respuesta siempre debe usar la clave primaria identificando la fila para ser devuelta, no una llave no única. Esto depende de las circunstancias. Es bastante común para las técnicas diferentes causar un método de ejecución diferente dentro de la base de datos. Según como el instancia, la base de datos, y las estructuras de datos dentro de ella son configurados, uno puede ser mucho más eficiente que el otro. Siempre que tal opción se levante, las select deberían ser sujetadas a un análisis de afinación. Su DBA será capaz de aconsejar sobre esto.

Escriba Subconsultas de Fila múltiple y Fila sola Lo siguiente es ejemplos del solo - y subconsultas de fila múltiple. Ellos están basados

en el esquema de pruebas de HORA.

¿Cómo entendería usted qué EMPLOYEES tienen un gerente que trabaja para un departamento basado en el Reino Unido? Esto es una solución posible, usando subconsultas de fila múltiple:

seleccione last_name de EMPLOYEES donde manager_id en (seleccionan

Page 315: curso_sql_certificacion

employee_id de EMPLOYEES de donde department_id en (seleccionan department_id DEPARTMENTS donde location_id en (seleccionan location_id de LOCATIONS donde country_id ='UK')));

En el ejemplo precedente, las subconsultas son anidadas tres niveles

profundamente. Note que el las subconsultas usan el EN el operador porque es posible que las preguntas pudieran devolver varias filas.

370 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

Le han pedido encontrar el trabajo con el sueldo medio más alto. Esto puede ser hecho con una subpregunta de fila sola:

seleccione job_title de JOBS grupo de EMPLOYEES de juntura natural por job_title que tiene avg (sueldo) = (máximo escogido (avg (sueldo)) del grupo de EMPLOYEES por job_id);

La subpregunta devuelve un valor solo: el sueldo medio del departamento con el el sueldo medio más alto. Está seguro usar al operador de igualdad para esta subpregunta porque la función de MAX garantiza que sólo una fila será devuelta.

CUALQUIER y TODOS los operadores son la sintaxis apoyada, pero su función puede ser duplicada con otros operadores más comúnmente usados combinados con agregaciones. Por ejemplo, estas dos select, que recuperan a todos los EMPLOYEES cuyo sueldo está encima de aquel de cualquiera en la oficina 80, devolverán SETs de resultado idénticos:

seleccione last_name de EMPLOYEES donde el sueldo> todos (seleccionan el sueldo de EMPLOYEES donde department_id=80); seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el máximo (sueldo) de EMPLOYEES donde department_id=80);

La comando siguiente resume los equivalentes para CUALQUIERA y TODOS:

Operador

<CUALQUIERA> CUALQUIERA = CUALQUIERA> TODOS <TODOS

Sentido

menos que el más alto más que el equivalente más bajo con EN más que el más alto menos

que el más bajo

EJERCICIO 8-4 Escribe una Pregunta Que es Confiable y Usuario Simpático En este ejercicio, desarrolle una subpregunta de multifila que apremio para la

introducción de datos por el usuario. Usar SQL*Plus o Developer SQL. Todas las preguntas deberían ser ejecutadas cuando conectado al esquema de HORA; se supone que las tablas tienen los conjuntos estándares de filas.

Page 316: curso_sql_certificacion

1. Inicio de sesión a su base de datos como HORA de usuario 2. Diseñe una pregunta que apremio para un departamento llaman y ponen el apellido en una lista

de cada empleado en aquel departamento: Escriba Subconsultas de Fila múltiple y Fila sola

seleccione last_name de EMPLOYEES donde department_id = (seleccionan department_id de DEPARTMENTS donde department_name = '&Department_name');

371 3. Ejecute la pregunta en el paso 2 tres veces, cuándo apremio suministrando estos valores:

la primera vez, Ejecutivo segunda vez, la tercera vez ejecutiva, Executiv

La ilustración siguiente muestra el resultado, usando SQL*Plus:

4. Note los resultados del paso 3. La primera carrera tuvo éxito porque el valor entrado era un partido exacto, pero otro fracasado. Ajuste la pregunta para hacerlo más usuario amistoso, de modo que esto pueda manejarse variaciones menores por si u ortografía:

seleccione last_name de EMPLOYEES donde department_id = (seleccione department_id de DEPARTMENTS donde superior (department_name) como el superior ('%&Department_name%'));

5. Ejecute la pregunta en el paso 4 tres veces, usando los mismos valores que usado en el paso 3.

Esta vez, la pregunta ejecutará con éxito. 6. Ejecute la pregunta en el paso 4 otra vez, y esta vez escriba el valor Pu. La pregunta

fallará, con "ORA-01427: la subpregunta de fila sola devuelve más de una fila" error, porque la tentativa de hacerlo más fácil de usar significa que la subpregunta ya no es garantizada para ser una subpregunta de fila sola. La cuerda Pu empareja dos DEPARTMENTS.

372 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

Page 317: curso_sql_certificacion

7. Ajuste la pregunta para hacerlo resistente contra el error ORA-01427, y adaptarse salida para prevenir cualquier confusión posible:

seleccione last_name, department_name de EMPLOYEES se afilian a DEPARTMENTS en EMPLOYEES department_id = DEPARTMENTS department_id donde los DEPARTMENTS department_id en (seleccionan department_id de DEPARTMENTS donde superior (department_name) como el superior ('%&Department_name%'));

La ilustración siguiente muestra este paso final: el código que se acerca al ideal de ser tanto prueba de disco como usuario simpático:

DENTRO DEL EXAMEN

Uso de Subconsultas Las subconsultas vienen a tres formas generales: la fila sola, la fila múltiple, y correlacionado. Un instancia especial de la subpregunta de fila sola es la subpregunta escalar, una subpregunta que devuelve exactamente un valor. Esto es una fila sola sola - subpregunta de columna. Para primer SQL OCP examen, el conocimiento detallado sólo es esperado de subconsultas escalares y la columna sola

subconsultas de fila múltiple. Las subconsultas correlacionadas y subconsultas de columna múltiples con poca probabilidad serán examinadas a este nivel, pero un conocimiento general de ellos puede ser probado.

Usando subconsultas en un DONDE cláusula, usted debe ser consciente de que los operadores tendrán éxito con subconsultas de fila sola y que tendrá éxito con subconsultas de fila múltiple.

RESUMEN DE CERTIFICACIÓN Resumen de certificación

373

Page 318: curso_sql_certificacion

Una subpregunta es una pregunta empotrada dentro de otra select SQL. Esta select

puede esté otra pregunta o una select DML. Las subconsultas pueden ser anidadas el uno dentro del otro sin límites prácticos.

Las subconsultas pueden ser usadas para generar valores para la lista sentencia de una pregunta para generar una vista de inline para ser usada en el DE la cláusula, en el DONDE cláusula, y en la cláusula que TIENE. Cuando usado en el DONDE o cláusulas que TIENEN, las subconsultas de fila sola pueden ser usadas con estos operadores de comparación: =,>,> =, <<=, <>; las subconsultas de fila múltiple pueden ser usadas con estos operadores de comparación: EN, NO EN, CUALQUIERA, TODOS.

374 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

✓TALADRADORA DE DOS MINUTOS

Defina Subconsultas ❑ Una subpregunta es una select sentencia empotrada dentro de otra select SQL. ❑

Subconsultas puede ser anidado el uno dentro del otro. ❑ a Excepción de la subpregunta

correlacionada, las subconsultas son ejecutadas antes la pregunta externa dentro de la cual ellos son empotrados.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar ❑ Seleccionar filas de una comando con una condición que depende de los datos dentro de

la comando puede ser puesta en práctica con una subpregunta. ❑ junturas Complejas puede ser a veces reemplazado con subconsultas. ❑ Subconsultas puede valores agregados a la pregunta externa salida lo que no está disponible en

las tablas las direcciones de pregunta externas.

Liste los Tipos en una lista de Subconsultas ❑ subconsultas de Fila múltiple puede devolver varias filas, posiblemente con varias columnas. ❑

subconsultas de Fila sola devuelven una fila, posiblemente con varias columnas. ❑ Una

subpregunta escalar devuelve un valor solo; es una fila sola, la columna sola subpregunta.

❑ Una subpregunta correlacionada es ejecutado una vez para cada fila en la pregunta externa.

Page 319: curso_sql_certificacion

Escriba Subconsultas de Fila múltiple y Fila sola ❑ subconsultas de Fila sola debería ser usado con operadores de comparación de fila sola. ❑

subconsultas de Fila múltiple debería ser usado con operadores de comparación de fila múltiple. el �

TODOS y CUALQUIER operador puede ser alternativas al uso de agregaciones.

MÍ PRUEBA

Defina Subconsultas

1. Considere esta descripción genérica de una select SENTENCIA:

SELECCIONE select_list DE la comando DONDE EL GRUPO de condición POR expression_1 que

TIENE expression_2 PIDE POR expression_3; ¿Dónde podría subconsultas ser usado? (Elija todas las

respuestas correctas.) A. select_list B. comando condición de C. D. expression_1 E. expression_2

F. expression_3

Mí Prueba

375 2. Una pregunta puede tener una subpregunta empotrada dentro de ello. Bajo que circunstancias podría estar allí

¿más de una subpregunta? (Elija la mejor respuesta.) A. La pregunta externa puede incluir una pregunta interior. No es posible tener otra pregunta dentro de

la pregunta interior. B. Es posible empotrar una subpregunta de fila sola dentro de una subpregunta de fila múltiple,

pero no el al revés.

C. La pregunta externa puede tener preguntas interiores múltiples, pero ellos no deben ser empotrados dentro de

el uno al otro. D. Las subconsultas pueden ser empotradas el uno dentro del otro sin limitaciones prácticas de la

profundidad. 3. Considere esta select:

seleccione employee_id, last_name de EMPLOYEES donde el sueldo> (seleccionan el avg (sueldo) de EMPLOYEES);

¿Cuándo será ejecutada la subpregunta? (Elija la mejor respuesta.)

A. Será ejecutado antes de la pregunta externa. B. Será ejecutado después de la pregunta externa.

376 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

C. Será ejecutado simultáneamente con la pregunta externa. D. Será ejecutado una vez para cada

fila en la comando de EMPLOYEES.

4. Considere esta select:

seleccione o.employee_id, o.last_name de EMPLOYEES o donde

Page 320: curso_sql_certificacion

el o.salary> (seleccionan avg (i.salary) de EMPLOYEES i donde yo department_id=o.department_id);

¿Cuándo será ejecutada la subpregunta? (Elija la mejor respuesta.)

A. Será ejecutado antes de la pregunta externa. B. Será ejecutado después de la pregunta externa.

C. Será ejecutado simultáneamente con la pregunta externa. D. Será ejecutado una vez para cada

fila en la comando de EMPLOYEES.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar

5. Considere la select siguiente:

seleccione last_name de DEPARTMENTS de juntura de EMPLOYEES en EMPLOYEES department_id = DEPARTMENTS department_id donde department_name ='Executive';

y esta select:

seleccione last_name de EMPLOYEES donde department_id en (seleccione department_id de DEPARTMENTS donde department_name ='Executive');

¿Qué puede ser dicho sobre las dos select? (Elija dos respuestas correctas.)

A. Las dos select deberían generar el mismo resultado. B. Las dos select podrían generar

resultados diferentes. C. La primera select siempre se ejecutará con éxito; la segunda select va el

error si hay dos DEPARTMENTS con 'Ejecutivo' DEPARTMENT_NAME.

D. Ambas select siempre se ejecutarán con éxito, aun si hay dos DEPARTMENTS con DEPARTMENT_NAME 'Ejecutivo'.

Liste los Tipos en una lista de Subconsultas

6. ¿Cuáles son las características discernidoras de una subpregunta escalar? (Elija dos respuestas

correctas.)

A. Una subpregunta escalar devuelve una fila. B. Una subpregunta escalar devuelve una columna.

Mí Prueba

377

C. Una subpregunta escalar no puede ser usada en la LISTA SENTENCIA de la pregunta

paternal. D. Una subpregunta escalar no puede ser usada como una subpregunta correlacionada.

7. ¿Qué operador de comparación no puede ser usado con subconsultas de fila múltiple?

(Elija la mejor respuesta.) A. TODO B. CUALQUIER C. EN D. NO EN E. Todo el susodicho

puede ser usado.

Escriba Subconsultas de Fila múltiple y Fila sola

8. Considere esta select:

seleccione last_name, (cuenta sentencia (*) de DEPARTMENTS) de EMPLOYEES donde el sueldo = (seleccionan el sueldo de EMPLOYEES);

¿Qué pasa con ello? (Elija la mejor respuesta.)

Page 321: curso_sql_certificacion

A. Nada es incorrecto - la select debería ejecutarse sin el error. B. La select fallará porque la

subpregunta en la lista SENTENCIA se refiere a una comando que es no puesto en una lista en el DE cláusula. C. La select fallará si la segunda pregunta devuelve

más de una fila. D. La select se ejecutará, pero es muy ineficaz debido a la necesidad de ejecutar el segundo

subpregunte una vez para cada fila en EMPLOYEES. 9. ¿Cuáles de las select siguientes es equivalente? (Elija dos respuestas.)

A. seleccione employee_id de EMPLOYEES donde el sueldo <todos (seleccionan el sueldo de EMPLOYEES donde

department_id=10); B. seleccione employee_id de EMPLOYEES donde el sueldo <(seleccionan el minuto (sueldo) de

EMPLOYEES donde department_id=10);

C. seleccione employee_id de EMPLOYEES donde el sueldo no> = cualquiera (seleccionan el sueldo de EMPLOYEES

donde department_id=10); D. seleccione employee_id de EMPLOYEES e DEPARTMENTS de juntura d en

e.department_id = d.department_id donde e.salary <(seleccionan el minuto (sueldo) de EMPLOYEES) y d.department_id=10;

378 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

10. Considere esta select, que es querida para apremio para el nombre de un empleado y luego encontrar todos

los EMPLOYEES que tienen el mismo trabajo que el primer empleado:

seleccione last_name, employee_id de EMPLOYEES donde job_id = (seleccione job_id de EMPLOYEES donde last_name = '&Name');

Lo que pasaría si dieran un valor para &Name que no emparejó con ninguna fila en ¿EMPLOYEES? (Elija la mejor respuesta.) A. La select fallaría con un error. B. La select devolvería cada fila en la comando. C. La select no devolvería ningunas filas. D. La select devolvería todas las filas donde JOB_ID es NULO.

PREGUNTA DE LABORATORIO Entrénese 8-3 incluyó esta pregunta que intentó encontrar a todos los EMPLOYEES cuyo sueldo es más

alto que esto de un empleado denominado:

seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor') piden por last_name;

La pregunta se ejecuta con éxito si last_name es único. Dieron dos variaciones que se ejecutarán sin el error pase lo que pase valoran es proporcionado.

La primera solución era como sigue:

seleccione last_name de EMPLOYEES donde

Page 322: curso_sql_certificacion

el sueldo> todos (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor') piden por last_name;

La segunda solución era como sigue:

seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el máximo (sueldo) de EMPLOYEES donde last_name =' Taylor') piden por last_name;

Hay otras preguntas que se ejecutarán con éxito; construya otras dos soluciones, una utilización el CUALQUIER operador de comparación, la otra utilización de la función de agregación de MINUTO. ¿Ahora que usted tiene cuatro soluciones, dan todos ellos el mismo resultado?

Todas estas "soluciones" son de hecho sólo modos de evitar el error. Ellos no necesariamente dan el resultado que el usuario quiere, y ellos pueden no ser consecuentes. ¿Qué el cambio tiene que ser hecho dar a un consecuente, inequívoco, resultado?

MÍ PRUEBAN RESPUESTAS

Defina Subconsultas Mí Respuestas de Prueba

379 1. ® A, B, C, D, E. Subqueries puede ser usado a todos estos puntos. ✓

® F. Una subpregunta no puede ser usada en el PEDIDO POR la cláusula de una pregunta. ˚

2. ® D. Subquery que anida puede ser hecho a muchos niveles.

® A, B, y C. A y C son incorrectos porque las subconsultas pueden ser anidadas. El B es incorrecto porque el ˚el número de filas volvió no es relevante para subconsultas que anidan, sólo para los operadores usados.

3. ® A. El SET de resultado de la pregunta interior es necesario antes de que la pregunta

externa puede ejecutarse. ✓® B, C, y D. Los B y C no son posibles porque el resultado de la subpregunta es necesario antes ˚la pregunta paternal puede comenzar. El D es incorrecto porque la subpregunta sólo es ejecutada una vez.

4. ® D. Esto es una subpregunta correlacionada, que debe ser ejecutada para cada fila en

la comando. ✓® A, B, y C. El resultado de la pregunta interior es dependiente de un valor de la pregunta externa; esto ˚debe ser por lo tanto ejecutado una vez para cada fila.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar 5. ® A, D. Las dos select entregarán el mismo resultado, y ninguno fallará si el nombre ✓

es duplicado.

Page 323: curso_sql_certificacion

® B, C. El B es incorrecto porque las select son funcionalmente idénticas, aunque sintácticamente ˚diferente. El C es incorrecto porque el operador de comparación usado, EN, puede manejarse una subpregunta de fila múltiple.

Liste los Tipos en una lista de Subconsultas

6. ® A, B. Una subpregunta escalar puede ser definida como una pregunta que devuelve

un valor solo. ✓® C, D. El C es incorrecto porque una subpregunta escalar es la única subpregunta que puede ser usada en el ˚LISTA SENTENCIA. El D es incorrecto porque las subconsultas escalares pueden ser correlacionadas.

7. ® E. TODOS, CUALQUIERA, EN, y NO EN es los operadores de comparación de

fila múltiple. ✓® A, B, C, D. Todos éstos pueden ser usados. ˚

Escriba Subconsultas de Fila múltiple y Fila sola 8. ® C. El operador de igualdad requiere una subpregunta de fila sola, y la segunda subpregunta podría ✓

devuelva varias filas. ® A, B, D. A es incorrecto porque la select fallará en todas las circunstancias excepto ˚ improbableel instancia donde hay cero o EMPLOYEES. El B es incorrecto porque esto no es un problema; tiene que no haber ninguna relación entre la fuente de datos para las preguntas interiores y externas. El D es incorrecto porque la subpregunta sólo se ejecutará una vez; no es una subpregunta correlacionada.

380 Capítulo 8:

La utilización de Subconsultas para Solucionar problemas

9. los ® A y B son idénticos. ✓® el C es lógicamente el mismo como A y B, pero sintácticamente no es posible; esto dará un error. ˚El D siempre no devolverá ningunas filas, porque pide a todos los EMPLOYEES que tienen un sueldo más abajo que todos los EMPLOYEES. Esto no es un error, pero nunca puede devolver ninguna fila. El filtro en DEPARTMENTS no es relevante.

10. ® C. Si una subpregunta vuelve NULO, entonces la comparación también volverá NULO, significando esto ✓

ningunas filas serán recuperadas. ® A, B, D. A es incorrecto porque esto no causaría un error. El B es incorrecto porque una comparación ˚con el NULO no devolverá nada, no todo. El D es incorrecto porque una comparación con el NULO nunca puede devolver nada, no hasta otro NULLs.

RESPUESTA DE LABORATORIO

Page 324: curso_sql_certificacion

Lo siguiente es dos soluciones posibles usando a CUALQUIERA y MINUTO:

seleccione last_name de EMPLOYEES donde el sueldo> cualquiera (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor') piden por last_name;

seleccione last_name de EMPLOYEES donde el sueldo no <(seleccionan el minuto (sueldo) de EMPLOYEES donde last_name =' Taylor') piden por last_name;

Éstos son tan válidos como las soluciones presentaron antes que usó TODOS y MAX, pero ellos no

hacen dé el mismo resultado. No hay ninguna manera de decir que éstos son mejores o peores que las soluciones más tempranas. El problema consiste en que la subpregunta está basada en una columna que no es la clave primaria. No sería irrazonable decir que todas estas soluciones son incorrectas, y la pregunta original es la mejor; esto da un resultado que es inequívocamente correcto si el LAST_NAME es único, y si LAST_NAME no es único, esto lanza un error más bien que dar una respuesta cuestionable. La verdadera respuesta es que la pregunta debería estar basada en EMPLOYEE_ID, no LAST_NAME.

9La utilización de los Operadores de SET

OBJETIVOS DE CERTIFICACIÓN

9.01 Describa a los Operadores de SET

9.02 Use a un Operador de SET para Combinarse Múltiple Preguntas en una Pregunta Sola

Page 325: curso_sql_certificacion

9.03

✓Q&A

Controle el Pedido de Filas Devueltas

Taladradora de dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

382 Capítulo 9:

La utilización de los Operadores de SET

Page 326: curso_sql_certificacion

Cualquier pregunta de SQL puede ser

descrita matemáticamente (el álgebra relacional es el término usado para esto), pero el uso de

operadores de SET consiste en que matemáticas de escuela de memorias a muchos

programadores. Como su plan de estudios de matemáticas puede no haber incluido la teoría de conjuntos, lo siguiente es

un resumen corto.

Todas las select SENTENCIAS devuelven un SET de filas. Los operadores de SET toman como su ingreso los resultados de dos o más select SENTENCIAS y de éstos generan un SET de resultado solo. Esto es conocido como una pregunta compuesta. El oracle provee a tres operadores de SET: UNIÓN, CRÚCESE, y MENOS. LA UNIÓN Puede ser calificada con TODOS. Hay una desviación significativa del estándar de organización internacional para la normalización para SQL aquí, en aquella organización internacional para la normalización usos de SQL EXCEPTO donde usos de Oracle MENOS, pero la funcionalidad es idéntica. La diferencia puede ser importante virando aplicaciones a babor (o habilidades) desarrollado para una base de datos de tercero al entorno de Oracle.

OBJETIVO DE CERTIFICACIÓN 9.01

Describa a los Operadores de SET Los operadores de SET usados en preguntas compuestas son como sigue:

■ UNIÓN Devuelve las filas combinadas de dos preguntas, clasificándolos y borrar duplicados. ■ UNIÓN TODOS Devuelve las filas combinadas de

dos preguntas sin la comandoación o borrar duplicados.

Page 327: curso_sql_certificacion

Los � SE CRUZAN Las vueltas sólo las filas que ocurren en los SETs de resultado

de las ambas preguntas, la comandoación de ellos y borrando duplicados.

■ MENOS Las vueltas sólo las filas en el primer SET de resultado que no aparecen en

el segundo resultado se puso, clasificándolos y borrando duplicados.

Estos comandos son equivalentes a los operadores estándares usados en la teoría de conjuntos de matemáticas, a menudo representada gráficamente como diagramas de Venn.

SETs y Diagramas de Venn Describa a los Operadores de SET

383 Considere agrupaciones de criaturas vivas, clasificadas como

sigue:

■ Criaturas con dos piernasLa gente, los loros, murciélagos ■ Criaturas que pueden volar Loros, murciélagos, abejas

■ Criaturas con piel Osos, murciélagos

Cada comandoación es conocida como un SET, y cada miembro del SET es un elemento.

La unión de los tres SETs es gente, loros, murciélagos, abejas, y osos. Esto es todos los elementos en todos los SETs, sin las copias. La intersección de los SETs es todos los elementos que son comunes a tres SETs, otra vez borrando los duplicados. En este ejemplo simple, la intersección tiene sólo un elemento: murciélagos. La intersección del SET de dos piernas y el SET de vuelo tiene dos elementos: loros y murciélagos. El menos de los SETs es los elementos de un SET sin los elementos del otro, entonces el SET de criaturas de dos piernas, menos el SET de criaturas volante, menos el SET de criaturas peludo, causa un elemento solo: gente.

Estos SETs pueden ser representados gráficamente como el diagrama de Venn mostrado en la Figura 9-1. (Los diagramas de Venn son nombrados por John Venn, que formalizó la teoría en la universidad de Cambridge en el siglo diecinueve.)

El círculo en la cumbre dejada de la cifra representa el SET de criaturas de dos piernas; el derecho de cumbre de círculo es criaturas que pueden volar; el círculo de fondo es animales peludos. Las uniones, las intersecciones, y minuses de los SETs son inmediatamente aparentes observando los elementos en varias partes de los círculos que hacen o no se superponen. El diagrama

FIGURA 9-1

Un diagrama de Venn, pruebas tres SETs y el SET universal

Page 328: curso_sql_certificacion

GENTE

LOROS

MURCIÉLAGOS

ABEJAS

OSOS DE PESCADO

384 Capítulo 9:

La utilización de los Operadores de SET

en la cifra también incluye el SET universal, representado por el rectángulo. El SET universal es todos los elementos que existen, pero no son miembros de los SETs definidos. En este instancia, el SET universal sería definido como todas las criaturas vivas que evolucionaron sin desarrollar la piel, dos piernas, o la capacidad de volar (como el pescado).

Esto es bastante escuela maths; ahora siga a la realización dentro de SQL.

Principios generales de Operador de SET Todos los operadores de SET hacen preguntas compuestas combinando los SETs de

resultado de dos o más preguntas. Si una select SENTENCIA incluye a más de un operador de SET (y por lo tanto más de dos preguntas), ellos serán aplicados en el pedido que el programador especifica: cumbre para profundizar y dejado a derecho. Aunque los realces pendientes a la organización internacional para la normalización que SQL dará CRUCEN una prioridad más alta que los demás, no hay actualmente ninguna prioridad de un operador sobre el otro. Para anular esta precedencia, basada en el pedido en el

Page 329: curso_sql_certificacion

cual los operadores aparecen, usted puede usar paréntesis: los operadores dentro de soportes serán evaluados antes de pasar los resultados a operadores fuera de los soportes.

Considerando el cambio pendiente de la prioridad de operador, puede ser la práctica buena siempre para usar paréntesis. Esto asegurará que la función del código no cambiará cuando ejecutado contra una versión posterior de la base de datos.

Cada pregunta en una pregunta compuesta proyectará su propia lista de columnas seleccionadas. Estas listas deben tener el mismo número de elementos, ser denominadas en la misma secuencia, y ser del tipo de datos ampliamente similar. Ellos no tienen que tener los mismos nombres (o aliases de columna), tampoco ellos tienen que venir de las mismas tablas (o subconsultas). Si la columna llama (o aliases) son diferentes, el SET de resultado de la pregunta compuesta hará llamar columnas como ellos estaban en la primera pregunta.

Mientras las listas de columna seleccionadas no tienen que ser exactamente el mismo tipo de datos, ellos deben ser del mismo grupo de tipo de datos. Por ejemplo,

Las columnas en las preguntas las columnas seleccionadas por una pregunta

podrían ser de esto arregla una pregunta compuesta puede tener FECHA de tipos de datos y NÚMERO, y aquellos nombres diferentes, pero el SET de resultado salida de la segunda pregunta podría ser TIMESTAMP usará los títulos de las columnas en el y NÚMERO ENTERO. El SET de resultado del compuesto primero pregunta. la pregunta tendrá columnas con el más alto

nivel de precisión: en este instancia, ellos serían TIMESTAMP y NÚMERO. Además de

Describa a los Operadores de SET

385

aceptando tipos de datos del mismo grupo, los operadores de SET no harán ningún reparto de tipo implícito. Si la segunda pregunta recuperara columnas del tipo

Las columnas correspondientes en las preguntas que arreglan una pregunta compuesta deben ser del mismo grupo de tipo de datos.

VARCHAR2, la pregunta compuesta lanzaría un error aun si las variables de cuerda pudieran ser resueltas a fecha legítima y valores numéricos.

LA UNIÓN, MENOS, y SE CRUZA siempre combinará los SETs de resultados del ingreso preguntas, luego clasifique los resultados de borrar filas duplicadas. La comandoación está basada en todas las columnas, de la izquierda a la derecha. Si todas las columnas en dos filas tienen el mismo

valor, entonces sólo la primera fila es devuelta en el SET de resultado compuesto. Un efecto secundario de esto es que salida de una pregunta compuesta será clasificada.

Una pregunta compuesta va Si el pedido de clase (que sube, basado por filas de vuelta por defecto clasificadas a través de todos a la comando en la cual las columnas

Page 330: curso_sql_certificacion

pasan a las columnas, de la izquierda a la derecha. El único aparezca en las listas sentencias) no es el pedido usted la excepción es la UNIÓN TODOS, donde las filas quiero, es posible ahorrar un PEDIDO solo no será clasificado. El único lugar donde cláusula al final de pregunta compuesta. Es un PEDIDO POR la cláusula es permitido está en no posible usar PEDIDO POR en cualquier del final de la pregunta compuesta. las preguntas que arreglan el compuesto entero

la pregunta, ya que esto interrumpiría la comandoación que es necesario para borrar duplicados.

UNIÓN TODO es la excepción a la regla "no que clasifica ningunos duplicados": los SETs de resultado de las dos preguntas de ingreso serán concadenados para formar el resultado de la pregunta compuesta. Pero usted todavía no puede usar el PEDIDO POR en las preguntas individuales; sólo puede aparecer al final de pregunta compuesta donde será aplicado al SET de resultado completo.

EJERCICIO 9-1 Describe a los Operadores de SET En este ejercicio, usted verá el efecto de los operadores de SET. SQL*Plus o SQL El developer puede ser usado.

1. Conecte a su base de datos como la HORA de usuario 2. Ejecute esta pregunta:

seleccione region_name de REGIONS;

Note el resultado, en particular el pedido de las filas. Si la comando es tan al

principio creado, habrá cuatro filas devueltas. El pedido será Europa, América, Asia, Oriente Medio.

386 Capítulo 9:

La utilización de los Operadores de SET

3. Pregunte la comando de REGIONS dos veces, usando la UNIÓN:

seleccione region_name de region_name escogido de la unión de REGIONS de REGIONS;

Las filas volvieron será en cuanto al paso 1, pero clasificado por comando alfabético.

4. Esta vez, use la UNIÓN TODOS:

seleccione region_name de la unión de REGIONS todos seleccionan region_name de REGIONS;

Allí será doble el número de filas, y ellos no serán clasificados.

5. Una intersección recuperará filas comunes para dos preguntas:

region_name escogidos de REGIONS cruzan region_name escogido de REGIONS;

Cuatro filas son comunes, y el resultado es clasificado.

6. Un MENOS borrará filas comunes:

seleccione region_name de REGIONS menos region_name escogido de REGIONS;

Page 331: curso_sql_certificacion

La segunda pregunta borrará todas las filas en la primera pregunta. Resultado: ningunas filas se marcharon.

OBJETIVO DE CERTIFICACIÓN 9.02

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta Sola

Las preguntas compuestas son dos o más preguntas, conectadas con uno o varios

operadores de SET. El resultado final es un SET de resultado solo.

Los ejemplos que siguen están basados en dos tablas, OLD_DEPT y NEW_DEPT. La comando OLD_DEPT es querido para representar una comando creada con una versión más temprana del Oracle, cuando el único tipo de datos disponible para representar fecha y datos de tiempo era la FECHA, la única opción para datos numéricos era el NÚMERO, y los datos de carácter eran el TRABAJO POR HORAS de longitud fija. NEW_DEPT de comando usa el NÚMERO ENTERO más estrechamente definido tipo de datos numérico (que el Oracle pone en práctica como VARIOS hasta 38 dígitos significativos, pero ningunos sitios decimales), VARCHAR2 más espacial y eficiente para el carácter

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta

Sola

387

los datos, y el tipo de datos TIMESTAMP, que puede por fecha de tienda por defecto y valores de tiempo con seis decimales de la precisión durante los segundos. Hay dos filas en cada comando.

La UNIÓN TODO el Operador Una UNIÓN TODO toma dos SETs de resultado y los concadena juntos en un single el resultado se puso. Los SETs de resultado vienen de dos preguntas que deben seleccionar el mismo número de columnas, y las columnas correspondientes de las dos preguntas (en el pedido en el cual ellos son especificados) debe ser del mismo grupo de tipo de datos. Las columnas no tienen que tener los mismos nombres.

La figura 9-2 demuestra una UNIÓN TODA la operación de dos tablas. La UNIÓN TODAS las dos tablas converte todos los valores al nivel más alto de la precisión: las fechas son devueltas como timestamps (las FECHAS menos precisas rellenadas de ceros), los datos de carácter son VARCHAR2 más eficiente con la longitud de la columna de ingreso más larga, y los números (aunque esto no sea obvio debido a la naturaleza de los datos) aceptará decimales. El pedido de las filas es las filas de la primera comando, en cualquier pedido ellos resultan ser almacenados, seguidos de las filas de la segunda comando en cualquier pedido ellos resultan ser almacenados.

Page 332: curso_sql_certificacion

El Operador de UNIÓN Una UNIÓN realiza una UNIÓN TODOS y luego clasifica el resultado a través de todas

las columnas y borra duplicados. La primera pregunta en la Figura 9-3 devuelve cuatro filas porque no hay ningunos duplicados. Sin embargo, las filas están ahora en el pedido. Puede parecer que las dos primeras filas no están en el pedido debido a los valores en el FECHADO, pero ellos son: el DNAME

FIGURA 9-2

Una UNIÓN TODOS con conversiones de tipo de datos

388 Capítulo 9:

La utilización de los Operadores de SET

Una UNIÓN TODOS volverán

en la comando OLD_DEPTS es 20 bytes de largo (rellenado de espacios), mientras que el DNAME en NEW_DEPTS, donde es un VARCHAR2, sólo es mientras el nombre sí mismo. Los espacios dan el

las filas se agruparon de cada pregunta en su pedido natural. Este comportamiento puede ser modificado colocando un PEDIDO solo POR la cláusula al final.

la fila de OLD_DEPT un valor de clase más alto, aunque el valor de fecha sea menos. La segunda pregunta en la Figura 9-3 borra cualquier conducción o rastreo de espacios de las columnas

DNAME y corta los elementos tiempo de FECHADO y COMENZADO. Dos de las filas así se hacen idénticas, y entonces sólo un aparece en salida.

A causa de la clase, el pedido de las preguntas en una pregunta de compuesto de UNIÓN no hace ninguna diferencia del pedido de las filas devuelta.

Si usted sabe que no pueden haber ningunos duplicados entre dos tablas, entonces siempre usan la UNIÓN TODOS. Esto guarda la base de datos de hacer mucha comandoación. Su DBA no será contento con usted si usted usa la UNIÓN innecesariamente.

El Operador CRUZAR La intersección de dos SETs es las filas que son comunes a ambos SETs, como

mostrado en Figura 9-4.

La primera pregunta mostrada en la Figura 9-4 no devuelve ningunas filas, porque cada fila en las dos tablas es diferente. Después, la aplicación de funciones para eliminar

Page 333: curso_sql_certificacion

algunas diferencias devuelve una fila común. En este instancia, sólo una fila es devuelta; hubo varias filas comunes, ellos estarían en el pedido. El pedido en el cual las preguntas aparecen en la pregunta compuesta no tiene ningún efecto en esto.

FIGURA 9-3

Preguntas de compuesto de UNIÓN

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta

Sola

389

FIGURA 9-4

CRÚCESE y MENOS

EL MENOS Operador UN MENOS carreras tanto preguntas, clasifica los resultados, como sólo devuelve

las filas del primero resulte el SET que no aparecen en el segundo SET de resultado.

La tercera pregunta en la Figura 9-4 devuelve todas las filas en OLD_DEPT porque no hay ningunas filas correspondientes en NEW_DEPT. La última pregunta fuerza alguna concordancia, causando una de las filas al borrado. A causa de la clase, las filas estarán en el pedido independientemente del pedido en el cual las preguntas aparecen en la pregunta compuesta.

DENTRO DEL EXAMEN

La utilización de los Operadores de SET Una pregunta compuesta es una pregunta arreglada de varias preguntas, pero ellas no son subconsultas. Una subpregunta genera un SET de resultado que es usado por otra pregunta; las preguntas en una pregunta compuesta se ejecutan independientemente, y una etapa separada de la

Page 334: curso_sql_certificacion

ejecución combina los SETs de resultado. Esta operación de combinación es llevada a cabo clasificando los SETs de resultado y fusionándolos juntos. Hay una excepción a esto: UNIÓN TODO no hace ningún procesamiento después de ejecutar las dos preguntas; esto simplemente pone los resultados en una lista de cada uno.

390 Capítulo 9:

La utilización de los Operadores de SET

Ejemplos Más complejos Si dos preguntas no devuelven el mismo número de columnas, todavía puede ser posible

a ejecútelos en una pregunta compuesta generando columnas adicionales con valores NULOS. Por ejemplo, considere un sistema de comandoación para animales: todos los animales tienen un nombre y un peso, pero las aves tienen una envergadura mientras que los gatos tienen una longitud de cola. Una pregunta para poner en una lista todas las aves y gatos podría ser:

seleccione el nombre, tail_length, to_char (nulo) de la unión de gatos todo el nombre escogido, to_char (nulo), wing_span de aves;

Note el uso de TO_CHAR (NULO) para generar los valores ausentes. Una pregunta compuesta puede consistir en más de dos preguntas, en cuyo instancia operador

la precedencia puede ser controlada con paréntesis. Sin paréntesis, los operadores de SET serán aplicados en la secuencia en la cual ellos son especificados. Considere la situación donde hay una comando PERMSTAFF con un listado de todos los EMPLOYEES permanentes y unos CONSULTORES de comando con un listado del personal de consultor. También hay una LISTA NEGRA de comando de la gente puesta en el índice por un motivos o el otro. La pregunta siguiente pondrá a todo el personal permanente y consultor en una lista en un cierto geográfico, borrando a aquellos en la lista negra:

seleccione el nombre de permstaff donde posición = unión 'de Alemania' todo el nombre escogido de consultores donde work_area = 'Europa Occidental' menos el nombre escogido de la lista negra;

Note el uso de UNIÓN TODOS, porque es asumido que nadie estará en ambos el PERMSTAFF y las tablas de CONSULTORES; una UNIÓN forzaría una clase innecesaria. El pedido de precedencia para operadores de SET es el pedido especificado por el programador, entonces el MENOS la operación comparará la LISTA NEGRA con el resultado de la UNIÓN TODOS. El resultado será todo el personal (permanente y consultor) quiénes no aparecen en la lista negra. Si poner en el índice sólo pudiera ser aplicado al personal consultor y no al personal permanente, habría dos posibilidades. En primer lugar, las preguntas podrían ser puestas en una lista en un pedido diferente:

seleccione el nombre de consultores donde work_area = 'Europa Occidental' menos el nombre escogido de la unión de lista negra todo el nombre escogido de permstaff donde posición = 'Alemania';

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta

Sola

Page 335: curso_sql_certificacion

Esto devolvería a consultores que no son puestos en el índice y luego añaden todos

391 personal permanente. O bien, los paréntesis podrían controlar la precedencia

explícitamente:

seleccione el nombre de permstaff donde la posición = unión 'de Alemania' todos (seleccionan el nombre de consultores donde work_area = 'Europa Occidental' menos el nombre escogido de la lista negra);

Esta pregunta pondrá a todo el personal permanente en una lista y luego añadirá a todo

el personal de consultor quien no son puestos en el índice.

Estas dos preguntas devolverán las mismas filas, pero el pedido será diferente porque la UNIÓN TODAS las operaciones pone en una lista el PERMSTAFF y tablas de CONSULTORES en una secuencia diferente. Para asegurar que las preguntas devuelven SETs de resultado idénticos, tendría que haber un PEDIDO POR la cláusula en el pie de las preguntas compuestas.

Las dos preguntas precedentes devolverán las mismas filas, pero la segunda versión podría ser considerada el mejor código porque los paréntesis lo hacen más auto - documentación. Además, confiar en la precedencia implícita basada en el pedido de los trabajos de preguntas en este momento, pero las futuras liberaciones del SQL puede incluir la precedencia de operador de SET.

GUIÓN & SOLUCIÓN

Como le puede presentar varias tablas ¿Esto es un problema común, a menudo causado por el análisis de sistemas malo con datos similares como una comando? o quizás por tentativas de integrar sistemas juntos. Compuesto

las preguntas a menudo son la respuesta. Usando el reparto de tipo funciona para obligar columnas al mismo tipo de datos y TO_CHAR (NULO) a generar columnas ausentes, usted puede presentar los datos como si fuera de una comando.

Hay allí cuestiones de rendimiento con Quizás. ¿A excepción de la UNIÓN TODOS, comliste preguntas de compuesto de preguntas? tienen que clasificar datos, a través de la anchura llena de las filas. Esto puede ser

caro tanto en memoria como en unidad central de proceso. También, si las dos preguntas ambos se dirigen a la misma comando, habrá dos pasa por los datos ya que cada pregunta es ejecutada independientemente; si el mismo resultado pudiera ser conseguido con un (aunque probablemente más complicado) pregunta, esto sería por lo general una solución más rápida. Las preguntas compuestas son un instrumento potente, pero deberían ser usadas con la precaución.

392 Capítulo 9:

La utilización de los Operadores de SET

Page 336: curso_sql_certificacion

EJERZA 9-2 Utilización de los Operadores de SET En este ejercicio, usted ejecutará preguntas compuestas más complejas.

1. Conecte a su base de datos como la HORA de usuario 2. Ejecute esta pregunta para contar a los EMPLOYEES en tres DEPARTMENTS:

seleccione department_id, la cuenta (1) de EMPLOYEES donde department_id en (20,30,40) grupo por department_id;

3. Obtenga el mismo resultado con una pregunta compuesta:

seleccione 20, la cuenta (1) de EMPLOYEES donde unión department_id=20 todos los 30 escogidos, la cuenta (1) de EMPLOYEES donde unión department_id=30 todos los 40 escogidos, la cuenta (1) de EMPLOYEES donde department_id=40;

4. Averigüe si cualquier gerente maneja al personal en las ambas oficinas 20 y 30, y excluya a cualquier gerente con el personal en la oficina 40:

seleccione manager_id de EMPLOYEES donde department_id=20 cruzan manager_id escogido de EMPLOYEES donde department_id=30 menos manager_id escogido de EMPLOYEES donde department_id=40;

5. Use una pregunta compuesta para relatar sueldos subsumados por el departamento, por el gerente,

y el total total:

seleccione department_id, to_number (nulo), sume (sueldo) del grupo de EMPLOYEES por la unión department_id seleccionan el to_number (nulo), manager_id, suman (sueldo) del grupo de EMPLOYEES por la unión manager_id todos seleccionan el to_number (nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

OBJETIVO DE CERTIFICACIÓN 9.03 Controle el Pedido de Filas Devueltas

393

Controle el Pedido de Filas Devueltas En ausencia, salida de una UNIÓN TODA la pregunta compuesta no es clasificada en

absoluto: el las filas serán devueltas en grupos en el pedido del cual la pregunta fue puesta en una lista primero y dentro de los grupos en el pedido que ellos resultan ser almacenados. Salida de cualquier otro operador de SET será clasificada en comando ascendente de todas las columnas, que comienzan con la primera columna llamada.

No es sintácticamente posible usar un PEDIDO POR la cláusula en las preguntas

Page 337: curso_sql_certificacion

individuales que arreglan una pregunta compuesta. Esto es porque la ejecución de la mayor parte de preguntas compuestas tiene que clasificar las filas, que entrarían en conflicto con el PEDIDO POR. Podría parecer teóricamente posible que una UNIÓN por la cual TODOS (que no clasifica las filas) podrían tomar un PEDIDO para cada pregunta, pero la realización de Oracle de la UNIÓN que TODO no permite a esto.

No hay ningún problema con la colocación de un PEDIDO POR la cláusula al final de pregunta compuesta, sin embargo. Esto clasificará el entero salida de la pregunta compuesta. La comandoación por defecto de filas está basada en todas las columnas en la secuencia ellos aparecen. Un PEDIDO especificado POR la cláusula no tiene ningunas restricciones: puede estar basado en cualquier columna (y funciones aplicadas a columnas) en cualquier pedido. Por ejemplo:

SQL> seleccione deptno, recorte (dname) el nombre de old_dept 2 unión 3 seleccione dept_id, dname de new_dept 4

pedido de nombre; NOMBRE DE DEPTNO

---------- -------------------- 10 Cuentas 30 Admin 20 Apoyo

Note que los nombres de columna en el PEDIDO POR la cláusula deben ser el

nombre (s) (o, en este instancia, el alias) de las columnas en la primera pregunta de la pregunta

compuesta.

394 Capítulo 9:

La utilización de los Operadores de SET

EJERZA 9-3 Control que el Pedido de Filas Devolvió En este ejercicio, usted comandoará el resultado del paso final en el Ejercicio 2. Este

paso producido un listado de sueldos sumados por el departamento y luego por el gerente, pero los resultados no fue muy bien formateado.

1. Conecte a su base de datos como la HORA de usuario 2. Genere mejores títulos de columna para la pregunta:

seleccione el departamento department_id, to_number mgr (nulo),

sume (sueldo) del grupo de EMPLOYEES por la unión department_id todos seleccionan el to_number (nulo), manager_id, suman (sueldo) del grupo de EMPLOYEES por la unión manager_id todos seleccionan el to_number (nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

3. Intente clasificar los resultados de las preguntas que total parcial usando la UNIÓN

en vez de UNIÓN TODOS:

seleccione el departamento department_id, to_number mgr (nulo),

sume (sueldo)

Page 338: curso_sql_certificacion

del grupo de EMPLOYEES por la unión department_id seleccionan el to_number (nulo), manager_id, suman (sueldo) del grupo de EMPLOYEES por la unión manager_id todos seleccionan el to_number (nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

Esto sería fino, salvo que los totales parciales para el personal sin un

departamento o un gerente es colocado en el fondo de salida encima del magnífico total, no en las secciones para DEPARTMENTS y gerentes.

4. Genere un valor para reemplazar el NULLs para códigos de gerente y departamento

y para el total total:

seleccione 20, la cuenta (1) de EMPLOYEES donde department_id=20 unión todos los 30 escogidos, la cuenta (1) de EMPLOYEES donde unión department_id=30 todos los 40 escogidos, la cuenta (1) de EMPLOYEES donde department_id=40;

Resumen de certificación

395

5. Averigüe si cualquier gerente maneja al personal en las ambas oficinas 20 y 30, y excluya a cualquier gerente con el personal en la oficina 40:

seleccione manager_id de EMPLOYEES donde department_id=20 cruce manager_id escogido de EMPLOYEES donde department_id=30 menos manager_id escogido de EMPLOYEES donde department_id=40;

6. Use una pregunta compuesta para relatar sueldos subsumados por el departamento, por el gerente,

y el total total:

seleccione el departamento department_id, to_number mgr (nulo),

sume (sueldo) del grupo de EMPLOYEES por la unión department_id seleccionan el to_number (nulo), manager_id, suman (sueldo) del grupo de EMPLOYEES por la unión manager_id todos seleccionan el to_number (nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

RESUMEN DE CERTIFICACIÓN Los operadores de SET combinan los SETs de resultado de dos o más preguntas en un

resultado SET. Una pregunta que usa a un operador de SET es una pregunta compuesta. Los operadores de SET son la UNIÓN, UNIÓN TODOS, SE CRUZAN, y MENOS. Ellos tienen la precedencia igual, y si más de un es incluido en una pregunta compuesta ellos serán ejecutados en el pedido en el cual ellos ocurren - aunque esto pueda ser controlado usando paréntesis. Todos los operadores de SET excepto la UNIÓN TODOS confían en la comandoación para fusionar SETs de resultado y borrar filas duplicadas.

Page 339: curso_sql_certificacion

Las preguntas en una pregunta compuesta deben devolver el mismo número de columnas. Las columnas correspondientes en cada pregunta deben ser de tipos de datos compatibles. Las preguntas pueden usar aspectos de la select SENTENCIA a excepción del PEDIDO POR; es, sin embargo, permisible colocar un PEDIDO solo POR la cláusula al final de pregunta compuesta.

396 Capítulo 9:

La utilización de los Operadores de SET

✓TALADRADORA DE DOS MINUTOS

Describa a los Operadores de SET ❑ UNIÓN TODO concadena los resultados de dos preguntas. ❑ UNIÓN clasifica los

resultados de dos preguntas y borra duplicados. los � CRUZAN vueltas sólo las filas comunes

para el resultado de dos preguntas. ❑ MENOS vueltas las filas de la primera pregunta que no

existen en el segundo pregunta.

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta Sola

❑ Las preguntas en la pregunta compuesta debe devolver el mismo número de columnas. ❑ Las

columnas correspondientes debe ser del tipo de datos compatible. ❑ Los operadores de SET

tienen la precedencia igual y será aplicado en el pedido ellos son especificados.

Controle el Pedido de Filas Devueltas ❑ no es posible usar el PEDIDO POR en las preguntas individuales que hacen a

pregunta compuesta. ❑ Un PEDIDO POR la cláusula puede ser añadido al final de una pregunta compuesta. ❑ Las filas devueltas por una UNIÓN TODOS estarán en el pedido ellos ocurren en el

dos preguntas de la fuente. ❑ Las filas devueltas por una UNIÓN será clasificado a través de todas sus columnas, dejadas

a derecho.

Page 340: curso_sql_certificacion

MÍ PRUEBA

Describa a los Operadores de SET

1. ¿Cuál de estos operadores de SET no clasificará las filas? (Elija la mejor respuesta.)

A. CRUCE B. MENOS C. UNIÓN D. UNIÓN TODOS

Mí Prueba

397 2. ¿Cuál de estos operadores borrará filas duplicadas del resultado final? (Elija todo que se aplican.)

A. CRUCE B. MENOS C. UNIÓN D. UNIÓN TODOS

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta Sola

3. Si una pregunta compuesta contiene tanto un MENOS como un operador CRUZAR, que será ¿aplicado primero? (Elija la mejor respuesta.) A. CRUZAR, porque SE CRUZAN tiene la precedencia más alta que MENOS. B. El MENOS, porque MENOS tiene una precedencia más alta que SE CRUZAN. C. La precedencia es determinada por el pedido en el cual ellos son especificados. D. No es posible para una pregunta compuesta incluir tanto MENOS como CRUZARSE.

4. Hay cuatro filas en la comando de REGIONS. Considere las select siguientes y elija como muchas filas serán devueltas para cada uno: 0, 4, 8, o 16. A. seleccione * de la unión de REGIONS sentencia * de REGIONS B. escogido * de la

unión de REGIONS que todos seleccionan * de REGIONS C. escogido * de REGIONS menos el

escogido * de REGIONS que D. escogidos * de REGIONS cruzan escogido * de REGIONS

5. Considere esta pregunta compuesta:

seleccione empno, alquilado de emp unión todos seleccionan emp_id, alquilado, disparado de ex_emp;

398 Capítulo 9:

La utilización de los Operadores de SET

Las columnas EMP.EMPNO y EX_EMP.EMP_ID son el número entero; la columna EMP.HIRED es timestamp; las columnas EX_EMP.HIRED y EX_EMP.FIRED son la fecha. ¿Por qué va el estado - ment falla? (Elija la mejor respuesta.) A. Como las columnas EMPNO y EMP_ID tienen nombres diferentes B. Como las columnas EMP.HIRED y EX_EMP.HIRED son tipos de datos diferentes C. Como hay dos columnas en la primera pregunta y tres columnas en la segunda consulta D. Por todos los motivos encima de E. La pregunta tendrá éxito.

Controle el Pedido de Filas Devueltas

6. ¿Qué línea de esta select hará que esto falle? (Elija la mejor respuesta.)

A. seleccione ename, alquilado de current_staff B. pedido por ename C. menos D.

seleccionan ename, alquilado del personal corriente E. donde deptno=10 F. piden por

ename;

Page 341: curso_sql_certificacion

7. Estudie esta select:

seleccione ename de la unión emp todos seleccionan ename de ex_emp;

¿En que pedido serán devueltas las filas? (Elija la mejor respuesta.)

A. Las filas de cada comando serán agrupadas y dentro de cada grupo será clasificado en ENAME.

B. Las filas de cada comando serán agrupadas, pero no clasificadas. C. Las filas no serán

agrupadas, pero serán todos clasificadas en ENAME. D. Las filas serán ni agrupadas, ni

clasificadas.

PREGUNTA DE LABORATORIO Trabajando en el esquema de HORA, diseñe algunas preguntas que generarán informes usando a los

operadores de SET. Los informes requeridos son como sigue:

1. Los EMPLOYEES tienen su trabajo corriente (identificado por JOB_ID) registrado en su fila de EMPLOYEES.

Los JOBS que ellos han sostenido antes (pero no su trabajo corriente) son registrados en JOB_HISTORY. ¿Qué EMPLOYEES nunca han cambiado JOBS? El listado debería incluir EMPLOYEE_ID de los EMPLOYEES y LAST_NAME.

Pregunta de laboratorio

399

2. Qué EMPLOYEES fueron reclutados en un trabajo, luego cambiaron a un trabajo diferente, pero son ahora

¿atrás en un trabajo ellos sostuvieron antes? Otra vez, usted tendrá que construir una pregunta que compara a EMPLOYEES con JOB_HISTORY. El informe debería mostrar los nombres de los EMPLOYEES y los títulos de trabajo. Los títulos de trabajo son almacenados en los JOBS de comando.

3. ¿Qué JOBS tiene cualquier empleado sostuvo? Esto será el JOB_ID para la corriente del empleado trabajo (en EMPLOYEES) y todos los JOBS anteriores (en JOB_HISTORY). Si el empleado ha sostenido un trabajo más que una vez, no hay ninguna necesidad de ponerlo en una lista más que una vez. Use una variable de reemplazo para apremio para el EMPLOYEE_ID y mostrar el título (s) de trabajo. Los EMPLOYEES 101 y 200 serán EMPLOYEES convenientes para pruebas.

400 Capítulo 9:

La utilización de los Operadores de SET

MÍ PRUEBAN RESPUESTAS

Describa a los Operadores de SET 1. ® D. La UNIÓN TODAS las filas de vueltas en el pedido que ellos son entregados por las dos preguntas de ✓

Page 342: curso_sql_certificacion

que la pregunta compuesta es arreglada. ® A, B, C. CRÚCESE, MENOS, y UNIÓN todo el uso que clasifica como la parte de su ejecución. ˚

2. ® A, B, C. CRÚCESE, MENOS, y UNIÓN todos borran filas duplicadas. ✓® D. UNIÓN TODAS las vueltas todas las filas, los duplicados incluidos. ˚

Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta Sola

3. ® C. Todos los operadores de SET tienen la precedencia igual, entonces la precedencia es determinada por el ✓

la secuencia en la cual ellos ocurren. ® A, B, D. A y B son incorrectos porque los operadores puestos tienen la precedencia igual - aunque esto pueda ˚cambio de futuras liberaciones. El D es incorrecto porque muchos operadores de SET pueden ser usados en una pregunta compuesta.

4. ® UN = 4; B = 8; C = 0; D = 4 ✓® Nota que 16 no es usado; sería el resultado de una pregunta de producto Cartesiano. ˚

5. ® C. Cada pregunta en una pregunta compuesta debe devolver el mismo número de

columnas. ✓® A, B, D, E. A es incorrecto porque las columnas pueden tener nombres diferentes. El B es incorrecto porque ˚las dos columnas son del mismo grupo de tipo de datos, que es todo que fue requerido. Esto por lo tanto sigue esto D y E también son incorrectos.

Controle el Pedido de Filas Devueltas 6. ® B. Usted no puede usar el PEDIDO POR para una pregunta de una pregunta compuesta; usted sólo puede colocar un ✓

PEDIDO solo POR cláusula al final. ® A, C, D, E, F. Todas estas líneas son legales. ˚

7. ® B. Las filas de cada pregunta estarán juntos, pero no habrá ninguna

comandoación. ✓® A, C, D. A no es posible con ninguna sintaxis. El C es incorrecto porque sería el resultado de un ˚UNIÓN, no una UNIÓN TODOS. El D es incorrecto porque UNIÓN TODOS devolverán las filas de cada pregunta agrupada juntos.

RESPUESTA DE LABORATORIO Respuesta de laboratorio

401 1. Para identificar a todos los EMPLOYEES que no han cambiado el trabajo, pregunte la comando de

EMPLOYEES y borre

Page 343: curso_sql_certificacion

todos aquellos que se pelean en JOB_HISTORY:

seleccione employee_id, last_name de EMPLOYEES menos employee_id escogido, last_name de job_history acompañan a EMPLOYEES que usan (employee_id);

2. Todos los EMPLOYEES que han cambiado el trabajo al menos una vez se pelearán en

JOB_HISTORY; para aquellos quiénes están de vuelta ahora en un trabajo que ellos han sostenido antes, el JOB_ID en EMPLOYEES será el mismo como el JOB_ID en una de sus filas en JOB_HISTORY:

seleccione last_name, job_title de EMPLOYEES se afilian a JOBS usando (job_id) cruce last_name escogido, job_title de job_history h JOBS de juntura j en (h.job_id=j.job_id) acompañan a EMPLOYEES e en (h.employee_id=e.employee_id);

3. Esta pregunta compuesta apremio para un EMPLOYEE_ID y luego pondrá la corriente del empleado

en una lista trabajo y JOBS anteriores,

seleccione job_title de EMPLOYEES de juntura de JOBS que usan (job_id) donde employee_id=&&Who unión seleccionan job_title de la juntura de JOBS job_history usando (job_id) donde employee_id=&&Who;

La figura 9-5 muestra la pregunta y su resultado en el Developer SQL, después de dar 101 como el

EMPLOYEE_ID.

FIGURA 9-5

Una pregunta compuesta y el resultado

Esta página intencionadamente se dejó en blanco

10 Manipulación de

Datos

Page 344: curso_sql_certificacion

OBJETIVOS DE CERTIFICACIÓN

10.01

10.02

10.03

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

Filas de inserción en unas Filas de Actualización de Comando en una Comando

10.04

10.05

✓Q&A

Borre Filas de una Comando

Transacciones de control Taladradora De dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

404 Capítulo 10:

Manipulación de Datos

Este capítulo es todo sobre los comandos aquellos datos de cambio.

Page 345: curso_sql_certificacion

Sintácticamente, los comandos de DML son mucho más simples que el comando ESCOGIDO que ha

sido estudiado hasta ahora. Sin embargo, hay una cantidad grande de la teoría de base de datos

relacional que viene junto con

DML. Así como entendiendo los comandos que hacen los cambios, es esencial entender la teoría de la dirección de transacción, que es la parte del paradigma de base de datos relacional. Los mecanismos de dirección de transacción proporcionados por la base de datos de Oracle garantizan la conformidad a los estándares relacionales para transacciones: ellos ponen en práctica lo que es comúnmente referido como el ÁCIDO (atomicity, consecuencia, aislamiento, y durabilidad) prueba.

Detalle siguiente de los comandos de DML, este capítulo incluye un tratamiento lleno de la teoría necesaria: la integridad transaccional, el cierre de registro, y leen el

consecuencia.

OBJETIVO DE CERTIFICACIÓN 10.01

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

En sentido estricto, hay cinco comandos de DML:

■ SELECCIONAN INSERCIÓN DE ■� ACTUALIZAN ■ BORRAR ■ FUSIÓN

En la práctica, la mayor parte de profesionales de base de datos nunca incluyen ESCOGIDO como la parte de DML.

Se considera que esto es una lenguaje separada en su propio derecho, que es bastante razonable cuando usted considera que se han necesitado los ocho capítulos precedentes para describirlo. El comando de FUSIÓN a menudo es dejado caer también, no porque no

Page 346: curso_sql_certificacion

es claramente un comando de manipulación de datos, pero porque esto no hace nada que no pueda ser hecho con otros comandos. Pueden pensar de la FUSIÓN como un atajo para ejecutar un INSERCIÓN o una ACTUALIZACIÓN o un BORRAR, según un poco de condición. Un comando a menudo considerado con DML es TRUNCADO. Esto es realmente un DDL (Lenguaje de Definición de Datos) comando, pero como el efecto para usuarios finales es el mismo como

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

405

BORRAR (aunque su realización sea totalmente diferente), esto realmente corresponde con DML. De este modo, los comandos siguientes son descritos en las siguientes secciones, con sintaxis y ejemplos:

■ INSERTAN ACTUALIZACIÓN DE � ■ BORRAR ■ TRUNCADO

Además, hablaremos, para el completo:

■ FUSIÓN

Éstos son los comandos que manipulan datos.

INSERCIÓN

El oracle almacena datos en la forma de filas en tablas. Las tablas son pobladas con filas (como un país es poblado con la gente) de varios modos, pero la mayor parte de método común es con la select de INSERCIÓN. SQL es una lenguaje orientada al SET, entonces cualquier comando puede afectar una fila o un SET de filas. Resulta que una select de INSERCIÓN puede insertar una fila individual en una comando o muchas filas en muchas tablas. Las versiones básicas de la select realmente insertan sólo una fila, pero las variaciones más complejas, con un comando, pueden insertar filas múltiples en tablas múltiples.

Hay técnicas mucho más rápidas que el INSERCIÓN para poblar una comando con grandes números de filas. Éstos son la herramienta SQL*Loader, que puede ascenso de archivos datos de archivos producidos por un sistema de alimentador externo, y Datapump, que puede transferir datos al por mayor de una base de datos de Oracle al otro - vía archivos de disco o por un enlace de red.

Las tablas tienen reglas definió aquel control las filas que pueden ser insertadas. Estas reglas son coacciones. Una coacción es una realización de una regla comercial. Los analistas comerciales que modelan los procesos de negocio de una organización diseñarán un conjunto de reglas para los datos de la organización. Los ejemplos de tales reglas podrían ser que cada empleado debe tener un número de empleado único, o que cada empleado debe ser adjudicado a un departamento válido. La creación de coacciones es descrita en el Capítulo 11 - por el momento, recuerde que no hay ningún modo que un comando de INSERCIÓN pueda insertar una fila esto

406 Capítulo 10:

Page 347: curso_sql_certificacion

Manipulación de Datos

viola una coacción. Tan si usted intenta insertar una fila en EMPLOYEES con un EMPLOYEE_ID que ya existe en otra fila, o con un DEPARTMENT_ID que no empareja una fila en la comando de DEPARTMENTS, el inserción fallará. Las coacciones garantizan que los datos en la base de datos se conforman con las reglas que definen los procedimientos comerciales.

Hay muchas fuentes posibles para la fila (o filas) insertadas por una select de INSERCIÓN. Una fila sola puede ser insertada proporcionando los valores a las columnas de la fila individualmente. Tal select puede ser construida tecleándolo en SQL*Plus o Developer SQL, o por un proceso de usuario más sofisticado que presenta una forma que apremio para valores. Esto es la técnica usada para generar las filas insertadas interactivamente por usuarios finales. Para insercións de filas múltiples, la fuente de las filas puede ser una select SENTENCIA. Salida de cualquiera y todas las select SENTENCIAS habladas en preceder a ocho capítulos pueden ser usadas como el ingreso a una select de INSERCIÓN.

Pueden pensar del resultado final de cualquier select SENTENCIA como una comando: unos dos - SET dimensional de filas. Esta "comando" puede ser mostrada a un usuario (quizás en un instrumento simple como SQL*Plus), o puede ser pasado a un comando de INSERCIÓN para poblar otra comando, definida dentro de la base de datos. La utilización de una select SENTENCIA a construcción

las filas para una select de INSERCIÓN son una técnica muy común. El ESCOGIDO puede realizar muchas tareas. Éstos típicamente incluyen la conexión

Un comando de INSERCIÓN las filas insertadas en la comando objetivo

contienen puede insertar una fila, con valores de columna la información que es mucho más inmediatamente especificada en el comando, o un SET de filas comprensible a los usuarios finales que la materia prima creado por una select SENTENCIA.datos en las tablas de la fuente.

ACTUALIZACIÓN tablas y agregaciones, de modo que resultar

El comando de ACTUALIZACIÓN es usado para cambiar filas que ya las existir-filas que han sido creadas por un comando de INSERCIÓN, o posiblemente por un instrumento, como Datapump. Como con cualquier otro comando de SQL, una ACTUALIZACIÓN puede afectar una fila o un SET de filas. La talla del SET afectado por una ACTUALIZACIÓN es determinada por un DONDE la cláusula, de exactamente el mismo modo que el SET de filas recuperadas por una select SENTENCIA es definido

Page 348: curso_sql_certificacion

por un DONDE cláusula. La sintaxis es idéntica. Todas las filas actualizadas estarán en una comando; no es posible para un comando de actualización solo de afectar filas en tablas múltiples.

Actualizando una fila o un SET de filas, el comando de ACTUALIZACIÓN especifica que columnas de la fila (s) para actualizar. No es necesario (o en efecto común) actualizar

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

407

cada columna de la fila. Si la columna actualizada ya tiene un valor, entonces este valor es reemplazado con el nuevo valor especificado por el comando de ACTUALIZACIÓN. Si la columna no fuera poblada antes - que debe decir, su valor era NULO ENTONCES será poblada después de la ACTUALIZACIÓN con el nuevo valor.

Un uso típico de la ACTUALIZACIÓN debe recuperar una fila y actualizar una o varias columnas de la fila. La recuperación será hecha usando un DONDE la cláusula que selecciona una fila por su clave primaria, el identificador único que asegurará que sólo una fila es recuperada. Entonces las columnas que son actualizadas serán cualquier columna además de la columna de clave primaria. Es muy extraño cambiar el valor de la clave primaria. La vida de una fila comienza cuando es insertada, luego puede seguir a través de varias actualizaciones, hasta que ella sea borrada. En todas partes de esta vida, esto no cambiará por lo general su clave primaria.

Para actualizar un SET de filas, use un menos restrictivo DONDE cláusula que la clave primaria. Para actualizar cada fila en una comando, no use a ninguno DONDE cláusula en absoluto. Este comportamiento de SET puede

Una select de ACTUALIZACIÓN esté desconcertante cuando esto pasa por casualidad. puede cambiar filas en sólo una comando, pero esto Si usted selecciona las filas para ser actualizadas con alguno puede cambiar cualquier número de filas en aquel columna además de la clave primaria, usted puede tabular.actualice varias filas, no sólo un. Si usted omite

EL DONDE cláusula completamente, usted actualizará

los millones de comando quizás enteros de filas actualizaron con sólo una select - cuando usted pensó cambiar sólo un.

Un comando de ACTUALIZACIÓN debe cumplir cualquier coacción definida para la comando, como el INSERCIÓN original tendría. Por ejemplo, no será posible actualizar una columna que ha sido marcada como obligatoria a un valor NULO o actualizar una columna de clave primaria de modo que ya no no sea único.

BORRAR Las filas antes insertadas pueden ser borradas de una comando con el BORRAR

comando. El comando borrará una fila o un SET de filas de la comando, según un DONDE cláusula. Si no hay DONDE cláusula, cada fila en la comando será borrada (que puede ser un poco desconcertante si usted excluyera el DONDE cláusula por equivocación).

Page 349: curso_sql_certificacion

No hay ninguna "advertencia" apremio para cualquier comando de SQL. Si usted instruye la base de datos de borrar un millón de filas, hará así. Inmediatamente. No hay nada de eso "¿Está seguro usted?" negocio que algunos entornos ofrecen.

408 Capítulo 10:

Manipulación de Datos

Una eliminación es todo o nada. No es posible denominar columnas. Cuando las filas son insertadas, usted puede elegir que columnas poblar. Cuando las filas son actualizadas, usted puede elegir que columnas actualizar. Pero una eliminación se aplica a la fila entera - la única opción es que filas en cual comando. Esto hace el BORRAR comando sintácticamente más simple que los otros comandos de DML.

FUSIÓN

Las versiones más tempranas de SQL no tenían un comando de FUSIÓN. LA FUSIÓN Fue introducida con el estándar SQL1999, puesto en práctica por el Oracle en la liberación 9i de base de datos. La liberación 10g (conformándose con el estándar SQL2003) proporciona algunos realces. Algunas realizaciones SQL patentadas tenían un comando llamado UPSERT. Esta palabra de sondeo bastante desacapable describe el comando de FUSIÓN mejor dicho bien: esto ejecuta una ACTUALIZACIÓN o un INSERCIÓN, según un poco de condición. Pero el término UPSERT es definitivamente obsoleto ahora, porque la versión actual de FUSIÓN, según circunstancias, puede hacer un BORRAR también.

Hay muchas ocasiones donde usted quiere tomar un SET de datos (la fuente) e integrarlo en una comando existente (el objetivo). Si una fila en la fuente de datos ya existe en la comando objetivo, usted puede querer actualizar la fila objetivo, o usted puede querer reemplazarlo completamente, o usted puede querer dejar la fila objetivo sin alterar. Si una fila en la fuente no existe en el objetivo, usted querrá insertarlo. El comando de FUSIÓN le deja hacer esto. Una FUSIÓN pasa por la fuente de datos, para cada fila que intenta localizar una fila correspondiente en el objetivo. Si ningún partido es encontrado, una fila puede ser insertada; si un partido es encontrado, la fila correspondiente puede ser actualizada. El realce de liberación 10g significa que la fila objetivo puede ser hasta borrada, siendo emparejado y actualizada. El resultado final es una comando objetivo en la cual los datos en la fuente han sido fusionados.

Una operación de FUSIÓN no hace nada que no pudiera ser hecho con INSERCIÓN, ACTUALIZACIÓN, y BORRAR select - pero con un pase por la fuente de datos, esto puede hacer todos los tres. El código alternativo sin una FUSIÓN requeriría tres pasa por los datos, un para cada comando.

LA FUSIÓN puede no ser importante para los exámenes OCP, pero puede ser de la vital importancia para codificar aplicaciones que funcionan bien y usan la base de datos eficazmente.

La fuente de datos para una select de FUSIÓN puede ser una comando o cualquier subpregunta. La condición usada para encontrar filas correspondientes en el objetivo es similar a un DONDE cláusula. Las cláusulas que actualizan o insertan filas son tan complejas como una ACTUALIZACIÓN o

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

409

Page 350: curso_sql_certificacion

un comando de INSERCIÓN. Resulta que la FUSIÓN es la más complicada de los comandos de DML, que es bastante razonable, ya que es (posiblemente) el más potente.

TRUNCADO El comando TRUNCADO no es un comando de DML; es el comando de DDL. La diferencia es enorme. Cuando los comandos de DML afectan datos, ellos insertan, actualizan, y borran filas como la parte de transacciones. Las transacciones son definidas más tarde en este capítulo en el artículo 10.05, "Transacciones de Control." Por el momento, déjele ser dicho que una transacción puede

sea controlado, en el sentido que el usuario tiene la opción de si hacer el trabajo hecho en una transacción permanente, o si invertirlo. Esto es muy útil, pero obliga la base de datos a hacer

Transacciones, consistiendo trabajo adicional entre bastidores que el usuario de INSERCIÓN, ACTUALIZACIÓN, y BORRAR (o no es consciente de. Los comandos de DDL no son el usuario hasta FUSIONAN) los comandos pueden ser hechos transacciones (aunque dentro de la base de datos, ellos permanente (con DESTINAR) o invertido son de hecho puestos en práctica como transacciones - pero (con un ROLLBACK).A TRUNCADO los developeres no pueden controlarlos), y allí mande, como cualquier otro comando de DDL, no es ninguna opción de si hacerlos es inmediatamente permanente: nunca puede ser permanente o invertirlos. Una vez ejecutado, invertido. ellos son hechos. Sin embargo, en comparación con

DML, ellos son muy rápidos. Desde el punto de vista del usuario, un truncamiento de una comando es equivalente a

la ejecución un BORRAR de cada fila: BORRAR mandan sin un DONDE cláusula. Pero mientras que una eliminación puede llevar tiempo (posiblemente horas, si hay muchas filas en la comando) un truncamiento pasará al instante. Esto no hace ninguna diferencia si la comando contiene una fila o mil millones; un TRUNCADO será prácticamente instantáneo. La comando todavía existirá, pero será vacío.

DDL manda, tal como TRUNCADO, fallará si hay cualquier comando de DML activo en la comando. Una transacción bloqueará el comando de DDL hasta que el comando de DML sea terminado con DESTINAR o un ROLLBACK.

Frainstancias de Select de DML Los comandos pueden fallar por muchos motivos, incluso lo siguiente:

■ Errores de sintaxis ■ Referencias a objetos inexistentes o columnas

410 Capítulo 10:

Manipulación de Datos

■ permisos de Acceso ■ violaciones de Coacción ■ cuestiones Espaciales

Como un comando de SQL puede afectar un SET de filas, hay complicación esto a el comando puede tener éxito parcialmente: el frainstancia podría ocurrir sólo algún

Page 351: curso_sql_certificacion

camino en el SET. Las tres primeras clases precedentes del error también se aplican a select SENTENCIAS.

Un objetivo de leer este libro es prevenir errores de sintaxis. Cuando ellos ocurren (y ellos van), ellos deberían ser descubiertos por el instrumento que construye el SQL para ser enviado a la base de datos: SQL*Plus o el Developer SQL si el SQL está siendo entrado interactivamente, o independientemente de otro instrumento son usados para generar un interface más sofisticado. Hay cualquier número de errores de sintaxis posibles, que comienzan con errores de ortografía simples o errores de transposición.

La gente que teclea con sólo un dedo no hace errores de transposición.

Los errores de esta naturaleza no afectarán la base de datos, porque la base de datos nunca los verá. SQL erróneo es parado en la fuente. El nivel de la ayuda el instrumento asegura la fijación de tales errores dependerá del esfuerzo que los developeres del instrumento toman.

Una select SQL puede ser sintácticamente correcta, pero referirse a objetos que no existen. Los problemas típicos deletrean errores, pero hay cuestiones más complejas: una select podría referirse a una columna que existió en algún momento, pero ha sido dejada caer de la comando o renombrada. Una select de esta naturaleza será enviada a la base de datos y fallará entonces, antes de la ejecución de tentativas de base de datos. Esto es peor para la base de datos que un error de sintaxis simple, pero la afirmación todavía es parado antes de que esto consuma cualquier recurso de base de datos significativo.

Un error relacionado tiene que ver con el reparto de tipo. SQL es una lenguaje fuertemente tecleada: las columnas son definidas como un cierto tipo de datos, y una tentativa de escribir un valor de un tipo de datos diferente fallará. Sin embargo, usted puede llevarse esto porque la realización del Oracle de SQL, en algunas circunstancias, hará el reparto de tipo automático.

La figura 10-1 muestra varias ejecuciones intentadas de una select con SQL*Plus. En la Figura 10-1, un usuario conecta como DEMANDAN (contraseña, DEMANDE - no un ejemplo de bueno

seguridad) y preguntas la comando de EMPLOYEES. La select falla debido a un error de sintaxis simple, correctamente identificado por SQL*Plus. Note que SQL*Plus nunca intenta corregir tales errores, aun cuando sabe exactamente lo que usted pensó teclear. Algunos herramientas de tercero pueden ser más provechosos, ofreciendo la corrección de errores automática.

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

411

FIGURA 10-1

Algunos ejemplos de frainstancia de select

Page 352: curso_sql_certificacion

La segunda tentativa de ejecutar la select falla con un error declarando que el objeto no existe. Esto es porque esto no existe en el esquema del usuario corriente; esto existe en el esquema de HORA. Habiendo corregido esto, la tercera carrera de la select tiene éxito - pero por poco. El valor pasó en el DONDE la cláusula es una cuerda, '21-APR-00', pero la columna HIRE_DATE no es definido en la comando como una cuerda, es definido como una fecha. Para ejecutar la select, la base de datos tuvo que calcular lo que el usuario realmente quiso decir y dé la cuerda el papel de una fecha. En el último ejemplo, el reparto de tipo falla. Esto es porque la cuerda pasó es formateado como una fecha de estilo europeo, pero la base de datos ha sido alistada como el americano: la tentativa de emparejar "21" a un mes falla. La select habría tenido éxito si la cuerda hubiera sido '04/21/2007'.

Los developeres nunca deberían confiar en el reparto de tipo automático. Es la programación muy perezosa. Ellos siempre deberían hacer cualquier reparto de tipo explícito es necesario, usando funciones apropiadas como hablado en capítulos anteriores. Si el reparto de tipo automático realmente trabaja, a lo más hay una petición de rendimiento ya que la base de datos tiene que hacer el trabajo suplementario. Esto puede ser sustancial si el reparto de tipo impide al Oracle usar índices. En este ejemplo, si hay un índice en la columna HIRE_DATE, será un índice de fechas; no hay ningún modo que la base de datos pueda usarlo cuando usted pasa una cuerda. En el peor de los instancias, el resultado será incorrecto. ¿Si la cuerda de fecha pasara en eran '04/05/2007', esto tendría éxito - pero sería el cuarto de mayo o el quinto de abril?

412 Capítulo 10:

Manipulación de Datos

El oracle intentará corregir faltas de armonía de tipo de datos en select SQL (DML y ESCOGIDO) por el reparto de tipo automático, pero los resultados son imprevisibles y ningún programador debería confiar alguna vez en ello.

Si una select es sintácticamente correcta y no tiene ningunos errores con los objetos a los cuales se refiere, todavía puede fallar debido a permisos de acceso. Si el usuario que intenta ejecutar la select no tiene los permisos relevantes en las tablas a las cuales se refiere, la base de datos devolverá un error idéntico a esto que sería devuelto si el objeto no existiera. Por lo que el usuario está preocupado, esto no existe.

Los errores causados por permisos de acceso son un instancia donde las select SENTENCIAS y DML pueden devolver resultados diferentes: es posible para un usuario tener el permiso de ver las filas en una comando, pero no insertar, actualizar, o borrarlos. Tal arreglo es bastante común; esto a menudo hace la cabeza para los negocios. Quizás de una manera más confusa, los permisos pueden ser alistados en tal

Page 353: curso_sql_certificacion

manera que es posible insertar filas que no le permiten ver. Y, quizás el peor de todos, es posible borrar filas que usted puede ver ni, ni actualizar. Sin embargo, tales medidas no son comunes.

Una coacción es una regla comercial, puesta en práctica dentro de la base de datos. Las coacciones típicas consisten en que una comando debe tener una clave primaria: un valor de una columna (o la combinación de columnas) que puede identificar únicamente cada fila. Un comando de INSERCIÓN puede insertar varias filas en una comando, y para cada fila la base de datos comprobará si una fila ya existe con la misma clave primaria. Esto ocurre ya que cada fila es insertada. Podría ser que las pocas primeras filas (o el poco primer millón de filas) entran sin un problema, y luego la select golpea una fila con un valor duplicado. A este punto esto devolverá un error, y la select fallará. Este frainstancia provocará una inversión de todas las introducciones que habían tenido éxito ya. Esto es la parte del estándar SQL: una select debe tener éxito en total, o en absoluto. La inversión del trabajo es un rollback. Los mecanismos de un rollback son descritos en la sección de este capítulo titulado "Controlando Transacciones."

Si una select falla debido a problemas espaciales, el efecto es similar. Una parte de la select puede haber tenido éxito antes de que la base de datos se quedara sin el espacio. La parte que realmente tuvo éxito será automáticamente hecha rodar atrás. Rollback de una select es un asunto serio. Esto obliga la base de datos a hacer mucho trabajo suplementario y tomará por lo general al menos mientras la select ha tomado ya (a veces mucho más largo).

OBJETIVO DE CERTIFICACIÓN 10.02

Filas de inserción en una Comando Filas de inserción en una Comando

413 La forma más simple de la select de INSERCIÓN inserta una fila en una comando,

usando los valores proveyeron en la línea como la parte del comando. La sintaxis es como sigue:

INSERCIÓN EN comando [(columna [column])] VALORES (valor [value]); Por ejemplo:

inserción en hr.regions inserción en hr.regions ('Australasia', 11); el inserción en hr.regions inserta en hr.regions

valores (10, 'Gran Bretaña'); (region_name, region_id) valores

(region_id) valores (12); valores (13, nulo);

El primer de los comandos precedentes proporciona valores a ambos las columnas

del Comando de REGIONS. Si la comando tuviera una tercera columna, la select fallaría

Page 354: curso_sql_certificacion

porque esto confía en la nota posicional. La select no dice qué valor debería ser insertado en cual columna; esto confía en la posición de los valores: su pedido en el comando. Cuando la base de datos recibe una select usando la nota posicional, emparejará el pedido de los valores al pedido en el cual las columnas de la comando son definidas. La select también fallaría si el pedido de columna fuera incorrecto: la base de datos intentaría la introducción, pero fallaría debido a faltas de armonía de tipo de datos.

El segundo comando denomina las columnas para ser pobladas y los valores con los cuales poblarlos. Note que el pedido en el cual las columnas son mencionadas ahora se hace irrelevante mientras el pedido de las columnas es el mismo como el pedido de los valores.

El tercer ejemplo pone en una lista una columna, y por lo tanto sólo un valor. Todas otras columnas serán dejadas nulas. Esta select fallaría si la columna REGION_NAME no fuera nullable. El cuarto ejemplo producirá el mismo resultado, pero porque no hay ninguna lista de columna, un valor de alguna clase debe ser proporcionado a cada columna al menos, un NULO.

A menudo se considera la práctica buena para no confiar en la nota posicional y en cambio siempre poner las columnas en una lista. Esto es más trabajo, pero hace el código auto - documentando (¡siempre una idea buena!) y también hace el código más resistente contra cambios de estructura de comando. Por ejemplo, si una columna es añadida a una comando, todas las select de INSERCIÓN que confían en la nota posicional fallarán hasta que ellos sean vueltos a escribir para incluir un NULO para la nueva columna. INSERTE el código que llama las columnas seguirá ejecutándose.

414 Capítulo 10:

Manipulación de Datos

Muy a menudo, una select de INSERCIÓN incluirá funciones para hacer el lanzamiento de tipo u otro trabajo de edición. Considere esta select:

inserción en EMPLOYEES (employee_id, last_name, hire_date) valores (1000, 'WATSON', '03-Nov-07');

en contraste con esto:

inserción en EMPLOYEES (employee_id, last_name, hire_date) valores (1000, superior ('Watson'), to_date ('03-Nov-07', 'dd-mon-yy'));

Las filas insertadas con cada select serían idénticas. Pero el primer insertará exactamente los literales proveyeron. Puede estar bien que la aplicación confía en apellidos de empleado que están en la mayúscula - sin esto, quizás clasifique pedidos será incorrecto y las búsquedas en el apellido darán resultados imprevisibles. También, la introducción del valor de fecha confía en el reparto de tipo automático de una cuerda a una fecha, que siempre es mala para el rendimiento y puede causar valores incorrectos entrados. La segunda select fuerza el apellido en la mayúscula si fue entrado así o no, y especifica exactamente la máscara de formato de la cuerda de fecha antes de convertirlo explícitamente en una fecha. No hay ninguna pregunta que la segunda select es una mejor pieza del código que el primer.

Lo siguiente es otro ejemplo de usar funciones:

Page 355: curso_sql_certificacion

inserción en EMPLOYEES (employee_id, last_name, hire_date) valores (1000 + 1, usuario, sysdate - 7);

En la select precedente, la columna EMPLOYEE_ID es poblada con el el resultado de alguna aritmética, la columna LAST_NAME es poblada con el resultado del USUARIO de función (que devuelve el nombre de entrada en el sistema de base de datos del usuario), y la columna HIRE_DATE es poblada con el resultado de una función y aritmética: la fecha siete días antes de la fecha de sistema actual.

La figura 10-2 muestra la ejecución de las tres introducciones anteriores, seguidas de una pregunta pruebas los resultados.

La utilización de funciones para pretratar valores antes de insertar filas puede ser particularmente importante ejecutando escrituras con variables de substitución, ya que ellos permitirán que el código corrija muchas de las variaciones no deseadas en la introducción de datos que puede ocurrir cuando los usuarios escriben valores interactivamente.

Para insertar muchas filas con un comando de INSERCIÓN, los valores para las filas deben venir de una pregunta. La sintaxis es como sigue:

INSERCIÓN EN comando [(columna [column])] subpregunta; Note que esta sintaxis

no usa la palabra clave de VALORES. Si la lista de columna es omitido, entonces la subpregunta debe proporcionar valores a cada columna en la comando.

Filas de inserción en una Comando

415

FIGURA 10-2

La utilización de funciones con el comando de INSERCIÓN

Para copiar cada fila de una comando al otro, si las tablas tienen la misma estructura de columna, un comando, como esto es todo que es necesario:

el inserción en regions_copy selecciona * de REGIONS;

Esto presupone que la comando REGIONS_COPY realmente existe (con o sin cualquier fila). La subpregunta SENTENCIA lee cada fila de la comando de la fuente, que es REGIONS, y el INSERCIÓN los inserta en la comando objetivo, que es REGIONS_COPY.

Page 356: curso_sql_certificacion

No hay ningunas restricciones de la naturaleza de la subpregunta. Cualquier vuelta de pregunta (finalmente) una matriz de dos dimensiones de filas; si la comando objetivo (que también es unos dos - matriz dimensional) tiene columnas para recibirlos, la introducción trabajará. Un requisito común debe presentar datos a usuarios finales en una forma que lo hará fácil para ellos a extraer la información e imposible para ellos de interpretarlo mal. Esto significará por lo general tablas relacionales denormalizing, haciendo agregaciones, renombrando columnas, y ajustando datos que pueden deformar resultados si no correctamente tratado.

Considere un instancia simple dentro del esquema de HORA: una necesidad de informar sobre la cuenta de sueldo para cada departamento. La pregunta tendrá que realizar una juntura externa llena para asegurar que cualquier empleado sin un departamento no es echado de menos, y que todos los DEPARTMENTS son puestos en una lista si ellos tienen EMPLOYEES. Esto también debería asegurar que cualquier valor nulo no deformará ninguna aritmética substituyendo ceros o cuerdas para nulls. Esta pregunta es absolutamente franca para cualquier programador SQL, pero cuando los usuarios finales intentan ejecutar esta clase de la pregunta ellos demasiado probablemente producirán resultados inexactos omitiendo

416 Capítulo 10:

Manipulación de Datos

los controles. Un trabajo de mantenimiento diario en un depósito de datos que ensamblaría los datos en una forma conveniente podría ser una escritura, como esto:

comando truncada department_salaries; inserción en department_salaries (departamento, personal, sueldos) escogido

fúndase (department_name, 'No adjudicado'), cuenta (employee_id), suma (fúndase (sueldo, 0))

de EMPLOYEES e DEPARTMENTS de juntura externos llenos d en e.department_id = d.department_id grupo por department_name piden por department_name;

El comando TRUNCADO vaciará la comando, que es poblada de nuevo entonces de la subpregunta. Los usuarios finales pueden ser dejados sueltos en esta comando, y debería ser imposible para ellos a

Cualquier select SENTENCIA, interprete mal los contenido-a simples natural especificado como una subpregunta, puede ser usado como la juntura sin SE FUNDE funciones, que la fuente de filas pasó a un INSERCIÓN. podría ser todo un usuario final haría, podría ser Esto habilita la introducción de muchas filas. muy engañoso. Haciendo todo el trabajo complejo O bien, usando la cláusula de VALORES va en la select de INSERCIÓN, los usuarios pueden ejecutar entonces el inserción una fila. Los valores pueden ser literales preguntas mucho más simples contra el denormalized o apremio para como variables de substitución. y datos agregados en el cuadro resumen.

Sus preguntas serán rápidas, también: todo el trabajo duro ha sido hecho ya.

Para concluir la descripción del comando de INSERCIÓN, hay que mencionar que es posible insertar filas en varias tablas con una select. Esto no es la parte del SQL OCP examen, pero para el completo aquí está un ejemplo:

Page 357: curso_sql_certificacion

inserte todos cuando 1=1 entonces en emp_no_name (department_id,job_id,salary,commission_pct,hire_date) valores (department_id,job_id,salary,commission_pct,hire_date)

cuando department_id <> 80 entonces en emp_non_sales (employee_id,department_id,salary,hire_date) valores (employee_id,department_id,salary,hire_date)

cuando department_id = 80 entonces en emp_sales (employee_id,salary,commission_pct,hire_date) valores (employee_id,salary,commission_pct,hire_date)

seleccione employee_id,department_id,job_id,salary,commission_pct,hire_date de EMPLOYEES donde hire_date> sysdate - 30;

Filas de inserción en una Comando

417

Para leer esta select, comience en el fondo. La subpregunta recupera a todos los EMPLOYEES reclutados en los 30 días anteriores. Entonces vaya a la cumbre. TODA la palabra clave significa que cada fila seleccionada será considerada para la introducción en todas las tablas después, no sólo en la primera comando para la cual la condición se aplica. La primera condición es 1=1, que siempre es verdad, entonces cada fila de la fuente creará una fila del NOMBRE de EMP_NO_. Esto es una copia de la comando de EMPLOYEES con los identificadores personales borrados, un requisito común en un depósito de datos. La segunda condición es DEPARTMENT_ID <> 80, que generará una fila en EMP_NON_SALES para cada empleado que no está en el departamento de ventas; no hay ninguna necesidad de esta comando para tener la columna COMMISSION_PCT. La tercera condición genera una fila en EMP_SALES para todos los dependientes; no hay ninguna necesidad de la columna DEPARTMENT_ID, porque ellos estarán todos en la oficina 80.

Esto es un ejemplo simple de un inserción de multicomando, pero debería ser aparente que con una select, y por lo tanto sólo un pase por la fuente de datos, es posible poblar muchas tablas objetivo. Esto puede tomar una cantidad enorme de la tensión de la base de datos.

EJERZA 10-1 Uso el Comando de INSERCIÓN En este ejercicio, use varias técnicas para insertar filas en una comando.

1. Conecte al esquema de HORA, con el Developer SQL o con SQL*Plus. 2. Pregunte la comando de REGIONS, para comprobar que valores están ya en el uso para el

Columna de REGION_ID:

seleccione * de REGIONS;

Este ejercicio supone que los valores encima 100 no estén en el uso. Si ellos son,

se adaptan los valores sugeridos abajo para evitar conflictos de clave primaria.

3. Inserte una fila en la comando de REGIONS, proporcionando los valores en la línea:

inserción en valores de REGIONS (101, 'Gran Bretaña');

Page 358: curso_sql_certificacion

4. Inserte una fila en la comando de REGIONS, proporcionando los valores como

la substitución

variables:

inserción en valores de REGIONS (&Region_number, '&Region_name');

418 Capítulo 10:

Manipulación de Datos

Cuando apremio, dé los valores 102 para el número, Australasia para el nombre. Note el uso de citas alrededor de la cuerda.

5. Inserte una fila en la comando de REGIONS, calculando el REGION_ID para ser un más alto que el valor alto corriente. Esto necesitará una subpregunta escalar:

el inserción en valores de REGIONS ((seleccionan el máximo (region_id) +1 de REGIONS), 'Oceanía');

6. Confirme la introducción de las filas:

seleccione * de REGIONS;

7. Destine las introducciones:

destine;

La ilustración siguiente muestra los resultados del ejercicio, usando SQL*Plus:

OBJETIVO DE CERTIFICACIÓN 10.03

Filas de actualización en una Comando Filas de actualización en una Comando

419 El comando de ACTUALIZACIÓN cambia valores de columna en una o varias filas

existentes en a comando sola. La sintaxis básica es lo siguiente:

SET de comando de ACTUALIZACIÓN column=value [column=value] [DONDE

condición]; La forma más compleja del comando usa subconsultas por su parte o más

del valores de columna y para el DONDE condición. La figura 10-3 muestra actualizaciones de la complejidad variada, ejecutada de SQL*Plus.

El primer ejemplo es el más simple. Una columna de una fila es puesta a un valor literal. Como la fila es elegida con un DONDE la cláusula que usa el predicado de

Page 359: curso_sql_certificacion

igualdad en la clave primaria de la comando, hay una garantía absoluta que como máximo sólo una fila será afectada. Ninguna fila será cambiada si el DONDE la cláusula deja de encontrar cualquier fila en absoluto.

El segundo ejemplo muestra el uso de la aritmética y una columna existente para poner el nuevo valor, y la selección de fila no es hecha en la columna de clave primaria. Si la selección no es hecha en la clave primaria, o si un predicado de no igualdad (tal como ENTRE) es

FIGURA 10-3

Ejemplos de usar la select de ACTUALIZACIÓN

420 Capítulo 10:

Manipulación de Datos

usado, entonces el número de filas actualizadas puede ser más de un. Si el DONDE la cláusula es omitida completamente, la actualización será aplicada a cada fila en la comando.

El tercer ejemplo en la Figura 10-3 introduce el uso de una subpregunta para definir el SET de filas para ser actualizadas. Una complicación adicional menor es el uso de una variable de reemplazo para apremio al usuario para un valor para usar en el DONDE la cláusula de la subpregunta. En este ejemplo, la subpregunta (líneas 3 y 4) seleccionará a cada empleado que está en un departamento cuyo nombre incluye la cuerda 'ESTO' e incremente su sueldo corriente en el 10 por ciento (con poca probabilidad para pasar en la práctica).

También es posible usar subconsultas para determinar el valor al cual una columna será puesta, como en el cuarto ejemplo. En este instancia, un empleado (identificado por la clave primaria, en la línea 5) es transferido a la oficina 80 (el departamento de ventas), y luego la subpregunta en líneas 3 y 4 puso su precio de comisión a lo que el precio de comisión más bajo en el departamento resulta ser.

La sintaxis de una actualización que usa subconsultas es como sigue:

Columna de SET de comando de ACTUALIZACIÓN = [subpregunta]

[column=subquery] DONDE columna = (subpregunta) [Y column=subquery]; hay una

restricción rígida de las subconsultas usando columnas de actualización en el SET cláusula: la subpregunta debe devolver un valor escalar. Un valor escalar es un valor solo de cualquier tipo de datos es necesario: la pregunta debe devolver una fila, con una columna. Si la pregunta devuelve varios valores, la ACTUALIZACIÓN fallará. Considere estos dos ejemplos:

actualice el sueldo de SET de EMPLOYEES = (sueldo escogido de EMPLOYEES donde employee_id=206); actualice el sueldo de SET de EMPLOYEES = (sueldo escogido de EMPLOYEES donde last_name =' Abel');

El primer ejemplo, usando un predicado de igualdad en la clave primaria, siempre va tener éxito. Aun si la subpregunta no recupera una fila (como sería el instancia si no hubiera ningún empleado con el EMPLOYEE_ID igual a 206), la pregunta todavía

Page 360: curso_sql_certificacion

devolverá un valor escalar: un nulo. En este instancia, todas las filas en EMPLOYEES harían poner su SUELDO AL NULO - que no podría ser deseado, pero no es un error por lo que SQL está referido. El segundo ejemplo usa un predicado de igualdad en el LAST_NAME, que no es garantizado para ser único. La select tendrá éxito si hay sólo un empleado con aquel nombre, pero si hubiera más de un esto fallaría con el error "ORA-01427: la subpregunta de fila sola devuelve más de una fila." Para el código que trabajará de fuentes fidedignas, pase lo que pase el estado de los datos, es esencial asegurar que las subconsultas usadas para poner valores de columna son el escalar.

Filas de actualización en una

Comando

421

Un apuro común para asegurarse que las preguntas son el escalar debe usar a MAX o minuto. Esta versión de la select siempre tendrá éxito:

actualice el sueldo de SET de EMPLOYEES = (máximo escogido (sueldo) de EMPLOYEES donde last_name =' Abel');

Sin embargo, sólo porque esto trabajará, no necesariamente significa que esto

hace que es querido.

Las subconsultas en el DONDE la cláusula también debe ser el escalar, si esto usa el predicado de igualdad (como en los ejemplos precedentes) o el mayor/menos que predicados. Si esto usa el EN el predicado, entonces la pregunta puede devolver filas múltiples, como en este ejemplo que usa EN:

actualice salary=10000 de SET de EMPLOYEES donde department_id en (seleccionan department_id de DEPARTMENTS donde department_name como '%IT %');

Esto aplicará la actualización a todos los EMPLOYEES en un departamento cuyo

nombre incluye la cuerda 'ESTO'. Hay varios de éstos. Pero aunque la pregunta pueda devolver varias filas, todavía debe devolver sólo una columna.

Las subconsultas solían PONERSE los valores de columna deben ser subconsultas escalares. Las subconsultas solían seleccionar las filas

EJERZA 10-2 Uso el Comando de ACTUALIZACIÓN

también debe ser el escalar, a menos que ellos usen el EN el predicado. En este ejercicio, use varias técnicas para actualizar filas en una comando. Se supone

Page 361: curso_sql_certificacion

que la comando HR.REGIONS es como vista en la ilustración al final de Ejercicio 10-1. Si no, ajuste los valores si es necesario.

1. Conecte al esquema de HORA usando al Developer de SQL o SQL*Plus. 2. Actualice una fila sola, identificada por la clave primaria:

las REGIONS de actualización ponen region_name ='Scandinavia' donde

region_id=101;

422 Capítulo 10:

Manipulación de Datos

Esta select debería devolver el mensaje "1 fila actualizada." 3. Actualice un SET de filas, usando un predicado de no igualdad:

las REGIONS de actualización ponen region_name ='Iberia' donde region_id> 100;

Esta select debería devolver el mensaje "3 filas actualizadas."

4. Actualice un SET de filas, usando subconsultas para seleccionar las filas y proporcionar valores:

REGIONS de actualización el SET region_id = (region_id + (seleccionan el máximo (region_id) de REGIONS)) donde region_id en (seleccionan region_id de REGIONS donde region_id> 100);

Esta select debería devolver el mensaje "3 filas actualizadas."

5. Confirme el estado de las filas:

seleccione * de REGIONS;

6. Destine los cambios hechos:

destine;

La ilustración siguiente muestra el ejercicio, como hecho de SQL*Plus.

OBJETIVO DE CERTIFICACIÓN 10.04

Borre Filas de una Comando Borre Filas de una Comando

423 Para borrar filas de una comando, hay dos opciones: BORRAR mandan y el Comando TRUNCADO. BORRAR es menos drástico, en que puede hacerse rodar una eliminación atrás mientras que un truncamiento no puede ser. BORRAR también es más controlable, en que es posible elegir qué filas borrar, mientras que un truncamiento siempre afecta la comando entera. BORRAR es, sin embargo, mucho más despacio y puede colocar mucha tensión en la base de datos. TRUNCADO es prácticamente

Page 362: curso_sql_certificacion

instantáneo y sin esfuerzo alguno.

Borrar Filas con BORRAR BORRAR comandos borra filas de una comando sola. La sintaxis es como sigue:

BORRAR DE comando [DONDE condición]; Esto es el más simple de los comandos

de DML, en particular si la condición es omitida. En este instancia, cada fila en la comando será borrada sin apremio. La única complicación está en la condición. Esto puede ser un partido simple de una columna a un literal:

borrar de EMPLOYEES donde employee_id=206; borrar de EMPLOYEES donde last_name como 'S %'; borrar de EMPLOYEES donde department_id=&Which_department; borrar de EMPLOYEES donde el department_id es nulo;

La primera select identifica una fila por la clave primaria. Una fila sólo será borrada - o ninguna fila en absoluto, si el valor dado no encuentra un partido. La segunda select usa un predicado de no igualdad que podría causar la eliminación de muchas filas: cada empleado cuyo apellido comienza con una mayúscula "S". La tercera select usa un predicado de igualdad, pero no en la clave primaria. Esto apremio para un número de departamento con una variable de substitución, y todos los EMPLOYEES en aquel departamento irán. La select final borra a todos los EMPLOYEES que no son adjudicados actualmente a un departamento.

La condición también puede ser una subpregunta:

borre de EMPLOYEES donde department_id en (seleccionan department_id de DEPARTMENTS donde location_id en (seleccione location_id de LOCATIONS donde country_id en

(seleccione country_id de COUNTRIES donde region_id en (seleccione region_id de REGIONS donde region_name ='Europe')

))

)

424 Capítulo 10:

Manipulación de Datos

Este ejemplo usa una subpregunta para la selección de fila que navega la HORA árbol

Page 363: curso_sql_certificacion

geográfico (con más subconsultas) para borrar a cada empleado que trabaja para cualquier departamento que esté basado en Europa. La misma regla para el número de valores devueltos por la subpregunta se aplica en cuanto a un comando de ACTUALIZACIÓN: si la selección de fila está basada en un predicado de igualdad (como en el ejemplo precedente) la subpregunta debe ser el escalar, pero si esto usa EN la subpregunta puede devolver varias filas.

Si BORRAR el comando no encuentra ningunas filas borrando, esto no es un error. El comando devolverá el mensaje "0 filas borradas", más bien que un mensaje de error porque la select completó con éxito - esto sólo no encontró nada haciendo.

EJERZA 10-3 Uso el BORRAR Comando En este ejercicio, use varias técnicas para borrar filas en una comando. Es asumido

esto la comando HR.REGIONS es como vista en la ilustración al final de Ejercicio 10-2. Si no, ajuste los valores si es necesario.

1. Conecte al esquema de HORA usando al Developer de SQL o SQL*Plus. 2. Borre una fila, usando el predicado de igualdad en la clave primaria:

borre de REGIONS donde region_id=204;

Esto debería devolver el mensaje "1 fila borrada."

3. Tentativa de borrar cada fila en la comando omitiendo un DONDE cláusula:

borre de REGIONS;

Esto fallará, debido a una violación de coacción.

4. Borre filas con la selección de fila basada en una subpregunta:

borre de REGIONS donde el region_id en (seleccionan region_id de REGIONS donde region_ llaman ='Iberia');

Esto devolverá el mensaje "2 filas borradas."

5. Confirme que la comando de REGIONS ahora contiene sólo las cuatro filas

originales:

seleccione * de REGIONS;

6. Destine la eliminación:

destine;

Borre Filas de una Comando

La ilustración siguiente muestra el ejercicio, como hecho de SQL*Plus:

425

Page 364: curso_sql_certificacion

Borrar Filas con TRUNCADO TRUNCADO es un DDL (Lenguaje de Definición de Datos) comando. Esto funciona

dentro de el diccionario de datos y afecta la estructura de la comando, no los contenido de la comando. Sin embargo, el cambio que esto hace a la estructura tiene el efecto secundario de destruir todas las filas en la comando.

Una parte de la definición de una comando como almacenado en el diccionario de datos es la posición física de la comando. Cuando primero creado, una comando es asignada

TRUNCADO completamente los ficheros de datos de la base de datos. Esto es

conocido ya que un grado vacía la comando. No hay ningún concepto de y será vacío.

Entonces, ya que las filas son insertadas, selección de fila, ya que hay con un BORRAR. el grado

se llena. Una vez que está lleno, más grados

será asignado a la comando automáticamente. un área sola de espacio, de talla fija, en el

Una comando por lo tanto consiste en uno o varios grados, que sostienen las filas. Así como rastreando la asignación de grado, el diccionario de datos también rastrea cuanto del espacio asignado a la comando ha sido usado. Esto es hecho con la señal de pleamar. La señal de pleamar es la última posición en el último grado que ha sido usado; todo el espacio abajo

426 Capítulo 10:

Manipulación de Datos

Page 365: curso_sql_certificacion

la señal de pleamar ha sido usada para filas en algún momento, y ninguno del espacio encima de la señal de pleamar aún ha sido usado.

Note que es posible para allí ser mucho espacio debajo de la señal de pleamar que no está siendo usada en este momento; esto es debido a filas que han sido borradas con un BORRAR comando. Insertar filas en una comando hace subir la señal de pleamar. Borrarlos deja la señal de pleamar donde es; el espacio que ellos ocuparon permanece adjudicado a la comando, pero es liberado para insertar más filas.

El truncamiento de una comando reinicializa la señal de pleamar. Dentro del diccionario de datos, la posición registrada de la señal de pleamar es movida al principio del primer grado de la comando. Como el Oracle supone que no puedan haber ningunas filas encima de la señal de pleamar, esto tiene el efecto de borrar cada fila de la comando. La comando es vaciada y permanece vacía hasta que las introducciones subsecuentes comiencen a empujar el apoyo de señal de pleamar otra vez. En esta manera, un comando de DDL, que realmente hace poco más que una actualización en el diccionario de datos, puede aniquilar mil millones de filas en una comando.

Un truncamiento es rápido: prácticamente instantáneo, independientemente de si la comando tiene muchos millones de filas o ninguno. Una eliminación puede tomar segundos, minutos, horas - y coloca mucho más tensión en la base de datos que un truncamiento. Pero un truncamiento es todo o nada.

La sintaxis para truncar una comando no podía ser más simple:

Comando de COMANDO TRUNCADA; la Figura 10-4 muestra el acceso al comando

TRUNCADO por el SQL Árbol de navegación de developer, pero por supuesto también puede ser ejecutado de SQL*Plus.

FUSIÓN

El comando de FUSIÓN a menudo no es ignorado, porque no hace nada que no pueda ser hecho con INSERCIÓN, ACTUALIZACIÓN, y BORRAR. Es, sin embargo, muy potente, en esto con un pase por los datos esto puede realizar tres operaciones. Esto puede mejorar el rendimiento dramáticamente. El uso de la FUSIÓN no está en el programa de estudios OCP, pero para el completo aquí está un ejemplo simple:

fusión en EMPLOYEES e usando new_employees n en (e.employee_id = n.employee_id)

cuando emparejado entonces actualice pone e.salary=n.salary

cuando no emparejado entonces inserción (employee_id, last_name, sueldo) valores (n.employee_id, n.last_name, n.salary);

Transacciones de control

427

FIGURA 10-4

Page 366: curso_sql_certificacion

El comando TRUNCADO en Developer SQL, de la línea de comandos y de los menús

La select precedente usa los contenido de una comando NEW_EMPLOYEES para actualizar o insertar filas en EMPLOYEES. La situación podría consistir en que los EMPLOYEES son una comando de todo el personal, y NEW_EMPLOYEES es una comando con filas para el nuevo personal y para cambios de sueldo por el personal existente. El comando pasará por EMPLOYEES NEW_, y para cada fila, intentará encontrar una fila en EMPLOYEES con mismo EMPLOYEE_ID. Si hay una fila encontrada, su columna de SUELDO será actualizada con el valor de la fila en NEW_EMPLOYEES. Si no hay tal fila, uno será insertado. Las variaciones en la sintaxis permiten que el uso de una subpregunta seleccione las filas de la fuente, y es hasta posible borrar filas correspondientes.

OBJETIVO DE CERTIFICACIÓN 10.05

Transacciones de control Los conceptos detrás de una transacción son una parte del paradigma de base de datos

relacional. Una transacción consiste en una o varias select DML, seguidas de un ROLLBACK o de un comando DESTINAR. Es el uso posible el SAVEPOINT

428 Capítulo 10:

Manipulación de Datos

comando de dar un nivel de control dentro de la transacción. Antes de entrar en la sintaxis, es necesario examinar el concepto de una transacción. Los temas relacionados son el consecuencia leído; esto es automáticamente puesto en práctica por el servidor de Oracle, pero hasta cierto punto los programadores pueden manejarlo a propósito ellos usan la select SENTENCIA.

Page 367: curso_sql_certificacion

Transacciones de base de datos Esto no es el lugar para entrar en el detalle de la base de datos relacional transaccional el paradigma allí es cualquier número de textos académicos en esto, y no hay el espacio para cubrir este tema en un guía práctico. Lo siguiente es una revisión rápida de algunos principios de una base de datos relacional con la cual todas las bases de datos (no sólo el Oracle) deben conformarse. Otros vendedores de base de datos cumplen con los mismos estándares con sus propios mecanismos, pero con niveles variados de la eficacia. En resumen, cualquier base de datos relacional debe ser capaz de pasar la Prueba de fuego: esto debe garantizar atomicity, consecuencia, aislamiento, y durabilidad.

A es para Atomicity El principio de atomicity declara que todas las partes de una transacción deben completar o ninguno de ellos. (El razonamiento detrás del término consiste en que un átomo no puede ser partido ahora famoso de ser una asunción falsa). Por ejemplo, si sus analistas comerciales han dicho que cada vez usted cambia el sueldo de un empleado usted también debe cambiar el grado del empleado, entonces la transacción atómica consistirá en dos actualizaciones. La base de datos debe garantizar que ambos pasan o ninguno. Si sólo una de las actualizaciones debiera tener éxito, usted tendría un empleado en un sueldo que era incompatible con su grado: una corrupción de datos, en términos comerciales. Si algo (¡algo en absoluto!) se equivoca antes de que la transacción sea completa, la base de datos sí mismo debe garantizar que cualquier parte que realmente pasara es invertida; esto debe pasar automáticamente. Pero aunque una transacción atómica parezca pequeña (como un átomo), puede ser enorme. Para tomar otro ejemplo, es lógicamente imposible para una suite de la contabilidad el libro mayor nominal ser la mitad en agosto y la mitad en septiembre: el aplazamiento de final del mes es por lo tanto (en términos comerciales) una transacción atómica, que puede afectar millones de filas en miles de tablas y tomar horas para completar (o rodar atrás, si algo se equivoca). El rollback de una transacción incompleta puede ser manual (como cuando usted publica el comando de ROLLBACK), pero debe ser automático e imparable en instancia de un error.

C es para Consecuencia Transacciones de control

429 El principio de consecuencia declara que los resultados de una pregunta deben ser consecuentes con el estado de la base de datos entonces la pregunta comenzó. Imagine una pregunta simple que hace un promedio del valor de una columna de una comando. Si la comando es grande, se necesitarán muchos minutos para pasar por la comando. ¿Si otros usuarios actualizan la columna mientras la pregunta está en el progreso, debería la pregunta incluir el nuevo o los viejos valores? ¿Debería esto incluir filas que fueron insertadas o borradas después de que la pregunta comenzó? El principio de consecuencia requiere que la base de datos asegure que los valores cambiados no son vistos por la pregunta; esto le dará un promedio de la columna como era cuando la pregunta comenzó, no importa cuanto la pregunta toma o lo que otra actividad ocurre en las tablas referidas. El oracle garantiza que si una pregunta tiene éxito, el resultado será consecuente. Sin embargo, si el administrador de base de datos no ha configurado la base de datos apropiadamente, la

Page 368: curso_sql_certificacion

pregunta puede no tener éxito: hay un error de Oracle famoso, "la foto ORA-1555 demasiado vieja," esto es levantado. Esto solía ser un problema muy difícil de fijar con liberaciones más tempranas de la base de datos, pero con versiones recientes el administrador de base de datos siempre debería ser capaz de prevenir esto.

Soy para el Aislamiento El principio de aislamiento declara que un incompleto (es decir no comprometido) la transacción debe ser invisible para el resto del mundo. Mientras la transacción está en el progreso, sólo una sesión que ejecuta la transacción es permitida ver los cambios; todas otras sesiones deben ver los datos sin alterar, no los nuevos valores. La lógica detrás de esto es primera, que la transacción llena no podría pasar (¿recuerde el principio de atomicity y rollback automático o manual?) y esto por lo tanto a ningunos otros usuarios deberían permitirles ver cambios que podrían ser invertidos. Y en segundo lugar, durante el progreso de una transacción los datos son (en términos comerciales) incoherentes: hay un poco tiempo cuando el empleado ha hecho cambiar su sueldo, pero no su grado. El aislamiento de transacción requiere que la base de datos debiera ocultar transacciones en el progreso de otros usuarios: ellos verán la versión de preactualización de los datos hasta que la transacción complete, cuando ellos verán todos los cambios como un conjunto coherente. El oracle garantiza el aislamiento de transacción: no hay ningún modo que cualquier sesión (además de aquella fabricación de los cambios) pueda ver datos no comprometidos. Un leído de datos no comprometidos es conocido como un sucio leído, qué Oracle no permite (aunque algunas otras bases de datos hagan).

El D es para el Duradero El principio de durabilidad declara que una vez que una transacción completa, debe ser imposible para la base de datos perderlo. Durante el tiempo que la transacción está en el progreso, el principio de aislamiento no requiere que nadie (además de la sesión

430 Capítulo 10:

Manipulación de Datos

referido) puede ver los cambios que esto ha hecho hasta ahora. Pero el instante que la transacción completa, debe ser transmitida al mundo, y la base de datos debe garantizar que el cambio nunca es perdido; una base de datos relacional no es permitida perder datos. El oracle realiza este requisito por escribir todos los vectores de cambio que son aplicados a datos a registros de actividades ya que los cambios son hechos. Aplicando este registro de cambios en copias de seguridad tomadas antes, es posible repetir cualquier trabajo hecho en instancia de la base de datos dañada. Por supuesto, los datos pueden ser perdidos por el error de usuario, como DML inadecuado, o tablas que se caen o truncan. Pero por lo que el Oracle y el DBA están referidos, tales acontecimientos son transacciones como cualquiera otro: según el principio de durabilidad, ellos son absolutamente no reversibles.

El Principio y el Final de una Transacción Una sesión comienza una transacción el momento esto publica cualquier INSERCIÓN, ACTUALIZACIÓN, o BORRAR select (pero no un TRUNCADO - que es un comando de DDL, no DML). La transacción sigue por cualquier número de adelante comandos de DML hasta que la sesión publique DESTINAR o una select ROLLBACK. Sólo entonces van los cambios ser hechos permanentes y hacerse visibles a otras sesiones (si es destinado, más bien que rodara atrás). Es imposible anidar transacciones. El estándar SQL no permite que

Page 369: curso_sql_certificacion

un usuario comience una transacción y luego comience al otro antes de terminar el primer. Esto puede ser hecho con PL/SQL (El tercero patentado del oracle - lenguaje de generación), pero no con SQL estándar por la industria. Las select de control de transacción explícitas son DESTINAN, ROLLBACK, y SAVEPOINT. También hay las circunstancias además de un publicado por el usuario DESTINAN o ROLLBACK que terminará implícitamente una transacción:

■ Publicación de un DDL o select DCL ■ Saliendo del instrumento de usuario (SQL*Plus o Developer SQL o algo más) ■ Si la sesión de cliente muere ■ Si el sistema se estrella

Si un usuario resulta un DDL (CREE, CAMBIE, o GOTA) o DCL (SUBVENCIÓN o REVOQUE) el comando, la transacción que él tiene en el progreso (si alguno) será destinado: será hecho permanente y hacerse visible a todos otros usuarios. Esto es porque el DDL y los comandos de DCL son transacciones. Si fuera posible ver el código fuente para estos comandos, sería obvio. Ellos ajustan las estructuras de datos realizando comandos de DML contra las tablas que arreglan el diccionario de datos,

Transacciones de control

431

y estos comandos son terminados con DESTINAR. Si ellos no fueran, los cambios hechos no podían ser garantizados para ser permanentes. Como no es posible en SQL anidar transacciones, si el usuario ya tiene una transacción ejecutarse, las select que el usuario ha ejecutado serán destinadas junto con las select que arreglan el comando de DCL o el DDL.

Si un usuario comienza una transacción publicando un comando de DML y luego sale del instrumento él usa sin publicar explícitamente DESTINAR o un ROLLBACK, la transacción se terminará - pero si esto se termina con DESTINAR o un ROLLBACK es completamente dependiente de como el instrumento es escrito. Muchos herramientas tendrán el comportamiento diferente, según como salen del instrumento. (Por ejemplo, en el entorno de Microsoft Windows, es común ser capaz de terminar un programa seleccionando el Archivo | opciones de Salida de un menú en la cumbre dejada de la ventana, o haciendo clic "un X" en la esquina correcta superior. Los programadores que escribieron el instrumento pueden haber codificado bien la lógica diferente en estas funciones.) En el uno o el otro instancia, será una salida controlada, entonces los programadores deberían publicar DESTINAR o un ROLLBACK, pero la opción es hasta ellos.

Si la sesión de un cliente falla por la razón que sea, la base de datos siempre hará rodar atrás la transacción. Tal frainstancia podría ser por varias razones: el proceso de usuario puede morir o ser matado al nivel de sistema operativo, la conexión de red con el servidor de base de datos puede disminuir, o la máquina donde el instrumento de cliente se ejecuta puede estrellarse. En cualquier de estos instancias, no hay ninguna cuestión comandoada de DESTINAR o select ROLLBACK, y es hasta la base de datos para descubrir lo que ha pasado. El comportamiento consiste en que la sesión es matada, y se hace rodar una transacción activa atrás. El comportamiento es el mismo si el frainstancia está en el lado de servidor. Si el servidor de base de datos se estrella por cualquier motivo, cuando después inicializa todas las transacciones de cualquier sesión que estuviera en el progreso será hecho rodar atrás.

Page 370: curso_sql_certificacion

Las Select de Control de Transacción Una transacción comienza implícitamente con la primera select DML. No hay ningún

comando comenzar explícitamente una transacción. La transacción sigue por todas las select DML subsecuentes publicadas por la sesión. Estas select pueden estar contra cualquier número de tablas: una transacción no es restringida a una comando. Esto se termina (excluyendo cualquier de los acontecimientos puestos en una lista en la sección anterior) cuando las cuestiones a de sesión DESTINAN u comando de ROLLBACK. El comando de SAVEPOINT puede ser usado para poner marcadores que organizarán la acción de un ROLLBACK, pero la misma transacción permanece en el progreso independientemente del uso de SAVEPOINT.

432 Capítulo 10:

Manipulación de Datos

DESTINE Sintácticamente, DESTINE es el comando de SQL más simple. La sintaxis es como sigue:

DESTINE; Esto terminará la transacción corriente, que tiene el efecto dual de la fabricación

los cambios tanto permanentes como visibles a otras sesiones. Hasta que una transacción sea destinada, no puede ser visto por ninguna otra sesión, aun si ellos son entrados en el sistema a la base de datos con el mismo nombre de usuario que aquella de la sesión ejecutando las transacciones. Hasta que una transacción sea destinada, es invisible para otras sesiones y puede ser invertido. Pero una vez que es destinado, es absolutamente no reversible. El principio de durabilidad se aplica. Todos los administradores de base de datos temen una llamada telefónica a lo largo de estas líneas:

Usuario: acabo de borrar un millón de filas en vez de uno. DBA: ¿Cómo? Usuario: Como olvidé de poner un DONDE cláusula en mi BORRAR select. DBA: ¿usted dice DESTINAN? Usuario: Por supuesto. DBA: Um El estado de los datos antes de DESTINAR es que los cambios han sido hechos,

pero todas las sesiones además del que que hizo los cambios son desviadas a copias de los datos en su forma precambiada. Tan si la sesión ha insertado filas, otras sesiones que SELECCIONAN de la comando no los verán. Si la transacción ha borrado filas, otras sesiones seleccionar de la comando todavía los verán. Si la transacción ha hecho actualizaciones, serán las versiones no actualizadas de las filas que son presentadas a otras sesiones. Esto es de acuerdo con el principio de aislamiento: ninguna sesión puede ser de cualquier modo el dependiente en el estado de una transacción no comprometida.

Después de DESTINAR, todas las sesiones verán inmediatamente los nuevos datos en cualquier pregunta que ellos publiquen: ellos verán las nuevas filas, ellos no verán las filas borradas, ellos verán las nuevas versiones de las filas actualizadas. En instancia de la conversación hipotética sólo hablada, un momento las preguntas de otras sesiones verán

Page 371: curso_sql_certificacion

millones de filas en la comando; el siguiente será vacío. Esto es de acuerdo con el principio de durabilidad.

ROLLBACK Transacciones de control

433 Mientras una transacción está en el progreso, el Oracle guarda una imagen de los datos como era antes de la transacción. Esta imagen es presentada a otras sesiones que preguntan los datos mientras la transacción está en el progreso. Esto también es usado para rodar apoyan la transacción automáticamente si algo se equivoca, o deliberadamente si la sesión lo solicita. La sintaxis para solicitar un rollback es como sigue:

ROLLBACK [A SAVEPOINT savepoint]; El uso opcional de savepoints es detallado

en la sección después. El estado de los datos antes del rollback es que los datos han sido cambiados, pero

la información tenía que poner marcha atrás los cambios está disponible. Esta información es presentada a todas otras sesiones, a fin de poner en práctica el principio de aislamiento. El rollback desechará todos los cambios restaurando la imagen de precambio de los datos; cualquier fila la transacción insertada será borrada, rema la transacción borrada será insertada atrás en la comando, y cualquier fila que fuera actualizada será devuelta a su estado original. Otras sesiones no serán conscientes que algo ha pasado en absoluto; ellos nunca vieron los cambios. La sesión que hizo la transacción verá ahora los datos como era antes de que la transacción comenzara.

DESTINAR es instantáneo, porque realmente no tiene que hacer nada. El trabajo ha sido hecho ya. Un ROLLBACK puede ser muy lento: esto tomará por lo general como mucho tiempo (si no más largo) para invertir una transacción que esto tomó para hacer los cambios en primer lugar. Rollbacks no están bien para el rendimiento de base de datos.

EJERZA 10-4 Uso Comandos de ROLLBACK y DESTINAR En este ejercicio, demuestre el uso de select de control de transacción y transacción aislamiento. Se supone que la comando HR.REGIONS es como vista en la ilustración al final de Ejercicio 10-3. Si no, ajuste los valores si es necesario. Conecte al esquema de HORA con dos sesiones simultáneamente. Éstos pueden ser dos sesiones SQL*Plus o dos sesiones de Developer SQL o uno de cada uno. Las listas de comando siguientes andan para seguir en cada sesión.

434 Capítulo 10:

Manipulación de Datos

Paso En su primera sesión En su segunda sesión

Page 372: curso_sql_certificacion

1 seleccione * de REGIONS; seleccione * de REGIONS;

Ambas sesiones ven los mismos datos.

2 inserción en REGIONS inserción en REGIONS valores (100, 'el Reino Unido'); valores (101, 'gigabyte');

3 seleccione * de REGIONS; seleccione * de REGIONS;

Ambas sesiones ven resultados diferentes: los datos originales, más su propio

cambio.

4 destine; 5 seleccione * de REGIONS; seleccione * de

REGIONS;

Una transacción ha sido publicada al mundo, el otro todavía es visible a sólo una sesión.

6 rollback; rollback; 7 seleccione * de REGIONS;

seleccione * de REGIONS;

La transacción comprometida no fue invertida porque ha sido destinada ya, pero el no comprometido uno es completamente ido ahora, habiendo sido terminado rodando apoya el cambio.

8 borre de REGIONS donde borre de REGIONS donde region_id=100; region_id=101;

9 seleccione * de REGIONS; seleccione * de REGIONS;

Cada fila borrada todavía es visible en la sesión que no la borró, hasta que usted haga lo siguiente:

10 destine; destine; 11 seleccione * de REGIONS;

seleccione * de REGIONS;

Con todas las transacciones terminadas, ambas sesiones ven una vista consecuente de la comando.

SAVEPOINT El uso de savepoints debe permitir que un programador liste un marcador en una transacción que puede ser usada para controlar el efecto del comando de ROLLBACK. Más bien que rodar apoyan la transacción entera y terminación de ello, se hace posible invertir todos los cambios hechos después de un punto particular, pero cambios de permiso hechos antes de aquel punto intacto. La transacción sí mismo permanece en el progreso: todavía no comprometido, todavía rollbackable, y todavía invisible para otras sesiones.

La sintaxis es como sigue: SAVEPOINT savepoint; Transacciones de control

435

Esto crea un punto llamado en la transacción que puede ser usada en un comando de ROLLBACK subsecuente. La comando siguiente ilustra el número de filas en una comando en varias etapas en una transacción. La comando es una comando muy simple llamada la PALETA, con una columna.

Comando

paleta de comando truncada; inserción en valores de paleta ('un'); savepoint primero;

inserción en valores de paleta ('dos'); savepoint segundo; inserción en valores de

Page 373: curso_sql_certificacion

paleta ('tres'); rollback a segundo savepoint; rollback a savepoint primero; destine;

borre de la paleta; rollback;

Filas Visibles al Usuario

01122321101

Filas Visibles a Otros

00000000111

El ejemplo en la comando muestra dos transacciones: el primer terminado con DESTINAR, el segundo con un ROLLBACK. Puede verse que el uso de savepoints sólo es visible dentro de la transacción: otras sesiones no ven nada que no sea destinado.

El comando de SAVEPOINT (aún) no es la parte del estándar SQL oficial, entonces puede considerarse la práctica buena para evitarlo en sistemas de producción. Puede ser muy útil en el desarrollo, sin embargo, cuando usted prueba el efecto de select DML y anda por una transacción compleja paso a paso.

El AUTOCOMMIT en SQL*Plus y Developer SQL El comportamiento estándar de SQL*Plus y Developer SQL debe seguir el estándar SQL: una transacción comienza implícitamente con una select DML y se termina explícitamente con DESTINAR o un ROLLBACK. Es posible cambiar este comportamiento en ambos herramientas de modo que cada select DML destine inmediatamente, en su propia transacción. Si esto es hecho, no hay ninguna necesidad de ninguno DESTINAN select, y el ROLLBACK

436 Capítulo 10:

Manipulación de Datos

la select nunca puede tener ningún efecto: todas las select DML se hacen permanentes y visibles a otros tan pronto como ellos ejecutan.

En SQL*Plus, habilite el modo autodestinar con el comando:

SET AUTODESTINA EN

Volver a normal:

SET AUTODESTINA LEJOS En Developer SQL, del menú de Herramientas,

seleccione Preferencias. Entonces amplíese Base de datos y Parámetros de Hoja de cálculo: usted verá la casilla de verificación Autocommit in SQL Worksheet.

Puede ser difícil justificar la habilitación del modo autodestinar del SQL*Plus e herramientas de Developer SQL. Quizás la única razón es para la compatibilidad con algunos productos de tercero que no siguen el estándar SQL. Las escrituras de SQL escritas para tales productos pueden no tener cualquiera

Page 374: curso_sql_certificacion

DESTINA select.

ESCOGIDO PARA LA ACTUALIZACIÓN Una última select de control de transacción es SENTENCIA PARA LA ACTUALIZACIÓN. El oracle, en ausencia, proporciona el nivel más alto posible de la coincidencia: los lectores no bloquean a escritores, y los escritores no bloquean a lectores. O en la lenguaje clara, no hay ningún problema con datos de interrogatorio de sesión que otra sesión actualiza, o datos de actualización de sesión que otra sesión pregunta. Sin embargo, hay tiempos cuando usted puede desear cambiar este comportamiento y prevenir cambios en datos que están siendo preguntados.

Es bastante habitual para una aplicación recuperar un SET de filas con un comando ESCOGIDO, presentarlos a un usuario para la lectura, y le apremio para cualquier cambio. Como el Oracle es una base de datos multiusuaria, no es imposible que otra sesión también haya recuperado las mismas filas. Si ambas sesiones intentan hacer cambios, pueden haber algunos efectos bastante raros. La comando siguiente representa tal situación.

Primer Usuario Segundo Usuario

seleccione * de REGIONS; seleccione * de REGIONS;

borre de REGIONS donde region_id=5; destine;

las REGIONS de actualización ponen region_name ='GB' donde region_id=5;

Transacciones de control

437

Esto es lo que el primer usuario verá, de un SQL*Plus apremio:

SQL> seleccionan * de REGIONS; REGION_ID REGION_NAME ---------- -------------------------

5 el Reino Unido 1 Europa 2 Américas 3 Asia 4 Oriente Medio y África

SQL> REGIONS de actualización ponen region_name ='GB' donde region_id=5; 0 filas actualizadas.

Esto es un poco desconcertante. Un camino alrededor de este problema es cerrar con

llave las filas en qué está interesado:

seleccione * de REGIONS para la actualización;

DENTRO DEL EXAMEN

Page 375: curso_sql_certificacion

Entendimiento de Aislamiento de Transacción Todas las select DML son privadas a la sesión que los hace, hasta que la transacción destine. La transacción es comenzada implícitamente con la primera select DML ejecutada. Hasta que sea destinado, puede ser invertido con un ROLLBACK. Ninguna otra sesión verá alguna vez cambios que no han sido destinados, pero el instante ellos son destinados ellos serán visibles a todas otras sesiones.

La estructura de transacción es esencial para la programación buena. Una transacción es una unidad lógica del trabajo: los cambios hechos por la transacción, si es una select que afecta una fila en una comando, o mucha afectación de select cualquier número de filas en muchas tablas, debería ser mí contenido. No debería ser de ningún modo el dependiente en select ejecutadas fuera de la transacción, y no debería ser divisible en transacciones más pequeñas, autónomas. Una transacción debería ser la medida correcta; esto debería contener todas las select que no pueden ser separadas en términos de lógica comercial y ningunas select que puedan ser.

Las decisiones sobre la estructura de transacción pueden ser complejas, pero con algún pensamiento e investigación, ellos pueden ser hechos para cualquier situación. Los analistas de sistemas y comerciales pueden y deberían aconsejar.

438 Capítulo 10:

Manipulación de Datos

GUIÓN & SOLUCIÓN

Las transacciones, como coacciones, son reglas comerciales: una técnica por lo cual la base de datos puede hacer cumplir reglas desarrolladas por analistas comerciales. ¿Si la "unidad lógica del trabajo" es enorme, como un aplazamiento de período de suite de la contabilidad, debería realmente esto ser puesto en práctica como una transacción?

Siendo capaz de hacer operaciones DML, mire el resultado, luego ruede atrás e inténtelos otra vez puede ser muy útil. ¿Pero es realmente una idea buena?

No necesariamente. Tal transacción podría tomar horas, ocupando una cantidad enorme de recursos de base de datos. En tales instancias, usted debe hablar con sus analistas comerciales y DBA si es posible romper una transacción comercial en varias transacciones de base de datos. Por supuesto, si algo se equivoca parcialmente por, usted tendrá una suite de la contabilidad que es en parte en un período y en parte en el otro. Esta aplicación tendrá que ser capaz de clasificar el lío. No, no realmente. Si la aplicación es diseñada de modo que los usuarios finales puedan hacer esto, el DBA no será feliz. Él verá muchas transacciones ser hechas rodar atrás, que acentúa la base de datos. Es mucho mejor para la aplicación hacer todo tal trabajo del lado de cliente y sólo presentar el trabajo a la base de datos cuando está listo y puede ser destinado inmediatamente.

EL PARA la cláusula de ACTUALIZACIÓN colocará una cerradura en todas las filas recuperadas. Ningunos cambios pueden ser hechos a ellos por cualquier sesión además de lo que publicó el comando, y por lo tanto las actualizaciones subsecuentes tendrán éxito: no es posible para las filas haber sido cambiado. Esto significa que una sesión tendrá una vista consecuente de los datos (esto no cambiará), pero el precio para ser pagado es que otras sesiones colgarán si ellos tratan de actualizar alguna de las filas

Page 376: curso_sql_certificacion

cerradas con llave (ellos pueden preguntarlos, por supuesto,). Las cerraduras colocadas por un PARA la cláusula de ACTUALIZACIÓN serán

sostenidas hasta que la sesión publicando las cuestiones a de comando DESTINE o ROLLBACK. Esto debe ser hecho para soltar las cerraduras, aun si ningunos comandos de DML han sido ejecutados.

RESUMEN DE CERTIFICACIÓN Hay cuatro comandos de DML que afectan datos: INSERCIÓN, ACTUALIZACIÓN,

BORRAR, y (el comando opcional) FUSIÓN. TRUNCADO Es un comando de DDL que es funcionalmente equivalente a un BORRAR comando sin un DONDE cláusula, pero es mucho más rápido. Todos los comandos de DML pueden ser hechos rodar atrás, automáticamente en instancia del error, o a mano con el comando de ROLLBACK - a menos que ellos hayan sido destinados con DESTINAR. Una vez destinado, los cambios nunca pueden ser invertidos. TRUNCADO, como todos los comandos de DDL, tiene un incorporado DESTINAN lo que es imparable.

Taladradora de dos minutos

439

✓TALADRADORA DE DOS MINUTOS

Describa Cada Lenguaje de Manipulación de Datos (DML) Select ❑ INSERCIÓN escribe filas en una comando. ❑ ACTUALIZACIÓN ajusta los valores en

filas existentes. ❑ BORRAR borra filas. ❑ FUSIÓN puede combinar las funciones de

INSERCIÓN, ACTUALIZACIÓN, y BORRAR. ❑ Aunque TRUNCADO no sea DML, esto

realmente borra todas las filas en una comando.

Filas de inserción en una Comando ❑ INSERCIÓN puede escribir una fila o un SET de filas. ❑ Esto es posible para un

INSERCIÓN escribir filas en tablas múltiples. ❑ Subconsultas puede ser usado para generar

las filas para ser insertadas. el � Subconsultas y funciones puede ser usado para generar

valores de columna. ❑ Un INSERCIÓN no es permanente hasta que sea destinado.

Filas de actualización en una Comando ❑ ACTUALIZACIÓN puede afectar una fila o un SET de filas en una comando. ❑

Page 377: curso_sql_certificacion

Subconsultas puede ser usado para seleccionar las filas para ser actualizadas. el �

Subconsultas y funciones puede ser usado para generar valores de columna. ❑ Una

ACTUALIZACIÓN no es permanente hasta que sea destinado.

Borre Filas de una Comando ❑ BORRAR puede borrar una fila o un SET de filas de una comando. ❑ Una subpregunta

puede ser usado para seleccionar las filas para ser borradas. ❑ BORRAR no es permanente

hasta que sea destinado. ❑ TRUNCADO borra cada fila de una comando. ❑ Un

TRUNCADO es inmediatamente permanente: no puede ser hecho rodar atrás.

440 Capítulo 10:

Manipulación de Datos

Transacciones de control ❑ Una transacción es una unidad lógica del trabajo, posiblemente varias select

DML. ❑ Transacciones son invisibles para otras sesiones hasta no destinado. ❑

Hasta no destinado, las transacciones pueden ser hechas rodar atrás. ❑ Una vez

destinado, una transacción no puede ser invertida. ❑ Un SAVEPOINT deja a una

sesión hacer rodar atrás la parte de una transacción.

MÍ PRUEBA Mí Prueba

441 Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

1. ¿Cuál de los comandos siguientes puede ser hecho rodar atrás?

A. DESTINE B. BORRAR C. INSERCIÓN D. FUSIÓN E. F TRUNCADO.

ACTUALIZACIÓN

2. ¿Cómo puede usted cambiar el valor de clave primaria de una fila? (Elija la mejor respuesta.)

A. Usted no puede cambiar el valor de clave primaria. B. Change esto con una select de

ACTUALIZACIÓN simple. C. La fila debe ser borrada con un BORRAR y entrada de nuevo con

un INSERCIÓN. D. Esto sólo es posible si la fila es cerrada con llave primero con un ESCOGIDO

PARA LA ACTUALIZACIÓN.

3. Si una ACTUALIZACIÓN o BORRAR manda tiene un DONDE la cláusula que le da un alcance de

Page 378: curso_sql_certificacion

varios

¿las filas, qué pasará si hay una parte de error el camino a través de la ejecución? El comando es

uno de varios en una transacción de multiselect. (Elija la mejor respuesta.) A. El comando saltará

la fila que causó el error y seguir. B. El comando se parará en el error, y las filas que han sido

actualizadas o borradas van

permanezca actualizado o borrado.

C. Independientemente del trabajo el comando había hecho antes de golpear el error será hecho

rodar atrás, pero

el trabajo hecho ya por la transacción permanecerá.

D. La transacción entera será hecha rodar atrás.

Filas de inserción en una Comando

4. Si una tabla T1 tiene cuatro columnas numéricas, C1, C2, C3, y C4, que de estas select va ¿tenga éxito? (Elija la mejor respuesta.) A. insertan en valores de T1 (1,2,3, nulo); B. insertan en valores de T1 ('1', '2', '3', '4'); C. insertan en T1 escogido * de T1;

442 Capítulo 10:

Manipulación de Datos

D. Todas las select (A, B, y C) tendrán éxito. E. Ninguna de

las select (A, B, o C) tendrá éxito.

5. Estudie el resultado de esta select SENTENCIA:

SQL> seleccionan * de t1; C1 C2 C3 C4

---------- ---------- ---------- ---------- 1 2 3 45 6 7

8

Si usted publica esta select:

el inserción en t1 (c1, c2) valores (seleccionan c1, c2 de t1);

¿por qué fallará esto? (Elija la mejor respuesta.)

A. Como los valores no son proporcionados a las columnas de toda la comando: debería haber

NULLs para C3 y C4.

B. Como la subpregunta devuelve filas múltiples: esto requiere un DONDE cláusula restringir el el número de filas volvió a uno. C. Como la subpregunta no es el escalar: esto debería usar a

MAX o MINUTO para generar valores escalares. D. Como la palabra clave de VALORES no es usada con una subpregunta. E. Esto tendrá éxito, insertando dos filas con NULLs para C3 y C4.

6. Considere esta select:

inserción en REGIONS (region_id, region_name) los valores ((seleccionan el máximo (region_id) +1 de REGIONS), 'Gran Bretaña');

¿Cuál será el resultado? (Elija la mejor respuesta.)

A. La select no tendrá éxito si el valor generado para REGION_ID no es único, porque REGION_ID es la clave primaria de la comando de REGIONS.

Page 379: curso_sql_certificacion

B. La select tiene un error de sintaxis porque usted no puede usar la palabra clave de VALORES con

una subpregunta. C. La select ejecutará sin el error. D. La select fallará si la comando de REGIONS tiene una tercera columna.

Filas de actualización en una Comando

7. Usted quiere insertar una fila y luego actualizarlo. ¿Qué secuencia de pasos debería usted seguir? (Elija la mejor respuesta.) A. INSERCIÓN, ACTUALIZACIÓN, DESTINA B. INSERTE, DESTINE, ACTUALICE, DESTINE

C. INSERCIÓN, SELECCIONE PARA ACTUALIZACIÓN, ACTUALIZACIÓN, DESTINE D.

INSERTE, DESTINE, ESCOGIDO PARA ACTUALIZACIÓN, ACTUALIZACIÓN, DESTINE

8. Si usted publica este comando:

actualice salary=salary de SET de EMPLOYEES * 1.1;

¿cuál será el resultado? (Elija la mejor respuesta.)

Mí Prueba

443 A. La select fallará porque no hay DONDE la cláusula para restringir las filas afectó. B. La

primera fila en la comando será actualizada. C. Habrá un error si cualquier fila tiene su columna de

SUELDO NULA. D. Cada fila hará incrementar el SUELDO en el 10 por ciento, a menos que el

SUELDO fuera NULO.

Borre Filas de una Comando

9. ¿Cómo puede usted borrar los valores de una columna de cada fila en una comando? (Elija la mejor

respuesta.)

A. Use el BORRAR comando de COLUMNA. B. Use el comando de COLUMNA TRUNCADO.

C. Use el comando de ACTUALIZACIÓN. D. Use el comando de COLUMNA DE GOTA.

10. ¿Cuál de estos comandos borrará cada fila en una comando? (Elija uno o varios correctos

respuestas.) A. BORRAR mandan sin DONDE la cláusula B. Una COMANDO DE GOTA manda

C. Un comando TRUNCADO D. Un comando de ACTUALIZACIÓN, poniendo cada columna a

NULO y sin DONDE cláusula

Transacciones de control

11. El usuario JOHN actualiza algunas filas y pide al usuario ROOPESH entrar en el sistema y

comprobar los cambios antes él los destina. ¿Cuál de las select siguientes es verdad? (Elija la mejor respuesta.) A. ROOPESH puede ver los cambios, pero no puede cambiarlos porque JOHN se habrá cerrado

las filas. B. ROOPESH no será capaz de ver los cambios. C. JOHN debe destinar los cambios de modo que ROOPESH pueda verlos y, si es necesario, rollo

ellos atrás. D. JOHN debe destinar los cambios de modo que ROOPESH pueda verlos, pero sólo JOHN

Page 380: curso_sql_certificacion

puede rodar ellos atrás.

444 Capítulo 10:

Manipulación de Datos

12. El usuario JOHN actualiza algunas filas, pero no destina los cambios. El usuario ROOPESH pregunta el

las filas aquel JOHN actualizadas. ¿Cuál de las select siguientes es verdad? (Elija tres respuestas correctas.) A. ROOPESH no será capaz de ver las filas porque ellos serán cerrados con llave. B. ROOPESH será capaz de ver los nuevos valores, pero sólo si él entra en el sistema como JOHN. C. ROOPESH verá las viejas versiones de las filas. D. ROOPESH verá el estado del estado de los datos como era cuando JOHN último creó

un SAVEPOINT. 13. ¿Cuál de estos comandos terminará una transacción? (Elija tres respuestas correctas.)

A. DESTINE B. BORRAR C. ROLLBACK D. ROLLBACK A SAVEPOINT E. SAVEPOINT F. TRUNCADO

PREGUNTA DE LABORATORIO Realice este ejercicio en el esquema OE.

1. Inserte a un cliente en CLIENTES, usando una función para generar un número de cliente único:

inserción en clientes (customer_id,cust_first_name,cust_last_name) valores ((seleccionan el máximo (customer_id) +1 de clientes), 'John', 'Watson');

2. Déle un límite de crédito igual al límite de crédito medio:

actualice el SET de clientes el credit_limit = (seleccionan avg (credit_limit) de clientes) donde cust_last_name =' Watson';

3. Cree a otro cliente que usa al cliente sólo creado, pero asegúrese que el CUSTOMER_ID es único:

inserción en clientes (customer_id,cust_first_name,cust_last_name,credit_limit) seleccionan customer_id+1,cust_first_name,cust_last_name,credit_limit de clientes donde cust_last_name =' Watson';

4. Cambie el nombre del segundo cliente entrado:

clientes de actualización SET cust_last_name ='Ramklass', cust_first_name ='Roopesh'

Pregunta de laboratorio

445 donde customer_id = (seleccionan el máximo (customer_id) de clientes);

Page 381: curso_sql_certificacion

5. Destine esta transacción:

destine;

6. Determine el CUSTOMER_IDs de los dos nuevos clientes y cierre con llave las filas: 7.

seleccione customer_id, cust_last_name de clientes donde cust_last_name en ('Watson', 'Ramklass') para actualización; De otra sesión conectada al esquema OE, intente actualizar una de las filas cerradas con llave:

actualice credit_limit=0 de SET de clientes donde cust_last_name ='Ramklass';

8. Este comando colgará. En la primera sesión, suelte las cerraduras publicando destinar:

destine;

9. La segunda sesión completará ahora su actualización. En la segunda sesión, borre las dos filas:

borre de clientes donde cust_last_name en ('Watson', 'Ramklass');

10. En la primera sesión, intente truncar la comando de CLIENTES:

clientes de comando truncados;

11. Esto fallará porque hay una transacción en el progreso contra la comando, que bloqueará todos DDL manda. En la segunda sesión, destine la transacción:

destine;

12. La comando de CLIENTES estará de vuelta ahora en el estado en el cual estaba al principio del

ejercicio. Confirme esto comprobando el valor de CUSTOMER_ID más alto:

máximo escogido (customer_id) de clientes;

446 Capítulo 10:

Manipulación de Datos

MÍ PRUEBAN RESPUESTAS

Describa Cada Lenguaje de Manipulación de Datos (DML) Select

1. ® B, C, D, F. Éstos son los comandos de DML: pueden hacerlos rodar todos

atrás. ✓® A, E. DESTINE termina una transacción, que nunca puede ser hecha rodar entonces atrás. ˚TRUNCADO es un comando de DDL e incluye un incorporado DESTINAN.

2. ® B. Assuming ningunas violaciones de coacción, la clave primaria puede actualizado como

cualquier otra columna. ✓® A, C, D. A es incorrecto porque no hay ninguna restricción de la actualización de claves primarias (además de ˚coacciones). El C es incorrecto porque no hay ninguna necesidad de hacerlo en una manera tan compleja. El D es incorrecto porque la ACTUALIZACIÓN aplicará su propia cerradura: usted no tiene que cerrar con llave la fila primero.

Page 382: curso_sql_certificacion

3. ® C. Esto es el comportamiento esperado: la select es hecha rodar atrás, y el resto del ✓

la transacción permanece no comprometida. ® A, B, D. A es incorrecto porque, mientras este comportamiento es de hecho configurable, no es habilitado ˚en ausencia. El B es incorrecto porque, mientras esto es de hecho posible en instancia de errores espaciales, no es habilitado en ausencia. El D es incorrecto porque sólo una select será hecha rodar atrás, no la transacción entera.

Filas de inserción en una Comando

4. ® D. A, B, y C tendrá éxito todo, aunque B obligue la base de datos a hacer algún ✓

reparto de tipo automático. ® A, B, C, E. A, B, y C son incorrectos porque cada uno tendrá éxito. El E es incorrecto porque A, B, ˚y C tendrá éxito todo.

5. ® D. La sintaxis es incorrecta: use la palabra clave de VALORES o una subpregunta, pero no a ambos. ✓

Borre la palabra clave de VALORES, y se ejecutará. C3 y C4 serían poblados con NULLs. ® A, B, C, E. A es incorrecto porque no hay ninguna necesidad de proporcionar valores a columnas no puestas en una lista. ˚Los B y C son incorrectos porque un INSERCIÓN puede insertar un SET de filas, así no hay ninguna necesidad de restringir el número con un DONDE cláusula o usando a MAX o MINUTO para devolver sólo una fila. El E es incorrecto porque la select no es sintácticamente correcta.

6. ® C. La select es sintácticamente correcta, y el uso de "MAX (REGION_ID) + 1" ✓

garantías que generan un número único para la columna de clave primaria. ® A, B, D. A es incorrecto porque la función generará un valor único para ˚ primariollave. El B es incorrecto porque no hay ningún problema usando una subpregunta escalar para generar un valor para una lista de VALORES. Lo que no puede ser hecho debe usar la palabra clave de VALORES y luego una subpregunta no escalar sola para proporcionar todos los valores. El D es incorrecto porque si hay una tercera columna, será poblado con un valor NULO.

Filas de actualización en una Comando Mí Respuestas de Prueba

447 7. ® A. Esto es el más simple (y por lo tanto el mejor) el camino.

® B, C, D. Todos éstos trabajarán, pero ellos son todos innecesariamente complicados: ningún programador debería ˚use select innecesarias.

8. ® D. Cualquier operación aritmética de unas vueltas NULAS un NULO, pero todas otras filas será

actualizada. ✓® A, B, C. A y B son incorrectos porque la carencia de un DONDE la cláusula significa que cada fila ˚será tratado. El C es incorrecto porque tratando de hacer la aritmética contra un NULO no es un error (aunque no sea muy útil, cualquiera).

Page 383: curso_sql_certificacion

Borre Filas de una Comando

9. ® C. Una ACTUALIZACIÓN, sin un DONDE cláusula, es el único

camino. ✓® A, B, D. A es incorrecto porque no hay ninguna tal sintaxis: BORRAR afecta la fila entera. ˚El B es incorrecto porque no hay ninguna tal sintaxis: un TRUNCADO afecta la comando entera. El D es incorrecto porque, mientras este comando realmente existe (es la parte del comando de COMANDO CAMBIAR), borrará la columna completamente, no sólo borrará los valores de ello.

10. ® A, C. El TRUNCADO será más rápido, pero BORRAR se pondrá allí también. ✓® el B es incorrecto porque esto borrará la comando así como las filas dentro de ella. El D es ˚ incorrectoporque las filas todavía estarán allí - aunque ellos sean poblados con NULLs.

Transacciones de control

11. ® B. El principio de aislamiento significa que sólo JOHN puede ver su transacción no

comprometida. ✓® A, C, D. A es incorrecto porque el aislamiento de transacción significa que ninguna otra sesión será capaz a ˚ver los cambios. Los C y D son incorrectos porque nunca puede hacerse rodar una transacción comprometida atrás.

12. ® aislamiento de C. Transaction significa que ninguna otra sesión será capaz de ver los cambios hasta ✓

ellos son destinados. ® A, B, D. A es incorrecto porque el cierre no es relevante; los escritores no bloquean a lectores. El B es ˚incorrecto porque el aislamiento restringe la visibilidad de transacciones en el progreso a la sesión que hace los cambios; el esquema al cual los usuarios conectan no importa. El D es incorrecto porque savepoints sólo son marcadores en una transacción; ellos no afectan cambios de publicación en otras sesiones.

13. ® A, C, F. DESTINE y ROLLBACK son los comandos de terminar una transacción ✓

explícitamente; TRUNCADO lo hará implícitamente. ® B, D, E. El B es incorrecto porque BORRAR es un comando de DML que puede ser ejecutado dentro de un ˚transacción. Los D y E son incorrectos porque la creación savepoints y el balanceo atrás a ellos dejan la transacción en el progreso.

448 Capítulo 10:

Manipulación de Datos

RESPUESTA DE LABORATORIO La figura 10-5 muestra los cinco primeros pasos del ejercicio.

La figura 10-6 muestra los siete pasos finales del ejercicio, como visto desde el punto de vista de la primera sesión.

Page 384: curso_sql_certificacion

FIGURA 10-5

Los pasos 1 a 5 del ejercicio de laboratorio

FIGURA 10-6

Los pasos finales del ejercicio de laboratorio, incluso el error TRUNCADO

11 La utilización de Select de DDL para Crear y Manejar Tablas

OBJETIVOS DE CERTIFICACIÓN

11.01 Clasifique los Objetos de Base de datos Principales

11.05

Page 385: curso_sql_certificacion

Explique Como Coacciones Son Creadas

en el momento de Creación de Comando 11.02

Examine la Estructura de Comando ✓

Taladradora de dos minutos

11.03 Liste en una lista los Tipos de datos Que están Disponibles

para Columnas Q&A

Mí Prueba

11.04 Cree una Comando Simple

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

450 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Hay varios tipos de objetos de datos en una base de datos que puede ser dirigida por usuarios con

SQL.El el más comúnmente usaba el tipo del objeto es la comando. Las tablas vienen a varias

Page 386: curso_sql_certificacion

formas, pero SQL no es consciente de esto. Una comando también puede tener que ver con otros

objetos tal como

índices o GLOBOS (un objeto grande - una estructura diseñada para almacenar artículos grandes de la información, tal como videograbaciones) que son dirigidos implícitamente. La select sólo se dirigirá a la comando con la cual los otros objetos tienen que ver. Esta creación de comando de detalles de capítulo; el Capítulo 12 cubrirá algunos otros tipos de objeto.

Creando una comando, hay ciertas reglas que deben ser seguidas en cuanto a la estructura de la comando: sus columnas sólo pueden ser de ciertos tipos de datos. También hay las reglas que pueden ser definidas para las filas individuales; éstos son conocidos como coacciones. Las reglas estructurales y las reglas de coacción juntos restringen los datos que pueden ser insertados en la comando.

OBJETIVO DE CERTIFICACIÓN 11.01

Clasifique los Objetos de Base de datos Principales Hay diversos tipos de objetos que pueden existir dentro de una base de datos, muchos más

con el liberación corriente que con versiones más tempranas. Todos los objetos tienen unos nombres, y todos los objetos son poseídos por alguien. "Alguien" es un usuario de base de datos, como la HORA. Los objetos que el usuario posee son su esquema. El nombre de un objeto debe conformarse con ciertas reglas.

Tipos de objeto Esta pregunta pone en una lista los tipos de objeto que resultan existir en esta base de

datos particular, con un cargo de cuántos hay:

SQL> seleccionan object_type, cuenta (object_type) de dba_objects

2 grupo por object_type pide por object_type; OBJECT_TYPE CONDE (OBJECT_TYPE)

Page 387: curso_sql_certificacion

------------------- ------------------ DIRECTORIO DE DIMENSIÓN DE CONTEXTO DE GRUPO DE CONSUMIDOR DE RACIMO

10 12 659

LA PARTICIÓN DE ÍNDICE DE ÍNDICE DE FUNCIÓN DE CONTEXTO DE EVALUACIÓN DE EDICIÓN INDEXTYPE CLASE DE JAVA DATOS DE JAVA LA PARTICIÓN DE GLOBO DE GLOBO DE BIBLIOTECA DE CLASE DE TRABAJO DE TRABAJO DE RECURSO DE JAVA MATERIALIZÓ EL TIPO DE GATILLO DE PARTICIÓN DE COMANDO DE COMANDO DE SINÓNIMO DE SECUENCIA DE HORARIO DE SET DE REGLA DE REGLA DE PLAN DE RECURSO DE COLA DE PROGRAMA DE PROCEDIMIENTO DE CUERPO DE PAQUETE DE PAQUETE DE OPERADOR DE VISTA TECLEA EL CUERPO GRUPO DE VENTANA DE VENTANA DE VISTA INDETERMINADO filas de ESQUEMA 42 de XML seleccionadas.

Clasifique los Objetos de Base de datos Principales

113

286 3023 342 12

22018 322820 11 11

177769 73

60 1240 1178 118 17 37 7121 2

204 26493 2464 199413

2630 231 6

4669 9493

451 Esta pregunta se dirige a la vista DBA_OBJECTS, que se pelea para cada objeto en

la base de datos. Los números son bajos, porque la base de datos es muy pequeño uno usado sólo para la enseñanza. Una base de datos usada para una aplicación comercial podría tener cientos de miles de objetos. Usted no puede ser capaz de ver la vista DBA_OBJECTS, según que permisos su cuenta tiene. Las vistas alternas son USER_OBJECTS, que mostrará todos los objetos poseídos por usted, y ALL_OBJECTS, que mostrará todos los objetos a los cuales le han concedido el acceso (incluso su propio). Todos los usuarios tienen el acceso a éstos.

452

Page 388: curso_sql_certificacion

Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Los objetos de gran interés para un programador SQL son aquellos que contienen, o dan el acceso a, datos. Éstos son

■ Tablas ■ Visualiza Sinónimos ■ ■ Índices ■ Secuencias

Este capítulo cubre tablas; los demás son descritos en el Capítulo 12. Brevemente, una vista

es una select SENTENCIA almacenada que puede ser dirigida como si fuera una comando. No es nada más que una select SENTENCIA, pero, más bien que ejecutar la select sí mismo, el usuario publica una select SENTENCIA contra la vista en cambio. En efecto, el usuario selecciona del resultado de otra selección. Un sinónimo es un alias para una comando (o una vista). Los usuarios pueden ejecutar select SQL contra el sinónimo, y la base de datos trazará un mapa de ellos en select contra el objeto al cual el sinónimo señala. Los índices son un medio de tiempos de acceso que mejoran a filas en tablas. Si una pregunta requiere sólo una fila, entonces más bien que escanear la comando entera para encontrar la fila, un índice puede dar un indicador a la posición exacta de la fila. Por supuesto, el índice sí mismo debe ser buscado, pero esto a menudo es más rápido que escanear la comando. Una secuencia es una construcción que genera números únicos. Hay muchos instancias donde los números únicos son necesarios. Números de publicación de secuencias en pedido, a petición: es absolutamente imposible para el mismo número ser publicado dos veces.

Los tipos de objeto restantes son menos comúnmente relevantes para un programador SQL. Su uso se cae más dentro del reino de programadores PL/SQL y administradores de base de datos.

Usuarios y Esquemas Muchas personas usan los términos "usuario" y "esquema" de modo intercambiable. En el entorno de Oracle, usted puede llevarse esto (aunque no necesariamente con otros sistemas de administración de bases de datos). Un usuario es una persona que puede conectar a la base de datos. El usuario tendrá un nombre de usuario y una contraseña. Un esquema es un contenedor para los objetos poseídos por un usuario. Cuando un usuario es creado, su esquema es creado también. Un esquema es los objetos poseídos por un usuario; al principio, será vacío.

Algunos esquemas siempre serán vacíos: el usuario nunca creará ningún objeto, porque ellos no necesitan a y (si el usuario es alistado correctamente) no tendrá los privilegios necesarios de todos modos. Habrán concedido a usuarios, como esto permisos, por privilegios directos o por papeles, para usar código y datos de acceso en otros esquemas, poseídos por otros usuarios. Otros usuarios pueden ser el revés de esto: ellos poseerán muchos objetos, pero

Clasifique los Objetos de Base de datos Principales

453

nunca realmente entrará en el sistema a la base de datos. No tienen que haberles concedido

Page 389: curso_sql_certificacion

hasta el privilegio de SESIÓN CREAR, entonces la cuenta es con eficacia inhibida (o en efecto puede ser cerrado con llave) - estos esquemas son usados como depósitos para código y datos tenidos acceso por otros.

Los objetos de esquema son objetos con un dueño. El identificador único para un objeto de un tipo particular no es su nombre - es su nombre, prefijado con el título del esquema al cual esto pertenece. Así HR.REGIONS de comando es una comando llamada REGIONS, que es poseído por la HORA de usuario. Podría haber otra comando SYSTEM.REGIONS que sería una comando completamente diferente (quizás diferente tanto en estructura como en contenido) poseído por SISTEMA de usuario y residencia en su esquema.

Varios usuarios (y sus esquemas asociados) son creados automáticamente en el tiempo de creación de base de datos. El principal entre éstos es SYS y SISTEMA. El usuario SYS posee el diccionario de datos: un SET de tablas (en el esquema SYS) que definen la base de datos y sus contenido. SYS también posee varios cientos de paquetes PL/SQL: el código que es proporcionado al uso de administradores de base de datos y developeres. Los objetos en el esquema SYS nunca deberían ser modificados con comandos de DML. Si usted debiera ejecutar DML contra las tablas de diccionario de datos, usted ejecutaría el riesgo de corromper el diccionario de datos, con resultados desastrosos. Usted actualiza el diccionario de datos ejecutando comandos de DDL (tales que CREAN LA COMANDO), que proporcionan una capa de abstracción entre usted y el diccionario de datos sí mismo. El esquema de SISTEMA almacena varios objetos adicionales usados para la administración y supervisar.

Según las opciones seleccionadas durante la creación de base de datos, pueden haber más usuarios quizás creados hasta 30 en total. Estos otros son usados para almacenar el código y datos requeridos por varias opciones. Por ejemplo, el usuario MDSYS almacena los objetos usados por el Oracle Espacial, una opción que amplía las capacidades de la base de datos de Oracle de manejar la información geográfica.

Nombramiento de Objetos de Esquema Un objeto de esquema es un objeto que es poseído por un usuario. Todos los nombres

de objeto de esquema deben confórmese con ciertas reglas:

■ El nombre puede ser de 1 a 30 carácteres mucho tiempo (a excepción los nombres de enlace de base de datos que pueden ser hasta 128 carácteres

mucho tiempo). ■ palabras Reservadas (tal tan ESCOGIDO) no puede ser usado como nombres de objeto. ■ Todos los nombres debe comenzar con una carta de "A" por "Z". ■ Los carácteres de un nombre sólo puede ser cartas, números, subrayar (_),

el signo de dólar ($), o el símbolo de picadillo (#). ■ Minúsculas será convertido a la mayúscula.

454 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Encerrando el nombre dentro de dobles citas,

Page 390: curso_sql_certificacion

todas estas reglas (a excepción de la longitud) pueden ser rotas, pero ponerse al objeto,

Los nombres de objeto deben ser no más que 30 carácteres. Los carácteres pueden ser cartas, dígitos, subrayar, dólar, o picadillo.

posteriormente, siempre debe ser especificado con dobles citas, como en los ejemplos en la Figura 11-1. Note que las mismas restricciones también se aplican a nombres de columna.

Aunque los herramientas, como SQL*Plus y Developer SQL convertan automáticamente minúsculas a la mayúscula a menos que el nombre sea encerrado dentro de dobles citas; recuerde que los nombres de objeto siempre son el instancia sensible. En este ejemplo, las dos tablas son completamente diferentes:

SQL> crean la comando más abajo (c1 fecha); la Comando creada. SQL> crean la comando "más abajo" (col1 varchar2 (2)); la Comando creada. SQL> seleccionan table_name de dba_tables donde

2 más abajo (table_name) = 'más abajo'; los TABLE_NAME------------------------------bajan más ABAJO

FIGURA 11-1

Utilización de dobles citas para usar nombres no estándar

Clasifique los Objetos de Base de datos Principales

455

Mientras es posible usar nombres minúsculos y carácteres no estándar (hasta espacios), se considera la práctica mala debido a la confusión que esto puede causar.

Objeto Namespaces A menudo se dice que el identificador único para un objeto es el nombre de objeto,

prefijado con el nombre de esquema. Mientras esto generalmente es verdad, para un entendimiento lleno del nombramiento, es necesario introducir el concepto de un namespace. Un namespace define un grupo de tipos de objeto, dentro de los cuales todos los nombres deben ser únicamente identificados, por esquema y nombre. Los objetos en namespaces diferente pueden compartir el mismo nombre.

Estos el objeto teclea toda la parte mismo namespace:

■ Tablas ■ Vistas ■ Secuencias ■ sinónimos Privados

Así es imposible crear una vista con el mismo nombre que una comando al menos, esto

es imposible si ellos están en el mismo esquema. Y una vez creado, las select de SQL pueden dirigirse a una vista o un sinónimo como si fuera una comando. El hecho que las tablas, las vistas, y los sinónimos privados comparten mismo namespace significa que usted puede alistar varias capas de la abstracción entre lo que los usuarios ven y las

Page 391: curso_sql_certificacion

tablas actuales, que pueden ser inestimables tanto para la seguridad como para simplificar el desarrollo de aplicaciones. Índices y coacciones cada uno tiene su propio namespace. Así es posible para un índice tener el mismo nombre que una comando, hasta dentro del mismo esquema.

EJERCICIO 11-1 Determina Que Objetos son Accesibles a Su Sesión En este ejercicio, pregunte varias vistas de diccionario de datos como la HORA de

usuario para determinar que los objetos están en el esquema de HORA y a que objetos en otros esquemas la HORA tiene el acceso.

1. Conecte a la base de datos con SQL*Plus o Developer SQL como la HORA de usuario 2. Determine cuantos objetos de cada tipo están en el esquema de HORA:

seleccione object_type, cuenta (*) del grupo user_objects por

object_type;

La vista de USER_OBJECTS pone en una lista todos los objetos poseídos por el

esquema a cual la sesión corriente es conectada, en esta HORA de instancia.

456 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

3. Determine en cuantos objetos en la HORA total tiene permisos:

seleccione object_type, cuenta (*) del grupo all_objects por object_type;

La vista de ALL_OBJECTS pone en una lista todos los objetos a los cuales el usuario tiene alguna

clase de acceso.

4. Determine quién posee la HORA de objetos puede ver:

seleccione al dueño distinto de all_objects;

OBJETIVO DE CERTIFICACIÓN 11.02

Examine la Estructura de Comando Según el paradigma de base de datos relacional, una comando es un de dos dimensiones filas de almacenaje de estructura. Una fila es una o varias columnas. Cada fila en la comando tiene las mismas columnas, que definido por la estructura de la comando. La base de datos de Oracle realmente permite variaciones en este modelo de dos dimensiones. Algunas columnas pueden ser definidas como anidó tablas, que ellos mismos tienen varias columnas. Otras columnas pueden ser de un tipo de datos

Page 392: curso_sql_certificacion

ilimitado, como un objeto grande binario, teóricamente terabytes grandes. También es posible definir columnas como objetos. El objeto tendrá una estructura interna (posiblemente basado en columnas) que no es visible como la parte de la comando.

La fase de análisis de sistemas del desarrollo de sistema lifecycle habrá modelado las estructuras de datos tenían que almacenar la información del sistema en la tercera forma normal, como descrito en el Capítulo 1. El resultado es un SET de tablas de dos dimensiones, cada uno con una clave primaria y conectado el uno con el otro con claves foráneas. La fase de diseño de sistema puede haber puesto en peligro esta estructura, quizás por denormalizing las tablas o aprovechando capacidades específicas para el Oracle tales que anidaron tablas. Pero el resultado final, por lo que el developer SQL está preocupado, es un SET de tablas.

Cada comando existe como una definición en el diccionario de datos. En la creación, la comando habrá sido adjudicada una cantidad limitada del espacio (conocido como un grado) dentro de la base de datos. Esto puede ser pequeño, quizás sólo unos kilobytes o megaoctetos. Como las filas son insertadas en la comando, este grado se llenará. Cuando está lleno, la base de datos adjudicará (automáticamente) otro grado a la comando. Como las filas son borradas, el espacio dentro de los grados adjudicados se hace disponible para la reutilización. Aun si cada fila es borrada, los grados permanecen asignados a la comando. Ellos sólo serán liberados y devueltos a la base de datos para el uso en otra parte si la comando es dejada caer o truncada (como descrito en el Capítulo 10).

EJERCICIO 11-2 Investiga Estructuras de Comando Liste en una lista los Tipos de datos Que están Disponibles para Columnas

457 En este ejercicio, pregunte varias vistas de diccionario de datos como la HORA de usuario para determinar la estructura de una comando.

1. Conecte a la base de datos con SQL*Plus o Developer SQL como la HORA de usuario 2. Determine los nombres y los tipos de las tablas que existen en el esquema de HORA:

seleccione table_name, cluster_name, iot_type de user_tables;

Las tablas arracimadas y las tablas organizadas del índice (IOTs) son la

comando avanzada estructuras. En el esquema de HORA, todas las tablas son tablas de montón estándares excepto COUNTRIES que es un IOT.

3. Use el comando DESCRIBIR de mostrar la estructura de una comando:

describa REGIONS;

4. Recupere la información similar preguntando una vista de diccionario de datos:

seleccione column_name, data_type, nullable de user_tab_columns donde table_name ='REGIONS';

Page 393: curso_sql_certificacion

OBJETIVO DE CERTIFICACIÓN 11.03

Liste en una lista los Tipos de datos Que están Disponibles para Columnas

Creando tablas, cada columna debe ser adjudicada un tipo de datos, que determina la naturaleza de los valores que pueden ser insertados en la columna. Estos tipos de datos también son usados para especificar la naturaleza de los argumentos para procedimientos PL/SQL y funciones. Seleccionando un tipo de datos, usted debe considerar los datos que usted tiene que almacenar y las operaciones que usted querrá realizar sobre ellos. El espacio también es una consideración: algunos tipos de datos son la longitud fijada, tomando el mismo número de bytes pase lo que pase los datos están realmente en ello; los otros son variables. Si una columna no es poblada, entonces el Oracle no le dará ningún espacio en absoluto. Si usted más tarde actualiza la fila para poblar la columna, entonces la fila se hará más grande, no importa si el tipo de datos es la longitud fijada o la variable.

458 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Lo siguiente es los tipos de datos para datos alfanuméricos:

■ VARCHAR2 Datos de carácter de longitud variable, de 1 byte a 4 kilobyte. Los datos

es almacenado en el SET de caracteres de base de datos. ■ NVARCHAR2 Como VARCHAR2, pero los datos es almacenado en la

alternativa SET de caracteres de lenguaje nacional, uno de los SETs de caracteres de

Unicode permitidos. ■ TRABAJO POR HORASDatos de carácter de longitud fija, de 1 byte a 2

kilobyte, en la base de datos SET de caracteres. Si los datos no son la longitud de la columna, entonces será rellenado de espacios.

Para la conformidad ISO/ANSI, usted puede especificar un tipo de datos VARCHAR, pero cualquier columna de este tipo será automáticamente convertida a VARCHAR2.

Lo siguiente es el tipo de datos para datos binarios:

■ MATERIA PRIMA Datos binarios de longitud variable, de 1 byte a 4 kilobyte. A diferencia del TRABAJO POR HORAS

y tipos de datos de VARCHAR2, los Datos iniciales no son convertidos por Red de Oracle del SET de caracteres de la base de datos al SET de caracteres del proceso de usuario en el ESCOGIDO o el otro camino en el INSERCIÓN.

Page 394: curso_sql_certificacion

Lo siguiente es los tipos de datos para datos numéricos, toda la longitud variable:

■ NÚMERO Los datos numéricos, para los cuales usted puede especificar la precisión y la escala.

La precisión puede extenderse de a 1 a 38, la escala puede extenderse de84 a 127. ■ FLOTADOR Esto es un tipo de datos ANSI, número de punto flotante con

la precisión de 126 binario (o 38 decimal). El oracle también proporciona BINARY_FLOAT y BINARY_DOUBLE como alternativas.

■ NÚMERO ENTERO Equivalente a NÚMERO, con cero de escala.

Lo siguiente es los tipos de datos para fecha y datos de tiempo, toda la longitud fija:

■ FECHA Esto es el cero de longitud, si la columna es vacía, o 7 bytes. Todos Los datos de FECHA incluyen el siglo, el año, el mes, el día, la hora, el minuto, y segundo. La variedad válida es a partir del 1 de enero, 4712 A.C. al 31 de diciembre, 9999 d. C.

■ TIMESTAMP Esto es el cero de longitud si la columna es vacía, o hasta 11 bytes,

según la precisión especificada. Similar HASTA AHORA, pero con la precisión de hasta 9 decimal coloca para los segundos, 6 sitios en ausencia. Liste en una lista los Tipos de datos Que están Disponibles para Columnas

459

■ TIMESTAMP CON TIMEZONE Como TIMESTAMP, pero los datos es provisto de un registro guardado del huso horario al cual esto se refiere. La longitud puede ser hasta 13 bytes, según la precisión. Este tipo de datos deja al Oracle determinar la diferencia entre dos veces normalizándolos a la hora universal coordinada, aun si los tiempos son para husos horarios diferentes.

■ TIMESTAMP CON TIMEZONE lOCAL Como TIMESTAMP, pero el los datos son normalizados al huso horario de base de datos en guardar. Cuando recuperado, es normalizado al huso horario del proceso de usuario que lo selecciona.

■ AÑO DE INTERVALO A MES Usado para registrar un período durante años y meses entre dos FECHAS o TIMESTAMPs.

■ DÍA DE INTERVALO A SEGUNDO Usado para registrar un período en días y segundos entre dos FECHAS o TIMESTAMPs.

Lo siguiente es los tipos de datos de objeto grandes:

■ CLOB Datos de carácter almacenados en el SET de caracteres de base de datos, talla con eficacia

ilimitado: 4 gigabytes se multiplicaron por el tamaño de bloque de base de datos. ■ NCLOB Como CLOB, pero los datos es almacenado en el ciudadano alternativo

SET de caracteres de lenguaje, uno de los SETs de caracteres de Unicode permitidos.

■ GOTA Como CLOB, pero datos binarios que no se someterán al SET de caracteres conversión por Red de Oracle.

■ BFILE Un localizador que señala a un archivo almacenado en el sistema operativo del

Page 395: curso_sql_certificacion

servidor de base de datos. La talla de los archivos es limitada con 4 gigabytes. ■ MUCHO TIEMPO Datos de carácter en el SET de caracteres de base de datos, hasta 2 gigabytes. Todo el

la funcionalidad del LARGO (y más) es proporcionada por CLOB; LONGs no debería ser usado en una base de datos moderna, y si su base de datos tiene cualquier columna de este tipo ellos deberían ser convertidos a CLOB. Sólo puede haber una columna LARGA en una comando.

■ MATERIA PRIMA LARGA Como el LARGO, pero datos binarios que no serán convertidos por

Red de oracle. Cualquier columna CRUDA LARGA debería ser convertida a GOTAS.

Lo siguiente es el tipo de datos ROWID:

■ ROWID Un valor codificó en la base 64 que es el indicador a la posición de a fila en una comando. Cifrado. Dentro de ello es la dirección física exacta. ROWID es un Oracle tipo de datos patentado, no visible a menos que expresamente no seleccionado.

460 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Se esperará que todos los examinandos sepan sobre estos tipos de datos: VARCHAR2, TRABAJO POR HORAS, NÚMERO, FECHA, TIMESTAMP, INTERVALO, MATERIA PRIMA, MUCHO TIEMPO, MATERIA PRIMA LARGA, CLOB, GOTA, BFILE, y ROWID. El conocimiento detallado también será necesario para VARCHAR2, NÚMERO, y FECHA.

El tipo de datos VARCHAR2 debe ser calificado con un número que indica la longitud máxima de la columna. Si un valor es insertado en la columna que es menos que esto, no es un problema: el valor sólo tomará tanto espacio como esto necesita. Si el valor es más largo que este máximo, el INSERCIÓN fallará con un error. Si el valor es actualizado a un valor más largo o más corto, la longitud de la columna (y por lo tanto la fila sí mismo) cambiará en consecuencia. Si no es entrado en absoluto o es actualizado al NULO, entonces esto no tomará ningún espacio en absoluto.

El tipo de datos de NÚMERO puede ser opcionalmente calificado con una precisión y una escala. La precisión establece el número máximo de dígitos en el número, y la escala es cuantos de aquellos dígitos son a la derecha de la coma decimal. Si la escala es negativa, esto tiene el efecto de reemplazar los últimos dígitos de cualquier número insertado con ceros, que no cuentan hacia el número de dígitos especificados para la precisión. Si el número de dígitos excede la precisión, habrá un error; si es dentro de la precisión, pero fuera de la escala, doblarán sobre el número (o abajo) al valor más cercano dentro de la escala.

El tipo de datos de FECHA siempre incluye el siglo, el año, el mes, el día, la hora, el minuto, y segundo - aun si todos estos elementos no son especificados en el tiempo de inserción. El año, el mes, y la fecha deben ser especificados; si las horas, los minutos, y los segundos son omitidos ellos van la falta a la medianoche. La utilización de la función de TRUNC en una fecha también tiene el efecto de poner las horas, minutos, y segundos a la medianoche.

Page 396: curso_sql_certificacion

El oracle proporciona una variedad de funciones de reparto de tipo para convertir entre tipos de datos y en algunas circunstancias hará el reparto de tipo automático. La figura 11-2 ilustra la utilización tanto el manual como las técnicas de reparto de tipo automáticas.

En el ejemplo precedente, el primer INSERCIÓN usa funciones de reparto de tipo para convertir los datos de carácter entrados a los tipos de datos especificados para las columnas de comando. El segundo INSERCIÓN intenta insertar cadenas de caracteres en tres columnas, pero el inserción todavía tiene éxito porque el Oracle puede convertir tipos de datos automáticamente si es necesario - pero sólo si el formato de los datos es conveniente. Note que si el valor para la fecha ha sido entrado en cualquier formato además de DD-MM-YY, como 'el 18-Nov-07', esto habría fallado.

No confíe en el reparto de tipo automático. Esto puede afectar el rendimiento y no siempre puede trabajar. El entorno de Oracle es fuertemente tecleado, y los programadores deberían respetar esto.

Liste en una lista los Tipos de datos Que están Disponibles para

Columnas

461

FIGURA 11-2

El uso del reparto de tipo funciona y reparto de tipo automático

EJERCICIO 11-3 Investiga los Tipos de datos en el esquema de HORA En este ejercicio, averigüe que tipos de datos son usados en las tablas en el esquema de

HORA, utilización de dos técnicas.

1. Conecte a la base de datos como la HORA de usuario con SQL*Plus o Developer SQL. 2. Use el comando DESCRIBIR de mostrar los tipos de datos en algunas tablas:

describa a EMPLOYEES; describa DEPARTMENTS;

3. Use una pregunta contra una vista de diccionario de datos para mostrar lo que las

columnas arreglan

Page 397: curso_sql_certificacion

la comando de EMPLOYEES, como el comando DESCRIBIR iba:

escogido column_name,data_type,nullable,data_length,data_ la precisión, data_scale de user_tab_columns donde table_ llaman ='EMPLOYEES';

La vista USER_TAB_COLUMNS muestra el detalle de cada columna en cada

comando en el esquema del usuario corriente.

462 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

OBJETIVO DE CERTIFICACIÓN 11.04

Cree una Comando Simple Las tablas pueden ser almacenadas en la base de datos de varios modos. El más simple es

la comando de montón. Un montón es filas de longitud variables en el pedido arbitrario. Puede haber un poco de correlación entre el pedido en el cual las filas son entradas y el pedido en el cual ellos son almacenados, pero esto es un asunto de la suerte. Las estructuras de comando más avanzadas, tal como el siguiente, pueden imponer el pedido y la agrupación en las filas o forzar una distribución arbitraria:

■ Índice organizó tablas Filas de tienda en el pedido de una llave de índice. ■ racimos de Índice Pueden las tablas denormalize en relaciones de niño paternal de modo que

las filas relacionadas de la comando diferente son almacenadas juntos. ■ racimos de Picadillo Fuerce una distribución arbitraria de filas, que se

estropearán cualquier pedido basado en la secuencia de entrada.

■ tablas Divididas Filas de tienda en estructuras físicas separadas, las particiones, la asignación de filas según el valor de una columna.

La utilización de las estructuras de comando más avanzadas no tiene ningún efecto en absoluto en SQL. Cada select SQL ejecutada contra tablas definidas con estas opciones devolverá exactamente los mismos resultados como si las tablas fueran tablas de montón estándares, entonces el uso de estos aspectos no afectará el código. Pero mientras su uso es transparente a programadores, ellos realmente dan ventajas enormes en el rendimiento.

La creación de Tablas con Especificaciones de Columna Para crear una comando de montón estándar, use esta sintaxis:

CREE LA COMANDO [esquema]. comando [MONTÓN DE ORGANIZACIÓN] (columna datatype [expresión POR DEFECTO] [columna datatype [expresión POR

Page 398: curso_sql_certificacion

DEFECTO] );

Como mínimo, especifique el nombre de tabla (será creado en su propio esquema, si usted no especifica de alguien más) y al menos una columna con un tipo de datos. Hay muy pocos developeres que alguna vez especifican el MONTÓN DE ORGANIZACIÓN, ya que esto es la falta y es el estándar de industria SQL. La palabra clave POR DEFECTO en una definición de columna le deja proporcionar una expresión que generará un valor para la columna cuando una fila es insertada si un valor no es proporcionado por la select de INSERCIÓN.

Considere esta select:

CREE LA COMANDO SCOTT.EMP (EMPNO NÚMERO (4), ENAME VARCHAR2 (10), FALTA DE FECHA DE HIREDATE TRUNC (SYSDATE), SAL NÚMERO (7,2), FALTA NÚMERO (7,2) DE COMM 0.03);

Cree una Comando Simple

463 Esto creará una comando llamada EMP en el esquema de SCOTT. El uno o el otro usuario SCOTT

él mismo tiene que publicar la select (en cuyo instancia denominar el esquema realmente no sería necesario), u otro usuario podría publicarlo si le han concedido el permiso de crear tablas en el esquema de otro usuario. La toma de las columnas uno tras otro:

■ el EMPNO puede ser 4 dígitos mucho tiempo, sin sitios decimales. Si cualquier decimal es incluido en una select de INSERCIÓN, doblarán sobre ellos (o abajo) al número entero más cercano.

■ el ENAME puede almacenar cualquier carácter en absoluto, hasta diez de ellos. ■ el HIREDATE aceptará cualquier fecha, opcionalmente con el tiempo, pero si un valor es

no a condición de que, la fecha de hoy sea entrada como en la medianoche. ■ SAL, querida para el sueldo del empleado, aceptará valores numéricos con

a 7 dígitos. Si cualquier dígito que más de 7 sean a la derecha de la coma decimal, ellos serán acabados.

■ COMM (para el porcentaje de comisión) tiene un valor por defecto de 0.03, que va sea entrado si la select de INSERCIÓN no incluye un valor para esta columna.

La creación siguiente de la comando, estas select insertan una fila y seleccionan el resultado:

SQL> insertan en scott.emp (empno, ename, sal) valores (1000, 'John', 1000.789); 1 fila creada. SQL> seleccionan * de emp;

EMPNO ENAME HIREDATESAL COMM ---------- ---------- --------- ---------- ----------

1000 John 19-NOV-07 1000.79 .03

Note que los valores para las columnas no mencionadas en la select de INSERCIÓN tienen sido generado por las cláusulas POR DEFECTO. A condición de que aquellas cláusulas no habían sido definidas en la definición de comando, las columnas habrían sido NULAS. También note que el doblamiento del valor aseguró la SAL.

464 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Page 399: curso_sql_certificacion

La cláusula POR DEFECTO puede ser útil, pero es de la funcionalidad limitada. Usted no puede usar una subpregunta para generar el valor por defecto: usted sólo puede especificar valores literales o funciones.

La creación de Tablas de Subconsultas Más bien que crear una comando de nada y luego insertar filas en ello (como en la sección anterior), las tablas pueden ser creadas de otras tablas usando una subpregunta. Esta técnica le deja crear la definición de comando y poblar la comando con filas con sólo una select. Cualquier pregunta en absoluto puede ser usada como la fuente tanto de la estructura de comando como de las filas. La sintaxis es como sigue:

CREE LA COMANDO [esquema]. comando COMO subpregunta;

Todas las preguntas devuelven un SET de dos dimensiones de filas; este resultado es

almacenado como el nuevo comando. Un ejemplo simple de crear una comando con una subpregunta es:

cree la comando employees_copy como sentencia * de EMPLOYEES;

Esta select creará una comando EMPLOYEES_COPY, que es una copia exacta de la comando de EMPLOYEES, idéntica tanto en la definición como en las filas esto contiene. Cualquiera no nulo y coacciones de control en las columnas también será aplicado a la nueva comando, pero cualquier clave primaria, las coacciones de clave foránea o únicas no serán. (Hablan de coacciones en el artículo 11.05, "Explique Como las Coacciones Son Creadas en el momento de la Creación de Comando.") Esto es porque estos tres tipos de coacciones requieren índices que no podrían estar disponibles o deseados.

Lo siguiente es un ejemplo más complejo:

cree la comando emp_dept como sentencia

los last_name ename, department_name dname, por ahí (sysdate - hire_date) servicio de EMPLOYEES DEPARTMENTS de juntura naturales piden por dname, ename;

Las filas en la nueva comando serán el resultado de afiliarse a las dos tablas de la

fuente, con dos de las columnas seleccionadas que cambian sus nombres. La nueva columna de SERVICIO será poblada con el resultado de la aritmética que computa el número de días ya que el empleado fue contratado. Las filas serán insertadas en el pedido especificado. Este pedido no será mantenido por DML subsecuente, pero, asumiendo los datos de esquema de HORA estándares, la nueva comando parecerá a esto:

SQL> seleccionan * de emp_dept donde rownum <10; ENAMEDNAME SERVICIO----------------------------------------Gietz

Contabilidad 4914

De Haan Kochhar Chen Faviet Popp Sciarra Urman Austin 9 filas seleccionado.

Page 400: curso_sql_certificacion

Finanzas de Finanzas de Finanzas de Finanzas Ejecutivas ejecutivas Lo financian

Cree una Comando Simple

5424 6634 3705 4844 2905 3703 3545 3800

465 La subpregunta puede incluir por supuesto un DONDE la cláusula para restringir las

filas insertó en la nueva comando. Para crear una comando sin filas, use un DONDE la cláusula que excluirá todas las filas:

cree la comando no_emps como sentencia * de EMPLOYEES donde 1=2;

EL DONDE la cláusula 1=2 nunca puede volver LA VERDAD ES QUE entonces la

estructura de comando será creado listo para el uso, pero ningunas filas será insertado en el tiempo de creación.

El cambio de Definiciones de Comando después de Creación Hay muchas modificaciones que pueden ser hechas a una comando después de la

creación. Aquellos que afecte el almacenamiento físico caen al dominio del administrador de base de datos, pero muchos cambios son puramente lógicos y serán realizados por los developeres SQL. Lo siguiente es ejemplos (en su mayor parte que se explica por sí mismo):

■ Adición de columnas:

cambie comando los emp añaden (job_id número);

■ Modificación de columnas:

cambie comando los emp modifican (comm falta número (4,2) 0.05);

■ columnas que se Caen:

cambie la comando emp columna de gota comm;

■ marcar columnas como no usado:

cambie comando los emp ponen la columna no usada job_id;

■ Renombrar columnas:

cambie comando los emp renombran la columna hiredate al

reclutado;

■ marcar la comando como sólo para leer:

cambie comando los emp sólo leen;

466

Page 401: curso_sql_certificacion

Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Todos estos cambios son comandos de DDL con el incorporado DESTINAN. Ellos son por lo tanto no reversibles y fallarán si hay una transacción activa contra la comando. Ellos también son prácticamente instantáneos a excepción de la caída de una columna. La caída de una columna puede ser un ejercicio entretenido porque ya que cada columna es dejada caer, cada fila debe ser reestructurada para borrar los datos de la columna. El SET comando NO USADO, que hace columnas inexistentes por lo que SQL está referido, a menudo es una mejor alternativa, seguida cuando conveniente de

CAMBIE COMANDO los tablename DEJAN CAER COLUMNAS NO USADAS;

que dejará caer todas las columnas no usadas en un pase por la comando. Marcar una comando como sólo para leer causará errores para cualquiera intentó comandos de DML.

Pero la comando todavía puede ser dejada caer. Esto puede ser desconcertante, pero es absolutamente lógico cuando usted lo estudia detenidamente. Un comando de GOTA realmente no afecta la comando: esto afecta las tablas en el diccionario de datos que definen la comando, y éstos no son sólo para leer.

La caída y el Truncamiento de Tablas El comando de COMANDO TRUNCADO fue descrito en el Capítulo 10: esto tiene el

efecto de borrar cada fila de una comando, dejando la definición de comando intacta. La COMANDO DE GOTA es más drástica en esto la definición de comando es borrada también. La sintaxis es como sigue:

COMANDO DE GOTA [esquema]. tablename;

Si el esquema no es especificado, entonces la comando llamó tablename su

actualmente registrado

en el esquema será dejado caer. Como con un TRUNCADO, SQL no producirá una advertencia antes de que la

comando sea dejada caer, y además, como con cualquier comando de DDL, esto incluye DESTINAR. Una GOTA es por lo tanto absolutamente no reversible. Pero hay algunas restricciones: si cualquier sesión (hasta su propio) tiene una transacción en el progreso que incluye una fila en la comando, entonces la GOTA fallará, y también es imposible dejar caer una comando que es mandada a en una coacción de clave foránea definida para una otra comando. Esta comando (o la coacción) debe ser dejada caer primero.

EJERCICIO 11-4 Crea Tablas Cree una Comando Simple

Page 402: curso_sql_certificacion

467 En este ejercicio, use al Developer SQL para crear una comando de montón, insertar algunas filas con una subpregunta, y modificar la comando. Haga algunas modificaciones más con SQL*Plus, luego deje caer la comando.

1. Conecte a la base de datos como la HORA de usuario con el Developer SQL. 2. El clic correcto la rama de Tablas del árbol de navegación, y hace clic en el New Table. 3. Llame la nueva comando EMPS, y use el botón Add Column para establecerlo como

en la ilustración siguiente:

4. Haga clic en la paleta DDL para ver si la select que ha sido construida. Esto

debería parecer a esto:

CREE COMANDO EMPS (NÚMERO DE EMPNO, ENAME VARCHAR2 (25),

468 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

NÚMERO DE SUELDO, NÚMERO DE DEPTNO (4, 0) );

Vuelva a la paleta de Comando (como en la ilustración precedente) y haga clic en el OK a cree la comando.

5. Ejecute esta select:

el inserción en emps selecciona employee_id,last_name,salary,department_id

Page 403: curso_sql_certificacion

de EMPLOYEES;

y destine el inserción:

destine;

6. El clic correcto la comando EMPS en el navegante de Developer SQL, haga clic en el Column y Añada. 7. Defina una nueva columna ALQUILADA, teclee la FECHA, como en la ilustración

siguiente abajo; y haga clic en el Apply para crear la columna.

8. Conecte a la base de datos como la HORA con SQL*Plus.

Explique Como Coacciones Son Creadas en el momento de Creación de

Comando

9. Defina una falta para la columna ALQUILADA en la comando EMPS:

cambie comando los emps modifican (falta alquilada sysdate);

469 10. Inserte una fila sin especificar un valor para el ALQUILADO y compruebe que el

nuevo la fila realmente tiene una fecha ALQUILADA, pero que las otras filas no hacen:

inserción en emps (empno, ename) valores (99, 'Newman'); escogido alquilado, la cuenta (1) de grupo emps por alquilado;

11. Comandoe dejando caer la nueva comando:

comando de gota emps;

Page 404: curso_sql_certificacion

OBJETIVO DE CERTIFICACIÓN 11.05

Explique Como Coacciones Son Creadas en el momento de Creación de Comando

Las coacciones de comando son un medio por el cual la base de datos puede hacer

cumplir gobiernos comerciales, y garantice que los datos se conforman con el modelo de relación de la entidad determinado por el análisis de sistemas que define las estructuras de datos de aplicación. Por ejemplo, los analistas comerciales de su organización pueden haber decidido que cada cliente y cada factura deben ser únicamente identificables por el número, que ningunas facturas pueden ser publicadas a un cliente antes de que aquel cliente haya sido creado, y que cada factura debe tener una fecha válida y un valor mayor que el cero. Éstos iban puesto en práctica creando coacciones de clave primaria en la columna CUSTOMER_NUMBER de la comando de CLIENTES y la columna INVOICE_NUMBER de la comando de FACTURAS, una coacción de clave foránea en la comando de FACTURAS que se refiere a la comando de CLIENTES, un no - coacción nula en la fecha columna de la comando de FACTURAS (el tipo de datos de FECHA asegurará que esto cualquier fecha es válida automáticamente - esto no aceptará fechas inválidas), y una coacción de control en la columna de CANTIDAD en la comando de FACTURAS.

Cuando cualquier DML es ejecutado contra una comando con coacciones definidas, si el DML viola una coacción, entonces la select entera será hecha rodar atrás automáticamente. Recuerde que una select DML que afecta muchas filas podría tener éxito parcialmente antes de que ella golpee un problema de coacción con una fila particular. Si la select es la parte de una transacción de multiselect, entonces las select que han tenido éxito ya permanecerán intactas, pero no comprometidas.

470 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Los Tipos de Coacciones Los tipos de coacción apoyados por la base de datos de Oracle son como sigue:

ÚNICO NO las Coacciones de CONTROL DE CLAVE FORÁNEA DE CLAVE

PRIMARIA NULAS tienen nombres. Es la práctica buena para especificar los

nombres con un estándar llamando la convención, pero si ellos no son explícitamente llamados, el Oracle generará nombres.

Las Coacciones únicas Una coacción única denomina una columna (o la combinación de columnas) para que el valor debe ser diferente para cada fila en la

Page 405: curso_sql_certificacion

comando. De ser basado en una columna sola, esto es conocido como la columna clave. Si la coacción es formada de más de una columna (conocido como una coacción única clave compuesta) las columnas no tienen que ser el mismo tipo de datos o son adyacentes en la definición de comando.

Una singularidad de coacciones únicas es que es posible escribir un valor NULO en la columna (s) clave; en efecto es posible tener cualquier número de filas con valores NULOS en su columna (s) clave. Tan seleccionar filas en una columna clave garantizará que sólo una fila es devuelta - a menos que usted busque el NULO, en cuyo instancia todas las filas donde las columnas claves son NULAS serán devueltas.

Las coacciones únicas son hechas cumplir por un índice. Cuando una coacción única es definida, el Oracle buscará un índice en la columna (s) clave, y si uno no existe será creado. Entonces siempre que una fila sea insertada, el Oracle buscará el índice para ver si los valores de las columnas claves están presentes ya: si ellos son, esto rechazará el inserción. La estructura de estos índices (conocido como índices de B*Tree) no incluye valores NULOS, que es por qué muchas filas con el NULO son permitidas: ellos simplemente no existen en el índice. Mientras el primer objetivo del índice es hacer cumplir la coacción, esto tiene un efecto secundario: el mejoramiento del rendimiento si las columnas claves son usadas en el DONDE las cláusulas de las select SQL. Sin embargo, seleccionar DONDE key_column es NULO no puede usar el índice porque esto no incluye el NULLs y siempre causará por lo tanto una exploración de la comando entera.

No Coacciones Nulas el no la coacción nula obliga valores a ser entrados en la columna clave. No las coacciones nulas son definidas por columna: si el requisito comercial es que un grupo de

Explique Como Coacciones Son Creadas en el momento de Creación de

Comando

471

las columnas deberían tener todos valores, usted no puede definir un no coacción nula para el grupo entero, pero en cambio debe definir un no coacción nula para cada columna.

Cualquier tentativa de insertar una fila sin especificar valores para el no columnas reprimidas nulas causa un error. Es posible evitar la necesidad de especificar un valor por la inclusión de una cláusula POR DEFECTO en la columna creando la comando, como hablado en la sección anterior en la creación de tablas.

Las Coacciones de Clave primaria La clave primaria son los medios de localizar una fila sola en una comando. El paradigma de base de datos relacional incluye un requisito que cada comando debiera tener una clave primaria, una columna (o la combinación de columnas) que puede ser usado para distinguir cada fila. La base de datos de Oracle se desvía del paradigma (como hacen algunas otras realizaciones RDBMS) permitiendo tablas sin claves primarias.

Las tablas sin claves primarias son posibles, pero no una idea buena. Aun si las reglas comerciales no requieren la capacidad de identificar cada fila, las claves

Page 406: curso_sql_certificacion

primarias a menudo son necesarias para el trabajo de mantenimiento.

La realización de una coacción de clave primaria es, en efecto, la unión de una coacción única y un no coacción nula. Las columnas claves deben tener valores únicos, y ellos pueden no ser nulos. Como con coacciones únicas, un índice debe existir en la columna (s) reprimida. Si uno no existe ya, un índice será creado cuando la coacción es definida. Una comando puede tener sólo una clave primaria. Trate de crear un segundo, y usted conseguirá un error. Una comando puede tener, sin embargo, cualquier número de coacciones únicas y no columnas nulas, tan si hay varias columnas que el

los analistas comerciales se han decidido debe ser único y poblado, uno de éstos puede ser designado la clave primaria y los demás hicieron único

Una coacción de clave primaria y no nulo. Un ejemplo podría ser una comando de es una coacción única combinada con a EMPLOYEES, donde dirección de correo electrónico, seguridad social no coacción nula. el número, y el número de empleado deberían ser todos

requerido y único.

Coacciones de Clave foránea Una coacción de clave foránea es definida en la comando de niño en una relación de niño paternal. La coacción denomina una columna (o columnas) en la comando de niño que equivale a la columna (s) de clave primaria en la comando paternal. Las columnas no tienen que tener

472 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

los mismos nombres, pero ellos deben ser del mismo tipo de datos. Las coacciones de clave foránea definen la estructura relacional de la base de datos: las relaciones "muchos a un" que conectan la comando, en su tercera forma normal.

Si la comando paternal tiene coacciones únicas así como (o en vez de) una coacción de clave primaria, estas columnas pueden ser usadas como la base de coacciones de clave foránea, aun si ellos son nullable.

Como los valores nulos de los permisos de una coacción única en la columna reprimida, tan hace una coacción de clave foránea. Usted puede insertar filas en la comando de niño con columnas de clave foránea nulas - aun si no hay una fila en la comando paternal con un valor nulo. Esto crea filas huérfanas y puede causar la confusión terrible. Por regla general, todas las columnas en una coacción única y todas las columnas en una coacción de clave foránea son mejor definidas con no coacciones nulas también; esto a menudo será un requisito comercial.

El intento de insertar una fila en la comando de niño para la cual no hay ninguna fila correspondiente en la comando paternal dará un error. Del mismo modo, borrar una fila en la comando paternal dará un error si hay ya las filas que se refieren a ello en la comando de niño. Hay dos técnicas para cambiar este comportamiento. En primer lugar, la coacción puede ser creada como EN BORRAR la CASCADA. Esto significa que si una fila en la comando paternal es borrada, el Oracle buscará la comando de niño todas las filas correspondientes y los borrará también. Esto pasará automáticamente. Una técnica menos drástica debe crear la coacción como EN BORRAR el SET NULO. En este instancia, si una fila en la comando paternal es borrada, el Oracle buscará la

Page 407: curso_sql_certificacion

comando de niño todas las filas correspondientes y pondrá las columnas de clave foránea al nulo. Esto significa que las filas de niño serán quedadas huérfanas, pero todavía existirán. Si las columnas en la comando de niño también tienen un no coacción nula, entonces la eliminación de la comando paternal fallará.

No es posible dejar caer o truncar la comando paternal en una relación de clave foránea, aun si no hay ningunas filas en la comando de niño. Esto todavía se aplica si el EN BORRAR el SET NULO o EN cláusulas BORRAR de CASCADA fueron usados.

Una variación en la coacción de clave foránea es la coacción de clave foránea que se autorefiere. Esto define una condición donde las filas de niño y padre existen en la misma comando. Un ejemplo sería una comando de EMPLOYEES, que incluye una columna para el gerente del empleado. El gerente es un empleado y debe existir en la comando. Tan si el

la clave primaria es la columna EMPLOYEE_NUMBER, y el gerente es identificado por una columna MANAGER_NUMBER, entonces el

Una coacción de clave foránea en la coacción de clave foránea declarará que el valor una comando de niño debe referirse a las columnas de la columna MANAGER_NUMBER debe de una coacción única o de una primaria refiérase atrás a EMPLOYEE_NUMBER válido. coacción clave en la comando paternal. Si un empleado es su propio gerente, entonces la fila

se referiría a sí. Explique Como Coacciones Son Creadas en el momento de Creación de

Comando

Compruebe Coacciones

473 Una coacción de control puede ser usada para hacer cumplir reglas simples, tal como que el valor entrado en una columna debe ser dentro de una variedad de valores. La regla debe ser una expresión que evaluará a VERDADERO o FALSO. Las reglas pueden referirse a valores absolutos entrados como literales o a otras columnas en la misma fila y pueden hacer el uso de algunas funciones. Tantas coacciones de control como usted quiere pueden ser aplicadas a una columna, pero no es posible usar una subpregunta para evaluar si un valor es permisible o usar funciones, como el SYSDATE.

El no la coacción nula es de hecho puesta en práctica como una coacción de control preconfigurada.

Definición de Coacciones Las coacciones pueden ser definidas creando una comando o añadidas a la comando

más tarde. Cuando definiendo coacciones en el tiempo de creación de comando, la coacción puede ser definida de acuerdo con la columna a la cual esto se refiere o al final de definición de comando. Hay más flexibilidad a la utilización de la técnica última. Por ejemplo, es imposible definir una coacción de clave foránea que se refiere a dos columnas, o una coacción de control que se refiere a cualquier columna además de aquel reprimido si la coacción es definida en la línea, pero ambos de éstos son posibles si la coacción es

Page 408: curso_sql_certificacion

definida al final de comando.

GUIÓN & SOLUCIÓN

Usted diseña estructuras de comando para una aplicación de recursos humanos. Los analistas comerciales han dicho que cuando un empleado abandona la compañía, su registro de empleado debería ser movido a una comando de archivo. ¿Pueden las coacciones ayudar? Las transacciones activas bloquean algunas select DDL contra tablas. Si usted quiere añadir una coacción o renombrar una columna en una comando ocupada y encontrar que la select siempre falla con "ORA-00054: ¿el recurso ocupado y adquiere con NOWAIT especificado o el intervalo de espera expiró," qué puede usted hacer?

Probablemente no. Las coacciones son queridas para hacer cumplir reglas comerciales simples: esto puede ser demasiado complicado. Puede estar bien necesario usar un gatillo de DML en la comando viva, que insertará automáticamente una fila en la comando de archivo siempre que un empleado sea borrado de la comando viva. Los gatillos pueden hacer el procesamiento mucho más complicado que una coacción. Quizás usted no debería hacer esta clase de la cosa cuando la base de datos está en el uso, pero debería esperar hasta el próximo período del tiempo de indisponibilidad previsto. Sin embargo, si usted realmente tiene que hacer el cambio de prisa, pregunte al administrador de base de datos a quiesce la base de datos: esto es un proceso que congelará todas las sesiones de usuario. Si usted es muy rápido, usted puede hacer el cambio entonces unquiesce la base de datos antes de que los usuarios finales se quejen.

474 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

Para las coacciones que requieren un índice (las coacciones de clave primaria y únicas), el índice será creado con la comando si la coacción es definida en el tiempo de creación de comando.

Considere estas dos select de creación de comando (a que los números de línea han sido añadidos):

12345678910 11 12 13 14 15 16

cree el departamento de comando (deptno coacción número (2,0) dept_deptno_pk coacción de clave primaria dept_deptno_ck control (deptno entre 10 y 90), dname varchar2 (20) coacción dept_dname_nn no nulo); cree la comando emp (empno coacción número (4,0) emp_empno_pk clave primaria, ename varchar2 (20) coacción emp_ename_nn no nulo, mgr coacción número (4,0) emp_mgr_fk referencias emp (empno), dob fecha, fecha de hiredate, deptno coacción número (2,0) emp_deptno_fk departamento de referencias (deptno) en borran el SET nulo, envían varchar2 por correo electrónico (30) coacción emp_email_uk único, coacción emp_hiredate_ck control (hiredate> = dob + 365*16), coacción emp_email_ck control ((instr (e-mail,' ')> 0) y (instr (e-mail,'. ')> 0)));

La toma de estas select línea por línea:

1. La primera comando creada es el DEPARTAMENTO, querido para pelearse para cada departamento. 2. DEPTNO no es numérico, 2 dígitos, ningunos decimales. Esto es la clave primaria de la comando.

La coacción es llamada DEPT_DEPTNO_PK. 3. Una segunda coacción aplicada a DEPTNO es un control que lo limita con

números en la variedad 10 a 90. La coacción es llamada DEPT_DEPTNO_CK.

Page 409: curso_sql_certificacion

4. La columna DNAME es carácteres de longitud variables, con una coacción DEPT_

DNAME_NN que lo hace no nullable. 5. La segunda comando creada es EMP, querido para pelearse para cada empleado. 6. EMPNO es numérico, hasta 4 dígitos sin decimales. Coacción EMP_

EMPNO_PK marca esto como la clave primaria de la comando. 7. ENAME es carácteres de longitud variables, con una coacción

EMP_ENAME_NN la fabricación de esto no nullable.

8. MGR es el gerente del empleado, que debe ser un empleado. El Cnel - el umn es definido del mismo modo como la columna de clave primaria de la comando de EMPNO. La coacción EMP_MGR_FK define esta columna como autoreferirse

Explique Como Coacciones Son Creadas en el momento de Creación de Comando

475

la clave foránea, entonces cualquier valor entrado debe referirse a una fila ya existente en EMP (aunque no sea reprimido no a ser nulo, tan puede ser dejado en blanco).

9. DOB, el cumpleaños del empleado, es una fecha y no reprimido. 10. HIREDATE es la fecha el empleado fue contratado y no es obligado. En

lo menos, todavía no. 11. DEPTNO es el departamento con el cual el empleado tiene que ver. El

la columna es definida del mismo modo como la columna de clave primaria de la comando de DEPARTAMENTO de DEPTNO, y la coacción EMP_DEPTNO_FK hace cumplir una relación de clave foránea: no es posible adjudicar a un empleado a un departamento que no existe. Aunque esto sea nullable.

12. La coacción EMP_DEPTO_FK es definida adelante como EN BORRAR el SET NULO, tan si la fila paternal en el DEPARTAMENTO es borrada, todas las filas de niño correspondientes en EMPNO tendrán el SET de DEPTNO al NULO.

13. El E-MAIL es datos de carácter de longitud variables, y debe ser único de ser entrado (aunque pueda ser dejado vacío).

14. Esto define una coacción de nivel de comando adicional EMP_HIREDATE_CK. El la coacción comprueba el uso del trabajo de niño rechazando cualquier fila donde la fecha de alquiler no es al menos 16 años más tarde que el cumpleaños. Esta coacción no podía ser definida de acuerdo con HIREDATE, porque la sintaxis no permite referencias a otras columnas a aquel punto.

15. Una coacción adicional EMP_EMAIL_CK es añadida a la columna de E-MAIL, que realiza dos controles en la dirección de correo electrónico. El INSTR funciona la búsqueda del en el símbolo (y carácteres de punto (.) (que siempre estará presente en una dirección de correo electrónico válida); si esto no puede encontrar a ambos, la condición de control volverá FALSO y la fila será rechazada.

Los ejemplos precedentes muestran varias posibilidades para definir coacciones en el tiempo de creación de comando. Lo siguiente es posibilidades adicionales no cubiertas:

■ Control de la creación de índice para las coacciones de clave primaria y únicas ■ Definición si la coacción debería ser comprobada en el tiempo de inserción (que es

en ausencia) o más tarde cuando la transacción es destinada

Page 410: curso_sql_certificacion

■ Select si la coacción está siendo de hecho hecha cumplir en absoluto (que es el la falta) o es inhibido

Es posible crear tablas sin coacciones y luego añadirlos más tarde con un comando de COMANDO CAMBIAR. El resultado final será el mismo, pero esta técnica

476 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

realmente hace el código menos mí documentación, ya que la definición de comando completa será extendida entonces sobre varias select más bien que estar en uno.

EJERZA 11-5 Trabajo con Coacciones

Use SQL*Plus o Developer SQL para crear tablas, añadir coacciones, y demostrar su uso.

1. Conecte a la base de datos como la HORA de usuario 2. Cree una comando EMP como una copia de algunas columnas de EMPLOYEES:

cree la comando emp como

seleccione employee_id empno, last_name ename, department_id deptno

de EMPLOYEES;

3. Cree un DEPARTAMENTO de comando como una copia de algunas columnas de

DEPARTMENTS:

cree el departamento de comando como

seleccione department_id deptno, department_name dname de DEPARTMENTS;

4. Use DESCRIBEN para describir la estructura de las nuevas tablas. Note esto el no la coacción nula en ENAME y DNAME ha sido transmitida de las tablas de la fuente.

5. Añada una coacción de clave primaria a EMP y al DEPARTAMENTO y una coacción de clave foránea

conexión de las tablas:

cambie comando los emp añaden la coacción emp_pk clave primaria

(empno);

cambie departamento de comando añaden la coacción dept_pk clave primaria (deptno); cambie comando los emp añaden la coacción

la clave foránea de dept_fk (deptno) departamento de referencias en borra el SET nulo;

La última coacción precedente no especifica que columna del DEPARTAMENTO a referencia; esta falta de voluntad a la columna de clave primaria.

6. Demuestre la eficacia de las coacciones tratando de insertar datos esto

Page 411: curso_sql_certificacion

los violará:

inserción en valores de departamento (10, 'Nuevo Departamento'); inserción en valores de emp (9999, 'Nuevo emp', 99); departamento de comando truncado;

DENTRO DEL EXAMEN Resumen de certificación

477

La utilización de Select de DDL para Crear y Manejar Tablas La select de COMANDO CREAR en efecto puede ser muy compleja. El volumen de Referencia SQL de la Base de datos de Oracle 11g el SET de documentación dedica 69 páginas a ello, con más 85 páginas para CAMBIAN LA COMANDO (por el contraste, la COMANDO DE GOTA toma sólo cuatro páginas). Para examen

objetivos, sólo el conocimiento de la estructura de comando más simple - la comando de montón - se requiere, con el conocimiento de los tipos de datos más básicos. In - derstanding, definición, y la utilización de coacciones es necesaria, pero no los métodos para controlar cuando (o si) ellos son hechos cumplir.

7. Comandoe dejando caer las tablas. Note que esto debe ser hecho en el pedido correcto:

comando de gota emp; departamento de comando de gota;

RESUMEN DE CERTIFICACIÓN Las tablas son estructuras de dos dimensiones que consisten en filas de columnas de datos

definidos tipos. La base de datos de Oracle realmente permite tipos de datos definidos por el usuario, pero en su mayor parte usted usará los tipos de datos incorporados.

Las tablas pueden ser creadas desde el principio: definición de cada columna y luego insertar filas. O bien, las tablas pueden ser creadas usando salida de una pregunta. Esta técnica última puede definir la comando e insertar filas en un comando, pero hay limitaciones: será necesario añadir clave primaria y coacciones únicas más tarde, mientras que ellos pueden ser definidos en el tiempo de creación de comando usando la antigua técnica.

Para asistir con hacer cumplir reglas comerciales, las coacciones pueden ser definidas para columnas. Éstos mantendrán la integridad de datos haciéndolo absolutamente

Page 412: curso_sql_certificacion

imposible de insertar datos que rompen las reglas.

478 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

✓TALADRADORA DE DOS MINUTOS

Clasifique los Objetos de Base de datos Principales ❑ Algunos objetos contienen datos, principalmente tablas e índices. los � objetos de

Programmatic, como procedimientos almacenados y funciones son ejecutables código.

Los � Vistas y sinónimos son objetos que dan el acceso a otros objetos.

Examine la Estructura de Comando ❑ Tablas son estructuras de dos dimensiones, almacenando filas definidas con columnas. ❑

Tablas existen dentro de un esquema. El nombre de esquema con el nombre de tabla hace un identificador único.

Liste en una lista los Tipos de datos que están Disponibles para Columnas ❑ Los tipos de datos de carácter más comunes son VARCHAR2, NÚMERO,

y FECHA. ❑ hay muchos otros tipos de datos.

Cree una Comando Simple ❑ Tablas no puede ser creado de nada o con una subpregunta. ❑ Después de la creación, las

definiciones de columna pueden ser añadidas, dejadas caer, o modificadas. ❑ La definición de

comando puede incluir valores por defecto para columnas.

Explique Como Coacciones Son Creadas en el momento de Creación de Comando

❑ Coacciones puede ser definido en el tiempo de creación de comando o añadido más tarde. ❑

Una coacción puede ser el inline definido con su columna o al nivel de comando después las columnas. ❑ coacciones de nivel de la Comando puede ser más complejo que aquellos el

inline definido. ❑ Una comando sólo puede tener una clave primaria, pero puede tener muchas llaves únicas. ❑ Una clave primaria es funcionalmente equivalente al único más no nulo. ❑ Una coacción única no para la introducción de muchos valores nulos. ❑ coacciones de Clave

Page 413: curso_sql_certificacion

foránea definen las relaciones entre tablas.

MÍ PRUEBA Mí Prueba

479 Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Clasifique los Objetos de Base de datos Principales 1. ¿Si una comando es creada sin especificar un esquema, en cuál esquema será? (Elija el mejor

respuesta.) A. Será una comando quedada huérfana, sin un esquema. B. La creación fallará. C. Estará en el esquema SYS. D. Estará en el esquema del usuario que lo crea. E. Estará en el esquema PÚBLICO.

2. Varios tipos de objeto comparten mismo namespace, y por lo tanto no pueden tener el mismo nombre en

el mismo esquema. ¿Cuál de los tipos de objeto siguientes no está en mismo namespace que los demás? (Elija la mejor respuesta.) A. El índice B. PL/SQL almacenó el procedimiento C. Synonym D. Table E. Ver

3. ¿Cuál de estas select fallará porque el nombre de tabla no es legal? (Elija dos respuestas.) A. cree la comando "SENTENCIA" (col1 fecha); B. crean la comando "minúscula" (col1 fecha); C. crean la tabla number1 (col1 fecha); D. crean la tabla 1number (col1 fecha); E. crean la actualización de comando (col1 fecha);

Examine la Estructura de Comando 4. ¿Qué distingue características de tablas de montón? (Elija dos respuestas.)

A. Un montón puede almacenar filas de longitud variables. B. Más de una comando puede

almacenar filas en un montón solo. C. Rows en un montón está en el pedido arbitrario.

480 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

D. No pueden poner índice a tablas de montón. E. Tables en un montón no tiene una clave

primaria.

Liste en una lista los Tipos de datos que están Disponibles para Columnas 5. ¿Cuáles de los tipos de datos siguientes es la longitud variable? (Elija todas las respuestas

correctas.)

A. GOTA B. TRABAJO POR HORAS C. MUCHO TIEMPO D. EL NÚMERO E. MATERIA

PRIMA F. VARCHAR2

Page 414: curso_sql_certificacion

6. Estudie estas select:

cree la tabla tab1 (c1 fecha número (1), c2); cambie la sesión puso nls_date_format ='dd-mm-yy'; inserción en valores de tab1 (1.1, '31-01-07');

¿Tendrá éxito el inserción? (Elija la mejor respuesta)

A. El inserción fallará porque los 1.1 son demasiado largos. B. El inserción fallará porque 'el 31-01-

07' es una cuerda, no una fecha. C. El inserción fallará por ambos motivos A y B. D. al cual el

inserción sucederá.

7. ¿Cuál de lo siguiente no es apoyado por el Oracle como un tipo de datos interno? (Elija el mejor respuesta.) A. TRABAJO POR HORAS B. FLOTADOR C. NÚMERO ENTERO D. CUERDA

Cree una Comando Simple 8. Considere esta select:

cree la tabla t1 como sentencia * de REGIONS donde 1=2;

¿Cuál será el resultado? (Elija la mejor respuesta.)

A. B.

Habrá un error debido a la condición imposible. Ninguna comando será creada porque las vueltas de

condición FALSAS. Mí Prueba

481 C.La tabla T1 será creada pero ningunas filas insertadas porque las vueltas de condición

FALSAS. D. La tabla T1 será creada y cada fila en REGIONS insertada porque la

condición

devuelve un NULO como un filtro de fila.

9. Cuando una comando es creada con una select, como lo siguiente:

cree la comando newtab como sentencia * de la paleta;

¿habrá alguna coacción en la nueva comando? (Elija la mejor respuesta.)

A. La nueva comando no tendrá ningunas coacciones, porque las coacciones no son copiadas

creando tablas con una subpregunta. B. Todas las coacciones en la PALETA serán copiadas a

NEWTAB. C. Primary key y las coacciones únicas serán copiados, pero no control y no coacciones nulas. D. Check y no coacciones nulas será copiado, pero no clave primaria o única. E. Todas las coacciones serán copiadas, excepto coacciones de clave foránea.

Explique Como Coacciones Son Creadas en el momento de Creación de Comando

Page 415: curso_sql_certificacion

10. ¿Qué tipos de la coacción requieren un índice? (Elija todo que se aplican.)

A. COMPRUEBE B. NO C NULO. CLAVE PRIMARIA D. ÚNICO

11. Una transacción consiste en dos select. El primer tiene éxito, pero el segundo (que actualiza varias filas) falla parcialmente por debido a una violación de coacción. ¿Qué pasará? (Elija la mejor respuesta.) A. La transacción entera será hecha rodar atrás. B. La segunda select será hecha rodar atrás completamente, y el primer será destinado. C. La segunda select será hecha rodar atrás completamente, y el primer permanecerá no comprometido. D. Sólo una actualización que causó la violación será hecha rodar atrás; todo lo demás será

comprometido. E. Sólo una actualización que causó la violación será hecha rodar atrás; todo lo demás va

permanezca no comprometido.

482 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

PREGUNTA DE LABORATORIO Considere este análisis simple de un sistema de facturación telefónico:

Un suscriptor es identificado por un número de cliente y también tiene un nombre y posiblemente uno o varios teléfonos.

Un teléfono es identificado por su número, que debe ser un número entero de 7 dígitos que comienza con 2 o 3, y también tiene hacer, una fecha de activación, y una bandera para si es activo. Los teléfonos inactivos no son adjudicados a un suscriptor; los teléfonos activos son.

Para cada llamada, es necesario registrar el tiempo que esto comenzó y el tiempo que esto terminó. Cree tablas con coacciones y faltas que pueden ser usadas para poner en práctica este sistema.

MÍ PRUEBAN RESPUESTAS

Clasifique los Objetos de Base de datos Principales Mí Respuestas de Prueba

483 1. ® D. El esquema va la falta al usuario corriente. ✓

® A, B, C, E. A es incorrecto porque todas las tablas deben estar en un esquema. El B es incorrecto porque el ˚la creación tendrá éxito. El C es incorrecto porque el esquema SYS no es un esquema por defecto. El E es incorrecto porque mientras hay un PÚBLICO de usuario teórico, él no tiene un esquema en absoluto.

2. ® A. Indexes tienen su propio namespace. ✓® B, C, D, E. Los procedimientos almacenados, los sinónimos, las tablas, y las vistas existen en

mismo namespace. ˚

3. ® D, E. El D viola la regla que un nombre de tabla debe comenzar con una carta, y E viola la regla

Page 416: curso_sql_certificacion

que un nombre de tabla no pueda ser una palabra reservada. Ambas reglas pueden ser evitadas usando

dobles citas. ® A, B, C. Éstos son incorrectos porque todos tendrán éxito (aunque A y B no sean

exactamente prudentes). ˚

Examine la Estructura de Comando 4. ® A, C. Un montón es una comando de filas de longitud variables en el pedido arbitrario. ✓

® B, D, E. El B es incorrecto porque una comando de montón sólo puede ser una comando. Los

D y E son incorrectos porque ˚una comando de montón puede (y por lo general va) tener índices y una clave primaria.

Liste en una lista los Tipos de datos que están Disponibles para Columnas 5. ® A, C, D, E, F. Todos éstos son tipos de datos de longitud variables. ✓

® B. Las columnas de TRABAJO POR HORAS son la longitud fijada. ˚

6. ® D. Doblarán sobre el número a 1 dígito, y la cuerda dará el papel de una fecha. ✓

® A, B, C. El doblamiento automático y el lanzamiento de tipo corregirán los "errores", aunque

idealmente ellos ˚no ocurriría.

7. ® D. La CUERDA no es un tipo de datos interno. ✓

® A, B, C. TRABAJO POR HORAS, FLOTADOR, y NÚMERO ENTERO son todos los tipos de

datos internos, aunque no como extensamente ˚usado como algunos otros.

Cree una Comando Simple 8. ® C. La condición sólo se aplica a las filas seleccionadas para el inserción, no a la creación de

comando. ✓

® A, B, D. A es incorrecto porque la select es sintácticamente correcta. El B es incorrecto porque

el ˚la condición no se aplica al DDL, sólo al DML. El D es incorrecto porque la condición excluirá todas las filas de la selección.

484 Capítulo 11:

La utilización de Select de DDL para Crear y Manejar Tablas

9. ® D. Check y no coacciones nulas no son dependientes de ninguna estructura además de la comando ✓

a que ellos se aplican y tan pueden ser sin peligro copiados a una nueva comando. ® A, B, C, E. A es incorrecto porque no nulo y coacción de control será aplicado a nuevo ˚comando. Los B, C, y E son incorrectos porque estas coacciones necesitan otros objetos (índices o una comando paternal) y no copiadas también.

Explique Como Coacciones Son Creadas en el momento de Creación de

Page 417: curso_sql_certificacion

Comando

10. ® C, D. Las coacciones de clave primaria y únicas son hechas cumplir con

índices. ✓® A, B. Check y no coacciones nulas no confía en índices. ˚

11. ® C. Una violación de coacción hará retroceder un rollo de la select corriente, pero nada más. ✓® A, B, D, E. A es incorrecto porque todas las select que han tenido éxito permanecen intactas. B y D ˚son incorrectos porque no hay destinan de algo hasta que sea expresamente solicitado. El E es incorrecto porque la select entera será hecha rodar atrás, no sólo la fila fracasada.

RESPUESTA DE LABORATORIO Una solución posible:

■ La comando de SUSCRIPTORES:

cree a suscriptores de comando (número de identificación (4,0) coacción sub_id_pk clave primaria, coacción de nombre varchar2 (20) sub_name_nn no nulo);

■ La comando de TELÉFONOS:

cree teléfonos de comando (telno coacción número (7,0) tel_telno_pk coacción de clave primaria tel_telno_ck control (telno entre 1000000 y 9999999), falta de fecha activada sysdate, varchar2 activo (1) coacción tel_active_nn no coacción nula tel_active_ck control (='Y activo' o ='N activo'), coacción número (4,0) de suscriptor tel_sub_fk suscriptores de referencias, coacción tel_active_yn control ((='Y activo' y el suscriptor no son nulos) o (='N activo' y el suscriptor son nulos)));

Respuesta de laboratorio

485

Esta comando tiene una coacción en la columna ACTIVA que sólo permitirá Y o N, según si hay un valor en la columna de SUSCRIPTOR. Esta coacción es demasiado compleja para definir de acuerdo con la columna, porque esto se refiere a otras columnas. El SUSCRIPTOR, si no nulo, debe emparejar una fila en SUSCRIPTORES.

■ La comando de LLAMADAS:

cree llamadas de comando (telno coacción número (7,0) calls_telno_fk teléfonos de referencias, starttime coacción de fecha calls_start_nn no nulo, endtime coacción de fecha calls_end_nn no nulo, coacción calls_pk clave primaria (telno, starttime), coacción calls_endtime_ck control (endtime> starttime));

Dos coacciones son definidas al nivel de comando, no el nivel de columna. La clave primaria no

puede ser definido de acuerdo con una columna porque está basado en dos columnas: un teléfono puede hacer muchas llamadas, pero no dos que comienzan al mismo tiempo (al menos, no con la tecnología corriente). La coacción final compara el principio y los fines del tiempo de la llamada y tan no puede ser definida en la línea.

Page 418: curso_sql_certificacion

Esta página intencionadamente se dejó en blanco

12 Creación de Otros Objetos de Esquema

OBJETIVOS DE CERTIFICACIÓN

12.01 Cree Vistas Simples y Complejas

12.05 Cree y Mantenga Índices

12.02 Recupere Datos de Vistas

✓Taladradora de dos minutos

12.03 Cree Sinónimos Privados y Públicos

Q&A Mí Prueba

12.04 Cree, Mantenga, y Use Secuencias

Page 419: curso_sql_certificacion

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

488 Capítulo 12:

Creación de Otros Objetos de Esquema

Hasta ahora, la mayor parte de las

select SQL usadas en este libro se han dirigido a tablas. Esto parece razonable: los comandos de SQL

se relacionan con datos, y los datos son almacenados en tablas. En la práctica, la mayor parte de

usuarios nunca publican SQL que se dirige a tablas: ellos publican SQL que se dirige a vistas o

sinónimos. Las vistas y los sinónimos no almacenan datos; ellos proporcionan una capa de abstracción entre los usuarios y los datos. Como tablas, las vistas, y los sinónimos comparten mismo namespace, los usuarios nunca tienen que ser conscientes de que ellos se dirigen.

Las secuencias son un mecanismo para publicar números únicos. En muchas bases de datos, los valores de clave primaria son definidos como un número único. Una secuencia puede publicar tales números a petición, sin programadores que tienen que preocuparse de si ellos realmente son únicos. La estructura de una secuencia significa que cientos de números pueden ser, si es necesario, publicados cada segundo sin cualquier cuestión de rendimiento.

Page 420: curso_sql_certificacion

Se dice a veces que la dirección de índice miente en el dominio de administración de base de datos, no el dominio del developer SQL. Por esta razón, el tratamiento aquí es muy breve. Pero si la dirección de índice es la parte del trabajo del developer, todos los developeres deben entender el objetivo y diseño de índices. En muchos instancias la estrategia de indexación es crucial para el rendimiento adecuado: acierte en ello, y las ventajas serán enormes; consígalo incorrecto, y los resultados pueden ser desastrosos. El uso de índices es transparente, pero si los programadores son conscientes de ellos ellos pueden asegurar que su código será capaz de hacer el mejor uso de que índices están disponibles y aconsejan sobre que índices deberían ser creados.

OBJETIVO DE CERTIFICACIÓN 12.01

Cree Vistas Simples y Complejas Al usuario, una vista parece a una comando: una estructura de dos dimensiones de filas de las columnas, contra las cuales el usuario puede ejecutar select SENTENCIAS y DML. El programador sabe la verdad: una vista es sólo una select SENTENCIA. Cualquier select SENTENCIA devuelve un SET de dos dimensiones de filas. Si la select SENTENCIA es guardada como una vista, entonces siempre que los usuarios pregunten o actualicen filas en la vista (bajo la impresión que es la comando), las carreras de select, y el resultado es presentado a usuarios como si fuera una comando. La select SENTENCIA en la cual una vista está basada puede ser algo. Esto puede afiliarse a tablas, realizar agregaciones, o hacer clases; absolutamente algo que sea legal en el comando ESCOGIDO puede ser usado. Sin embargo, si la vista es compleja,

Cree Vistas Simples y Complejas

489

entonces las select sólo SENTENCIAS pueden ser ejecutadas contra ello. Una vista simple es el que que puede ser dirigido por select DML así como ESCOGIDO. Como podría ser esperado, las vistas simples están basadas en select SENTENCIAS relativamente simples; las vistas complejas están basadas en select más complicadas.

Las vistas comparten el mismo sintácticamente correcto. Pero operaciones de DML namespace como tablas: en todas partes esto a no siempre tendrá éxito. el tablename puede ser usado, un viewname también es

¿Por qué Vistas de Uso en Absoluto? No es por lo general una idea buena de dejar a usuarios finales soltar en tablas. Los

motivos posibles incluyen:

■ Seguridad. ■ Simplificación de usuario SQL. ■ Prevención de error. ■

Page 421: curso_sql_certificacion

Fabricación de datos comprensibles. La comando y los nombres de columna a menudo son largos y

bastante sin sentido. La vista y sus columnas pueden ser mucho más obvias. ■ Rendimiento.

Los ejemplos de vistas con cada uno de estos objetivos siguen.

Las vistas para Hacer cumplir la Seguridad que puede ser que los usuarios sólo deberían ver ciertas filas o columnas de una comando. Hay varios modos de hacer cumplir esto, pero una vista a menudo es la más simple. Considere la comando HR.EMPLOYEES. Esto incluye detalles personales que no deberían ser visibles para proveer de personal fuera del departamento de personal. Pero el personal de finanzas tendrá que ser capaz de ver la información de presupuesto. Esta vista va depersonalize los datos:

cree la hora emp_fin de vista como sentencia

hire_date,job_id,salary,commission_pct,department_id de hr.employees;

Note el uso de calificadores de esquema para la comando como la fuente de los datos

(a menudo referido como la base o la comando de detalle) y la vista: las vistas son objetos de esquema y pueden dibujar sus datos de tablas en el mismo esquema o en otros esquemas. Si el esquema no es especificado, estará por supuesto en el esquema corriente.

490 Capítulo 12:

Creación de Otros Objetos de Esquema

El personal de finanzas puede ser dado entonces el permiso de ver la vista, pero no la comando y puede publicar select, como esto:

seleccione * de emp_fin donde department_id=50;

Ellos sólo verán las cinco columnas que arreglan la vista, no el restante columnas de EMPLOYEES con la información personal. La vista puede ser afiliada a otras tablas o agregada como si fuera una comando:

seleccione department_name, sume (sueldo) de DEPARTMENTS la juntura natural

emp_fin

grupo por department_name;

Un SET bien construido de vistas puede poner en práctica una estructura de

seguridad entera dentro de la base de datos, dando el acceso de usuarios a datos que ellos tienen que ver ocultando datos que ellos no tienen que ver.

Las vistas para Simplificar al Usuario SQL será mucho más fácil para usuarios preguntar datos si el trabajo duro (como junturas o agregaciones) es hecho para ellos por el código que define la vista. En el último ejemplo, el usuario tuvo que escribir

Page 422: curso_sql_certificacion

el código que se afilió a la vista de EMP_FIN a la comando de DEPARTMENTS y sumó los sueldos por departamento. Esto podría ser todo hecho en una vista:

cree la vista dept_sal como seleccione d.department_name, sume (e.salary) de DEPARTMENTS d abandonó a EMPLOYEES de juntura externos e en d.department_ id=e.department_id grupo por la comando de department_name por department_name;

Entonces los usuarios pueden seleccionar de DEPT_SAL sin tener que saber algo sobre junturas, o hasta como clasificar los resultados:

seleccione * de dept_sal;

En particular, ellos no tienen que saber como asegurarse que todos los

DEPARTMENTS son puestos en una lista, hasta aquellos sin EMPLOYEES. El ejemplo en la sección anterior habría perdido éstos.

Las vistas para Prevenir Errores es imposible impedir a usuarios hacer errores, pero vistas bien construidas pueden prevenir algunos errores de provenir de una carencia del entendimiento de como los datos deberían ser interpretados. La sección anterior ya introdujo este concepto construyendo una vista que pondrá todos los DEPARTMENTS en una lista, independientemente de si ellos actualmente hacen adjudicar al personal a ellos.

Cree Vistas Simples y Complejas

491

Una vista puede ayudar a presentar datos en un camino que es inequívoco. Por ejemplo, muchas aplicaciones nunca realmente borran filas. Considere esta comando:

cree la comando emp (empno coacción de número emp_empno_pk clave primaria, ename varchar2 (10), deptno número, varchar2 activo (1) 'Y' por defecto);

La columna ACTIVA es una bandera que indica que el empleado es empleado actualmente y va la falta a 'Y' cuando una fila es insertada. Cuando un usuario, por el interface de usuario, "borra" a un empleado, la select SQL subyacente será una actualización que se pone ACTIVO a 'N'. Si usuarios que no son conscientes de esta pregunta la comando, ellos pueden interpretar mal con severidad los resultados. A menudo será mejor darles el acceso a una vista:

cree la vista current_staff como sentencia * de emp donde activo ='Y';

Las preguntas dirigidas a esta vista no pueden ver posiblemente a EMPLOYEES "borrados".

Las vistas para Hacer Datos Comprensibles Las estructuras de datos en una base de datos serán tablas normalizadas. No es razonable esperar que usuarios entiendan estructuras normalizadas. Para tomar un ejemplo de la suite de Negocio electrónico de Oracle, un "cliente" en el módulo de Cuentas por cobrar es de hecho una entidad que consiste en la información distribuida a través de las tablas HZ_PARTIES, HZ_PARTY_SITES, HZ_CUST_ACCTS_ALL, y muchos más. Todas estas tablas son conectadas por relaciones de clave primaria a clave foránea, pero éstos no son definidos en ningún identificador visible a usuarios (como un número de cliente): ellos están basados en columnas los

Page 423: curso_sql_certificacion

usuarios nunca ven que tienen valores generados internamente de secuencias. Las formas y los informes solían recuperar la información de cliente nunca se dirigen a estas tablas directamente; todos ellos trabajan a través de vistas.

Así como presentando datos a usuarios en una forma comprensible, el uso de vistas para proporcionar una capa de abstracción entre los objetos vistos por usuarios y los objetos almacenados dentro de la base de datos puede ser inestimable para el trabajo de mantenimiento. Se hace posible replantear las estructuras de datos sin necesidad tener de codificar de nuevo la aplicación. Si las tablas son cambiadas, entonces el ajuste de las definiciones de vista puede hacer cualquier cambio en el SQL y código de PL/SQL innecesario. Esto puede ser una técnica potente para hacer aplicaciones portátiles a través de bases de datos diferentes.

Las vistas para el Rendimiento La select SENTENCIA detrás de una vista puede ser optimizada por programadores, de modo que los usuarios no tengan que preocuparse de la afinación del código. Pueden haber muchas posibilidades para conseguir el mismo resultado, pero algunas técnicas pueden ser mucho más lentas que otros. Por ejemplo, afiliándose a dos tablas hay por lo general una opción entre el bucle anidado

492 Capítulo 12:

Creación de Otros Objetos de Esquema

únase y la juntura de picadillo. Una juntura de bucle anidada usa un índice para ponerse a filas individuales; una juntura de picadillo lee la comando entera en la memoria. La opción entre los dos será dependiente del estado de los datos y los recursos de hardware disponibles.

Teóricamente, uno siempre puede confiar en el Oracle optimizer para calcular la mejor manera de ejecutar una select SQL, pero hay instancias donde lo consigue incorrecto. Si los programadores saben qué técnica es la mejor, ellos pueden instruir el optimizer. Este ejemplo fuerza el uso de la técnica de picadillo:

cree la vista dept_emp como

seleccione / * + USE_HASH (DEPARTMENTS de EMPLOYEES) */department_name, last_name de DEPARTMENTS EMPLOYEES de juntura naturales;

Siempre que los usuarios pregunten la vista de DEPT_EMP, la juntura será realizada

por escanear las tablas de detalle en memoria. Los usuarios no tienen que saber la sintaxis para forzar el uso de este método de juntura. Usted no tiene que saberlo, tampoco: esto está más allá del alcance del OCP SQL el examen, pero el concepto de la afinación con el diseño de vista debería ser conocido.

Vistas simples y Complejas Con objetivos prácticos, la comandoación de una vista como simple o complejo está

relacionada con si las select DML pueden ser ejecutadas contra ello: las vistas simples pueden aceptar select DML, las vistas complejas no pueden. Las definiciones estrictas son como sigue:

Page 424: curso_sql_certificacion

■ Una vista simple dibuja datos de una comando de detalle, no usa ningunas funciones, y hace

ninguna agregación. ■ Una vista compleja puede afiliarse a tablas de detalle, usar funciones, y realizar agregaciones.

La aplicación de estas definiciones muestra que de las cuatro vistas usadas como ejemplos en

la sección anterior, el primer y el tercer son simples y los segundos y cuarto son complejos.

A menudo no es posible ejecutar INSERCIÓN, ACTUALIZACIÓN, o BORRAR manda contra una vista compleja. Trazar un mapa de las filas en la vista atrás a las filas en la comando (s) de detalle no siempre puede ser establecido en una base de uno a uno, que es necesaria para operaciones DML. Es por lo general posible ejecutar DML contra una vista simple, pero no siempre. Por ejemplo, si la vista no incluye una columna que tiene un NO coacción NULA, luego un INSERCIÓN a través de la vista no puede tener éxito (a menos que la columna tenga un valor por defecto). Esto puede producir un efecto desconcertante porque el mensaje de error se referirá a una comando y una columna que no son mencionados en la select, como demostrado en el primer ejemplo en la Figura 12-1.

Cree Vistas Simples y Complejas

493

FIGURA 12-1

DML contra vistas simples y complejas

La primera vista en la cifra, RNAME_V, realmente se conforma con la definición de una vista simple, pero un INSERCIÓN no puede ser realizado por ello porque esto pierde una columna obligatoria. La segunda vista, RUPPERNAME_V, es una vista compleja porque incluye una función. Esto hace un INSERCIÓN imposible, porque no hay ningún modo que la base de datos pueda calcular lo que realmente debería ser insertado: esto no puede invertir al ingeniero el efecto de la función SUPERIOR de una moda determinista. Pero BORRAR tiene éxito, porque no es dependiente de la función.

Por regla general, las vistas simples aceptan DML, las vistas complejas no hacen. Pero hay excepciones.

Page 425: curso_sql_certificacion

CREE VISTA, CAMBIE VISTA, y VISTA DE GOTA La sintaxis para crear una vista es como sigue: CREE [O REEMPLACE] [FUERZA |

NOFORCE] VISTA [esquema]. viewname [(alias [alias] )] COMO subpregunta [CON

OPCIÓN DE CONTROL [COACCIÓN constraintname]] [CON LEÍDO SÓLO

[COACCIÓN constraintname]];

Note que las vistas son objetos de esquema. No hay ninguna razón de no hacer

poseer una vista por un usuario que se refiere al detalle las tablas poseídas por otro usuario. En ausencia,

la vista va

494 Capítulo 12:

Creación de Otros Objetos de Esquema

sea creado en el esquema corriente. Las palabras claves opcionales, ninguna de las cuales ha sido usada en los ejemplos hasta ahora, son como sigue:

■ O REEMPLAZAN Si la vista ya existe, será dejada caer antes de ser creado.

■ FUERZA o NOFORCE La palabra clave de FUERZA creará la vista aun si la comando (s) de detalle en la subpregunta no existe. NOFORCE es la falta y causará un error si la comando de detalle no existe.

■ CON OPCIÓN DE CONTROL Esto debe hacer con DML. Si la subpregunta incluye un DONDE cláusula, entonces esta opción prevendrá la introducción de filas que no serían vistas en la vista o actualizaciones que harían que una fila desaparezca de la vista. En ausencia, esta opción no es habilitada, que puede dar resultados desconcertantes.

■ CON LEÍDO SÓLO Previene cualquier DML a través de la vista. ■ COACCIÓN constraintnameEsto puede ser usado para llamar el CON

COMPRUEBE LA OPCIÓN y CON EL LEÍDO SÓLO restricciones de modo que los mensajes de error cuando las restricciones hacen que select fallen, sean más comprensibles.

Además, un SET de nombres de alias puede ser proporcionado a los títulos de las columnas de la vista. Si no a condición de que, las columnas sean nombradas por las columnas de la comando o con aliases especificados en la subpregunta.

La figura 12-2 primero demuestra el efecto de crear una vista, R1, que permite la introducción de filas que no pueden ser vistas. La segunda vista, LOC1800, usa CON LA OPCIÓN DE CONTROL de impedir a esto pasar.

FIGURA 12-2

Uso de CON OPCIÓN DE CONTROL de prevenir comportamiento aparentemente anómalo

Page 426: curso_sql_certificacion

Cree Vistas Simples y Complejas

495

El uso principal del comando de VISTA CAMBIAR debe compilar la vista. Una vista debe ser compilada con éxito antes de que ella pueda ser usada. Cuando una vista es creada, el Oracle comprobará que las tablas de detalle y las columnas necesarias en las cuales la vista está basada existen. Si ellos no hacen, la compilación falla y la vista no será creada - a menos que usted use la opción de FUERZA. En este instancia, la vista será creada, pero será inservible hasta las tablas o columnas a las cuales se refiere son creados y la vista es con éxito compilada. Cuando una vista inválida es preguntada, el Oracle intentará compilarla automáticamente. Si la compilación tiene éxito porque el problema ha sido fijado, el usuario no sabrá que había alguna vez un problema - salvo que su pregunta puede tomar un poco más largo que de costumbre. En términos generales, usted debería compilar a mano vistas para asegurarse que ellos realmente compilan con éxito, más bien que tener usuarios descubren errores.

La figura 12-3 muestra el ciclo de error y corrección. En la cifra, la primera select crea una vista EX_STAFF esto se refiere a a

LOS EMPLOYEES LEFT_DATE de columna, que no existe. La select no falla porque la creación es forzada, pero esto realmente da una advertencia. Una tentativa de seleccionar de la vista falla. Después de añadir la columna necesaria a la comando de detalle, el ESCOGIDO tiene éxito. Esto es porque la vista fue compilada con éxito automáticamente. Finalmente, hay una compilación manual de la vista. Habría sido la mejor práctica para hacer esto inmediatamente después de añadir la columna ausente.

No es posible ajustar las definiciones de columna de una vista después de la creación en el modo que las columnas de una comando pueden ser cambiadas. La vista debe ser dejada caer y recreada. El comando de GOTA es como sigue:

DEJE CAER VISTA [esquema]. viewname; usando el O REEMPLAZAN palabras claves con el comando de VISTA CREAR, el

la vista será automáticamente dejada caer (si existe en absoluto) antes de ser creado.

FIGURA 12-3

Como corregir errores y compilar una vista

496 Capítulo 12:

Creación de Otros Objetos de Esquema

EJERCICIO 12-1 Crea Vistas

En este ejercicio, usted creará algunas vistas simples y complejas, usando datos en el esquema de HORA. SQL*Plus o el developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Cree vistas en los EMPLOYEES y tablas de DEPARTAMENTO que borran

toda la información personal:

Page 427: curso_sql_certificacion

cree la vista emp_anon_v como seleccione hire_date, job_id,salary,commission_pct,department_id de EMPLOYEES; cree la vista dept_anon_v como sentencia department_id,department_name,location_id de DEPARTMENTS;

3. Cree una vista compleja que se afiliará y agregará las dos vistas simples. Note que no hay ninguna razón de no tener vistas de vistas.

cree la vista dep_sum_v como seleccione e.department_id, personal de cuenta (1), sume sueldos (e.salary), d.department_name de emp_anon_v los e se afilian a dept_anon_v d en el grupo e.department_id=d.department_id por e.department_id, d.department_name;

4. Confirme que la vista trabaja preguntándolo, como en la ilustración siguiente:

OBJETIVO DE CERTIFICACIÓN 12.02

Recupere Datos de Vistas Recupere Datos de Vistas

497 Las preguntas pueden ser dirigidas a vistas exactamente como si a tablas. Vistas y tablas comparta mismo namespace, tan sintácticamente no hay absolutamente ninguna diferencia en las select SENTENCIAS. El usuario tiene que no tener ningún conocimiento de cual tipo del objeto él se dirija.

Considere esta vista:

cree la vista dept_emp como seleccione department_name, last_name de DEPARTMENTS acompañan a EMPLOYEES que usan (department_id);

La pregunta siguiente:

seleccione * de dept_emp donde department_name ='Marketing';

cuando analizado por el Oracle para la ejecución se hará:

seleccione * de (seleccione department_name, last_name de DEPARTMENTS acompañan a EMPLOYEES que usan (department_id)) donde department_name ='Marketing';

Usted raramente consigue algo para nada (tratando con Oracle Corporation), y el uso de vistas seguramente no hace de ningún modo reducen el trabajo que la base de datos tiene que hacer. Las vistas pueden reducir, sin embargo, considerablemente el trabajo que los usuarios tienen que hacer.

EJERZA 12-2 Vistas de Uso

En este ejercicio, usted usará las vistas creadas en el Ejercicio 12-1 para select

Page 428: curso_sql_certificacion

SENTENCIAS y DML. SQL*Plus o el developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Inserte un nuevo departamento a través de la vista de DEPT_ANON_V e intente a

inserte a un empleado por EMP_ANON_V:

inserción en valores de DEPT_ANON_V (99, 'Departamento Temp',

1800); inserción en valores de emp_anon_v (sysdate, 'AC_MGR', 10000,0,99);

498 Capítulo 12:

Creación de Otros Objetos de Esquema

El inserción en EMP_ANON_V fallará debido a la ausencia de valores obligatorios. Usted será, sin embargo, capaz de hacer esta actualización por ello:

actualice salary=salary*1.1 de SET de emp_anon_v;

Entonces el rollo apoya los cambios:

rollback;

3. Averigüe el sueldo medio del departamento con el sueldo medio más alto, preguntando la comando de EMPLOYEES:

máximo escogido (avg_sal) de (seleccione el AVG (SUELDO) avg_sal del grupo de EMPLOYEES por department_id);

y encuentre la misma información de la vista de DEP_SUM_V, que es mucho pregunta más simple: máximo escogido (sueldos / personal) de dep_sum_v;

OBJETIVO DE CERTIFICACIÓN 12.03

Cree Sinónimos Privados y Públicos Un sinónimo es un nombre alternativo para un objeto. Si los sinónimos existen para

objetos, entonces cualquier select SQL puede dirigirse al objeto por su nombre actual, o por su sinónimo. Esto puede parecer trivial. No es. El uso de sinónimos significa que una aplicación puede funcionar para cualquier usuario, independientemente del cual el esquema posea las vistas y tablas o hasta en cual base de datos las tablas residen. Considere esta select:

seleccione * de hr.employees@prod;

El usuario que publica la select debe saber que la comando de EMPLOYEES es

poseída por el esquema de HORA en la base de datos identificada por el GOLPECITO de enlace

Page 429: curso_sql_certificacion

de base de datos (no se preocupan de enlaces de base de datos - ellos son un medio de tener acceso a objetos en una base de datos además de esto en el cual usted es registrado). Si un sinónimo público ha sido creado con esta select:

cree el sinónimo público emp para hr.employees@prod;

entonces todo el usuario (¡cualquier usuario!) tengo que entrar es lo siguiente:

seleccione * de emp;

Cree Sinónimos Privados y Públicos

499

Esto da tanto la independencia de datos como la transparencia de posición. Las tablas y las vistas pueden ser renombradas o trasladadas sin necesidad tener alguna vez de cambiar el código; sólo los sinónimos tienen que ser ajustados.

Así como select SENTENCIAS, las select de DML pueden dirigirse a sinónimos como si ellos fueran el objeto al cual ellos se refieren.

Los sinónimos privados son objetos de esquema. Ellos deben estar en su propio esquema, o ellos deben ser calificados con el nombre de esquema. Los sinónimos públicos existen independientemente de un esquema. Un sinónimo público puede ser mandado a por cualquier usuario a quien el permiso haya sido concedido verlo sin la necesidad de calificar a él con un nombre de esquema. Los sinónimos privados deben ser un nombre único dentro de su esquema. Los sinónimos públicos pueden tener el mismo nombre que objetos de esquema. Cuando la ejecución de select que objetos de dirección sin un calificador de esquema, el Oracle buscará primero el objeto en el esquema local, y sólo si no puede ser encontrado lo va buscar un sinónimo público. Así, en el ejemplo precedente, si el usuario resultara poseer una comando llamada EMP sería esto que él vería - no la comando señaló a por el sinónimo público.

La sintaxis para crear un sinónimo es como sigue: CREE el sinónimo de SINÓNIMO [PÚBLICO] PARA el objeto; tendrán que haber concedido a un usuario el permiso de crear sinónimos privados

y permiso adicional de crear sinónimos públicos. Por lo general, sólo el administrador de base de datos puede crear (o gota) sinónimos públicos. Esto es porque su presencia (o ausencia) afectará a cada usuario.

El "público" en "público con un nombre de esquema. Esto no significa que el sinónimo" significa que no es un esquema cada uno tiene permisos contra ello. opóngase y no puede ser por lo tanto prefijado

Dejar caer un sinónimo:

GOTA [PÚBLICO] sinónimo de SINÓNIMO; Si el objeto al cual un sinónimo se refiere

(la comando o vista) es dejado caer, el sinónimo sigue existiendo. Cualquier tentativa de usarlo devolverá un error. A este respecto, los sinónimos se comportan del mismo modo como vistas. Si el objeto es recreado, el sinónimo debe ser compilado de nuevo antes del uso. Como con vistas, esto pasará automáticamente la próxima vez que el sinónimo es dirigido, o puede ser hecho explícitamente con

Page 430: curso_sql_certificacion

CAMBIE sinónimo de SINÓNIMO COMPILAN;

500 Capítulo 12:

Creación de Otros Objetos de Esquema

EJERCICIO 12-3 Crea y Sinónimos de Uso En este ejercicio, usted creará y usará sinónimos privados, usando objetos en la HORA esquema. SQL*Plus o el developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Cree sinónimos para las tres vistas creadas en el Ejercicio 12-1:

cree el sinónimo emp_s para emp_anon_v; cree el sinónimo dept_s para dept_anon_v; cree el sinónimo dsum_s para dep_sum_v;

3. Confirme que los sinónimos son idénticos al objeto subyacente:

describa emp_s; describa emp_anon_v;

4. Confirme que los sinónimos trabajan (hasta hasta el punto de producir el mismo errores) ejecutando las select en Ejercicios 12-1 y 12-2 contra los sinónimos en vez de las vistas:

seleccione * de dsum_s; inserción en valores de dept_s (99, 'Departamento Temp', 1800); inserción en valores de emp_s (sysdate, 'AC_MGR', 10000,0,99); actualice salary=salary*1.1 de SET de emp_s; rollback; máximo escogido (sueldos / personal) de dsum_s;

5. Deje caer dos de las vistas:

cáigase visualizan emp_anon_v; cáigase visualizan dept_anon_v;

6. Pregunte la vista compleja que está basada en las vistas dejadas caer:

seleccione * de dep_sum_v;

Note que la pregunta falla.

7. Tentativa de compilar de nuevo la vista rota:

cambie vista los dep_sum_v compilan;

Esto fallará también.

8. Deje caer la vista de DEP_SUM_V:

cáigase visualizan dep_sum_v;

Cree, Mantenga, y Use Secuencias

501

9. Pregunte el sinónimo para una vista dejada caer:

seleccione * de emp_s;

Esto fallará.

Page 431: curso_sql_certificacion

10. Compile de nuevo el sinónimo roto:

cambie sinónimo los emp_s compilan;

Note que esto no da un error, pero ejecuta de nuevo la pregunta del paso 9. Es definitivamente todavía roto.

11. Comandoe dejando caer los sinónimos:

sinónimo de gota emp_s; sinónimo de gota dept_s; sinónimo de gota dsum_s;

OBJETIVO DE CERTIFICACIÓN 12.04

Cree, Mantenga, y Use Secuencias Una secuencia es una estructura para generar valores enteros únicos. Sólo una sesión

puede lea el siguiente valor y así oblíguelo a incrementar. Esto es un punto de adaptación, entonces cada valor generado será único.

Las secuencias son un instrumento inestimable para generar claves primarias. Muchas aplicaciones necesitarán valores de clave primaria automáticamente generados. Los ejemplos en el procesamiento de información comercial diario son números de factura o números de pedido: los analistas comerciales habrán declarado que cada factura y pedido deben tener un número único, que debería incrementar continuamente. Otras aplicaciones pueden no tener tal requisito en términos comerciales, pero será necesario hacer cumplir la integridad relacional. Considere un sistema de facturación telefónico: en los términos de negocio el identificador único de un teléfono es el número de teléfono (que es una cuerda) y aquella de una llamada será el número de teléfono de la fuente y el tiempo que la llamada comenzó (que es un timestamp). Estos tipos de datos son innecesariamente complejos para usar como claves primarias para los altos volúmenes que pasan por un sistema de conmutación telefónico. Mientras esta información será registrada, será mucho más rápido para usar columnas numéricas simples para definir las claves foráneas y primarias. Los valores en estas columnas pueden ser la secuencia basada.

502 Capítulo 12:

Creación de Otros Objetos de Esquema

FIGURA 12-4

Uso de una secuencia por dos sesiones simultáneamente

Page 432: curso_sql_certificacion

El mecanismo de secuencia es independiente de tablas, el mecanismo de cierre de fila, y destine o procesamiento de rollback. Esto significa que una secuencia puede publicar miles de valores únicos un lejano del minuto más rápido que cualquier implicación de método que selecciona una columna de una comando, actualizándolo, y comisión del cambio.

La figura 12-4 muestra dos sesiones que seleccionan valores de una secuencia SEQ1. Note esto en la cifra cada selección de SEQ1. NEXTVAL genera un único

número. Los números son publicados consecutivamente por comando del tiempo que la selección fue hecha, y los incrementos de número globalmente, no sólo dentro de una sesión.

Creación de Secuencias La sintaxis llena para crear una secuencia es como sigue:

CREE LA SECUENCIA [esquema]. los sequencename [INCREMENTO POR el número] [COMIENZAN CON el número] [número de MAXVALUE | NOMAXVALUE] [número de MINVALUE | NOMINVALUE] [CICLO | NOCYCLE] [número de CACHE | NOCACHE] [PEDIDO | NOORDER];

Cree, Mantenga, y Use Secuencias

503

Puede verse que la creación de una secuencia puede ser muy simple. Por ejemplo, la secuencia usada en la Figura 12-4 fue creada con

cree la secuencia seq1;

Las opciones son mostradas en la comando siguiente.

INCREMENTO POR

COMIENCE CON

MAXVALUE

MINVALUE

CICLO

Page 433: curso_sql_certificacion

CACHE

PEDIDO

¿Cuánto más alto (o más abajo) que el último número publicado debería el siguiente número ser? Las faltas a +1 pero pueden ser cualquier número positivo (o número negativo para una secuencia inclinada). El punto de partida para la secuencia: el número resultó por la primera selección. Las faltas a 1 pero pueden ser algo. El número más alto una secuencia que sube puede ir a antes de generar un error o volver a su PRINCIPIO CON el valor. La falta no es ningún máximo. El número más bajo una secuencia inclinada puede ir a antes de generar un error o volver a su PRINCIPIO CON el valor. La falta no es ningún mínimo. Controla el comportamiento en el alcance de MAXVALUE o MINVALUE. El comportamiento por defecto es dar un error, pero si el CICLO es especificado la secuencia volverá a su punto de partida y repetición. Para el rendimiento, el Oracle puede prepublicar valores de secuencia en lotes y cache ellos para resultar a usuarios. La falta debe generar y cache los 20 siguientes valores. Sólo relevante para una base de datos arracimada: PIDA obliga todos los instancias en el racimo a coordinar incrementar la secuencia, de modo que los números publicados siempre estén en el pedido aun cuando publicado a sesiones contra instancias diferentes.

Configuraciones apropiadas para el INCREMENTO POR, COMIENCE CON, y MAXVALUE o MINVALUE vendrán de sus analistas comerciales.

Es muy raro para el CICLO ser usado porque esto deja a los valores de duplicado de cuestión de secuencia. Si la secuencia es usada para generar valores de clave primaria, el CICLO sólo tiene sentido si hay una rutina en la base de datos que borrará viejas filas más rápido que la secuencia reeditará números.

Esconder valores de secuencia es esencial para el rendimiento. Seleccionar de una secuencia es un punto de adaptación en el código de la aplicación: sólo una sesión puede hacer esto inmediatamente. El mecanismo es muy eficiente: es mucho más rápido que cierre de una fila, actualización de la fila, y luego abrirlo con DESTINAR. Pero aún así, seleccionar de una secuencia puede ser una causa de opinión entre sesiones. La palabra clave de CACHE instruye el Oracle de pregenerar números de secuencia en lotes. Esto significa que ellos pueden ser publicados más rápido que si ellos tuvieran que ser generados a petición.

504 Capítulo 12:

Creación de Otros Objetos de Esquema

El número por defecto de valores al cache es sólo 20. La experiencia muestra que esto no es bastante. Si su aplicación selecciona de la secuencia 10 veces por segundo, entonces puesto el valor de cache a 50 mil. No esté tímido por esto.

Utilización de Secuencias

Para usar una secuencia, una sesión puede seleccionar el siguiente valor con la columna pseudo NEXTVAL, que obliga la secuencia a incrementar, o el último (o "corriente") valor publicado a aquella sesión con la columna pseudo CURRVAL. El NEXTVAL será globalmente único: cada sesión que lo selecciona conseguirá un diferente, incrementado, el valor para cada uno SELECCIONA. El CURRVAL será constante para una sesión hasta que esto seleccione NEXTVAL otra vez. No hay

Page 434: curso_sql_certificacion

ninguna manera de averiguar cual el último valor publicado por una secuencia era: usted siempre puede obtener el siguiente valor incrementándolo con NEXTVAL, y usted siempre puede recordar el último valor publicado a su sesión con CURRVAL, pero usted no puede encontrar el último valor publicado.

El CURRVAL de una secuencia Usted no puede seleccionar el CURRVAL hasta que sea el último valor publicado a la corriente seleccionar la sesión NEXTVAL., no necesariamente el último valor resultó.

Un uso típico de secuencias es para valores de clave primaria. Este ejemplo usa una secuencia ORDER_SEQ para generar números de pedido únicos y LINE_SEQ para generar números de línea únicos para los artículos de línea del pedido. Primero cree las secuencias, que es una operación única:

cree la secuencia order_seq comienzan con 10; cree la secuencia line_seq comienzan con 10;

Entonces inserte los pedidos con sus líneas como una transacción sola:

inserción en pedidos (order_number, order_date, customer_number) valores (order_seq.nextval, sysdate, '1000'); inserción en order_lines (order_number,line_number,item_number,quantity) valores (order_seq.currval, line_seq.nextval, 'A111', 1); inserción en order_lines (order_number,line_number,item_number,quantity) valores (order_seq.currval, line_seq.nextval, 'B111', 1); destine;

Cree, Mantenga, y Use Secuencias

505

La primera select de INSERCIÓN levanta un pedido con un número de pedido único dibujado de la secuencia ORDER_SEQ para el cliente número 1000. Las segundas y terceras select insertan las dos líneas del pedido, usando el número de pedido antes publicado de ORDER_SEQ como la clave foránea para conectar las líneas al pedido, y los siguientes valores de LINE_SEQ para generar un identificador único para cada línea. Finalmente, la transacción es destinada.

Una secuencia no es atada a ninguna comando. En el ejemplo precedente, no habría ninguna razón técnica de no usar una secuencia para generar valores para las claves primarias del pedido y de las líneas.

DESTINAR no es necesario para hacer el incremento de una secuencia permanente: es permanente y hecho visible al resto del mundo el momento esto pasa. No puede ser hecho rodar atrás, tampoco. La figura 12-5 demuestra esto.

En la cifra, el segundo inserción es hecho rodar atrás. Pero ya que la pregunta final muestra, la secuencia fue incrementada a pesar de esto. Las actualizaciones de secuencia ocurren independientemente del sistema de gestión de transacción. Por esta razón, siempre habrá huecos en la serie. Los huecos serán más grandes si la base de datos ha sido reanudada y la cláusula de CACHE fue usada. Todos los números que han sido generados y escondidos, pero todavía no publicados serán perdidos cuando la base de datos es apagada. En el siguiente se reactivan, el valor corriente de la secuencia será el último número generado, no el último publicado. De este modo, con el CACHE por

Page 435: curso_sql_certificacion

defecto de 20, cada cierre/inicializador perderá hasta 20 números.

FIGURA 12-5

No puede hacerse rodar un incremento de secuencia atrás.

506 Capítulo 12:

Creación de Otros Objetos de Esquema

Algunos contables se disgustan mucho en la idea de huecos en la enumeración. Pregúnteles por qué esto importa. Esto por lo general no hace.

Si los analistas comerciales han declarado que no deben haber ningunos huecos en una secuencia, entonces otro medio de generar números únicos debe ser usado. Para el ejemplo precedente de levantar pedidos, el número de pedido corriente podría ser almacenado en esta comando e iniciado a 10:

cree la comando current_on (order_number número); inserción en valores de current_on (10); destine;

Entonces el código para crear un pedido tendría que hacerse:

actualice order_number=order_number de SET de current_on + 1; el inserción en pedidos (order_number, order_date, customer_number) valores ((seleccionan order_number de current_on), sysdate, '1000'); destine;

Esto trabajará seguramente como un medio de generar números de pedido únicos, y porque el incremento del número de pedido es dentro de la transacción que inserta el pedido, puede ser hecho rodar atrás con el inserción si es necesario: no habrá ningunos huecos en números de pedido, a menos que un pedido sea deliberadamente borrado. Pero es mucho menos eficiente que la utilización de una secuencia, y el código como esto es famoso de causar problemas de opinión terribles. Si muchas sesiones tratan de cerrar con llave e incrementar una fila que contiene el número corriente, la aplicación entera colgará ya que ellos hacen cola para tomar su dirección. Después de crear y usar una secuencia, puede ser modificado. La sintaxis es como sigue:

CAMBIE LA SECUENCIA sequencename [el INCREMENTO POR el número] [COMIENZA CON el número] [número de MAXVALUE | NOMAXVALUE] [número de MINVALUE | NOMINVALUE] [CICLO | NOCYCLE] [número de CACHE | NOCACHE] [PEDIDO | NOORDER];

Esto CAMBIA el comando es el mismo como el comando CREAR, con una excepción:

no hay ninguna manera de poner el valor inicial. Si usted quiere reanudar la secuencia, el único

Cree, Mantenga, y Use Secuencias

Page 436: curso_sql_certificacion

GUIÓN & SOLUCIÓN 507

Usted está implicado en intentar de una base de datos ser usada para entrada de pedido en línea e informe financiero fuera de línea. ¿Qué debería usted considerar en cuanto a vistas, sinónimos, e índices?

¿Deberían siempre las secuencias ser usadas para claves primarias?

Los datos deben ser normalizados para el almacenamiento, pero deberían ser denormalized en vistas para la recuperación. El uso dual de la base de datos será un problema: demasiados índices harán más lentos la entrada de pedido, demasiado pocos harán impacto negativamente en el obteniendo. Un enfoque alternativo sería crean un SET separado de tablas (posiblemente denormalized y agregado como las vistas) para el obteniendo y actualizan éstos con rutinas de lote. La utilización de sinónimos siempre haría más fácil cambiar entre realizaciones con y sin tablas de obteniendo separadas. En algunos instancias, los analistas comerciales pueden haber definido una clave primaria basada en atributos de los datos. Por ejemplo, una lista de suscriptores telefónicos podría ser keyed en el número de teléfono: esto es una cuerda formateada que puede tener la información, como la posición geográfica (para una línea de tierra) o conectar a la red al operador (para un móvil) empotrado dentro de ello. Pero por lo general una clave primaria no tiene el sentido, y en estos instancias una secuencia siempre es el mejor camino.

el camino es dejarlo caer y recrearlo. Ajustar el valor de cache de falta para mejorar rendimiento del ejemplo de entrada de pedido precedente:

cambie la secuencia order_seq cache 1000;

Sin embargo, si usted quiere reinicializar la secuencia a su valor inicial, el único

camino es a déjelo caer:

secuencia de gota order_seq;

y créelo otra vez.

EJERCICIO 12-4 Crea y Secuencias de Uso En este ejercicio, usted creará algunas secuencias y los usará. Usted necesitará dos sesiones concurrentes, Developer SQL o SQL*Plus.

1. Inicio de sesión a su base de datos dos veces, como HORA en sesiones separadas. Piense que es

su Una sesión y el otro para ser su sesión B.

508 Capítulo 12:

Creación de Otros Objetos de Esquema

2. En su Una sesión, cree una secuencia como sigue:

cree la secuencia seq1 comienzan con 10 nocache maxvalue 15 ciclo;

Page 437: curso_sql_certificacion

El uso de NOCACHE es deletéreo para el rendimiento. Si MAXVALUE es especificado, entonces el CICLO será necesario para prevenir errores cuando MAXVALUE es alcanzado.

3. Ejecute los comandos siguientes en la sesión apropiada en el correcto pedido de observar el uso de NEXTVAL y CURRVAL y el ciclismo de la secuencia:

1er 2do 3er 4to 5to 6to 7mo 8vo 9no 10mo

En Su Una Sesión

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.currval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

En Su Sesión B

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.currval del dual;

seleccione seq1.nextval del dual;

4. Cree una comando con una clave primaria:

cree la comando seqtest (c1 número, c2 varchar2 (10)); cambie comando los seqtest añaden la coacción seqtest_pk clave primaria (c1);

5. Cree una secuencia para generar valores de clave primaria:

cree la secuencia seqtest_pk_s;

6. En su Una sesión, inserte una fila en la nueva comando y destine:

inserción en valores de seqtest (seqtest_pk_s.nextval,

'primero'); destine;

Page 438: curso_sql_certificacion

7. En su sesión B, inserte una fila en la nueva comando y no lo destine:

inserción en valores de seqtest (seqtest_pk_s.nextval,

'segundo');

Cree y Mantenga Índices

509

8. En su Una sesión, inserte una tercera fila y destine:

inserción en valores de seqtest (seqtest_pk_s.nextval,

'tercero'); destine;

9. En su sesión B, el rollo apoya la segunda introducción:

rollback;

10. En su sesión B, ver los contenido de la comando:

seleccione * de seqtest;

Esto demuestra que las secuencias son incrementadas y el siguiente valor publicado inmediatamente, fuera del mecanismo de control de transacción.

11. Comandoe:

comando de gota seqtest; secuencia de gota seqtest_pk_s; secuencia de gota seq1;

OBJETIVO DE CERTIFICACIÓN 12.05

Cree y Mantenga Índices Los índices tienen dos funciones: hacer cumplir clave primaria y coacciones únicas y a mejore el rendimiento. La estrategia de indexación de una aplicación es crítica para el rendimiento. Teóricamente, el developer SQL no tiene que ser consciente de la existencia (o por otra parte) de índices, pero si el developer realmente sabe que índices existen y como ellos son estructurados, el developer puede escribir el código diseñado para explotarlos.

No hay ninguna demarcación clara de cuya dirección de índice de dominio mienta dentro de. Cuando los analistas comerciales especifican reglas comerciales que serán puestas en práctica como coacciones, ellos especifican en efecto índices. Los administradores de base de datos supervisarán la ejecución de código que se ejecuta en la base de datos y harán recomendaciones para índices. El developer, que debería tener la mejor idea de lo que continúa en el código y la naturaleza de los datos, también estará implicado en el desarrollo de la estrategia de indexación.

510 Capítulo 12:

Creación de Otros Objetos de Esquema

Page 439: curso_sql_certificacion

Para qué Índices Son Los índices son la parte del mecanismo de coacción. Si una columna (o un grupo de

columnas) es marcado como la clave primaria de una comando, entonces cada vez una fila es insertada en la comando, el Oracle debe comprobar que una fila con el mismo valor en la clave primaria no existe ya. Si la comando no tiene ningún índice en la columna (s), la única manera de hacer esto debe escanear directamente por la comando, comprobando cada fila. Mientras esto podría ser aceptable para una comando de sólo unas filas, para una comando con miles o millones (o mil millones) de filas, esto no es factible. Un índice da (cerca) de el acceso inmediato a valores de clave, entonces el control de la existencia puede ser realizado prácticamente al instante. Cuando una coacción de clave primaria es definida, el Oracle creará automáticamente un índice en la columna (s) de clave primaria, si uno no existe ya.

Una coacción única también requiere un índice. La diferencia de una coacción de clave primaria es que la columna (s) de la coacción única puede ser dejada nula, quizás en muchas filas. Esto no afecta la creación y el uso del índice: los nulls no entran en los índices B*Tree, como descrito en la siguiente sección, "Los tipos del Índice."

Las coacciones de clave foránea son hechas cumplir por índices, pero el índice debe existir en la comando paternal, no necesariamente en la comando para la cual la coacción es definida. Una coacción de clave foránea relaciona una columna en la comando de niño a la clave primaria o a un único entran la comando paternal. Cuando una fila es insertada en la comando de niño, el Oracle hará una consulta en el índice en la comando paternal para confirmar que hay una fila correspondiente antes de permitir el inserción. Sin embargo, usted siempre debería crear índices en las columnas de clave foránea dentro de la comando de niño por motivos de rendimiento: BORRAR en la comando paternal será mucho más rápido si el Oracle puede usar un índice para determinar si hay cualquier fila en la comando de niño que se refiere a la fila que está siendo borrada.

Los índices son críticos para el rendimiento. Ejecutando cualquier select SQL que incluya un DONDE cláusula, el Oracle tiene que identificarse qué filas de la comando deben ser seleccionadas o modificadas. Si no hay ningún índice en la columna (s) referida en el DONDE cláusula, la única manera de hacer esto es con una exploración de comando llena. Una exploración de comando llena lee cada fila de la comando, a fin de encontrar las filas relevantes. Si la comando tiene mil millones de filas, esto puede tomar horas. Si hay un índice en la columna (s) relevante, el Oracle puede buscar el índice en cambio. Un índice es una lista clasificada de valores de clave, estructurados en una manera que hace la búsqueda muy eficiente. Con cada valor de clave es un indicador a la fila en la comando. La localización de filas relevantes vía una consulta de índice es mucho más rápida que la utilización de una exploración de comando llena, si la comando es por encima de una cierta talla y la proporción de las filas para ser recuperadas es debajo de un cierto valor. Para pequeñas tablas, o para un DONDE la cláusula que recuperará una fracción grande de las filas de la comando, una exploración de comando llena va

Cree y Mantenga Índices

511

Page 440: curso_sql_certificacion

esté más rápido: usted puede confiar (por lo general) en el Oracle para tomar la decisión correcta, basada en la información que la base de datos junta al lado de las tablas y las filas dentro de ellos.

Una segunda circunstancia donde los índices pueden ser usados es para la comandoación. Una select SENTENCIA que incluye el PEDIDO POR, GRUPO POR, o palabras claves de UNIÓN (y algunos otros) debe clasificar las filas en el pedido - a menos que haya un índice, que puede devolver las filas en el pedido correcto sin tener que clasificarlos primero.

Una tercera circunstancia cuando los índices pueden mejorar el rendimiento es cuando las tablas son afiliadas, pero otra vez el Oracle tiene una opción: según la talla de las tablas y los recursos de memoria disponibles, puede ser más rápido para escanear tablas en la memoria y afiliarse a ellos allí, más bien que usar índices. La técnica de juntura de bucle anidada pasa por una comando usando un índice en la otra comando para localizar las filas correspondientes: esto es por lo general una operación intensiva por el disco. Una técnica de juntura de picadillo lee la comando entera en la memoria, lo converte en una tabla hash, y usa un algoritmo que desmenuza para localizar filas correspondientes; esto es más memoria y unidad central de proceso intensiva. Una juntura de fusión de clase clasifica las tablas en la columna de juntura entonces los fusiona juntos: esto a menudo es un compromiso entre disco, memoria, y recursos de unidad central de proceso. Si no hay ningunos índices, entonces el Oracle es con severidad limitado en las técnicas de juntura disponibles.

Tipos de Índice El oracle apoya varios tipos del índice, que tienen varias variaciones. Los dos tipos de índice de la preocupación aquí son el índice B*Tree, que es el tipo de índice por defecto, y el índice de bitmap. La única variación digna de la consideración con objetivos de examen se aplica a índices B*Tree: éstos pueden ser únicos o no únicos. Un índice único no permitirá la introducción de dos filas con los mismos valores de clave; un índice no único permitirá tantas filas como usted quiere con los mismos valores. No único es la falta.

Por regla general, los índices mejorarán el rendimiento para la extracción de datos, pero reducirán el rendimiento para operaciones DML. Esto es porque los índices deben ser mantenidos. Cada vez una fila es insertada en una comando, una nueva llave debe ser insertada en cada índice en la comando, que coloca una tensión adicional en la base de datos. Por esta razón, en sistemas de procesamiento de transacción es acostumbrado para guardar el número de índices tan bajo como sea posible (quizás no más que los necesarios para las coacciones) y en una pregunta - el sistema intensivo, como un depósito de datos, para crear tantos como podría ser provechoso.

B*Tree Pone índice A un índice B*Tree (los soportes "de B" para "el equilibrado") es una estructura de árbol. El nodo de raíz del árbol señala a muchos nodos al segundo nivel, que puede señalar a muchos nodos en

512 Capítulo 12:

Creación de Otros Objetos de Esquema

Page 441: curso_sql_certificacion

el tercer nivel, etcétera. La profundidad necesaria del árbol será en gran parte determinada por el número de filas en la comando y la longitud de los valores de clave de índice.

La estructura B*Tree es muy eficiente. Si la profundidad es mayor entonces tres o cuatro, que las llaves de índice son muy largas o la comando tiene mil millones de filas. Si ninguno si éstos son el instancia, entonces el índice necesita reconstruir.

Los nodos de hoja del árbol de índice almacenan las llaves de las filas, en el pedido, cada uno con un indicador que identifica la posición física de la fila. Entonces recuperar una fila con una consulta de índice, si el DONDE la cláusula usa un predicado de igualdad en la columna de clave primaria, el Oracle navega abajo el árbol al nodo de hoja que contiene el valor de clave deseado, luego usa el indicador para encontrar la fila. Si el DONDE la cláusula usa un predicado de no igualdad (como alguno de los operadores COMO, ENTRE,>, o <) entonces el Oracle puede navegar abajo el árbol para encontrar el primer valor de clave correspondiente y luego navegar a través de los nodos de hoja del índice para encontrar todos los otros valores correspondientes. Como esto hace así, esto recuperará las filas de la comando, en el pedido.

El indicador a la fila es el rowid. El rowid es un Oracle pseudocolumna patentada que cada fila en cada comando tiene. Cifrado dentro de ello es la dirección física de la fila. Como los rowids no son la parte del estándar SQL, ellos nunca son visibles a una select SQL normal, pero usted puede verlos y usarlos si usted quiere. Esto es demostrado en la Figura 12-6.

Rowid de una fila es globalmente único. Cada fila en cada comando en la base de datos entera tendrá rowid diferente. El cifrado rowid da la dirección física de la fila: de ello, el Oracle puede contar qué archivo de sistema operativo y donde en el archivo la fila es, y va directamente a ello.

FIGURA 12-6

La pruebas y la utilización rowids

Cree y Mantenga Índices

513

Los índices de B*Tree son un modo muy eficiente de recuperar filas si el número de filas necesarias es bajo en la proporción con el número total de filas en la comando y si la comando es grande. Considere esta select:

seleccione a la cuenta (*) de EMPLOYEES donde last_name entre 'Un %' y 'Z %';

Esto DONDE la cláusula es suficientemente amplia que incluirá cada fila en el comando. Sería mucho más lento a tal el índice para encontrar el rowids y luego usar el rowids para encontrar las filas que escanear la comando entera. Después de todo, es la comando entera que es necesaria. Otro ejemplo sería si la comando fuera bastante pequeña que un disco leído podría escanearlo en su totalidad: no habría ninguna razón en la lectura de un índice primero.

A menudo se dice que si la pregunta va a recuperar más del 2 a 4 por ciento de las filas, entonces una

Page 442: curso_sql_certificacion

exploración de comando llena será más rápida. Una excepción principal a esto es si el valor especificara en el DONDE la cláusula es NULA. NULLs no entran en índices B*Tree, entonces una pregunta, como esto:

seleccione * de EMPLOYEES donde last_name es nulo;

siempre causará una exploración de comando llena. Hay poco valor en la creación de un B*Tree el índice en una columna con pocos valores únicos, ya que no será selectivo: la proporción de la comando que será recuperada para cada valor de clave distinto será demasiado alta. En general, los índices de B*Tree deberían ser usados si:

■ El cardinality (el número de valores distintos) en la columna es alto, y ■ El número de filas en la comando es alto, y ■ La columna es usada en DONDE condiciones de JUNTURA o cláusulas

Los Índices de bitmap En muchas aplicaciones comerciales, la naturaleza de los datos y las preguntas son tales que los índices B*Tree no son de mucho uso. Considere la comando de ventas para una cadena de supermercados, almacenando un año de datos históricos, que pueden ser analizados en varias dimensiones. La figura 12-7 muestra un diagrama de relación de la entidad simple, con sólo cuatro de las dimensiones.

El cardinality de cada dimensión podría ser completamente bajo. Haga estas asunciones:

TIENDA Hay cuatro tiendas el PRODUCTO Hay 200 FECHA de productos Hay CANAL de 365 días Hay dos canales (paseo - en y entrega)

514 Capítulo 12:

Creación de Otros Objetos de Esquema

LA FIGURA 12-7 Tienda

Una comando de hecho con cuatro dimensiones

Canal Ventas Producto

Fecha

Asumiendo hasta la distribución de datos, sólo dos de las dimensiones (PRODUCTO y FECHA) tienen una selectividad mejor que el criterio comúnmente usado del 2 por ciento al 4 por ciento que hace un índice que vale la pena. Pero si predicados de variedad de uso de preguntas (como contar ventas en un mes, o de una clase de diez o más productos) entonces no hasta éstos se licenciarán. Esto es un simple hecho: los índices de B*Tree a menudo son inútiles en un entorno de depósito de datos. Una pregunta típica podría querer comparar ventas entre dos tiendas para andar - en compradores de una cierta clase del producto en un mes. Pueden haber bien índices B*Tree en las columnas relevantes, pero el Oracle no hará instancia de ellos como insuficientemente selectivo. Esto es para qué los índices de bitmap son diseñados.

Un índice de bitmap almacena el rowids asociado con cada valor de clave como un

Page 443: curso_sql_certificacion

bitmap. Los bitmaps para el índice de CANAL podrían parecer a esto:

WALKIN 11010111000101011101011101.. ENTREGA 00101000111010100010100010..

Esto indica que las dos primeras filas eran ventas para andar - en clientes, el tercer la venta era una entrega, la cuarta venta era un paseo - en, etcétera.

Los bitmaps para el índice de TIENDA podrían ser:

LONDRES 11001001001001101001010000.. OXFORD 00100010011000010001001000.. LECTURA 00010001000100000100100010.. GLASGOW 00000100100010000010000101..

Esto indica que las dos primeras ventas estaban en la tienda de Londres, el tercer

estaba en Oxford, el cuarto en Lectura, etcétera. Ahora si esta pregunta es recibida:

seleccione a la cuenta (*) de ventas donde canal ='WALKIN' y tienda

='OXFORD';

Cree y Mantenga Índices

El oracle puede recuperar los dos bitmaps relevantes y añadirlos juntos con un Booleano Y operación:

WALKIN 11010111000101011101011101.. OXFORD 00100010011000010001001100.. WALKIN & OXFORD

00000010000000010000000000..

515 El resultado del Y operación muestra que sólo el séptimo y dieciséis

las filas tienen derecho a la selección. Esta combinación de bitmaps es muy rápida y puede ser usada para poner en práctica operaciones de álgebra Booleanas complejas con muchas condiciones en muchas columnas usando cualquier combinación de Y, O, y NO operadores. Una ventaja particular que los índices de bitmap tienen sobre índices B*Tree consiste en que ellos incluyen NULLs. Por lo que el índice de bitmap está referido, NULO es sólo otro valor distinto, que tendrá su propio bitmap.

En general, los índices de bitmap deberían ser usados si:

■ El cardinality (el número de valores distintos) en la columna es bajo (tal como macho/femenino), y ■ El número de filas en la comando es alto, y ■ La

columna es usada en el álgebra Booleana (AND/OR/NOT) operaciones

Si usted supiera de antemano lo que las preguntas serían entonces usted podría construir índices B*Tree que trabajarían, como un índice compuesto en TIENDA y CANAL. Pero por lo general usted no sabe, que es donde la fusión dinámica de bitmaps da la gran flexibilidad.

La creación y la Utilización de Índices Los índices son creados implícitamente cuando la clave primaria y las coacciones

únicas son definidas,

Page 444: curso_sql_certificacion

si un índice en la columna (s) relevante no existe ya. La sintaxis básica para crear un índice explícitamente es como sigue:

CREE [ÚNICO | EL BITMAP] ÍNDICE [esquema]. indexname EN [esquema]. tablename (columna [column]);

El tipo por defecto del índice es un índice B*Tree no único. No es posible crear

un índice de bitmap único (y usted no querría a si usted pudiera: piense en la cuestión de cardinality). Los índices son objetos de esquema, y es posible crear un índice en un esquema en una comando en el otro, pero la mayor parte de personas encontrarían esto algo confuso. Un índice compuesto es un índice en varias columnas. Los índices compuestos pueden

516 Capítulo 12:

Creación de Otros Objetos de Esquema

esté en columnas de tipos de datos diferentes, y las columnas no tienen que ser adyacentes en la comando.

Muchos administradores de base de datos no lo consideran práctica buena para confiar en la creación de índice implícita. Si los índices son creados explícitamente, el creador tiene el control total sobre las características del índice, que puede hacerlo más fácil para el DBA a poder posteriormente.

Considere este ejemplo de crear tablas e índices y luego definir coacciones:

cree el departamento de comando (deptno número, dname varchar2 (10)); cree la comando emp (empno número, apellido varchar2 (10), nombre de pila varchar2 (10), dob fecha, deptno número); cree el índice dept_i1 único en el departamento (deptno); cree el índice emp_i1 único en emp (empno); cree el índice emp_i2 en emp (apellido, nombre de pila); cree el índice emp_i3 de bitmap en emp (deptno); cambie departamento de comando añaden la coacción dept_pk clave primaria (deptno); cambie comando los emp añaden la coacción emp_pk clave primaria (empno); cambie comando los emp añaden la coacción emp_fk clave foránea (deptno) departamento de referencias (deptno);

Los dos primeros índices creados son señalados como ÚNICOS, significando que

esto no va esté posible insertar valores duplicados. Esto no es definido como una coacción a este punto, pero es verdad sin embargo. El tercer índice no es definido como ÚNICO y aceptará por lo tanto valores duplicados; esto es un índice compuesto en dos columnas. El cuarto índice es definido como un índice de bitmap, porque el cardinality de la columna probablemente será bajo en la proporción con el número de filas en la comando.

Cuando las dos coacciones de clave primaria son definidas, el Oracle descubrirá los índices pre creados y los usará para hacer cumplir las coacciones. Note que el índice en DEPT.DEPTNO no tiene ningún objetivo para el rendimiento porque la comando va en toda la probabilidad ser tan pequeña que el índice nunca será usado para recuperar filas (una exploración será más rápida), pero todavía es esencial tener un índice para hacer cumplir la coacción de clave primaria.

Page 445: curso_sql_certificacion

Una clave primaria y única el instancia último, será una coacción no única puede ser hecho cumplir por índices el índice que resulta sólo tener único que son únicos o no únicos: en valores.

Cree y Mantenga Índices

517

Una vez creado, el uso de índices es completamente transparente y automático. Antes de ejecutar una select SQL, el servidor de Oracle evaluará todos los modos posibles de ejecutarlo. Algunos de estos caminos pueden implicar usar todo lo que los índices están disponibles, los otros pueden no. El oracle hará el uso de la información que esto junta en las tablas y el entorno para tomar una decisión inteligente sobre cual (si cualquiera) índices de usar.

El servidor de Oracle debería tomar la mejor decisión sobre el uso de índice, pero si lo consigue incorrecto que es posible para un programador empotrar instrucciones, conocidas como optimizer indirectas, en el código que forzará el uso (o no) de ciertos índices.

La modificación y la Caída de Índices Hay un comando, CAMBIE INDEXbut esto no puede ser usado para cambiar cualquier del las características descritas en este capítulo: el tipo (B*Tree o bitmap) del índice, las columnas, o si es único o no único. El comando de ÍNDICE CAMBIAR está en el dominio de administración de base de datos y sería típicamente usado para ajustar las propiedades físicas del índice, no las propiedades lógicas que son del interés para developeres. Si es necesario cambiar alguna de estas propiedades, el índice debe ser dejado caer y recreado. Seguir el ejemplo en la sección anterior, para cambiar el índice EMP_I2 para incluir los cumpleaños de los EMPLOYEES:

el índice emp_i2 de gota; cree el índice emp_i2 en emp (apellido, nombre de pila, dob);

Este índice compuesto ahora incluye columnas con tipos de datos diferentes. Las

columnas resulte ser puesto en una lista en el mismo pedido que ellos son definidos en la comando, pero esto no es de ningún modo necesario.

Cuando una comando es dejada caer, todos los índices y las coacciones definidas para la comando son dejados caer también. Si un índice fuera creado implícitamente creando una coacción, entonces la caída de la coacción también dejará caer el índice. Si el índice hubiera sido creado explícitamente y la coacción creada más tarde, entonces si la coacción es dejada caer el índice sobrevivirá.

518 Capítulo 12:

Creación de Otros Objetos de Esquema

Page 446: curso_sql_certificacion

DENTRO DEL EXAMEN

Creación de Otros Objetos de Esquema En muchas aplicaciones, los usuarios nunca ven tablas. Los datos de comando son abstraídos en vistas, y las vistas adelante abstraídas por sinónimos. El uso de vistas y sinónimos es completamente transparente a SQL: todos ellos comparten mismo namespace, y entonces el código se ejecutará contra cualquier de ellos. Las vistas pueden hacer estructuras relacionales complejas mucho más fáciles a usar, y los sinónimos proporcionan la propiedad de datos y la transparencia de posición.

El uso de índices también es transparente. Ellos se requieren hacer cumplir coacciones de clave primaria y únicas (y fuertemente aconsejados para coacciones de clave foránea) y puede ser opcionalmente creado para realzar el rendimiento. Los índices vienen a dos formas: B*Tree y bitmap. Llegar a una estrategia de indexación apropiada, que crea índices del tipo correcto en las columnas correctas, es crítico para el rendimiento.

EJERZA 12-5 Índices de Creación

Los índices de B*Tree son convenientes para columnas muy selectivas con cardinality alto; los índices de bitmap son convenientes para columnas con sólo unos valores distintos. El servidor de Oracle determinará en el tiempo de ejecución de select si usar índices, aunque los programadores puedan controlar esto por indirectas de fijación en su código.

Las secuencias son una instalación para generar números únicos. Es absolutamente imposible para dos sesiones leer el mismo valor de una secuencia. Las secuencias y sus valores existen fuera de la estructura de procesamiento de transacción. Si una secuencia es incrementada, este incremento no puede ser hecho rodar atrás y es inmediatamente visible a todas otras sesiones sin ninguno destinan. Las secuencias evitan los mecanismos para transacciones atómicas y aislamiento de transacción.

En este ejercicio, cree índices en una copia de la comando de EMPLOYEES en el esquema de HORA. SQL*Plus o el Developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Cree una comando que es una copia de EMPLOYEES:

cree la comando emps como sentencia * de EMPLOYEES;

Cree y Mantenga Índices

519

Esta comando no tendrá ni índices, ni coacciones de clave foránea o primarias, únicas, porque éstos no son copiados por una COMANDO CREAR COMO el comando. El NO las coacciones NULAS habrán sido copiadas. Confirme esto describiendo la comando:

describa emps;

Page 447: curso_sql_certificacion

3. Cree un índice para ser usado para la coacción de clave primaria:

cree el índice único emps_empid_i en emps (employee_id);

4. Demuestre que un índice único no puede aceptar duplicados, hasta antes a la coacción es definida:

inserción en emps (employee_id,last_name,email,hire_date,job_id) valores (198, 'Watson', '[email protected]', sysdate, 'IT_PROG');

Esto devolverá un error porque el índice no puede insertar segundo employee_ id 198. La unicidad de índice es un atributo del índice que puede existir sin una coacción, pero no debería ser confiado en hacer cumplir la integridad de datos.

5. Cree índices adicionales en columnas que probablemente serán usadas en DONDE cláusulas, usando B*Tree para columnas de cardinality alto y bitmap para columnas de cardinality bajo:

cree índice emps_name_i en emps (last_name, first_name); cree índice emps_tel_i en emps (phone_number); cree índice de bitmap emps_mgr_i en emps (manage_id); cree índice de bitmap emps_dept_i en emps (department_id);

6. Defina algunas coacciones:

cambie comando los emps añaden la coacción emps_pk clave primaria (employee_id);

cambie comando los emps añaden la coacción emps_email_uk único (e-mail); cambie comando los emps añaden la coacción emps_tel_uk único (phone_number);

7. Muestre los nombres de índice y su tipo:

seleccione index_name, index_type, unicidad de user_indexes donde table_name ='EMPS';

La vista USER_INDEXES muestra detalles de todos los índices en su esquema corriente. Note que además de los cinco índices explícitamente creados en los pasos 3 y 5, también hay un índice creado implícitamente con el nombre de la coacción definida en el E-MAIL. También note que la coacción única en PHONE_NUMBER

520 Capítulo 12:

Creación de Otros Objetos de Esquema

está siendo hecho cumplir con un índice no único; esto es absolutamente posible, porque aunque el mecanismo de coacción use índices, es independiente de la estructura del índice.

8. Comandoe dejando caer la comando EMPS, y confirme que todos los índices tienen también ido:

comando de gota emps; seleccione index_name de user_indexes donde table_name ='EMPS';

RESUMEN DE CERTIFICACIÓN Las vistas son select sentencias, almacenadas en el diccionario de datos. Ellos pueden

ser preguntados

Page 448: curso_sql_certificacion

como si ellas fueran tablas, y en algunos instancias ellos pueden ser el objeto de select DML. Una vista simple es columnas de una comando, sin agregaciones o funciones; una vista compleja puede afiliarse a tablas, conjunto, y usar funciones. Por regla general, es posible hacer DML a través de una vista simple, pero no a través de una vista compleja - pero hay excepciones.

Los sinónimos son aliases que pueden estar acostumbrados a vistas de acceso y tablas. Los sinónimos pueden simplificar el código haciéndolo innecesario para especificar a calificadores de esquema o nombres de enlace de base de datos: ellos dejan al código ejecutado sin tener que saber sobre propiedad de datos o posición. Las tablas, las vistas, y los sinónimos comparten el nombre namespace: dentro de un esquema, ellos deben tener todos nombres diferentes y pueden ser usados de modo intercambiable.

Las secuencias generan números únicos, típicamente para el uso como valores de clave primaria. Los índices tienen un objetivo dual: hacer cumplir coacciones y realzar rendimiento.

Si un índice está disponible definiendo una coacción, el Oracle lo usará; por otra parte, un índice será implícitamente creado. Creando índices para el rendimiento, considere qué columnas son usadas para afiliarse a tablas o en DONDE las cláusulas y crean índices B*Tree en columnas con cardinality alto e índices de bitmap en columnas con relativamente pocos valores distintos.

Taladradora de dos minutos

521

✓TALADRADORA DE DOS MINUTOS

Cree Vistas Simples y Complejas ❑ Una vista simple tiene un detalle (o base) comando y no usa ni funciones, ni

agregación. ❑ Una vista compleja puede estar basado en cualquier select SENTENCIA, no importa como

complicado. ❑ Vistas son objetos de esquema. Usar una vista en otro esquema, el nombre de vista

debe ser calificado con el nombre de esquema.

Recupere Datos de Vistas ❑ Una vista puede ser preguntado exactamente como si fuera una comando. ❑ Vistas puede

ser afiliado a otras vistas o a tablas, ellos pueden ser agregados, y en algunos instancias ellos pueden aceptar select DML.

❑ Vistas sólo existen como construcciones de diccionario de datos. Siempre que usted pregunte una vista,

la select SENTENCIA subyacente debe ser ejecutada.

Page 449: curso_sql_certificacion

Cree Sinónimos Privados y Públicos ❑ Un sinónimo es un nombre alternativo para una vista o una comando. ❑ sinónimos Privados

son objetos de esquema; los sinónimos públicos existen el usuario exterior los esquemas y pueden ser usados sin especificar un nombre de esquema como un calificador.

❑ Sinónimos comparten mismo namespace que vistas y tablas y puede ser por lo tanto usado de modo intercambiable con ellos.

Cree, Mantenga, y Use Secuencias ❑ Una secuencia no genera valores únicos - a menos que MAXVALUE o

MINVALUE y el CICLO han sido especificados. ❑ Incrementar una secuencia no tiene que ser destinado y no puede ser hecho rodar atrás. ❑ Cualquier sesión puede incrementar la secuencia leyendo su siguiente valor. Es posible

obtener el último valor publicado a su sesión, pero no el último valor publicado.

522 Capítulo 12:

Creación de Otros Objetos de Esquema

Cree y Mantenga Índices ❑ Índices se requieren para hacer cumplir coacciones de clave primaria y únicas. ❑

los NULLs no son incluidos en índices B*Tree, pero son incluidos en índices de

bitmap. ❑ B*Tree índices puede ser único o no único, que determina si ellos puede aceptar valores de clave duplicados.

❑ B*Tree índices son convenientes para columnas cardinality altas, índices de bitmap para

bajo columnas de cardinality. ❑ Índices combinados tienen una llave que consiste en varias columnas, que

pueden ser de tipos de datos diferentes.

MÍ PRUEBA Mí Prueba

523 Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija todo el correcto responde de cada pregunta.

Cree Vistas Simples y Complejas 1. ¿Cuál de éstos es característica una definición de una vista compleja, más bien que una vista

Page 450: curso_sql_certificacion

simple? (Elija una o varias respuestas correctas.) A. La restricción de la proyección seleccionando sólo algunas columnas de la comando B. Naming las columnas de la vista con aliases de columna C. Restricting la selección de filas con un DONDE la cláusula D. La realización de una agregación E. Joining dos tablas

2. Considere estas tres select:

cree la vista v1 como department_id escogido, department_name, last_name de los DEPARTMENTS acompañan a EMPLOYEES que usan (department_id); seleccione department_name, last_name de v1 donde department_id=20; seleccione d.department_name, e.last_name de DEPARTMENTS d, EMPLOYEES e donde d.department_id=e.department_id y d.department_id=20;

La primera pregunta será más rápida que el segundo porque (eligen la mejor respuesta):

A. La vista ha hecho ya el trabajo de afiliarse a las tablas. B. La vista usa la sintaxis de juntura de

estándar de organización internacional para la normalización, que es más rápida que la sintaxis de

juntura de Oracle usada en la segunda pregunta.

C. La vista es precompilada, entonces la primera pregunta requiere la compilación menos dinámica que el segundo

pregunta. D. No hay ninguna razón de la primera pregunta para ser más rápida.

3. Estudie esta select de creación de vista:

cree la vista dept30 como seleccione department_id, employee_id, last_name de EMPLOYEES donde department_id=30 con la opción de control;

524 Capítulo 12:

Creación de Otros Objetos de Esquema

¿Qué podría hacer la select siguiente fallar? (Elija la mejor respuesta.)

actualice department_id=10 de SET de dept30 donde

employee_id=114;

A. A menos que no especificado por otra parte, las vistas serán creadas como CON EL LEÍDO SÓLO.

B. La vista es demasiado compleja para permitir operaciones DML. C. El CON LA OPCIÓN DE

CONTROL rechazará cualquier select que cambie el DEPARTMENT_ID. D. La select tendrá

éxito.

Recupere Datos de Vistas 4. Hay una vista simple SCOTT.DEPT_VIEW en la comando SCOTT.DEPT. Este inserción falla con

un error:

SQL> insertan en valores de dept_view ('APOYO', 'OXFORD'); inserción en valores de dept_view ('APOYO', 'OXFORD') *ERROR en línea 1: ORA-01400: no puede insertar NULO en ("SCOTT". "DEPARTAMENTO". "DEPTNO")

¿Cuál podría ser el problema? (Elija la mejor respuesta.)

A. El INSERCIÓN viola una coacción en la comando de detalle. B. El INSERCIÓN viola una

Page 451: curso_sql_certificacion

coacción en la vista. C. La vista fue creada como CON EL LEÍDO SÓLO. D. La vista fue creada

como CON LA OPCIÓN DE CONTROL.

Cree Sinónimos Privados y Públicos 5. ¿Qué distingue características de un sinónimo público, más bien que un sinónimo privado?

(Elija dos respuestas correctas.) A. Los sinónimos públicos siempre son visibles a todos los usuarios. Pueden tener acceso a sinónimos de B. Public de nombre sin un nombre de esquema calificador. Los sinónimos de C. Public pueden ser seleccionados desde fuera necesitando cualquier permiso. Los sinónimos de D. Public pueden tener los mismos nombres que tablas o vistas.

6. Considere estas tres select:

cree el sinónimo s1 para EMPLOYEES; cree el sinónimo público s1 para DEPARTMENTS; seleccione * de s1;

¿Cuál de las select siguientes es correcta? (Elija la mejor respuesta.) A. La segunda select fallará

porque un objeto S1 ya existe. B. La tercera select mostrará los contenido de EMPLOYEES. C. La

tercera select mostrará los contenido de DEPARTMENTS. Mí Prueba

525 D. La tercera select mostrará los contenido de la tabla S1, si tal comando existe en

el esquema corriente. 7. Una vista y un sinónimo son creados como sigue:

cree la vista dept_v como sentencia * del departamento; cree el sinónimo dept_s para dept_v;

Posteriormente el DEPARTAMENTO de comando es dejado caer. ¿Qué pasará si usted pregunta el

sinónimo DEPT_S? (Elija la mejor respuesta.) A. No habrá un error porque el sinónimo se dirige a la vista, que todavía existe, pero

no habrá ningunas filas devueltas. B. No habrá un error si usted primero compila de nuevo la vista con el comando CAMBIAN LA

VISTA DEPT_V COMPILAN LA FUERZA; C. Habrá un error porque el sinónimo será inválido. D.

Habrá un error porque la vista será inválida. E. Habrá un error porque la vista habrá sido dejada caer implícitamente cuando la comando

fue dejado caer.

Cree, Mantenga, y Use Secuencias 8. Una secuencia es creada como sigue:

cree la secuencia seq1 maxvalue 50;

Si el valor corriente es ya 50, cuando usted intenta seleccionar SEQ1. NEXTVAL lo que va ¿pase? (Elija la mejor respuesta.) A. La secuencia irá en bicicleta y la edición 0. B. La secuencia irá en bicicleta y la edición 1. C. La secuencia reeditará 50. D. Habrá un error.

9. Usted crea una secuencia como sigue:

Page 452: curso_sql_certificacion

cree la secuencia seq1 comienzan con 1;

526 Capítulo 12:

Creación de Otros Objetos de Esquema

Después de seleccionar de ello unas veces, usted quiere iniciarlo de nuevo para reeditar los números ya generados. ¿Cómo puede usted hacer esto? (Elija la mejor respuesta.) A. Usted debe dejar caer y recrear la secuencia. B. Usted no puede. De ninguna manera pueden los números de una secuencia ser reeditados una vez ellos

han sido usados. C. Use el comando CAMBIA LA SECUENCIA PRINCIPIO de SEQ1 CON 1; reinicializar el siguiente valor a 1. D. Use el comando CAMBIA LA SECUENCIA CICLO de SEQ1; reinicializar la secuencia a su

comienzo de valor. 10. Estudie el objeto expuesto siguiente:

¿Suponer que la secuencia SEQ1 fuera creada con el PEDIDO de opción e INCREMENTO POR el SET a 1, qué valor será devuelto por la select SENTENCIA final? (Elija la mejor respuesta.) A. 2 B. 3 C. 4 D. Esto dependerá de si cualquier otra sesión selecciona de la secuencia mientras el

las select en el objeto expuesto están siendo ejecutadas.

Cree y Mantenga Índices 11. Una coacción ÚNICA en una columna requiere un índice. Cual de los guiones siguientes es

¿correcto? (Elija una o varias respuestas correctas.) A. Si un índice ÚNICO ya existe en la columna, será usado. B. Si un índice NONUNIQUE ya existe será usado.

Pregunta de laboratorio

527

C. Si un índice NONUNIQUE ya existe en la columna, un índice ÚNICO será creado implícitamente.

D. Si cualquier índice existe en la columna, habrá un error ya que el Oracle intenta crear otro índice implícitamente. 12. Esta select fallará:

cree el índice de bitmap único en EMPLOYEES (department_id, hire_date);

Page 453: curso_sql_certificacion

¿Por qué? (Elija la mejor respuesta.)

A. Los índices de bitmap no pueden ser únicos. B. Las dos columnas son de tipos de datos

diferentes. C. Un índice de bitmap puede estar en sólo una columna. D. Hay ya un índice B*Tree

en DEPARTMENT_ID.

13. Usted ha creado un índice con esta select:

cree el índice ename_i en EMPLOYEES (last_name, first_name);

Como le puede ajustar el índice para incluir los cumpleaños de los EMPLOYEES, que es una

columna de tipo de fecha ¿DOB llamado? (Elija la mejor respuesta.) A. Use CAMBIAN EL ÍNDICE ENAME_I AÑADEN LA COLUMNA DOB;. B. Usted no puede hacer esto debido a la falta de armonía de tipo de datos. C. Usted debe dejar caer el índice y recrearlo. D. Esto sólo puede ser hecho si la columna DOB es NULA en todas las filas existentes.

PREGUNTA DE LABORATORIO La figura 12-7 en este capítulo muestra un diagrama de relación de la entidad para un sistema simple

diseñado para almacenar y analice ventas. Las columnas para las VENTAS de comando de hecho son como sigue:

■ SALE_ID Clave primaria generada

por el sistema

■ CHANNEL_ID Clave foránea a CANALES ■

PRODUCT_ID Clave foránea a PRODUCTOS

■ SHOP_ID Clave foránea a

TIENDAS ■ DAY_ID Clave

foránea hasta DÍAS

■ CANTIDAD La cantidad del producto se

vendió

528 Capítulo 12:

Creación de Otros Objetos de Esquema

Se espera que habrá varios millones de filas de VENTAS por año. Las tablas de dimensión son como sigue:

PRODUCTOS Una lista de todos los productos, incluso precio. Cardinality de unos cientos CANALICE métodos de ventas Posibles, como el paseo - en, Internet, y llame por teléfono Detalles de TIENDAS de todas las tiendas - no más que un par de docenas de DÍAS Fechas para cuales ventas están siendo almacenados: 365, identificado por número de día

Escriba el código para crear las tablas; cree índices; cree coacciones. Cree secuencias para ser usadas

para claves primarias donde necesario. Cree algunas vistas que presentarán los datos de una moda comprensible.

Page 454: curso_sql_certificacion

MÍ PRUEBAN RESPUESTAS

Cree Vistas Simples y Complejas Mí Respuestas de Prueba

529 1. los ® D, E. Aggregations y junturas hacen un complejo de vista y hacen el imposible

DML. ✓® A, B, C. Selection y proyección o columnas que renombran no hace el complejo de vista. ˚

2. ® D. Triste pero verdadero. Las vistas no ayudan al

rendimiento. ✓® A es incorrecto porque una vista es sólo una select SENTENCIA; esto no preejecuta la pregunta. El B es ˚incorrecto porque el Oracle optimizer clasificará cualquier diferencia en la sintaxis. El C es incorrecto porque, aunque las vistas sean precompiladas, esto no afecta la velocidad de compilar la select de un usuario.

3. ® C. El CON LA OPCIÓN DE CONTROL prevendrá DML que haría que una fila desaparezca ✓

de la vista. ® A, B, D. A es incorrecto porque las vistas son en ausencia creadas leyó/escribió. El B es incorrecto porque ˚la vista es una vista simple. El D es incorrecto porque la select no puede tener éxito porque la opción de control lo rechazará.

Recupere Datos de Vistas 4. ® A. Hay un NO coacción de CLAVE PRIMARIA o NULA en DEPT.DEPTNO. ✓

® B, C, D. El B es incorrecto porque las coacciones son hechas cumplir en tablas de detalle, no en vistas. C y ˚Los D son incorrectos porque el mensaje de error sería diferente.

Cree Sinónimos Privados y Públicos 5. ® B, los sinónimos de D. Public no son objetos de esquema y tan sólo pueden ser dirigidos directamente. Ellos ✓

puede tener los mismos nombres que objetos de esquema. ® A, C. Éstos son incorrectos porque deben conceder a usuarios privilegios en un sinónimo público antes ˚ellos pueden verlo o seleccionar de ello.

6. ® B. El comando de prioridad debe buscar el esquema namespace antes del público namespace, entonces ✓

será el sinónimo privado (a EMPLOYEES) que será encontrado. ® A, C, D. A es incorrecto porque un sinónimo puede existir tanto en el público namespace como en el ˚esquema namespace. El C es incorrecto porque el comando de prioridad encontrará el sinónimo privado primero. El D es incorrecto porque no sería posible tener una comando y un sinónimo

Page 455: curso_sql_certificacion

privado en el mismo esquema con el mismo nombre.

530 Capítulo 12:

Creación de Otros Objetos de Esquema

7. ® D. El sinónimo será fino, pero la vista será inválida. El oracle intentará compilar de nuevo ✓

la vista, pero esto fallará. ® A, B, C, E. A es incorrecto porque la vista será inválida. El B es incorrecto porque la FUERZA ˚la palabra clave sólo puede ser aplicada creando una vista (y todavía sería inválido, aún así). El C es incorrecto porque el sinónimo será fino. El E es incorrecto porque las vistas no son dejadas caer implícitamente (a diferencia de índices y coacciones).

Cree, Mantenga, y Use Secuencias 8. ® D. La falta es NOCYCLE, y la secuencia no puede avanzar adelante. ✓

® A, B, C. A y B son incorrectos porque el CICLO es inhibido en ausencia. Si fuera habilitado, ˚el siguiente número publicado sería 1 (no cero) porque 1 es la falta para el PRINCIPIO CON. El C es incorrecto porque de ninguna manera va una repetición de cuestión de secuencia valorar.

9. ® A. No es posible cambiar el siguiente valor de una secuencia, entonces usted debe

recrearlo. ✓® B, C, D. El B es incorrecto porque, mientras una secuencia NOCYCLE nunca puede reeditar números, ˚no hay ninguna razón por qué una nueva secuencia (con el mismo nombre) no puede hacer así. El C es incorrecto porque el PRINCIPIO CON sólo puede ser especificado en el tiempo de creación. El D es incorrecto porque esto no forzará un ciclo inmediato; esto sólo afectará lo que pasa cuando la secuencia alcanza su MAXVALUE o MINVALUE.

10. ® D. Si la secuencia está siendo usada por otras sesiones, no hay saber cuantos ✓

los incrementos pueden haber ocurrido entre el primer y las segundas select de

INSERCIÓN. ® A, B, C. La respuesta sería 4, C, salvo que podría haber habido ˚ forzado de incrementospor otras sesiones. A y B son incorrectos porque el ROLLBACK no invertirá los incrementos de secuencia.

Cree y Mantenga Índices 11. ® A, B. Un ÚNICO o un índice NONUNIQUE pueden ser usados para hacer cumplir ✓ único

coacción. ® C, D. El C es incorrecto porque no hay ninguna necesidad de crear otro índice (de hecho, usted no puede poner índice a �la misma columna dos veces aun si usted quiere a). El D es incorrecto porque si un índice existe, el Oracle no intentará crear al otro.

12. ® A. El BITMAP de palabras claves y ÚNICO es mutuamente exclusivo. Y usted no querría ✓

hacer esto, de todos modos. Respuesta de laboratorio

531

Page 456: curso_sql_certificacion

® B, C, D. Los B y C son incorrectos porque un índice de bitmap puede ser compuesto, con columnas de ˚tipos de datos diferentes. El D es incorrecto porque el índice de bitmap no está en el DEPARTMENT_ID solo, que no sería posible.

13. ® C. No es posible cambiar las columnas de un índice después de la creación. ✓

® A, B, D. El B es incorrecto porque el tipo de datos no es el problema. A y D son incorrectos

porque ˚las columnas de un índice son fijadas en el tiempo de creación.

RESPUESTA DE LABORATORIO Esto es una solución posible:

/*create los tables*/crean ventas de comando (sale_id número, channel_id número, product_id número, shop_id número, day_id número, número de cantidad); cree productos de comando (product_id número, pname varchar2 (20), número de precios); cree canales de comando (channel_id número, cname varchar2 (20)); cree tiendas de comando (shop_id número, diríjase a varchar2 (20)); cree días de comando (day_id número, fecha de día);/*pre-create los índices para ser usados para constraints*/crean el índice único prod_pk en productos (product_id); cree el índice único chan_pk en canales (channel_id); cree el índice único shop_pk en tiendas (shop_id); cree el índice único day_id durante días (day_id); cree el índice único sales_pk en ventas (sale_id); los índices de bitmap de/*create en las columnas de dimensión del hecho table*/crean el índice de bitmap sales_chan en ventas (channel_id); cree el índice de bitmap sales_prod en ventas (product_id); cree el índice de bitmap sales_shop en ventas (shop_id); cree el índice de bitmap sales_date en ventas (day_id); los/*add la clave primaria constraints/* cambia productos de comando añaden la coacción prod_pk clave primaria (product_id); cambie los canales de comando añaden la coacción chan_pk clave primaria (channel_id); cambie las tiendas de comando añaden la coacción shop_pk clave primaria (shop_id); cambie los días de comando añaden la coacción day_pk clave primaria (day_id); cambie ventas de comando añaden la coacción sales_pk clave primaria (sale_id); los/*add la clave foránea constraints*/cambia ventas de comando añaden la coacción sales_prod_fk clave foránea (product_id) productos de referencias; cambie ventas de comando añaden la coacción sales_chan_fk clave foránea (channel_id) canales de referencias; cambie ventas de comando añaden la coacción sales_shop_fk clave foránea (shop_id) tiendas de referencias; cambie ventas de comando añaden la coacción sales_day_fk clave foránea (day_id) días de referencias;/*create las secuencias para claves primarias: cache muchos valores para la comando de hecho, pero no prepublican valores para el en gran parte estático

532 Capítulo 12:

Creación de Otros Objetos de Esquema

tablas de dimensión. Esto guardará algunos memory*/crean la secuencia sales_seq cache 1000; cree la secuencia product_seq nocache; cree la secuencia channel_seq nocache; cree la secuencia shop_seq nocache; cree la secuencia day_seq nocache; los/*create una vista para analizar ventas en varios dimensions*/crea la vista sales_analysis como cname escogido, pname, dirección, día, suman (cantidad) el total de ventas, canales, productos, tiendas, días donde grupo de ventas channel_id=channels.channel_id y de ventas product_id=products.product_id y de ventas shop_id=shops.shop_id y de ventas day_id=days.day_id agrupando SETs ((cname, pname, dirección, día), (dirección, pname), (pname, día));

Page 457: curso_sql_certificacion

ASobre el CD

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

534 Apéndice: Sobre el CD

Page 458: curso_sql_certificacion

El CD-ROM incluido con este libro viene completo de MasterExam y una versión

electrónica del libro. El software es fácil a instalar en cualquier Windows 98/NT/2000/XP/Vista

el comandoador y debe ser instalado para tener acceso al aspecto de MasterExam. Usted puede, sin embargo,

hojee el libro electrónico directamente del CD sin la instalación. Para registrar para un segundo sobresueldo MasterExam, simplemente haga clic en el enlace de Formación en Línea en la Página Principal y siga las direcciones al gratis en línea registro.

Requisitos del sistema El software requiere el Windows 98 o más alto e Internet Explorer 5.0 o encima y 20 mb de espacio en el disco duro para instalación llena. El libro electrónico requiere el Adobe Acrobat Reader.

Instalar y Ejecutar MasterExam Si su lector de CD-ROM de comandoador es configurado al automóvil ejecutado, el

CD-ROM va automáticamente inicialize para insertar el disco. De la pantalla inicial usted puede instalar MasterExam pulsando el botón MasterExam. Esto comenzará el proceso de instalación y creará un grupo de programa llamado "LearnKey". Para ejecutar MasterExam, navegue para Comenzar | Programas | LearnKey. Si el automóvil aspecto ejecutado no lanzara su CD, ojeada al CD e hiciera clic en el LaunchTraining.exe icono.

MasterExam MasterExam le provee de una simulación del examen actual. El número de las preguntas, el tipo de preguntas, y el tiempo permitido son queridos para ser una representación exacta del entorno de examen. Usted tiene la opción de tomar un examen de libro abierto, incluso indirectas, referencias, y respuestas; un examen de libro cerrado; o la simulación de MasterExam calculada.

Cuando usted lanza MasterExam, una visualización de reloj digital aparecerá en la esquina izquierda superior de su pantalla. El reloj seguirá contando al revés al cero a menos que usted decida terminar el examen antes de que el tiempo expire.

Page 459: curso_sql_certificacion

Libro electrónico Apoyo técnico

535 Los contenido enteros del Manual son proporcionados en PDF. El Lector de Acróbata del

Adobe ha sido incluido en el CD.

Ayuda Un archivo de ayuda es proporcionado por el botón de ayuda en la página principal en el

izquierdo inferior esquina. Un aspecto de ayuda individual también está disponible por MasterExam.

Borrar Instalación (ones) MasterExam es instalado a su disco duro. Para los mejores resultados para retiro de

programas use el Principio | Programas | LearnKey | No instalan opciones de borrar MasterExam.

Apoyo técnico Para preguntas en cuanto al contenido técnico del libro electrónico o MasterExam, por favor visite www.osborne.com o envíe por correo electrónico [email protected]. Para clientes fuera de los 50 Estados Unidos, envíe por correo electrónico [email protected].

Apoyo técnico de LearnKey Para problemas técnicos con el software (instalación, operación, borrando instalaciones), por favor visite www.learnkey.com o envíe por correo electrónico [email protected].

Esta página intencionadamente se dejó en blanco

Glosario

Page 460: curso_sql_certificacion

A

Atomicity ácido, consecuencia, aislamiento, y durabilidad. Cuatro características que una base de datos relacional debe ser capaz de mantener para transacciones.

ADDM Base de datos Automática Monitor Diagnóstico. Un instrumento que genera informes de afinación de rendimiento basados en fotos en el AWR.

AES Estándar de Cifrado Avanzado. Un método de cifrado de datos extensamente usado.

AL16UTF16 Unico de SET de caracteres de 2 bytes de anchura fija, comúnmente especificado para el SET de caracteres NLS usado para NVARCHAR2, NCHAT, y tipos de datos NCLOB.

alias En Red de Oracle, un indicador a una cuerda conectar. Un alias debe ser resuelto en la dirección de un oyente y el nombre de un servicio o instancia.

Americano de ANSI Instituto de Estándares Nacional. Un cuerpo estadounidense que define varios estándares relevantes para la informática.

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

538 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Interfaz para programas de aplicación de API. Un método definido para manipular datos, típicamente puestos en práctica como un SET de procedimientos PL/SQL en un paquete.

ASCII de ASCII. Un estándar (con muchas variaciones) para codificar cartas y otros carácteres como bytes.

ASM dirección de Almacenamiento Automática. Un LVM proveído de la base de datos de Oracle.

atribuya Un elemento de un tuple (aka una columna).

AVG Una función que divide la suma de una columna o expresión por el número de filas no nulas en un grupo.

B

Page 461: curso_sql_certificacion

proceso subordinado Un proceso que es la parte del instancia: lanzado en inicializador.

BFILE Un tipo de datos de objeto grande que es almacenado como un archivo de sistema operativo. El valor en la columna de comando es un indicador al archivo.

ligue la variable que Un valor pasó de un proceso de usuario a una select SQL en el tiempo de ejecución de select.

Binario de GOTA Objeto Grande. Un tipo de datos de GLOBO para datos binarios, como fotografías y clips de vídeo.

bl o c k T h e u n i t s o f s t o r un g e i n t o w h i c h d un t un f i l e s un r e f o r m de un t t e d. T h e s i z e c un n b e 2 kilobyte, 4 kilobyte, 8 kilobyte, 16 kilobyte, 32 kilobyte, o 64 kilobyte. Algunas plataformas no permitirán todas estas tallas.

C

El producto cartesiano a Veces llamaba una juntura enfadada. Un término matemático que se refiere al SET de datos creados fusionando las filas de dos o más tablas.

Hora central europea de CET. Un huso horario usó en la mayor parte de Europa (aunque no Gran Bretaña) que es una hora delante de la hora universal coordinada con el horario de verano en efecto durante los meses de verano.

Glosario

539

SET de caracteres El sistema que codifica para representar datos dentro de bytes. Los SETs de caracteres diferentes pueden almacenar carácteres diferentes y pueden no ser convenientes para todas las lenguajejes. Los SETs de caracteres de Unicode pueden almacenar cualquier carácter.

compruebe la coacción Una regla simple hecha cumplir por la base de datos que restringe los valores que pueden ser entrados en una columna.

la arquitectura cliente-servidor Un paradigma de procesamiento donde la aplicación está dividida en el software de cliente que se relaciona con el software de servidor y usuario que se relaciona con los datos.

Carácter de CLOB Objeto Grande. Un tipo de datos de GLOBO para datos de carácter, como documentos de texto, almacenados en el SET de caracteres de base de datos.

agrúpese Un entorno de hardware donde más de un comandoador comparte el acceso al almacenamiento. Una base de datos RAC consiste en varios instancias en varios comandoadores que abren una base de datos en el almacenamiento compartido.

el racimo segmenta Un segmento esto que puede contener una o varias tablas, denormalized en una estructura sola.

Page 462: curso_sql_certificacion

FÚNDASE Una función que devuelve el primer valor no nulo de su lista de parámetro. Si todos sus parámetros son nulos, entonces un valor nulo es devuelto.

columna Un elemento de una fila: las tablas son estructuras de dos dimensiones, divididas horizontalmente en filas y verticalmente en columnas.

destine A hacer permanente un cambio en datos.

recuperación completa Después de restaurar de archivos de base de datos dañados, esto se aplica cada uno rehace para poner la base de datos al día sin la pérdida de datos.

conecte el identificador Un alias de Red de Oracle.

conecte la cuerda Los detalles de conexión a la base de datos tenían que establecer una sesión: la dirección del oyente y el servicio o nombre de instancia.

la copia de seguridad consecuente Una copia de seguridad hecha mientras la base de datos está cerrada.

540 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

coacción Un mecanismo para hacer cumplir reglas de datos: que un valor de columna debiera ser único o sólo puede contener ciertos valores. Una coacción de clave primaria especifica que la columna debe ser tanto única como no nula.

controle archivan El archivo que contiene indicadores al resto de la base de datos, información de secuencia crítica, y el depósito RMAN.

Unidad central de proceso de unidad central de proceso. El chip que proporciona la capacidad de procesamiento de un comandoador, como Intel Pentium o un Sol SPARC.

D

bloques de datos Las unidades en las cuales los ficheros de datos son formateados.

el diccionario de datos Las tablas poseídas por SYS en el SISTEMA tablespace que definen la base de datos y los objetos dentro de ella.

el diccionario de datos visualiza Vistas en las tablas de diccionario de datos que dejan al DBA investigar el estado de la base de datos.

los datos guardan Una instalación por lo cual una copia de la base de datos de producción es creada y actualizada (posiblemente en tiempo real) con todos los cambios aplicados a la base de datos de producción.

Page 463: curso_sql_certificacion

los datos bombean Una instalación para transferir cantidades grandes de datos en la alta velocidad en, de, o entre bases de datos.

el cache de memoria intermedia de base de datos Un área de memoria en el SGA usado para trabajar en bloques copió de ficheros de datos.

enlace de base de datos Una conexión de una base de datos al otro, basado en un nombre de usuario y contraseña y una cuerda conectar.

fichero de datos La estructura basada en el disco para almacenar datos.

Administrador de Base de datos de DBA. La persona responsable de crear y manejar bases de datos de Oracle - esto podría ser usted.

Glosario

541

El papel de DBA Un papel presembrado aseguró la compatibilidad con versiones anteriores que incluye todos los privilegios tenía que manejar una base de datos, salvo que necesario para inicializar o apagar.

DBCA El Ayudante de Configuración de Base de datos. Un instrumento de GUI para creación, modificación, y caída de instancias y bases de datos.

Sistema de administración de bases de datos de DBMS. A menudo usado de modo intercambiable con RDBMS.

DBWn o DBWR El Escritor de Base de datos. El proceso subordinado responsable de escribir bloques cambiados desde la base de datos almacena el cache en un buffer a los ficheros de datos. Un instancia puede tener hasta 10 procesos de escritor de base de datos, DBW0 por DBW9.

Lenguaje de Definición de Datos de DDL. El subconjunto de SQL manda que el cambio objete definiciones dentro del diccionario de datos: CREE, CAMBIE, CÁIGASE, y TRUNCADO.

estanque Una situación donde dos sesiones bloquean el uno al otro, tal que ninguno puede hacer nada. Los puntos muertos son descubiertos y resueltos automáticamente por la base de datos.

DECODIFIQUE Una función que pone en práctica "si entonces más" lógica condicional probando dos términos de la igualdad y devolviendo el tercer término si ellos son iguales o, opcionalmente, devolviendo algún otro término si ellos no son.

el paso directo Un método de entrada-salida en ficheros de datos que evita el cache de memoria intermedia de base de datos.

objeto de directorio Un directorio de Oracle: un objeto dentro de la base de datos que señala a un directorio de sistema operativo.

Lenguaje de Manipulación de Datos de DML. El subconjunto de SQL manda que datos de cambio

Page 464: curso_sql_certificacion

dentro de la base de datos: INERTE, ACTUALIZACIÓN, BORRAR, y FUSIÓN.

DHCP Protocolo de Configuración de Servidor Dinámico. El estándar para configurar las características de red de un comandoador, como su dirección IP, en un entorno que cambia donde los comandoadores pueden ser movidos de una posición al otro.

Servicio de Nombre de dominio de sistema de nombres de dominio. El mecanismo de TCP para resolver la red llama en direcciones IP.

542 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

el dominio El SET de valores un atributo es permitido tomar. Terminología: las tablas tienen filas; las filas tienen columnas con valores. O: las relaciones tienen tuples; los tuples tienen atributos con valores tomados de su dominio.

Sistema de apoyo para la toma de decisiones de DSS. Una base de datos, como un depósito de datos, optimizado para ejecutar preguntas en comparación con trabajo de OLTP.

E

fácil conectan Un método de establecer una sesión contra una base de datos especificando la dirección en el oyente y el nombre de servicio sin usar un alias de Red de Oracle.

EBCDIC Extended Binary Co ded Decimal Interchange Co de. Un estándar desarrollado por IBM para codificar cartas y otros carácteres en bytes.

la variable de entorno Un SET variable en la cáscara de sistema operativo que puede ser usada por el software de aplicación y por shell scripts.

equijoin Una condición de juntura usando a un operador de igualdad.

F

el hecho tabula La comando central en un esquema de estrella, con columnas para valores relevantes para la fila y columnas usadas como claves foráneas a las tablas de dimensión.

FGA Revisión de Grained fina. Una instalación para rastrear el acceso de usuario a datos basados en las filas que son vistas o manipuladas.

la copia de seguridad llena que Una copia de seguridad que contiene todos los bloques de los archivos hizo una copia de seguridad, no sólo aquellos bloques cambió desde la última copia de seguridad.

G

Page 465: curso_sql_certificacion

Hora media de Greenwich GMT. Ahora referido como hora universal coordinada, esto es el huso horario del meridiano por el Observatorio de Greenwich en Londres.

Glosario

543

la computación grid Una arquitectura donde la entrega de un servicio a usuarios finales no es atada a ciertos recursos de servidor, pero puede ser proporcionada de dondequiera en un fondo de recursos.

EL GRUPO POR Una cláusula que especifica las filas de atributo que se agrupan debe tener en común para ellos para ser agrupado juntos.

Interfaz gráfica de usuario de GUI. Una capa de una aplicación que deja a usuarios trabajar con la aplicación por un terminal gráfico, como un comandoador personal con un ratón.

H

Protocolo de transmisión de hipertexto de HTTP. El protocolo que habilita el World Wide Web (ambos inventados en la Organización europea para la Investigación Nuclear en 1989), esto es un protocolo acodado que atropella el TCP/IP.

Señal de Pleamar de HWM. Esto es el último bloque de un segmento que ha estado alguna vez bloques usados encima de esto son la parte del segmento, pero todavía no son formateados para el uso.

Yo

La entrada-salida Introdujo/salida. La actividad de lectura de o escritura a discos a menudo el punto más lento de una operación de informática.

IBM International Business Machines. Un hardware conocido, software, y compañía de servicios.

la copia de seguridad inconsecuente Una copia de seguridad hecha mientras la base de datos estaba abierta.

INITCAP Una función que acepta una serie de carácteres y devuelve cada palabra en el instancia de título.

la copia de seguridad incremental que Una copia de seguridad que contiene sólo bloquea lo que ha sido cambiado desde la última copia de seguridad fue hecha.

544 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

la juntura interior Cuando equijoins y nonequijoins son realizados, filas de la fuente y apuntan tablas es emparejada. Éstos se mencionan como junturas interiores.

Page 466: curso_sql_certificacion

INSTR Una función que devuelve la posición posicional del acontecimiento enésimo de una serie especificada de carácteres en una cuerda de la fuente.

la recuperación de instancia La reparación automática del daño causada por un cierre descomandoado de la base de datos.

Índice de IOT Comando Organizada. Un tipo de comando donde las filas son almacenadas en los bloques de hoja de un segmento de índice.

Protocolo Internet de IP. Juntos con el Protocolo de Control de Transmisión, TCP/IP: el protocolo de comunicación estándar de facto usado para la comunicación de cliente/servidor sobre una red.

Protocolo de Comunicaciones de Interproceso de IPC. El protocolo específico para la plataforma, proporcionado por su vendedor OS, usado para procesos que se ejecutan en la misma máquina para comunicarse el uno con el otro.

Organización internacional para la normalización Organización internacional para Estandarización. Un grupo que define muchos estándares, incluso SQL.

J

J2EE Java 2 Edición de Empresa. El estándar para desarrollar aplicaciones de Java.

JOINON Una cláusula que permite la especificación explícita de columnas de juntura sin tener en cuenta sus nombres de columna. Esto proporciona un formato de conexión flexible.

JOINUSING Una sintaxis que permite que una juntura natural sea formada en columnas específicas con nombres compartidos.

la conexión Implica conectar dos o más tablas basadas en atributos comunes. La conexión permite que datos sean almacenados en la tercera forma normal en tablas distintas, en vez de en una comando grande.

Glosario

545

JVM Java Máquina Virtual. El entorno de tiempo de ejecución necesario para ejecutar código escrito en Java. El oracle proporciona un JVM dentro de la base de datos, y habrá el que proporcionado por su sistema operativo.

L

LAST_DAY Una función solía obtener el día anterior en un mes dado cualquier artículo de fecha válido.

LDAP Protocolo de Acceso de Directorio Ligero. La realización de TCP del estándar de directorio X25,

Page 467: curso_sql_certificacion

usado por el Directorio de Internet de Oracle para resolución de nombre, seguridad, y autenticación. LDAP también es usado por otros vendedores de software, incluso Microsoft e IBM.

LA LONGITUD Una función que computa el número de carácteres en una cuerda incluso espacios y carácteres especiales.

Escritor de Registro de LGWR. El proceso subordinado responsable de limpiar con agua vectores de cambio de la memoria intermedia de registro en la memoria al en línea rehace archivos históricos en el disco.

el cache de biblioteca Una estructura de memoria dentro del fondo compartido, usado para esconder select SQL analizado en su forma ejecutable.

el oyente El proceso de lado del servidor que escucha para solicitudes de conexión a la base de datos de procesos de usuario y lanza procesos de servidor para establecer sesiones.

VOLEE POR ALTO el Objeto Grande. Una estructura de datos que es demasiado grande para almacenar dentro de una comando. Los GLOBOS (El oracle apoya varios tipos) son definidos como columnas de una comando, pero son físicamente almacenados en un segmento separado.

registre cambian La acción de cerrar un grupo de archivo histórico en línea y abrir al otro; provocado por el proceso de LGWR que llena el primer grupo.

LVM gerente de Volumen Lógico. Una capa de software que abstrae el almacenamiento físico dentro de su comandoador del almacenamiento lógico visible a una aplicación.

546 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

M

Monitor de Manejabilidad de MMON. El proceso subordinado responsable de información de supervisando de rendimiento creciente y levantamiento de alarmas.

MOD La operación de módulo, una función que devuelve el resto de una operación de división.

MONTHS_BETWEEN Una función que computa el número de meses entre dos parámetros de fecha dados y está basada durante un mes de 31 días.

la base de datos montada Una situación donde el instancia ha abierto el archivo de control de base de datos, pero no el en línea rehace archivos históricos o los ficheros de datos.

Tiempo medio de MTBF entre frainstancia. Una medida de la duración media de duración para una base de datos entre cierres inesperados.

Tiempo medio de MTTR para recuperar. El tiempo medio esto toma para poner la base de datos a disposición para el uso normal después de un frainstancia.

Page 468: curso_sql_certificacion

multiplexión Mantener copias múltiples de archivos.

N

el namespace Una agrupación lógica de objetos dentro de los cuales ningunos dos objetos pueden tener el mismo nombre.

la juntura natural Una juntura realizó la utilización de la sintaxis de JUNTURA NATURAL cuando la fuente y las tablas objetivo son implícitamente equijoined usando todas las columnas idénticamente llamadas.

NCLOB Carácter Nacional Objeto Grande. Un tipo de datos de GLOBO para datos de carácter, como documentos de texto, almacenados en el SET de caracteres de base de datos nacional alternativo.

NETBEUI NETBIOS Interface de Usuario Extenso. Una versión realzada de NETBIOS.

La Red de NETBIOS Ingreso Básico Salida el Sistema. El protocolo de comunicaciones de red que fue quemado en la primera tarjeta de red aquella IBM alguna vez producida.

Glosario

547

NLS Apoyo de Lenguaje Nacional. La capacidad de la base de datos de Oracle de apoyar a muchos entornos ahora lingüísticos, geográficos, y culturales por lo general se refería como a la globalización.

nodo Un comandoador adjuntado a una red.

el nonequijoin Realizado cuando los valores en las columnas de juntura realizan la condición de juntura basada en una expresión de desigualdad.

nu l l T h e un b s e n c e o f un v un l u e, yo n d i c un t i n g t h un t t h e v un l u e i s n o t k n o w n, m de i s s i n g, o inaplicable.

NULLIF Una función que prueba dos términos de la igualdad. Si ellos son iguales, las vueltas de función nulas; más esto devuelve el primer de los dos términos probados.

NVL Una función que devuelve el artículo original sin alterar o un artículo alternativo si el término inicial es nulo.

NVL2 Una función que devuelve un nuevo si - artículo nulo si el artículo original es nulo o una alternativa si no el artículo nulo si el término original no es nulo.

O

Contenedores de Oracle de OC4J para J2EE. La estructura de control proveyó por el Servidor de Aplicación de Oracle para ejecutar programas de Java.

Page 469: curso_sql_certificacion

Oracle de OCA Socio Certificado.

Interface de Llamada de Oracle de OCI. Un API, publicado como un SET de bibliotecas C, que los programadores pueden usar para escribir procesos de usuario que usarán una base de datos de Oracle.

Oracle de OCP Profesional Certificado. La calificación usted trabaja hacia.

ODBC Conectividad de Base de datos Abierta. Un estándar se desarrolló por Microsoft para comunicarse con bases de datos relacionales. El oracle provee a un driver ODBC que permitirá a clientes Microsoft que se ejecuta conductos pro para conectar a una base de datos de Oracle.

548 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

la copia de seguridad fuera de línea Una copia de seguridad hecha mientras la base de datos está cerrada.

OLAP Procesamiento Analítico en Línea. Seleccione preguntas de ejecutando de implicación de trabajo intensivas contra una base de datos (por lo general) grande. El oracle proporciona capacidades OLAP como una opción, además de las instalaciones de pregunta estándares.

OLTP Procesamiento de Transacción en Línea. Un modelo de actividad dentro de una base de datos tipificada por un gran número de pequeño, corto, transacciones.

la copia de seguridad en línea Una copia de seguridad hecha mientras la base de datos está abierta.

en línea rehaga el registro Los archivos a los cuales los vectores de cambio son derramados por el LGWR.

Sistema operativo de OS. Típicamente, en el entorno de Oracle, esto será una versión de Unix (quizás Linux) o Microsoft Windows.

El protocolo de comunicaciones patentado del Oracle de Red de oracle, acodado encima de un protocolo de estándar de industria.

ORACLE_BASE El directorio raíz en el cual los productos de Oracle son instalados.

ORACLE_HOME El directorio raíz de cualquier producto de Oracle.

la juntura externa que Una juntura realizó cuando filas, que no son recuperadas por una juntura interior, es incluida para la recuperación.

P

analice Una acción que converte select SQL en una forma conveniente para la ejecución.

Page 470: curso_sql_certificacion

Programa de PGA área Global. La variable puso la talla al bloque de la memoria usada para mantener el estado de una sesión de base de datos. PGAs son privados a la sesión y controlado por el proceso de servidor de la sesión.

PL/SQL Lenguaje de Pregunta de Lenguaje/Estructurar Procesal. El lenguajeje de programación patentado del oracle, que combina construcciones procesales, como control de flujo, y capacidades de interface de usuario con SQL.

Glosario

549

Monitor de Proceso de PMON. El proceso subordinado responsable de supervisar el estado de las sesiones del usuario contra un instancia.

la clave primaria La columna (o la combinación de columnas) cuyo valor (es) puede ser usado para identificar cada fila en una comando.

la proyección La restricción de columnas seleccionada de una comando. Usando la proyección, usted sólo recupera las columnas del interés y no cada columna posible.

R

RAC Verdaderos Racimos de Aplicación. La tecnología que se agrupa del oracle, que permite que varios instancias en máquinas diferentes abran la misma base de datos para escalabilidad, rendimiento, y tolerancia de falta.

ASALTE la Matriz Redundante de Discos Baratos. Técnicas para realzar rendimiento y/o tolerancia de falta usando a un gerente de volumen para presentar varios discos físicos al sistema operativo como un disco lógico solo.

dispositivo crudo Una partición de disco o disco no formateada.

Sistema de gestión de Base de datos relacional de RDBMS. A menudo usado de modo intercambiable con DBMS.

Memoria de acceso aleatorio de RAM. Los chips que arreglan la verdadera memoria en su hardware, a diferencia de la memoria virtual presentada al software por el sistema operativo.

la integridad de referencia que Una regla definió en una comando que especifica que los valores en una columna (o columnas) deben trazar un mapa en aquellos de una fila en otra comando.

relación Una estructura de dos dimensiones que consiste en tuples con atributos (aka una comando).

REEMPLACE Una función que substituye cada acontecimiento de un artículo de búsqueda en la cuerda de la fuente con un término de reemplazo y devuelve la cuerda de la fuente modificada.

550

Page 471: curso_sql_certificacion

Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Gerente de Recuperación de RMAN. La copia de seguridad del oracle e instrumento de recuperación.

rowid El identificador único de cada fila en la base de datos, usada como un indicador a la posición física de la fila.

S

el esquema Los objetos poseído por un usuario de base de datos.

Número de Cambio de Sistema de SCN. El número que incrementa continuamente solía rastrear la secuencia y el tiempo exacto de todos los acontecimientos dentro de una base de datos.

segmente Un objeto de base de datos, dentro de un esquema, que almacena datos.

selección La extracción de filas de una comando. La selección incluye la restricción adicional de las filas extraídas basadas en varios criterios o condiciones. Esto permite que usted sólo recupere las filas que son del interés y no cada fila en la comando.

autóunase Una juntura requirió cuando las columnas de juntura provienen de la misma comando. Conceptualmente, la comando de la fuente es duplicada y una comando objetivo es creada. La autojuntura entonces trabaja como una juntura regular entre dos tablas distintas.

secuencia Un objeto de base de datos, dentro de un esquema, que puede generar números consecutivos.

el nombre de servicio Un nombre lógico registrado por un instancia con un oyente, que puede ser especificado por un proceso de usuario cuando cuestiones a conecta la solicitud.

sesión Un proceso de usuario y un proceso de servidor, conectado al instancia.

Sistema de SGA área Global. El bloque de memoria compartida que contiene las estructuras de memoria que arreglan un instancia de Oracle.

SID (1) Identificador de Sistema. El nombre de un instancia, que debe ser único en el comandoador el instancia se ejecuta en. (2) Identificador de Sesión. El número solía identificarse únicamente una sesión entró en el sistema a un instancia de Oracle.

Glosario

551

Monitor de Sistema de SMON. El proceso subordinado responsable de abrir una base de datos y supervisar el instancia.

Page 472: curso_sql_certificacion

archivo de parámetro de Servidor de spfile. El archivo que contiene los parámetros solía construir un instancia en la memoria.

SQL Lenguaje de Pregunta Estructurada. Una lenguaje de norma internacional para extraer datos de y manipular datos en bases de datos relacionales.

SSL Capa de Enchufes Segura. Un estándar para asegurar transmisión de información, usando cifrado, checksumming, y certificados digitales.

SUBSTR Una función que extrae y devuelve un segmento de una cuerda de la fuente dada.

SUME Una función que devuelve un total agregado de todos los valores de expresión numéricos no nulos en un grupo.

sinónimo Un nombre alternativo para un objeto de base de datos.

el sysdba El privilegio que deja a un usuario conectar con sistema operativo o autenticación de archivo de contraseña y crear, inicialize, y apague una base de datos.

los sysoper El privilegio que deja a un usuario conectar con sistema operativo o autenticación de archivo de contraseña e inicializar y apagan (pero no crean) una base de datos.

el sistema Un esquema presembrado usado con objetivos de administración de base de datos.

T

t un bl e Un l o g i c un l t w o - d i m e n s i o n un l d un t un s t o r un g e s t r u c t u r e, c o n s i s t i n g o f r o w s un n d columnas.

tablespace La estructura lógica que extractos almacenamiento de datos lógico en tablas de almacenamiento de datos físico en ficheros de datos.

552 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Protocolo de Control de Transmisión de TCP. Juntos con el protocolo Internet, TCP/IP: el protocolo de comunicación estándar de facto usado para la comunicación de cliente/servidor sobre una red.

TCP de TCPS con SSL. La versión de enchufes segura de TCP.

el tempfile El almacenamiento físico que arregla tablespace temporal, usado para almacenar segmentos temporales.

TNS Red Transparente Substrate. El corazón de Red de Oracle, un protocolo acodado patentado que se ejecuta encima de cualquier red subyacente transporta el protocolo usted decide usar probablemente el TCP/IP.

Page 473: curso_sql_certificacion

TO_CHAR Una función que realiza fecha al carácter y conversiones de tipo de datos de número al carácter.

TO_DATE Una función que explícitamente transforma artículos de carácter en valores de fecha.

TO_NUMBER Una función que cambia artículos de carácter en valores de número.

la transacción Una unidad lógica del trabajo que completará en total o en absoluto.

tuple Una estructura de una dimensión que consiste en atributos (aka una fila).

U

Usuario de UGA área Global. Aquella parte del PGA que es almacenado en el SGA para sesiones que pasan a servidores compartidos.

Interface de Usuario de UI. La capa de una aplicación que se comunica con usuarios finales hoy día, con frecuencia gráficos: un GUI.

URL de URL. Un estándar para especificar la posición de un objeto en Internet que consiste en un protocolo, un nombre de sistema central y dominio, un número de puerto de IP, un paso y nombre del archivo, y una serie de parámetros.

Glosario

553

Hora universal coordinada Tiempo universal Coordinado. Antes conocido como la Hora media de Greenwich (GMT), la hora universal coordinada es la zona de hora oficial global; todos los otros están relacionados con ello como compensaciones, delante o detrás.

X

El X-Windows que El entorno de GUI estándar usó en la mayor parte de comandoadores, excepto aquellos que ejecutan el Microsoft Windows.

XML Lenguaje de Maquetación Extensible. Un estándar para el intercambio de datos usando documentos, donde el formato de los datos es definido por etiquetas dentro del documento.

Esta página intencionadamente se dejó en blanco

ÍNDICE

SÍMBOLO tipos de datos alfanuméricos, 458

Page 474: curso_sql_certificacion

CAMBIE el comando, 506-507 % (símbolo de porcentaje), 120-121 & (signo ""). Ver la substitución de signo "" () (paréntesis), 384; (los puntos y coma), 65 _ (subrayan el carácter), 120-122 || (dobles símbolos de tubo). Ver el carácter

el operador de encadenamiento "(doblan citas), 454 '(citas solas), 77-81 3GLs (lenguajejes de la tercera generación), 10

Apermisos de acceso, 412 Prueba de fuego

atomicity, 428 consecuencia, 429 definido, 537 durabilidad, 429-430 aislamiento, 429 preguntas ad hoc, 147 función de ADD_MONTHS, 173, 208-211 ADDM (Base de datos Automática Diagnóstica

Monitor), 537 Estándar de Cifrado Avanzado (AES), 537 opción Avanzada, 36 AES (Estándar de Cifrado Avanzado), 537 obteniendo agregado, 275 funciones de agregación. Ver funciones de grupo SET de caracteres de AL16UTF16, 537 aliases, 61, 74, 537 TODO el operador

funciones de grupo, 275 subconsultas, 365, 370 CAMBIE el comando de ÍNDICE, 517 CAMBIAN el comando de COMANDO, 475-476 cambian comandos de usuario, 42 CAMBIAN el comando de VISTA, 493-496 Instituto de Estándares Nacional americano (ANSI),

23, 537 Código Estándar americano para la información Intercambio (ASCII), 538 substitución de signo ""

para nombres de columna, 147 DEFINEN el comando, 149-154 doble, 145-147 para expresiones, 147-149 descripción, 142-143 single, 143-145 para el texto, 147-149 comando de UNDEFINE, 149-154 VERIFICAN el comando, 149-150, 154-156

Y operador, 126-128 ANSI (Instituto de Estándares Nacional americano), 23, 537 CUALQUIER operador, 365, 370 Interfaz para programas de aplicación (API), 538 servidor de

Aplicación, 5-7 instrumento de Control de Servidor de Aplicación, 8 capa de aplicación, 6 arquitectura, 3-5 operadores aritméticos, 70-73 COMO palabra clave, 75-76 comandoación de ascensión, 137-138 ASCII (Código Estándar americano para la información

Intercambio), 538 ASM (dirección de Almacenamiento Automática), 538 atomicity, 428

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

556 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

atributos, definidos, 538. También ver columnas comando de AUTOCOMMIT, 435-436 Base de datos Automática Monitor Diagnóstico

(ADDM), 537 dirección de Almacenamiento Automática (ASM), 538 función de AVG, 281-282, 538

BÍndices de B*Tree, 470, 511-513 los procesos subordinados, 538 opción Básica, 36 ENTRE el operador, de 113 años, 116-119, 331 tipo de datos BFILE, 459, 538 tipo de datos binarios, 458 Objeto Grande Binario (GOTA) tipo de datos, 55, 459, 538 ligan variables, 538 índices de bitmap, 513-515 cálculos de caja negra, 170-171 preguntas ciegas, 60, 63 GOTA (Objeto Grande Binario) tipo de datos, 55, 459, 538 bloques, definidos, 538 operadores Booleanos

Y, 126-128 contra operadores de comparación, 135 cláusula que TIENE, 298 NO, 131-132 y ENTRE operador, 117-118 O, 128-131 y filas, 104

expresiones acorchetadas, 70, 132

Page 475: curso_sql_certificacion

COpción de CACHE, 503 Productos cartesianos

definido, 310, 538 descripción, 314 de dos o más tablas, 342-346 funciones de conversión de instancia. Ver el instancia de carácter

la conversión funciona la expresión de INSTANCIA, 254, 257-261

El CD-ROM incluido con el libro archivo de ayuda, 535 software de LearnKey, 535 aspecto de MasterExam, 534 descripción, 533-534 instalación que borra, 535 Manual, 535 requisitos del sistema, 534 apoyo técnico, 535

CDs, compañero, 43 Hora central europea (CET), 538 unidades centrales de proceso (unidades centrales de proceso), 540 CET (Hora central europea), 538 tipo de datos de TRABAJO POR HORAS, 55, 458 funciones de conversión de instancia de carácter

INITCAP, 179-182, 543 más ABAJO, 177-179 descripción, 171 SUPERIOR, 179 encadenamiento de carácter (||) operador

funciones de manipulaciones de carácter, 183 y expresiones, 70 y valores NULOS, 84 descripción, 75-76 conversión de carácter

convertir fechas a, 235-240 números que converten a, 232-235 a fechas, 231, 241-242 a números, 230, 242-244 Carácter Objeto Grande (CLOB) tipo de datos,

459, 539 carácter datos literales, 65 funciones de manipulaciones de carácter CONCAT, 183-184 INSTR, 189-190 LONGITUD, 184-185 LPAD, 186-187 descripción, 171 REEMPLAZAN, 193-196 RPAD, 186-187 SUBSTR, 190-193 NETO, 187-189

SETs de caracteres, 539 cadenas de caracteres convertir números en, 235 conversiones implícitas, 229

versión de carácter, SQL*Plus, 28 condiciones basadas en el carácter, 107-110 coacciones de control, 473, 539 capa de cliente

SQL, 4 aplicaciones web, 6 herramientas de cliente

Developer de SQL AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 35-37 instalar y lanzamiento, 33-34 Interface de Usuario, 34-35

SQL*Plus AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 30-32 en Linux, 27-28 descripción, 26 en Windows, 28-30

la arquitectura cliente-servidor, 4, 539 CLOB (Carácter Objeto Grande) tipo de datos, 459, 539 segmentos de racimo, 539 racimos, 6, 539 SE FUNDE la función, 247, 253-254, 539 columna aliasing, 74-75, 384 nombres de columna

substitución de signo "" por, 147 calificación ambigua, 317-318 columnas. También ver títulos de columnas específicas

la creación de tablas con especificaciones, 462-464 tipos de datos disponibles para, 457-461 definido, 456, 539 agrupación por múltiple, 291-294 en esquema de HORA, 40-41

Columna de COMM, 463 DESTINAN el comando, 409, 427, 431-432 comisión, definida, 539 CDs de compañero, 43

Índice

Page 476: curso_sql_certificacion

operadores de comparación. También ver DONDE cláusula ENTRE, 116-119, 331 contra operadores Booleanos, 135 igualdad, 113-116 EN, 119-120, 365, 369 desigualdad, 113-116 es NULA, 126 COMO, 120-125, 182 subconsultas de fila múltiple, 365-366 descripción, 113 subconsultas de fila sola, 365-366

parámetros de comparación, 255-256 recuperación completa, 539 vistas complejas, 492-493 índices compuestos, 515-516 operadores de desigualdad compuestos, 115 coacciones únicas claves compuestas, 470 llaves compuestas, 18 comandoación compuesta, 139-142 preguntas compuestas, 382 función de CONCAT, 171, 183-184 operador de encadenamiento. Ver el carácter

operador de encadenamiento cláusulas condicionales, 113 expresiones condicionales funciones condicionales

Expresión de INSTANCIA, 257-261 DECODIFICAN la función, 254-257 funciones generales

FÚNDASE, 253-254 NULLIF, 249-252 NVL, 247-248 NVL2, 248-249 funciones que anidan, 245-246 funciones condicionales Expresión de INSTANCIA, 257-261 DECODIFICAN la función, 254-257

operadores condicionales expresiones basadas en el carácter, 109-110 y NO operador, 131 DONDE cláusula, 105

557 558 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-

051)

conecte identificadores, 539 conectan cuerdas, 539 reunión de conexión, 7 botones tipos radios de Tipo de Conexión, 36 conexiones, indirectas, 4 consecuencia, 429 copias de seguridad consecuentes, 539 palabra clave de COACCIÓN, 494 coacciones

definido, 405, 412, 450, 540 definición, 473-477 descripción, 469 tipos de compruebe, 473, 539 clave foránea, 471-472 no nulo, 470-471 clave primaria, 471 único, 470

controle archivos, 540 transacciones de control transacciones de base de datos

Prueba de fuego, 428-430 principio y final de, 430-431 descripción, 427-428 select de control de transacción

AUTOCOMMIT mandan, 435-436 DESTINAN el comando, 432 descripción, 431 comando de ROLLBACK, 433-434 comando de SAVEPOINT, 434-435 ESCOGIDO PARA el comando de ACTUALIZACIÓN,

436-438 funciones de conversión descripción, 174, 228-229 TO_CHAR

convertir fechas a utilización de carácteres, 235-240

convertir números a utilización de carácteres, 232-235 definido, 228, 552 descripción, 231-232

TO_DATE convertir carácteres a utilización de fechas,

205-206, 241-242 definido, 228 descripción, 231-232 TO_NUMBER

convertir carácteres a utilización de números, 243-244 definido, 228, 552 descripción, 231-232

tipos de conversión de tipo de datos explícita, 231 conversión de tipo de datos implícita, 229-230

Page 477: curso_sql_certificacion

El Tiempo universal coordinado (hora universal coordinada), 553 subconsultas correlacionadas, 366-369 función de CONDE, 275, 279-280 comando de COUNTRIES, 41, 55-56 unidades centrales de proceso (unidades centrales de proceso), 540 CREA el comando, 506-507 CREAN el comando de ESQUEMA, 38 CREAN la select de COMANDO, 477 CREAN el comando de USUARIO, 38 CREAN el comando de VISTA, 493-496 junturas enfadadas

la creación de productos Cartesianos con, 342-346 definido, 310, 538 descripción, 314 patas de gallo, 19 columna pseudo CURRVAL, 504 opción de CICLO, 503

Dbloques de datos, 540 Lenguaje de Control de datos (DCL) comandos, 24 datos, definidos, 53 Lenguaje de Definición de Datos (DDL)

comandos, 24 definido, 541 tablas el cambio de definiciones, 465-466

coacciones, 469-477 creación de subconsultas, 464-465 creación con especificaciones de columna, 462-464 tipos de datos disponibles para columnas, 457-461 caída, 466-469 objetos de base de datos

principales, 450-456 estructura de comando, 456-457 truncamiento, 466-469 diccionarios de datos, 53, 540 vistas de diccionario de datos, 540 ficheros de datos, definidos, 540 guardias de datos, 540 Lenguaje de Manipulación de Datos (DML)

definido, 541 BORRAR comando, 407-408 frainstancias de, 409-412 filas de generación para ser pasadas a select,

363-364 comando de INSERCIÓN, 405-406 comando de FUSIÓN, 408-409 descripción, 24, 404-405 comando TRUNCADO, 409 comando de ACTUALIZACIÓN, 406-407 y vistas, 492-493

modelos de datos, 22 normalización de datos, 14-22 bombas de datos, 540 extracción de datos. Ver la select SENTENCIA

Índice

Sistema de administración de bases de datos (DBMS), 541 capa de base de datos, 6 transacciones de base de datos

Prueba de fuego, 428-430 principio y final de, 430-431 Escritor de base de datos (DBWn o DBWR), 541 instrumento de Datapump, 405-406 fecha funciones incorporadas

aritmética de fecha, 205-206 almacenamiento de fecha, 202-204 SYSDATE, 204-205 conversión de fecha

a carácteres, 229, 235-240 carácteres que converten a, 241-242 Tipo de datos de FECHA, 55, 458, 460 máscaras de formato de fecha, 236-238 literales de fecha, 190 funciones de manipulación de fecha

ADD_MONTHS, 208-211 LAST_DAY, 213-214 MONTHS_BETWEEN, 207-208 NEXT_DAY, 211-213 descripción, 173, 206 RONDA, 214-216 TRUNC, 216-217, 460

almacenamiento de fecha, 202-204 condiciones basadas en la fecha, 110-113 día del parámetro de semana, 211-212 DBAs (Administradores de Base de datos), 540-541

559 comandoación de datos, 137-142 capa de datos, 6 tipos de datos, 457-46. También ver nombres de tipos de datos específicos, Administradores de Base de datos (DBAs), 540-541 caches de memoria intermedia de base de datos, 540 Ayudante de Configuración de Base de datos (DBCA), 541 conexiones a la base de datos

indirecto, 4 Developer SQL, 35-37 SQL*Plus, 30-32 Instrumento de Control de base de datos, 8 enlaces de base de datos, 498, 540 entrada en el sistema de base de

Page 478: curso_sql_certificacion

datos, 29 DBCA (Ayudante de Configuración de Base de datos), 541 DBMS (Sistema de administración de bases de datos), 541 DBWn o DBWR (Escritor de Base de datos), 541 DCL (Lenguaje de Control de Datos) comandos, 24 DDL. Ver la Lenguaje de Definición de Datos máscara de formato de DD-MON-RR, 203 puntos muertos, definidos, 541 botón Debug, 35 parámetro de precisión decimal, 197, 199 Sistemas de apoyo para la toma de decisiones (DSS), 14, 542 DECODIFICAN la función, 254-257, 541 cláusula POR DEFECTO, 464 formato de fecha por defecto, 111

560 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen

1Z0-051)

Palabra clave POR DEFECTO, 462 DEFINEN el comando, 149-154 BORRAR comando borrar filas de tablas con, 423-425 descripción, 407-408

esquemas de pruebas la creación, 42-43 HORA, 38-42 OE, 38-42 descripción, 37

La comando de DEPARTMENTS, 41, 55 comandoación de bajada, 137-138 DESCRIBE el comando, 53-57, 228 tablas de detalle, 489 DHCP (Protocolo de Configuración de Servidor Dinámico), 541 pasos directos, 541 objetos de directorio, 541 sucio lee, 429 datos de pruebas de tablas múltiples

Productos cartesianos, 342-346 cláusula JOINON, 322-326 JUNTURA... LA UTILIZACIÓN De cláusula, 321-322 cláusula de JUNTURA NATURAL, 319-321 nonequijoins, 329-331 N-camino junturas, 327-329 junturas externas, 334-342 descripción, 310-311 nombres de columna ambiguos eliminatorios, 317-318 autojunturas, 331-334 sintaxis SQL:1999, 316-317 tipos de junturas, 311-316

Palabra clave DISTINTA, 61, 105, 279 parámetro de dividendo, 200 parámetro de divisor, 200 DML. Ver el Servicio de Nombre de dominio de Lenguaje de Manipulación de Datos (sistema de nombres de dominio), 541 dominios, definidos, 542 nota de punto, 317-318 doble substitución de signo "", 145-147 dobles símbolos de tubo (||). Ver el carácter

operador de encadenamiento

doble citas ("), 454 comando de GOTA, 466 comando de VISTA DE GOTA, 493-496 tablas que se caen, 466-469 DSS (Sistemas de apoyo para la toma de decisiones), 14, 542 comando DUAL, 54, 77, 248 durabilidad, 429-430 Protocolo de Configuración de Servidor Dinámico (DHCP), 541

Efácil conecta, 542 EBCDIC (Decimal codificado en binario Extenso

Código de intercambio), 542 botón Edit, 35 comando de EMPLOYEES, 41, 55 columna EMPNO, 463 columna ENAME, 463 sesiones de usuario final, 6-7 gerente de Empresa, 544 entidades. Ver el diagrama de relación de la entidad de tablas, 19 variables de entorno, 542 operadores de igualdad, de 105 años, 113-116, 370. También ver

DONDE cláusula equijoins, 310-311, 542 mensajes de error conexión a la base de datos, 32 "ORA-00904: identificador inválido", 108 "ORA-00918:column ambiguamente definidos", 317 "ORA-00923: DE palabra clave no encontrada

donde esperado", 73, 75 "ORA-00932: tipos de datos inconsecuentes", 253 "ORA-00934: la función de grupo no es permitida

aquí", 290 "ORA-00935: la función de grupo es anidada también

profundamente", 287 "ORA-00937: grupo de ni-un-solo-grupo

funcione", 290 "ORA-00942: la comando o la vista no existen", 73 "ORA-01427: la subpregunta de fila sola

Page 479: curso_sql_certificacion

vuelve más que una fila", 367, 371, 420

"Foto de ORA-1555 demasiado vieja", 429 "parte de ORA-25154:column de USAR cláusula no puede tener el calificador", 317

funciones generales

GÍndice

561 Identificador de FUGA, 123-124 conversión de tipo de datos explícita, 231 expresiones. También ver expresiones condicionales

substitución de signo "" por, 147-149 INSTANCIA, 254, 257-261 columna aliasing y, 74-75 comando DUAL, 77 valores literales, 77

Código de Intercambio de Decimal codificado en binario extenso (EBCDIC), 542 Lenguaje de Maquetación Extensible (XML), 553 grados, 425, 456

Ftablas de hecho, 542 FGA (Grained fino que Revisa), 542 espacios. Ver que botón File de columnas, 35 llenan el modo (de) el operador, 236, 238, 240-241 Grained finos que Revisan (FGA), 542 primera forma normal, 15-16 tipo de datos de FLOTADOR, 458 de (llene el modo) el operador, 236, 238, 240-241 PARA la cláusula de ACTUALIZACIÓN, 438 palabra clave de FUERZA, 494 coacciones de clave foránea, 471-472 claves foráneas, 18, 85-88 nombres oficiales, 194-195 máscaras de formato, 203-204 parámetro de formato, 232 DE la cláusula, 358 copias de seguridad llenas, 542 junturas externas llenas, 338-342 funciones. También ver nombres de funciones específicas

la fila múltiple, 175-176 funcionamiento en datos de carácter, 171-172 funcionamiento en información de fecha, 173 funcionamiento en datos numéricos, 172-173 FÚNDASE, 253-254, 539 NULLIF, 249-252, 547 NVL, 247-248, 547 NVL2, 248-249, 547 descripción, 247

GMT (Hora media de Greenwich), 542 práctica buena, 66-69 Interfaces gráficas de usuario (GUIs), 543 versión gráfica, SQL*Plus, 28 Hora media de Greenwich (GMT), 542 computación grid, 8-9, 543 instrumento de Control de Reja, 8 GRUPO POR cláusula

la creación de grupos de datos, 287-288 definido, 543 agrupación por columnas múltiples, 291-294 y TENER cláusula, 298 funciones de grupo que anidan, 285 descripción, 288-291

funciones de grupo AVG, 281-282, 538 CONDE, 275, 279-280 definido, 274-275 GRUPO POR cláusula

la creación de grupos de datos, 287-288 agrupación por columnas múltiples, 291-294 descripción, 288-291

TENER cláusula

Page 480: curso_sql_certificacion

descripción, 296-299 resultados de grupo de restricción, 294-296 MAX, 282-285 MINUTOS, 282-285 anidar, 285-287 descripción, 175 contra funciones de fila sola, 213 SUMA, 280-281, 551 sintaxis de, 275-278 tipos de, 275-278

562 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen

1Z0-051)

filas agrupadas descripción, 296-299 resultados de grupo de restricción, 294-296

la agrupación de atributo, 288, 291 resultados de nivel del grupo, 295 GUIs (Interfaces gráficas de usuario), 543

Hracimos de picadillo, 462 desmenuce junturas, 492, 511 cláusula que TIENE

descripción, 296-299 resultados de grupo de restricción, 274, 294-296 tablas de montón, 462 señal de pleamar (HWM), 425-426, 543 columna HIREDATE, DE 463 HORAS (Recursos humanos) esquema de pruebas,

38-42 HTTP (protocolo de transmisión de hipertexto), 543 Recursos humanos (HORA) pruebas esquema, 38-42 HWM (señal de pleamar), 425-426, 543 protocolo de transmisión de hipertexto (HTTP), 543

YoIBM (International Business Machines), 543 lógica "si entonces más", 228, 254 conversión de tipo de datos implícita, 229-230 precedencia implícita, 391 EN operador, de 113 años, 119-120, 365, 369 copias de seguridad inconsecuentes, 543 INCREMENTO POR opción, 503 copias de seguridad incrementales, 543 sangría, 66-69 racimos de índice, 462 Índice Tablas Organizadas (IOTs), 462, 544

índices la creación, 515-517 definido, 452 caída, 517-520 modificación, 517-520 descripción, 509 objetivo de, 510-511 tipos de, 511-515 utilización, 515-517

conexiones a la base de datos indirectas, 4 operadores de desigualdad, 113-116 función de INITCAP, 171, 179-182, 543 vistas de inline, 362 junturas interiores

definido, 544 contra externo, 335-336 las preguntas interiores, 358 parámetros de ingreso, 170, 176 introdujeron/salida (entrada-salida), definida, 543 comando de INSERCIÓN, 5, 405-406 anomalías de introducción, 15-16 Developer SQL que instala, 33-34 recuperación de instancia, 544 instancias, 3-4 función de INSTR (en la cuerda), 172, 189-190, 544 tipo de datos de NÚMERO ENTERO, 386, 458 International Business Machines (IBM), 543 Organización internacional para la Estandarización

(La organización internacional para la normalización), 23, 544 protocolo Internet (IP), definido, 544 Protocolo de Comunicaciones de Interproceso (IPC), 544 CRUZA al operador de SET, 382, 388-389 DÍA DE INTERVALO AL SEGUNDO tipo de datos, 459 AÑO DE INTERVALO AL TIPO DE DATOS DE MES, 459 entrada-salida (introdujo/salida), definido, 543 IOTs (Índice Tablas Organizadas), 462, 544 IP (protocolo Internet), definido, 544 IPC (Protocolo de Comunicaciones de Interproceso), 544 SON el operador NULO, de 113 años, 126

Page 481: curso_sql_certificacion

Organización internacional para la normalización (Organización internacional para Estandarización), 23, 544 aislamiento, 429

J

columnas claves, 470

K

LÍndice

563 Java la 2 Edición (J2EE), 6, 544 de Empresa Entorno de Tiempo de ejecución de Java (JRE), 33 Java Máquina Virtual (JVM), 545 comando JOB_HISTORY, 41, 55 comando de JOBS, 41, 55 cláusula JOINON

definido, 544 utilización de tablas que se une, 331-334 descripción, 313, 322-326, 328 junturas

cruz la creación de productos Cartesianos con, 342-346 definido, 310, 538 descripción, 314

definido, 58, 544 equijoins, 310-311, 542 picadillo, 492, 511 interior, 335-336, 544 natural, 312-314, 546 anidó el bucle, 491-492, 511 nonequijoins, 310, 329-331, 547 N-camino, 327-329 externo

definido, 310, 548 lleno, 338-342 contra interior, 335-336 dejado, 336-337 descripción, 314, 334-335 derecho, 337-338

descripción, 311-312 autojunturas, 310, 331-334, 346, 550 fusión de clase, 511 sintaxis de, 314-316 JUNTURA... LA UTILIZACIÓN De cláusula, 313, 321-322, 544 JRE (Entorno de Tiempo de ejecución de Java), 33 JVM (Java Máquina Virtual), 545

Objeto grande (GLOBO) tipos de datos, 450, 459, 545 La función de LAST_DAY, 173, 213-214, 545 variable LD_LIBRARY_PATH, 27 LDAP (Protocolo de Acceso de Directorio Ligero), 545 software de LearnKey, 534, 535 junturas externas izquierdas, 336-337 función de LONGITUD, 171, 184-185, 545 LGWR (registran al escritor) el proceso, 545 caches de biblioteca, 545 Protocolo de Acceso de Directorio Ligero (LDAP), 545 COMO el operador, de 113 años, 120-125, 182 Linux, SQL*Plus en, 27-28 oyentes, 545 valores literales, 65, 77, 190 GLOBO (Objeto Grande) tipos de datos, 450, 459, 545 comando de LOCATIONS, 41, 55-56 acción de conmutador de registro, 545 escritor de registro (LGWR) proceso, 545 almacenamiento lógico, 13 gerente de Volumen Lógico (LVM), 545 inicio de sesión/de de ciclo, 4 tipo de datos LARGO, 459 tipo de Datos iniciales LARGO, 459 función INFERIOR, 171, 177-179 minúscula, escribiendo select de SQL en, 64-65 función de LPAD, 172, 186-187 LVM (gerente de Volumen Lógico), 545

M

Page 482: curso_sql_certificacion

objetos de base de datos principales namespaces, 455-456 objetos de esquema de nombramiento, 453-455 esquemas, 452-453 tipos de, 450-452 usuarios, 452-453

564 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-

051)

Monitor de manejabilidad (MMON), 546 datos de manipulación transacciones de control

transacciones de base de datos, 428-431 descripción, 427-428 select de control de transacción, 431-438 borrar filas de tablas

BORRAR comando, 423-425 comando de FUSIÓN, 426-427 comando TRUNCADO, 425-426 Select de DML

BORRAR comando, 407-408 frainstancias de, 409-412 comando de INSERCIÓN, 405-406 comando de FUSIÓN, 408-409 descripción, 404-405 comando TRUNCADO, 409 comando de ACTUALIZACIÓN, 406-407

insertar filas en tablas, 413-418 filas de actualización en tablas, 419-422 relación "muchos a muchos", 20-21 relación "muchos a un", 18 relación de detalle del maestro, 335 aspecto de MasterExam, 534 función de MAX, 282-285 opción MAXVALUE, 503 tiempo medio entre frainstancia (MTBF), 546 tiempo medio para recuperar (MTTR), 546 comando de FUSIÓN

borrar filas de tablas con, 426-427 descripción, 404, 408-409 metadata, definido, 53 capa media, 6 botón Migrate, 35 función de MINUTO, 282-285 MENOS operador de SET, 382, 389 opción MINVALUE, 503 MMON (Monitor de Manejabilidad), 546 función de MOD (módulo), 173, 199-202, 546 función de MONTHS_BETWEEN, 173, 207-208, 546 bases de datos montadas, 546

MTBF (tiempo medio entre frainstancia), 546 MTTR (tiempo medio para recuperar), 546 funciones de fila múltiple. Ver subconsultas de fila múltiple de funciones de grupo, 365-366, 369-372 multiplexión, 546

Nnamespaces, definido, 546 Carácter nacional Objeto Grande (NCLOB) datos

tipo, 459, 546 Apoyo de Lenguaje Nacional (NLS), 116, 232-233, 547 cláusula de JUNTURA NATURAL, 312, 319-321 junturas naturales, 312-314, 546 palabra clave

NATURAL, 323, 346 botón Navigate, 35 NCLOB (Carácter Nacional Objeto Grande) datos el tipo, 459, 546 parámetro de posición de principio negativo, 192 anidó junturas de bucle, 491-492, 511 anidar

funciones CONCAT, 183 descripción, la 245-246 fila sola, 174, 287

subconsultas, 358 NETBEUI (NETBIOS Usuario Extenso Interface), 546 NETBIOS (Red Ingreso Básico Salida Sistema), 546 NETBIOS Interface de Usuario Extenso (NETBEUI), 546 Red Ingreso Básico Salida Sistema (NETBIOS), 546 función de NEXT_DAY, 173, 211-213 columna pseudo NEXTVAL, 504 NLS (Apoyo de

Lenguaje Nacional), 116, 232-233, 547 valor de NLS_CURRENCY, 232

Page 483: curso_sql_certificacion

Parámetro de base de datos de NLS_DATE_LANGUAGE, 211-212 vista de NLS_SESSION_PARAMETERS, 232

Oobjete namespaces, 455-456

Índice

565 nodos, definidos, 547 palabra clave NOFORCE, 494 nonequijoins, 310, 329-331, 547 índices no únicos, 511 normalización, 10-11, 22 NO EN operador, 361, 365 no coacciones nulas, 470-471 NO operador, 131-132 comparación nula, 113, 126 valores nulos

definido, 55, 547 claves foráneas y columnas nullable, 85-88 NO columnas NULAS, 82-84 columnas NULLABLE, 82-84 descripción, 81-82

Función de NULLIF, 247, 249-252, 547 NULLS PRIMERAS palabras claves, 137 NULLS ÚLTIMAS palabras claves, 137 conversión de número

a carácteres, 229, 232-235 carácteres que converten a, 242-244 Tipo de datos de NÚMERO, 458, 460 parámetro de número, 232 columnas numéricas, 54 tipos de datos numéricos, 458 máscaras de formato numéricas, 234 funciones numéricas

MOD, 199-202, 546 descripción, 172-173 RONDA, 196-198 TRUNC, 198-199 literales numéricos, 190 condiciones basadas del modo numérico, 105-107 tipo de datos NVARCHAR2, 458 función de NVL, 247-248, 547 función de NVL2, 247-249, 547 N-camino junturas, 327-329 OC4J (Contenedores de oracle para J2EE), 547 OCAs (Oracle Socios Certificados), 547 OCI (Interface de Llamada de Oracle), 10, 547 OCPs (Oracle Profesionales Certificados), 547 ODBC (Conectividad de Base de datos Abierta), 547 OE (Entrada de Pedido) esquema de pruebas, 38-42 copias de seguridad fuera de línea, 548 OLAP (Procesamiento Analítico en Línea), 548 OLTP (Procesamiento de Transacción en Línea) sistemas,

14, 548 EN coacción BORRAR de CASCADA, 472 EN BORRAR SET coacción NULA, 472 EN palabra clave, 323, 346 filas cojas, 310 Procesamiento Analítico en Línea (OLAP), 548 copias de seguridad en línea, 548 Transacción en Línea que Trata (OLTP) sistemas,

14, 548 Conectividad de Base de datos Abierta (ODBC), 547 sistemas operativos (OS), definido, 548 operadores. También ver nombres de operadores específicos

aritmética, 70-73 Booleano Y, 126-128 contra operadores de comparación, 135 cláusula que TIENE, 298 NO, 131-132 y ENTRE operador, 117-118 O, 128-131 y filas, 104

encadenamiento de carácter funciones de manipulaciones de carácter, 183 y expresiones, 70 y valores NULOS, 84 descripción, 75-76

comparación ENTRE, 116-119, 331 contra operadores Booleanos, de 135 años

566 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-

051)

operadores (Cont). la igualdad, 113-116 EN, 119-120, 365, 369 desigualdad, 113-116 es NULA, 126 COMO, 120-125, 182 subconsultas de fila múltiple, 365-366 descripción, 113 subconsultas de fila sola, 365-366

Page 484: curso_sql_certificacion

condicional expresiones basadas en el carácter, 109-110 y NO operador, 131 DONDE cláusula, 105

SET la combinación de preguntas múltiples en solo,

386-392 el control del pedido de filas volvió,

393-395 principios generales de, 384-386 descripción, 382-383 diagramas de Venn y, 383-384 las indirectas de optimizer, 517 U OPERADOR, 128-131 O REEMPLAZAN palabras claves, 494 "ORA-00904: identificador inválido" error

mensaje, 108 "ORA-00918: la columna ambiguamente definió" el error mensaje, 317 "ORA-00923: DE palabra clave no encontrada donde " mensaje de error esperado, 73, 75 "ORA-00932: tipos de datos inconsecuentes" error mensaje, 253 "ORA-00934: la función de grupo no es permitida aquí" mensaje de error, 290 "ORA-00935: la función de grupo es anidada demasiado profundamente" mensaje de error, 287 "ORA-00937: el grupo de ni-un-solo-grupo funciona" mensaje de error, 290 "ORA-00942: la comando o la vista no existen" mensaje de error, 73 "ORA-01427: la subpregunta de fila sola vuelve más que una fila" mensaje de error, 367, 371, 420

"Foto de ORA-1555 demasiado viejo" mensaje de error, 429 "ORA-25154: parte de columna de USAR cláusula no puede tener el calificador" mensaje de error, 317 servidor de Aplicación de Oracle, 5-7 Interface de Llamada

de Oracle (OCI), 10, 547 Oracle Socios Certificados (OCAs), 547 Oracle Profesionales Certificados (OCPs), 547 Contenedores de Oracle para J2EE (OC4J), 547 gerente de Empresa de Oracle, el 7-8 gerente de Empresa de Oracle Application Server

Instrumento de control, el 8 gerente de Empresa de Oracle Database Instrumento de control, el 8 gerente de Empresa de Oracle Grid Control instrumento, 8 Oracle instalación de

software de Casa, 25 protocolo de Red de Oracle, 4, 548 Oracle Espacial, 453 directorio raíz ORACLE_BASE, 27, 548 conexión orcl_sys, 34 PEDIDO POR cláusula

la ascensión de comandoación, 137-138 comandoación compuesta, 139-142 preguntas compuestas, 385 comandoación de bajada, 137-138 pedido de filas, 393 descripción, 136 comandoación posicional, 139

Entrada de pedido (OE) esquema de pruebas, 38-42 opción de PEDIDO, 503 Organisation Internationale de Normalisation

(Organización internacional para la normalización), 23, 544 parámetro original, 247, 249 filas quedadas huérfanas, 310 OS (sistemas operativos), definidos, 548 junturas externas

definido, 310, 548 lleno, 338-342 contra interior, 335-336 dejado, 336-337 descripción, 314, 334-335 derecho, 337-338

preguntas externas, 358

paradigmas, definidos, 2

P

Page 485: curso_sql_certificacion

descripción, 386-387 UNIÓN TODO el operador, 387 operador de UNIÓN, 387-388 Índice

567 relación de niño paternal, 335 paréntesis (), 384 análisis sintáctico, definido, 548 tablas divididas, 462 variable de PASO, 27-28 comparación de modelo, 113, 120-125, símbolo de 182 porcentajes (%), 120-121 PGAs (Programa áreas Globales), 548 almacenamiento físico, 13 PL/SQL (Pregunta de Lenguaje/Estructurar Procesal

Lenguaje), 10, 170, 548 PMON (Monitor de Proceso), 549 nota posicional, 413 comandoación posicional, 139 coacciones de clave primaria, 471 claves primarias, 15, 18, 471, 549 sinónimos privados, 498-501 lenguajejes procesales, 25, 170 Lenguaje de Pregunta de Lenguaje/Estructurar Procesal

(PL/SQL), 10, 170, 548 Monitor de Proceso (PMON), 549 Programa áreas Globales (PGAs), 548 proyección, 57, 104, 549 columnas pseudo, 504 sinónimos públicos, 498-501 signos de puntuación, 238 junturas naturales puras, 312, 314

Qq (cotización) operador, 77-81 preguntas. También ver subconsultas

ad hoc, 147 ciego, 60, 63 combinación múltiple en solo los ejemplos complejos, 390-392 CRUZAN al operador, 388-389 MENOS EL OPERADOR, 389

compuesto, 382 forma genérica, 142 interior, 358 filas restrictivas recuperadas por Operadores booleanos, 126-132 operadores de comparación, 113-126 reglas de precedencia, 132-135 DONDE cláusula, 104-113

externo, 358 repetido, 147 filas de comandoación recuperadas por, 136-142 cotización (q) operador, 77-81

RRACs (Verdaderos Racimos de Aplicación), 5, 549 botones tipos radios, Tipo de Conexión, 36 INCURSIÓN (Matriz redundante de Barato

Discos), 549 Memoria de acceso aleatorio (RAM), 549 comparación de variedad, 113, 116-119, 331. Ver

ENTRE tipo de Datos iniciales de operador, 458 dispositivos crudos, 549 RDBMS (dirección de Base de datos relacional

Sistema), 2, 549 legibilidad, afirmaciones de SQL y, 66-69 Verdaderos Racimos de Aplicación (RACs), 5, 549 archivos. Ver a gerente de Recuperación de filas (RMAN), 550 Matriz Redundante de Discos Baratos

(INCURSIÓN), 549 integridad de referencia, 549 comando de REGIONS, 41, 55-56 variables de Registro, 30 álgebra relacional, 57, 382 Sistema de gestión de Base de datos relacional

(RDBMS), 2, 549

568 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-

051)

estructuras relacionales. También ver tablas normalización de datos, 14-22 descripción, 10-11 filas, 11-14 tablas, 11-14

teoría relacional, 57 relaciones, definidas, 549. Ver que también las tablas repitieron que las preguntas, 147 REEMPLAZAN la función, 172, 193-196, 549 parámetro de término de reemplazo, 193 obteniendo agregó datos

Función de AVG, 281-282 función de CONDE, 279-280 definido, 274-275 GRUPO POR cláusula, 287-294

Page 486: curso_sql_certificacion

cláusula que TIENE, 294-299 función de MAX, 282-285 función de MINUTO, 282-285 anidar, 285-287 función de SUMA, 280-281 sintaxis de, 275-278 tipos de, 275-278

restricción de datos Operadores booleanos, 126-132 operadores de comparación, 113-126 reglas de precedencia, 132-135 DONDE cláusula, 104-113

junturas externas correctas, 336, 337-338 RMAN (gerente de Recuperación), 550 Papel se cae la caja, 36 comando de ROLLBACK, 409, 427, 431, 433-434 rollbacks, 412 función REDONDA

fecha, 214-216 numérico, 172, 196-198 Tipo de datos de ROWID, 459 identificador rowid, 512, 550 resultados de nivel de la fila, 294 filas

el control de pedido de devuelto, 393-395 definido, 456

borrar de tablas BORRAR comando, 423-425 comando de FUSIÓN, 426-427 comando TRUNCADO, 425-426

incluso o excluyendo agrupado, 294-299 insertar en tablas, 406, 413-418 limitación recuperada Operadores booleanos, 126-132 operadores de comparación, 113-126 reglas de precedencia, 132-135 DONDE cláusula, 104-113

descripción, 11-14 comandoación recuperada, 136-142 subconsultas para generación, 363-364 actualización en tablas, 419-422

Función de RPAD, 172, 186-187 botón Run, 35 encuadernación de tiempo de ejecución. Ver la substitución de tiempo de ejecución de substitución de signo "". Ver la substitución de signo ""

SColumna de SAL, 463 SAVEPOINT mandan, 427-428, 431, 434-435 subconsultas escalares, 358 objetos de esquema

índices la creación, 515-517 definido, 452 caída, 517-520 modificación, 517-520 descripción, 509 objetivo de, 510-511 tipos de, 511-515 utilización, 515-517

el nombramiento, 453-455 secuencias la creación, 502-504 definido, 452, 550 descripción, 488, 501-502 utilización, 504-509

sinónimos, 452, 498-501, 551 vistas CAMBIE VISTA, 493-496

nonequijoins, 329-331 N-camino junturas, 327-329 descripción, 310-311 Índice

569 complejo, 492-493 CREAN LA VISTA, 493-496 diccionario de datos, 540 definido, 452 VISTA DE GOTA, 493-496 para hacer cumplir la seguridad, 489-490 inline, 362 para hacer datos comprensibles, 491 descripción, 488-489 para el rendimiento, 491-492 para prevenir errores, 490-491 datos que recuperan de, 497-498 simple, 492-493 para simplificar al usuario SQL, 490

calificación a nombres de columna ambiguos, 317-318 sintaxis SQL:1999, 316-317 tipos de junturas, 311-316

ejecución expresiones, 74-75, 77 valores nulos, 81-88 operadores, 70-73, 75-76, 77-81 reglas, 64-69 sintaxis, 59-64

Page 487: curso_sql_certificacion

forma general usando ANSI SQL:1999 sintaxis, 316 descripción, 52-53 operadores de SET, 382 funciones de fila sola en esquemas

definido, 38, 452-453, 550 pruebas la creación, 42-43 HORA, 38-42 OE, 38-42 descripción, 37

SCN (Número de Cambio de Sistema), 550 variable de BÚSQUEDA, 145 expresión de INSTANCIA buscada, forma normal de 257 segundos, 17 Capa de Enchufes Segura (SSL), 551 segmentos, definidos, 550 ESCOGIDO PARA comando de ACTUALIZACIÓN, 436-438 select SENTENCIA

la aplicación de expresiones condicionales en funciones condicionales, 254-261 funciones generales, 247-254 funciones que anidan, 245-246

las capacidades de, 57-58 DESCRIBEN el comando de Comando, 53-57 datos de pruebas de tablas múltiples con

Cláusula de JOINON, 322-326 JUNTURA... LA UTILIZACIÓN De cláusula, 321-322 cláusula de JUNTURA NATURAL, 319-321 conversión de instancia de carácter, 177-182 manipulaciones de carácter, 183-196 fecha incorporada, 202-206 manipulación de fecha, 206-217 numérico, 196-202

subconsultas, 362 expresiones substitutivas y texto, 147 selección, 58, 104, 550 autojunturas, 310, 331-334, 346, 550 coacciones de clave foránea que se autorefieren, 472 claves foráneas que se autorefieren, 39 puntos y coma (;), 65 secuencias

la creación, 502-504 definido, 452, 550 descripción, 488, 501-502 utilización, 504-509 archivo de parámetro de servidor (spfile), 551 tecnologías de servidor

arquitectura, 3-5 Computación grid, 8-9 lenguajejes, 9-10 servidor de Aplicación de Oracle, 5-7 gerente de Empresa de Oracle, 7-8 descripción, 2

570 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-

051)

la capa de servidor, 4 nombres de servicio, 550 Identificador de Sesión (SID), 550 sesiones, definieron, 4, 550 comando de SET, 152, 154 comparación de SET, 113, 119-120, 365, 369.

Ver EN SET de operador DEFINEN comando de ON|OFF, 152 operadores de SET la combinación de preguntas múltiples en solo

los ejemplos complejos, 390-392 CRUZAN al operador, 388-389 MENOS EL OPERADOR, 389 descripción, 386-387 UNIÓN TODO el operador, 387 operador de UNIÓN, 387-388

el control del pedido de filas volvió, 393-395 principios generales de, 384-386 descripción, 382-383 diagramas de Venn y, 383-384

LISTE el comando NO USADO, 466 SGA (Sistema área Global), 550 SID (Identificador de Sesión), 550 SID (Identificador de Sistema), 550 expresión de INSTANCIA simple, 257 vistas simples, 492-493 substitución de signo "" sola, 143-145 citas solas ('), 77-81 valores solos, 285 funciones de fila sola

conversión de instancia de carácter INITCAP, 179-182, 543 más ABAJO, 177-179 descripción, 171 SUPERIOR, 179

manipulaciones de carácter CONCAT, 183-184 INSTR, 189-190 LONGITUD, 184-185 LPAD, 186-187 descripción, 171 REEMPLAZAN, 193-196

RPAD, 186-187 SUBSTR, 190-193 NETO, 187-189 fecha incorporada

aritmética de fecha, 205-206 almacenamiento de fecha, 202-204 SYSDATE, 204-205 manipulación de fecha

ADD_MONTHS, 208-211 LAST_DAY, 213-214 MONTHS_BETWEEN, 207-208 NEXT_DAY, 211-213 descripción, 173, 206 RONDA, 214-216 TRUNC, 216-217, 460

Page 488: curso_sql_certificacion

numérico MOD, 199-202, 546 descripción, 172-173 RONDA, 196-198 TRUNC, 198-199

descripción, 170-171 subconsultas de fila sola, 365-366, 369-372 SMON (Monitor de Sistema), 551 junturas de fusión de clase, 511 datos de comandoación, con PEDIDO POR cláusula, 136-142 botón Source, 35 parámetro de número de la fuente, 197, 199 tablas de la fuente, 311, 408 spfile (archivo de parámetro de servidor), 551 SQL. Ver la Lenguaje de Pregunta Estructurada Developer de SQL

AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 35-37 instalar y lanzamiento, 33-34 Interface de Usuario, 34-35

Herramienta de SQL*Loader, 405 SQL*Plus AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 30-32 en Linux, 27-28 descripción, 26 en Windows, 28-30

Sintaxis de SQL:1999, 316-317 SSL (Capa de Enchufes Segura), 551 transformación de estrella, 361-362 STAR_TRANSFORMATION_ENABLED

parámetro de inicialización, 362

aliases de comando, 317 tablas Select de DDL

TÍndice

571 COMIENCE CON la opción, 503 afirmación terminators, 65-66 función de STDDEV, 278 Lenguaje de Pregunta Estructurada (SQL). También ver

Select SENTENCIA comandos, 23-24 definido, 551 lenguaje orientada al SET, 25 estándares para, 23

subconsultas con objetivos de comparación, 360-361 correlacionado, 366-369 tablas de creación de, 464-465 definido, 358-360 para generar filas pasaron a select DML,

363-364 para generar tablas, 362 para generar valores para proyección, la 362 fila múltiple, 365-366, la 369-372 fila sola, 365-366, 369-372 para transformación de estrella, 361-362

substitución. Ver la substitución de signo "" función de SUBSTR (subcuerda), 172, 190-193, 551 función de SUMA, 280-281, 551 sinónimos, 452, 498-501, 551 errores de sintaxis, 410 usuario SYS, 453 función de SYSDATE, 173, 204-205 privilegio sysdba, 36, 551 privilegio sysoper, 551 Número de Cambio de Sistema (SCN), 550 Sistema área Global (SGA), 550 Identificador de Sistema (SID), 550 Monitor de Sistema (SMON), 551 usuario de SISTEMA, 453 sistemas, definidos, 551

el cambio de definiciones, 465-466 coacciones, 469-477 creación de subconsultas, 464-465 creación con especificaciones de columna, 462-464 tipos de datos disponibles para columnas, 457-461 caída, 466-469 objetos de base de datos principales, 450-456 estructura de comando, 456-457 truncamiento, 466-469

definido, 551 filas que borran de BORRAR comando, 423-425 comando de FUSIÓN, 426-427 comando TRUNCADO, 425-426

Page 489: curso_sql_certificacion

la pruebas de datos de múltiple Productos cartesianos, 342-346 cláusula JOINON, 322-326 JUNTURA... LA UTILIZACIÓN De cláusula, 321-322 cláusula de JUNTURA NATURAL, 319-321 nonequijoins, 329-331 N-camino junturas, 327-329 junturas externas, 334-342 descripción, 310-311 nombres de columna ambiguos eliminatorios,

317-318 autojunturas, 331-334 sintaxis SQL:1999, 316-317 tipos de junturas, 311-316 en esquema de HORA, 40-41 filas que insertan en, 413-418 descripción, 11-14 relación de niño paternal, 335 subconsultas para generación, 362 filas de actualización en, 419-422

tablespaces, definido, 551 tablas objetivo, 311, 408

572 Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen

1Z0-051)

TCL (Lenguaje de Control de Transacción) comandos, 24 TCP (Protocolo de Control de Transmisión), 552 TCPS (Protocolo de Control de transmisión con SSL), 552 tempfile, 552 botón Test, 37 texto, substitución de signo "" por, 147-149 tercera forma normal, 17-18, 327 lenguajejes de la tercera generación (3GLs), 10 tipo de datos TIMESTAMP, 55, 387, 458 TIMESTAMP CON datos TIMEZONE LOCALES

tipo, 459 TIMESTAMP CON tipo de datos TIMEZONE, 459 TNS (Red Transparente Substrate), 552 opción TNS, 36 función de conversión TO_CHAR

convertir fechas a utilización de carácteres, 235-240 números que converten a utilización de carácteres, 232-235 definido, 228, 552 descripción, 231-232

Función de conversión de TO_DATE convertir carácteres a utilización de fechas,

205-206, 241-242 definido, 228 descripción, 231-232 Función de conversión de TO_NUMBER

convertir carácteres a utilización de números, 243-244 definido, 228, 552 descripción, 231-232

Instrumento para Desarrolladores de aplicaciones (TOAD), 5 botón Tools, 35 Lenguaje de Control de Transacción (TCL) comandos, 24 select de control de transacción

AUTOCOMMIT mandan, 435-436 DESTINAN el comando, 432 comando de ROLLBACK, 433-434 comando de SAVEPOINT, 434-435 ESCOGIDO PARA el comando de ACTUALIZACIÓN, 436-438

aislamiento de transacción, 437 transacciones, definidas, 427-428, 552 Protocolo de Control de Transmisión (TCP), 552

Protocolo de Control de transmisión con SSL (TCPS), 552 Red Transparente Substrate (TNS), 552 errores de transposición, 410 función NETA, 172-173, 187-189 función de TRUNC (truncada)

fecha, 216-217, 460 numérico, 172, 198-199 Comando TRUNCADO

borrar filas de tablas con, 425-426 descripción, 409 función truncada. Ver TRUNC funcionar truncando tablas, 466-469 tablas de verdad

NO Operador, 131 U OPERADOR, de 128 años tuples, definido, 552. También ver filas modelo de dos niveles, 4 reparto de tipo, 410, 461

UUGA (Usuario área Global), 552 UIs. Ver interfaces de usuario NO DEFINIR el comando de COLNAME, 151 comando de UNDEFINE, 149-154 subrayan el carácter (_), 120-122 URLs (URLs), 552 UNIÓN TODO el operador de SET, 382, 385, 387, 393 operador de SET de UNIÓN, 339, 382, 387-388 coacciones únicas, 470 índices únicos, 511 modelo de datos no normalizado, 22 comando de ACTUALIZACIÓN, 406-407 función SUPERIOR, 171, 179 mayúscula,

Page 490: curso_sql_certificacion

escribiendo select de SQL en, 64-65 URLs (URLs), 552 Usuario área Global (UGA), 552 interfaces de usuario (UIs)

definido, 552 GUIs, 543 NETBEUI, 546 Developer SQL, 34-35

usuarios

definido, 452 Índice

573 definido, 38 conexión indirecta con base de datos, 4 descripción, 452-453

LA UTILIZACIÓN de palabra clave, 322, 346 hora universal coordinada (Tiempo universal Coordinado), 553

Vvalores

literal, 65, 77, 190 nulo definido, 55, 547 claves foráneas y columnas nullable, 85-88 NO columnas NULAS, 82-84 columnas NULLABLE, 82-84 descripción, 81-82

solo, 285 subconsultas para generación, 362 Cláusula de VALORES, 416 tipo de datos VARCHAR2, 54-55, 229, 386, 458, 460 variables

asignación, 144 ligan variables, 538 entorno, 542 LD_LIBRARY_PATH, 27 PASO, 27-28 Registro, 30 BÚSQUEDA, 145

La función de DESACUERDO, 277 diagramas de Venn, 383-384 Venn, John, 383 VERIFICAN el comando, 149-150, 154-156 botón View, 35 vistas

CAMBIE LA VISTA, 493-496 complejo, 492-493 CREAN LA VISTA, 493-496 diccionario de datos, 540 DEJE CAER LA VISTA, 493-496 para hacer cumplir la seguridad, 489-490 inline, 362 descripción, 488-489 para el rendimiento, 491-492 para prevenir errores, 490-491 datos que recuperan de, 497-498 simple, 492-493 para simplificar al usuario SQL, 490 utilización para hacer datos comprensibles, 491

virtualization, 8

Wla advertencia apremio, 407 aplicaciones web, definidas, 6 CUANDO... ENTONCES Select, 257 DONDE cláusula

funciones de conversión de instancia, 182 condiciones basadas en el carácter, 107-110 condiciones basadas en la fecha, 110-113 contra TENER cláusula, 294, 296 y junturas, 328 subconsultas que anidan, 358 condiciones basadas del modo numérico, 105-107 descripción, 104-105 y filas, 274, 407, 465 subconsultas, 372 función de TO_DATE, 242

símbolos de comodín, 120-122 Windows, SQL*Plus en, 28-30 CON palabras claves de OPCIÓN DE CONTROL, 494 CON LEÍDO SÓLO palabras claves, 494

XXML (Lenguaje de Maquetación Extensible), 553 X-Windows, 553

Page 491: curso_sql_certificacion

¿Qué sabe usted?

¡Demuéstrelo! ¡Use los Herramientas de Estudio Interactivos en el CD incluido de LearnKey!

Usted va: • Descubra fuerzas y debilidades en su comprensión de objetivos de prueba •

Construya el conocimiento y la confianza para el rendimiento óptimo durante el día

de prueba • Práctica usando los mismos tipos de preguntas y guiones usted verá

en el examen • Enfoque sus estudios de temas críticos • Calibre su preparación

de tomar exámenes de certificación

P

¡LUS! ¡Descuentos de Formación de LearnKey especiales para

Osborne Customers! Como usted compró un Manual de Osborne con un CD de pruebas integrado, usted tiene derecho a ahorros increíbles en cursos de formación de LearnKey.

¡Guarde hasta el 60 % en la Formación de multimedia de LearnKey!

• Courseware rico en el medio • Motivación de Instrucción • Desafío de Laboratorios • Material de referencia • Práctico & Probado

Oferta Limitada en el tiempo - no TARDA

¡Visítenos en learnkey.com/osborne HOY!

Page 492: curso_sql_certificacion

1.800.865.0165 • learnkey.com/osborne © 2006 LearnKey, Inc. LK022102

SUSCRIPCIÓN LIBRE 578 Base de

datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

Sí, por favor énvieme una suscripción LIBRE a la Revista de Oracle. Para recibir una suscripción libre a la Revista de Oracle, usted debe llenar la tarjeta entera, firmarlo, y fecharlo

NO (los naipes incompletos no pueden ser tratados o reconocidos). Usted también puede faxear su aplicación a +1.847.763.9638. O suscríbase en nuestro Sitio web en otn.oracle.com/oraclemagazine De vez en cuando, la Publicación de Oracle permite la firma (se requiere) feche a nuestros compañeros acceso exclusivo a nuestras direcciones de correo electrónico para promociones especiales y anuncios. Ser incluido en esto pro- xgramo, por favor compruebe este círculo.

La Publicación de oracle permite compartir de nuestra lista de correo con terceros seleccionados. Si usted prefiere su dirección postal no ser incluida en este programa, por favor compruebe aquí. Si en cualquier momento le gustara ser borrado de esta lista de correo, por favor póngase en contacto

nombre

compañía

street/p.o.

caja

título

e-mail

dirección

El Servicio de atención al cliente en +1.847.647.9630 o envia un e-mail a [email protected]. ciudad/estado/zip

país o postal código teléfono

fax

USTED DEBE CONTESTAR A DIEZ PREGUNTAS ABAJO.

1 LO QUE ES EL NEGOCIO PRIMARIO ¿ACTIVIDAD DE SU FIRMA EN ESTE L O C Un T I O N? (compruebe un único)

▫▫�04

Page 493: curso_sql_certificacion

05 06

IBM AIX IBM UNIX Java Hardware ▫ 20 Macintosh Herramientas ▫ 24 Suite de Developer de Oracle ▫ 25 Descubridor de Oracle

���������������01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Espacio aéreo y Defensa que Fabrica Proveedor de Servicio de aplicación Productos químicos Industriales Automotores, Petróleo y Sector/Consumidor de Consumidor de Construcción/Ingeniería de Medio y Comunicaciones de Gas Educación de Bienes Envasada Gobierno de Servicios/Seguro Financiero Fabricación de Tecnología avanzada de Asistencia médica (militar) del Gobierno (civil), OEM Ciencias de la vida de Vendedor de Software Intecapas (Biotech, Productos farmacéuticos) ���������������07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 Linux MS-DOS de Macintosh MVS Teleinformática de NetWare OpenVMS UNIX de SCO Sol DYNIX/ptx Secuencial Solaris/SunOS SVR4 UnixWare Windows NT de Windows Otro UNIX

▫ 22 Macizamente ▫ 21 Procesamiento de MainframeParallel ▫ 23 Minicomandoador

▫ 24 comandoador personal ork Comandoador ▫ 26 ▫ simétricos 25 Multiprocesamiento Netw

P ip e als �er27h Wr orkstation ▫ 28 Puentes/Direccionadors/Concentradors/Pasarelas ▫ 29 Lectores de CD-ROM ▫ 30 Unidades de disco/Subsistemas de Disco ▫ 31 Módems es/Subsystems ▫ 32 TVape Driv Sv �er33icesideo Tableros electrónicos/Multimedia ▫ 34

▫ 27 Migración de Oracle ▫ 26 Oracle JDeveloperWorkbench

▫ 28 PortalBuilder Oracle9WAS i

�ra29le Oracleicearehouse O c Serv s ▫ 30 Externalización de oracle ▫ 31 Oracle Consultando ▫ 32 Educación de oracle ▫ 33 Apoyo de oracle ▫ 98 Otros 99

▫ Ninguno de los susodichos

7 CUALES OTROS PRODUCTOS DE BASE DE DATOS SON ¿Yo N U S E Un T Y O U R S I T E? (compruebe todo que se aplican) ▫▫�

16 17 18 Integrador de Venta al por menor/Venta al por mayor/Sistemas de distribución minero, VAR/VAD ▫99 98 ▫Otro Ninguno de los susodichos ▫▫�35 36 37 Proveedor de Servicio de aplicación Consultando Mantenimiento de Educación/Formación ▫▫▫�01 02 03 04 Acceso Baan dbase Gupta

▫ 0089

▫ 10 ▫ 11 Microsoft Access Microsoft SQL Server PeopleSoft Progress ▫▫�

19 20 21 Viajes de telecomunicaciones y Herramientas de Transporte (eléctrico, de gas, saneamiento, agua) 4¿EVALÚA USTED, ESPECIFICA, RECOMIENDA, O AUTORIZA LA COMPRA DE ALGUNO DE LOS SIGUIENTES? ▫▫�38 39 40 Apoyo de Servicios de Base de datos en línea Formación basada en la Tecnología ▫▫�05 06 07 IBM DB2 Informix Ingres

▫ 12 ▫ 13 �▫ 14 DEBILITE Sybase VSAM

▫ Otro 98 Negocio y Servicios (compruebe todo que se aplican) ▫ 98 Otro ▫ 98Otro

2 CUAL DEL SIGUIENTE MEJOR ▫ 01 ▫ 02 Software de hardware 99 ▫Ninguno de los susodichos 99 ▫

Page 494: curso_sql_certificacion

Ninguno de los susodichos ¿DESCRIBE SU TRABAJO PRIMARIO F U N C T I O N? (compruebe un único) dirección/Personal Corporativa

▫ 03 ▫ 04 ▫ 05 Internet de productos de Base de datos de Herramientas de desarrollo de aplicaciones o productos de Intranet 6¿QUÉ PRODUCTOS DE ORACLE ESTÁN EN USO Un T Y O U R S I T E? (compruebe todo que se aplican) Suite de Negocio electrónico de Oracle 8¿QUÉ OTROS PRODUCTOS DE SERVIDOR DE APLICACIÓN ESTÁN EN EL USO EN SU SITIO WEB? (compruebe todo que se aplican)

▫ 01 Ejecutivo, dirección (presidente, Presidente, presidente, Dueño de CFO, Compañero, Principal) 99 ▫ Ninguno de los susodichos ▫ 01 Mercadotecnia de Oracle ▫ 02 Realización de Ventas de Oracle ▫�01 02 BEA IBM

▫ 02 F (VP/Director/inManager/Controllere, nt inance/Adm istrative Managem

La compra, Administración) 5¿EN SU TRABAJO, USA USTED O PLANEA COMPRAR ALGUNO DE P siguientes R O D U C T S? (compruebe todo que se aplican)

▫ 04 Suministro de Oracle ▫ 03 dirección de Cadena de Pedido de Oracle ▫ 05 Consecución de Oracle ▫▫�03 04 05 Sol de Sybase Otro

▫ 03 dirección de Ventas/MercadotecniaSoftware

▫(VP/Director/Manager) 04 dirección de Sistemas/Operaciones de Comandoador (CIO/VP/Director/Sistema informativo de dirección de gerente, Operaciones)

▫▫�01 02 03 Gráficos comerciales CAD/CAE/CAM INSTANCIA

▫ 07 Mantenimiento de Oracle ▫ 06 Oracle ManufacturingManagement ▫ 08 Servicio de Oracle ▫ 09 Contratos de Oracle 9DURANTE LOS PRÓXIMOS 12 MESES, QUE USTED ESPERA QUE SU ORGANIZACIÓN GASTARÁ PARA

ES/ESTO Personal ▫ 05 desarrollo de Sistemas /

Programación de dirección ▫▫�04 05 06 Dirección de Archivo de Gestión de datos de comunicaciones ▫ 10 Proyectos de Oracle ▫ 11 Oracle Recursos de FHuman inancials

▫ 12 Centro de Interacción de Oracle ¿HARDWARE, SOFTWARE, PERIPHERALS, Y SERVICIOS F O R Y O U R L O C Un T I O N? (compruebe sólo un)

▫ 06 desarrollo de Sistemas / Programación de Personal 07 Finanzas ▫ 01 Menos de 10.000$ ▫ 08 Administrador DBA/Systems 07 Consulta

▫ 09 Educación/Formación ▫ 10 Director/Gerente de Apoyo técnico ▫ Otra 11 dirección/Personal Técnica ▫

�����08 09 10 11 Recurso de Materiales de Java Planeando a Multimedia Authoring Networking

▫ 13 Comunicaciones/Herramientas de Oracle (módulos) ▫ 14 Sector público de Oracle / universidad (módulos) ▫ 15 Servicios financieros de Oracle (módulos) S v/Sof �er16er Oracletware ▫▫▫�02 03 04 05 10.000$ a $49.999$ 50.000 a $99.999$ 100.000 a $499.999$ 500.000 a 999.999$

▫ 98 Otro ▫�12 13 Entrada/Control de existencias de Pedido de Ofimática ▫�17 18 Oracle9i Oracle9i Lite ▫06 1.000.000$ y

3 LO QUE ES SU PRIMARIA CORRIENTE ▫�14 15 Programación de Gestión de proyectos

Page 495: curso_sql_certificacion

▫�19 20 Oracle8i Otra base de datos de Oracle 10 W H UN T I S Y O U R C O M P UN N Y 'S Y E UN R L Y

¿S Un L E S R E V E N U E? (por favor elija un) ¿O P E R Un T I N G P L Un T F O R M? (seleccione todo que se aplican)

▫ 02 Equipos Digitales VAX ▫ 01 Equipo Digital UNIXVMS ▫ UNIX DE 03 CV

▫▫▫�16 17 18 19 Volumen de trabajo de dirección de Sistemas de Hojas de cálculo científico y Técnico ▫▫�21 22 23 Suite de Pequeño negocio de Oracle de Radio de Servidor de Aplicación de Servidor de Aplicación de Oracle9i Oracle9i �����01 02 03 04 05 500$, 000, 000 y encima de 100$, 000, 000 a 500$, 000, 000 50$, 000, 000 a 100$, 000, 000 5$, 000, 000 a 50$, 000, 000 1$, 000, 000 a 5$, 000, 000

100103 EL ACUERDO DE LICENCIA ESTE PRODUCTO (EL "PRODUCTO") CONTIENE

EL SOFTWARE PROPRIKTARY. IJATA E INFORMACIÓN (INCLUSO DOCUMENTACIÓN) POSEÍDO POR McGRAW-HILL COMPANIES. INC. ("McGRAW-HILL") Y SUS LICENCIADORES. SU DERECHO DE USAR EL PRODUCTO THK ES RY THH GOBERNADO TKRMS Y LAS CONDICIONES DEL ESTE ACUERDO Y ES ADICIONAL SUJETO a THH THRMS Y CONDICIONES CONTENIDAS EN KACH del ACUERDO DE LICENCIA DEL LICENCIADOR APLICABLE (cada uno un "LLA") INCLUIDO COMO LA PARTE DEL PRODUCTO. LICENCIA: en todas partes del Acuerdo de licencia Ihis, "usted" debe querer decir el petróleo ella el individuo o el cnlily vvho.se agenl abren este paquete. Le conceden una licencia no transferible anil no exclusiva para usar el producto Ihe sujeto para el fallowing lernis: (i) Si usted ha licenciado.1 versión de usuario sola de Producl ihe. El producto de Ihe sólo puede Iw usado en un comandoador solo (es decir. una unidad central de proceso sola). Si usted licenciara y pagara a honorarios ihe lo aplicable una red de área local o versión de red de área amplia ofihc producto, usted aie sujeto al término de ihe - de ihe después de suhparagraph (ii), (esto) Si usted ha licenciado una versión de red de aiea local, usted puede usar salgo Pmducl mintiendo en iones de listón de guiño ilimitados localizados en un huililinjr solo seleccionado por usted tailandés es atendido por tal red de área local. Si usted ha licenciado una amplia versión de red de iii'cii, usted puede usar I él el producto en estaciones de trabajo ilimitadas localizó en imiltiple huiEdings en el sitio web.same seleccionado por usted que es seived por tal red de área amplia; a condición de que. ¡bowcvCTi lha! cualquier edificio va nol estar considerado localizado en la lata: mismo sitio web si es más lhan vivo (5) millas de distancia de cualquier edificio incluido en tal sile. Adición de Jn, usted sólo puede usar LI red de área local o versión de red de área amplia de ProdtiLi en un servidor solo. Si usted desea usar el producto en más de un servidor, usted la mamá oblain wrilten aulhon/alion de McGiaw-Uill anil paga honorarios adicionales. <iii) Usted puede hacer una copia del producto ihe con objetivos de apaño sólo y usted musi mantienen un registro de accuuitc como lo ihe la posición del apaño a: todos los tiempos. CQI'YKICIIT; KKSI RICI IONES EN USO Y yo KANSFKR: Todos los derechos (incluso copyright) en y al producto areowned por McGraw-Hill y sus licenciadores. Usted es el dueño del disco encerrado de Ihe en el cual el producto Ihe es registrado. Usted no puede usar. copie, descompile, desmonte, invierta al ingeniero, modifique, reproduzca, cree trabajos derivados, transmita, distribuya, sublicencia. tienda en una base de datos o sistema de recuperación de cualquier clase, renl o transferencia producto de Ihe, o cualquier parte (del presente, en cualquier forma o por cualquier medio (incluso electrónicamente o por otra parte) excepto como expresamente asegurado en este Acuerdo de licencia y cada uno 1.1. A. Ytiu debe repioduce ihe copvnghi nol hielos, tiademark avisos, leyendas y logotipos de McGraw-Hill; los md iis licenciadores thar aparecen en Producl ihe en la copia de apaño de Producl ihc que le permiten hacer h. yo. los mi. yo Todos los derechos en el producto Ihe nol expresamente grained aquí están McGraw-Hill reservedby y sus licenciadores. TKHM: Este Acuerdo de licencia es tmlil eficaz icrminatcd. ll va lerminale si usted fuil para obedecer a wiih cualquier término oreondilion del Acuerdo de licencia ihis y cada LLA, Sobre teiuiiniiiion. le obligan lo reiiirn a McCpi.m - Molino ihe producto logelller con todas las copias I del presente y purgar todas las copias del producto Ihe incluido en cualquier anil todos los servidores e I'acililies computei. MENTÍS OKEY GARANTÍA: EL PRODUCTO Y LA COPIA DE COPIA DE SEGURIDAD SON LICENCIADOS "COMO ES." McGRAW-HILL. SUS LICENCIADORES Y AUTORES THK NO HACEN NINGUNAS GARANTÍAS. EXPRESE O IMPLICADO. EN CUANTO A LOS RESULTADOS PARA SER OBTENIDOS POR CUALQUIER PERSONA O ENTIDAD DE USO DEL PRODUCTO. CUALQUIER INFORMACIÓN O DATOS INCLUIDOS ALLÍ Y/O CUALQUIER SERVICIO DE APOYO TÉCNICO PROVEYERON BAJO LOS TÉRMINOS AQUÍ ESTABLECIDOS. SI CUALQUIERA ("SERVICIOS DE APOYO TÉCNICO"). MECKAW-COLINA. SUS LICENCIADORES Y LOS AUTORES MAKF. NINGUNA COMERCIABILIDAD de WAfiRANTIBSOT EXPRESA O IMPLÍCITA OKEY FITNE.SM-OKEY UN OBJETIVO PARTICULAR AH USA CON RliSI'hC'l PARA IHI-: PKOIH'I 1 MCGKAW-COLINA. SUS LICENCIADORES. Y LOS AUTORES NO HACEN NINGUNA GARANTÍA QUE USTED PASARÁ CUALQUIER EXAMEN DE CERTIFICACIÓN EN ABSOLUTO USANDO ESTE PRODUCTO. NINGUNA MCGKAW-COLINA. CUALQUIER DE SUS LICENCIADORES NI LOS AUTORES GARANTIZA QUE LAS FUNCIONES CONTENIDAS EN EL PRODUCTO CUMPLIRÁN CON SUS REQUISITOS O QUE LA OPERACIÓN AH EL PRODUCTO Será ININTERRUMPIDA AH liRROR I:R]-L. USTED ASUME EL RIESGO de IHEl-MIKJ-con RESPECTO A LA CALIDAD Y PERFf IKMANCi; Ol-EL PRODI K I GARANTÍA LIMITADA DISCO de EOK: A concesionario original Ihe sólo. McGraw-Hill... m.inr, que el disco incluido en el cual Ihe Producl es registrado es libre de dcfccls en materiales y habilidad bajo uso normal y servicio para el periodo de noventa (') ()) los días del valle de la compra. En acontecimiento Ihe de un ilefc-cl en disco de Ihe tiy cubierto ihe warranly anterior. McGraw-Hill reemplazará el disco de Ihe. LIMITACIÓN DE RESPONSABILIDAD: NINGÚN McGRAW-HILL. SUS LICENCIADORES NI LOS AUTORES Deben ser OBLIGADOS DE CUALQUIERA INDIRECTO. ESPECIAL OKEY DAÑOS CONSECUENCIALES. TAL COMO PERO NO LIMITADO CON. PÉRDIDA DE GANANCIAS ESPERADAS O VENTAJAS. RESULTAR DEL USO OKEY INHABILIDAD DE USAR EL PRODUCTO AUN SI HAN ACONSEJADO A ALGUNO DE ELLOS AH LA POSIBILIDAD DE TALES DAÑOS. ESTA LIMITACIÓN DE LA RESPONSABILIDAD Debe APLICARSE A CUALQUIER RECLAMACIÓN O CAUSAR W H yo S O I 'V T K W H M I yo yo' K S I 'C H C M de I m O R C Un U S h AkIShS EN LA ESTAFA 1 RAC 1. 1 AH yo. () R n I HERWIM' Sunn-sl; él - hace nol permiten a exclusión de Ihe 01 limicaiion de indiiect. los daños consecuenciales o especiales, entonces el susodicho el limuaiion puede no aplicar lo usted.

Estados Unidos (lOVKKNMKNT KKSTKKTKI) K i yo, yo n • Cualquier softwaie incluido en Pioduci es piovided va) reslricled lighls sujetan 10 suliparagraphs ic), (I) imd (2l ol Ihe Comnuier comercial cláusula de Derechos Soriwiuo-restringida 4K Al-C.F.R. 52.227-11). El lermsof Ihis Acuerdo uso de Ihe lo aplicable de los datos en el producto mí Ihose bajo cual Ihe dala ure generalmente puesto a disposición del gran público t> y McGraw-Hill. I-xcepl como piovidcd aquí, ninguna reproducción, usan. o los derechos de revelación son grained con respecto al dala incluido en Producl y ningún lighl para modificar o crear el derivado woikt 1'ioni cualesquiera tales datos son heiuhy concedido. (iKNKKAL: Esta Licencia Agieenii'iii y cada LLA constituye agieemeni entero ihe bcrwccn ihe parlies relnling 10 producto ihe. Los términos de ait v i'i i ii. El pedido no debe ir la baya del espino ningún efecto en los términos ol'iliis Licencia Agieemeni o cualquier LLA-En el cvcm de cualquier conllict bttWND ihe lerms de esta Licencia Agreementand cualquier LLA. Ihe lerms ol'lhe LLA aplicable debe gobernar. El frainstancia de McGraw-Hill de insistir Al-cualquier tiempo en la conformidad estricta con esta Licencia Agitemeni debe ir nol constituir una renuncia hacia cualquier derecho según este Acuerdo de licencia. Este LicenseAgreement debe ser interpretado y gobernado de acuerdo con las leyes de [él Se vuelve duro de Nuevo Yoik Si cualquier estipulación de este Acuerdo de licencia es sostenida [o ser el contrario lo ley. aquella provisión estará hecha cumplir al grado máximo permisible, y las provisiones

Page 496: curso_sql_certificacion

restantes permanecerán en fuerza llena y efecto.