Vous êtes sur la page 1sur 129

CAPITULO 01

Objetivos.- aprender a ingresar a SQL Server 2008. Adems de manipular los archivos de una base de datos y creacin de tablas

1 Acceso al Servidor SQL SERVER 2 Entorno de Microsoft SQL Server Management Studio 3 Creacin De Base De Datos 4 Creacin de Tablas en una Base de Datos 5 Ingresando Registros a La Tabla CLIENTES 6 Gestin de Archivos de una base de datos 7 Separar Una Base De Datos 8 Adjuntar Una Base De Datos 9 Eliminar una base de datos SQL SERVER Propuesto Practico 01

2 3 4 5 6 7 8 8 9 10

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 1 de 101

RPP - Taller de Base de Datos

1 Acceso al Servidor SQL SERVER


Para acceder al servidor SQL SERVER debes contar con la instalacin de una instancia. Y lo podrs ubicar en la siguiente RUTA: INICIO + PROGRAMAS + MICROSOFT SQL SERVER 2008 + SQL SERVER MANAGEMENT STUDIO

Ingresando Credenciales de Seguridad


A.-Tipo De Servidor: debe seleccionar Motor de Base de Datos B.- Nombre de Servidor: Debes seleccionar el servidor existente en la computadora Haciendo clic en BUSCAR MS

C.-Autenticacin: En estas primeras sesiones haremos uso de Autenticacin de Windows. D.- Presionar el botn CONECTAR
EL NOMBRE QUE RECIBE UN SERVIDOR SQL SERVER ES DIFERENTE EN CADA COMPUTADORA. COMO ES EL CASO DE MI SERVIDOR QUE RECIBE EL NOMBRE DE PC-315E4BA698B1\MANCHESTER

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 2 de 101

RPP - Taller de Base de Datos

2 Entorno de Microsoft SQL Server Management Studio

Resolver:
Qu tipo de autenticacin est configurado en tu servidor

Que cantidad de memoria por consulta tiene asignado tu servidor

Que tiempo de espera de consulta tiene tu servidor

Mencionar las opciones de las propiedades del servidor

Cules son las bases de datos del sistema

Mencionar los Objetos del Agente SQL SERVER

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 3 de 101

RPP - Taller de Base de Datos

3 Creacin De Base De Datos


a) Expandir la raz del explorador de objetos b) Seleccionar el objeto BASE DE DATOS c) Clic en NUEVA BASE DE DATOS del men contextual de dicho objeto

d) Ingresar el Nombre de la base de datos LONDRES e) Presionar el botn ACEPTAR

Una vez creado la base de datos LONDRES debes verificar que se encuentre anclado en el explorador de soluciones Dentro de la base de datos veras como se clasificara los objetos creados como son tablas, procedimientos almacenados u otros objetos a crearse.

NOTA: Las bases de datos de SQL server. Administra sus archivos fsicos de diferente manera como lo hara tal vez un archivo MDB de Access. UNA base de datos creada est constituida por ms de 1 o ms archivos fsicos Adems hacer uso de una base de datos existente en otra computadora necesita de un servidor SQL server y adjuntar su base de datos existente.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 4 de 101

RPP - Taller de Base de Datos

4 Creacin de Tablas en una Base de Datos


Para este ejemplo haremos uso de la base de datos LONDRES creada anteriormente. Los pasos son los siguientes: a) Expandir la base de datos LONDRES b) Seleccionar el objeto TABLAS c) Clic en NUEVA TABLA del men contextual de dicho objeto

d) Ingresar Nombre de Columnas y Tipos de Datos de la siguiente manera

e) Presionar el botn guardar de la barra de herramientas. Y asignar el nombre CLIENTES a la tabla creada

Verificar la creacin de la tabla CLIENTES


TABLA.- las tablas son objetos que nos permiten organizar la informacin de una empresa. Como pueden ser sus clientes, proveedores, productos, etc. Cada tabla contiene atributos o CAMPOS y cada Campo un tipo de dato que le asigna el desarrollador. Dentro de cada tabla podemos llenar datos (REGISTROS) Desde la cantidad que uno necesite.

Recuerda verificar la existencia de los objetos creados actualizando el servidor SQL server con la tecla f5

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 5 de 101

RPP - Taller de Base de Datos

5 Ingresando Registros a La Tabla CLIENTES


a) Seleccionar la tabla CLIENTES b) Clic en EDITAR LAS PRIMERAS 200 FILAS del men contextual de dicho objeto

c) Ingresar los siguientes Registros

d) Para GUARDAR los cambios realizados debes presionar el botn EJECUTAR SQL

Tipos De Datos SQL Server 2008

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 6 de 101

RPP - Taller de Base de Datos

6 Gestin de Archivos de una base de datos SQL SERVER


Ahora aprenderemos manejar los archivos de una base de datos. Manejar una base de datos en diferentes servidores. Ahora veamos paso a paso. Primero identifiquemos la RUTA donde se almacenan los archivos de una base de datos. La ruta es:

Cada vez que uno crea una base de datos a travs de un asistente o herramientas visuales de SQL server 2008. Una base de datos creada genera sus archivos en algn lugar fsico dentro de un disco. En una carpeta que fue configurado en el momento de instalacin. Los archivos que genera son: 1 archivo MDF (solo uno) 1 o ms archivos NDF 1 o ms archivos LDF EN CONCLUSION cada vez que Ud. crea una base de datos.Automticamente cada Generar 2 archivos. DEMOSTRACION: A. Crear una base de datos de nombre JPANDAL B. Verificar la ruta de donde se ha creado los archivos de la base de datos creada C. Buscar en la carpeta DATA los archivos de la base de datos creada

Archivos de la base de datos LONDRES

Estos 2 archivos generados sern manipulados por los usuarios. Es decir que si Ud. Desea transportar su base de datos de una computadora a otra. Deber realizar la accin SEPARAR - COPIAR ADJUNTAR -

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 7 de 101

RPP - Taller de Base de Datos

7 Separar Una Base De Datos


a) Seleccionar una base de datos existente en el servidor b) Clic en TAREAS + SEPARAR del men contextual de la base de datos

c) Presionar ACEPTAR Una vez separado la base de datos UD. Podr copiar los archivos que pertenecen a la base de datos a un disco extrable como USB u otro. Para poder HACER USO la base de datos en otra computadora.
Copiar los archivos en C:\BASE DE DATOS\

8 Adjuntar Una Base De Datos


Primero debes contar con los 2 archivos de la base de datos que deseas adjuntar. Una vez ubicado tus archivos. Es hora de ADJUNTAR. a) Seleccionar el objeto Bases de datos del explorador de soluciones b) Clic en ADJUNTAR del men contextual del objeto seleccionado

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 8 de 101

RPP - Taller de Base de Datos


c) En la ventana Adjuntar base de datos clic en el botn AGREGAR

d) Seleccionar el archivo MDF de la base de datos e) Clic en ACEPTAR f) Clic en ACEPTAR

9 Eliminar una base de datos SQL SERVER


a) Seleccionar la base de datos existente b) Clic en ELIMINAR del men contextual de la base de datos seleccionada c) De la ventana elimina r objeto presionar ACEPTAR Una base de datos eliminada. Tambin elimina los archivos que estas generaron.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 9 de 101

RPP - Taller de Base de Datos

Propuesto Practico 01
1 Crear las siguientes bases de datos: TRILCE, PAMER, UPC, UPCI, JHONNYPANDAL 2 Separar las bases de datos TRILCE Y PAMER 3 Copiar y Guardar los archivos de cada base de datos separada en una carpeta con su mismo nombre en DISCO C 4 Adjuntar las bases de datos TRILCE Y PAMER desde su nueva ubicacin fsica 5 Crear las siguientes tablas en la base de datos TRILCE e Ingresar 10 registros en cada tabla respetando la Calidad de informacin que se almacena.

6 Generar un diagrama de las tablas creadas 7 Qu objetos contiene la carpeta SEGURIDAD del explorador de objetos de SQL SERVER

8 ingresar el nombre de los INICIOS DE SESION que existen en el servidor SQL SERVER

9 que nombre recibe el servidor que esta Ud. trabajando

10 que objetos muestra el AGENTE SQL SERVER

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 10 de 101

RPP - Taller de Base de Datos

CAPITULO 02
Objetivos.- aprender a trabajar con TransactSQL adems de crear programas haciendo uso de elementos de la programacin en SQL server 2008

1 Transact SQL 2 Fundamentos de Transact SQL 3 Tipos de datos en Transact SQL 4 Variables en Transact SQL 5 Operadores en Transact SQL 6 Estructuras de control en Transact SQL 7 Desarrollo de Ejemplos Propuesto Practico 02

12 12 13 16 19 20 25 27

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 11 de 101

RPP - Taller de Base de Datos

1 Transact SQL
Transact SQL es el lenguaje de programacin que proporciona SQL Server para ampliar SQL con los elementos caractersticos de los lenguajes de programacin: variables, sentencias de control de flujo, bucles, ... Herramienta de Programacin TRANSACT-SQL Para acceder a esta herramienta solo debe hacer clic en el botn NUEVA CONSULTA

1.1 Guardar un Script SQL


a) Presionar el botn GUARDAR b) Aplicarle un nombre y ubicacin
ES IMPORTANTE SABER QUE LOS SCRIPTS CREADOS EN CLASE DEBEN SER GUARDADOS PARA UN POSTERIOR USO

2 Fundamentos de Transact SQL


Primeros pasos con Transact SQL
Para programar en Transact SQL es necesario conocer sus fundamentos. Como introduccin vamos a ver algunos elementos y conceptos bsicos del lenguaje. Transact SQL no es CASE-SENSITIVE, es decir, no diferencia maysculas de minsculas como otros lenguajes de programacin como C o Java. Un comentario es una aclaracin que el programador incluye en el cdigo. Son soportados 2 estilos de comentarios, el de lnea simple y de multilnea, para lo cual son empleados ciertos caracters especiales como son: -- Para un comentario de linea simple /* ... */ Para un comentario de varias lneas Un literal es un valor fijo de tipo numrico, caracter, cadena o lgico no representado por un identificador (es un valor explcito). Una variable es un valor identificado por un nombre (identificador) sobre el que podemos realizar modificaciones. En Transact SQL los identificadores de variables deben comenzar por el caracter @, es decir, el nombre de una variable debe comenzar por @.Para declarar variables en Transact SQL debemos utilizar la palabra clave declare, seguido del identificador y tipo de datos de la variable.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 12 de 101

RPP - Taller de Base de Datos


Veamos algunos ejemplos:

-- Esto es un comentario de linea simple /* Este es un comentario con varias lneas. Conjunto de Lineas. */ declare @nombre varchar(50)-- declare declara una variable -- @nombre es el identificador de la -- variable de tipo varchar set @nombre = Jhonny pandal' -- El signo = es un operador -- Jhonny pandal es un literal print @Nombre -- Imprime por pantalla el valor de @nombre. -- No diferencia maysculas ni minsculas

Scripts y lotes.
Un script de Transact SQL es un conjunto de sentencias de Transact SQL en formato de texto plano que se ejecutan en un servidor de SQL Server. Un script est compuesto por uno o varios lotes. Un lote delimita el alcance de las variables y sentencias del script. Dentro de un mismo script se diferencian los diferentes lotes a travs de la instruccin GO.

-- Este es el primer lote del script SELECT * FROM COMENTARIOS GO-- GO es el separador de lotes -- Este es el segundo lote del script SELECT getdate()-- getdate() es una funcin integrada que devuelve -- la fecha En ocasiones es necesario separar las sentencias en varios lotes, porque Transact SQL no permite la ejecucin de ciertos comandos en el mismo lote, si bien normalmente tambin se utilizan los lotes para realizar separaciones lgicas dentro del script.

3 Tipos de datos en Transact SQL


Cuando definimos una tabla, variable o constante debemos asignar un tipo de dato que indica los posibles valores. El tipo de datos define el formato de almacenamiento, espacio que de disco-memoria que va a ocupar un campo o variable, restricciones y rango de valores vlidos. Transact SQL proporciona una variedad predefinida de tipos de datos. Casi todos los tipos de datos manejados por Transact SQL son similares a los soportados por SQL.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 13 de 101

RPP - Taller de Base de Datos A.- Tipos de datos numricos.


SQL Server dispone de varios tipos de datos numricos. Cuanto mayor sea el nmero que puedan almacenar mayor ser en consecuencia el espacio utilizado para almacenarlo. Como regla general se recomienda usar el tipo de dato mnimo posible. Todos los dato numricos admiten el valor NULL. Bit. Una columna o variable de tipo bit puede almacenar el rango de valores de 1 a 0. Tinyint. Una columna o variable de tipo tinyint puede almacenar el rango de valores de 0 a 255. SmallInt. Una columna o variable de tipo smallint puede almacenar el rango de valores -32768 a 32767. Int. Una columna o variable de tipo int puede almacenar el rango de valores -231 a 231-1 . BigInt. Una columna o variable de tipo bigint puede almacenar el rango de valores -263 a 263-1 . Decimal(p,s). Una columna de tipo decimal puede almacenar datos nmericos decimales sin redondear. Donde p es la precision (nmero total del dgitos) y s la escala (nmero de valores decimales) Float. Una columna de datos float puede almacenar el rango de valores -1,79x-10 308 a 1,79x-10308, , si la definimos con el valor mxmo de precisin. La precisin puede variar entre 1 y 53. Real. Sinnimo de float(24). Puede almacenar el rango de valores -3,4x-1038 a 3,4x-1038, Money. Almacena valores nmericos monetarios de -2 63 a 263-1, con una precisin de hasta diexz milesimas de la unidad monetaria. SmallMoney. Almacena valores nmericos monetarios de -214.748,3647 a 214.748,3647, con una precisin de hasta diez milesimas de la unidad monetaria. Todos los tipos de datos enteros pueden marcarse con la propiedad identity para hacerlos autonumricos.

DECLARE @bit bit, @tinyint tinyint, @smallint smallint, @int int, @bigint bigint, @decimal decimal(10,3), -- 10 digitos, 7 enteros y -- 3 decimales @real real, @double float(53), @money money set @bit = 1 print @bit set @tinyint = 255 print @tinyint set @smallint = 32767 print @smallint set @int = 642325 print @int set @decimal = 56565.234 -- Punto como separador decimal print @decimal set @money = 12.34 print @money

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 14 de 101

RPP - Taller de Base de Datos B.- Tipos de datos de carcter.


Char(n). Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos datos en el tipo char, siempre se utilizan los n caracteres indicados, incluso si la entrada de datos es inferior. Por ejemplo, si en un char(5), guardamos el valor 'A', se almacena 'A ', ocupando los cinco bytes. Varchar(n).Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos datos en el tipo varchar, unicamente se utilizan los caracteres necesarios,Por ejemplo, si en un varchar(255), guardamos el valor 'A', se almacena 'A', ocupando solo un byte bytes. Varchar(max). Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes. Nchar(n).Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan pertenecer a diferente idomas. Nvarchar(n).Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan pertenecer a diferente idomas. Nvarchar(max).Igual que varchar, pero al declararse como max puede almacenar 2 31-1 bytes.

C.- Tipos de datos de fecha.


Datetime. Almacena fechas con una precisin de milisegundo. Debe usarse para fechas muy especficas. SmallDatetime. Almacena fechas con una precision de minuto, por lo que ocupa la mitad de espacio de que el tipo datetime, para tablas que puedan llegar a tener muchos datos es un factor a tener muy en cuenta..

D.- Tipos de datos binarios.


Binary. Se utiliza para almacenar datos binarios de longitud fija, con una longitud mxima de 8000 bytes. Varbinary. Se utiliza para almacenar datos binarios de longitud variable, con una longitud mxima de 8000 bytes..Es muy similar a binary, salvo que varbinary utiliza menos espacio en disco. Varbinary(max).Igual que varbinary, pero puede almacenar 231-1 bytes

E .- Tipo de datos XML.


XML.Una de las grandes mejoras que incorpora SQL Server 2005 es el soporte nativo para XML. Como podemos deducir, este tipo de datos se utiliza para almacenar XML.

DECLARE @myxml XML set @myxml = (SELECT @@SERVERNAME NOMBRE FOR XML RAW, TYPE) print cast(@myxml asvarchar(max)) Obtendremos la siguiente salida: <row nombre="SVR01"/>

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 15 de 101

RPP - Taller de Base de Datos F.- Otros tipos de datos.


UniqueIdentifier. Se utiliza para identificadores nicos. Para generar identificadores nicos debemos utilizar la funcin NEWID().

DECLARE @myuniqueid UNIQUEIDENTIFIER set @myuniqueid = NEWID() print cast(@myuniqueid as varchar(36)) Obtendremos la siguiente salida: 46141D79-102C-4C29-A620-792EA0208637 Sql_Variant.Permite almacenar valores de diferentes tipos de datos. No puede almacena varchar(max), xml, timestamp y tipos de datos definidos por el usuario.

G.- Tipos de datos personalizados.


Transact SQL permite la creacin de tipos de datos personalizados, a trevs de la instruccin CREATE TYPE. Personalmente, desaconsejo el uso de tipos de datos personalizados.

CREATE TYPEMD5FROMCHAR(32) NULL GO DECLARE @miMD5 MD5 set @miMD5 = '0000000000000000000000000000000A' print @miMD5

4 Variables en Transact SQL


Declarar variables es Transact SQL
Una variable es un valor identificado por un nombre (identificador) sobre el que podemos realizar modificaciones. En Transact SQL los identificadores de variables deben comenzar por el carcter @, es decir, el nombre de una variable debe comenzar por @. Para declarar variables en Transact SQL debemos utilizar la palabra clave declare, seguido del identificador y tipo de datos de la variable.

