manual db2.doc

53
MODELO ENTIDAD-RELACION El modelo entidad – relación es una técnica de representación gráfica que incorpora información relativa a los datos la relación existente entre ellos para abstraer el mundo real. Las características: · Las características del modelo entidad – relación son: · Reflejan sólo la existencia de datos, no lo que se hace con ellos. · Se incluyen todos los datos del sistema en estudio y, por tanto no está orientado a aplicaciones particulares. · Es independiente de las bases de datos y sistemas operativos concretos. · No se tienen en cuenta restricciones de espacio, almacenamiento, ni tiempo de ejecución. · Está abierto a la evolución del sistema. Entidad Una entidad es una cosa u objeto concreto o abstracto que existe, que puede distinguirse de otros y del cual se desea almacenar información. Clave de una Entidad Antes de definir el concepto de Clave es conveniente especificar un concepto más general denominado Identificador, Determinante o Superclave. Es un conjunto de uno o más atributos que permiten identificar de forma única una ocurrencia de Entidad dentro de un conjunto de ellas.

Upload: oskarorland

Post on 08-Feb-2016

78 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: MANUAL DB2.doc

MODELO ENTIDAD-RELACION

El modelo entidad – relación es una técnica de representación gráfica que incorpora información relativa a los datos la relación existente entre ellos para abstraer el mundo real.

Las características:

· Las características del modelo entidad – relación son:· Reflejan sólo la existencia de datos, no lo que se hace con ellos.· Se incluyen todos los datos del sistema en estudio y, por tanto no está

orientado a aplicaciones particulares.· Es independiente de las bases de datos y sistemas operativos concretos.· No se tienen en cuenta restricciones de espacio, almacenamiento, ni tiempo

de ejecución.· Está abierto a la evolución del sistema.

Entidad

Una entidad es una cosa u objeto concreto o abstracto que existe, que puede distinguirse de otros y del cual se desea almacenar información.

Clave de una Entidad

Antes de definir el concepto de Clave es conveniente especificar un concepto más general denominado Identificador, Determinante o Superclave. Es un conjunto de uno o más atributos que permiten identificar de forma única una ocurrencia de Entidad dentro de un conjunto de ellas.

De entre todas las Superclaves, aquellas para las que ningún subconjunto propio es a su vez una Superclave se denominan CLAVES CANDIDATAS. De entre todas las claves candidatas el diseñador elegirá una que pasará a denominarse CLAVE PRIMARIA, siendo todas las demás Claves Alternativas.

Por último definimos el concepto de CLAVE AJENA, siendo aquel o aquellos atributos de una Entidad que son clave primaria en otra.

Page 2: MANUAL DB2.doc

Relación

Es una asociación, sin existencia propia, de varias Entidades. Se representa mediante un rombo. Una limitación del modelo E-R es que no es posible expresar Relaciones entre Relaciones

Grado de una relación

El Grado de una Relación representa la participación en la Relación de cada una de las entidades afectadas y existen tres tipos posibles:

· 1:1 (una a una): a cada ocurrencia de una entidad corresponde no más de una ocurrencia de la otra y viceversa.

· 1:n (una a muchas): a cada ocurrencia de la primera entidad pueden corresponderle varias ocurrencias de la segunda y a cada ocurrencia de la segunda le corresponden no más de una de la primera.

· n:m (muchas a muchas): a cada ocurrencia de la primera entidad puede corresponderle más de una ocurrencia de la segunda y viceversa.

Estructura relacional de los datos.

Tablas

Es una forma sencilla de estructurar los datos, es decir, en filas y columnas (tuplas y atributos en terminología relacional).

Para que una tabla forme parte de una estructura relacional debe cumplir las siguientes condiciones:

· Debe tener un solo tipo de fila, cuyo formato queda definido por el esquema de la tabla.

· Por lo tanto todas las filas tienen las mismas columnas.· Cada fila debe ser única y no pueden existir filas duplicadas.· Cada columna debe ser única y no pueden existir columnas duplicadas.· Cada columna debe estar identificada por un nombre específico.· El valor de una columna para una fila debe ser único. No pueden existir

múltiples valores en una posición de una columna.· Los valores de una columna deben pertenecer al dominio que representan. Es

posible que un mismo dominio se utilice para definir los valores de varias columnas.

El concepto relación se utiliza para indicar que la tabla relacional mantiene asociación con otras tablas, por lo que representa a una entidad asociativa.

Page 3: MANUAL DB2.doc

El proceso de normalización

Este proceso sigue una serie de normas que, tras aplicarlas, consigue tener los datos agrupados en diferentes tablas de forma óptima para su implementación, gestión y explotación desde diferentes futuras aplicaciones.

El proceso de normalización parte de las formas normales definidas por Codd, quien definió las tres primeras. Posteriormente unas anomalías detectadas forzaron a crear una forma normal más completa que la 3FN, es la FNBC (forma normal Boyce y Codd). Después Fagin definió la 4FN y 5FN.

La normalización se basa en que “los datos son independientes de las aplicaciones que los gestionan”, y su objetivo es obtener el mayor número de tablas posibles, dejando en cada una de ellas los atributos imprescindibles para representar a la entidad, o a la relación entre entidades a la que hace referencia la tabla mediante la conexión de sus claves.

Primera forma normal (1FN).

Una tabla está en primera forma normal si los valores que componen el atributo de un tupla son elementales y únicos.

Para que una tabla que no se encuentra en 1FN pase a 1FN se procede:1. Se localizan los atributos que forman parte de la clave principal2. Se descompone la tabla realizando una proyección:

· Una tabla compuesta por la clave con los atributos que tienen valores únicos

· Otra tabla con la clave y los atributos que tienen valores múltiples

Segunda forma normal (2FN).

Se dice que una tabla está en 2FN si y sólo si cumple las siguientes condiciones :

· Se encuentra en 1FN· Todo atributo secundario (aquellos que no pertenecen a la clave principal)

dependen totalmente (tienen una dependencia funcional total) de la clave completa y no de parte de ella.

Se dice que el atributo o conjunto de atributos B depende funcionalmente del atributo o conjunto de atributos A, y se representa como A ® B o A DF B si y sólo si cada valor de A se corresponde (a nivel conceptual) con cada valor de B.

Page 4: MANUAL DB2.doc

Para convertir una tabla que no está en segunda forma normal a 2FN, se realiza una proyección y se crea:

1. Una tabla con la clave y todas sus dependencias totales con los atributos secundarios afectados.

