Sie sind auf Seite 1von 49

SQL

Structured Query Lenguage DB2

1 14/04/2012

Tipos de SQL

Tres tipos:
Interactivo Embebido

Esttico Dinmico

DDL (Data Definition Language) DML (Data Manipulation Languaje)

Pg: 2
14/04/2012

Estructuras de datos DB2

Esquemas:

Claves:

Funciones Procedimientos Triggers Base Auxiliares Temporales

Tablas:

nicas Primarias Extranjeras Parent Segmentado Particionado

Table spaces

ndices Grupos de almacenamiento

Index spaces DataBase Sinnimos


14/04/2012

Pg: 3

Estructuras del sistema

Catlogo

Tablas Columnas Autorizaciones Active Archive

Logs

Buffer pool

Pg: 4

14/04/2012

Reglas de negocio
Integridad referencial Restricciones de integridad referencial Restricciones Triggers:

Insert Delete Update

Pg: 5

14/04/2012

Identificadores
SQL Host

Pg: 6

14/04/2012

Tipos de datos
Columnas Constantes Expresiones Funciones Variables Host Registros especiales

Pg: 7

14/04/2012

Tipos de columnas

Carcter
Fijos

Decimales

(Char) Variables (Varchar)

Numricos
Enteros

Precision sencilla (Real) Doble precisin (Double Float) Decimal (Decimal(e,d)) (Numeric(e,d))

Smallint Integer

Fecha
Fecha

Pg: 8

Nulos (Null)

(Date) Hora (Time) Ambos (Timestamp)


14/04/2012

Funciones

Built-in (Ver manual referencia)


Columna Escalares

Definidas por el usuario

Pg: 9

14/04/2012

Predicados

Expresin operador expresin


Operador puede ser:
=,

<>, >,<,>=,<=, Exists, In, Like

Between, Null

Pg: 10

14/04/2012

Sentencias SQL

SELECT
DELETE UPDATE INSERT CURSOR SET
14/04/2012

Pg: 11

Select
SELECT ALL|DISTINCT *|columna, FROM tabla|view alias,

Pg: 12

14/04/2012

EJERCICIOS I

Visualizar las filas de la tabla PERSONAL Visualizar las filas de la tabla DEPARTAMENTOS Visualizar las filas de ambas tablas a la vez Visualizar el valor de PUESTO de la tabla personal para todas las filas Visualizar el valor de PUESTO de forma que slo se muestren los valores que sean distintos

Pg: 13

14/04/2012

Where
WHERE predicado AND|OR predicado
Pueden utilizarse parntesis para establecer el orden de evaluacin de los predicados Se aplican a las sentencias SELECT, UPDATE Y DELETE

Pg: 14

14/04/2012

EJERCICIOS II

Visualizar el personal del departamento 20 Visualizar los vendedores (SALES) del departamento 38 Visualizar las personas con una antigedad > 9 aos Visualizar las personas con antigedad igual a 3, 5 7 aos, Visualizar las personas con antigedad entre 3 y 7 aos Visualizar las personas cuyo nombre comience por G Visualizar las personas cuyo nombre termine por S Visualizar las personas cuyo nombre contenga AR Visualizar las personas con nombre de 6 car. de longitud Visualizar los vendedores (SALES) del oeste (WESTERN)

Pg: 15

14/04/2012

Join (Ejercicios III)


Incluir en la tabla de personal un nuevo vendedor en el departamento 99 Realizar un JOIN entre la tabla de personal y la tabla de departamentos Incluir en la tabla de DEPARTAMENTOS un nuevo DEPARTAMENTO (98) con el GESTOR 999 Realizar un JOIN entre la tabla de personal y la tabla de departamentos

Pg: 16
14/04/2012

FUNCIONES DE COLUMNA
AVG COUNT y COUNT_BIG MAX y MIN SUM

Pg: 17

14/04/2012

FUNCIONES DE COLUMNA II
AVG(columna)

Obtiene la media de los valores para la columna indicada.

SELECT AVG(SALARIO) FROM P390.PERSONAL

Pg: 18

14/04/2012

FUNCIONES DE COLUMNA III


COUNT(columna) COUNT_BIG (columna)