-- Esto es un comentario de linea simple /* Este es un comentario con varias lneas. Conjunto de Lineas. */ declare @nombre varchar(50)-- declare declara una variable -- @nombre es el identificador de la -- variable de tipo varchar set @nombre = 'MANCHESTER UNITED' -- El signo = es un operador -- MANCHESTER UNITED es un literal print @Nombre -- Imprime por pantalla el valor de @nombre. -- No diferencia maysculas ni minsculas

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 16 de 101

RPP - Taller de Base de Datos Asignar variables en Transact SQL


En Transact SQL podemos asignar valores a una variable de varias formas: A travs de la instrunccin set. Utilizando una sentencia SELECT. Realizando un FETCH de un cursor. El siguiente ejemplo muestra como asignar una variable utilizando la instruccin SET.

DECLARE @nombre VARCHAR(100) -- La consulta debe devolver un nico registro SET @nombre = (SELECT nombre FROM CLIENTES WHERE ID = 1) PRINT @nombre El siguiente ejemplo muestra como asignar variables utilizando una sentencia SELECT.

DECLARE @nombre VARCHAR(100), @apellido1 VARCHAR(100), @apellido2 VARCHAR(100)

SELECT @nombre=nombre , @apellido1=Apellido1, @apellido2=Apellido 2 FROM CLIENTES WHERE ID = 1

PRINT @nombre PRINT @apellido1 PRINT @apellido2

Docentes:

Lic. Luis M. Rojas Z.

Lic. Zambrano Arce

Pgina 17 de 101

Lic. Ramiro De la Cruz

Lic. Israel Huaraca

RPP - Taller de Base de Datos


Un punto a tener en cuenta cuando asignamos variables de este modo, es que si la consulta SELECT devuelve ms de un registro, las variables quedarn asignadas con los valores de la ltima fila devuelta. Por ltimo veamos como asignar variables a travs de un cursor.

DECLARE @nombre VARCHAR(100), @apellido1 VARCHAR(100), @apellido2 VARCHAR(100)

DECLARE CURSOR FOR SELECT nombre

CDATOS

Apellido1,

Apellido2 FROM CLIENTES

OPEN CDATOS FETCH CDATOS INTO @nombre, @apellido1, @apellido2

WHILE (@@FETCH_STATUS = 0) BEGIN PRINT @nombre PRINT @apellido1

PRINT @apellido2 FETCH CDATOS INTO @nombre, @apellido1, @apellido2 END

CLOSE CDATOS DEALLOCATE CDATOS Veremos los cursores con ms detalle ms adelante en este tutorial.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 18 de 101

RPP - Taller de Base de Datos

5 Operadores en Transact SQL


La siguiente tabla ilustra los operadores de Transact SQL . Tipo de operador Operador de asignacin = Operadores

Operadores aritmticos + (suma) - (resta) * (multiplicacin) / (divisin) ** (exponente) % (modulo) Operadores relacionales= (igual a) <> (distinto de) o de comparacin != (distinto de) < (menor que) > (mayor que) >= (mayor o igual a) <= (menor o igual a) !> (no mayor a) !< (no menor a) Operadores lgicos AND (y lgico)
NOT (negacion) OR (o lgico) & (AND a nivel de bit) | (OR a nivel de bit) ^ (OR exclusivo a nivel de bit)

Operador de concatenaci n

(Devuelve TRUE si el conjunto completo de comparaciones es TRUE) ANY(Devuelve TRUE si cualquier elemento del conjunto de comparaciones es TRUE) BETWEEN (Devuelve TRUE si el operando est dentro del intervalo)
ALL Otros EXISTS (TRUE si una subconsulta contiene filas) IN (TRUE si el operando est en la lista) LIKE (TRUE si el operando coincide con un patron)

(Invierte el valor de cualquier operador booleano) SOME(Devuelve TRUE si alguna de las comparaciones de un conjunto es TRUE)
NOT

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 19 de 101

RPP - Taller de Base de Datos

6 Estructuras de control en Transact SQL


Estructura condicional IF
La estructura condicional IF permite evaluar una expresin booleana (resultado SI - NO), y ejecutar las operaciones contenidas en el bloque formado por BEGIN END.

IF (<expresion>) BEGIN END ELSEIF (<expresion>) BEGIN END ELSE BEGIN END

Ejemplo de la estructura condicional IF.

DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' IF @diminutivo = 'DJK' BEGIN PRINT 'www.pandalsoft.com' END

ELSE BEGIN PRINT 'Otra Web (peor!)' END

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 20 de 101

RPP - Taller de Base de Datos


La estructura IF admite el uso de subconsultas:

DECLARE @coPais int, @descripcion varchar(255) set @coPais = 5 set @descripcion = 'Espaa' IFEXISTS(SELECT * FROM PAISES WHERE CO_PAIS = @coPais) BEGIN UPDATE PAISES SET DESCRIPCION = @descripcion WHERE CO_PAIS = @coPais END ELSE BEGIN INSERT INTO PAISES (CO_PAIS, DESCRIPCION) VALUES (@coPais, @descripcion)

END

Estructura condicional CASE


La estructura condicional CASE permite evaluar una expresion y devolver un valor u otro. La sintaxis general de case es:

CASE<expresion> WHEN<valor_expresion>THEN<valor_devuelto> WHEN<valor_expresion>THEN<valor_devuelto> ELSE<valor_devuelto> -- Valor por defecto END Ejemplo de CASE.

DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' SET @Web = (CASE @diminutivo WHEN 'DJK' THEN 'www.pandalsoft.com' WHEN 'ALM' THEN 'www.manchester.com' ELSE 'www.united.com' END) PRINT @Web

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 21 de 101

RPP - Taller de Base de Datos


Otra sintaxis de CASE nos permite evaluar diferentes expresiones:

CASE WHEN<expresion> = <valor_expresion>THEN<valor_devuelto> WHEN<expresion> = <valor_expresion>THEN<valor_devuelto> ELSE<valor_devuelto> -- Valor por defecto END El mismo ejemplo aplicando esta sintaxis:

DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' SET @Web = (CASE WHEN @diminutivo = 'DJK' THEN 'www.manchester.com' WHEN @diminutivo = 'ALM' THEN 'www.united.com' ELSE 'www.jhonnypandal.com'

END) PRINT @Web

Otro aspecto muy interesante de CASE es que permite el uso de subconsultas.

DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' SET @Web = (CASE WHEN @diminutivo = 'DJK' THEN (SELECT web FROM WEBS WHERE id=1) WHEN @diminutivo = 'ALM' THEN (SELECT web FROM WEBS WHERE id=2) ELSE 'www.jhonnypandal.com' PRINT @Web END)

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 22 de 101

RPP - Taller de Base de Datos Bucle WHILE


El bucle WHILE se repite mientras expresion se evalue como verdadero. Es el nico tipo de bucle del que dispone Transact SQL.

WHILE<expresion> BEGIN END Un ejemplo del bucle WHILE.

DECLARE @contador int SET @contador = 0 WHILE (@contador < 100) BEGIN SET @contador = @contador + 1 END PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)

Podemos pasar a la siguiente iteracin del bucle utilizando CONTINUE.

DECLARE @contador int SET @contador = 0 WHILE (@contador < 100) BEGIN SET @contador = @contador + 1 IF (@contador % 2 = 0) CONTINUE PRINT 'Iteracion del bucle ' + cast(@contador AS varchar) END El bucle se dejar de repetir con la instruccin BREAK.

DECLARE @contador int SET @contador = 0 WHILE (1 = 1) BEGIN SET @contador = @contador + 1 IF (@contador % 50 = 0) BREAK PRINT 'Iteracion del bucle ' + cast(@contador AS varchar) END

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 23 de 101

RPP - Taller de Base de Datos


Tambin podemos utilizar el bucle WHILE conuntamente con subconsultas.

DECLARE @coRecibo int WHILE EXISTS (SELECT * FROM RECIBOS WHERE PENDIENTE = 'S')-- Ojo, la subconsulta se ejecuta -- una vez por cada iteracion -- del bucle! BEGIN SET @coRecibo = (SELECTTOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = 'S') UPDATE RECIBOS SET PENDIENTE = 'N' WHERE CO_RECIBO = @coRecibo END

Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucin hacia una etiqueta. Fu muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema @@ERROR para el control de errores. Actualmente, se desaconseja el uso GOTO, recomendandose el uso de TRY - CATCH para la gestion de errores.

DECLARE @divisor int, @dividendo int, @resultado int SET @dividendo = 100 SET @divisor = 0 SET @resultado = @dividendo/@divisor IF @@ERROR > 0 GOTO error PRINT 'No hay error' RETURN error: PRINT 'Se ha producido una division por cero'

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 24 de 101

RPP - Taller de Base de Datos

7 Desarrollo de Ejemplos
A.- Programa que ingresa dos nmeros y muestra la suma Declare @Num1 Int ,@Num2 Int,@Total Int Set @Num1 =250 Set @Num2 =550 Set @Total =@Num1 + @Num2 Print @Total B.- Programa que ingrese Nombre De Producto, Precio, Cantidad Y Mostrar Pago Total, IGV Y Pago Neto Declare @NomProd Varchar(50) ,@Precio Money,@Cant Int,@TOTAL Money, @IGV Money,@NETO Money Set @NomProd ='Camiseta Oficial del Manchester United 2011' Set @Precio =250 Set @Cant =10 Set @TOTAL =@Precio * @Cant Set @IGV =@TOTAL * 0.19 Set @NETO =@TOTAL + @IGV Print @TOTAl Print @IGV Print @NETO C.- Programa que ingrese la edad de un alumno y determine si es mayor o menos de edad Declare @Nombre Varchar(50), @Mensaje Varchar(50), @Edad Int Set @Nombre ='Mabel' Set @Edad =12 IF @Edad >=18 Begin Set @Mensaje='MAYOR DE EDAD' End Else Begin Set @Mensaje='MENOR DE EDAD' Print @Mensaje D.- Programa que permita ingresar el nombre del empleado y la venta del mes. Si las ventas superan los 5000 soles. Recibir un pago de 800 soles. Caso contrario solo 400 soles. Declare @Nombre Varchar(50), @Ventas Money, @Pago Money Set @Nombre ='Fabio Da Silva' Set @Ventas=5580.25 IF @Ventas >5000 Begin Set @Pago =800 End Else Begin Set @Pago =400 End Print @Pago

End

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 25 de 101

RPP - Taller de Base de Datos


E.- Programa que ingrese el promedio de un alumno. Su condicion sera: Mayor de 15 EXELENTE, mayor de 10 APROBADO, Mayor de 5 DESAPROBADO, los demas PESIMO Declare @Nombre Varchar(50), @Promedio Int, @Condicion Varchar(30) Set @Nombre ='Alex Ferguson' Set @Promedio=15 IF @Promedio >15 Begin Set @Condicion ='EXELENTE' End Else If @Promedio >10 Begin Set @Condicion ='APROBADO' End Else If @Promedio >5 Begin Set @Condicion ='DESAPROBADO' End Else Begin Set @Condicion ='PESIMO' End Print @Condicion F.- Programa que ingrese el promedio de un alumno. Su condicin ser: Mayor de 15 EXELENTE, mayor de 10 APROBADO, Mayor de 5 DESAPROBADO, los dems PESIMO Declare @Nombre Varchar(50), @Promedio Int, @Condicion Varchar(30) Set @Nombre =JHONNY PANDAL POMA' Set @Promedio=15 Set @Condicion=(CASE WHEN @Promedio >15 THEN 'EXELENTE' WHEN @Promedio >10 THEN 'APROBADO' WHEN @Promedio >5 THEN 'DESAPROBADO' ELSE 'PESIMO' END) PRINT 'el alumno ' + @Nombre + ' Esta ' + @Condicion G.- Programa que ingrese el area de trabajo del empleado y defina su sueldo. Sabiendo que OBRERO gana 500, EMPLEADO gana 900 y GERENTE 2500 Declare @Nombre Varchar(50), @Sueldo Money, @Area Varchar(30) Set @Nombre =Ryan Giggs' Set @Area='OBRERO' Set @Sueldo=(CASE @Area WHEN 'OBRERO' THEN 500 WHEN 'EMPLEADO' THEN 900 WHEN 'GERENTE' THEN 2500 END) PRINT 'el SR. ' + @Nombre + ' Recibe S/. ' + CAST(@Sueldo AS VARCHAR(50))

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 26 de 101

RPP - Taller de Base de Datos

Propuesto Practico 02
1. EDAD.VB Desarrollar un programa que ingrese el nombre y la edad de un alumno y le muestre como mensaje. Si dicho alumno es MAYOR DE EDAD o MENOR DE EDAD AULA.VB Desarrollar un programa que ingrese el numero de aula, fecha inicio, fecha termino, turno y cantidad de alumno matriculados. Si el aula programada tiene mas de 15 alumnos el programa debe mostrar un mensaje de ACTIVO caso contrario INACTIVO. VENTAS.VB Desarrolla un programa que ingrese las ventas de un empleado. Si sus ventas superan los 10000 mensuales. Se mostrara un mensaje de EMPLEADO DEL MES caso contrario EMPLEADO NORMAL. ALUMNO.VB Desarrolle un programa que ingrese el nombre y el promedio de un alumno. El programa debe mostrar un mensajes indicando si el alumno esta APROBADO o DESAPROBADO TIPO.VB Desarrollar un programa que ingrese el nombre, precio y tipo (NACIONAL o IMPORTADO) del producto. Los productos nacionales reciben un incremento de S/.100 y los importados S/. 300 soles. El programa debe mostrar: Descuento y pago neto. CARGO.VB Desarrollar un programa que ingrese el nombre, apellido, edad, sexo y cargo de un empleado. Su sueldo depende del cargo que ocupe. Detalles:(GERENTE gana S/. 2500), (OBRERO gana S/. 500), (VENTAS gana S/. 2500) otro cargo diferente a los anteriores ganara S/. 350.00 PROMEDIO.VB Desarrolla un Programa que ingrese el nombre y las 4 notas de un alumno. El programa debe mostrar el promedio y el acumulado de notas. ADEMAS El alumno mostrara un mensaje segn el promedio que haya sacado. (PROM > 20 promedio invalido), (PROM > 14 alumno excelente), (PROM > 10 alumno aprobado), CASO CONTRARIO Desaprobado. BUSCADOR.VB Desarrolla un programa que ingrese el cdigo de un alumno y te muestre su nombre, telfono y direccin. DETALLE: (A001, Juan Perez, 450-9600, Jr.Ica 1200) , (A002, Nadia Ivette, 478-9655, Jr.puno 478), (A003, Joce Ramirez, 987-989955, Calle Bahia 175), (A004, Diana Robles, 785-9655, Calle Los Pinos 125), Si ingresaras un cdigo incorrecto mostrara una mensaje de ERROR DE INGRESO

2.

3.

4.

5.

6.

7.

8.

Es importante repetir. que es muy importante el aprendizaje de este tipo de programacin. Ya que ser necesario para la comprensin de los siguientes captulos

Fecha de ENTREGA:

Pgina 27 de 101

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

RPP - Taller de Base de Datos

CAPITULO 03
Objetivos.- administrar y ampliar el tamao de una base de datos. Adems de normalizar la misma. Haciendo uso de restricciones que permiten datos correctos

1 Archivos de Base de Datos 2 Creacin de Bases de Datos 3 Ampliando el Tamao una Base De Datos 4 Creacin de Tablas 5 Integridad de Datos de una Tabla 6 Integridad referencial FOREIGN KEY 7 Generando el cdigo de CURSO-INSTRUCTOR 8 Generando el cdigo de CARGO-EMPLEADO-DISTRITO 9 Creacin de Diagrama Propuesto Practico 03 36 37

29 29 30 31 31 33 34 35

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 28 de 101

RPP - Taller de Base de Datos

1 Archivos de Base de Datos


Archivos de base de datos Las bases de datos de SQL Server utilizan tres tipos de archivos: Archivos de datos principales El archivo de datos principal es el punto de partida de la base de datos y apunta a los otros archivos de la base de datos. Cada base de datos tiene un archivo de datos principal. La extensin recomendada para los nombres de archivos de datos principales es .mdf. Archivos de datos secundarios Los archivos de datos secundarios son todos los archivos de datos menos el archivo de datos principal. Puede que algunas bases de datos no tengan archivos de datos secundarios, mientras que otras pueden tener varios archivos de datos secundarios. La extensin de nombre de archivo recomendada para los archivos de datos secundarios es .ndf. Archivos de registro Los archivos de registro almacenan toda la informacin de registro que se utiliza para recuperar la base de datos. Como mnimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios. La extensin de nombre de archivo recomendada para los archivos de registro es .ldf.

2 Creacin de Bases de Datos


A una lnea
Create Database Empresa Con esta lnea estas creando una base de datos de nombre empresa dentro de la carpeta DATA

Con Atributos configurados para cada archivo Create Database Apple ON (Name=Apple_Dat, FileName='C:\Apple\Apple_Dat.MDF', Size=5, Maxsize=10, Filegrowth=2) LOG ON (Name=Apple_Log, FileName='C:\Apple\Apple_Log.LDF', Size=2, Maxsize=5, Filegrowth=1)
Detalles: la base de datos esta creado sobre una carpeta APPLE en disco local C. Name.- especifica el nombre del archivo Filename.- determinas la ubicacin fsica del archivo Size.- espacio mnimo que debe tener el archivo al ser construido Maxsize.- espacio mximo que puede almacenar dicho archivo Filegrowth.- el incremente de crecimiento del archivo a partir de su tamao mnimo hasta su tamao mximo

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 29 de 101