2. Otra tabla con la parte de la clave que tiene dependencias, junto con los atributos secundarios implicados.

Tercera forma normal (3FN)

Se dice que una tabla está en 3FN si y sólo si cumple las siguientes condiciones :

· Se encuentra en 2FN· No existen atributos no primarios que son transitivamente dependientes de

cada posible clave de la tabla. Esto quiere decir que un atributo secundario sólo se debe conocer a través de la clave principal o claves secundarias de la tabla y no por medio de otro atributo no primario.

El algoritmo de descomposición en 3FN consiste en:

1. Sea una DF X ® Y donde X e Y son disjuntos y no son clave ni forman parte de ella.

2. Se obtienen dos proyecciones :· T1 = P(X,Y)· T2 = P(U-y)

Siendo U todos los atributos que componen la tabla.Si la tabla T2 sigue sin permanecer en 3FN se repite el proceso.

Page 5: MANUAL DB2.doc

INTEGRIDAD DE BASES DE DATOS RELACIONALES

El término de integridad hace referencia a la coherencia y veracidad de la información que se encuentra repartida por numerosas tablas en la base de datos. Las únicas operaciones que afectan a la integridad son aquellas que permiten actualizar de algún modo la información:

· Modificación· Inserción· Borrado

Los elementos que proporciona un Sistema Gestor de Bases de Datos relacional para mantener íntegra la información son restricciones del tipo:

· Restricciones de los valores que puede tomar un atributo en la base de datos, tanto referido al tipo de datos como a su dominio o conjunto de valores. Generalmente se hace directamente a partir de la definición de los atributos en la tabla.

· Atributos que siempre deben permanecer con información y en los que la base de datos no admite el valor NULL. Estos atributos pueden ser claves o no. Si son claves y sobre ellos van a existir índices únicos, deben estar definidos como NOT NULL. Si no son clave, simplemente se incluye la cláusula NOT NULL en la definición del atributo de la tabla. La base de datos comprueba esta restricción para las operaciones de modificación e inserción. A pesar de que nos hemos referido a SQL en los párrafos anteriores, la mayoría de los sistemas gestores de bases de datos permiten definir esta restricción.

· Los valores de los atributos que forman parte de la clave principal o primaria son únicos y la base de datos no puede admitir valores nulos ni duplicados. Esta restricción toma la denominación de “INTEGRIDAD DE ENTIDAD”. Para ello se crearán índices únicos sobre la tabla. Siempre que se realice una modificación o inserción, la base de datos comprobará que los datos no estén duplicados.

· Cuando una tabla mantiene una clave ajena se le denomina tabla hija de aquélla que contienen la clave principal a la que hace referencia. Entonces, a esta otra tabla se le denomina tabla padre. Pues bien, la base de datos tiene que forzar a que en toda operación de inserción o modificación sobre la tabla hija, la clave ajena se corresponda con la clave principal de la tabla padre o bien tenga el valor NULL. Del mismo modo,

Page 6: MANUAL DB2.doc

una operación de borrado o de modificación de la clave principal en la tabla padre no debe afectar a los valores definidos sobre las tablas hijas. Esta restricción toma la denominación de “INTEGRIDAD REFERENCIAL”.

· Se pueden definir determinadas restricciones o reglas que gobiernan la realidad del problema con las operaciones de actualización. La base de datos tiene que ser capaz por sí misma de validar aquellas operaciones que pueden verse afectadas por reglas o solicitudes de la empresa. Este tipo de restricciones toma el nombre de “REGLAS SEMANTICAS”.

Page 7: MANUAL DB2.doc

CONCEPTOS BASICOS DE DB2

Bases de datos Relacional

DB2 es un administrador de sistema de base de datos relacional. Los datos en una base de datos relacional pueden existir en una o más tablas. Cada una contiene y especifica el nombre de las columnas y el nombre de las filas. Cada columna en una fila esta relacionada de alguna forma con otras columnas.

SQL

STRUCTURED QUERY LANGUAGE, lenguaje usado para acceso de datos en tablas de DB2. SQL contiene las sentencia de definición de los datos y las sentencias de manipulación de los datos (retrieve, insert, delete, y update) sobre los datos de la tabla.SQL también ejecuta funciones que no definen ni manipulan datos, tales como GRANTING o REVOKE que son ustilizadas para autorizar o impedir el uso de los recursos.

Estructura de DB2

Estructuras de Datos

· Databases: Una base de datos fija la estructura del DB2; cuando se define una base de datos en DB2, se da un nombre a las Tablas e Indices asociados, y también Table Space en cual ellas residen. Una sola base de datos, puede contener todos los datos asociados con una aplicación o con un grupo de aplicaciones relacionadas.

· Storage groups: El Storage Group de DB2 pone los volúmenes en el Dispositivo de Almacenamiento de acceso Directo(DASD). Los volúmenes tienen los Datasets en los cuales tablas e índices están almacenados.

Un Storage Groups puede tener hasta133 Volumenes, todos del mismo tipo. Si los volumenes de clarados no estan subidos o no son del mismo tipo pueden ocurrir situaciones de error en los procesos de alocación dinámica(momento de extend o de create de un space).

Page 8: MANUAL DB2.doc

· Table Space: En el se encuentran almacenados los Data sets que contienen una o más tables. El Table Space puede ser Simple, Segmentado o Particionado. Un Tablespace tener de 1 a 64 VSAM datasets, los datasets manejados por DB2 son Linear data sets(LDS).

· Simple : Tiene paginas que contiene información desordenada de varias tablas. Si una tabla es dropped, el espacio ocupado por las filas no queda disponible hasta que el tablespace sea reorganizado.

· Segmentado : El tablespace esta dividido en varios segmentos, y cada uno contiene el mismo numero de paginas. Cada segmento contiene filas de solo una tabla en donde los datos estan ordenados.Las ventajas de utilizar un table space segmentado son las siguientes:

· Cuando se necesita acceder a un dato de una tabla , no es necesario hacer un tablespace scan de toda la tabla sino que se va directamente al segmento donde se encuentra el dato a consultar.

· Cuando una tabla es bloqueada, el bloqueo no interfiere con el acceso de de segmentos de otras tablas.

· Cuando una tabla es borrada los segmentos de esa tabla quedan inmediatamente disponible despues del drop, y no es necesario realizar el Reorg.

· Particionado : Un tablespace particionado es utilizado para manejar datos historicos de una tabla, cada particion contiene información de una parte de la tabla. Aunque las particiones pueden ser asignadas independientemente storage groups separados, la colección entera de datos es una única tabla.

