Vous êtes sur la page 1sur 107

DB2 IBM

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Introduccin
DB2 Express-C es un miembro de la familia IBM
DB2 de poderosas aplicaciones de servidores de
datos para manejar tanto datos relacionales
como XML. DB2 Express-C es una edicin de
DB2 libre, sin lmites y fcil de usar.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Instalacin db2 en Windows

Ventana 2. Siguiente
Ventana 3. Seleccionar Acepto los trminos , Siguiente
Ventana 4. Siguiente
Ventana 5. Siguiente
Ventana 6. Siguiente
Ventana 7. Siguiente
Ventana 8. Siguiente
Ventana 9. Escribir como contrasea la palabra password, Siguiente

M.C. Laura Alicia Hernndez Moreno


Ventana 10. Finalizar

M.C. LAURA ALICIA HERNANDEZ MORENO

Procesador de lnea de mandatos


Para accesar a la lnea de mandatos ejecutar el
comando db2cmd, el cual abrir una pantalla
con el smbolo de sistema, escribir el comando
db2 y presionar enter.
Se mostrar la siguiente pantalla:

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Procesador de lnea de mandatos

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Creacin de una base de datos


Para crear una base de datos se utilizar el
siguiente comando:
CREATE DATABASE nombre
Ejemplo:
CREATE DATABASE prueba

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Conexin a Base de datos .


Para conectarse a una base de datos utilizar el
siguiente comando:
Connect to nombreBD
Connect to nombreBD user nombreUsuario
[USING nombrePass]
Ejemplos:
Connect to sample
Connect to prueba user grupo41

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Comando tiles para el CLP


List db directory : lista las base de datos actuales
Describe table nombreDeTabla: muestra la
estructura de la tabla que se especifique
list tablespaces
list tables [for {user | all | system | schema
<nombreesquema>}]
!cls: Limpiar la pantalla
Values(user): Para saber el usuario conectado
Get connection state. Para saber el estado de la
conexin o cual base de datos esta conectada.
Commit work
Connect reset
Terminate

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Creacin de tablespaces
Los tablespaces son contenedores de objetos de
una base de datos, como tablas e indices.
Sintaxis para crear un tablespace:
CREATE TABLESPACE nombreTableSpace
Ejemplo:
CREATE TABLESPACE tsAuditoria

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Tipos de datos
SMALLINT 5 dgitos de -32 768 a 32 767.
INTEGER 10 dgitos -2 147 483 648 a +2 147 483 647.
BIGINT 19 dgitos de -9 223 372 036 854 775 808 a
+9 223 372 036 854 775 807.
DECIMAL o NUMERIC 31 digitos.
REAL
DOUBLE o FLOAT
BLOB 2 gb
CHAR de 1 hasta 254
VARCHAR 32.672
CLOB 2 gigabytes menos 1 byte
DATE de 0001 a 9999
TIME
TIMESTAMP
XML

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

CREATE TABLE define una tabla. Esta definicin debe incluir el


nombre de la tabla y los nombres de sus columnas. La definicin puede
incluir otros atributos de la tabla, como su clave primaria o
restricciones.
Sintxis
CREATE TABLE nombreTabla
( nombreCampo tipoDeDato atributosCampo,
) [in nombreTableSpace] | [ LIKE nombreTablaExistente]
Ejemplo:
CREATE TABLE Departments
( DepNo Numeric(2,0) NOT NULL PRIMARY KEY,
DepName Char(20) NOT NULL,
Manager Numeric(3,0) NOT NULL,
Address Char(50),
Budget Numeric(10,2) )

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Llaves Primarias(PRIMARY KEY).


PK Simple (un solo campo) : El campo necesariamente debe indicar
not null.
CREATE TABLE Sucursal
(
idSucursal INTEGER not null PRIMARY KEY,

) in ts

PK Compuesta (mas de un campo) :


CREATE TABLE Ventas_Detalle
(idVenta INTEGER not null,
idProducto INTEGER not null,
,
CONSTRAINT pk_vp PRIMARY KEY (idVenta,idProducto)
) in ts

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Relacionar tablas (llaves forneas).


Forma 1. Colocando la referencia cuando se define el campo:
create table libro(
idlibro integer not null primary key,
,
idEditorial integer references editoriales(ideditorial)) in ts
Forma 2. Se define despues del campo:
create table libro(
idlibro integer not null primary key,
ideditorial integer,
,
constraint fk_ided foreign key(ideditorial)
references editoriales(ideditorial)) in ts

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Relacionar tablas (llaves forneas).


Forma 3. Se define con un comando separado:
create table libro(
idlibro integer not null primary key,
ideditorial integer,
) in ts_sistemas
alter table libro add constraint fk_ided foreign key(ideditorial)
references editoriales(ideditorial)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Valores por defecto a un campo:


Ejemplo:
CREATE TABLE USERS
( NAME CHAR(20),
AGE INTEGER,
PROFESSION VARCHAR(30) with default 'Student')

Para definir una columna que genere


valores de manera automatica utilice:
CREATE TABLE DEPT
( DEPTNO INTEGER NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 500, INCREMENT BY 1),
DEPTNAME VARCHAR(36))

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Agregar campos UNIQUE para evitar


valores repetidos:
Ejemplo:
CREATE TABLE USERS
( NAME CHAR(20),
AGE INTEGER,
EMAIL VARCHAR(80) NOT NULL UNIQUE)

Aplicar restricciones de validacion


(CHECK):
Ejemplo:
CREATE TABLE USERS
( NAME CHAR(20),
AGE INTEGER,
EMAIL VARCHAR(80) NOT NULL UNIQUE,
CONSTRAINT CK_AGE CHECK(AGE>=18 AND AGE<=55))

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Agregar columna a una tabla:


Sintaxis:
ALTER TABLE NOMBRE_TABLA
ADD COLUMN columna nueva tipoDato

Eliminar una columna:


Sintaxis:
ALTER TABLE NOMBRE_TABLA
DROP COLUMN columnaABorrar

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Agregar restricciones
Para llaves primarias:
Para agregar una restriccin de llave primaria la
sintaxis es:
ALTER TABLE tabla ADD CONSTRAINT
nombreRestriccion PRIMARY KEY(campos)

Para llaves foraneas:


ALTER TABLE tabla ADD CONSTRAINT
nombreRestriccion FOREIGN KEY(campo)
REFERENCES tablaDependiente(campo)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Agregar restricciones
Tipo Check:
Sintaxis:
ALTER TABLE tabla ADD CONSTRAINT
nombreRestriccion CHECK(condicion)
Ejemplos:
ALTER TABLE empleados ADD CONSTRAINT
chksal CHECK (salario > 40000)
ALTER TABLE empleados ADD CONSTRAINT
chknom check(nombre like 'A%A')

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Eliminar restricciones
Sintaxis:
ALTER TABLE tabla DROP CONSTRAINT
nombreRestriccion
Ejemplos:
ALTER TABLE empleados DROP CONSTRAINT
chksal

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Comandos DML