RPP - Taller de Base de Datos

3 Ampliando el Tamao una Base De Datos


Alter Database Apple Add File (Name=Apple_Dat1, FileName='C:\Apple\Apple_Dat1.NDF', Size=3, Maxsize=15, Filegrowth=3) Alter Database Apple Add File (Name=Apple_Dat2, FileName='C:\Apple\Apple_Dat2.NDF', Size=3, Maxsize=20, Filegrowth=4) Alter Database Apple Add File (Name=Apple_Dat3, FileName='C:\Apple\Apple_Dat3.NDF', Size=3, Maxsize=7, Filegrowth=1) Alter Database Apple Add File (Name=Apple_Log1, FileName='C:\Apple\Apple_Log1.LDF', Size=3, Maxsize=5, Filegrowth=1), (Name=Apple_Log2, FileName='C:\Apple\Apple_Log2.LDF', Size=3, Maxsize=15, Filegrowth=1)

Archivos de datos Apple_Dat1 con un tamao de 15 Mb

Archivos de datos Apple_Dat2 con un tamao de 20 Mb

Archivos de datos Apple_Dat3 con un tamao de 7 Mb

Grupo de Archivos Lgicos de 5mb y 15 mb

Verificando los archivos Sp_Helpdb Apple

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 30 de 101

RPP - Taller de Base de Datos

4 Creacion de Tablas
Una de las primeras restrcciones que uno aplica dentro de una tabla son los tipos de datos. Al crear una tabla uno debe especificar un tipo de dato relacionado con lo que almacenara dicho campo. Ej. NOMBRE debe almacenar un varchar.

5 Integridad de Datos de una Tabla


Restricciones PRIMARY KEY Una tabla suele tener una columna o una combinacin de columnas cuyos valores identifican de forma nica cada fila de la tabla. Estas columnas se denominan claves principales de la tabla y exigen la integridad de entidad de la tabla. Puede crear una clave principal mediante la definicin de una restriccin PRIMARY KEY cuando cree o modifique una tabla. Este campo no acepta valores NULL por defecto.
Imposible ingresar 2 productos con mismo cdigo.

ERROR DE USUARIO

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 31 de 101

RPP - Taller de Base de Datos


Restricciones Null o Not Null.- NOT NULL Determina que el campo tenga datos de manera obligatoria. NULL por el contrario null admite campos vacos. Para hacer uso de estas restricciones debe contar con un anlisis y as conseguir unos datos consistentes.

Restricciones Unique.-Solo admit5e valores nicos dentro de un campo. Una tabla puede contar con muchos campos con restriccin UNIQUE.

Restricciones Check.- Nos permite aplicar una regla de validacin dentro de un campos. Es decir una regla de datos que podran ingresar dentro de un campo. Ej. Campo EDAD solo admite valores >=18 debido a que los clientes deben ser mayores de edad..

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 32 de 101

RPP - Taller de Base de Datos


Definiciones DEFAULT.- Los valores por defecto indican que valor ser guardado en una columna si no se especifica un valor para la columna cuando se inserta una fila. Las definiciones DEFAULT pueden ser creadas cuando la tabla es creada (como parte de la definicin de la tabla) o pueden ser agregadas a una tabla existente. Cada columna en una tabla puede contener una sola definicin DEFAULT.

6 Integridad referencial FOREIGN KEY


La integridad referencial preserva las relaciones definidas entre tablas, cuando se entran, modifican o borran registros. En SQL Server, la integridad referencial esta basada en interrelaciones entre claves ajenas y claves primarias o entre claves ajenas y claves nicas (a travs de la restricciones FOREIGN KEY y CHECK). La integridad referencial asegura que los valores de las claves son consistentes a travs de distintas tablas. Tal consistencia requiere que no existan referencia a valores inexistentes y que, si un valor clave cambia, todas las referencias cambien consistentemente a lo largo de la base de datos. Cuando se fuerza la integridad referencial, SQL Server previene a los usuarios de realizar lo siguiente: Agregar registros a una tabla relacionada si no hay registros asociados en la correspondiente tabla primaria. Cambiar valores en la tabla primaria que resulten en registros hurfanos en las tablas relacionadas. Borrar registros desde una tabla primaria si existen registros relacionados en la tabla ajena.

EJEMPLO: Para este ejemplo crearemos una tabla cursos y la tabla Instructor.Estas tablas estn relacionadas por un campo comn CODIGO de la tabla cursos y CURSO de la tabla Instructor.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 33 de 101

RPP - Taller de Base de Datos

7 Generando el cdigo de CURSO-INSTRUCTOR


Comenzamos creando la tabla cursos e ingresando 3 registros. Luego creamos la tabla instructor y mediante FOREIGN KEY establecemos la relacin con la tabla CURSOS ya creado anteriormente. Seguidamente. Ingresamos registros en la tabla INSTRUCTOR. Pero recordando que el ltimo campo hace uso de datos externos para asegurar la integridad de datos.

Create Table Cursos (Codigo Char(5) Primary key, Nombre Varchar(50)) Go Insert Into Cursos Values('C0001','Sql Server Administrator') Insert Into Cursos Values('C0002','Visual Basic 2008 - N Layer') Insert Into Cursos Values('C0003','Analisis de Sistemas POO') Go Create Table Instructor (Codigo Char(5) Primary key, Nombre Varchar(50), DNI Varchar(8), Curso Char(5) Constraint FK_CursoInstr Foreign Key(Curso) References Cursos(Codigo)) Go Insert Into Instructor values ('P0001','Jhonny Pandal','10606388','C0001') Insert Into Instructor values ('P0002','Juan Salazar','52362200','C0001') Insert Into Instructor values ('P0003','Ernesto Bonifaz','11225125','C0002') Insert Into Instructor values ('P0004','Nemanja Vidic','00006388','C0002') Insert Into Instructor values ('P0005','Poul Scholes','12306388','C0002') Insert Into Instructor values ('P0006','Park Jing Sung','88559960','C0002') Insert Into Instructor values ('P0007','Rafael Da Silva','15202111','C0003') Go Select*From Cursos Select*From Instructor Que sucede al insertar estos registros? Y como se soluciona? Ingresa correctamente el script y obtendrs este resultado. PULSA

LUEGOIngresar los siguientes datos a la Tabla INSTRUCTOR


P0008 Gabriel Milito 12548544 C0008 P0009 Dayana Rose 25632210 C0025

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 34 de 101

RPP - Taller de Base de Datos

8 Generando el cdigo de CARGO-EMPLEADO-DISTRITO


Desarrollamos el script de estas 3 tablas relacionadas. Analizando que un empleado vives en un distrito y asume un cargo. TABLA: CARGO

Create Table Cargo (CodCargo Char(5) Primary key, Nombre Varchar(30) Not Null Constraint Un_Nombre Unique) Go Insert Into Cargo Values('CAR01','Vigilante') Insert Into Cargo Values('CAR02','Ventas') Insert Into Cargo Values('CAR03','Gerente') Go SELECT*FROM Cargo Go TABLA: DISTRITO Create Table Distrito (CodDis Char(5) Primary Key, Nombre Varchar(30) Not Null Constraint Un_NombreDIS Unique) GO Insert Into Distrito Values('DIS01','Chosica') Insert Into Distrito Values('DIS02','Chaclacayo') Insert Into Distrito Values('DIS03','Santa Anita') GO SELECT*FROM Distrito Creacin de Tabla Hijo EMPLEADO Create Table Empleado (CodEmp Char(5) Primary key, NomEmp Varchar(50) Not Null, Edad SmallInt Not Null Constraint Chk_Edad Check(Edad>=18 and Edad<=35), Dni Varchar(8) Not Null Constraint unq_Dni Unique, FechaC Datetime Not Null Constraint Dfl_Fecha Default(Getdate()), Email Varchar(50) Null, TlFono Varchar(15) Null, DISTRITO Char(5) Not Null Constraint FK_EmpDis Foreign Key(DISTRITO) references Distrito(CodDis), CARGO Char(5) Not Null Constraint FK_EmpCar Foreign Key(CARGO) references Cargo(CodCargo) ) GO Insert Into Empleado Values ('E01','Jessica',21,'10603522','12/02/2009','Jess@yahoo.es', '449-9655','DIS02','CAR01') Insert Into Empleado Values ('E02','Carlos',35,'55663522','02/02/2004','car@yahoo.es', '895-9655','DIS01','CAR03')

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 35 de 101

RPP - Taller de Base de Datos

Luego debes ingresar estos registros en la tabla EMPLEADO. De tal manera que quede al final de esta manera:

Luego debes Crear el Diagrama de Datos de las 3 tablas.

9 Creacin de Diagrama
a) Seleccionar Diagramas de base de datos

b) Clic en Nuevo diagrama de base de datos c) Seleccionar y AGREGAR las tablas Cursos, Cargo y Empleado d) Clic en CERRAR

Para el desarrollo de este proyecto de 3 tablas se utilizaron integridad de datos para cada una de las tablas involucradas. No debes olvidar que las tablas tiene campos comunes y que tiene el mimo tipo de dato en cada CAMPO no olvidarse. Adems de haber poblado de datos de forma adecuada. Ahora solo se necesita la prctica de parte tuya.

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 36 de 101

RPP - Taller de Base de Datos

Propuesto Practico 03
Desarrollo de la base de datos UNIVERSIDAD

Desarrollo de la Base de Datos FERRARI

Fecha de Entrega:

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 37 de 101

RPP - Taller de Base de Datos

CAPITULO 04
Objetivos.- aprender hacer uso de las funciones de SQL server. Para obtener un mejor resultado con nuestros datos. Importante saber usar estas funciones No olvidarse

1 Funciones de cadena en SQL Server 2 Funciones de Fecha 3 Funciones Matemticas 4 Funciones de Agregado 5 Otras Funciones Importantes Propuesto Practico 04 41

39 40

41 42 43

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 38 de 101

RPP - Taller de Base de Datos

1 Funciones de cadena en SQL Server


Funcin ASCII. - Descripcin: Retorna el valor del cdigo ASCII. - Sintaxis: ASCII (character) - Ejemplos:
SELECT ASCII('a') - Resultado = 97 SELECT ASCII('b') - Resultado = 98 SELECT ASCII('c') - Resultado = 99 SELECT ASCII('A') - Resultado = 65 SELECT ASCII('B') - Resultado = 66 SELECT ASCII('C') - Resultado = 67 SELECT ASCII('1') - Resultado = 49 SELECT ASCII('2') - Resultado = 50 SELECT ASCII('3') - Resultado = 51 SELECT ASCII('4') - Resultado = 52 SELECT ASCII('5') - Resultado = 53

Funcin RIGHT - Descripcin: Retorna la parte derecha de una cadena con el nmero Especfico de caracteres. - Sintaxis: RIGHT( string , integer) - Ejemplo:
SELECT RIGHT('Jhonny Pandalsoft', 6) -- Resultado = alsoft SELECT RIGHT('JhonnyPandal',6) -- Resultado = Pandal

Funcin REPLICATE - Descripcin: Repite una cadena por un nmero especfico de veces. - Sintaxis: REPLICATE (string, integer) - Ejemplo:
SELECT REPLICATE('JPP', 2) -- Resultado = JPPJPP

Funcin SPACE. _ Descripcin: Retorna los espacios en SQL Query (Puedes especificar el tamao del especio). - Sintaxis: SPACE ( integer) - Ejemplos:
SELECT ('Manchester') + SPACE(10) + ('United') -- Resultado = ManchesterUnited

Funcin SUBSTRING - Descripcin: Retorna parte de una cadena. - Sintaxis: SUBSTRING ( string, startindex , length ) - Ejemplo:
SELECT SUBSTRING('SQLServer', 4, 3) -- Resultado = Ser

Funcin REPLACE - Descripcin: Reemplaza todas las ocurrencias de la cadena 2 y la cadena 1 con la cadena 3. - Sintaxis: REPLACE ( 'string1' , 'string2' , 'string3' ) - Ejemplos:
SELECT REPLACE('All Function' , 'All', 'SQL') -- Resultado = SQL Function

Funcin LEN - Descripcin: Retorna el nmero de caracteres de una cadena. -Sintaxis: LEN( string) - Ejemplo:
SELECT LEN('DIOSTEAMA') -- Resultado = 9

Funcin STUFF - Descripcin: Elimina una longitud especfica de caracteres e Inserta una cadena en un ndice de inicio especifico. - Sintaxis: STUFF ( string1 , startindex , length , string2 ) - Ejemplo:
SELECT STUFF('SqlTutorial', 4, 6, 'Function') -- Resultado = SqlFunctional SELECT STUFF('GoodMorning', 5, 3, 'good') -- Resultado = Goodgoodning

Funcin REVERSE - Descripcin: Convierte a una cadena invertida. - Sintaxis: REVERSE( string) - Ejemplo:
SELECT REVERSE('Pandal') -- Resultado = ladnaP

Funcin LEFT - Descripcin: Retorna la parte izquierda de una - cadena con el nmero especfico de caracteres. - Sintaxis: LEFT ( string , integer) Ejemplo:
SELECT LEFT('ManchesterCampeon', 6) -- Resultado = Manche SELECT LEFT('Megadeth',6) -- Resultado = Megade

Funcin UNICODE - Descripcin: Retorna el valor entero del estndar unicode. - Sintaxis: UNICODE( char) - Ejemplo:
SELECT UNICODE('SqlServer') -- Resultado = 83 (it take first character) SELECT UNICODE('S') -- Resultado = 83

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

101 Lic. Zambrano Arce Lic. Israel Huaraca

Pgina

39

de

RPP - Taller de Base de Datos

FuncinLOWER - Descripcin: Convierte una cadena a minscula. - Sintaxis: LOWER( string ) - Ejemplo
SELECT LOWER('PandalSoft') -- Resultado =pandalsoft

Funcin LTRIM - Descripcin: Retorna una cadena despus de eliminar los espacios de la izquierda. - Sintaxis: LTRIM( string ) - Ejemplo:
SELECT LTRIM(' sqlserver') -- Resultado = 'sqlserver' -- (Remove left side space or blanks)

Funcin UPPER - Descripcin: Convierte una cadena a mayscula. - Sintaxis: UPPER( string ) - Ejemplo:
- SELECT UPPER('sistemasjhonny') -- Resultado = SISTEMASJHONNY

Funcin RTRIM - Descripcin: Retorna una cadena despus de eliminar los espacios de la derecha. - Sintaxis: RTRIM( string ) - Ejemplo:
SELECT RTRIM('Prof.Pandal ')

-- Resultado = 'Prof.Pandal' -- (Remove right side space or blanks)

2 Funciones de Fecha
DATEADD Devuelve un valor datetime nuevo que se basa en la suma de un intervalo a la fecha especificada. Ejemplo
DECLARE @DateNow DATETIME SET @DateNow='08/10/1980' SELECT DATEADD(Year, 15, @DateNow) AS NewDate SELECT DATENAME(millisecond , GETDATE())

DATEPART Devuelve un entero que representa la parte de la fecha Especificada de la fecha indicada.. Ejemplo
SELECT DATEPART(year, '2007-06-01') AS "Month" SELECT DATEPART(month, '2007-06-01') AS "Month" SELECT DATEPART(day, '2007-06-01') AS "Day" SELECT DATEPART(dayofyear, '2007-06-01') AS "Dy" SELECT DATEPART(weekday, '2007-06-01') AS "Weeday"

DATEDIFF Devuelve el nmero de lmites de fecha y hora que hay entre dos fechas especificadas. Ejemplos
DECLARE @DateNow DATETIME SET @DateNow='08/10/1980' SELECT SELECT SELECT SELECT SELECT SELECT SELECT DATEADD(Year, 15, @DateNow) AS NewDate DATEADD(Month, 3, @DateNow) AS NewDate DATEADD(dayofyear,3, @DateNow) AS NewDate DATEADD(Day, 3, @DateNow) AS NewDate DATEADD(Hour, 3, @DateNow) AS NewDate DATEADD(minute, 3, @DateNow) AS NewDate DATEADD(second, 3, @DateNow) AS NewDate

DAY Devuelve un entero que representa la parte del da de la fecha especificada. Ejemplo
SELECT DAY('02/12/2004') AS "DIA"

GETDATE Devuelve la fecha y hora actuales del sistema en el formato Interno estndar de Microsoft SQL Server para los valores datetime. Ejemplo
SELECT GETDATE() as "HOY ES"

DATENAME Devuelve una cadena de caracteres que representa la parte De la fecha especificada de la fecha especificada. Ejemplos
SELECT DATENAME(month, GETDATE()) SELECT DATENAME(dayofyear, GETDATE()) SELECT DATENAME(day, GETDATE()) SELECT DATENAME(week, GETDATE()) SELECT DATENAME(hour, GETDATE()) SELECT DATENAME(minute, GETDATE()) SELECT DATENAME(second , GETDATE())

MONTH Devuelve un entero que representa el mes de una fecha Especificada. Ejemplo
SELECT MONTH('02/12/2004') AS "MES"

YEAR Devuelve un entero que representa la parte de ao de la fecha Especificada. Ejemplo


SELECT YEAR('02/12/2004') AS "AO"

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

101 Lic. Zambrano Arce Lic. Israel Huaraca

Pgina

40

de

RPP - Taller de Base de Datos