Obtiene el nmero de registros que hemos encontrado como resultado de la query.

SELECT * FROM P390.PERSONAL WHERE PUESTO = SALES


NOTA: La diferencia entre COUNT Y COUNT_BIG es que el resultado de este ltimo puede ser mayor que un entero.

Pg: 19

14/04/2012

FUNCIONES DE COLUMNA IV
MAX(columna) MIN(columna)

Obtienen el valor mximo y mnimo respectivamente de la columna indicada.

SELECT MAX(SALARIO) FROM P390.PERSONAL SELECT MIN(SALARIO) FROM P390.PERSONAL


Pg: 20
14/04/2012

FUNCIONES DE COLUMNA V
SUM(columna)

Obtiene la suma de todos los valores de la columna. La columna debe ser numrica.

SELECT SUM(SALARIO) FROM P390.PERSONAL

Pg: 21

14/04/2012

GROUP BY (Ejercicios IV)


GROUP BY columna,

Obtener la suma de los salarios de cada uno de los departamentos Contar el numero de personas, agrupadas por el puesto que ocupan Obtener la media de las comisiones, el total de las comisiones y el nmero de personas de cada uno de los departamentos Obtener la media del gasto total (salario + comisiones), el total del gasto total y el nmero de personas de cada uno de los departamentos
14/04/2012

Pg: 22

Having (Ejercicios V)
HAVING predicado AND|OR predicado

Obtener la media del gasto total (salario + comisiones), el total del gasto total y el nmero de personas de cada uno de los departamentos, para los departamentos de ms de 1 persona Obtener la media del gasto total (salario + comisiones), el total del gasto total y el nmero de personas de cada uno de los departamentos, para los departamentos con gasto medio mayor de 1500
14/04/2012

Pg: 23

UNION (Ejercicios VI)


SELECT UNION | UNION ALL SELECT

Obtener, en la misma lista de salida, los nombres de las personas con un salario > 15.000 y los nombres de los departamentos del oeste WESTERN

Pg: 24

14/04/2012

Update
UPDATE tabla|view
SET columna = expresion|literal|columna, columna = expresion|literal|columna, SET columna = expresion|literal|columna

WHERE

Pg: 25

14/04/2012

EJERCICIOS VII
Modificar la antigedad de GRAHAM a 15 aos Modificar el salario de GRAHAM aadindole 100 $ Aumentar las comisiones de todos los vendedores (SALES) sumndoles un 10% Aumentar 1000 $ a la comisin de las personas de los departamentos del oeste (WESTERN)

Pg: 26
14/04/2012

Delete
DELETE FROM tabla|view WHERE

Pg: 27

14/04/2012

EJERCICIOS VIII
Copiar la tabla de personal con el nombre PERSONAL_OLD Eliminar la fila correspondiente a GRAHAM Borrar las filas de las personas de los departamentos del oeste (WESTERN)

Pg: 28

14/04/2012

Insert
INSERT INTO tabla|view [(columna, columna )] VALUES( expresion, expresion ) INSERT INTO tabla|view [(columna, columna )] SELECT

Pg: 29

14/04/2012

EJERCICIOS IX

Insertar en la tabla de personal una fila con los siguientes valores:


Id = 991 Nombre = Martn Dep = 10 Puesto = SALES Anos = 2 Salario = 1000 Comisin = 200

Crear la tabla PERSONAL_NEW vacia Insertar las filas de la tabla PERSONAL en PERSONAL_NEW Insertar en la tabla de personal una fila con los siguientes valores:

Id = 992

Visualizar las filas de PERSONAL cuyo NOMBRE sea nulo Visualizar las filas de PERSONAL cuyo NOMBRE sea no nulo
14/04/2012

Pg: 30

Privilegios
GRANT { ALL [PRIVILEGES] | (1) } ON TABLE tabla o view, ... TO { public | usuario, ...} WITH GRANT OPTION (1) ALTER, DELETE, INDEX, INSERT, SELECT, TRIGGERS, REFERENCES (columna, ...), UPDATE (columna, ...),
REVOKE { ALL [PRIVILEGES] | (2) } ON TABLE tabla o view, ... FROM { public | usuario, ...} (2) ALTER, DELETE, INDEX, INSERT, SELECT, TRIGGERS, REFERENCES, UPDATE
Pg: 31
14/04/2012