INSERT
DELETE
UPDATE
SELECT

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

CREATE DATABASE LIBRERIA;


CONNECT TO LIBRERIA;
CREATE TABLESPACE TS_LIB;
DROP TABLE Pais;
CREATE TABLE Pais(idPais integer not null primary key,
nombre varchar(40));
DROP TABLE Usuario;
CREATE TABLE Usuario(idUsuario integer not null primary key,
username varchar(20), password varchar(20),status integer);
DROP TABLE Editorial;
CREATE TABLE Editorial(idEditorial integer not null primary key,
nombre varchar(40),idPais integer references Pais(idPais),paginaWeb varchar(40));
DROP TABLE Autor;
CREATE TABLE Autor(idAutor integer not null primary key,
nombre varchar(30), idpais integer references Pais(idPais));
DROP TABLE Libro;
CREATE TABLE Libro(idLibro integer not null primary key,
titulo varchar(40), edicion varchar(10),idEditorial integer,
idUsuarioRegistro integer references Usuario(idUsuario),existencia integer,
numPaginas integer);

Pasos para cargar un script:

1.-Crear el archivo que


contenga todas las
instrucciones deseadas.
1.- Ejecutar el siguiente
comando db2cmd esto
mostrar el simbolo del
sistema
2.- Escribir el siguiente
comando: cd ruta
Ejemplo:
cd c:\scripts
3.- A continuacin escribir:
db2 vtf codigo.sql

DROP TABLE Libro_Autor;


CREATE TABLE Libro_Autor(
idLibro integer not null references Libro(idLibro),
idAutor integer not null references Autor(idAutor),
constraint pk_idL_idA primary key(idLibro,idAutor)
);

commit work;
connect reset;
Terminate;

M.C. Laura Alicia Hernndez Moreno

Sentencias principales del SQL

M.C. LAURA ALICIA HERNANDEZ MORENO