3 Funciones Matematicas
RAND (Transact-SQL) Es una expresin de tipo entero (tinyint, smallint o int) que proporciona El valor de inicializacin. Si no se especifica seed, SQL Server Database Engine (Motor de base de datos de SQL Server) asigna un valor de Inicializacin de forma aleatoria. Para un valor de inicializacin especificado, El resultado devuelto es siempre el mismo. Ejemplos En el siguiente ejemplo se producen cuatro nmeros aleatorios diferentes, Generados con la funcin RAND.
DECLARE @Numero SmallInt ,@Resultado smallint; SET @Numero = 1; WHILE @Numero < 5 BEGIN Set @Resultado =(RAND()*100) SET @Numero = @Numero + 1 Print @Resultado END GO

ACOS (Transact-SQL) Funcin matemtica que devuelve el ngulo, en radianes, cuyo coseno es la expresin float especificada; tambin se denomina arco coseno. Ejemplos En el ejemplo siguiente se devuelve el valor ACOS del nmero especificado.
DECLARE @N_COSENO float; SET @N_COSENO = -1.0; SELECT 'Coseno Es:' + CONVERT(varchar, ACOS(@N_COSENO))

SQRT (Transact-SQL) Devuelve la raz cuadrada del valor de tipo flotante especificado. Ejemplos En el ejemplo siguiente se devuelve la raz cuadrada de los nmeros Comprendidos entre 1.00 y 10.00.
DECLARE @myvalue float; SET @myvalue = 1.00; WHILE @myvalue < 10.00 BEGIN SELECT SQRT(@myvalue); SET @myvalue = @myvalue + 1 END GO

4 Funciones de Agregado
Las funciones de agregado realizan un clculo sobre un conjunto de valores y devuelven un solo valor. Si exceptuamos la funcin COUNT, todas las funciones de agregado ignoran los valores NULL. Las funciones de agregado se suelen utilizar con la clusula GROUP BY de la instruccin SELECT. Las funciones de agregado slo se pueden utilizar como expresiones en:

La lista de seleccin de una instruccin SELECT (en una subconsulta o en la consulta externa). Clusulas COMPUTE o COMPUTE BY. Clusulas HAVING. Transact-SQL proporciona las siguientes funciones de agregado: NOTA: Para ejecutar los ejemplos debe crear la tabla VENDEDORES Con los siguientes registros:

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

Lic. Zambrano Arce Lic. Israel Huaraca

Pgina 41 de 101

RPP - Taller de Base de Datos


AVG (Transact-SQL) Devuelve el promedio de los valores de un grupo. Los valores NULL Se pasan por alto. Puede ir seguida de la clusula OVER. Ejemplo Mostrar en promedio de ventas de los vendedores estables COUNT (Transact-SQL) Permite contar el nmero de elementos de un grupo. Normalmente Usamos esta funcin para obtener un valor entero Ejemplo Mostrar la mayor y menor venta de los vendedores

MIN Y MAX (Transact-SQL) Min Devuelve el valor mnimo de una expresin. Max devuelve el valor Mximo de una expresin Ejemplo Mostrar la mayor y menor venta de los vendedores

5 Otras Funciones Importantes


SQL server cuenta con los siguientes tipo de funciones queharemos uso y debemos conocer con la iniciativa de investigacin del estudiante. Funciones de conjuntos de filas Funciones de categora Funciones de configuracin Funciones del cursor Funcinmatemtica Funciones de metadatos Funciones de seguridad Funciones del sistema Funciones estadsticas del sistema Funciones de texto e imagen Aqu algunas que deberemos usar:
@@IDENTITY (Transact-SQL) Se trata de una funcin del sistema que devuelve el ltimo valor de identidad insertado. @@IDENTITY ISDATE (Transact-SQL) Devuelve 1 si expression es un valor date, time o datetime vlido; de lo contrario, devuelve 0. ISNULL (Transact-SQL) Reemplaza NULL con el valor de reemplazo especificado. ISNULL ( check_expression , replacement_value ) ISNUMERIC (Transact-SQL) Determina si una expresin es de tipo numrico vlido. CAST y CONVERT (Transact-SQL) Convierte una expresin de un tipo de datos en otro.

VAR (Transact-SQL) Devuelve la varianza estadstica de todos los valores de la expresin Especificada. Ejemplo Este ejemplo devuelve la varianza para todos los valores de Visitas De la tabla Vendedores

Docentes:

Lic. Luis M. Rojas Z. Lic. Ramiro De la Cruz

101 Lic. Zambrano Arce Lic. Israel Huaraca

Pgina

42

de

RPP - Taller de Base de Datos I

Propuesto Practico 04
Segn lo aprendido ahora debe resolver las siguientes consultas N-100 a) Consulta que muestre INSTRUCTOR como resultado ROTCURTSNI

b) Consulta que muestre los 3 ltimosdgitos de la palabra MICROSOFT

c) Consulta que muestre los 2 primero dgitos de tu nombre

d) Consulta que duplique tu nombre 3 veces

e) Consulta que muestre la cantidad de dgitos de tus apellidos y nombres

f)

Consulta que muestre el nombre de tu distrito en MAYUSCULA

g) Consulta que muestre la fecha 15/03/2001 adicionndole 3 meses = 15/06/2001

h) Consulta que muestre la fecha 15/03/2001 adicionndole 15 aos = 15/06/2016

i)

Consulta que muestre el mes de 12/14/2011

j)

Consulta que muestre el promedio de visitas que tuvieron los contratados

k) Consulta que muestre la menor visita

l)

Consulta que muestre la cantidad de estables que hayan tenido ms de 30 visitas

m) Consulta que muestre a los vendedores que hayan tengan ventas superiores al promedio

Fecha de Entrega:
Docentes: Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz Lic. Zambrano Arce, Julio Lic. Israel Huaraca Pgina 43 de 101

RPP - Taller de Base de Datos I

CAPITULO 05
Objetivos.- es importante saber gestionar los datos de un DB. En esta seccin debemos aprender consultas que nos permitan hacer uso de los datos

1 DML, Lenguaje de Manipulacin de Datos - SELECT 2 Lenguaje de manipulacin de datos (I) - INSERT 3 Consultas N-100 - WARDS SUPERMARKET 4 Consulta de Datos I 5 Consultas de Actualizacin I - UPDATE 6 Consultas de Actualizacin II 7 Consultas de Actualizacin III 8 Consulta de Eliminacin - DELETE Propuesto Practico 05 45

45

47 49 51 52 53 55 61

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 44 de 101

RPP - Taller de Base de Datos I

1 DML, Lenguaje de Manipulacin de Datos


El Lenguaje de Manipulacin de Datos (DML, por sus siglas en ingls) se utiliza para obtener, insertar y modificar informacin de una base de datos. INSERT.- El comando INSERT en SQL es utilizado para agregar nuevos registros a una tabla existente. Tomando como ejemplo la tabla "personal", imaginemos que el departamento de recursos humanos necesita agregar un nuevo empleado a la base de datos. Se podra utilizar un comando similar al siguiente: Note que hay cuatro valores especficos para el registro. Estos corresponden a los atributos de la tabla en el orden en que fueron definidos: nombre, apellido, empleado_id y salario. Ejemplo

LUEGO Debes ingresar los registros restantes

2 Lenguaje de manipulacin de datos (I)


Consulta de datos. El proceso ms importante que podemos llevar a cabo en una base de datos es la consulta de los datos. De nada servira una base de datos si no pudiramos consultarla. Es adems la operacin que efectuaremos con mayor frecuencia. Para consultar la informacin SQL pone a nuestra disposicin la sentencia SELECT. La sentencia SELECT La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos. El formato de la sentencia select es: Veamos por partes que quiere decir cada una de las partes que conforman la sentencia. Significado Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de seleccin. Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele especificarse nunca. Indica que queremos seleccionar slo los valores distintos. Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista ms de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas

SELECT ALL casi DISTINCT FROM combinadas

es necesario aplicar una condicin de combinacin a travs de una clusula WHERE. WHERE Especifica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Admiten los operadores lgicos AND y OR. GROUP BY Especifica la agrupacin que se da a los datos. Se usa siempre en combinacin con funciones agregadas.

Pgina 45 de 101

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

RPP - Taller de Base de Datos I


HAVING

Especifica una condicin que debe cumplirse para los datosEspecfica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condicin debe estar referida a los campos contenidos en ella. ORDER BY Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC. Ejemplo

La clusula WHERE
La clusula WHERE es la instruccin que nos permite filtrar el resultado de una sentencia SELECT. Habitualmente no deseamos obtener toda la informacin existente en la tabla, sino que queremos obtener slo la informacin que nos resulte til es ese momento. La clusula WHERE filtra los datos antes de ser devueltos por la consulta.
MOSTRAR TODOS LOS REGISTROS

Select * From Empleado


FILTRAR CAMPOS

Lic. Ramiro De la Cruz

Select id_Empleado,Nombre From Empleado


FILTRAR Y AGRUPAR POR NOMBRE

Select id_Empleado,Nombre From Empleado Order By Nombre


FILTRAR A LOS EMPLEADOS QUE GANEN DE 5000 A MS

Select * From Empleado Where Salario>=5000


FILTRAR A LOS EMPLEADOS QUE GANEN DE 3000 A MENOS

Select * From Empleado Where Salario<=3000


FILTRAR A LOS EMPLEADOS QUE GANEN EN UN RANGO DE 2000 A 3000

Select * From Empleado Where Salario>=2000 and Salario<=3000


FILTRAR DONDE NOMBRE INICIE CON LETRA C

Select * From Empleado Where Nombre LIKE 'C%'

Docentes:

Lic. Luis M. Rojas Ziga

FILTRAR DONDE NOMBRE TERMINE CON LETRA A

Select * From Empleado Where Nombre LIKE '%A'


FILTRAR EMPLEADOS SIN SALARIO

Select * From Empleado Where Salario is null


CONTAR CANT. DE EMPLEADOS

Select COUNT(*) From Empleado


MOSTRAR PROMEDIO DE SALARIO

Select AVG(Salario) From Empleado


MOSTRAR EMPLEADOS CON SALARIO MAYOR AL PROMEDIO

Select * From Empleado Where Salario> (Select AVG(Salario) From Empleado)


MOSTRAR MAYOR SALARIO

Select Max(Salario) AS ALTO From Empleado


MOSTRAR MENOR SALARIO

Select Min(Salario) AS BAJO From Empleado

Pgina 46 de 101 Lic. Zambrano Arce, Julio Lic. Israel Huaraca

RPP - Taller de Base de Datos I

3 Consultas N-100
Para aprender a realizar estas consultas se requiere de la base de datos WardsSupermarket. La cual ser facilitado por tu Instructor. Mr. Pandal Poma JHONNY Ahora debes Adjuntar o Restaurar a tu servidor y a practicar sin dudarlo =)

Diagrama de la base de datos

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 47 de 101

RPP - Taller de Base de Datos I

Estructura de Cada Tabla


Tabla: CATEGORIASTabla: CLIENTES

Tabla: COMPAIASDEENVIOS

Tabla: DETALLESDEPEDIDOSTabla: EMPLEADOS

Tabla: PEDIDOS

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 48 de 101

RPP - Taller de Base de Datos I

Tabla: PRODUCTOS

Tabla: PROVEEDORES

4 Consulta de Datos I
01 Mostrar los productos que inicien su nombre con la letra A

Resultado:

02 Mostrar Cdigo, Nombre y Precio de Productos. Usar ALIAS

Resultado:

03 Mostrar los productos que inicien su nombre con la letra A y C

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 49 de 101

RPP - Taller de Base de Datos I


04 Mostrar los productos donde el intervalo de precio sea de 12 a 15 soles Select IdProducto,NomProducto,PrecioUnidad From dbo.Productos Where PrecioUnidad >=12 And PrecioUnidad <=15 05 Mostrar los productos donde el precio sea de 70 soles a ms Select IdProducto,NomProducto,PrecioUnidad From dbo.Productos Where PrecioUnidad >=70 06 Mostrar los productos donde el precio sea menor igual a 5 soles Select IdProducto,NomProducto,PrecioUnidad From dbo.Productos Where PrecioUnidad <=5 07 Mostrar los productos donde intervalo de precio sea de 30 a 35 soles USAR FUNCION Select IdProducto,NomProducto,PrecioUnidad From dbo.Productos Where PrecioUnidad Between 30 and 35 08 Mostrar los productos donde el proveedor tenga el cdigo 1 Select IdProducto,NomProducto,PrecioUnidad,IdProveedor From dbo.Productos Where IdProveedor=1 09 Mostrar los productos donde el proveedor tenga el cdigo 1 y 5 Select IdProducto,NomProducto,PrecioUnidad,IdProveedor From dbo.Productos Where IdProveedor=1 or IdProveedor=5 10 Mostrar los productos donde el proveedor tenga el cdigo 1, 3 y 5 USAR FUNCION Select IdProducto,NomProducto,PrecioUnidad,IdProveedor From dbo.Productos Where IdProveedor IN(1,3,5) 11 Mostrar los productos activos Select NomProducto,Stock,Suspendido From dbo.Productos Where Suspendido=1 12 Mostrar los productos donde el nombre tenga en su interior la palabra ROD Select NomProducto From dbo.Productos Where NomProducto LIKE '%Rod%' 13 Mostrar el producto de mayor precio Select MAX(stock)AS MAYOR From Productos 14 Mostrar los productos de la categora de cdigo 7 Select NomProducto,IdCategoria AS [Codigo CAT] From Productos Where IdCategoria=7 15 Mostrar los productos que NO pertenezcan a la categora de cdigo 1 Select NomProducto,IdCategoria AS [Codigo CAT] From Productos Where NOT IdCategoria=1 16 Mostrar los productos que NO sean de la categora donde el cdigo es 1, 2, 3, 4 y 5 Select NomProducto,IdCategoria AS [Codigo CAT] From Productos Where NOT IdCategoria IN(1,2,3,4,5) 17 Mostrar los productos donde la categora sea del cdigo 4 y 5 Select NomProducto,IdCategoria AS [Codigo CAT] From Productos Where IdCategoria IN(4,5) 18 Mostrar los productos que tengan un stock mayor igual a 100 y su proveedor tenga el cdigo 17 Select IdProducto,NomProducto,Stock,IdProveedor From Productos Where Stock >=100 AND IdProveedor=17 19 Mostrar el producto de mayor precio Select IdProducto,NomProducto,Stock,IdProveedor From ProductosWhere Stock Between 100 and 150 AND NomProducto LIKE 'C%'

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 50 de 101

RPP - Taller de Base de Datos I

5 Consultas de Actualizacion I
El comando UPDATE puede ser utilizado para modificar informacin contenida dentro de una tabla. Cada ao, la compaa les da a todos los empleados un incremento del 3% sobre el salario. El siguiente comando SQL podra ser utilizado para aplicar esto a todos los empleados de la base de datos:

Vamos a trabajar con la tabla CompaiasDeEnvios

Aqu Tenemos los registros de la tabla de Compaa de Envos Los datos sern modificados segn lo requiera las empresas Los datos se actualizarn por necesidad del usuario
CASO 1 La empresa United Package decide cambiar de razn social por motivos econmicos. Su nueva razn social ser United International Ud. Deber aplicar una consulta de actualizacin para realizar dicha modificacin.

UPDATE dbo.CompaasDeEnvos SET NomCompaa='United International' Where IdCEnvos=2


CASO 2 La empresa Wester Junior Tambin cambia de razn social a London Union

UPDATE dbo.CompaasDeEnvos SET NomCompaa='London Union' Where IdCEnvos=5


CASO 3 La Empresa Speedy Express Cambia de numero telefonico a 0808-8025-852

UPDATE dbo.CompaasDeEnvos SET Telefono='0808-8025-852' Where IdCEnvos=1


CASO 4 La empresa Federal Shipping decide cambiar de razn social a Federal Peruana y de nmero telefnico a 330-1012

UPDATE dbo.CompaasDeEnvos SET NomCompaa='Federal Peruana', Telefono='330-1012' Where IdCEnvos=3

Despus de haber ejecutado los 4 casos. La tabla Compaa de Envos tuvo ciertas modificaciones en su informacin haciendo Uso de Consultas de Actualizacin

Docentes:

Pgina 51 de 101 Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

RPP - Taller de Base de Datos I

6 Consultas de Actualizacion II
Mostrar lo siguientes datos: Select IdEmpleado,Apellidos,Nombre,TelDomicilio From dbo.Empleados

Ahora vamos a modificar los datos de los empleados.

01 Modificar los apellidos y nombre del Empleado donde su cdigo es 1 UPDATE dbo.Empleados SET Apellidos='Pandal', Nombre='Jhonny' WHERE IdEmpleado=1 02 Modificar los 3 campos del empleado donde su cdigo es 2 UPDATE dbo.Empleados SET Apellidos='Gates', Nombre='Bill', TelDomicilio='985-965-845' WHERE IdEmpleado=2 03 Modificar fecha de contratacin del empleado Jhonny Pandal UPDATE dbo.Empleados SET FechaContratacion='12/03/2006' WHERE IdEmpleado=1 04 Mostrar cdigo, nombres y telfono de empleados. Agrupado por el segundo campo calculado Select IdEmpleado,Nombre+SPACE(3)+Apellidos AS [Nombres y Apellidos],FechaContratacion,TelDomicilio From dbo.Empleados 05 Mostrar cdigo, nombres, fecha contratacin, telfono de empleados. Agrupado por el segundo campo calculado Select IdEmpleado,Nombre+SPACE(3)+Apellidos AS [Nombres y Apellidos],TelDomicilio From dbo.Empleados Order By 2

Cada vez que ejecutes una consulta verifica que los datos realmente se hayan actualizado. UPDATE nos permite modificar registros existentes. NO LO OLVIDES