· Tablas: los datos en una base de datos de DB2 esta representada en tablas, que esta conformada por Filas y Columnas.

· Indices: Un índice es un método de fijar apuntadores hacia los datos en una tabla DB2. El Indice esta almacenado separadamente de la tabla.

· Views: Una View es un camino alterno que representa los datos existentes en una o más tablas. Una View puede incluir todas o algunas columnas de las tablas base.

Page 9: MANUAL DB2.doc

Estructuras del Sistema

· DB2 Catalogo: Consiste en las tablas de datos que están definidos en el sistema DB2. El catalogo de DB2 esta contenido en un sistema de base de datos DSNDB06. Donde se crea, altera, o borra cualquier estructura, DB2 inserta, o borra filas del catalogo que describe la estructura y como esta relacionada con otras estructuras.

· DB2 Directory: Contiene toda la información requerida al iniciar el DB2. No se puede acceder al directorio usando SQL. El directorio se maneja a través de archivos VSAM (LDS). El directory de DB2 esta contenido en un sistema de base de datos DSNDB01.

· Active and Archive Logs: Contiene todos los registros modificadfos y eventos significativos que haya ocurrido en el Log de DB2; en el momento de alguna eventualidad DB2 utiliza el Log para recuperar la información.

· DB2 escribe cada registro de log en un DASD data set llamado active log, cuando este active log esta lleno, DB2 copia el contenido del active log a un DASD o cinta magnetica llamada archive log.

· Bootstrap Dataset (BSDS): el Bootstrap Dataset es un Vsam key-Dataset Secuencial(ksds) contiene información critica de DB2. Especificamente un inventario de todos los active y archive log data sets conocidos de DB2 ; y tambien los RBA que son puntos de chequeo que recuperan la información del log de una fecha determinada.

· Buffer Pools: Buffer pools, también se conoce como Virtual Buffer Pools, áreas de almacenamiento virtual usadas temporalmente para almacenar paginas de table Spaces o Indices. DB2 utiliza el Buffer Pools(BP0) para almacenar información en paginas de 4k.

· Communications database : (CDB) es automaticamente creada durante la instalación. DB2 usa el CDB para adquirir información sobre otras DB2 Distribuidas, o con estaciones remotas que soportan arquitectura de base de dato relacional distribuida.

· Resource Limit Facility Database : Contiene todas las limitaciones dadas por el Administrador de la base de datos para realizar sentencias SQL dinamicamente de Select, Update, Delete, Insert sobre las tablas. El administrador puede establecer un solo limite de autorización para todos los Usuarios o puede dar diferentes autorizaciones para cada uno de los Usuarios.

Page 10: MANUAL DB2.doc

CODIFICACION SENTENCIAS SQL EN UN PROGRAMA COBOL

Cuando un programa ejecuta una sentencia SQL, el programa necesita comunicarse con DB2. Cuando DB2 termina la ejecución devuelve un código de retorno que puede ser evaluado por el programa. Para comunicarse con DB2 se necesita :

1. Delimitar las sentencias2. Declarar las tablas, vistas y cursores a utilizar3. Declarar las variables de host que se van a utilizar con las sentencias SQL4. Declarar el área de comunicación (SQLCA) para manejar condiciones

excepcionales5. Codificar las sentencias

AREA DE COMUNICACIÓN

Un programa COBOL que contiene sentencias SQL debe incluir una o ambas de las siguientes variables :

· SQLCODE , declarada como PIC S9(9) BINARY, PIC S9(9) COMP-4 o PIC S9(9) COMP.

· SQLSTATE , declarada como PIC X(5)

· O en su lugar, SQLCA, la cual contiene ambas variables. Se puede codificar el área de comunicación directamente o usando la sentencia INCLUDE (únicamente si la opción de precompilación STDSQL es YES). La declaración es la siguiente :

EXEC SQL INCLUDE SQLCA END-EXEC.

DB2 actualiza el valor de SQLCODE y SQLSTATE después de ejecutar cada una de las sentencias SQL. El programa puede chequear el valor de estas variables para determinar si la sentencia se ejecutó satisfactoriamente. Todas las sentencias SQL en el programa deben estar dentro del alcance de la declaración de estas variables.

Page 11: MANUAL DB2.doc

SENTENCIAS SQL DENTRO DE UN PROGRAMA COBOL.

El sitio apropiado donde se deben incluir las sentencias SQL dentro de un programa COBOL, se muestra en la siguiente tabla :

SENTENCIA SQL SECCION DEL PROGRAMABEGIN DECLARE SECTIONEND DECLARE SECTION

WORKING STORAGE SECTION o LINKAGE SECTION

INCLUDE SQLCA WORKING STORAGE SECTION o LINKAGE SECTION

INCLUDE nombre-archivo PROCEDURE DIVISION o DATA DIVISION *DECLARE TABLEDECLARE CURSOR

DATA DIVISION o PROCEDURE DIVISION

Cualquier otra PROCEDURE DIVISION

La forma de codificar cualquier sentencia SQL en un programa es la siguiente :

EXEC SQL sentencia-SQLEND-EXEC

La forma de incluir líneas de comentario y de continuar cadenas en la siguiente línea es similar a la utilizada en la programación normal.

Declaración de tablas y vistas : El programa COBOL debe incluir la sentencia DECLARE TABLE para describir cada tabla y vista que el programa accese. No es necesaria la declaración, pero hacerlo tiene sus ventajas : Una de ellas es la documentación. Por ejemplo, la sentencia DECLARE especifica la estructura de la tabla o vista con la que se está trabajando con el tipo de dato de cada columna. Otra ventaja es que el precompilador de DB2 usa las declaraciones para asegurarse de que se ha usado correctamente los nombres de columnas y los tipos de datos en las sentencias. El precompilador de DB2 retorna en mensaje de warning cuando aquéllos no corresponden.

Se puede usar el generador de declaraciones (DCLGEN) para construir las sentencias DECLARE TABLE y entonces incluir los miembros generados en la DATA DIVISION.

Incluir código desde un miembro : Para incluir sentencias SQL o declaraciones de variables de host COBOL, desde un miembro de un archivo particionado, se debe usar la siguiente sentencia SQL en el código fuente donde se desea :

EXEC SQL INCLUDE nombre-miembro END-EXEC

Page 12: MANUAL DB2.doc

No se puede anidar sentencias SQL. No se debe usar verbos COBOL para incluir sentencias SQL o declaraciones de variables, o usar la sentencia SQL INCLUDE para incluir código relacionado con el preprocesador CICS. En general, ésta última solo debe usarse para código relacionado con SQL.

