Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso SQL Certificacion
Curso SQL Certificacion
de ®
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
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.
Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.
®
John Watson
Roopesh Ramklass
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.
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 george_hoare@mcgraw-hill.com 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 -
vii
Esta página intencionadamente se dejó en blanco
Para más información sobre este título, haga clic aquí
CONTENIDO
ix
x
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)
Pregunta de laboratorio...................................... 48
mí Respuestas de Prueba................................... 49
Respuesta de laboratorio........................................ 50
55 57 59 59 64
67 70 81
86 90 92 94 96 98
141
Contenido
142 353111494
177
231232
xii
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)
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.............
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
274 274
305306308
324
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
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
Capí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
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 sesión
Base de Datos
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.
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.
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
Stateful persistent
Browse
sessions over
r
Oracle Net
Browse
r
Browser
Stateless
nonpersistent
sessions over
HTTP
El Oracle Enterprise manager se presenta en tres formas:
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.
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.
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.
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:
Tabla DEPARTMENTS:
Tabla EMPLOYEES:
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
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, pero
se 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 departamento
nú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
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.
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:
El Lenguaje de Manipulación de Datos (DML) comandos:
■ SELECT
■ INSERT
■ UPDATE
■ DELETE
■ MERGE
■ CREATE
■ ALTER
■ DROP
■ RENAME
■ TRUNCATE
■ COMMENT
■ GRANT
■ REVOKE
■ COMMIT
■ ROLLBACK
■ SAVEPOINT
SQL*Plus
SQL*Plus es una herramienta cliente-servidor para conectar a una base de datos y enviar ad hoc SQL
comandos. 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.
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.
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:
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
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
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/tiger@linsrv1.bplc.co.za:1521/orcl.bplc.com
El primer ejemplo usa un alias, orcl, para identificar la base de datos. Esto debe ser resuelto
en 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
ilustra algunos más problemas comunes.
FIGURA 1-8
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
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
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.
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:
FIGURA 1-10
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.
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 un
usuario 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.
FIGURA 1-11
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 Columnas
REGIONS #* 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
\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
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. Estos
scripts 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>:
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:
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
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
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.
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
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
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.
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:
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.
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.
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
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
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.1
EJERZA 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.
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
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.
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 REGION_NAME
FROM REGIONS;
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.
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
Figura 2.6 Combinaciones de JOB_ID y DEPARTMENT_ID únicos en la tabla JOB_HISTORY
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
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,
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.
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.
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:
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
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
Paso
1. 2.
3.
4.
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 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
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 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.
FIGURA 2-10
FIGURA 2-12
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
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
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
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
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.
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:
Extracción de datos Usando el SQL Select SENTENCIA
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
✓
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
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.
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,
conecte al esquema OE y complete las tareas siguientes.
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.
Los ® B, D, y E pueden ser legítimamente almacenados en este tipo de datos y, por lo tanto, son ˚
incorrecto
respuestas 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.
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
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
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:
Extracción de datos Usando el SQL Select SENTENCIA
3
La restricción y la
Comandoación de
Datos
OBJETIVOS DE CERTIFICACIÓN
✓
Q&A
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
selección
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
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;
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
FIGURA 3-2
La utilización el DONDE
cláusula con expresiones
numéricas
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;
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
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
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.
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;
FIGURA 3-6
La utilización el DONDE
cláusula con expresiones
numéricas
Limite las Filas Recuperadas por una Pregunta
113
Operadores de comparación
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
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
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
FIGURA 3-8
FIGURA 3-9
EL ENTRE operador
Limite las Filas Recuperadas por una Pregunta
119
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'
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
FIGURA 3-11
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
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
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
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.
FIGURA 3-13
La utilización de SER
operador NULO
TABLA 3-2
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 FALSO FALSO VERDADERO NULO NULO FALSO FALSO NULO
128
Capítulo 3:
La restricción y la Comandoación de Datos
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.
TABLA 3-3
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
129
FIGURA 3-14
La utilización el Y operador
Note que las dos condiciones son separadas por el O palabra clave. Todo el empleado
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
TABLA 3-4
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
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
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
Nivel de precedencia
12345
78910 11
Símbolo de operador
()/, * ,
|| =, <>, <=>, =
FIGURA 3-16
Precedencia de operador en el
DONDE cláusula
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
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 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
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
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
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
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.
8. La ejecución de la select devuelve un SET de resultados que emparejan este modelo como
mostrado en la ilustración siguiente.
OBJETIVO DE CERTIFICACIÓN 3.03
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
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.
FIGURA 3-20
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
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
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
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
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
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.
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
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
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
FIGURA 3-26
El comando VERIFICAR
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:
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.
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.
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
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
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;
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
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
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
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
4
Funciones de fila
sola
OBJETIVOS DE CERTIFICACIÓN
4.01
4.02
✓
Q&A
Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.
170
Capítulo 4:
Funciones de fila sola
a SQL y proporcionan una primera vislumbre de los apoyos de Oracle de capacidades procesales.
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.
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
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
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
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 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.
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
a aquellos en la Figura 4-6 pero han sido ejecutados más usuario utilización amistosa del
LPAD y funciones de RPAD.
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.
TABLA 4-1
Precisión decimal
-4 - 3 - 2 - 1123
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
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 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
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
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
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.
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.
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
es como sigue:
seleccione sysdate del dual
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 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:
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.
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:
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
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.
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.
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.
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
✓
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.
❑ 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.
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
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. ˚
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
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:
5
Utilización de
Funciones de
Conversión y
Expresiones
Condicionales
OBJETIVOS DE CERTIFICACIÓN
5.01
5.02
5.03
✓
Q&A
228
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales
contenido es asumida en este capítulo. A veces los datos no están disponibles en el formato exacto
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.
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
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
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
DD-MON-RR HH24:MI
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
¿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').
TABLA 5-2
TO_NUMBER (char1, [formatean la máscara], [nls_parameters]) = num1 TO_DATE (char1, [máscara de formato],
[nls_parameters]) = date1
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
9
Anchura 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
D
Separador decimal
09999D999
030.40
00030.400
falta)
,
Posición de coma
09999 999
03040
00003 040
símbolo
para negativas
PR
Negativas de abrigo en
99999PR
3040
<3040>
paréntesis
EEEE
Nota científica
99.99999EEEE
121.976
1.21976E+02
U
nls_dual_currency
U099999
03040
CAD003040 si nls_dual_
(n es el número de
nines después V)
S
+ o - el signo es prefijado
S999999
3040
+3040
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
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
TABLA 5-5
WWW de Elemento de formato QCC S CENTÍMETROS CÚBICOS precedentes, YYYY, o AÑO IYYY, IYY, IY, yo
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
A.C.
1356075
39
IX
238
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales
TABLA 5-6
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)
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
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
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'
El 12 de septiembre
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"
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
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:
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:
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.
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;
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;
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
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
LA FIGURA 5-8 La función de NULLIF
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
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
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.
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
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.
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
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.
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
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
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
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
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
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.
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.
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
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.
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
8. El DE la cláusula es
DE CLIENTES
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
6
El obteniendo de
Datos Agregados
Usando las Funciones
de Grupo
OBJETIVOS DE
CERTIFICACIÓN
6.01
Describa las Funciones de Grupo
6.04
Incluya o Excluya Utilización de Filas Agrupada
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
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
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.
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
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. 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:
STDDEV tiene la sintaxis siguiente: STDDEV ([DISTINCT|ALL] expr); Esta sintaxis puede ser
deconstructed en las formas siguientes:
FIGURA 6-2
La función de
CONDE
Identifique las Funciones de Available Group
281
FIGURA 6-3
La función de SUMA
282
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo
FIGURA 6-4
La función de AVG
Identifique las Funciones de Available Group
283
FIGURA 6-5
El MINUTO y funciones de
MAX
284
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
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.
FIGURA 6-7
DEPARTMENT_ único ID valora
en la comando de EMPLOYEES
FIGURA 6-8
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.
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:
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
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:
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.
FIGURA 6-10
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
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.
❑ Grupos puede estar tablas enteras o partes de una comando agrupada juntos por un común
agrupación de atributo.
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.
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
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.
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.
7
La pruebas de
Datos de Tablas
Múltiples
OBJETIVOS DE CERTIFICACIÓN
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
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
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.
■ 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:
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.
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
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.
FIGURA 7-2
Juntura enfadada
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
FIGURA 7-3
Nota de punto
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.
FIGURA 7-4
La juntura natural
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.
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:
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
FIGURA 7-5
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;
324
Capítulo 7:
La pruebas de Datos de Tablas Múltiples
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.
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
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:
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 %'
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
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
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
FIGURA 7-9
Autojuntura
requerido, sin embargo, una juntura externa es usada para traerlos. Varias variaciones de
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:
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
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
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
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
FIGURA 7-11
FIGURA 7-12
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?
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)
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:
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
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
comando alfabético, N tablas o que especifican laarchivos. Los resultados son clasificados por
juntura inválida
condiciones puede crear por descuido primero en el REGION_NAME y luego en las
productos Cartesianos. Una juntura natural pura COUNTRY_NAME. El primer registro tiene
dos tablas que comparten no idénticamente el par de valores, Asia y Argentina. Cuando entre
llamadas del primer registro causan una juntura Cartesiano los cambios de REGION_NAME, las columnas
dos tablas son afiliadas, pero menos que tiene el par de valores, África y Argentina. ya que
una condición está disponible. Note que los valores de COUNTRY_NAME son
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
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.
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
✓
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.
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.
REGION_ID
1234
REGION_NAME
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
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
353
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 ˚
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.
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. ˚
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
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
8
La utilización de
Subconsultas para
Solucionar
problemas
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
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
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.
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:
Una subpregunta puede tener cualquiera de las cláusulas habituales para selección
y proyección. Lo siguiente es cláusulas requeridas:
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;
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.
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);
Símbolo
= ¡>> = <<= <>! =
Sentido
igual mayor que mayor que o igual menos que menos que o igual no igual no igual
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
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.
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
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
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?
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.
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
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
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.
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
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.
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
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.
RESPUESTA DE LABORATORIO
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;
9
La 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
9.03
✓
Q&A
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
descrita matemáticamente (el álgebra relacional es el término usado para esto), pero el uso de
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.
FIGURA 9-1
LOROS
MURCIÉLAGOS
ABEJAS
OSOSDE
PESCADO
384
Capítulo 9:
La utilización de los Operadores de SET
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.
FIGURA 9-2
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
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
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.
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.
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;
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)
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
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.
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.
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 ✓
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. ˚
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
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
10
Manipulación de
Datos
OBJETIVOS DE CERTIFICACIÓN
10.01
10.02
10.03
10.04
10.05
✓
Q&A
Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.
404
Capítulo 10:
Manipulación de Datos
sido estudiado hasta ahora. Sin embargo, hay una cantidad grande de la teoría de base de datos
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.
■ FUSIÓN
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:
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
ACTUALIZACIÓN
tablas y agregaciones, de modo que resultar
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).
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
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
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.
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
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.
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
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
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
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).
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:
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
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.
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
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.
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');
FIGURA 10-3
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
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.
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;
Este ejemplo usa una subpregunta para la selección de fila que navega la HORA árbol
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.
6. Destine la eliminación:
destine;
Borre Filas de una Comando
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
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.
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
El comando TRUNCADO en
Developer SQL, de la línea de
comandos y de los menús
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
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
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.
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.
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
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.
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
paleta ('tres'); rollback a segundo savepoint; rollback a savepoint primero; destine;
borre de la paleta; rollback;
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
DESTINA select.
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.
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.
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.
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
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');
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';
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');
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.
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.
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.
FIGURA 10-5
FIGURA 10-6
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
Explique Como Coacciones Son Creadas
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
formas, pero SQL no es consciente de esto. Una comando también puede tener que ver con otros
í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.
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
1
13
286
3023
342
12
22018
322820
11 11
177769
73
60 1240 1178
118
17 37
71
21
2
204
26493
2464
199413
2630
231
6
4669
94
93
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
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
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
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.
FIGURA 11-1
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:
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
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.
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
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;
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;
■ 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:
■ 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
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 LARGAComo el LARGO, pero datos binarios que no serán convertidos por
Red de oracle. Cualquier columna CRUDA LARGA debería ser convertida a GOTAS.
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.
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.
FIGURA 11-2
3. Use una pregunta contra una vista de diccionario de datos para mostrar lo que las
columnas arreglan
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
■ 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 HIREDATE SAL 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
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.
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
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.
Finanzas de Finanzas de Finanzas de Finanzas Ejecutivas ejecutivas Lo financian
Cree una Comando Simple
■ 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);
■ Renombrar columnas:
cambie comando los emp renombran la columna hiredate al
reclutado;
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.
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.
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
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.
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
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.
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
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.
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
definida al final de comando.
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 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
■ 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
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
de EMPLOYEES;
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
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
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.
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.
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.
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
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
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:
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
✓
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). ˚
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.
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.
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
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
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.
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.
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 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;
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
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.
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
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.
■ 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
Por regla general, las vistas simples aceptan DML, las vistas complejas no hacen.
Pero hay excepciones.
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:
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
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
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:
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;
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
FIGURA 12-4
Creación de Secuencias
La sintaxis llena para crear una secuencia es como sigue:
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;
INCREMENTO POR
COMIENCE CON
MAXVALUE
MINVALUE
CICLO
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.
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
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.
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
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:
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;
1er 2do 3er 4to 5to 6to 7mo 8vo 9no 10mo
En Su Una Sesión
seleccione seq1.nextval del dual;
En Su Sesión B
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
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.
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 %';
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:
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
Fecha
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:
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.
esté en columnas de tipos de datos diferentes, y las columnas no tienen que ser
adyacentes en la comando.
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.
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.
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;
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
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.
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.
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.
¿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.
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:
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.
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.
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á.
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).
® 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));
A
Sobre el CD
Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.
534
Apéndice: Sobre el CD
El CD-ROM incluido con este libro viene completo de MasterExam y una versión
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.
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.
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.
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
customer.service@mcgraw-hill.com. Para clientes fuera de los 50 Estados Unidos,
envíe por correo electrónico international_cs@mcgraw-hill.com.
Glosario
A
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.
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.
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
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.
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.
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.
el racimo segmenta Un segmento esto que puede contener una o varias tablas, denormalized en una
estructura sola.
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.
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 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.
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.
los datos bombean Una instalación para transferir cantidades grandes de datos en la alta
velocidad en, de, o entre bases 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.
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.
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
dentro de la base de datos: INERTE, ACTUALIZACIÓN, BORRAR, y FUSIÓN.
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.
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.
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
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.
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 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
Índice de IOT Comando Organizada. Un tipo de comando donde las filas son almacenadas en
los bloques de hoja de un segmento de índice.
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.
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,
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
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.
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.
multiplexión Mantener copias múltiples de archivos.
el namespace Una agrupación lógica de objetos dentro de los cuales ningunos dos objetos
pueden tener el mismo nombre.
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.
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.
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.
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.
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.
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.
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.
la juntura externa que Una juntura realizó cuando filas, que no son recuperadas por una
juntura interior, es incluida para la recuperación.
analice Una acción que converte select SQL en una forma conveniente para la ejecución.
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.
la clave primaria La columna (o la combinación de columnas) cuyo valor (es) puede ser usado para
identificar cada fila en una comando.
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.
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).
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.
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.
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.
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.
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.
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.
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.
TO_CHAR Una función que realiza fecha al carácter y conversiones de tipo de datos de número
al carácter.
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).
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.
El X-Windows que El entorno de GUI estándar usó en la mayor parte de comandoadores, excepto
aquellos que ejecutan el Microsoft Windows.
A
permisos 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
C
Opció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
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
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
D
bloques 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
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
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
E
fá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
vuelve más
que una fila", 367, 371, 420
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
F
tablas 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
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
H
racimos 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
Yo
IBM (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
Organización internacional para la normalización (Organización internacional para
Estandarización), 23, 544 aislamiento, 429
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
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)
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
N
namespaces, 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
Parámetro de base de datos de NLS_DATE_LANGUAGE,
211-212 vista de NLS_SESSION_PARAMETERS, 232
O
objete 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
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
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
Q
q (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
R
RACs (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)
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 ""
S
Columna 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
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
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
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
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
U
UGA (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,
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
V
valores
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
W
la 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
X
XML (Lenguaje de Maquetación Extensible), 553
X-Windows, 553
¿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
datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)
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)
nuestras direcciones de correo electrónico para promociones especiales y anuncios. Ser incluido en esto pro-
gramo, por favor compruebe este círculo.
x
feche a nuestros compañeros acceso exclusivo a
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
dirección
El Servicio de atención al cliente en +1.847.647.9630 o envia un e-mail a oracle@halldata.com.
ciudad/estado/zip
país
o
postal
código
teléfono
fax