Docentes:

Lic. Luis M. Rojas Ziga

Lic. Zambrano Arce, Julio

Pgina 52 de 101

Lic. Ramiro De la Cruz

Lic. Israel Huaraca

RPP - Taller de Base de Datos I

Consultas de Actualizacion III


En la seccion anterior aprendimos a actualizar solo un registro a la vez. Pero en ocasiones se deben hacer modificaciones a un grupo de registros. Es facil solo deberas usar lo aprendido anteriormente. Primero: Mostramos los 5 primeros productos(codigo,nombre,precio y categoria) de la categoria 1 Select TOP 5 IdProducto,NomProducto,PrecioUnidad,IdCategoria From where IdCategoria=1 dbo.Productos

Segundo: La empresa Wards Supermarket decide subir los precios de los productos que pertenezcan a la categoria1. Este incremente ser del 50% del mismo. UPDATE dbo.Productos SET PrecioUnidad=PrecioUnidad+(PrecioUnidad*0.50) WHERE IdCategoria =1 El resultado si te das cuenta sera 12 filas afectadas. Ya que hay 12 productos de la categoria1 que fueron modificadas en grupo. Verifica los cambios

CASO 5 La empresa decide reducir el precio de los productos a un 50% pero que pertenezcan a la categora de condimentos (2) y que tengan un stock mayor igual a 50 unidades en almacn. Mostrando datos Antes:

Select IdProducto,NomProducto,PrecioUnidad,Stock,IdCategoria From dbo.Productos where IdCategoria=2 AND Stock >=50

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 53 de 101

RPP - Taller de Base de Datos I

Vamos a actualizar los datos:

UPDATE dbo.Productos SET PrecioUnidad=PrecioUnidad-(PrecioUnidad*0.50) WHERE IdCategoria =2 AND Stock >=50

Como pueden ver los datos actualizados cumplen el criterio detallado. CASO 6

La empresa decide poner un precio de 15 soles a todas las marcas de las cervezas que vende. Debes modificar dichos precios.
Mostrando datos Antes:

Select IdProducto,NomProducto,PrecioUnidad,Stock,IdCategoria From where NomProducto LIKE 'Cerveza%'

dbo.Productos

Vamos a actualizar los datos:

UPDATE dbo.Productos SET PrecioUnidad=15 WHERE NomProducto LIKE 'Cerveza%'

Una consulta de actualizacin depende de los criterios que deben de cumplir dicha modificacin. Es importante tener en cuenta que para poder modificar registros primero debes tener un respaldo. Pues los datos modificados no pueden ser restaurados.
Una sentencia que NO DEBES EJECUTAR NUNCA

UPDATE dbo.Productos SET NomProducto='Impresora Canon'

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 54 de 101

RPP - Taller de Base de Datos I

8 Consulta de Eliminacin
Utilizado para eliminar datos dentro de una tabla. Desafortunadamente, los ltimos ingresos de la corporacin reportan disminucin en el desempeo, esto ha causado que Juan Prez sea despedido. El comando DELETE con la clusula WHERE puede ser utilizado para eliminar su registro de la tabla de personal:

01 la empresa decide eliminar de su data todos los productos suspendidos Select * From dbo.Productos Where Suspendido=0 02 la empresa decide eliminar de su data los productos acabados Delete From dbo.Productos Where Stock=0 03 la empresa decide eliminar de su data todos los productos en pedido menores igual a 40 que pertenezcan A la categora 1 Delete From dbo.Productos Where CantEnPedido <=40 AND IdCategoria=1 04 la que no debes USAR Delete From dbo.Productos

Una empresa real cuenta con una tabla denominada Historial_Productos en esta tabla se almacena los registros eliminados de la tabla principal Productos. Adems de los registros de los productos antes de ser actualizados con update

Consulta de Datos II
Consulta a Dos Tablas 01.- Mostrar codigo y nombre del producto. ademas el pais y telefono de los proveedores de dichos productos Select P.IdProducto,P.NomProducto,PR.Pais,PR.Telefono From Productos AS P INNER JOIN Proveedores AS PR ON P.IdProveedor =PR.IdProveedor Resultado

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 55 de 101

RPP - Taller de Base de Datos I

02.- Mostrar codigo y nombre del producto. ademas el nombre de la empresa y el nombre del empleado de la empresa proveedora. Ademas configurar el ancabezado con ALIAS Select P.IdProducto AS [COD PRODUCTO],P.NomProducto AS [NOMBRE DEL PRODUCTO], PR.NomEmpresa AS [EMPRESA],PR.NomEmpleado AS [NOMBRE DE EMPLEADO] From Productos AS P INNER JOIN Proveedores AS PR ON P.IdProveedor =PR.IdProveedor Resultado:

DESCRIPCION: a) Una consulta multitablas requiere de los campos de cada tabla en la seccin SELECT. b) Luego la unin de las tablas que intervienen en dicha consultas. Las cuales estn unidas con la unin INNER JOIN estas tablas deben estas relacionadas por un campo comn. c) La instruccin ON en la cual comparamos los dos campos comunes de dichas tablas. 03.- Adems podemos filtrar este resultado acompaando a esta consulta con la instruccin WHERE Select P.IdProducto AS [COD PRODUCTO],P.NomProducto AS [NOMBRE DEL PRODUCTO], PR.NomEmpresa AS [EMPRESA],PR.NomEmpleado AS [NOMBRE DE EMPLEADO] From Productos AS P INNER JOIN Proveedores AS PR ON P.IdProveedor =PR.IdProveedor Where PR.NomEmpleado ='Wendy Mackenzie' Resultado:

WHERE
04.- Mostrar El nombre de la categoria. ademas nombre y precio del producto de dicha categoria Select C.NomCategoria,PD.NomProducto,PD.PrecioUnidad From Categorias AS C INNER JOIN Productos AS PD ON C.IdCategoria =PD.IdCategoria Resultado:

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 56 de 101

RPP - Taller de Base de Datos I


05.- Mostrar El nombre de la categoria. ademas nombre y precio del producto de dicha categoria. Pero solo de las bebidas Select C.NomCategoria,PD.NomProducto,PD.PrecioUnidad From Categorias AS C INNER JOIN Productos AS PD ON C.IdCategoria =PD.IdCategoria Where C.NomCategoria ='Bebidas' Resultado:

06.- Mostrar los detalles del pdido 10250. mostrando: codigo y nombre del producto en pedido. ademas de precio unitario y la cantidad a comprar de dicho producto.ademas nos piden que mostremos un campo CALCULADO que es SUBTOTAL que se genera a partir de la multiplicacion de 2 campos Select DT.IdProducto,P.NomProducto,DT.PrecioUnidad,DT.Cantidad, (DT.PrecioUnidad*DT.Cantidad) AS SUBTOTAL From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto =P.IdProducto Where DT.IdPedido ='10250' Resultado:

06.- Mostrar los detalles del pdido 10258. mostrando: codigo y nombre del producto en pedido. ademas de precio unitario y la cantidad a comprar de dicho producto.ademas nos piden que mostremos un campo CALCULADO que es SUBTOTAL,DESCUENTO Y NETO haciendo uso de 2 campos calculados Select DT.IdProducto,P.NomProducto,DT.PrecioUnidad,DT.Cantidad, (DT.PrecioUnidad*DT.Cantidad) AS SUBTOTAL, (DT.PrecioUnidad*DT.Cantidad)*DT.Descuento AS DESCUENTO, From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto =P.IdProducto Where DT.IdPedido ='10258' Resultado:

((DT.PrecioUnidad*DT.Cantidad)-(DT.PrecioUnidad*DT.Cantidad)*DT.Descuento) AS NETO

Para este ejemplo hemos usado 3 campos de la tabla DetallesDePedidos, 1 Campo de la tabla Productos y 3 campos calculados (SUBTOTAL, DESCUENTO, NETO) haciendo uso de la multiplicacin de PrecioUnidad*Cantidad

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 57 de 101

RPP - Taller de Base de Datos I


07.- Mostrar la cantidad de productos vendidos. Clasificado por el nombre de la categora. para obtener este resultado debemos hacer el recorrido desde la tabla detallesdepedido hacia la tabla productos y de la tabla productos hacia la tabla categoras y as obtener los datos para los campos seleccionados Select C.NomCategoria AS CATEGORIA,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Categorias AS C ON C.IdCategoria =P.IdCategoria Group By C.NomCategoria Resultado:

08.- Mostrar la cantidad de productos vendidos. Clasificado por el nombre del proveedor. Para obtener este resultado debemos hacer el recorrido desde la tabla detallesdepedido hacia la tabla productos y de la tabla productos hacia la tabla proveddores y as obtener los datos para los campos seleccionados Select PR.NomEmpresa AS CATEGORIA,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Proveedores AS PR ON PR.IdProveedor =P.IdProveedor Group By PR.NomEmpresa Resultado:

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 58 de 101

RPP - Taller de Base de Datos I


09.- Mostrar cdigo y nombre del producto. Adems de el pas y telfono de dichos productos. Se debe hacer una bsqueda por digito del lado izquierdo SELECT P.IdProducto,P.NomProducto,PR.Pais,PR.Telefono FROM Proveedores AS PR INNER JOIN Productos P ON PR.IdProveedor = P.IdProveedor WHERE P.NomProducto LIKE 'Ca%' Resultado:

Analizando La Consulta

10.- Mostrar Cantidad de Productos Pedidos Por Categora Select C.NomCategoria AS CATEGORIA,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Categorias AS C ON C.IdCategoria =P.IdCategoria Group By C.NomCategoria 11.- Mostrar Cantidad de Productos Pedidos Por Proveedor Select PR.NomEmpresa AS PROVEEDOR,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Proveedores AS PR ON PR.IdProveedor =P.IdProveedor Group By PR.NomEmpresa 12.- Mostrar cdigo y nombre de producto. Adems del pas y telfono del proveedor. En nombre de producto debe iniciar con las letras CA SELECT P.IdProducto,P.NomProducto,PR.Pais,PR.Telefono FROM Proveedores AS PR INNER JOIN Productos P ON PR.IdProveedor = P.IdProveedor WHERE P.NomProducto LIKE 'Ca%'

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 59 de 101

RPP - Taller de Base de Datos I


13.- Mostrar todos los pedidos de la empresa Select*From Pedidos 14.- Mostrar el pas hacia donde es su destino de todos los pedidos Select PaisDest From Pedidos 15.- Mostrar la cantidad de pases que son clientes Select COUNT(Distinct(PaisDest)) FROM Pedidos

16.- Mostrar el nombre de los pases clientes. El nombre de debe repetirse Select Distinct(PaisDest) FROM Pedidos 17.- Mostrar cdigo, apellido, nombre y edad(campo calculado) de los empleados Select IdEmpleado,Apellidos,Nombre,(YEAR(GETDATE())-YEAR(FechaNacimiento)) AS EDAD From Empleados 18.- Mostrar cdigo, apellido, nombre y edad de los empleados a partir de los 50 aos de edad Select IdEmpleado,Apellidos,Nombre,(YEAR(GETDATE())-YEAR(FechaNacimiento)) AS EDA From Empleados Where(YEAR(GETDATE())-YEAR(FechaNacimiento))>=50 19.- Mostrar el 25% de los empleados de la empresa Select Top 25 Percent * From Empleados 20.- Mostrar empleados donde su edad comprenda del 15/01/1950 hasta 15/01/1960 Select*From EmpleadosWhere FechaNacimiento BETWEEN '15/01/1950' AND '15/01/1960' 21.- Mostrar pedidos del 01/09/1997 Al 31/12/1997 que se realizo dicho pedido Select IdPedido,FecPedido,FecEntrega,FecEnvo From Pedidos Where FecPedido BETWEEN '01/09/1997' AND '31/12/1997' 22.- Mostrar la cantidad de pedidos realizados del 01/09/1997 al 31/12/1997 Select COUNT(IdPedido) CANTIDAD From Pedidos Where FecPedido BETWEEN '01/09/1997' AND '31/12/1997' 23.- Mostrar ciudad y regin de francia Select Region,Ciudad From Proveedores Where Pais='Francia' 24.- Mostrar cdigo y fecha de entrega. Adems del nombre de la compaa que los enviara. Solo debe mostrar los envos de la compaa Speedy Express y la fecha de entrega debe ser a partir de la fecha indicada 01/06/1998 Select P.IdPedido,P.FecEntrega,CE.NomCompaa From CompaasDeEnvos AS CE INNER JOIN Pedidos AS P On CE.IdCEnvos =P.IdCompEnvo Where CE.NomCompaa ='Speedy Express' AND P.FecEntrega >='01/06/1998'

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 60 de 101

RPP - Taller de Base de Datos I

Propuesto Practico 05
1. mostrar la cantidad de categorias existentes(numero entero) 2. mostrar el nombre de la categoria con el encabezado 'nombre de categoria' 3. mostrar nombre de empresa y nombre de empleado de la tabla clientes. donde el nombre de la empresa inicie con la letra a y c 4. mostrar la cantidad de clientes de la ciudad de mexico 5. mostra a los clientes que no tienen fax 6. mostrar codigo de pedido,nombre de producto, precio, cantidad de la tabla detalles de pedido ademas de los campos calculados subtotal, descuento 10% y pago neto

7. mostrar el promedio de precios de la tabla detalles de pedido 8. mostrar los detalles de pedido donde la cantidad este entre 50 a 100 y el porcentaje del descuento sea superior a 20% 9. mostrar codigo, nombre y apellido de los empleados. ademas el tiempo de servicio que tiene cada empleado

10. mostra la cantidad de empleados por tratamiento. ej. cuantas seoras,seores, doctores existen. etc. 11. mostrar el nombre y apellido de los empleados en una sola columna de titulo 'datos' 12. mostrar los empleados donde su edad este entre 50 a 60. usar funciones 13. mostra los empleados que no tengan jefe 14. mostrar el promedio del monto de la tabla pedidos 15. mostrar los pedidos donde el monto sea mayor la promedio 16. mostrar el mes de la fecha de pedido,el ao de la fecha de entrega y el dia de la fecha de envio. de la tabla pedidos. usar funciones 17. mostrar la cantidad de pedidos que realizo cada cliente 18. mostrar los productos donde el stock este en el intervalo de 40 a 50 19. mostrar los productos de la categoria sea 1 y 3 20. mostrar los productos donde el nombre inicie con a y el precio sea superior a 50 21. mostrar la cantidad de proveedores por cargo de contacto 22. mostrar cargo de contacto de la tabla proveedores. no deben repetirse los datos 23. mostrar la cantidad de proveedores por pais 24. mostrar codigo, nombre y precio de producto. ademas de nombre y descripcion de su categoria 25. mostrar los productos donde el nombre de la categoria sea bebidas 26. mostrar precio, stock y cantidad por unidad de la tabla productos donde el cargo de contacto del proveedor sea 'representante de ventas'

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 61 de 101

RPP - Taller de Base de Datos I


27. mostrar los clientes donde la region inicia con la letra a y c 28. mostrar codigo, ciudad y pais de la tabla pedidos.ademas el campopais de la tabla clientes donde el cliente sea del pais de alemania 29. mostrar codigo y nombre del producto donde el precio sea mayor igual a 15 y el stock sea mayor a 16 30. mostrar los productos activos 31. mostrar los proveedores que no pertenescan a espaa ni japon 32. mostrar los clientes de la ciudad de madrid y berlin 33. mostrar la cantidad de pedidos que realizo cada empleado 34. incrementar el preciounidad de los productos a un 75% de la categoria 1 y 2 35. cambiar el nombre de cervezatibetana barley por cerveza pilsen del producto de codigo 2 36. cambiar apellido y nombre de buchana steven por carlos tevez del empleado de codigo 5 37. asignarle region lima a los empleados que no tengan region 38. la extension sera 088 para los empleados de eeuu 39. modificar la fecha de envio a 08/10/2011 de los pedidos que van hacia belgica 40. reducir el stock menos 3 de los productos de la categoria 5 41. insertar 3 registros a la tabla empleados 42. insertar 15 registros a tabla productos 43. insertar 3 registros a la tabla pedidos asociado con detalles 44. mostrar producto de la categoria 1 donde el precio unidad sea superior a 26 y cantidad en pedido sea 0 45. mostrar los productos donde la cantidad por unidad sean FRASCOS 46. mostrar los productos donde la categoria sea 2 y 3 ademas esten suspendido 47. mostrar los productos que no tengan stock 48. mostrar los pedidos donde el monto sea menor al promedio y el pais sea mexico 49. mostrar los empleados que no tengan ningun pedido 50. eliminar los productos de Peru

Un conocimiento adecuado de las consultas sobre las


Fecha de Entrega:

tablas de una base de datos y saber qu informacin desea uno obtener de dichas consultas es una parte fundamental para poder realizar los siguientes captulos NO OLVIDARLO practica es lo que hace al maestro.

Docentes:

Pgina 62 de 101 Lic. Luis M. Rojas Ziga Julio Lic. Zambrano Arce,

L i c . R a m i r o D e l a C r u z L i c . I s r a e l H u a r a c a

RPP - Taller de Base de Datos I

CAPITULO 06
Objetivos.- aprender a aplicarle rendimientos a nuestras tablas. Cuando estas tengan un gran cantidad de registros. Recuerda que la lentitud es un factor negativo en sistemas de la inf.

1 Optimisando la base de datos con Indices 2 CREATE INDEX 3 ndices en un Mundo Real - 100.000 4 Agregando ndices en la Tabla Usuarios 5 Creando ndices en Wards Supermarket 6 Seguridad y Rendimiento con Vistas 7 Creacin de Sinnimos Propuesto Practico 06