Márgenes : Se debe codificar las sentencias entre las columnas 12 y 72 inclusive. Si “EXEC SQL” comienza con antes de la margen izquierda especificada, el precompilador de DB2 no reconoce la sentencia SQL. La opción MARGINS del precompilador permite modificar los valores mencionados.

Nombres : Se puede usar cualquier nombre COBOL valido para una variable de host. No se deben usar nombres de entrada externos o nombres de plan de acceso que comiencen con ‘DSN’ y nombres de variables que comiencen son ‘SQL’. Estos nombres son reservados para DB2.

Números de secuencia : Las sentencias fuente que el precompilador de DB2 genera no incluyen números de secuencia.

Etiquetas : Se puede preceder sentencias SQL ejuecutables en la PROCEDURE DIVISION con un nombre o etiqueta.

USO DE VARIABLES DE HOST

Una variable de host es un ítem de dato declarado en el lenguaje para usar con una sentencia SQL. Con ellas se puede :

· Recuperar datos en la variable para usar en el programa· Colocar datos en la variable para insertar en una tabla o modificar el contenido

de una fila.· Usar los datos en la variable para evaluación con una cláusula WHERE O

HAVING.· Asignar el valor en la variable para un registro especial, tal como un CURRENT

SQLID y CURRENT DEGREE.· Insertar valores nulos en columnas que usan un indicador de variable host que

contiene un valor negativo.

Se deben declarar explícitamente en la WORKING-STORAGE SECTION o LINKAGE SECTION. Se puede preceder las sentencias COBOL que definen las variables de host con la sentencia BEGIN DECLARE SECTION, y terminar la definición con END DECLARE SECTION (esto es obligatorio cuando se usa la opción de precompilación STDSQL(YES)).

El símbolo “:” debe preceder a todas las variables de host en una sentencia SQL.

Page 13: MANUAL DB2.doc

Una sentencia SQL que utilice una variable de host debe estar dentro del alcance de la sentencia que declara la variable.

El siguiente es un ejemplo de utilización de variables de host para recuperar datos :

EXEC SQLSELECT NOEMP, NOMBRE, DEPTO

INTO :VNOEMP, :VNOMBRE, :VDEPTOFROM TABLA_EMPLWHERE NOEMP = :VEMPID

END-EXEC.

Junto con las variables se pueden usar indicadores. Estos son enteros pequeños que pueden ser usados para :

· Indicar si los valores de las variables de host asociadas son nulos· Verificar que el valor de una cadena de caracteres recuperada no ha sido

truncado.· Insertar valores nulos desde variables de host en las columnas de las tablas.

Esto se logra colocando el valor negativo -1 en el indicador de la variable que se utilice en la sentencia UPDATE o INSERT .

La manera de utilizar los indicadores se ilustra en el siguiente ejemplo:

EXEC SQL SELECT NOEMP, NOMBRE, TELEF INTO :VNOEMP,  :VNOMBRE,  :VTELEF :INDNULL FROM TABLA_EMPL WHERE NOEMP = :VEMPIDEND-EXEC.

EXEC SQL SELECT NOEMP, NOMBRE, TELEF INTO :VNOEMP,   :VNOMBRE INDICATOR :INDTRUNC,  :VTELEF FROM TABLA_EMPL WHERE NOEMP = :VEMPIDEND-EXEC.

Page 14: MANUAL DB2.doc

EQUIVALENCIA DE TIPOS DE DATOS SQL Y COBOL

La siguiente tabla ayuda a definir las variables de host que recibirán la salida de la base de datos. Se puede usar la tabla para determinar el tipo de dato COBOL que es equivalente a un tipo de dato SQL dado.

TIPO DATO SQL TIPO DATO COBOL NOTASSMALLINT S9(4) COMP-4 o BINAYRYINTEGER S9(9) COMP-4 o BINAYRYDECIMAL(p,s) oNUMERIC(p,s)

Si p<19:S9(p-s)V9(s) COMP-3

p - precisión; s - escalaSi p>18 no hay un equivalente exacto, usar COMP-2

REAL o FLOAT(n) COMP-1 1 £ n £ 21DOUBLE PRECISION, DOUBLE o FLOAT(n)

COMP-2 22 £ n £ 53

CHAR(n) cadena de caracteres de longitud fija 1 £ n £ 254VARCHAR(n) cadena de caracteres de longitud

variableGRAPHIC(n) cadena gráfica de longitud fija n - caracteres de 2 bytes

1 £ n £ 127VARGRAPHIC(n) cadena gráfica de longitud variable n - caracteres de 2 bytesDATE cadena de caracteres de longitud fija n n ³ 10TIME cadena de caracteres de longitud fija n n ³ 6

n ³ 8 - para incluir segundosTIMESTAMP cadena de caracteres de longitud fija n ³ 19

n =26 - para incluir microsegundos

Overflow: El overflow puede producirse al tratar de recuperar una columna cuyo tipo de datos es INTEGER en una variable PIC S9(4) y el valor de la columna es más grande que 32767 o más pequeño que -32768. Se obtiene entonces un mensaje de warning o de error, dependiendo de si usa o no una variable indicador.

Truncamieno: Al recuperar el valor de una columna CHAR en una variable cuya longitud es más pequeña, la parte de más a la derecha es truncada. La recuperación del valor de una columna de punto flotante de doble precisión o decimal en un variable PIC S9(8) COMP remueve cualquier parte fraccional del valor.

De manera semejante, la recuperación de un número DECIMAL DB2 en una variable equivalente COBOL puede truncar el valor. Esto puede pasar porque un valor DECIMAL DB2 puede tener hasta 31 dígitos y un número decimal COBOL puede sólo tener hasta 18 dígitos.

Page 15: MANUAL DB2.doc

Compatibilidad de tipos de dato SQL y COBOL

Las variables de host usadas en las sentencias SQL debe ser de un tipo compatible con las columnas con las cuales se intenta usar:· Los tipos de datos numéricos son compatibles con cada uno de los otros: Una

columna SMALLINT, INTEGER, DECIMAL, REAL o DOUBLE PRECISION es compatible con una variable host COBOL de PICTURE S9(4), PICTURE S9(9), COMP-3, COMP-1, COMP-4, o COMP-2, BINARY o PACKED DECIMAL.

· Los tipos de datos de caracter son compatibles con cada uno de los otros: Una columna CHAR o VARCHAR es compatible con una variable COBOL caracter de longitud fija o longitud variable.