Proceso de compilacin
Informe
Fuente
Precompilador Precompilador

DBRM

Informe Compilador
Fuente traducido

BIND

Compilador Informe Linkeditor


Pakage o Plan

Objeto

Linkeditor
Load

Pg: 32

14/04/2012

Identificacin variables HOST


:variablehost.variablehost

Pg: 33

14/04/2012

Formato comandos DB2


EXEC SQL SELECT * FROM EMPLEADOS END-EXEC EXEC SQL SELECT * FROM EMPLEADOS WHERE ID = 1 END-EXEC

EXEC SQL SELECT * FROM EMPLEADOS WHERE ID = :NUM-EMP END-EXEC

Pg: 34

14/04/2012

SQLCA
01 SQLCA. 05 05 05 05

05 05 05

05

Pg: 35

SQLCAID SQLCABC SQLCODE SQLERRM. 49 SQLERRML 49 SQLERRMC SQLERRP SQLERRD SQLWARN. 10 SQLWARN0 10 SQLWARN1 10 SQLWARN2 10 SQLWARN3 10 SQLWARN4 10 SQLWARN5 10 SQLWARN6 10 SQLWARN7 SQLEXT. 10 SQLWARN8 10 SQLWARN9 10 SQLWARNA 10 SQLSTATE

PIC X(8). PIC S9(9) COMP-4. PIC S9(9) COMP-4.


PIC S9(4) COMP-4. PIC X(70). PIC X(8). OCCURS 6 TIMES PIC S9(9) COMP-4. PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC X. X. X. X. X. X. X. X. X. X. X. X(5).
14/04/2012

Declaracin de tablas

DCLGEN:
Genera

la estructura COBOL correspondiente a una tabla DB2

EXEC SQL INCLUDE SQLCA END-EXEC EXEC SQL INCLUDE tablename END-EXEC

Pg: 36

14/04/2012

Gestin de errores

SQLCODE:
Mayor

que cero: Correcto, pero avisos Cero: Correcto Menor que cero: Error, no se recupera nada 100: No se encuentran datos

Pg: 37

14/04/2012

Cursores
EXEC SQL DECLARE nombre INSENSITIVE [SCROLL] SENSITIVE [STATIC] WITH HOLD WITH RETURN

CURSOR

FOR select

END-EXEC
EXEC SQL OPEN nombre END-EXEC EXEC SQL CLOSE nombre END-EXEC

EXEC SQL FETCH FROM nombre INTO lista-host-var END-EXEC


Pg: 38

14/04/2012

SET
SET :host-var = [CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP] Ejemplos: SET :FECHA-AYER = CURRENT_DATE 1 DAY SET :FECHA-MES-ANT = CURRENT_DATE 1 MONTH

Pg: 39

14/04/2012

Proceso de compilacin
Informe
Fuente
Precompilador Precompilador

DBRM

Informe Compilador
Fuente traducido

BIND

Compilador Informe Linkeditor


Pakage o Plan

Objeto

Linkeditor
Load

Pg: 40

14/04/2012

Unidad de trabajo
INSERT INTO EMPLEADOS ( ID, NOMBRE) VALUES (132,JUAN PEREZ)
INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN) INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN) INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN)

Pg: 41

14/04/2012

Unidad de trabajo
INSERT INTO EMPLEADOS ( ID, NOMBRE) VALUES (132,JUAN PEREZ)
INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN) COMMIT INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN) INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN)

Pg: 42

14/04/2012

Unidad de trabajo
INSERT INTO EMPLEADOS ( ID, NOMBRE) VALUES (132,JUAN PEREZ)
INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN) ROLLBACK INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN) INSERT INTO EMP-HIJOS ( ID_EMP, ID, NOMBRE) VALUES (132, 1, JUAN)

Pg: 43

14/04/2012

Declaracin de tablas

DCLGEN:
Genera

la estructura COBOL correspondiente a una tabla DB2

EXEC SQL INCLUDE SQLCA END-EXEC EXEC SQL INCLUDE tablename END-EXEC