Sintaxis bsica:
INSERT INTO Tabla [(campo1, campo2, .., campoN)] VALUES (valor1, valor2, ...,
valorN)
DELETE FROM tabla [WHERE condicion(es)]
UPDATE tabla_o_vista SET Campo1=Valor1[, Campo2=Valor2, ... CampoN=ValorN]
[WHERE condicion(es)]
SELECT [predicado]
{ * | nombre_tabla.* | [nombre_tabla.]campo1 [AS alias1] [, [nombre_tabla.]campo2
[AS alias2] [, ]]}
FROM <nombre_tabla>
[ INNER | LEFT [OUTER]| RIGHT [OUTER]]
[JOIN ] <nombre_tabla> ON <condicion_join>[ AND|OR <condicion>]
[WHERE <condicion> [ AND|OR <condicion>]]
[GROUP BY <nombre_campos>]
[HAVING <condicion>[ AND|OR <condicion>]]
[ORDER BY <nombre_campo> [ASC | DESC]
[FETCH FIRST <numero> ROWS ONLY ]

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

INSERT
INSERT se utiliza para insertar datos en una tabla.
Existen 4 formas de utilizar INSERT:
1ra forma: Insertar un registro con todos sus campos.
INSERT INTO nombreTabla VALUES (lista de valores separados por comas
y ordenados conforme a la definicin de la tabla)

EJEMPLO:
INSERT INTO Sucursal VALUES (2, Mty,89898989);

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

2da. forma: Insertar un registro proporcionando la lista de campos a


los que se le otorgar un valor.
INSERT INTO Tabla (lista de campos) VALUES (lista de valores)

EJEMPLO:
INSERT INTO Sucursal(idSucursal, Nombre) VALUES (22, Centro)
INSERT INTO Sucursal(idSucursal,Telefono, Nombre) VALUES
(22,898989,Centro)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

3ra. forma: Insertar mas de un registro.

INSERT INTO Sucursal ( IdSucursal, Nombre,Telefono)


VALUES ( 1, San nicolas, 124 ) ,
( 2, Guadalupe, 345' ) ,
( 3, Monterrey, 890 )

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

4. forma: Insertar mas de un registro utilizando un select

INSERT INTO Sucursal ( IdSucursal, Nombre,Telefono)


(SELECT idAlmacen,descripcion,tel
FROM Almacen)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Copiar los registros de una tabla existente a una nueva tabla

CREATE TABLE Sucursal2 LIKE Sucursal


INSERT INTO Sucursal2 (IdSucursal, Nombre,Telefono) SELECT * FROM Sucursal

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

DELETE se utiliza para eliminar registros en una tabla.


Sintaxis:
DELETE FROM tabla [WHERE condicion(es)]

Ejemplos:
- Borra todos los registros de la tabla Artista
DELETE FROM Artista

-Borra el Artista que tenga como idArtista el numero 095500-SQL


DELETE FROM Artista WHERE idArtista='095500-SQL'
- Borra los Artistas que tengan como idArtista los numeros 095500SQL,095501-SQL y 095502-SQL
DELETE FROM Artista WHERE idArtista='095500-SQL' OR
idArtista='095501-SQL' OR idArtista='095502-SQL'
- Es otra forma de realizar la sentencia anterior
DELETE FROM Artista WHERE idArtista IN('095500-SQL','095501SQL','095502-SQL')

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

TRUNCATE
Sintaxis:
TRUNCATE [TABLE] nombreTabla [IMMEDIATE]
TRUNCATE quita todas las filas de una tabla sin registrar las eliminaciones
individuales de filas. Desde un punto de vista funcional, TRUNCATE TABLE
es equivalente a la instruccin DELETE sin una clusula WHERE; no
obstante, TRUNCATE TABLE es ms rpida y utiliza menos recursos de
registros de transacciones y de sistema.

Ejemplo:
TRUNCATE TABLE Artista
No se puede utilizar TRUNCATE TABLE en las siguientes tablas:
- Tablas a las que se hace referencia mediante una restriccin FOREIGN KEY
Ventajas de TRUNCATE respecto a DELETE:
-Se utiliza menos espacio del registro de transacciones.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

UPDATE permite modificar uno o varios datos de un registro, grupo de registros o


todos los registros de una sola tabla o vista.
Sintaxis bsica:
UPDATE tabla_o_vista SET Campo1=Valor1[, Campo2=Valor2, ... CampoN=ValorN]
[WHERE condicion(es)]

Ejemplos:

- Asignar el pais de Mexico y el idTipo 1 al Artista que tiene el idArtista 095500-SQL


UPDATE Artista SET pais='Mexico',idTipo=1 WHERE idArtista='095500-SQL'

- Disminuir el precio un 5% a los CD que son del genero 6 (Ranchero)


UPDATE Cd SET Precio=Precio-(Precio*0.05) WHERE idGenero=6

- A los artistas que como pais tengan la redaccion Mxico, mxico o Mexicana cambiar
por Mexico
UPDATE Artista SET pais='Mexico' WHERE pais='Mxico' Or pais='mxico' Or pais='Mexicana

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

SELECT es el tipo de sentencia mas utilizado. La sentencia SELECT nos permite


consultar/recuperar los datos almacenados en una o mas tablas de la base de
datos.
Sintaxis:
SELECT [ALL | DISTINCT ]
{ * | nombre_tabla.* | [nombre_tabla.]campo1 [AS alias1] [, [nombre_tabla.]campo2 [AS
alias2] [, ]]}

FROM <nombre_tabla>
[ INNER | LEFT [OUTER]| RIGHT [OUTER] | FULL [OUTER] ]
[JOIN ] <nombre_tabla> ON <condicion_join>[ AND|OR <condicion>]
[WHERE <condicion> [ AND|OR <condicion>]]
[GROUP BY <nombre_campos>]
[HAVING <condicion>[ AND|OR <condicion>]]
[ORDER BY <nombre_campo> [ASC | DESC]
[FETCH FIRST <numero> ROWS ONLY ]

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Mostrando todas las columnas de una tabla.


SELECT * FROM Artista
SELECT Artista.* FROM Artista , CD Where Artista.idArtista= Cd.idArtista
Mostrando solo algunas de las columnas de una tabla.
SELECT idArtista, Nombre FROM Artista
SELECT Artista.idArtista, Artista.Nombre FROM Artista , CD Where
Artista.idArtista= Cd.idArtista

Etiquetado de columnas y tabla.


SELECT idArtista, Nombre As Nombre del Artista FROM Artista
SELECT A.* FROM Artista As A
SELECT A. idArtista, A.Nombre As Nombre del Artista FROM Artista As A
La siguiente sentencia es correcta, pero por cuestiones de legibilidad se
recomienda hacer uso de la palabra As:
SELECT A. idArtista, A.Nombre Nombre del Artista FROM Artista A

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Usando literales de cadena. Las literales de cadena son valores constantes y


pueden ser insertadas en columnas derivadas para formatear datos.
SELECT e.apellidoPaterno || || e.apellidoMaterno || || e.nombre As
Nombre
FROM Empleados As e
SELECT lastName || , || firstName As Name FROM Employee
NOTA: Lo mas comn en DBMS es ver el uso del signo de suma (+) en procesos
de concatenacin, en db2 solo se hace uso del smbolo siguiente(dos veces): |
Usando expresiones matematicas en la clausula SELECT.
+

suma

3+3

Resta
Negacin

3-1
-1

Multiplicaci
n

3*3

Divisin

3/3

porcentaje

20%

Exponencia
l

3^2 (lo mismo que


3*3)

-Mostrar el idCd,nombreAlbum y el Precio


disminuido a un %5 de los CD que son
genero Ranchero(6)
SELECT idCd, nombreAlbum,
(Precio-(Precio*0.05)) As Precio -5%
FROM Cd
WHERE idGenero=6

M.C. Laura Alicia Hernndez Moreno

FILTRANDO DATOS con WHERE

M.C. LAURA ALICIA HERNANDEZ MORENO

El filtrado de datos es el proceso de especificacin de los criterios, para que slo


se muestren las filas con los datos especficos que se requieren. Esto se puede
hacer en DB2 usando:
- Operadores de comparacin
- Operadores lgicos
- Comparaciones de valores de tipo cadena
- Rangos de valores
- Listas de valores
Filtrando datos, usando operadores de comparacin. Los operadores de
comparacin comprueban si dos valores o expresiones tienen o no el mismo
valor. Retornan un valor tipo boolean true, false.
=
Igual a
A=B
- Mostrar los datos del artista que tiene el idArtista
>
Mayor que
A>B
095500-SQL
<
Menor que
A<B
SELECT * FROM Artista WHERE idArtista='095500SQL'
>= Igual o mayor
A>=B
que
<=

Igual o menor
que

A<=B

<>

Distinto a

A<>B

!=

Distinto a

A!=B

!<

No menor que

A!<B

!>

No mayor que

A!>B

-Mostrar los datos de los CDs que hayan sido


lanzados en el ao 2008 en adelante
SELECT * FROM Cd WHERE
fechaLanzamiento>='01/01/2008'

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Filtrando datos, usando operadores lgicos. Permiten que las expresiones se


combinen para el filtrado de datos.
OR ()

Not (no)

And (y)

Exp1

Exp2

Resultado

Exp1

Exp2

Resultado

Exp1

Resultado

-Mostrar los datos de los CDs que hayan sido lanzados en el ao 2008 en
adelante y que sean de la compaia discografica Sony y del idGenero 9
SELECT * FROM Cd WHERE fechaLanzamiento>='01/01/2008' And
ciaDiscografica='Sony' And idGenero=9
- Mostrar los datos de los Artistas que son de Mexico y que son artistas que tiene
el idTipo 1,2 y 4
SELECT * FROM Artista WHERE pais='Mexico' And (idTipo=1 OR idTipo=2 OR
idTipo=4)
-Mostrar los datos de los CD que tengan como precio entre 100 y 200 pesos
SELECT * FROM Cd WHERE Precio>=100 And Precio<=200

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Comparaciones de valores de tipo cadena. Las comparaciones de cadenas son


diferentes a los operadores de comparacin regulares. Las comparaciones de
cadenas permiten revisar/comprobar la entrada de una cadena en una columna
o slo parte de la cadena mediante el uso de comodines. Tambin se tienen
disponibles comparaciones especiales que permitan ver si una determinada
cadena es una subcadena de un valor.
Las comparaciones de cadena son usadas para tipos de datos: char y varchar.
- Mostrar los datos de los CD que como nombre de Album tengan la palabra Blue
SELECT * FROM Cd WHERE nombreAlbum LIKE '%Blue%'
-Mostrar los datos de los Artista cuyo nombre inican con A o C
SELECT * FROM Artista WHERE nombre LIKE 'A% OR nombre LIKE C%
Los comodines que podemos utilizar en LIKE son los siguientes:
% representa cualquier cadena de texto de cero o ms caracteres de cualquier longitud.
_ representa un caracter.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Filtrando datos, usando rango de valores y listas de valores. Algunas veces un


rango de valores puede ser definido para filtrar datos. En lugar de escribir una
clausula WHERE con mltiples expresiones conectadas por el operador OR o AND
o usando la expresin >= And <=. Se puede usar el predicado BETWEEN para
especificar un rango, este es equivalente a usar la expresin >= And <=. Asi como
tambin se puede utilizar el predicado IN lo cual seria equivalente a mltiples
expresiones conectadas por OR.
BETWEEN:
-Mostrar los datos de los CD que tengan como precio entre 100 y 200 pesos
SELECT * FROM Cd WHERE Precio>=100 And Precio<=200
SELECT * FROM Cd WHERE Precio BETWEEN 100 AND 200

IN:
- Mostrar los datos de los Artistas que son de Mexico y que son artistas que tiene
el idTipo 1,2 y 4
SELECT * FROM Artista WHERE pais='Mexico' And (idTipo=1 OR idTipo=2 OR
idTipo=4)
SELECT * FROM Artista WHERE pais='Mexico' And idTipo IN(1,2,6)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Trabajando con valores NULL


NULL indica que el valor es desconocido. Un valor NULL no es lo mismo que un
valor cero o vaco. No hay dos valores NULL que sean iguales. La comparacin
entre dos valores NULL, o entre un valor NULL y cualquier otro valor, tiene un
resultado desconocido porque el valor de NULL es desconocido.
Normalmente, los valores NULL indican que los datos son desconocidos, no
aplicables o que se agregarn posteriormente.
En el cdigo del programa, puede comprobar la existencia de valores NULL de
forma que determinados clculos slo se realicen en filas con datos vlidos, o no
NULL. Por ejemplo, un informe slo puede imprimir la columna de seguridad social
si en la columna hay datos que no son NULL.
Quitar los valores NULL cuando realiza clculos puede ser importante porque
algunos clculos (como, por ejemplo, un promedio) pueden ser incorrectos si se
incluyen columnas NULL.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Si es probable que haya valores NULL almacenados en los datos y no desea que
aparezcan valores NULL en los datos, se debera crear consultas e instrucciones
de modificacin de datos que quiten los valores NULL o los transformen en algn
otro valor. Para revisar o manejar los valores NULL revisemos las siguientes
funciones
IS NULL, IS NOT NULL y COALESCE.
Para obtener filas con valor NULL o no NULL. Para determinar si una expresin es
NULL, utilice IS NULL o IS NOT NULL en lugar de los operadores de comparacin
(como = o !=).
SELECT * FROM Artista WHERE pais IS NULL
SELECT * FROM Artista WHERE pais IS NOT NULL And idTipo=1

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Ordenando Datos con ORDER BY


Especifica el orden utilizado en las columnas devueltas en una instruccin
SELECT. El orden puede ser ASC (Ascendente) o DESC (Descendente), al no
especificarse alguno de estos se considera por default una ordenacin
ascendente.
Ejemplo:
SELECT idArtista,nombre,Pais
FROM Artista
ORDER BY nombre DESC
SELECT idArtista,nombre, Pais
FROM Artista
ORDER BY 3, nombre DESC
SELECT idArtista,nombre, Pais
FROM Artista
ORDER BY 2,3 DESC

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Eliminar Filas Duplicadas con DISTINCT


La palabra clave DISTINCT elimina las filas duplicadas de los resultados de una
instruccin SELECT. Si no se especifica DISTINCT, se devuelven todas las filas,
incluidas las duplicadas. El resultado de las instrucciones que incluyen DISTINCT
depende de la intercalacin de la columna o expresin a la que se aplica
DISTINCT.
Ejemplo:
- Mostrar los paises de los que se tienen artistas asignados, muestre los datos
ordenados
SELECT DISTINCT pais FROM Artista ORDER BY pais
- Mostrar los nombres de las canciones que se tienen por cada autorPrincipal
SELECT nombre, autorPrincipal FROM Track
SELECT DISTINCT nombre, autorPrincipal FROM Track
- Mostrar los nombres de las diferentes canciones que se tengan registradas
SELECT nombre FROM Track
SELECT DISTINCT nombre FROM Track

SELECT DISTINCT * FROM Track

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

FETCH FIRST integer ROWS ONLY


La clausula FETCH FIRST limita el numero de filas que debern ser mostradas.
Ejemplo:
- Mostrar los tres CDs mas caros
SELECT *
FROM CD
ORDER BY PRECIO DESC
FETCH FIRST 3 ROWS ONLY
-Muestre los primeros dos artistas que fueron registrados.
SELECT *
FROM ARTISTA
FETCH FIRST 2 ROWS ONLY

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

AVG
Es una funcin que retorna el
promedio de un conjunto de nmeros.
Ejemplo:

Obtener el promedio de personas


necesarias en los proyectos del depto D11.
(Eliminando duplicados)

SELECT AVG(DISTINCT PRSTAFF)


FROM PROJECT
WHERE DEPTNO = 'D11'

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

COUNT
Es una funcin que retorna el numero
de renglones o valores.
Ejemplo:

Contar cuantos puestos distintos ocupan


las mujeres.

SELECT COUNT(DISTINCT JOB)


FROM EMPLOYEE
WHERE SEX = 'F
SUM, MAX y MIN tienen una sintaxis similar a count

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

ASCII

Devuelve el cdigo ASCII del carcter


mas a la izquierda del argumento.
Ejemplo:
SELECT ASCII(FIRSTNME)
FROM EMPLOYEE

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

CHAR

Es una funcin que convierte valores


numricos o fecha a cadena.
Ejemplo:
select char(firstnme,8) from
employee;

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

COALESCE

Devuelve el primer argumento que no


es nulo.
Ejemplo:
SELECT EMPNO, COALESCE(SALARY, 0)
FROM EMPLOYEE;

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

DAY,DAYNAME,DAYOFWEEK
Devuelve el dia (valor numrico) de
una fecha.
Devuelve el nombre del dia de una
fecha.
Devuelve el dia de la semana del
argumento, donde 1 es el dia domingo

El valor 1 representa Lunes.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

WEEK, YEAR
Devuelve el numero de semana en un
rango de 1 a 54 de la expresion
indicada.
Devuelve el ao de una expresion.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

DAYOFYEAR,HOUR,
Devuelve el dia del ao del argumento
en un rango de 1-366.
Extrae la hora(0-24) de un argumento.
Funciones relacionadas:
minute,second,microsecond.
Obtiene la longitud de una cadena.
Elimina los espacios en blanco de la
izquierda en una cadena, tambin
existe RTRIM.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

MONTH,MONTHNAME,LCASE,UCASE
Del argumento devuelve el mes. Un
entero en el rango 1 a 12.
Del argumento extrae el mes pero lo
regresa como texto.

Convierte una cadena a minusculas,


para realizar lo inverso existe
UCASE O UPPER.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

REPEAT
Regresa una cadena que corresponde a
el primer argumento repetido tantas
veces como indica el segundo
argumento. El resultado es un
varchar de 4000.
Ejemplo:

VALUES(CHAR(REPEAT(Hola,4),20))

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

REPLACE
Reemplaza todas las ocurrencias de
expression2 en expression1 con
expression3.
Ejemplo: Reemplazar todas las
ocurrencias de N en DINING por VID
VALUES CHAR (REPLACE ('DINING', 'N', 'VID'), 10)

El resultado es: DIVIDIVIDG


Nota: Tambin devuelve varchar 4000

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

SOUNDEX
Regresa un cdigo de 4 caracteres que
representa el sonido del argumento.
Ejemplo:
SELECT EMPNO, LASTNAME
FROM EMPLOYEE
WHERE SOUNDEX(LASTNAME) = SOUNDEX(Lee)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

SUBSTR
Regresa una parte de la cadena pasada
como argumento. Si no se especifica
length se toma desde start hasta el
final de la cadena.
Ejemplo 1:
SELECT * FROM PROJECT
WHERE SUBSTR(PROJNAME,1,10) = OPERATION

Ejemplo 2:
SELECT SUBSTR(PROJNAME,1,10) FROM PROJECT

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

FUNCIONES DE AGREGADO
Las funciones de agregado realizan un clculo sobre un conjunto de valores y
devuelven un solo valor.

AVG: Promedio de los valores de una columna.


COUNT(*) : Cuenta los valores de una columna (si especifica un nombre de
columna) o de todas las filas de una tabla (*). COUNT (campo) no toma en
cuenta los valores nulos, pero COUNT(*) si los incluye.
SUM: Suma los valores de una columna.

MAX: Valor mximo de una columna.


MIN: Valor mnimo de una columna.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

SUMARIZANDO DATOS, usando FUNCIONES DE AGREGADO


Usando Funciones de Agregado con valores NULL. Si exceptuamos la funcin COUNT,
todas las funciones de agregado ignoran los valores NULL.
Ejemplos:
- Mostrar cuantos artistas se tienen registrados
SELECT COUNT(*) FROM Artista
SELECT COUNT(pais) FROM Artista
- Obtener o mostrar cuantos artistas mexicanos hay registrados
SELECT COUNT(*) As No. Artistas Mexicanos FROM Artista WHERE
UPPER(pais)='MEXICO'
- Mostrar cual es el precio mas bajo que se tiene registrado para los CDs
SELECT MIN(Precio) As Precio mas bajo FROM CD
- Mostrar cuanto se ha gastado en los CD que se tienen registrados
SELECT SUM(Precio) As Gasto total en CDs FROM Cd
- Mostrar cuanto se ha gastado en los CDs del ao de lanzamiento 2010 a la fecha
actual
SELECT SUM(Precio) As Gasto en CDs del 2010 a la fecha
FROM Cd WHERE YEAR(fechaLanzamiento) BETWEEN 2010 AND
YEAR(SYSDATE)

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

SUMARIZANDO GRUPOS DE DATOS con GROUP BY


GROUP BY. Es usada para agrupar registros como un conjunto de resultados.

Ejemplos:
-- Mostrar por cada artista(idArtista) cuantos CDs tienen registrados.
SELECT idArtista, COUNT(*) AS Cantidad de CDs
FROM Cd
GROUP BY idArtista
-- Mostrar cuantos artistas se tienen por cada pais. Ordene los datos por pais
SELECT pais, COUNT(*) As Cantidad de artistas
FROM Artista
GROUP BY pais
ORDER BY pais
--Mostrar cuanto se ha gastado en CDs por cada genero(idGenero). Ordene los
datos por Gasto de mayor a menor
SELECT idGenero, SUM(Precio) As Gasto en CDs
FROM Cd
GROUP BY idGenero
ORDER BY Gasto en CDs DESC

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

SUMARIZANDO GRUPOS DE DATOS con GROUP BY


Ejemplos:
-- Mostrar cuantas canciones tienen los CDs con idCD: 1223183-1, 1223183-5 y
1246734-2
SELECT idCd, COUNT(*) As Cantidad de Canciones
FROM Cd_Track
WHERE idCd IN('1223183-1','1223183-5','1246734-2')
GROUP BY idCd
--Mostrar por cada ao, cuantos Cds fueron lanzados de cada genero. Muestre los
datos ordenados por ao y genero.
SELECT YEAR(fechaLanzamiento) As Ao Lanzamiento, idGenero,
COUNT(*) AS Cantidad de CDs
FROM Cd
GROUP BY YEAR(fechaLanzamiento), idGenero
ORDER BY 1,2

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

FILTRANDO GRUPOS DE DATOS con HAVING


HAVING. Especifica una condicin de bsqueda para un grupo o agregado. Una
vez que GROUP BY ha combinado los registros, HAVING muestra cualquier
registro agrupado por la clusula GROUP BY que satisfaga las condiciones de la
clusula HAVING. Se utiliza la clusula WHERE para excluir aquellas filas que no
desea agrupar, y la clusula HAVING para filtrar los registros una vez agrupados.
HAVING es similar a WHERE, determina qu registros se seleccionan pero
despus de calcular el agregado. Una vez que los registros se han agrupado
utilizando GROUP BY, HAVING determina cuales de ellos se van a
mostrar. HAVING permite el uso de funciones agregadas.
Ejemplos:
-Mostrar por cada ao, cuantos Cds fueron lanzados de cada genero. Muestre los datos
ordenados por ao y genero. Solo deber de mostrar aquellos que arrojen una cantidad de
mas de 3 CDs.
SELECT YEAR(fechaLanzamiento) As Ao Lanzamiento, idGenero, COUNT(*) AS
Cantidad de CDs
FROM Cd
GROUP BY YEAR(fechaLanzamiento), idGenero
HAVING COUNT(*)>3
ORDER BY 1,2

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

-Mostrar cuanto se ha gastado en CDs por cada genero(idGenero). Ordene los datos por
Gasto de mayor a menor. Muestre solo aquellos que registren un gasto superior a 2000
pesos.
SELECT idGenero, SUM(Precio) As 'Gasto en CDs'
FROM Cd
GROUP BY idGenero
HAVING SUM(Precio)>2000
ORDER BY 'Gasto en CDs' DESC

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

TRABAJANDO CON SUBCONSULTAS


SUBCONSULTA. Es una sentencia SELECT que aparece dentro de otra
sentencia SELECT, INSERT, UPDATE o DELETE. Normalmente se utilizan para
filtrar una clausula WHERE o HAVING con el conjunto de resultados de la
subconsulta, aunque tambin pueden utilizarse en cualquier lugar donde una
expresin sea permitida, por ejemplo, en la lista de seleccin.
Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal
exceptuando que aparece encerrada entre parntesis.
-- Mostrar los datos de los empleados que son del departamento de Ventas.
SELECT NoEmpleado, aPaterno, aMaterno, nombre
FROM Empleado
WHERE idDepto=(SELECT idDepto FROM Departamento WHERE
UPPER(Nombre)=VENTAS )

-- Mostrar los datos de los empleados que estn en el mismo departamento que
ITZAE LOPEZ HERNANDEZ.
SELECT *
FROM Empleado
WHERE idDepto IN(SELECT idDepto FROM Empleado WHERE
UPPER(aPaterno)=LOPEZ And UPPER(aMaterno)=HERNANDEZ And

M.C. Laura Alicia Hernndez Moreno


UPPER(nombre)=ITZAE )

M.C. LAURA ALICIA HERNANDEZ MORENO

TRABAJANDO CON SUBCONSULTAS


EJEMPLOS:
1.
2.
3.
4.
5.
6.

Mostrar los datos de las canciones que son del CD No. _____
Mostrar los nombres de los artistas que tienen el mismo pais que el artista________
Borre los artistas que no tienen un CD registrado.
Actualice el costo de los CDs que son del genero ______
Mostrar los CD que son del artista _________
Mostrar los datos de las canciones que son del CD que como nombre de album es
_______

M.C. Laura Alicia Hernndez Moreno

CONSULTAS MULTITABLA

M.C. LAURA ALICIA HERNANDEZ MORENO

Libro

Editorial

SELECT *

FROM LIBRO, EDITORIAL

PRODUCTO CARTESIANO

M.C. Laura Alicia Hernndez Moreno

CONSULTAS MULTITABLA

M.C. LAURA ALICIA HERNANDEZ MORENO

Libro

Editorial

SELECT L.idlibro,L.titulo, E.nombre


FROM LIBRO L INNER JOIN
EDITORIAL E
ON L.IdEditorial= E.IdEditorial

INNER JOIN

M.C. Laura Alicia Hernndez Moreno

CONSULTAS MULTITABLA

M.C. LAURA ALICIA HERNANDEZ MORENO

Libro

Editorial

SELECT L.idlibro,L.titulo, E.nombre


FROM LIBRO L LEFT JOIN EDITORIAL E
ON L.IdEditorial= E.IdEditorial

LEFT JOIN

M.C. Laura Alicia Hernndez Moreno

CONSULTAS MULTITABLA

M.C. LAURA ALICIA HERNANDEZ MORENO

Libro

Editorial

SELECT L.idlibro,L.titulo, E.nombre


FROM LIBRO L RIGHT JOIN EDITORIAL E
ON L.IdEditorial= E.IdEditorial

RIGTH JOIN

M.C. Laura Alicia Hernndez Moreno

CONSULTAS MULTITABLA

M.C. LAURA ALICIA HERNANDEZ MORENO

Libro

Editorial

SELECT L.idlibro,L.titulo, E.nombre


FROM LIBRO L FULL JOIN EDITORIAL E
ON L.IdEditorial= E.IdEditorial

FULL JOIN

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

OPERACIONES: UNION, INTERSECCION Y DIFERENCIA


Los operadores de la teora de conjuntos: unin, interseccin y diferencia
Son soportados en SQL.
UNION

INTERSECCION

DIFERENCIA

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

UNION. El operador unin puede ser usado para unir dos conjuntos de
Datos que tienen las mismas columnas y en el mismo orden.
El operador union elimina renglones duplicados del resultado.
Ejemplo:

SELECT idautor,nombre FROM AUTOR


UNION

SELECT idusuario,username FROM usuario


Si se necesita que el operador unin
no elimine los duplicados utilizar :

SELECT idautor,nombre FROM AUTOR


UNION ALL

SELECT idusuario,username FROM usuario

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

INTERSECCION . Devuelve como resultado

todos los registros

comunes en ambas tablas.


Ejemplo:

SELECT idautor,nombre FROM AUTOR


INTERSECT

SELECT idusuario,username FROM usuario

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

DIFERENCIA. Devuelve como resultado todos los registros que estn en


la primera tabla y que no estn en la segunda.
Ejemplo:

SELECT idautor,nombre FROM AUTOR


EXCEPT

SELECT idusuario,username FROM usuario

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Procedimientos Almacenados
Son objetos que encapsulan cdigo SQL y lgica del negocio. Mantener parte
de la lgica de la aplicacin en la base de datos proporciona mejoras en el
desempeo, adems proporciona un lugar centralizado para todo el cdigo
de tal manera que otras aplicaciones pueden utilizarlos.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Sintxis
CREATE PROCEDURE nombreProcedimiento(tipoParam NombreParam1 tipoDeDato,
tipoParam NombreParam2 tipoDeDato,
...
tipoParam NombreParamn tipoDeDato)
LANGUAGE SQL
BEGIN
--Sentencias del Procedimiento (codigo)
END

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Representacin Grfica Stored


nombreProcedimiento

nombreParam1

nombreParam2

Cuerpo del Procedimiento


(Codigo)
nombreParam3

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Los parmetros permiten introducir datos hacia un stored o extraer datos del
mismo.

Ejemplo: Se quiere crear un stored que aumente el sueldo a los empleados.


A continuacin se presentan diferentes versiones que se pueden crear de
este stored haciendo enfasis en los parametros y lograr comprender de
manera mas precisa cual es su funcion en los stored procedures.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Versin 1. Si no utilizamos parmetros.

Sp_aumentaSueldo

UPDATE Empleados SET sueldo = sueldo + 400

Al no tener parmetros NO se puede introducir al stored la cantidad que ser aplicada


como aumento, por lo tanto, el creador del stored se ve obligado a especificar un valor
constante: en el ejemplo $400.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Versin 2. Con un parmetro de entrada: p_cant
Sp_aumentaSueldo

890

p_cant

UPDATE Empleados SET sueldo = sueldo +


p_cant

num
Al contener un parametro p_cant se puede especificar desde el exterior del stored el valor
a utilizar; ya sea utilizando un valor constante(890) o una variable(num).

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Versin 3. Con dos parmetros de entrada: p_cant, p_idDepto
Sp_aumentaSueldo

p_cant

UPDATE Empleados
SET sueldo = sueldo + p_cant
WHERE idDepto = p_idDepto

p_idDepto

Al contener dos parametros se puede especificar desde el exterior del stored la cantidad a
aumentar (p_cant) y el numero de departamento (p_idDepto) que debe tener el
empleado para aplicar el aumento.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Versin 4. Con 2 parmetros de entrada: p_cant, p_idDepto y 1
parametro de salida:
p_totalEmp
Sp_aumentaSueldo

p_cant

p_idDepto

UPDATE Empleados
SET sueldo = sueldo + p_cant
WHERE idDepto = p_idDepto;
SET pTotalEmp = (SELECT .);

P_totalEmp

Este Stored recibe el aumento y la clave del departamento de los empleados que se les
aplicara el aumento, ademas de un parametro de salida que regresara el total de
empleados a los que se le aplico el aumento.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
p_ca
nt

Ver. 4

p_id
Dept
o
P_tot
alEm
p

Ver. 3

p_ca
nt

p_id
Dept
o

Ver. 2

Ver. 1

p
_
ca
nt

UPDATE Empleados
SET sueldo = sueldo +
p_cant
WHERE idDepto =
p_idDepto;
SET pTotalEmp = (SELECT
.);

El uso de parmetros
hace al stored mas
generico ya que este
realiza su funcion en
base a sus parametros.

General

UPDATE Empleados
SET sueldo = sueldo +
p_cant
WHERE idDepto =
p_idDepto

UPDATE
Empleados SET
sueldo = sueldo +
p_cant

UPDATE Empleados
SET sueldo = sueldo +
400

Sin parmetros el
aumento es fijo.

Especifico

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Cuando se define en parametro es necesario indicar:
1. Tipo del Parametro.
2. Nombre
3. TipoDeDato
Tipos de parmetros:
IN: Parmetro de entrada cuyo valor es utilizado dentro del store
OUT: Parmetro de salida en el se guarda un valor que sera devuelto por el
store.
INOUT: Parametro que es de entrada y salida, es decir que puede utilizarse el
valor que tenga el parametro al llamar el stored y cuando se termine su
trabajo esta misma variable puede utilizarse para regresar un resultado.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Nombre del parmetro:
El nombre debe seguir las mismas reglas que las variables. No comenzar con
numeros, no utilizar espacios y que sea un nombre descriptivo.
Se recomienda utilizar un prefijo p_ para que no genere confusiones con
nombres de campos o tablas.
Tipo de dato:
Es el tipo de dato SQL y el tamao si es aplicable. (Integer, Decimal, varchar,
etc).

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Parmetros
Ejemplo declaracin del store version 4.

Sp_aumentaSueldo
p_cant

p_idDepto

Codigo
Codigo
Codigo
Codigo

P_totalEmp

CREATE PROCEDURE sp_aumentaSueldo ( IN p_cant decimal(8,2),


IN p_idDepto integer,
OUT p_totalEmp integer)
...

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Procedimiento Almacenado
Ejemplo store version 3 completo:

Sp_aumentaSueldo
p_cant

UPDATE Empleados
SET sueldo = sueldo + p_cant
WHERE idDepto = p_idDepto

p_idDepto

CREATE PROCEDURE sp_aumentaSueldo ( IN p_cant decimal(8,2),


IN p_idDepto integer)
LANGUAGE SQL
BEGIN
UPDATE Empleados SET sueldo = sueldo + p_cant
WHERE idDepto = p_idDepto;
END

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Comentarios
Para especificar comentarios en un procedimiento SQL se tienen dos formas:
Se pueden utilizar dos guiones --:
-- este texto es un comentario.

Se puede utilizar comentarios al estilo de C:


/* Esto es un comentario que puede ser
De varias lineas */

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Comentarios
CREATE PROCEDURE sp_aumentaSueldo ( IN p_cant decimal(8,2),
IN p_idDepto integer)
LANGUAGE SQL
BEGIN
-- -------------------------------------------------------------------------------------- Autor: Juan Perez
-- Fecha Creacin: 02/02/2014
-- Propsito: Aumentar el sueldo a los empleados de un departamento.
-- Parmetros:
-- IN p_Cant: Aumento que ser aplicado
-- IN p_idDepto: clave del departamento que debe tener el empleado para
-aplicar el aumento
-- --------------------------------------------------------------------------------------

UPDATE Empleados SET sueldo = sueldo + p_cant


WHERE idDepto = p_idDepto;
END

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

EJEMPLO INSERT
Stored que permite almacenar un nuevo artista.
CREATE PROCEDURE sp_Artista_Insert(IN p_idartista VARCHAR(15),
IN p_nombre VARCHAR(80),
IN p_pais VARCHAR(80),
IN p_idtipo INTEGER)
LANGUAGE SQL
BEGIN
INSERT INTO ARTISTA (IDARTISTA, NOMBRE, PAIS, IDTIPO)
VALUES (p_idartista, p_nombre, p_pais, p_idtipo);
END;

CALL SP_ARTISTA_INSERT('x','Artista x','Mxico',1);

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

EJEMPLO DELETE
Stored que permite eliminar artistas pero de un pas en especifico.
CREATE PROCEDURE sp_Artista_Delete(IN p_pais VARCHAR(80))
LANGUAGE SQL
BEGIN
DELETE FROM ARTISTA WHERE pais= p_pais;
END;

CALL SP_ARTISTA_DELETE('Mxico);

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

EJEMPLO UPDATE
Stored que permite cambiar el tipo de artista a un artista en especifico.
CREATE PROCEDURE sp_Artista_UpdateTipo(IN p_idArtista VARCHAR(15),
IN p_idTipo INTEGER)
LANGUAGE SQL
BEGIN
UPDATE ARTISTA SET IDTIPO = p_idTipo
WHERE IDARTISTA = p_idArtista;
END;

CALL SP_ARTISTA_UPDATETIPO('1507440-1A',2);

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

EJEMPLO SELECT
Stored que permite obtener la informacin de todos los artistas.
CREATE PROCEDURE sp_ArtistasSelect
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE c_artistas CURSOR WITH RETURN TO CLIENT
FOR SELECT * FROM ARTISTA;
OPEN c_artistas;
END;

CALL sp_artistasSelect;

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Variables
Las variables se crean utilizando la sentencia DECLARE. Cada declaracin de
variable consiste de un nombre, tipo de datos y opcionalmente una valor por
default (inicial).
Sintaxis:
DECLARE nombreVariable tipoDeDato;
DECLARE nombreVariable tipoDeDato DEFAULT valor;
Las variables deben ser colocadas despues de BEGIN y antes de que
cualquier sentencia SQL.
Se recomienda utilizar el prefijo v_ antes del nombre para que se evite
confusiones con campos o parametros.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Variables
Ejemplo: Crear un stored que cambie el sueldo a un empleado y le sea
asignado el sueldo mas alto que se tenga registrado actualmente. Ademas se
necesita que guarde en una bitacora el cambio realizado.
CREATE PROCEDURE sp_AsignaSueldoMasAlto( IN p_idEmpAAsignar integer)
LANGUAGE SQL
BEGIN
DECLARE v_SueldoMax DECIMAL(10,2);
DECLARE v_SueldoAnt DECIMAL(10,2);
SET v_SueldoMax = (SELECT max(Sueldo) FROM Empleados);
SET v_SueldoAnt= (SELECT Sueldo FROM Empleados
WHERE idEmp = p_idEmpAAsignar);
UPDATE Empleados SET Sueldo = v_SueldoMax
WHERE idEmp = p_idEmpAAsignar;
INSERT INTO Bitacora(idEmp,sueldoAnt,SueldoNuevo)
VALUES(P_idEmpAAsignar,v_SueldoAnt,v_SueldoMax);
END;

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Asignado valores a Variables


Ejemplo: El siguiente Stored muestra diferentes formas de asignar valores a
las variables.
CREATE PROCEDURE sp_Ejemplo()
LANGUAGE SQL
BEGIN
DECLARE v_rcount INTEGER;
DECLARE v_max INTEGER DEFAULT 0;
DECLARE v_adate,v_another DATE;
DECLARE v_total INTEGER DEFAULT 0; -- (1) Asignar valor por default
SET v_total = v_total + 1; -- (2) Utilizar SET para modificar una variable
SELECT MAX(EMPNO) INTO v_max FROM Empleados; -- (3) usando into
VALUES CURRENT DATE INTO v_adate; -- (4) utilizando la sentencia VALUES
DELETE FROM Empleados WHERE sueldo = 1000;
END;

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Sentencia Condicional IF
IF es utilizado para realizar la ejecucin de sentencias bajo cierta condicin.
Por lo general se utilizan dos bloque de codigos que son ejecutados cuando
la condicion es cierta o falsa.
En general existen 3 tipos diferentes de IF

IF condicion THEN
SENTENCIAS
END IF;

IF condicion THEN
SENTENCIAS
ELSE
SENTENCIAS
END IF;

IF condicion THEN
SENTENCIAS
ELSEIF condicion THEN
SENTENCIAS
ELSEIF condicion THEN
SENTENCIAS
ELSE
SENTENCIAS
END IF;

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Ejemplo IF
Crear un stored que permita aumentar el precio de un disco tomando en
cuenta un valor que indica el rating de ventas. 1 aumenta 10%, 2 aumenta
5% y 3 aumenta 1%.
CREATE PROCEDURE sp_AumentaPrecio( IN p_idCd VARCHAR(15),
IN p_rating INTEGER)
LANGUAGE SQL
BEGIN
IF p_rating =1 THEN
UPDATE CD SET precio = precio * 1.10
WHERE IDCD = p_idCd;
ELSEIF p_rating =2 THEN
UPDATE CD SET precio = precio * 1.05
WHERE IDCD = p_idCd;
ELSEIF p_rating =3 THEN
UPDATE CD SET precio = precio * 1.01
WHERE IDCD = p_idCd;
END IF;

M.C. Laura Alicia Hernndez Moreno


END;

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Sentencia Condicional CASE


Existen dos forma de utilizar case, la primera de ellas es cuando se desea
evaluar el contenido de una variable:
CREATE PROCEDURE sp_AumentaPrecio( IN p_idCd VARCHAR(15),
IN p_rating INTEGER)
LANGUAGE SQL
BEGIN
CASE p_rating
WHEN 1 THEN
UPDATE CD SET precio = precio * 1.10
WHERE IDCD = p_idCd;
WHEN 2 THEN
UPDATE CD SET precio = precio * 1.05
WHERE IDCD = p_idCd;
ELSE
UPDATE CD SET precio = precio * 1.01
WHERE IDCD = p_idCd;
END CASE;

M.C. Laura Alicia Hernndez Moreno


END;

M.C. LAURA ALICIA HERNANDEZ MORENO


06/10/2014

Sentencia Condicional CASE


Existen dos forma de utilizar case, la primera de ellas es cuando se desea
evaluar el contenido de una variable:
CREATE PROCEDURE sp_AumentaPrecio( IN p_idCd VARCHAR(15),
IN p_rating INTEGER)
LANGUAGE SQL
BEGIN
CASE p_rating
WHEN 1 THEN
UPDATE CD SET precio = precio * 1.10
WHERE IDCD = p_idCd;
WHEN 2 THEN
UPDATE CD SET precio = precio * 1.05
WHERE IDCD = p_idCd;
ELSE
UPDATE CD SET precio = precio * 1.01
WHERE IDCD = p_idCd;
END CASE;

M.C. Laura Alicia Hernndez Moreno


END;

M.C. LAURA ALICIA HERNANDEZ MORENO

Triggers (Disparadores)
Son objetos de base de datos asociados a una tabla los cuales definen
operaciones que seran ejecutadas cuando una operacin INSERT, UPDATE o
DELETE es realizada. Los triggers son activados automaticamente.

Tipos de Triggers:
Before triggers. Son activados antes de que un renglon sea insertado,
modificado o borrado.
After triggers. Son activados despues de que una sentencia
INSERT,DELETE o UPDATE es ejecutada exitosamente.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Before Triggers
Ejemplo 1:

CREATE TABLE ( id integer not null primary key,


inicio timestamp,
fin timestamp)

CREATE OR REPLACE TRIGGER tg_prueba


before insert on prueba
referencing new as n
for each row
when (n.fin is null)
set n.fin = n.inicio + 1 HOUR
@

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Ejemplo 2:

CREATE TRIGGER validarFecha


BEFORE INSERT ON prueba
REFERENCING NEW AS n
FOR EACH ROW
BEGIN ATOMIC
-- validar si es nulo
IF (n.fin IS NULL) THEN
SET n.fin = n.inicio + 1 HOUR;
END IF;
-- que no sea despues de las 21:00 hrs
IF (n.fin > '21:00') THEN
SIGNAL SQLSTATE '80000'
SET MESSAGE_TEXT='La clase no puede terminar despues de las
9pm';
END IF;
END
@

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

After Triggers
Ejemplo 1:

CREATE TRIGGER auditoria_emp_salario


AFTER UPDATE OF salary ON employees
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
INSERT INTO audit VALUES (
CURRENT TIMESTAMP, ' Empleado ' || char(o.employee_id) || ' cambio
de salario de ' || CHAR(o.salary) || ' a' || CHAR(n.salary) || ' por ' ||
USER)
@

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Funciones.
Son objetos de base de datos que ejecutan una serie de sentencias y
devuelven un valor como resultado.
Tipos de funciones:
Funciones Escalares.
Funciones de Tabla.

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Ejemplo Funcin Escalar:

CREATE FUNCTION deptname(p_empid VARCHAR(6))


RETURNS VARCHAR(30)
BEGIN ATOMIC
DECLARE v_department_name VARCHAR(30);
DECLARE v_err VARCHAR(70);
SET v_department_name = (
SELECT d.department_name FROM departments d inner join
employees e on e.department_id=d.department_id WHERE
e.employee_id= p_empid);
SET v_err = 'Error: Empleado' || p_empid || ' no encontrado';
IF v_department_name IS NULL THEN
SIGNAL SQLSTATE '80000' SET MESSAGE_TEXT=v_err;
END IF;
RETURN v_department_name;
END

M.C. Laura Alicia Hernndez Moreno

M.C. LAURA ALICIA HERNANDEZ MORENO

Funciones que retornan tablas:

CREATE FUNCTION getEnumEmployee(p_dept VARCHAR(3))


RETURNS TABLE
(empno CHAR(6),
lastname VARCHAR(15),
firstnme VARCHAR(12))
SPECIFIC getEnumEmployee
RETURN
SELECT e.empno, e.lastname, e.firstnme
FROM employee e
WHERE e.workdept=p_dept

M.C. Laura Alicia Hernndez Moreno