· Tipos de datos gráfico son compatibles con cada uno de los otros:.· Tipos de datos fecha y hora son compatibles con variables de host tipo

caracter.

Cuando sea necesario, DB2 automáticamente convierte una cadena de longitud fija a una cadena de longitud variable, o viceversa.

Indicadores

Los indicadores son enteros de 2 bytes (PIC S9(4) USAGE BINARY). La manera en que se declaran es similar a la declaración de variables host y en el orden en que se considere correcto. Se pueden definir los indicadores como una estructura o como un arreglo utilizando la cláusula OCCURS.

Page 16: MANUAL DB2.doc

PLANNING PARA PRECOMPILAR Y BIND

Los programas de aplicación DB2 deben pasar por un proceso de precompilación para que se puedan transormar las sentencias SQL en un lenguaje reconocido por el compilador o assembler. El precompilador entonces:

· Reemplaza las sentencias SQL de los programas en código compilable· Crea un módulo de requerimento para la base de datos (DBRM), el cual

comunica los requerimentos SQL con DB2 durante el proceso de bind.

Después de precompilar el programa fuente, se crea un módulo de carga (load module), posiblemente uno o más paquetes, y un plan de aplicación. No importa cuál se haga primero. La creación de un módulo de carga es similar a la compilación y la linkedición (link-editing) de cualquier aplicación sin sentencias SQL. La creación de un paquete o un plan de aplicación, un proceso propio de DB2, implica hacer bind de un o más DBRMs.

Planeación para bind

El proceso de bind consiste en encontrar antes de la ejecución del programa el camino de acceso a los datos, que DB2 utilizará para cada una de las sentencias SQL que se encuentran dentro del programa, con el objetivo de no repetir este procedimiento varias veces en tiempo de ejecución (lo cual consume mucho recurso del sistema). De esta manera el camino de acceso es encontrado en tiempo de BIND o REBIND.

Dependiendo del diseño, exl bind se puede realizar a todos los DBRMs en una sola operación creando únicamente un plan de aplicación sencillo, o a alguno o todos los DBRMs en operaciones de packages separados.

El bind de un plan se debe realizar antes de que la aplicación corra. Los paquetes y planes se bloquean cuando se hace el bind.

Formas de hacer el bind a los DBRMs:

· Bind con una lista de paquetes (package list)· Fácil mantenimiento· Desarrollo incremental del programa· Manejo de versiones

· Bind para todos los DBRMs de un plan· Si se modifica uno se tiene que hacer bind a todo el plan

· Mezcla de los dos

Page 17: MANUAL DB2.doc

PROGRAMAFUENTE(dsname)

PRECOMPILADORDB2

CICSIN(outname)

DBRM(outnmae)DBRM

(outname)

Catálogo DB2:PLAN

CICS commandTraslator

Compilador

Programaobjeto

Linkedición

Módulocargable