Pg: 44

14/04/2012

Gestin de errores

SQLCODE:
Mayor

que cero: Correcto, pero avisos Cero: Correcto Menor que cero: Error, no se recupera nada -100: No se encuentran datos

Pg: 45

14/04/2012

EJERCICIOS X

Obtener el siguiente informe a partir de las tablas de personal y departamentos.


Para obtener la descripcin del puesto se acceder a la tabla de puestos (puestos) Si se produce un error no esperado (DB2) realizar un ROLLBACK y terminar en programa con un cdigo de retorno 333

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----+----3LA EQUITATIVA S.A. PAG.- Z.ZZ9 EJERCICIODB1 FECHA: XX-XX-XXXX GASTOS DE PERSONAL POR DEPARTAMENTO HORA: XX:XX:XX DEPARTAMENTO: 999 - XXXXXXXXXXXXXX ===================================
NUMERO EMPLEADO -------99999 99999 P U E S T O COD. DESCRIPCION --------------------XXXXX XXXXXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXX

N O M B R E --------------XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX

ANTIGEDAD ---------99 99

SALARIO ---------ZZZ.ZZ9,99 ZZZ.ZZ9,99

COMISION ---------ZZZ.ZZ9,99 ZZZ.ZZ9,99

TOTAL ---------ZZZ.ZZ9,99 ZZZ.ZZ9,99

TOTAL DEPARTAMENTO 999 - XXXXXXXXXXXXXXX TOTAL GENERAL


*** FIN DE INFORME ***

ZZZZ.ZZ9,99 ZZZZ.ZZ9,99

ZZZZ.ZZ9,99 ZZZZ.ZZ9,99

ZZZZ.ZZ9,99 ZZZZ.ZZ9,99

Pg: 46

14/04/2012

EJERCICIOS XI

El fichero actualizacin (COPY MOVIMTOS) contiene los siguientes campos:


Tipo Empleado Nombre Departamento Puesto Salario Comision

X X(5) X(15) X(5) X(5) X(9) 9(7)V99 X(7) 9(5)V99

(A=Alta, B=Baja, M=Modificacion) (Slo para bajas y modificaciones) (Slo para altas y modificaciones) (Slo para altas y modificaciones) (Slo para altas y modificaciones) (slo para modificaciones) (slo para modificaciones)

Se validar lo siguiente:

El tipo debe ser A, B M El empleado debe ser numrico y existir en personal (para bajas y modif.) El nombre debe estar relleno para altas El puesto debe existir en la tabla puestos (slo altas y modificaciones) El departamento debe existir en la tabla de departamentos (altas y modificaciones) El salario debe ser numrico blancos La Comisin debe ser numrica o blancos

En caso de error se grabar un fichero (COPY ERRORES) con el mismo formato que el de entrada ms un mensaje.
14/04/2012

Pg: 47

EJERCICIOS XI (Cont.)

El nmero de empleado, para las altas, ser el siguiente al mayor existente en la tabla de personal Para las altas el salario y la comisin se tomar de la tabla puestos, en funcin del puesto ocupado Slo se modificarn los campos que sean distintos de blancos Cualquier actualizacin realizada aparecer en el fichero de errores con uno de los siguientes mensajes:

Si se produce un error no esperado (DB2) realizar un ROLLBACK y terminar el programa

Empleado aadido Empleado modificado Empleado eliminado

Pg: 48

14/04/2012

EJERCICIOS XI

La tabla REARRANQUE contiene los siguientes datos:


Nombre de programa Frecuencia de COMMIT Ultimo registro tratado Verifique la existencia del programa en la tabla REARRANQUE (Error en caso contrario (ABEND)) Realice un COMMIT cada n registros (n=fecuencia de commit) Si el ltimo registro tratado de la tabla REARRANQUE est relleno debe comenzar, en el fichero de entrada, por el registro siguiente al indicado en dicha tabla. En caso contrario debe comenzar desde el principio A la terminacin correcta del programa se pondr a ceros el ltimo registro tratado de la tabla REARRANQUE

Modificar el programa del ejercicio anterior para que realice lo siguiente:


Pg: 49

14/04/2012

Das könnte Ihnen auch gefallen