64 65 66 68 69 70 71
71

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 63 de 101

RPP - Taller de Base de Datos I

1 Optimisando la base de datos con Indices


Introduccin a los ndices.Un ndice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a travs de un campo (o campos clave). Un ndice permite un acceso mucho ms rpido a los datos. Para entender lo que es un ndice debemos saber primero como se almacena la informacin internamente en las tablas de una base de datos. Cada tabla se divide en pginas de datos, imaginemos un libro, podramos escribirlo en "una sola hoja enorme" al estilo pergamino egipcio, o bien en pginas a las que podemos acceder rpidamente a travs de un ndice. Est idea es la que se aplica en el mundo de las bases de datos, la informacin esta guardada en una tabla (el libro) que tiene muchas hojas de datos (las pginas del libro), con un ndice en el que podemos buscar la informacin que nos interesa. Los ndices se actualizan automticamente cuando realizamos operaciones de escritura en la base de datos. Este es un aspecto muy importante de cara al rendimiento de las operaciones de escritura, ya que adems de escribir los datos en la tabla se escribirn tambin en el ndice. Un nmero elevado de ndices har ms lentas estas operaciones. Sin embargo, salvo casos excepcionales, el beneficio que aportan los ndices compensa (de largo) esta penalizacin. Las sentencias de SQL para manipular ndices son: CREATE INDEX Y DROP INDEX

La palabra clave UNIQUE especfica que no pueden existir claves duplicadas en el ndice. ASC | DESC especifican el criterio de ordenacin elegido, ascendente o descendente, por defecto es ascendente. Ejemplo En el apartado dedicado a la definicin de tablas usaremos la tabla Clientes de la base de datos Wards Supermarket, este ejemplo crea un ndice nico en el campo NOMBREEMPLEADO. Esto nos permitir buscar mucho ms rpido por el campo NOMBREEMPLEADO y nos asegurar que no tengamos dos NOMBREEMPLEADO iguales.

Cada tabla tiene unas carpetas ndices. Ah se guardan estos objetos

Cmo Eliminar ndices?


DROP INDEX Clientes.UIX_Clientes_NombreEmpleado

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 64 de 101

RPP - Taller de Base de Datos I

2 CREATE INDEX
La sentencia CREATE INDEX sirve para crear un ndice sobre una o varias columnas de una tabla. ASC: la clusula ASC es la que se asume por defecto e indica que el orden elegido para el ndice es ascendente (en orden alfabtico si la columna es de tipo texto, de menor a mayor si es de tipo numrico, en orden cronolgico si es de tipo fecha). DESC: indica orden descendente, es decir el orden inverso al ascendente.

Ejemplo:
Crea un ndice llamado ind1 sobre la tabla empleados formado por las columnas ciudad, regin y fecha de nacimiento. Este ndice permite tener ordenadas las filas de la tabla empleados de forma que aparezcan los empleados ordenados por ciudad, dentro de la misma ciudad por regin y dentro de la misma regin por edad y del ms joven al ms mayor. CREATE INDEX ind1 ON Empleados (Ciudad, Region ASC, FechaNacimiento DESC) Create Index Ux_Cargo_Emp ON Clientes(CargoEmpleado) Create Index Ux_Nom_Cat ON Categorias(NomCategoria) Create Unique Index Ux_Nom_Cat_Unico ON Categorias(NomCategoria) Create NONCLUSTERED Index Ux_Nombre_Compaia ON CompaasDeEnvos(NomCompaa) Create CLUSTERED Index Ux_telefono_Compaia ON CompaasDeEnvos(Telefono) Create NONCLUSTERED Index Ux_Pedido_Fechas ON Pedidos(FecPedido,FecEntrega,FecEnvo) Verificar la existencia de los indices en la Carpeta indice de cada tabla.

VELOCIDAD DE DATOS

Los INDICES se crean dentro de una tabla cuando el volumen de datos aumenta y es necesario un mecanismo de bsqueda de datos eficiente.

DROP INDEX
La sentencia DROP INDEX sirve para eliminar un ndice de una tabla. Se elimina el ndice pero no las columnas que lo forman. La sintaxis es la siguiente:

Ejemplo: DROP INDEX Empleados.Ux_Nom_Cat_Unico Elimina el ndice que habamos creado en el ejemplo anterior.

DESACTIVAR Y ACTIVAR INDICES


Hay momentos en donde se debe ingresar informacin en lotes dentro de una tabla. Eso implica miles de registros para lo cual debemos desactivar los Pgina 65 de 101

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

RPP - Taller de Base de Datos I

3 ndices en un Mundo Real - 100.000


Primero debemos entender que los ndices aunque perjudican un poco el ingreso de datos dentro de una tabla. La funcin ms importante es la optimizacin que nos brinda al momento de hacer consultas. Porque todo sistema realiza muchas bsquedas en una base de datos. Y cmo se mide la velocidad de respuesta de una consulta? Pues cuando tenemos una gran cantidad de registros.

Ejercicio 01
A.- Vamos a crear una tabla de nombre un usuario y le vamos a agregar 100.000 registros de una sola ejecucin con la ayuda del procedimiento almacenado

dbo.Usp_CrearUsuarios
El cual me permite realizar el llenado de dichos registros. Bueno comencemos Crear a Tabla Usuario

B.- Ahora desde el Analizador de consultas ejecutas el procedimiento almacenado dbo.Usp_CrearUsuarios que se encuentra en tu DB Wards Supermarket.

dbo.Usp_CrearUsuarios 100000, 10000, 600


Una vez ejecutado esta lnea de script te recomiendo vayas a tomarte un cafecito o un helado de vainilla con choco chip (depende como te sientas). Porque la creacin de los registros demorara y eso depende del hardware que tiene Nota: como veras en la imagen se demor 52 segundos en el llenado de datos. Esperemos superar ese tiempo en tu computador. EL TIEMPO ES UN FACTOR IMPORTANTE EN LOS SISTEMAS DE INFORMACION NO OLVIDARLO. Mensaje exitoso

C.-

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 66 de 101

RPP - Taller de Base de Datos I


Verificar los registros ingresados Select * From Usuario

Sin lugar a dudas, el desempeo de una aplicacin est directamente relacionado al buen o mal diseo de los ndices de la base de datos. Esta tabla no tiene ningn ndice creado, por lo cual SQL Server tratar la tabla como un HEAP. Un heap es una estructura de datos que almacena la posicin fsica en la que se almacen cada nueva fila dentro de las pginas asignadas a la tabla. Puesto que esta tabla no tiene ningn tipo de ndice, es bastante eficiente para agregar nuevas filas a la tabla pero muy ineficiente para encontrar una fila especfica, esto se debe a que es necesario leer toda la tabla para obtener el resultado deseado. Para ilustrar esto, realicemos el siguiente experimento: utilizando el procedimiento almacenado Usp_CrearUsuarioscrearemos 100.000 usuarios de los cuales el 10.000 no estn activos y su fecha de creacin esta en los ltimos 600 das. D.- Ahora realicemos una consulta para validar el usuario al inicio de sesin del sistema. SELECT Clave, Activo FROM Usuario WHERE NombreUsuario = 'PANDAL123' La respuesta probablemente funcione bastante rpido, ya que al recin haber creado los datos, todas estas filas estn en memoria, pero veamos el plan de ejecucin de esta consulta presionando el botn incluir plan de ejecucin real. De la barra de herramientas del SQL Server Management Studio y luego ejecutando la misma consulta.

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 67 de 101

RPP - Taller de Base de Datos I

4 Agregando ndices en la Tabla Usuarios


Vuelvo a ejecutar: SELECT Clave, Activo FROM Usuario WHERE NombreUsuario = 'PANDAL123' Y veo el plan de ejecucin

ANTES DEL INDICE

Ahora creare un indice Create Index IDX_NombreUsuario ON Usuario(NombreUsuario) Luego volvere a ejecutar SELECT Clave, Activo FROM Usuario WHERE NombreUsuario = 'PANDAL123' Y Veo el plan de ejecucion

DESPUES DEL INDICE

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 68 de 101

RPP - Taller de Base de Datos I

5 Creando ndices en Wards Supermarket


Sobre tabla productos:

EXEC Sp_HelpIndex Productos Muestra los indices de la tabla productos EXEC sp_SpaceUsed Productos Muestra el espacio que ocupa la tabla productos

Ejemplos

A. Crear un ndice no clster sencillo El ejemplo siguiente crea un ndice no clster en la columna NomProducto y Precio de la tabla Productos IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_ProductoNomPrecio') DROP INDEX Productos.IX_ProductoNomPrecio GO CREATE INDEX IX_ProductoNomPrecio ON Productos(NomProducto,PrecioUnidad) GO B. Crear un ndice compuesto no clster sencillo El ejemplo siguiente crea un ndice compuesto no agrupado en las columnas Stock y Cant en Pedido de la tabla Productos IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_Stock_CantPed') DROP INDEX Productos.IX_Stock_CantPed GO CREATE NONCLUSTERED INDEX IX_Stock_CantPed ON Productos (Stock,CantEnPedido) GO C. Crear un ndice no clster nico
El ejemplo siguiente crea un ndice no clster nico en la columna Name de Production.UnitMeasure. El ndice exigir unicidad en los datos insertados en la columna Name. la tabla

IF EXISTS (SELECT name from sys.indexes WHERE name = N'UniNomProducto') DROP INDEX Productos.UniNomProducto GO CREATE UNIQUE INDEX UniNomProducto ON Productos(NomProducto) GO

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 69 de 101

RPP - Taller de Base de Datos I

6 Seguridad y Rendimiento con Vistas


En el modelo de datos relacional la forma de guardar la informacin no es la mejor para ver los datos Una vista es una consulta, que refleja el contenido de una o ms tablas, desde la que se puede acceder a los datos como si fuera una tabla. Dos son las principales razones por las que podemos crear vistas. Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la informacin que hay en una tabla, pero no a toda la tabla. Comodidad, como hemos dicho el modelo relacional no es el ms cmodo para visualizar los datos, lo que nos puede llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea. Las vistas no tienen una copia fsica de los datos, son consultas a los datos que hay en las tablas, por lo que si actualizamos los datos de una vista, estamos actualizando realmente la tabla, y si actualizamos la tabla estos cambios sern visibles desde la vista.

Creacin de vistas.
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT vlida. CREATE VIEW<nombre_vista> AS (<sentencia_select>);

Ejemplo 01
Crear una vista sobre nuestra tabla Empleados, en la que se nos muestre el nombre y apellidos del empleado en lugar de su cdigo. CREATE VIEW vEmpleados AS (SELECT nombre,apellidos FROM Empleados) GO Mostrando el contenido de la Select*From vEmpleados Modificar una Vista Existente. ALTER VIEW vEmpleados AS (SELECT nombre,apellidos,Pais FROM Empleados WHERE Pais='EE.UU.') GO Mostrando el contenido de la Select*From vEmpleados

Por ltimo podemos eliminar la vista a travs de la sentencia DROP VIEW. Para eliminar la vista que hemos creado anteriormente se utilizara: DROP VIEWvEmpleados Una vista se consulta como si fuese una tabla.

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 70 de 101

RPP - Taller de Base de Datos I

7 Creacin de Sinnimos
Un sinnimo es un nombre alternativo que identifica una tabla en la base de datos. Con un sinnimo se pretende normalmente simplicar el nombre original de la tabla, aunque tambin se suelen utilizar para evitar tener que escribir el nombre del propietario de la tabla. No todas las bases de datos soportan los sinnimos. Para crear un sinnimo hay que utilizar la sentencia CREATE SYNONYM especificando el nombre que deseamos utilizar como sinnimo y la tabla para la que estamos creando el sinnimo.

CREATE SYNONYM<nombre_sinonimo> FOR<nombre_tabla>;

Ejemplo 01El siguiente ejemplo crea el sinnimo Coches para la tabla tCoches.
CREATE SYNONYM MisEmpleados FOR Empleados ejecutar Select * From MisEmpleados Para eliminar el sinnimo creado debemos emplear la sentencia DROP SYNONYM. DROP SYNONYM MisEmpleados

Propuesto Practico 06
Crear una Base de datos de 3 tablas AGENCIA DE VIAJES con ndices Crear 3 ndices a las tablas (Clientes, Empleados, Pedidos, Productos) de Wards Super... Crear 5 Vistas Simples Crear 5 Vistas con Consultas de ms de 1 tabla Crear 2 Vistas Con Tablas Particionada Crear Sinnimos para cada tabla

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 71 de 101

RPP - Taller de Base de Datos I

CAPITULO 07
Objetivos.- aprender a administrar la informacin de una base de datos haciendo uso de objetos los cuales no permiten una programacin por lado del servidor. Ademas de generar copias de seguridad

1 Funciones Creadas Por el Usuario 2 Funciones Escalares.3 Funciones de Tabla En Lnea 4 Procedimientos Almacenados 5 Procedimientos Almacenados Con Parmetros 6 Procedimientos almacenados con Parmetros de SALIDA 7 Procedimientos Almacenados de Mantenimiento 8 Desencadenadores o TRIGGERS 9 Activar o Desactivar USP 10 Copia de Seguridad 11 Restaurar una Copia de Seguridad 12 Propuesto

73 73 74 75 76 79 79 83 86 86 89 91

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 72 de 101

RPP - Taller de Base de Datos I

1 Funciones Creadas Por el Usuario


Tipos de funciones.- El servidor 2008 del SQL utiliza tres tipos de funciones: las funciones escalares, tabla en lnea, funciones de tabla de multi-sentencias. Los tres tipos de funciones aceptan parmetros de cualquier tipo excepto el rowversion. Las funciones escalares devuelven un solo valor, tabla en lnea y Multisentencias devuelven un tipo de dato tabla.

2 Funciones Escalares.Las funciones escalares vuelven un tipo de los datos tal como int, money, varchar, real, etc. Pueden ser utilizadas en cualquier lugar incluso incorporado dentro de sentencias SQL. La sintaxis para una funcin escalar es la siguiente: Ejemplo 01 CREATE FUNCTION Ufn_VolumenCubico (@CuboLargo decimal(4,1), @CuboAncho decimal(4,1), @CuboAlto decimal(4,1)) RETURNS decimal(12,3) WITH SCHEMABINDING AS BEGIN RETURN (@CuboLargo * @CuboAncho * @CuboAlto) END GO Ejecutar la funcion DECLARE @MyResultado decimal(12,3) EXEC @MyResultado = Ufn_VolumenCubico @CuboLargo = 12.3, @CuboAlto = 4.5, @CuboAncho = 4.5 SELECT @MyResultado GO Ejemplo 02 CREATE FUNCTION Ufn_Promedio (@Nota1 Int, @Nota2 Int, @Nota3 Int) RETURNS Int WITH SCHEMABINDING AS BEGIN RETURN ( @Nota1 + @Nota2 + @Nota3 )/3 END GO Ejecutar la funcion DECLARE @MyPromedio Int EXEC @MyPromedio = Ufn_Promedio @Nota1 SELECT @MyPromedio GO = 12.3, @Nota2 = 11, @Nota3 = 17

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 73 de 101

RPP - Taller de Base de Datos I

3 Funciones de Tabla En Lnea


Las funciones de tabla en lnea son las funciones que devuelven la salida de una simple declaracin SELECT. La salida se puede utilizar adentro de joins o querys como si fuera un tabla de estndar. La sintaxis para una funcin de tabla en lnea es como sigue: Ejemplo 01 Esta funcin nos permite mostrar los empleados por pas. Esta funcin tiene un parmetro de entrada que se encarga de ingresar el nombre del pas CREATE FUNCTION Fn_EmpleadosXPais(@Pais NVarchar(15)) RETURNS TABLE AS RETURN (SELECT * FROM Empleados WHERE Pais=@Pais) GO Ejecutar Funcion 1 Select * From Fn_EmpleadosXPais('EE.UU.') Ejecutar Funcion 2 Select * From Fn_EmpleadosXPais('Reino Unido') Ejemplo 02 Nos permite mostrar todos los empleados CREATE FUNCTION Fn_Empleados() RETURNS TABLE AS RETURN (SELECT * FROM Empleados) GO Ejecutar Funcion Select * From Fn_Empleados() Ejemplo 02 Nos permite mostrar todos los productos donde el precio sea superior al valor ingresado al parametro @Precio CREATE FUNCTION Fn_ProductoMayorPrecio(@Precio Money) RETURNS TABLE AS RETURN (SELECT * FROM Productos WHERE PrecioUnidad>=@Precio) GO Ejecutar Funcion Select * From Fn_ProductoMayorPrecio(25) Ejemplos 03 Funcion para Mostrar los detalles de un pedido. Ingresnado el numero del pedido. Tambien emutra campos calculados CREATE FUNCTION Fn_DetallesXPeido(@CodPedido Int) RETURNs TABLE AS RETURN (Select IdProducto,PrecioUnidad,Cantidad,(PrecioUnidad*Cantidad )AS [Subtotal], (Descuento*(PrecioUnidad*Cantidad)) AS Descuento, ((PrecioUnidad*Cantidad )- (Descuento*(PrecioUnidad*Cantidad))) AS NETO From [Detallesdepedidos] Where idpedido=@CodPedido) GO Ejecutar Funcion Select * From Fn_DetallesXPeido(10255)

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 74 de 101

RPP - Taller de Base de Datos I