BIND PACKAGE(DSN

subcommand

BIND PLAN(DSN

subcommand)

Catálogo DB2:PACKAGE

Programafuente

modificado

Si el programano es CICS

PROCESO DE PREPARACION DEPROGRAMAS.Se necesita DB2 para hacer bind y para correrel programa pero no para precompilar.

Page 18: MANUAL DB2.doc

Cambios que requieren bind o rebind

Cuando se cambia el programa probablemente se invalide el package para un plan entero (También puede quedar inválido cuando se ha borrado algún índice que sea usado por el camino de acceso). Algunos cambios necesitan una operación bind pero otros sólo una operación rebind:

CAMBIO HECHO ACCION REQUERIDADrop o recreación de una tabla, índice u otro objeto

DB2 hace automáticamente el rebind en la siguiente corrida

Revocar la autorización para usar un objeto

DB2 hace automáticamente el rebind en la siguiente corrida

Se corre RUNSTATS Se hace necesario un REBINDAdicionar un índice Se hace necesario un REBINDCambio de las opciones de bind Rebind, aunque puede ser necesario BIND con

ACTION(REPLACE) si la opción no está disponible para REBINDCambios hechos en el programa y sentencias SQL

Precompilación, compilación y encadenamiento del programa. BIND con ACTION(REPLACE).

Page 19: MANUAL DB2.doc

CONCURRENCIA

La concurrencia es la posibilidad de que uno o más procesos o aplicaciones puedan acceder a los mismos datos casi al mismo tiempo. Debe ser controlada para prevenir: pérdida de actualizaciones, acceso a datos a los que no se les ha hecho commit (uncommitted data) y lecturas diferentes del mismo registro.

Para prevenir la ocurrencia de estas situaciones, a menos que estén permitidas específicamente, DB2 usa locks para controlar la concurrencia. Un lock se asocia como un recurso de DB2 a una aplicación de tal manera que afecta a otros procesos que pueden accesar el mismo recurso. El proceso asociado con el recurso es llamado “hold” o “own” (propietario) del loock. Así, DB2 no permite a ningún proceso, acceder a los datos que han sido cambiados pero aún no han sido cometidos (committed).

El bloqueo (lock) por DB2 produce algunos efectos que se desean minimizar:

· Suspensión: Un proceso es suspendido temporalmente cuando requiere el recurso de bloqueo que mantiene otro proceso. Este requerimento es encolado.

· Timeout: Se dice que un proceso está en timeout cuando ha sido terminado porque ha sido suspendido durante mucho tiempo. DB2 termina el proceso y retorna el código SQLCODE = -911 o -913.

· Deadlock: Cuando dos o más procesos cada uno con recurso de bloqueo que el otro necesita y sin el cual ellos no pueden proceder. DB2 espera a que uno de los procesos entre en timeout para que el otro prosiga.

Page 20: MANUAL DB2.doc

GESTION DE SISTEMAS DE BASES DE DATOS RELACIONALES

1. DEFINICION DE DATOS (DDL)

1.1 SENTENCIA CREATE TABLE.

El DB2 utiliza la sentencia CREATE <objeto DB2>, para crear un “objeto” dentro del sistema. Los objetos que se crean con mayor frecuencia son tablas e índices.

La sentencia CREATE TABLE realiza lo siguiente:· Establece una nueva tabla y le asigna un nombre· Asigna un nombre a todas las columnas de la tabla· Especifica el tipo de datos de cada columna· Especifica la secuencia u orden de columnas por defecto· Especifica qué columnas no pueden aceptar valores nulos· Especifica la clave primaria· Especifica las claves secundarias· Actualizar el catálogo del sistema

La siguiente es la estructura de la sentencia CREATE TABLE:

CREATE TABLE nombre-de-tablaNom-col1 tipo-datos [NOT NULL [WITH DEFAULT]]Nom-col2 tipo-datos [NOT NULL [WITH DEFAULT]]...Nom-coln tipo-datos [NOT NULL [WITH DEFAULT]]

Cláusula clave primaria:PRIMARY KEY (columna 1 [columna 2,..., columna N])

Cláusula clave secundaria:FOREIGN KEY (columna 1 [columna 2,..., columna N])REFERENCES (nombre-de-tabla)[ON DELETE {RESTRICT, SET NULL, CASCADE} ]

Page 21: MANUAL DB2.doc

El siguiente es un ejemplo de utilización de la sentencia:

CREATE TABLE CURSO(CON CHAR (3) NOT NULL, CNOMBRE VARCHAR(22) NOT NULL WITH DEFAULT, CDESCP VARCHAR(25) NOT NULL WITH DEFAULT, CRED SMALLINT, CTARIFA DECIMAL (5,2), CDEPT CHAR (4) NOT NULL,

PRIMARY KEY (CON),FOREIGN KEY (CDEPT) REFERENCES DEPTO (ON DELETE RESTRICT)

En el ejemplo, se hace referencia a la tabla de cursos que pueden dictarse en una universidad. DEPTO es el nombre de la tabla de departamentos.

TIPOS DE DATOS EN SQL.

Page 22: MANUAL DB2.doc

NOMBRE DESCRIPCIONCHAR (n) oCHARACTER (n)

Cadenas de caracteres de longitud fija representadas usando el código EBCDIC. n puede ir de 1 a 254 y su valor por defecto es 1.

VARCHAR (n) Cadenas de longitud variable, representadas usando EBCDIC. n es mayor que 0 y menor que un número determinado por el tamaño de página instalado (normalmente 4 K).

LONG VARCHAR Las cadenas de caracteres de longitud variable, representadas usando EBCDIC. La longitud máxima la determina el sistema.

GRAPHIC (n) Las cadenas de caracteres de longitud fija que contienen datos DBCS. Aquí, n es el rango de 1 a 127, e indica el número de caracteres en la cadena.

VARGRAPHIC (n) Cadenas de longitud variable que contienen datos DBCS. Esta vez, n es mayor que 0, y menor que un número determinado por el tamaño de página de la instalación.

LONG VARGRAPHIC

Cadenas de gráficos de longitud variable que contienen datos DBCS. La longitud máxima está determinada por el sistema.

RANGO DE VALORESSMALLINT Entero binario de 16 bits. -32768 hasta +32768

INTEGER o INT Entero binario de 32 bits -2147483648 hasta +2147483647

FLOAT (n) o REAL Número de punto flotante de precisión simple n en el rango de 1 a 21. Si n se omite, la columna tiene precisión doble. El número se define usando 32 bits.

Rango de magnitud:5.4E-79 a 7.2E+75

FLOAT (n) o DOUBLE PRECISION

Número de punto flotante n está en el rango de 22 a 53 (el valor por defecto es 53). El número se define usando 64 bits.

Rango de magnitud es:5.4E-79 a 7.2E +75

DECIMAL (p,s) o Número decimal con -999999999999999

Page 23: MANUAL DB2.doc

DEC (p,s) precisión p y escala s. La precisión es el número total de dígitos y debe estar entre 1 y 15. La escala es el número de dígitos en la parte fraccional y debe estar entre 0 y el número de precisión. Si se omite s, entonces p puede omitirse y en este caso se asume un valor de 5.

a+999999999999999

Page 24: MANUAL DB2.doc

1.3 SENTENCIA CREATE INDEX.

Se usa para crear un objeto índice en la base de datos.

Algunas de las ventajas de los índices radican en que pueden aumentar la eficacia en diversas circunstancias. Estas son:

Acceso directo a un registro especificado evitando la exploración para localizar registros identificados por una cláusula WHERE.Ordenación: El sistema puede usar un índice para recuperar registros de una tabla en secuencia. En ausencia del índice, el sistema inicia una rutina de ordenación interna que puede ser costosa, especialmente para un gran número de registros. Las versiones actuales de DB2, considerarán el uso de un índice, siempre que la sentencia SELECT contenga cualquiera de las siguientes palabras clave: ORDER BY, GROUP BY, DISTINCT o UNION.Los índices pueden reducir el costo de una operación join.

No hay límite en el número de índices que se pueden crear para una tabla dada, sin embargo, existe un costo asociado con cada índice pues conlleva utilización de espacio en disco y demora en el proceso de actualización.

El optimizador puede decidir no usar un índice en casos tales como aquél cuando la tabla es muy pequeña o cuando el índice no es lo suficientemente selectivo, casos en los cuales es mejor explorar la tabla y extraer los registros deseados.

La estructura general de la sentencia CREATE INDEX es:

Page 25: MANUAL DB2.doc

CREATE [UNIQUE] INDEX nombre-indiceON nombre-tabla

(nombre-columna1 [ASC/DESC,] nombre-columna2 [ASC/DESC,]

.

.

. nombre-columnaN [ASC/DESC])

[CLUSTER]

SENTENCIA ALTER.La sentencia ALTER puede usarse para añadir una o más columnas nuevas a una tabla existente. La estructura de la sentencia es:

ALTER nombre tablaADD nombre-columna1 tipo-dato,ADD nombre-columna2 tipo-dato,

.

.

.ADD nombre-columnaN tipo-dato;

Page 26: MANUAL DB2.doc

2. SELECCIÓN DE DATOS DE UNA TABLA SIMPLE.

2.1 LA SENTENCIA SELECT

Esta sentencia se utiliza para recuperar datos de la base de datos, organizados en una tabla resultado o consulta. Su estructura general es la siguiente:

SELECT nombre-columna1,nombre-columna2,...,nombre-columnaNFROM nombre tabla[WHERE condición]

La consulta se formula de las siguientes formas:

Identificando la tabla que contiene los datos deseados. El nombre de tabla se coloca en la cláusula FROM.Identificando las columnas que van a ser visualizadas. Los nombres de columna se colocan en la cláusula SELECT (“SELECT * “ visualizará todas las columnas).Codificando una condición en la cláusula WHERE que especifica los criterios de selección de filas. Su ausencia implica que todas las filas serán seleccionadas.Si utilizamos la palabra clave DISTINCT (SELECT DISTINCT) se eliminarán del resultado las filas duplicadas.

ORDENACION DE LA TABLA RESULTADO

La tabla resultado puede ser ordenada en cualquier columna que pueda ser denominada por el nombre o por el número de columna. La secuencia de ordenación por defecto es ascendente (ASC). Una secuencia descendente puede ser establecida mediante el uso del parámetro DESC. La estructura de la sentencia quedaría entonces:

SELECT nombre-columna1,nombre-columna2,...,nombre-columnaNFROM nombre tabla[WHERE condición][ORDER BY nombre-de-columna/num-de-columna] [ASC/DESC]

La cláusula ORDER BY requiere, normalmente, que el sistema realice más trabajo. Este podría ser más significativo si el número de columnas es grande.

Page 27: MANUAL DB2.doc

CONECTORES BOOLEANOS AND-OR-NOT.

La siguiente es la forma de utilización de los conectores booleanos AND, OR y NOT en las condiciones de las consultas:

WHERE cond1 AND cond2 à Una fila determinada sólo es seleccionada si las dos condiciones cond1 y cond2 se cumplen.

WHERE cond1 OR cond2 à Una fila determinada es seleccionada si una o ambas condiciones se cumplen.

WHERE NOT cond à Una fila determinada se selecciona si la condición cond se cumple.

Cuando una cláusula compleja WHERE contenga más de dos condiciones individuales, es recomendable usar paréntesis para hacer más explícito el orden de evaluación. En caso contrario, se aplica la jerarquía tradicional de evaluación. Esto significa que los NOT se evalúan primero, seguidos de los AND y después los OR.

Existen además otros dos operadores bastante utilizados; ellos son BETWEEN e IN.

WHERE col BETWEEN val1 AND val2 à Una fila determinada se selecciona si su valor de columna está dentro del rango especificado por val1 y val2.

WHERE col NOT BETWEEN val1 AND val2 à Una fila determinada se selecciona si su valor de columna no está dentro del rango especificado por val1 y val2.

WHERE col IN (val1, val2, ..., valn) à Una fila determinada se selecciona si su valor de columna es igual a cualquiera de los valores especificados.

WHERE col NOT IN (val1, val2, ..., valn) à Una fila determinada se selecciona si su valor de columna NO es igual a ninguno de los valores especificados.

2.4 COINCIDENCIA DE MODELOS.

La cláusula WHERE puede contener la palabra clave LIKE, para buscar un modelo en una cadena de caracteres. El formato general es:

WHERE nombre-columna [NOT] LIKE modelo

Page 28: MANUAL DB2.doc

El modelo se encierra entre comillas y puede contener dos caracteres comodín especiales. El signo “%” representa cualquier cadena de cualquier longitud. El símbolo de subrayado “_” representa exactamente un carácter.

2.5 EXPRESIONES ARITMETICAS.

Las expresiones tienen una sintaxis similar a las expresiones algebraicas, descritas en un libro típico de álgebra. Sin embargo, en el SQL hay que tener cuidado con el tipo de datos de las columnas, ya que pueden afectar la precisión decimal del resultado y causar, probablemente un desbordamiento.

Se incluyen en la sentencia SELECT en el conjunto de columnas, de la siguiente manera:

SELECT nombre-columna1,....,[expr-aritmetica1],.... FROM ...

La “expr-aritmetica1” puede contener operaciones de columnas con valores fijos o entre columnas. Cada expresión aritmética debe estar separada por comas lo cual SELECT generará una columna en la salida por cada una de ellas.

Siempre que el sistema encuentre una expresión aritmética con operandos de diferentes tipos de datos, debe determinar el tipo de datos del resultado del cálculo. Lo hace de la siguiente manera:

SMALLINT INTEGER DECIMALSMALLINT INTEGER INTEGER DECIMALINTEGER INTEGER INTEGER DECIMALDECIMAL DECIMAL DECIMAL DECIMAL

Page 29: MANUAL DB2.doc

El resultado de un cálculo nunca tiene el tipo de datos SMALLINT. Siempre que aparezcan dos enteros en un cálculo, el resultado será un tipo entero.

Siempre que mezclemos valores enteros (SMALLINT o INTEGER) con valores DECIMALES, el resultado será del tipo DECIMAL. Su precisión se limita a 15 dígitos.

Ya que en una expresión aritmética pueden ir involucrados más de un operador aritmético, es necesario definir la secuencia con la que se van a realizar las operaciones. La jerarquía de los operadores aritméticos se define como sigue:

Las operaciones de multiplicación y división se evalúan, primero, en orden de izquierda a derecha de la expresión.A continuación, se evalúan las operaciones de suma y la resta de izquierda a derecha de la expresión.El orden de evaluación puede modificarse encerrando una expresión, o parte de ella, entre paréntesis. Las expresiones que se incluyen entre paréntesis se evalúan primero, de acuerdo al orden de operadores que acabamos de mencionar. Después de la evaluación de las expresiones entre paréntesis, se evalúan los operadores que aparecen por fuera.

Condiciones de desbordamiento (Overflow)

Puede suceder que el valor de una operación exceda el rango de valores permitidos para un tipo de datos. Cuando ocurre tal situación, se produce una “condición de desbordamiento”. El sistema responde con un mensaje de aviso que informa de lo ocurrido. Hay que tener en cuenta que el resultado se pierde, ya que no puede ser representado.

Se puede evitar, normalmente, haciendo que el sistema cambie el tipo de datos de la representación interna del resultado. Por ejemplo, si se van a manejar dos enteros de valor grande, de forma que vaya a producir un resultado más grande que el rango de valores permitido para un valor entero, podemos convertir el resultado en un número decimal. El resultado está determinado, dependiendo de los tipos de datos de los operandos. Para influir en el resultado, es necesario, simplemente, incluir un operando decimal en la expresión aritmética, de forma que no afecte al valor del resultado. Esto se puede lograr multiplicando por 1.0 o sumando 0.0.

Condiciones calculadas

Page 30: MANUAL DB2.doc

Las expresiones aritméticas también pueden darse en una cláusula WHERE. El objetivo es obtener una determinada fila visualizada, sólo si cumple los criterios determinados por algún cálculo.

2.6 FUNCIONES INCORPORADAS.

Las funciones predefinidas suministran al usuario de SQL ayudas de cálculo y diferentes herramientas para la manipulación de los datos. Se pueden dividir en dos categorías:

Funciones de columna, en las que se opera sobre un grupo de filas para obtener como resultado un único valor.

Funciones escalares, que operan sobre una única fila. Se pueden subdividir en funciones de conversión de tipo, funciones de tratamiento de caracteres y funciones de tratamiento de datos de tipo fecha y hora.

La siguiente tabla muestra todas las funciones:

FUNCIONES DE COLUMNA

FUNCIONES ESCALARES

CONVERSION DE TIPO

TRATAMIENTO DE CARÁCTER.

TRATAMIENTO DE FEC Y HORA

MIN DECIMAL LENGTH DATEMAX INTEGER SUBSTR DAY – DAYSCOUNT FLOAT MONTHSUM DIGITS YEARAVG HEX TIME

TIMESTAMPMICROSECONDSECONDMINUTEHOURCHAR

Page 31: MANUAL DB2.doc

3. MANIPULACION DE DATOS

La manipulación de datos del SQL, que se usan para almacenar registros en una tabla y, posteriormente, modificar y borrar estos registros. Estas sentencias son INSERT, UPDATE y DELETE.

3.1 LA SENTENCIA INSERT

La sentencia INSERT se utiliza para insertar un nuevo dato en una tabla o para insertar datos existentes de una tabla en una o en otras tablas. La estructura de la sentencia es:

Formato 1:

INSERT INTO nombre-tabla [ (nombre-columnas)]VALUES (constante valor /NULL/registro-especial)

Formato 2:

Nombre-tabla [(nombres –columnas)]Sentencia -subselect

3.2 LA SENTENCIA UPDATE

La sentencia UPDATE puede usarse para cambiar cualquier valor en una tabla. Debe contener una cláusula que identifique que columnas van a ser modificadas. Y puede incluir una cláusula WHERE para identificar los registros que se van a modificar. La sentencia tiene la siguiente estructura.

Page 32: MANUAL DB2.doc
Page 33: MANUAL DB2.doc

UPDATE nombre –tablaSET nombre-columna-1 = expresión-1, nombre-columna-2 = expresión-2, . .

nombre-columna-n = expresión-n [WHERE condición de búsqueda]

Page 34: MANUAL DB2.doc

4. MAS, ACERCA DE SQL

4.1 SENTENCIA CREATE VIEW

Como se había comentado en temas anteriores SQL permite la creación de vistas, con los propósitos de facilitar a los usuarios acceder a alguna información de la tabla y, la seguridad de la misma. La estructura de la sentencia es la siguiente.

Page 35: MANUAL DB2.doc

CREATE VIEW nombre-vista (col1,col2,.....)

AS SELECT_____________________________

FROM ______________________________

WHERE____________________________

Resumen de restricciones de Vista

a) La sentencia CRATE VIEW no puede contener ORDER BY o UNION.

b) Una vista es denominada vista “sólo de lectura”, lo que significa que las sentencias INSERT y DELETE no pueden aplicarse a la vista, si su definición contiene alguna de estas características:

c) Una columna de funciones constructoras (por ejemplo SUM, MAX, etc).

d) DISTINCT.e) GROUP BY.f) HAVING.g) Varias tablas referenciadas en la cláusula FROM.

h) Cuando una vista contiene una columna de valores derivados de una columna de funciones constructoras, una consulta no puede referenciar la columna derivada en una cláusula WHERE o HAVING.

Page 36: MANUAL DB2.doc

5. OPERACION JOIN

La operación join permite que una consulta especifique la fusión (merging) de columnas de más de una tabla, y relacione los valores que encuentre en las columnas de cada tabla.

El JOIN DE DOS TABLAS es la concatenación de filas de las dos tablas, en donde valores de una columna de la primera tabla coinciden con valores de una columna de la segunda tabla. El resultado de la operación join es una nueva tabla que tiene una fila por cada valor coincidente que resulte de las dos tablas originales. Las tablas originales permanecen invariables.

Ejemplo: Suponer que las columnas join son C3 y CA

TABLA 1 TABLA 2C1 C2 C3 CA CBA AAA 10 35 RB BBB 45 10 SC CCC 55 65 TD DDD 20 20 UE EEE 20 90 VF FFF 90 90 WG GGG 15 75 XH HHH 90 90 Y

35 Z

Generalmente, una clave ajena en una tabla, y su correspondiente clave primaria en otra tabla, son especificadas como las columnas join. Sinembargo, como muestra el ejemplo, esto no es necesario. Cualquier columna con tipos de datos comparables se puede especificar como columna join.