Ejemplos 04 Funcion para Mostrar la fecha, nombre de cliente y pais adonde fue entregado dicho pedido. la funcion necesita que ingreses valores en los parametro de pais y nombre de cliente. CREATE FUNCTION Fn_BuscarPedidos01 (@NomCli nVarchar(40),@Pais RETURNS TABLE AS nVarchar(15))

RETURN(Select P.IdPedido,C.NombreEmpleado,P.FecPedido,P.PaisDest From Pedidos As P INNER JOIN Clientes AS C ON P.IdCliente =C.IdCliente Where C.NombreEmpleado LIKE @NomCli+'%' AND P.PaisDest=@Pais) GO Ejecutar Funcion 01 Use [Wards Supermarket] GO Select * From Fn_BuscarPedidos01('H','Alemania') Ejecutar Funcion 02 Use [Wards Supermarket] GO Select * From Fn_BuscarPedidos01('A','Alemania') Ejecutar Funcion 03 Use [Wards Supermarket] GO Select * From Fn_BuscarPedidos01('Y','Suiza') Ejecutar Funcion 04 Select COUNT(*) From Fn_BuscarPedidos01('Y','Suiza')

4 Procedimientos Almacenados
Un procedimiento es un programa dentro de la base de datos que ejecuta una accin o conjunto de acciones especficas. Un procedimiento tiene un nombre, un conjunto de parmetros (opcional) y un bloque de cdigo. En Transact SQL los procedimientos almacenados pueden devolver valores (numrico entero) o conjuntos de resultados. Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.

Procedimientos Almacenados Sin Parmetros


Ejemplo 01 USP que muestre la lista de pedidos Create Proc Usp_ListaPedidos AS Select*From Pedidos GO Ejecutar USP Exec Usp_ListaPedidos

Lugar fsico donde se almacenan los USPS CREADOS

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 75 de 101

RPP - Taller de Base de Datos I


Ejemplo 02 USP que muestre cdigo, nombre y telfono de los clientes Create Proc Usp_ListaClientes01 AS Select IdCliente,NombreEmpleado,Telefono From Clientes GO Ejecutar USP Exec Usp_ListaClientes01 Ejemplo 03 USP que muestre la fecha de pedido, entrega y envi de los pedidos Create Proc Usp_PedidosFechas AS Select FecPedido,FecEntrega,FecEnvo From Pedidos GO Ejecutar USP Exec Usp_PedidosFecha Ejemplo 04 USP que muestre los productos activos. Solo 3 campos Create Procedure Usp_ProductoxActivos AS Select IdProducto,NomProducto,Suspendido From Productos Where Suspendido =1 GO Un USP es como una caja negra dentro de los Ejecutar USP Exec Usp_ProductoxActivos

sistemas de informacin. Los programadores solo usan el nombre de dicho USP. Muchas veces sin saber las lneas que cdigo que estas tienen. Lo ideal sera encriptar un USP para una mejor seguridad.

5 Procedimientos Almacenados Con Parmetros


Los procedimientos almacenados pueden recibir y devolver informacin; para ello se emplean parmetros, de entrada y salida, respectivamente. Ejemplo 01.- este USP hace uso de un parmetro de entrada que permite una resultado dinmico. Es decir que depende del valor que se le asigne al parmetro para que se muestre un resultado deseado. La ejecucin ahora debe estar acompaada de un dato de entrada. En este caso el nombre del pas Create Procedure Usp_PedidosXPais @PaisDest nvarchar(15) AS Select IdPedido,Monto,FecEntrega,PaisDest From Pedidos Where PaisDest=@PaisDest GO Ejecucin de USP Exec Usp_PedidosXPais 'Brasil' Ejecucin de USP Exec Usp_PedidosXPais 'Finlandia'

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 76 de 101

RPP - Taller de Base de Datos I


Ejemplo 02.- este USP nos permite mostrar los productos ordenados por un rango de precios. La cual es gestionado por 2 parmetros que participan en el USP Create Procedure Usp_ProductosXRangoPrecio @Precio1 Money, @Precio2 Money AS Select IdProducto,NomProducto,PrecioUnidad From Productos Where PrecioUnidad Between @Precio1 AND @Precio2 GO Ejecucin de USP Exec Usp_ProductosXRangoPrecio 10,13 Ejecucin de USP Exec Usp_ProductosXRangoPrecio 20,25 Ejemplo 03.- este USP nos permite mostrar los productos por su nombre. Solo ingresando las primeras letras Create Procedure Usp_ProductoXNombre @NomProducto nVarchar(40) AS Select IdProducto,NomProducto,Stock From Productos Where NomProducto LIKE @NomProducto +'%' GO Ejecucin de USP Exec Usp_ProductoXNombre 'A' Ejecucin de USP Exec Usp_ProductoXNombre 'Ce' Ejemplo 04.- este USP nos permite mostrar los productos por categoria Create Procedure Usp_ProductoXCategoria @IdCategoria Int AS Select IdProducto,NomProducto,IdCategoria From Productos Where IdCategoria =@IdCategoria GO Ejecucin de USP Exec Usp_ProductoXCategoria 1 Ejemplo 05.- este USP nos permite mostrar los productos por un rango del stock y adems clasificarlos por categora. Tenemos 3 parmetros de entrada Create Procedure Usp_ProductoDinamic1 @Stock1 smallint, @Stock2 smallint, @IdCategoria int AS Select IdProducto,NomProducto,Stock,IdCategoria From Productos Where Stock Between @Stock1 and @Stock2 AND IdCategoria =@IdCategoria GO

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 77 de 101

RPP - Taller de Base de Datos I


Ejecucin de USP Exec Usp_ProductoDinamic1 10,20,1 Ejecucin de USP Exec Usp_ProductoDinamic1 30,50,3 Ejemplo 06.- este USP tiene 2 parmetros con valores por defecto NULL. Adems de usar LIKE para una bsqueda ms efectiva Create Procedure Usp_ClientesDinamicos01 @Pais nvarchar(15) = Null, @CargoEmpleado nvarchar(30) = NUll AS Select IdCliente,Pais,CargoEmpleado From Clientes Where Pais LIKE @Pais+'%' AND CargoEmpleado LIKE @CargoEmpleado+'%' Go Ejecucin de USP Exec Usp_ClientesDinamicos01 'A','G' Ejecucin de USP Exec Usp_ClientesDinamicos01

RENDIMIENTO Y SEGURIDADes la caracterstica que nos


brinda los USP en nuestros sistemas. Los procedimientos almacenados son objetos principales para el desarrollo de sistemas informticos. Como ves hace uso de CONSULTAS SQL para lo cual debes manejar ese tipo de consultas. Estos procedimientos almacenados pueden ser usados en reportes de tu mdulo de sistema de VB, PowerBuilder u otra herramienta de desarrollo.

Ejemplo 07.- este USP tiene como finalidad elevar el precio de los productos por cdigo de proveedor. Este USP usa 2 parmetros de entrada para conseguir este objetivo. Y verifica los datos antes de ejecutar el USP Create Procedure Usp_ModificarPrecioMAS @PrecioUnidad money, @IdProveedor int AS Update Productos Set PrecioUnidad = PrecioUnidad+@PrecioUnidad Where IdProveedor=@IdProveedor GO Ejecutar Consulta select IdProveedor,PrecioUnidad from Productos Ejecutar USP Exec Usp_ModificarPrecioMAS 50,1 Verificar Cambios select IdProveedor,PrecioUnidad from Productos

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 78 de 101

RPP - Taller de Base de Datos I


Ejemplo 08.- este USP normalmente usado para el control del stock dentro de una tabla productos. Para hacer el control del stock necesitas. Ingresar el cdigo del producto y la cantidad a comprar de dicho producto. Lo cual reducir el stock segn lo comprado. Create Procedure Usp_ReducirStock @IdProducto int, @Stock smallint AS Update Productos Set Stock = Stock-@Stock Where IdProducto=@IdProducto GO Ejecutar Consulta Select IdProducto,NomProducto,Stock From Productos Ejecutar USP Exec Usp_ReducirStock 1,10 Ejecutar Consulta Select IdProducto,NomProducto,Stock From Productos

6 Procedimientos almacenados con Parmetros de SALIDA


Dijimos que los procedimientos almacenados pueden devolver informacin; para ello se emplean parmetros de salida. El valor se retorna a quien realiz la llamada con parmetros de salida. Para que un procedimiento almacenado devuelva un valor se debe declarar una variable con la palabra clave "output" al crear el procedimiento: create procedure NOMBREPROCEDIMIENTO @PARAMETROENTRADA TIPO =VALORPORDEFECTO, @PARAMETROSALIDA TIPO=VALORPORDEFECTO output as SENTENCIAS select @PARAMETROSALIDA=SENTENCIAS; Los parmetros de salida pueden ser de cualquier tipo de datos, excepto text, ntext e image.

7 Procedimientos Almacenados de Mantenimiento


Tenemos la tabla categora. En la cual debes fijarte bien en los tipos de datos que tiene cada campo.

Ahora fjate en lo datos que tiene esta tabla Porque ahora comenzaremos a Crear el procedimiento que me permitir ingresar nuevas categoras dentro mi tabla categora.

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 79 de 101

RPP - Taller de Base de Datos I Usp_AdicionarCategoria


Create Proc Usp_AdicionarCategoria @IdCategoria Int, @NomCategoria nvarchar(15), @Descripcion nvarchar(max) AS INSERT INTO Categorias VALUES (@IdCategoria, @NomCategoria, @Descripcion) GO Ejecucion y Verificacion Exec Usp_AdicionarCategoria 12,'Mascotas','Comida, Champu y mas productos' Select * From Categorias

Usp_ModificarCategoria
Este USP nos permite modificar registros existentes dentro de la tabla categora. Para el ejemplo modificaremos la categora de cdigo 12. Create Proc Usp_ModificarCategoria @IdCategoria Int, @NomCategoria nvarchar(15), @Descripcion nvarchar(max) AS UPDATE Categorias SET NomCategoria=@NomCategoria, Descripcion=@Descripcion Where IdCategoria=@IdCategoria GO Ejecutar el USP con los Nuevos datos Exec Usp_ModificarCategoria 12,'Mascotas Favoritas','Bao, paseo y productos para mascotas' Verificamos Select * From Categorias

Usp_EliminarCategoria
Este USP nos permite eliminar un registro Create Proc Usp_EliminarCategoria @IdCategoria Int AS Delete From Categorias Where IdCategoria=@IdCategoria GO Ejecutar el USP y Eliminar datos Exec Usp_EliminarCategoria 12

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 80 de 101

RPP - Taller de Base de Datos I Usp_BuscarCategoria


Este USP nos permite buscar datos dentro de una tabla. La bsqueda es por el campo codigo Create Procedure Usp_BuscarCategoria @IdCategoria int, @Nom nvarchar(15) OUTPUT, @Des nvarchar(max) OUTPUT AS Select @Nom=NomCategoria,@Des=Descripcion From Categorias Where IdCategoria =@IdCategoria GO Ejecutar Consulta Declare @NOMBRE nvarchar(15),@DESCRIPCION nvarchar(max) Exec Usp_BuscarCategoria @idCategoria=1, @Nom=@NOMBRE output, @Des=@DESCRIPCION output select @NOMBRE select @DEScripcion

WITH ENCRYPTION
Una funcionalidad utilizada algunas veces para proteger la propiedad intelectual es la encriptacin. En SQL Server podemos crear funciones, vistas, procedimientos almacenados aadiendo la opcin "WITH ENCRYPTION" para que no se muestre el texto claro de su definicin. Si leemos la explicacin sobre dicha opcin en los BOL vemos que ha cambiado desde SQL 2000 a 2005/2008 pero su esencia es la misma:

SET NOCOUNT ON
Si se establece SET NOCOUNT en ON, no se devuelve el recuento. Cuando SET NOCOUNT es OFF, s se devuelve ese nmero

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 81 de 101

RPP - Taller de Base de Datos I

Mantenimiento de Compaa de Envos


5 Procedimientos almacenados que permitiran lagestion de datos de esta tabla. Estos Usps seran usandos desde una aplicacin de Visual Basic. Para en funcionamiento de los botones Grabar, Editar, Eliminar, Buscar y una lista de registros. Usp para Lista Datos Create Proc Usp_CompaiaListado WITH ENCRYPTION AS SET NOCOUNT ON SELECT * FROM CompaasDeEnvos SET NOCOUNT ON GO Usp para Buscar Por Nombre Create Proc Usp_CompaiaBuscarNOmbre @NomCompaa nVarchar(40) WITH ENCRYPTION AS SET NOCOUNT ON SELECT * FROM CompaasDeEnvos WHERE NomCompaa LIKE @NomCompaa+'%' SET NOCOUNT ON GO Usp para Grabar Datos Create Proc Usp_CompaiaGrabar @IdCEnvos Int, @NomCompaa nvarchar(40), @Telefono nvarchar(24) WITH ENCRYPTION AS SET NOCOUNT ON INSERT INTO CompaasDeEnvos VALUES(@IdCEnvos, @NomCompaa, @Telefono) SET NOCOUNT ON GO Usp para Modificar Datos Create Proc Usp_CompaiaEditar @IdCEnvos Int, @NomCompaa nvarchar(40), @Telefono nvarchar(24) WITH ENCRYPTION AS SET NOCOUNT ON UPDATE CompaasDeEnvos SET NomCompaa=@NomCompaa, Telefono=@Telefono WHERE IdCEnvos=@IdCEnvos SET NOCOUNT ON GO Usp para Eliminar Datos Create Proc Usp_CompaiaEliminar @IdCEnvos Int WITH ENCRYPTION AS SET NOCOUNT ON DELETE FROM CompaasDeEnvos WHERE IdCEnvos=@IdCEnvos SET NOCOUNT ON GO Usp para Buscar Datos Create Proc Usp_CompaiaBuscar @IdCEnvos Int, @NomCompaa nvarchar(40) OUTPUT, @Telefono nvarchar(24) OUTPUT WITH ENCRYPTION AS SET NOCOUNT ON @NomCompaa=NomCompaa, @Telefono=Telefono FROM CompaasDeEnvos WHERE IdCEnvos=@IdCEnvos SET NOCOUNT ON GO SELECT

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 82 de 101

RPP - Taller de Base de Datos I

8 Desencadenadores o TRIGGERS
Un trigger( o desencadenador) es una clase especial de procedimiento almacenado que se ejecuta automticamente cuando se produce un evento en el servidor de bases de datos. SQL Server proporciona los siguientes tipos de triggers: Trigger DML, se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulacin de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Trigger DDL, se ejecutan en respuesta a una variedad de eventos de lenguaje de definicin de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. Trigger DML. Los trigger DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulacin de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista.

Tablas Inserted y Deleted.


Las instrucciones de triggers DML utilizan dos tablas especiales denominadas inserted y deleted. SQL Server 2008 crea y administra automticamente ambas tablas. La estructura de las tablas inserted y deleted es la misma que tiene la tabla que ha desencadenado la ejecucin del trigger. La primera tabla (inserted) solo est disponible en las operaciones INSERT y UPDATE y en ella estn los valores resultantes despus de la insercin o actualizacin. Es decir, los datos insertados. Inserted estar vaca en una operacin DELETE. En la segunda (deleted), disponible en las operaciones UPDATE y DELETE, estn los valores anteriores a la ejecucin de la actualizacin o borrado. Es decir, los datos que sern borrados. Deleted estar vaca en una operacin INSERT. No existe una tabla UPDATED? No, hacer una actualizacin es lo mismo que borrar (deleted) e insertar los nuevos (inserted). La sentencia UPDATE es la nica en la que inserted y deleted tienen datos simultneamente. Ejemplo 01 Para nuestro ejemplo usaremos la tabla Compaa de envos ANALIZANDO creo un trigger que emitir un mensaje Ud.

'Usted Acaba de Ingresar DATOS' Que se mostrara cada vez que un cliente ejecute la instruccin INSERT sobre la tabla que apunta.El cliente puede ser: Por medio de Transact-SQL Aplicacin Visual Basic Excel SQL Management Studio, etc Realizar algo mientras alguien ingresa datos.

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 83 de 101

RPP - Taller de Base de Datos I


Ejemplo 02 Trigger de Actualizacin ANALIZANDO Ud. creo un trigger que emitir un mensaje 'Usted Acaba de Ingresar Modificar Datos' Que se mostrara cada vez que un cliente ejecute la instruccin UPDATE sobre la tabla que apunta. El cliente puede ser: Una vez creado el Trigger lo ejecutamos con una consulta de actualizacin

Ejemplo 03 Trigger de Eliminacion

ANALIZANDO Ud. creo un trigger que emitir un mensaje 'Usted Acaba de Ingresar Eliminar Datos' Que se mostrara cada vez que un cliente ejecute la instruccin DELETE sobre la tabla que apunta. Una vez creado el Trigger lo ejecutamos con una consulta de Eliminacion

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 84 de 101

RPP - Taller de Base de Datos I


Ejemplo 04 Este Trigger trabajas con insert, update y delete. Y cada vez que un cliente ejecute una de estas instrucciones. Mostrar un SELECT de la tabla. En el Ejemplo inserte un nuevo registro y puedes ver en la imagen que automticamente se muestra toda la lista de datos con el nuevo registro. Si Actualizas o eliminas suceder la misma accin

Ejemplo 05 Permite mostrar un mensaje. Cuando se elimina una tabla en la base de datos

Los desencadenadores DDL pueden activarse en respuesta a un evento de Transact-SQL procesado en la base de datos actual o en el servidor actual. El mbito del desencadenador depende del evento. Por ejemplo, un desencadenador DDL creado para activarse como respuesta a un evento CREATE_TABLE se activar siempre que se produzca un evento CREATE_TABLE en la base de datos o en la instancia de servidor. Un desencadenador DDL creado para activarse como respuesta a un evento CREATE_LOGIN se activar nicamente cuando que se produzca un evento CREATE_LOGIN en el servidor.

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 85 de 101