La sentencia select que produciría el resultado join es la siguiente:SELECT * FROM TABLA1, TABLA2 WHERE C3 = CA;

TABLA RESULTADOC1 C2 C3 CA CBA AAA 10 10 SD DDD 20 20 UE EEE 20 20 UF FFF 90 90 VF FFF 90 90 WF FFF 90 90 YH HHH 90 90 VH HHH 90 90 WH HHH 90 90 Y

Page 37: MANUAL DB2.doc

Se debe tener en cuenta que los valores nulos de las columnas que se unen no coinciden con ningún otro valor, inclusive con otro valor nulo, así que no se tendrán en cuenta en la tabla resultado.

Join de una tabla consigo misma. La técnica SQL implica la utilización de un “alias” para un nombre de tabla. La estructura general es la siguiente:

SELECT <especif de columnas tabla >FROM nombre-tabla alias1, nombre-tabla alias2WHERE alias1.nombre-columna1 = alias2.nombre-columna1

Theta join. SQL permite que sea formulada una condición join con cualquiera de los operandos estándar de comparación. El término THETA-JOIN se usa para indicar esta posibilidad más general en donde THETA representa un operador de comparación dado.

SELECT <especif de columnas tabla 1>, <especif de columnas tabla 2>FROM nombre-tabla1, nombre-tabla2WHERE nombre-columna1 <concatenador theta> nombre-columna2

Page 38: MANUAL DB2.doc

6. SUBCONSULTAS.

Se refiere a la técnica de anidar una sentencia SELECT dentro de otra. Estos se utilizan para recuperar información de una tabla a partir d los resultado obtenidos de otra (o de la misma) que a priori son desconocidos.

De forma simplificada, la sintaxis de los select anidados se puede expresar como sigue:

SELECT [DISTINCT] <especif de columnas>FROM nombre-tabla1WHERE nombre-columna1 <concatenador> (SELECT [DISTINCT]

<nombre-columna2 FROM nombre-tabla2WHERE condicion2

El tipo de la columna 1 de la tabla 1 debe ser compatible con el tipo de la columna 2 de la tabla 2.

Se pueden anidar selects hasta un número de 5 niveles. El SGBDR irá resolviendo las select siempre desde la más interna hasta la más externa.