RPP - Taller de Base de Datos I

9 Activar o Desactivar USP


-- Desactiva el trigger TR_CUENTAS DISABLETRIGGER TR_CUENTAS ON CUENTAS GO -- activa el trigger TR_CUENTAS ENABLETRIGGER TR_CUENTAS ON CUENTAS GO -- Desactiva todos los trigger de la tabla CUENTAS ALTERTABLE CUENTAS DISABLETRIGGER ALL GO -- Activa todos los trigger de la tabla CUENTAS ALTERTABLE CUENTAS ENABLETRIGGER ALL

10 Copia de Seguridad
Para el ejemplo vamos a crear una base de datos de nombre PANDAL Imaginemos que esta base de datos contiene. Tablas, USPs, Funciones etc. Y deseamos generar una copia de seguridad. Para luego restaurar nuestra base de datos. Esta prctica es usada para tener una copia de datos si ocurriera algn desastre que con lleve a la perdida de la informacin. Tambin algunos estudiantes lo usan para transportas sus bases de datos. PASOS A.- Seleccionar la base de datos Clic en TAREAS + COPIAS DE SEGURIDAD como podemos ver en la imagen

Pgina 86 de 101

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

RPP - Taller de Base de Datos I


B.- ingresar el nombre y la descripcin

Nombre y Descripcin

C.- Clic en el botn AGREGAR D.- Clic Botn Examinar (botn de 3 puntos) E.- Seleccionar la Unidad C:\ o el que t elijas F.- ingresar Nombre de Archivo G.- Presionar Aceptar

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 87 de 101

RPP - Taller de Base de Datos I


H.- Presionar Aceptar

I.- Verificar los datos y verificar la copia de seguridad Por generada. Clic en Aceptar

J.- Esperar la Ejecucin y Veras.

Presionar Aceptar y Verifica la Existencia del Archivo BackUp de la Db Pandal NOTA: Se Recomienda que elimines la Db Pandal
EL ESTUDIANTE DEBE GENERAR LA COPIA SDE SEGURIDAD DE SU BASE DE DATOS PARA LUEGO RESTAURARLO EN EL SERVIDOR QUE HACE USO. LA CREACION DE BASE DE DATOS ES UNA TAREA FUNDAMENTAL DE UN DBA Y SON PROGRAMADAS PARA SU CREACION EN UN MOMENTO DETERMINADO. ADEMAS REDORDAR QUE TAMBIEN SE PUEDE CREAR COPIA DE SEGURIDAD Y RESTAURAR CON CODIGO TRANSACT-SQL

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 88 de 101

RPP - Taller de Base de Datos I

11 Restaurar una Copia de Seguridad


A.- Seleccionar Cualquier Base de Datos y Clic en TAREAS + RESTAURAR + BASE DE DATOS

B.- Ingresar el Nombre de la Nueva base de datos A una base de datos: PANDALSOFT

C.- Origen de Restauracin Desde Dispositivo

Selecciona

D.- Presionar el botn (de 3 puntos)

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 89 de 101

RPP - Taller de Base de Datos I

E.- Presionar el botn Agregar F.- Buscar la ubicacin de tu archivo de Copia de seguridad (archivo .BAK)

G.- Presionar Aceptar

H.- Presionar Aceptar

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 90 de 101

RPP - Taller de Base de Datos I

Propuesto 07
1) Crear una funcin que me permita Mostrar el sueldo de un profesor sabiendo sus pago hora y sus horas trabajadas 2) Crear una funcin que me permita ingresar un nmero y mostrar el nmero elevado al cuadra

3) Crear un funcin que permita ingresar la edad de la persona y muestre un mensaje por si es Nio, Joven, Adulto y Adulto mayor 4) Crear una funcin que muestre el nombre, precio y stock de los productos de la tabla productos

5) Crear una funcin que me muestre las ventas totales que realizo un empleado. Debes ingresar su cdigo 6) Crear una funcin que me permita crear cdigo autogenerados ej. P0001, P0002, P0003

7) USP que me permita generar cdigo auto generados. Que depender de la categora. Ej. BEBIDAS B0001, B0002, B0003 - REPORTERIA ser R0001, R0002, etc. Y si se agregara una nueva categora. esa nueva categora tendr su nuevo cdigo auto generado. 8) USP Para Mostrar los productos con un intervalo de precios 9) USP Para Mostrar los productos donde el precio sea mayor a un precio ingresado 10) USP Para Mostrar los productos donde el precio sea menor a un precio ingresado 11) USP Para Mostrar los productos donde sea ingresado el nombre del proveedor el proveedor 12) USP Para Mostrar los productos donde depende del pas y regin del proveedor 13) USP Para Mostrar los productos activos o no activos 14) USP Para restaurar el stock de un producto cuando un cliente cancela dicho pedido 15) USP de mantenimiento de todas las tablas de Wards Supermarket 16) Como Restaurar una base de dato con cdigo Transact-SQL - Ejemplos

Fecha de entrega:

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 91 de 101

RPP - Taller de Base de Datos I

CAPITULO 08
Objetivos.-Conocer el manejo de transacciones dentro de un servidor. Los tipos de transacciones. Y por ltimo aprender a gestionar permisos y restricciones de todos los objetos que aprendi en este material

1 Transacciones en Transact SQL 2 Creacin de Usuarios y Asignar Permisos y Restricciones 3 Modificar Usuario SA 4 Ingresando como Usuario JHONNY 5 Otorgando Permisos a JHONNY 100 101

93 98 99

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 92 de 101

RPP - Taller de Base de Datos I

1 Transacciones en Transact SQL


Concepto de transaccion Una transaccin es un conjunto de operaciones Transact SQL que se ejecutan como un nico bloque, es decir, si falla una operacin Transact SQL fallan todas. Si una transaccin tiene xito, todas las modificaciones de los datos realizadas durante la transaccin se confirman y se convierten en una parte permanente de la base de datos. Si una transaccin encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos. El ejemplo clsico de transaccin es una transferencia bancaria, en la que quitamos saldo a una cuenta y lo aadimos en otra. Si no somo capaces de abonar el dinero en la cuenta de destino, no debemos quitarlo de la cuenta de origen. SQL Server funciona por defecto con Transacciones de confirmacin automtica, es decir, cada instruccin individual es una transaccin y se confirma automticamente. Sobre el ejemplo anterior de la transferencia bancaria, un script debera realizar algo parecido a los siguiente:

DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) /* Asignamos el importe de la transferencia * y las cuentas de origen y destino */ SET @importe = 50 SET @CuentaOrigen = '200700000001' SET @CuentaDestino = '200700000002' /* Descontamos el importe de la cuenta origen */ UPDATE CUENTAS SET SALDO = SALDO - @importe WHERE NUMCUENTA = @CuentaOrigen /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO + @importe, SALDO, @importe, getdate()FROM CUENTAS WHERE NUMCUENTA = @CuentaOrigen /* Incrementamos el importe de la cuenta destino */ UPDATE CUENTAS SET SALDO = SALDO + @importe WHERE NUMCUENTA = @CuentaDestino /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO - @importe, SALDO, @importe, getdate() FROM CUENTASWHERE NUMCUENTA = @CuentaDestino Esta forma de actuar seria errnea, ya que cada instruccin se ejecutara y confirmara de forma independiente, por lo que un error dejara los datos errneos en la base de datos (ese es el peor error que nos podemos

encontrar)

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 93 de 101

RPP - Taller de Base de Datos I


Transacciones implicitas y explicitas
Para agrupar varias sentencias Transact SQL en una nica transaccin, disponemos de los siguientes mtodos: Transacciones explcitas Cada transaccin se inicia explcitamente con la instruccin BEGIN TRANSACTION y se termina explcitamente con una instruccin COMMIT o ROLLBACK. Transacciones implcitas Se inicia automticamente una nueva transaccin cuando se ejecuta una instruccin que realiza modificaciones en los datos, pero cada transaccin se completa explcitamente con una instruccin COMMIT o ROLLBACK. Para activar-desactivar el modo de transacciones implcitas debemos ejecutar la siguiente instruccin. --Activamos el modo de transacciones implicitas SETIMPLICIT_TRANSACTIONSON --Desactivamos el modo de transacciones implicitas SETIMPLICIT_TRANSACTIONSOFF Cuando la opcin ANSI_DEFAULTS est establecida en ON, IMPLICIT_TRANSACTIONS tambin se establece en ON.El siguiente ejemplo muestra el script anterior haciendo uso de TRANSACCIONES EXPLICITAS.

DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) /* Asignamos el importe de la transferencia * y las cuentas de origen y destino */ SET @importe = 50 SET @CuentaOrigen = '200700000002' SET @CuentaDestino = '200700000001' BEGINTRANSACTION -- O solo BEGIN TRAN BEGINTRY /* Descontamos el importe de la cuenta origen */ UPDATE CUENTAS SET SALDO = SALDO - @importe WHERE NUMCUENTA = @CuentaOrigen /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO + @importe, SALDO, @importe, getdate() FROM CUENTAS WHERE NUMCUENTA = @CuentaOrigen /* Incrementamos el importe de la cuenta destino */

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 94 de 101

RPP - Taller de Base de Datos I


UPDATE CUENTAS SET SALDO = SALDO + @importe WHERE NUMCUENTA = @CuentaDestino /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO - @importe, SALDO, @importe, getdate() FROM CUENTAS WHERE NUMCUENTA = @CuentaDestino /* Confirmamos la transaccion*/ COMMITTRANSACTION -- O solo COMMIT ENDTRY BEGINCATCH /* Hay un error, deshacemos los cambios*/ ROLLBACKTRANSACTION -O solo ROLLBACK PRINT 'Se ha producido un error!' ENDCATCH

El siguiente ejemplo muestra el mismo script con TRANSACCIONES IMPLICITAS.

SETIMPLICIT_TRANSACTIONSON DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) /* Asignamos el importe de la transferencia * y las cuentas de origen y destino */ SET @importe = 50 SET @CuentaOrigen '200700000002' SET @CuentaDestino '200700000001'

= =

BEGINTRY /* Descontamos el importe de la cuenta origen */ UPDATE CUENTAS SET SALDO = SALDO - @importe WHERE NUMCUENTA = @CuentaOrigen /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO + @importe, SALDO, @importe,

getdate() FROM CUENTAS WHERE NUMCUENTA = @CuentaOrigen

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 95 de 101

RPP - Taller de Base de Datos I

/* Incrementamos el importe de la cuenta destino */ UPDATE CUENTAS SET SALDO = SALDO + @importe WHERE NUMCUENTA = @CuentaDestino /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO - @importe, SALDO, @importe, getdate() FROM CUENTAS WHERE NUMCUENTA = @CuentaDestino /* Confirmamos la transaccion*/ COMMITTRANSACTION -O solo COMMIT ENDTRY BEGINCATCH /* Hay un error, deshacemos los cambios*/ ROLLBACKTRANSACTION -O solo ROLLBACK PRINT 'Se ha producido un error!' ENDCATCH

La transaccin sigue activa hasta que emita una instruccin COMMIT o ROLLBACK. Una vez que la primera transaccin se ha confirmado o revertido, se inicia automticamente una nueva transaccin la siguiente vez que la conexin ejecuta una instruccion para modificar datos. La conexin contina generando transacciones implcitas hasta que se desactiva el modo de transacciones implcitas.Podemos verificar el nmero de transacciones activas a travs de @@TRANCOUNT.

SETIMPLICIT_TRANSACTIONSON BEGINTRY UPDATE CUENTAS SET FXALTA = FXALTA 1 PRINT @@TRANCOUNT COMMIT ENDTRY BEGINCATCH ROLLBACK PRINT 'Error' ENDCATCH

Docentes:

Lic. Luis M. Rojas Ziga

Lic. Zambrano Arce, Julio

Pgina 96 de 101

Lic. Ramiro De la Cruz

Lic. Israel Huaraca

RPP - Taller de Base de Datos I


Transacciones anidadas. Podemos anidar varias transacciones. Cuando anidamos varias transacciones la instruccin COMMIT afectar a la ltima transaccin abierta, pero ROLLBACK afectar a todas las transacciones abiertas. Un hecho a tener en cuenta, es que, si hacemos ROLLBACK de la transaccin superior se desharn tambin los cambios de todas las transacciones internas, aunque hayamos realizado COMMIT de ellas.

BEGINTRAN UPDATE EMPLEADOS SET NOMBRE = 'Jhonny Huber' WHERE ID=101 BEGINTRAN UPDATE EMPLEADOS SET APELLIDO1 = 'Pandal' WHERE ID=101 -- Este COMMIT solo afecta a la segunda transaccion. COMMIT -- Este ROLLBACK afecta transacciones. ROLLBACK a las dos

Una consideracin a tener en cuanta cuando trabajamos con transacciones anidadas es la posibilidad de utilizar puntos de guardado o SAVEPOINTs. Puntos de recuperacin (SavePoint). Los puntos de recuperacin (SavePoints) permiten manejar las transacciones por pasos, pudiendo hacer rollbacks hasta un punto marcado por el savepoint y no por toda la transaccin. BEGINTRAN UPDATE EMPLEADOS SET NOMBRE = 'Devjoker' WHERE ID=101 UPDATE EMPLEADOS SET APELLIDO1 = 'Devjoker.COM' WHERE ID=101 SAVETRANSACTION P1 -- Guardamos la transaccion (Savepoint) UPDATE EMPLEADOS SET APELLIDO1 = 'Otra cosa!' WHERE ID=101 -- Este ROLLBACK afecta solo a las instrucciones -- posteriores al savepoint P1. ROLLBACKTRANSACTION P1 -Confirmamos la transaccion COMMIT

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 97 de 101

RPP - Taller de Base de Datos I

2 Creacin de Usuarios y Asignar Permisos y Restricciones


Configurar Sesion SA
A.- Expandir carpeta Seguridad luego Inicios de Sesin B.- Clic en Propiedades del MC del Inicios de sesin SA C.- Ingresar las NUEVAS CONTRASEAS: pandal1980

D.- Clic en Botn ACEPTAR

Ingresar Usuario SA A.- Clic ARCHIVO + DESCONECTAR EXPLORADOR DE OBJETOS B.- Clic ARCHIVO + CONECTAR EXPLORADOR DE OBJETOS

C.- Verifica el Nombre de Sesin

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 98 de 101

RPP - Taller de Base de Datos I

Objetos de ejemplo a administrar


A.- Creacin de DB Pandalsoft

B.- Creacin de Tabla Planilla

C.- Ingresar Registros

SA es un inicio de sesin que tiene todos los permisos para administrar las herramientas y todas las bases de datos de SQL Server 2008. Es un Sper Usuario. El siguiente paso es crear un Nuevo Usuario con Permisos Limitados

3 ModificarUsuario SA
A.- Expandir la carpeta Seguridad y luego Inicios de Sesin B.- Clic en Nuevo Inicio de sesin C.- Ingresar Nombre de Inicio de sesin y su contrasea

La contrasea ser: pandal1980 Con autenticacin SQL Server Las contraseas deben tener una combinacin especial de dgitos por seguridad

D.- Selecciona base de datos Master E.- Clic en Aceptar

Pgina 99 de 101

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

RPP - Taller de Base de Datos I

4 Ingresando como Usuario JHONNY


A.- Clic ARCHIVO + DESCONECTAR EXPLORADOR DE OBJETOS B.- Clic ARCHIVO + CONECTAR EXPLORADOR DE OBJETOS

C.- Ingresar Usuario y Contrasea D.- Verificar Ingreso

CONSULTAS Abrimos el analizador de consultas y agregamos y ejecutamos lo siguiente Use Pandalsoft Go Select * From Planilla GO

Como Puede Ver El Usuario Jhonny No Tiene Acceso A Ninguna Base De Datos Ni Tampoco Puede Crear Bases De Datos. Este Usuario Es Un Usuario Sin Permisos. Quin Administra Los Permisos? Un Usuario Que Tiene El Rol De Sysadmin En Nuestro Caso El Usuario

SA
Lic. Zambrano Arce, Julio Lic. Israel Huaraca Pgina 100 de 101

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

RPP - Taller de Base de Datos I

5 Otorgando Permisos a JHONNY

A.- Desconctate de JHONNY e Ingresa como Usuario SA

B.- ahora crearemos el siguiente escenario. Te entrego estas lneas de script Use Pandalsoft Go -- Consultando Select * From dbo.Planilla GO -- insertar nuevo registro de PEPE INSERT Planilla VALUES('E0006','PEPE',1200,'12/12/2011','Obrero',5) -- modificando du fecha de contrato de PEPE UPDATE Planilla SET FinContrato='12/12/2013' WHERE IdEmpleado='E0006' --eliminando a PEPE DELETE FROM Planilla WHERE IdEmpleado='E0006' Haremos que el usuario JHONNY solo tenga acceso a la base de datos Pandalsoft. Adems el solo podr insertar registros a la tabla. y NO podr actualizar ni eliminar registros. Adems te dars cuenta que el usuario JHONNY no podr crear bases de datos Y Bueno este escenario lo haremos en clases. As que les dejo con las ganas. Investigar y practicar es lo que nos hace ms grandes. NUNCA LO OLVIDES

Docentes:

Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz

Lic. Zambrano Arce, Julio Lic. Israel Huaraca

Pgina 101 de 101

Vous aimerez peut-être aussi