0% encontró este documento útil (0 votos)
1K vistas139 páginas

Fundamentos de Base de Datos

Este manual presenta los fundamentos de diseño de bases de datos utilizando SQL. En la primera sección, explica cómo crear modelos de datos, diagramas entidad-relación y bases de datos físicas mediante SQL. La segunda sección cubre la implementación de Transact SQL para crear y optimizar bases de datos. La tercera sección explica cómo diseñar e implementar bases de datos relacionales en MySQL. La cuarta sección trata sobre la programación con T-SQL, incluidos los procedimientos almacenados. La quinta sección cubre operaciones avanzadas con SQL

Cargado por

Maurizio Sh
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
1K vistas139 páginas

Fundamentos de Base de Datos

Este manual presenta los fundamentos de diseño de bases de datos utilizando SQL. En la primera sección, explica cómo crear modelos de datos, diagramas entidad-relación y bases de datos físicas mediante SQL. La segunda sección cubre la implementación de Transact SQL para crear y optimizar bases de datos. La tercera sección explica cómo diseñar e implementar bases de datos relacionales en MySQL. La cuarta sección trata sobre la programación con T-SQL, incluidos los procedimientos almacenados. La quinta sección cubre operaciones avanzadas con SQL

Cargado por

Maurizio Sh
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SERVICIO NACIONAL DE ADIESTRAMIENTO EN TRABAJO INDUSTRIAL

COMPUTACIÓN E
INFORMÁTICA

MANUAL DE APRENDIZAJE

FUNDAMENTOS DE
BASE DE DATOS

CÓDIGO: 89001826

Profesional Técnico
CONTENIDO

TAREA-DENOMINACIÓN PÁG N°
I. DISEÑA MODELOS DE DATOS, BASES DE DATOS Y TABLAS
5
EN SQL.
1.1. Crear modelos de datos. 5
1.2. Crear modelo E-R y la base de datos. 10
1.3. Crear tablas y su estructura. 19
1.4. Aplicar SQL para crear base de datos y tablas. 32
1.5. Crear taller de modelo de datos y creación de base de datos. 36
Marco Teórico. 39
II. IMPLEMENTA TRANSACT SQL. 44
2.1. Implementar tendencias DDL. 44
2.2. Crear y optimizar con DML. 46
2.3. Crear variables y estructura de control. 51
2.4. Implementar funciones SQL. 53
Marco Teórico. 65
III. IMPLEMENTA BASE DE DATOS Y TABLAS EN MYSQL. 75
3.1. Diseñar modela relacional en MYSQL. 75
3.2. Crear operaciones con la base de datos en MYSQL. 78
3.3. Implementar operaciones utilizando DML. 81
3.4. Crear taller de implementación de base de datos con MYSQL. 88
Marco Teórico. 90
IV. IMPLEMENTA PROGRAMACIÓN CON T-SQL. 103
4.1. Implementar Store Procedure Básico. 103
4.2. Implementar Store Procedure con varias tablas. 107
4.3. Crear disipadores básicos. 113
4.4. Crear disipadores avanzados. 119
V. IMPLEMENTAR OPERACIONES AVANZADAS CON SQL. 128
5.1. Crear operaciones utilizando el agente SQL. 128
5.2. Crear Subquery con SQL. 134
5.3. Crear operación con SQL Azure. 136
Marco Teórico. 140
FUNDAMENTOS DE BASE DE DATOS

I. DISEÑA MODELO DE DATOS, BASE DE DATOS Y TABLAS EN SQL.


El participante al término de esta Tarea podrá diseñar, crear modelos de datos y base
de datos aplicando sql server. Esta Tarea deberá desarrollar las siguientes operaciones.
- Crear modelos de datos.
- Crear modelo E-R y la base de datos.
- Crear tablas y su estructura.
- Aplicar SQL para Crear Base de datos y Tablas.
- Crear taller de Modelo de Datos y Creacion de Base de Datos.

1.1. CREAR MODELOS DE DATOS.


Un modelo de datos es un sistema formal y abstracto que permite describir los
datos de acuerdo con reglas y convenios predefinidos o podrias decir que es un
conjunto de conceptos que permiten describir, a distintos niveles de abstracción, la
estructura de una base de datos.

Existen diferentes tipos de modelos dentro de los mas utilizados se encuetran los
modelos entidad relación el cual realizaras algunos ejemplos preliminares.

Ejemplo 1. CASO ALMACÉN.

1. Descripción del proceso: Se trata de una base de datos sobre los suministros que
ingresan los proveedores hacia un determinado almacén, para lo cual se debe llevar
un control de los suministros y de sus cuentas contables.

2. Identificar conjunto de entidades:


A primera vista existen tres conjuntos de entidades:

PROVEEDOR SUMINISTRO CUENTA CONTABLE

3. Identificar conjunto de Relaciones: Cada proveedor ingresa uno o más suministros, y


estos pueden ser vendidos por uno o más proveedores, dándose una relación de uno
a muchos. Los suministros pertenecen a una determinada cuenta contable, y esta
contendrá múltiples suministros dándose una relación de muchos a uno.

4. Trazar primer diagrama:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 5


FUNDAMENTOS DE BASE DE DATOS

Utilizando la herramienta sería:

5. Identificar atributos. Se deben identificar los atributos para cdda conjunto de


entidades:

Entorno del programa

Paso 1.

Paso 2:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 6


FUNDAMENTOS DE BASE DE DATOS

Paso 3. Crear igual para suministro y cuenta contable.

Paso 4. Identificar los tipos de relaciones o cardinalidad a aplicar.

Proceder a relacionar.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 7


FUNDAMENTOS DE BASE DE DATOS

6. Seleccionar claves principales:


Proveedor: Código o RUC.
Suministro: Código Suministro.
Cuenta Contable: Número de Cuenta.

Ejemplo 2. CASO BIBLIOTECA.

Paso 1.
1. Descripción del proceso: Se trata de una base de datos que debe almacenar
información sobre el préstamo de libros a los alumnos de una determinada escuela,
los cuales son escritos por varios autores y pertenecen a una determinada editorial,
además se refieren a una determinada especialidad.

2. Identificar Conjunto de entidades:


A primera vista existen 5 conjuntos de entidades:

ALUMNO LIBRO AUTOR EDITORIAL ESPECIALIDAD

3. Identificar Conjunto de relaciones.


• Un alumno puede prestar muchos libros, a su vez que estos libros pueden ser
prestados por muchos alumnos: Muchos a Muchos.
• Cada libro pertenece a una especialidad, y pueden existir muchos libros de esta
especialidad: Muchos a Uno.
• Un libro es escrito por uno o varios autores, y estos autores pueden escribir uno o
mas libros: Muchos a Muchos
Un libro pertenece a una editorial, y en esa editorial se pueden imprimir muchos libros:
Muchos a Uno

4. Trazar primer diagrama.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 8


FUNDAMENTOS DE BASE DE DATOS

5. Identificar Atributos. Se deben identificar los atributos para cada conjunto de


entidades

6. Seleccionar claves principales:


- Libro: Código o Título.
- Alumno: CodAlumno
- Especialidad CodEspecialidad.
- Autor: CodAutor.
- Editorial: CodEditorial.

Utiizando la herramienta siga las indicaciones del instructor.

Ejemplo 3.
Elaborar el siguiente modelo de datos para un sistema de venta utilizando la herramienta
dbdesigner siguiendo las indicaciones del instructor:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 9


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 4. Elaboracion de un modelo físico utilizando el Diagrama de base de datos de


SQL server

1.2. CREAR MODELO E-R Y LA BASE DE DATOS.


Los diagramas o modelos entidad-relación (denominado por su sigla, ERD “Diagram
Entity relationship”) son una herramienta para el modelado de datos de un sistema de
información. Estos modelos expresan entidades relevantes para un sistema de
información, sus inter-relaciones y propiedades veamos algunos ejercicios aplicativos
para entender su construcción.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 10


FUNDAMENTOS DE BASE DE DATOS

Conceptos preliminares. Objeto: SENATI.


Entidades (clases)

Entidad (Clase): Instituto

Objeto: TECSUP.

REPRESENTACION DE UNA ENTIDAD (CLASE).


Para poder representar una entidad o clases se va a
realizar lo siguiente:

Ejemplo 1:

Ejemplo 2:
Relacionar:
Una relación es una asociación entre dos o más entidades (Clases).

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 11


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 3. Relaciones entre entidades:

Ejemplo 4

CASO APLICATIVO 1. En una hoja y papel realice los siguientes diagramas:

- Identificar las entidades.


- Identificar los atributos por entidades.
- Relacionar cada una de las entidades.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 12


FUNDAMENTOS DE BASE DE DATOS

TITULO: ARTÍCULOS Y ENCARGOS.


Diseñar el diagrama entidad relación para crear una base de datos en una pequeña
empresa esta debe contener información acerca de clientes, artículos y Pedidos. Hasta
el momento se registran los siguientes datos en documentos varios:

- Para cada cliente: Número de cliente (único), Direcciones de envío (varias por
cliente), Saldo, Límite de Crédito (depende del cliente, pero en ningún caso debe
superar los 3.000.000 soles), Descuento.
- Para cada artículo: Número de artículo (único), Fábricas que lo distribuyen,
Existencias de ese artículo en cada fábrica, Descripción del artículo.
- Para cada pedido: Cada pedido tiene una cabecera y el cuerpo del pedido. La
cabecera está formada por el número de cliente, dirección de envío y fecha del
pedido. El cuerpo del pedido son varias líneas, en cada línea se especifican el
número del artículo pedido y la cantidad. Además, se ha determinado que se debe
almacenar la información de las fábricas. Sin embargo, dado el uso de distribuidores,
se usará: Número de la fábrica (único) y Teléfono de contacto. Y se desean ver
cuántos artículos (en total) provee la fábrica. También, por información estratégica,
se podría incluir Información de fábricas alternativas respecto de las que ya fabrican
artículos para esta empresa.
Nota: Una dirección se entenderá como Nº, Calle, Comuna y Ciudad. Una fecha incluye
hora.

CASO APLICATIVO 2: Sistema de ventas. Le contratan para hacer una Base de Datos
que permita apoyar la gestión de un sistema de ventas. La empresa Necesita llevar un
control de proveedores, clientes, productos y ventas. Un proveedor tiene un RUT,
nombre, dirección, teléfono y página web. Un cliente también tiene RUT, Nombre,
dirección, pero puede tener varios teléfonos de contacto. La dirección se entiende por
calle, Número, comuna y ciudad. Un producto tiene un id único, nombre, precio actual,
stock y nombre del proveedor. Además, se organizan en categorías, y cada producto va
sólo en una categoría. Una categoría tiene id, nombre y descripción. Por razones de
contabilidad, se debe registrar la información de cada venta con un id, fecha, cliente,
descuento y monto final. Además, se debe guardar el precio al momento de la venta, la
cantidad vendida y el monto total por el producto.

CASO APLICATIVO 3: Sistema de vuelos.


Diseñar el diagrama E/R para un sistema de control de vuelos adaptado a las siguientes
reglas de gestión (indicar las entidades, interrelaciones, etc., que se deducen de cada
una de las reglas):
a. De cada aeropuerto se conoce su código, nombre, ciudad y país.
b. En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de
un avión determina su capacidad, es decir, el número de plazas.
c. En cada aeropuerto existe una colección de programas de vuelo. En cada programa
de vuelo se indica el número de vuelo, línea aérea y días de la semana en que existe
dicho vuelo.
d. Cada programa de vuelo despega de un aeropuerto y aterriza en otro.
e. Los números de vuelo son únicos para todo el mundo.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 13


FUNDAMENTOS DE BASE DE DATOS

f. En cada aeropuerto hay múltiples aterrizajes y despegues. Todos los aeropuertos


contemplados están en activo, es decir, tienen algún aterrizaje y algún despegue.
g. Cada vuelo realizado pertenece a un cierto programa de vuelo. Para cada vuelo se
quiere conocer su fecha, plazas vacías y el modelo de avión utilizado.
h. Algunos programas de vuelo incorporan escalas técnicas intermedias entre los
aeropuertos de salida y de llegada. Se entiende por escala técnica a un aterrizaje y
despegue consecutivos sin altas ó bajas de pasajeros.
i. De cada vuelo se quieren conocer las escalas técnicas ordenadas asignándole a
cada una un número de orden. Por ejemplo, el programa de vuelo 555 de Iberia con
vuelos los lunes y jueves despega de BarajasMadrid-España y aterriza en Caudell-
Sydney-Australia teniendo las siguientes escalas técnicas:

1- Los Pradiños-Sao Paulo-Brasil, 2-El Emperador-Santiago-Chile y 3-Saint Kitts-


Auckland-Nueva Zelanda.

¿Qué cambios se producirán en el caso anterior si en las escalas pudiesen bajar o subir
pasajeros?

Explicar cómo se podría representar esta nueva situación.

Caso domiciliario:
Se desea crear un sitio web con información referente a las películas en cartel en las
salas de un dudoso Cine cercano a la plaza mayor del centro de Lima.

De cada película, se almacena una ficha con su título de distribución, su título original,
su género, el idioma origina, si tiene subtítulos en español o no, los paises de origen, el
año de la producción, la url del sitio web de la película, la duración (en horas y minutos),
la calificación (Apta todo público, +9 años, +15 años, +18 años), fecha de estreno en
Santiago, un resumen y un identificador de la película. De cada película interesa conocer
la lista de directores y el reparto, es decir para cada actor que trabaja, el nombre de
todos los personajes que interpreta.

Además, interesa disponer de información sobre los directores y actores que trabajan
en cada película.

De ambos, se conoce su nombre (que lo identifica) y su nacionalidad. Además, se desea


conocer la cantidad de películas en las que dirigieron o actuaron. Tener en cuenta que
hay personas que cumplen los dos roles. Los cines pueden tener más de una sala y
cada semana cada uno de los cines envía la cartelera para dicha semana, indicando de
detalle de las funciones. Para cada función se conoce el día de la semana y la hora de
comienzo, y obviamente la sala y la película que exhibe. De cada sala se sabe el
nombre, un número que la identifica dentro del cine y la cantidad de butacas que posee.
De cada cine se conoce el nombre que lo identifica, su dirección y teléfono para
consultas.

Algunos cines cuentan con promociones. Estas promociones dependen de la función.


(Ej. de lunes a jueves antes de las 18:00 horas, 50% de descuento en la sala tal del cine

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 14


FUNDAMENTOS DE BASE DE DATOS

tal para la película cual...La función del lunes a las 14:00 para la película tal en la sala
cual, no se cobra a los escolares con túnica...). De cada promoción se conoce una
descripción y el descuento que aplica. Además del resumen de la película que se incluye
en la ficha interesa mostrar la opinión de las personas que vieron la película. De cada
opinión se conoce el nombre de la persona que la realiza, su edad, le fecha en que
registró su opinión, la calificación que le dio a la película (Obra Maestra, Muy Buena,
Buena, Regular, Mala) y el comentario propiamente dicho. A cada opinión se le asigna
un número que la identifica respecto de la película sobre la cual opina.

CASO APLICATIVO 4. UTILIZANDO SQL SERVER DISEÑAR EL MODELO RELACIONAL DE


LOS SIGUIENTES CASOS:

BASE DE DATOS: MODELO RELACIONAL

CASO1. Convertir el siguiente diagrama E-R en un modelo relacional. Establecer los


atributos claves, definir los campos y migrar su resultado a SQL SERVER, donde la
base de datos tendrá por nombre: GestiónVentas

Distrito Provincia
Calle

No Depatam

IdArticulo Detalle
Direcciones
NoCliente De Envió

Saldo N ARTICULO

Cantidad N Existencias
Límite de CLIENTE
Credito 1
Se Incluye

Fabrica
Descuento Es Hecho

N
N FABRICA
PEDIDO N NoArticulos
Provistos
NoPedido
IdFabrica

Telfonos
Fecha Monto mail

CASO 2. La cadena de Videos Glob Búster, ha decidido, para mejorar su servicio,


emplear una base de datos para almacenar la información referente a las películas que
ofrece en alquiler. Esta información es la siguiente:
- Una película se caracteriza por su titulo, nacionalidad, productora y fecha.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 15


FUNDAMENTOS DE BASE DE DATOS

- En una película pueden participar varios actores (nombre, nacionalidad, sexo)


algunos de ellos como actores principales.
- Una película esta dirigida por un director (nombre, nacionalidad).
- De cada película se dispone de uno o varios ejemplares diferenciados por un número
de ejemplar y caracterizados por su estado de conservación.
- Un ejemplar se pude encontrar alquilado a un cliente (DNI, nombre, dirección,
teléfonos). Se desea almacenar la fecha de comienzo del alquiler y de la devolución.
- Cada socio puede tener alquilados, en un momento dado, 4 ejemplares como
máximo.
- Un socio tiene que ser avalado por otro socio que responda de él en caso de tener
problemas de alquiler.

Elaborar el modelo lógico y convertirlo en una base de datos de SQL SERVER con el
nombre: VIDEOS.

CASO 3. Convertir el siguiente diagrama E-R en un modelo relacional. Establecer los


atributos claves, definir los campos y migrar su resultado a SQL SERVER, donde la
base de datos tendrá por nombre: CadenaFarmaceutica
- Se desea mantener una base de datos para una cadena de farmacias distribuida en
diferentes ciudades.
- Cada farmacia tiene sus empleados propios y un farmacéutico. Por cada ciudad
existe un único farmacéutico; esto es, si en una ciudad hubiera más de una farmacia,
el mismo farmacéutico estaría afectado a todas las farmacias de esa ciudad.
- Cada farmacia tiene a su vez su stock de medicamentos. El mismo se mantiene por
medicamento y presentación. Los medicamentos se organizan según la o las
monodrogas que lo componen, su presentación (por ejemplo, ampollas de 5
unidades, jarabe de 100ml, inyecciones por 10 unidades, pomada 60gr, etc.), el
laboratorio que lo comercializa, y su acción terapéutica (analgésico, antibiótico, etc.).
Por cada medicamento se mantiene su precio y la cantidad en existencia del mismo.
- El sistema deberá permitir consultar la base de datos de diferentes alternativas para
medicamentos compuestos por una monodroga, medicamentos de un laboratorio,
presentaciones de un medicamento, entre otras.
- El siguiente modelo ER representa lo anterior:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 16


FUNDAMENTOS DE BASE DE DATOS

Monodroga
N
Presentación
N Contiene

N N
1 N N N
Tiene
Ciudad Pertenece Farmacia Medicamento
Stock
N N
1

Tiene Cantidad
Sirve Provee
Para
N
Esta Personal Acción 1
a cargo
Terapéutica
N
Laboratorio

1
Farmacéutico Propio

CASO 4. Convertir el siguiente diagrama E-R en un modelo relacional. Establecer los


atributos claves, definir los campos y migrar el resultado a SQL SERVER, donde la base
de datos tendrá por nombre: Facturacion

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 17


FUNDAMENTOS DE BASE DE DATOS

Caso domiciliario:
CASO 1. Un Banco desea almacenar información concerniente a todos sus clientes, así
como los productos que puede ofrecer a cada uno de ellos. Del mismo modo, el banco
tiene interés en invertir en empresas, por lo que desea conocer en todo momento la
situación de dicha empresa para poder mejorar su política de inversiones.

Puesto que dicho banco esta constituido como S.A., desea llevar un registro de todos
los miembros de su consejo de administración (actuales y ex-miembros), así como de
todas las reuniones ordinarias y extraordinarias que se realicen. Las decisiones de
inversión saldrán como resultado de dichas reuniones, si como el lanzamiento de
nuevos productos financieros.

- De los clientes se desea conocer su nombre, apellidos, dirección, teléfonos,


documento de identidad, fecha de nacimiento, y estarán identificados con un código
interno.
- De los productos que ofrece el banco se almacenará su descripción, inicio de
operaciones, y estará identificado por un código.
- De las empresas en las que el banco invierte se desea conocer su razón social,
direcciones, teléfonos, y RUC.
- Del consejo directivo, que se encarga de aprobar los nuevos productos e inversiones,
se almacenara los nombres y apellidos de sus miembros y si este se encuentra
vigente o no. Además, cada miembro del consejo tendrá un cargo el cual deberá
permitir identificar la labor que desempeñan en el consejo. Del cargo se almacenará
el nombre del cargo y las funciones propias del cargo.
- De las reuniones que se realizan periódicamente y de las cuales se levanta un acta
de los acuerdos firmados, se almacenara la fecha, si es extraordinaria u ordinaria y
una descripción. Además, las reuniones serán identificas por un código

En cuanto a las relaciones:


- Es posible cada que cada cliente pueda escoger varios productos y cada producto
puede ser ofrecido o varios clientes.
- Los miembros del consejo solo pueden tener un cargo y a cada cargo puede
pertenecer más de un miembro.
- A cada reunión pueden asistir varios miembros del consejo de administración y cada
miembro puede asistir a más de una reunión.
- Las reuniones de consejo permitirán la oferta de mas de un nuevo producto, pero
estos nuevos productos solo podrán ser ofrecidos mediante una reunión de consejo,
además estas reuniones permitirán determinar en que una nueva empresa se va a
invertir, y en consecuencia las decisiones de inversión sobre nuevas empresas solo
podrán salir de una reunión.

CASO 2. Una empresa de venta anticipada de entradas para espectáculos quiere


informatizar su funcionamiento, para la cual se deberá elaborar una base de datos que
almacene la información que se genera. El funcionamiento de la empresa es el
siguiente:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 18


FUNDAMENTOS DE BASE DE DATOS

- Cuando un cliente llama por teléfono para comprar unas entradas, se comprueba si
el cliente es nuevo, en cuyo caso se almacenará en la Base de Datos el nombre del
cliente, su DNI y su teléfono. Además, se le asignará un código de cliente único.
- Existen diferentes locales de espectáculos que trabajan con esta empresa. La
información de interés de dichos locales es el código de local, el nombre, la
dirección, el teléfono y el aforo de dicho local.
- En los diferentes locales se dan distintos espectáculos. Hay que tener en cuenta que
la empresa quiere tener almacenada la programación de espectáculos de toda la
temporada por lo que un espectáculo podrá estar en varios locales a lo largo de la
temporada y un local podrá tener también diferentes espectáculos durante la
temporada. Es esencial saber las fechas de comienzo y fin de los espectáculos en
cada local.
- De los espectáculos interesa saber el código de espectáculo, su nombre y el precio
por entrada. Hay que tener en cuenta que el precio de un espectáculo puede variar
según el local donde se produzca.
- Cuando el cliente realiza una compra de entradas se tendrá en cuenta lo siguiente:
hay que almacenar la fecha para la que quiere las entradas, en que espectáculo y
en cual local, así como el número de entradas que pide. Si un cliente habitual lleva
compradas más de 20 entradas, se le realizará un descuento del 15 %. Por lo tanto,
hay que almacenar todas las compras realizadas por un cliente. También hay que
comprobar que quedan entradas disponibles. De las compras interesa saber el
código de cliente, el número de entradas compradas, la fecha, el código del local y
el código del espectáculo.

1.3. CREAR TABLAS Y SU ESTRUCTURA.


Creacion de objetos en tiempo de diseño.
Paso 1.

Paso 2.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 19


FUNDAMENTOS DE BASE DE DATOS

Paso 3. Creacion de la tabla.

Paso 4. Creación de la tabla artículos.

Creación de la tabla clientes:

Creación de la tabla Vendedores:

Creación de la tabla Facturas:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 20


FUNDAMENTOS DE BASE DE DATOS

RELACION DE TABLAS (MODELO RELACIONAL).


Paso 1.

Paso 2.

Paso 3. Agregar un campo para relacionar la tabla facturas con artículos.

Quedará de la siguiente manera:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 21


FUNDAMENTOS DE BASE DE DATOS

OPERACIONES CON LA BASE DE DATOS.

1. Exportar.
Paso 1. Crear una nueva base de datos que sirva de repositorio asigne el nombre
suministros2

Paso 2.

Paso 3.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 22


FUNDAMENTOS DE BASE DE DATOS

Paso 4. Seleccionar el nombre del servidor local.

Pegar el nombre en nombre de servidor y selecciona la base de datos de destino:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 23


FUNDAMENTOS DE BASE DE DATOS

Paso 5. Seleccionar todas las tablas que desea migrar a la nueva base de datos.

Paso 6. Ahora para visualizar las tablas en la nueva base de datos sólo se tendrá que
actualizar.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 24


FUNDAMENTOS DE BASE DE DATOS

2. Crear Copia de seguridad de la base de datos suministros.

Paso 1.

Paso 2. La copia de seguridad automáticamente se genera con la extensión BKP.

Paso 3. Verificar la existencia del archivo BKP.

3. Eliminacion de la base de datos.

Paso 1.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 25


FUNDAMENTOS DE BASE DE DATOS

Paso 2. Activar el casillero cerrar conexiones existentes.

4. Restaurar una base de datos.

Paso 1.

Paso 2. Seleccionar dispositivo y presionar…

Paso 3.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 26


FUNDAMENTOS DE BASE DE DATOS

Paso 4. Aceptar.

5. Copiar la base de datos.


Paso 1. Separar la base de datos.

Paso 2.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 27


FUNDAMENTOS DE BASE DE DATOS

Nota: La base de datos suministros2 ya no se visualiza en el panel; por lo tanto, se podrá


copiar en un usb para su portabilidad.

Paso 3. En la siguiente ruta se encuentra la BD se deberá copiar los 2 archivos.

6. Operación Adjuntar la base de datos.

Paso 1.

Paso 2. Click en el botón agregar.

Paso 3. Seleccionar la base de datos con extensión MDF(maestro).

7. Operación Generar script.

Paso 1.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 28


FUNDAMENTOS DE BASE DE DATOS

Paso 2. Seleccionar las tablas.

Paso 3. Ruta predefinida donde se almacenará el archivo.

Paso 4. Se deberá mostrar la siguiente ventana de confirmación.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 29


FUNDAMENTOS DE BASE DE DATOS

Paso 5. Verificar la existencia y ejecutar el archivo.

Paso 6. Eliminar la base de datos y pegar todo el contenido. Selecionar y ejecutar.


IMPORTATE: Crear la base de datos suministro2.

USE [SUMINISTRO2]
GO
/****** Object: Table [dbo].[ARTICULOS] Script Date: 03/01/2017 [Link] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ARTICULOS](
[ARTCOD] [char](4) NOT NULL,
[ARTDESCRI] [varchar](30) NULL,
[ARTSTOCK] [int] NULL,
[ARTPRECIO] [money] NULL,
[ARTFECHA] [smalldatetime] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[CLIENTES] Script Date: 03/01/2017 [Link] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[CLIENTES](
[CLICOD] [char](4) NOT NULL,
[CLIAPE] [varchar](30) NULL,
[CLINOM] [varchar](30) NULL,
[CLIDIR] [varchar](30) NULL,
[CLIDIS] [varchar](25) NULL,
[CLITEL] [char](9) NULL,
[CLIGEN] [char](1) NULL,
[CLIFNAC] [smalldatetime] NULL
) ON [PRIMARY]

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 30


FUNDAMENTOS DE BASE DE DATOS

GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[FACTURAS] Script Date: 03/01/2017 [Link] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[FACTURAS](
[FACOD] [char](5) NOT NULL,
[FACFECHA] [smalldatetime] NULL,
[CLICOD] [char](4) NOT NULL,
[VENCOD] [char](4) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[sysdiagrams] Script Date: 03/01/2017 [Link] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[sysdiagrams](
[name] [nvarchar](128) NOT NULL,
[principal_id] [int] NOT NULL,
[diagram_id] [int] NOT NULL,
[version] [int] NULL,
[definition] [varbinary](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[VENDEDORES] Script Date: 03/01/2017 [Link] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[VENDEDORES](
[VENCOD] [char](4) NOT NULL,
[VENAPE] [varchar](30) NULL,
[VENNOM] [varchar](30) NULL,

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 31


FUNDAMENTOS DE BASE DE DATOS

[VENDIR] [varchar](30) NULL,


[VENDIS] [varchar](25) NULL,
[VENTEL] [char](9) NULL,
[VENFNAC] [smalldatetime] NULL,
[VENGEN] [char](1) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

RESULTADO FINAL:

1.4. APLICAR SQL PARA CREAR BASE DE DATOS Y TABLAS.

En esta operación usted realiza la creación de una base de datos por intermedio de
código SQL tal como vera a continuación.

1. Creación de una base de datos.


Comando create database nombre_bd
Ejemplo
CREATE DATABASE SUMINISTROS
Creacion de una tabla
Comando Create Table Nombre_tabla
(
Nombre_Columna tipo_de_dato,
Nombre_Columna2 tipo_de_dato,

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 32


FUNDAMENTOS DE BASE DE DATOS

Nombre_Columna3 tipo_de_dato
)
Ejemplos de creacion de tablas
CREATE TABLE ARTICULOS (
ARTCOD char (4) PRIMARY KEY,
ARTDESCRI varchar (30),
ARTSTOCK int,
ARTPRECIO money,
ARTFECHA smalldatetime,
)
CREATE TABLE CLIENTES(
CLICOD char (4) PRIMARY KEY,
CLIAPE varchar (30),
CLINOM varchar (30),
CLIDIR varchar (30),
CLIDIS varchar (25),
CLITEL char (9),
CLIGEN char (1),
CLIFNAC smalldatetime
)
CREATE TABLE VENDEDORES(
VENCOD char (4) PRIMARY KEY,
VENAPE varchar (30),
VENNOM varchar (30),
VENDIR varchar (30),
VENDIS varchar (25),
VENTEL char (9),
VENFNAC smalldatetime,
VENGEN char (1)
)
CREATE TABLE FACTURAS (
FACOD char (5) NOT NULL PRIMARY KEY ,
FACFECHA smalldatetime,
CLICOD char (4) NOT NULL REFERENCES CLIENTES,
VENCOD char (4) NOT NULL REFERENCES VENDEDORES
)
Nota
El termino REFERENCES es para establecer una relación de tablas directa al momento
de construir la tabla.
Relacion de tablas
--SINTAXIS
ALTER TABLE TABLA_FKAdd foreign key(campo_FK) REFERENCES
TABLA_PK(campo_Pk)

Ejemplo 1.
Relacionando la tabla facturas con la tabla vendedores.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 33


FUNDAMENTOS DE BASE DE DATOS

ALTER TABLE FACTURAS Add foreign key(vencod) REFERENCES


VENDEDORES(vencod)

Ejemplo 2.
Relacionando la tabla facturas con la tabla clientes.
ALTER TABLE FACTURAS Add foreign key(clicod) REFERENCES CLIENTES(clicod)

CASO APLICATIVO 1. Utilizando código realizar.

 
 
 
CASO APLICATIVO 2.
 

 
 
Creación de la base de datos personalizada.

Ejemplo 1:
CREATE DATABASE SistFact
ON
(NAME = SistFact_dat,
FILENAME = 'C:\BD\SistFact_dat.mdf', --ruta del archivo logico
SIZE = 10, --tamaño de la base de datos Logica
MAXSIZE = 50, --tamaño maximo
FILEGROWTH = 5 ) --porcentaje de crecimiento
LOG ON
(NAME = 'SistFact_log',--ruta del archivo log

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 34


FUNDAMENTOS DE BASE DE DATOS

FILENAME = 'C:\BD\SistFact_log.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)

Deberá mostrar comando completados


con éxito.
Comprobando:

Creación de grupo de archivos:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 35


FUNDAMENTOS DE BASE DE DATOS

Comprobando la ubicación del nuevo archivo en el grupo.

--4 creacion de 2 tablas independientes de prueba (CLIENTES y ALMACEN)


-- el primero en el filegroup PRIMARY y el Segundo
-- en el filegroup SECUNDARY
create table cliente
(
cod_cliente int,
nomb_cliente varchar(20)
)
go
create table almacen
(
cod_alm int,
descrip varchar(20),
ubicacion int
)
on secundary --esta tabla en el grupo secundary
go

1.5. CREAR TALLER DE MODELO DE DATOS Y CREACION DE BASE DE DATOS.

En esta operación el estudiante pondrá a prueba lo aprendido para lo cual tendrá que
identificar las entidades, atributos asi como también codificar la base de datos, tablas y
relacionar cada una de las tablas, elaborando una estructura adecuada de las tablas el
tamaño total de la base de datos será de 50 Mb con un tamaño máximo de 100 Mb y
una tasa de crecimiento de 10% con la creación de grupo de archivos para la protección
de las tablas que se logren identificar. Una vez terminado comunicar al instructor para
su exposición final. El caso a analizar es:

CASO FINAL 1.
En la Empresa "Educando S.A." lleva el control de sus Bienes y Servicios. El interés
primario es poder hacer que los Bienes se manejen de forma rápida y con el menor
grado de error. Para esto quien maneja la sección de "Bienes y Suministros" plantea las
siguientes condiciones del negocio para la construcción de una base de datos: La
Sección está dividida en tres (3) áreas: COMPRAS, ALMACEN, INVENTARIO.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 36


FUNDAMENTOS DE BASE DE DATOS

El área de Compras funciona de la siguiente forma:


Recibe las solicitudes de compras de las diferentes áreas de la empresa. o Cada
solicitud tiene un responsable.

Cada solicitud es autorizada por el Jefe del Área y posteriormente por el Director
Financiero.

Quien realiza una solicitud puede ser responsable de uno o varios centros de costos,
con la salvedad de que él como empleado solo está adscrito a uno.

En la solicitud se debe diligenciar la siguiente información: Número de la Solicitud


(consecutivo), Fecha, Responsable (nombre y cédula), Centro de Costos, Rubro
presupuestal del cual se descargará la compra. En cada solicitud se pueden discriminar
uno o muchos ítems con la siguiente información: ítem, nombre del bien, cantidad
solicitada, unidad de medida del bien, valor unitario y valor total. Cada solicitud debe ser
totalizada.

Cada bien es identificado por un código universal que es único y es de carácter


devolutivo (suministro) o un bien inmueble.

Una vez diligenciada la solicitud es remitida al área de compras para realizar su


correspondiente cotización.

Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitados.
Una vez la cotización definitiva está lista, se crea una orden contractual que maneja la
siguiente información: Número de la orden contractual, nit y nombre del proveedor al
cual se le va a realizar la compra, fecha de la orden, monto total de la orden, fecha de
entrega. Cada orden puede tener asociado uno o varios ítems de la solicitud o
solicitudes que van a ser despachadas. Cada ítem tiene la siguiente información:
nombre del bien, cantidad solicitada, cantidad despachada, unidad de medida del bien,
valor unitario y valor total.

La orden de compra es aprobada por el Director Financiero para que sea enviada al
proveedor elegido.

El área de Almacén funciona de la siguiente forma:


Su función principal es recepcionar los bienes que llegan de los proveedores y
distribuirlos a las correspondientes áreas que realizaron las solicitudes de compras.

Cuando llega un proveedor mercancía, este hace una entrega física de los bienes, los
cuales son comparados con la factura que esta entrega y con la orden de compra
correspondiente. Si esta acción es correcta se registra una entrada de almacén por cada
factura relacionada, con la siguiente información: Número de Entrada, Fecha, Número
de factura, Proveedor, Total Bienes, Valor Total (los totales deben coincidir con los de
la factura). Adjunto a esta se discriminan los ítems recibidos con la siguiente
información: nombre del bien, cantidad entregada.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 37


FUNDAMENTOS DE BASE DE DATOS

Cuando el almacén decide despachar los bienes a las diferentes áreas solicitantes,
registra cada una de las entregas en Salidas de Almacén con la siguiente información:
Número de Salida, Empleado responsable del bien a entregar, fecha de salida, fecha de
entrega. Por cada entrega se detalla cada uno de los ítems con la siguiente información:
nombre del bien, cantidad entregada.

Una entrada de almacén puede generar muchas salidas de almacén, por ejemplo:
Pueden ingresar 500 pacas de papel higiénico, pero como se debe repartir entre varias
áreas, cada una requiere de una salida de almacén.

El área de inventarios funciona de la siguiente forma:


Es la encargada de administrar y controlar la ubicación de los bienes dentro de la
empresa, por esto antes de que el bien salga del almacén debe ser codificado a través
de un código único que lo haga identificable dentro de la empresa.

La ubicación del bien se identifica por la siguiente información: responsable del bien,
fecha de entrega, dirección del bien (ubicación). Diseñar modelo ER para la base de
datos.

Tipos de datos, alcances y variables

CASO FINAL 2.
Codificar el siguiente diseño de base de datos para un sistema de facturación

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 38


FUNDAMENTOS DE BASE DE DATOS

MARCO TEÓRICO

Base de datos (BD). Una BD es un conjunto de datos interrelacionados almacenados


en conjunto, sin redundancias innecesarias, de forma independiente de los programas
que acceden a ellos.

Modelos de datos. Los modelos se utilizan en todo tipo de ciencias. Su finalidad es la


de simbolizar una Parte del mundo real de forma que sea más fácilmente manipulable.
En definitiva, es un Esquema mental (conceptual) en el que se intentan reproducir las
características de una Realidad específica. En el caso de los modelos de datos, lo que
intentan reproducir es una información real que deseamos almacenar en un sistema
informático.

Se denomina esquema a una descripción específica en términos de un modelo de datos.


El conjunto de datos representados por el esquema forma la base de datos.

Clasificación de los modelos de dato:


Esquema interno BD Modelo
Conceptual Físical Interno
Mundo Modelo DBMS
real Esquema Conceptual
canónico Modelo
Esquema Lógico

Clasificación de los modelos de datos.


En la ilustración anterior aparecen los distintos esquemas que llevan desde el mundo
real a la base de datos física. Como se ve aparecen varios esquemas intermedios. Los
que están Más a la izquierda se alejan más de las características físicas. Los elementos
de ese Esquema son:

Mundo real. Contiene la información tal cual la percibimos como seres humanos.

Es el punto de partida Esquema conceptual. Representa el modelo de datos de forma


independiente del DBMS que se utilizará. Esquema canónico (o de BD). Representa los
datos en un formato más cercano al del ordenador Esquema interno. Representa los
datos según el modelo concreto de un sistema gestor de bases de datos (por ejemplo,
Oracle) Base de datos física. Los datos tal cual son almacenados en disco.

Diseño conceptual de bases de datos Modelado de datos Para conseguir estos


esquemas se utilizan modelos de datos. El paso entre cada esquema Se sigue con unas
directrices concretas. Estas directrices permiten adaptar un esquema Hacia otro. Los
dos modelos fundamentales de datos son el conceptual y el lógico. Ambos son:
Conceptuales en el sentido de que convierten parámetros del mundo real en
abstracciones Que permiten entender los datos sin tener en cuenta la física de los
mismos.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 39


FUNDAMENTOS DE BASE DE DATOS

Diferencias entre el modelo lógico y el conceptual.

El modelo conceptual es independiente del DBMS que se vaya a utilizar. El lógico


Depende de un tipo de SGBD en particular El modelo lógico es más cercano al
ordenador, Es más Cercano al usuario el modelo conceptual, el lógico forma el paso
entre el informático y el sistema.

Algunos ejemplos de modelos conceptuales son: Modelo E/R, Modelo semántico.

Ejemplos de modelos lógicos son: Modelo relacional, Codasyl, Jerárquico, Modelo


entidad relación.

Introducción. Fue ideado por Peter Chen en los años 1976 y 1977 a través de dos
artículos. Se trata de Un modelo que sirve para crear esquemas conceptuales de bases
de datos. De hecho, es Prácticamente un estándar para crear esta tarea. Se le llama
modelo E/R e incluso EI (Entidad / Interrelación). Sus siglas más populares son las E/R
por que sirven para el inglés y el español. Inicialmente (en la propuesta de Chen) sólo
se incluían los conceptos de entidad, relación y atributos. Después se añadieron otras
propuestas (atributos compuestos, generalizaciones,) que forman el llamado modelo
entidad relación extendido (se conoce con las siglas ERE) entidad/Relacion.

Entidad. Se trata de cualquier objeto u elemento (real o abstracto) acerca del cual se
pueda Almacenar información en la base de datos. Ejemplos de entidades son Alumno,
factura Entidad es un objeto que puede poseer múltiples Propiedades (atributos).
Conjunto de entidades Las entidades que poseen las mismas propiedades forman
conjuntos de entidades. Ejemplos: persona, factura, Auto.

En el modelo entidad relación una entidad se representa con un rectángulo dentro del
cual se escribe el nombre de la entidad:

PERSONA
Persona
Representación de la entidad persona:

Tipos de entidades.
1. Fuertes. Son las entidades normales que tienen existencia
por sí mismas sin depender de otras. Notación:

2. Entidad débil. Es aquella que sí necesita de otra para existir. Por ejemplo, en un
video-club lo que realmente se alquila a los clientes no son películas, sino las copias
de películas que tiene el video-club adquirido:

Ejemplo 1.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 40


FUNDAMENTOS DE BASE DE DATOS

Cardinalidad. Indica el número de relaciones en las que una entidad puede aparecer.
Se anota en términos de:

Cardinalidad mínima. Indica el número mínimo de asociaciones en las que aparecerá


cada ejemplar de la entidad (el valor que se anota es de cero o uno).

Cardinalidad máxima. Indica el número máximo de relaciones en las que puede


aparecer cada ejemplar de la entidad (puede ser uno o muchos) en los esquemas
entidad/relación la cardinalidad se puede indicar de muchas formas.

Actualmente una de las más populares es esta:


Muchos: De cero a muchos.
Uno: De uno a muchos.
De cero a uno.

Ejemplo, cada equipo cuanta con varios jugadores. Un jugador juega como mucho en
un equipo y podría no jugar en ninguno. Cada entrenador entrena a un equipo (podría
no entrenar a ninguno), el cual tiene un solo entrenador, Propiedades de las entidades
y las relaciones. En este modelo se representan Con un círculo, dentro del cual se coloca
el nombre del atributo. Ejemplo:

ASISTE CURSO
Nro_Nota, Nro_DNI, Nombre_ALUMNO, Nombre Domicilio Nombre Número

Tipos de atributos
Compuesto: Fecha: Dia/Mes/Año
Atómicos: Son aquellos que no se pueden descomponer. Ejemplo: N° DNI, N° Telefono,
etc.

Sistema de Gestión de Base de Datos (SGBD).


Los SGB (en inglés DataBase Management System) son un tipo de software muy
específico, dedicado a servir de interfaz entre la base de datos, el usuario y las
aplicaciones que la utilizan. Se compone de un lenguaje de definición de datos, de un
lenguaje de manipulación de datos y de un lenguaje de consulta.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 41


FUNDAMENTOS DE BASE DE DATOS

Desventajas de las BD:

Complejidad: Los SGBD son conjuntos de programas que pueden llegar a ser complejos
con una gran funcionalidad. Es preciso comprender muy bien esta funcionalidad para
poder realizar un buen uso de ellos. Costo del equipamiento adicional:

Tanto el SGBD, como la propia base de datos, pueden hacer que sea necesario adquirir
más espacio de almacenamiento. Además, para alcanzar las prestaciones deseadas,
es posible que sea necesario adquirir una máquina más grande o una máquina que se
dedique solamente al SGBD. Todo esto hará que la implantación de un sistema de
bases de datos sea más cara. Vulnerable a los fallos:

El hecho de que todo esté centralizado en el SGBD hace que el sistema sea más
vulnerable ante los fallos que puedan producirse. Es por ello que deben tenerse copias
de seguridad (Backup).

Tipos de Campos:
Cada Sistema de BD posee tipos de campos que pueden ser similares o diferentes.
Entre los más comunes se pueden nombrar:
- Numérico: Entre los diferentes tipos de campos numéricos podemos encontrar
enteros “sin decimales” y reales “decimales”.
- Booleanos: Poseen dos estados: Verdadero “Si” y Falso “No”.
- Memos: Son campos alfanuméricos de longitud ilimitada. Presentan el inconveniente
de no poder ser indexados.
- Fechas: Almacenan fechas facilitando posteriormente su explotación. Almacenar
fechas de esta forma posibilita ordenar los registros por fechas o calcular los días
entre una fecha y otra.
- Alfanuméricos: Contienen cifras y letras. Presentan una longitud limitada (255
caracteres).
- Autoincrementables: son campos numéricos enteros que incrementan en una unidad
su valor para cada registro incorporado. Su utilidad resulta: Servir de identificador ya
que resultan exclusivos de un registro.

Tipos de BD. Se pueden encontrar los siguientes:


- MySql: Es una base de datos con licencia GPL basada en un servidor. Se caracteriza
por su rapidez. No es recomendable usar para grandes volúmenes de datos.
- PostgreSql y Oracle: Son sistemas de base de datos poderosos. Administra muy bien
grandes cantidades de datos, y suelen ser utilizadas en intranets y sistemas de gran
calibre.
- Access: Es una base de datos desarrollada por Microsoft. Esta base de datos, debe
ser creada bajo el programa access, el cual crea un archivo .mdb con la estructura
ya explicada.
- Microsoft SQL Server: es una base de datos más potente que access desarrollada
por Microsoft. Se utiliza para manejar grandes volúmenes de informaciones.
- SQL (Structured Query Language) es un lenguaje de programación estándar e
interactiva para la obtención de información desde una base de datos y para

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 42


FUNDAMENTOS DE BASE DE DATOS

actualizarla. Aunque SQL es a la vez un ANSI y una norma ISO, muchos productos
de bases de datos soportan SQL con extensiones propietarias al lenguaje estándar.

Lenguaje de definición de datos (DDL).


Las sentencias DDL se utilizan para crear y modificar la estructura de las tablas; así
como, otros objetos de la BDs.
CREATE - Para crear objetos en la BD.
ALTER - Modifica la estructura de la BD.
DROP - Borra objetos de la BD.
TRUNCATE - Elimina todos los registros de la tabla, incluyendo todos los espacios
asignados a los registros.

CUESTIONARIO

1) ¿Qué es el modelo físico de datos?


2) ¿Qué es una BD?
3) ¿Qué son las BD estáticas?
4) Objetivo de una tabla normalizada de datos.
5) ¿Qué es una tabla maestro?
6) ¿A qué se denomina inconsistencia de BD?

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 43


FUNDAMENTOS DE BASE DE DATOS

II. IMPLEMENTA TRANSACT SQL

En esta Tarea se tratarán las siguientes Operaciones:

- Implementar sentencias DDL.


- Crear y optimizar con DML.
- Crear variables y Estructura de control.
- Implementar funciones SQL.

2.1. IMPLEMENTAR SENTENCIAS DDL.

Lenguaje de definición de datos (DDL).


Las sentencias DDL se utilizan para crear y modificar la estructura de las tablas; así
como, otros objetos de la base de datos.

CREATE. Para crear objetos en la BD.


ALTER. Modifica la estructura de la BD.
DROP. Borra objetos de la BD.
TRUNCATE. Elimina todos los registros de la tabla, incluyendo todos los espacios
asignados a los registros.

EJEMPLO 1 DE APLICACIÓN RECORDANDO.


Creación de una BD.
Create database bdsemana2

Creación de una table.


create table Articulo (
idart char (3),
nomart varchar (30),
dit varchar (30),
precio money
)

Creación de reglas (Rules).


Las reglas especifican los valores que se pueden ingresar en un campo, asegurando
que los datos se encuentren en un intervalo de valores específico.

Ejemplo1: Create rule preciorule as @precio>=1000 and @precio<1500


Ejemplo2: Create rule distrule as @dist in ('lima','ate','breña')
Ejemplo3:
create rule codirule
as
@codi like 'A0[0-9]'
Sp_bindrule

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 44


FUNDAMENTOS DE BASE DE DATOS

Descripción
Vincula una regla a una columna o a un tipo de datos definido por el usuario.

ALTER. Para agregar una columna en una tabla, utilizar la siguiente sintaxis:

ALTER TABLE Articulo ADD Fecha_ing datetime


Para eliminar una columna de una tabla

ALTER TABLE Articulo DROP COLUMN Fecha_ing


Modificando el tipo de dato de una columna alter table Articulo alter column dit varchar
(35)

DROP-Elimación de una base de datos: Drop database bdsemana2


Elimación de una table: Drop Table Artículo.
Elimación de una regla: drop rule codirule

TRUNCATE
Ejemplo: TRUNCATE TABLE Articulo

Caso aplicativo:
Paso 1. Crear las siguientes 3 tablas con sus tipos de datos.
Paso 2. Asignar 2 reglas, a su criterio, al menos en cada una de las tablas.
Paso 3. Crear una copia de seguridad de su BD.

Al terminar, comunicar al Instructor.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 45


FUNDAMENTOS DE BASE DE DATOS

2.2. CREAR Y OPTIMIZAR CON DML.

INSERT
Ejemplo 1:
Paso 1.
CREATE TABLE Distritos
(
idDistrito VarChar(3) Primary Key,
nom_dis VarChar(30) Not Null,
iniciales Char(3) Not null,
)
Paso 2.
Insertando 3 de registros en la tabla Distritos
Insert Distritos Values ('L10','El Agustino','AGU')
Insert Distritos Values ('L02','Ancon','ANC')
Insert Distritos Values ('L03','Ate Vitarte','ATE')

Ejemplo 2:
CREATE TABLE EncabezadoFactura
(
IdEnFac VarChar(10)Primary Key,
idCliente VarChar(8),
Fech_Fac DateTime,
IGV Decimal(12,2) Not Null,
SubTotal_Fac Decimal(12,2) Not Null,
Anulado Char(1),
Transferido Char(1),
Desc_Fac VarChar(50)
)

Insertando 1 registro
Insert into EncabezadoFactura Values ('F01','C01','05/01/2017',18.6,20.5,'1','0','factura
cancelada')

Ejercicio Práctico.
CREATE TABLE Clientes
(
IdCliente VarChar(8)Primary Key,
nom_cli VarChar(50) Not Null,
ape_cli VarChar(50) Not Null,
dir_cli VarChar(50) Not Null,
tel_cli VarChar(8),
Ruc_cli Varchar(15),
DNI_cli Varchar(8) Not Null,
Email_cli Varchar(50),
iddistrito VarChar(3)
)

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 46


FUNDAMENTOS DE BASE DE DATOS

Ahora deberá insertar 10 Registros aquí un adelanto de 4


Insert Clientes Values ('Cli01','Juan Carlos','jchoa','Calle 29 Coop. Primavera Mz. R1.
Lote 16','557-2147','12345678910','12345678','8aValverde@[Link]','L14')
Insert Clientes Values ('Cli02','Arturo','Capuñay Laqui','Jr. Viru 406 Nº8','481-
6507','12345678901','40344427','eternal_alcaris@[Link]','L10')
Insert Clientes Values ('Cli03','Luis Alexander','Aguilar Wong','Jr. Honradez 314 ','920-
1090','12346778910','40301579','luis_hexen@[Link]','L28')
Insert Clientes Values ('Cli04','Fredy Richard',' Anaya Jesus','Residencial Rio Sta Mz G
Lte 12','539-0886','21414956715','41495671','fredyanaya@[Link]','L39')

Paso 1. Crear las siguientes 3


tablas con sus tipos de datos.
Paso 2. Relacionar las tablas.
Paso 3. Insertar al menos 5
registros en cada una.

SELECT
Utilizado para realizar las
consultas directas a la base de
datos. Aquí algunos ejemplos
de aplicación.
Ejemplos practicos:
Paso 1. Cargar la base de datos Nortwind.
[Link]

Paso 2. Ejecutar las siguientes consultas.


---1) Listar todos los registros de la tabla Customers(Clientes)
USE Northwind
SELECT * FROM Customers
---2) Listar 3 columnas de la tabla Customers
USE Northwind
SELECT CustomerID,CompanyName,Address FROM Customers
---3) Listar solo los nombres de compañia (CompanyName) que inicien con la letra A
SELECT CompanyName FROM Customers where CompanyName like 'A%'
---4) Asignar un alias de nombre contacto a la columna ContactName
SELECT ContactName as 'contacto' FROM Customers
---5) Listar solo los nombres de compañia (CompanyName) ordenados alfabeticamente
SELECT CompanyName FROM Customers order by CompanyName asc
---6) Listar solo los nombres de compañia (CompanyName) ordenados alfabeticamente
en forma descendentemente
SELECT CompanyName FROM Customers order by CompanyName desc
---7) Listar solo los nombres de compañia (CompanyName) ordenados alfabeticamente
en forma descendentemente
SELECT CompanyName FROM Customers order by CompanyName desc
---8) Finaliza en on

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 47


FUNDAMENTOS DE BASE DE DATOS

SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',


Fax
FROM Customers WHERE CompanyName Like '%on'
ORDER BY CompanyName ASC, ContactName ASC
---9) Inicia y finaliza en a tercer caracter es la letra e
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like 'a%a' ORDER BY CompanyName
ASC, ContactName ASC
---10) Tercer caracter es la letra e
use Northwind
SELECT CompanyName, ContactName,Phone, Fax FROM Customers WHERE
CompanyName Like'__e%'
ORDER BY CompanyName ASC, ContactName ASC
---11) Tercera letra es e y quinta es w
use Northwind
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'__e_w%'
ORDER BY CompanyName ASC, ContactName ASC
---12) Sexto caracter es comilla simple
use Northwind
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'___''%' ORDER BY CompanyName
ASC, ContactName ASC
---13) Cuarto y sexto caracter debe ser comilla simple
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'__''%' OR CompanyName Like'__''%'
ORDER BY CompanyName ASC, ContactName ASC
---14) Décimo caracter es punto
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'____%' ORDER BY CompanyName
ASC, ContactName ASC
---15) Quinto caracter es -
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'____-%' ORDER BY CompanyName
ASC, ContactName ASC
---16) Listar las compañias que terminen con vocales
SELECT CompanyName as 'Compañia', ContactName 'Contacto',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'%a'or CompanyName like '%e' or
CompanyName

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 48


FUNDAMENTOS DE BASE DE DATOS

LIKE '%i' or CompanyName LIKE '%o'or CompanyName LIKE '%u' ORDER BY


CompanyName ASC,ContactName ASC
---17) Listar las compañias que terminen con vocales (otra manera) y ademas los
---contactos terminen en a,o,u
SELECT CompanyName as 'Compañia', ContactName 'Contacto', Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName Like'%[aeiou]' and ContactName like
'%[aou]' ORDER BY CompanyName ASC, ContactName ASC
--18) Listar las compañias que el ultimo caracter sea p,q,r,s,t,a,i
USE Northwind
SELECT CompanyName as 'Compañia', ContactName 'Contact',Phone as 'Telefono',
Fax
FROM Customers WHERE CompanyName LIKE '%[p-t,a,i]' order by CompanyName
ASC, ContactName ASC
--19) Listar las compañias con el codigo postal y fax (503)
SELECT CompanyName as 'Compañia', ContactName 'Contact',Phone as 'Telefono',
Fax
FROM Customers WHERE Phone LIKE '(503)%' and Fax LIKE '(503)%'
--20) Listar la identificacio y nombre de todos los productos ascendentemente
SELECT ProDuctID, ProductName from Products order by ProductID ASC
--21) Listar la identificacio y nombre de todos los productos
-- con identificacion pares
SELECT ProductID, ProductName from Products WHERE ProductID % 2=0 order by
ProductID ASC
--22) Listar precios unitarios mayores a 50 y de categoria 6
--- ordenado descendentemente por precio unitario
SELECT*FROM Products WHERE UNITPRICE > 50 AND CategoryID ='6' ORDER BY
UNITPRICE DESC
--23) Crear la tabla TBLPrecio_mayor_50 para el listado anterior
SELECT*INTO TBLPrecio_mayor_50 FROM Products
WHERE UNITPRICE > 50 AND CategoryID ='6' ORDER BY UNITPRICE DESC
--24) Sin palabra CLAVE IN
SELECT ProductID as ' ID de Producto', ProductName as 'nombre ', CategoryID as
'Categoria'
FROM Products
WHERE CategoryID=1 OR CategoryID=4 or CategoryID=5
--25) Con palabra clave IN
SELECT ProductID as ' ID de Producto', ProductName as 'nombre ', CategoryID as
'Categoria'
FROM Products
WHERE CategoryID IN ( 1,4,5)
--26) Otra manera
SELECT ProductID as ' ID de Producto', ProductName as 'nombre ', CategoryID as
'Categoria'
FROM Products
WHERE CategoryID LIKE '[ 1,4,5]'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 49


FUNDAMENTOS DE BASE DE DATOS

PRACTICANDO.
1. Listar una fila por cada tipo de libro que contenga los subtotales agregados para cada
grupo pero solo para la suma de adelantos superiores a 25000 */
USE pubs
SELECT type 'TIPO ', SUM(price)'SUMA PRECIOS ', SUM(advance)'SUMA
ADELANTOS',
SUM(advance * 0.50)as 'SUMA INCREMENTO 50 % ',AVG(price)'PROMEDIO
PRECIOS',
AVG(advance)'PROMEDIO ADELANTOS',
AVG(advance * 0.50)as 'PROMEDIO INCREMENTO 50%' FROM titles
GROUP BY type
HAVING SUM(ADVANCE)> 25000

2. Listar los titulos, tipos y precios solo de los libros de negocios (business), y luego el
precio promedio con el numero de filas, y luego el numero de registros, el maximo
precio, el minimo precio, la suma de precios y el precio incremento en 50 % */
USE PUBS
select title 'titulo ', type 'tipo ', price'precio' FROM titles WHERE type = 'business'
--LISTA PROMEDIO DE PRECIOS Y NUMERO DE FILAS DE LOS LIBROS DE
NEGOCIOS
SELECT AVG (price)as 'precio promedio', count (*)'numero de filas' FROM titles
WHERE type = 'business'
--LISTA EL RESUMEN SIGUIENTE DE TODAS LAS FILAS
select count(*)'[Link]', max(price)'maximo', min (price)'minimo',
sum(price)'suma', sum(price)* 1.5 'incremento 50% 'from titles WHERE type =
'business'

Creando vistas (Utilizando la BD northwind).


select productid, productname
from products where productid between 11 and 20
create view v_clientes
as
select CustomerID, companyname,numero=row_number() over(order by customerid)
from customers
go
select * from v_clientes where numero between 91 and 91
create view v_res_ventas
as
select top 100 [Link],anio=year([Link]),
total=sum([Link]*[Link])from orders o, [order details] d where
[Link]=[Link]
group by [Link], year([Link]) order by anio asc, [Link] asc
go
select * from v_res_ventas select customerid,[1996],[1997],[1998]
from v_res_ventas PIVOT(sum(total) for anio IN ([1996],[1997],[1998])) as T1
select customerid,[1996]=ISNULL([1996],0),[1997],[1998] from v_res_ventas
PIVOT(sum(total) for anio IN ([1996],[1997],[1998])) as T1

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 50


FUNDAMENTOS DE BASE DE DATOS

2.3. CREAR VARIABLES Y ESTRUCTURA DE CONTROL.

Una variable en SQL es un espacio de memoria que almacena un valor de cualquier


tipo. Estas son declaradas dentro de un bloque de instrucciones y solo tienen alcance
dentro de él. Al terminarse la ejecución del bloque las variables son destruidas. Algunos
ejemplos de aplicación:

Ejemplo 1.
--devolver si el numero es impar con IF
--IF
declare @n int
set @n = 5
if (@n % 2)= 0
print 'PAR'
else
print 'IMPAR'

Ejemplo 2.
--devolve pares con bucle while
Declare @n int
set @n = 0
while @n < 10
begin
if (@n % 2) = 0
select @n as Numero
set @n = @n + 1
end

Ejemplo 3.
--lista de numeros enteros acompañados de su descripción
DECLARE @N INT
SET @N = 1
WHILE (@N<100)
BEGIN
SELECT @N AS 'NUMERO', CASE
WHEN (@N % 2) = 1 THEN
'IMPAR'
ELSE
'PAR'
END AS 'TIPO'
SET @N = @N + 1
END

Ejemplo 4.
--lista de numeros enteros acompañados de su descripción utilizando Case
DECLARE @N INT,@TIPO CHAR(10),@VALOR CHAR(11)

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 51


FUNDAMENTOS DE BASE DE DATOS

SET @N = 1
WHILE (@N < 100)
BEGIN
IF (@N < 50)
SET @VALOR = 'MENOR DE 50'
ELSE
SET @VALOR = 'MAYOR DE 50'
SET @TIPO = CASE (@N % 2)
WHEN 1 THEN 'IMPAR'
ELSE 'PAR'
END
SELECT @N AS 'NUMERO', @TIPO AS 'TIPO',@VALOR AS VALOR
SET @N = @N + 1
END

Ejemplo Aplicativo: INGRESANDO MASIVAMENTE LOS REGISTROS


Paso 1. Crear una tabla de nombre cliente.
create table cliente
(
cod_cliente int,
nomb_cliente varchar(20)
)
--ingresando los registros en forma de prueba
declare @a int
set @a = 1
while @a <=1000
begin
INSERT into cliente values(@a,'xxxx')
set @a = @a + 1
end

--TRABAJANDO CON CADENAS

Ejemplo 1.
DECLARE @CADENA VARCHAR(30)
SET @CADENA=' SQL SERVER 2014 - Senati'
SELECT LEFT(@CADENA,5)
SELECT SUBSTRING(LTRIM(@CADENA),5,6)
SELECT SUBSTRING(RTRIM(@CADENA),12,14)

Ejemplo 2.
DECLARE @CADENA varchar(30)
set @cadena=' sql server 2014 - SENATI-ETI'
--quitar los espacios en blanco de la izquierda
SELECT LTRIM(@CADENA)AS 'RESULTADO'
SELECT RESULTADO=ltrim(@cadena)
--EXTRAE X LA DERECHA LOS 4 ULTIMOS CARACTERES DE @CADENA

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 52


FUNDAMENTOS DE BASE DE DATOS

SELECT RIGHT (@CADENA,4) AS 'RESULTADO'


SELECT RESULTADO=RIGHT(@CADENA,10)

Ejemplo 3. Con la base de datos pubs.


--SELECT AU_FNAME,AU_LNAME,STATE FROM AUTHORS
DECLARE @estado char(2)
SET @estado ='UT'
SELECT RTRIM(au_fname) + '' + RTRIM(AU_lname)+''+state
AS 'NOMBRE Y APELLIDO Y ESTADO'
FROM authors
WHERE state=@estado

2.4. IMPLEMENTAR FUNCIONES SQL.

FUNCIONES DE CADENA.
1. LEFT

2. UPPER
SELECT upper(lastname) Apellido FROM employees

3. SUBSTRING
SELECT substring(lastname,2,5) as Apellido FROM employees

4. LOWER
SELECT Lower(substring(lastname,1,5)) as Apellido FROM employees

5. CONCAT
SELECT Concat(upper(left(firstname,10)), + ' ' + lower(left(lastname,10))) from
employees

6. DISTINCT
SELECT DISTINCT firstname FROM employees

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 53


FUNDAMENTOS DE BASE DE DATOS

FUNCIONES NUMÉRICAS.

1. ROUND
Select unitprice,round(unitprice,1) from products

2. AVG
Select Avg(unitprice) as Promedio from products

3. COUNT
Select count(*) AS Cantidad from products

4. MIN
Select min(unitprice) as [Precio Mas Economico] from products

5. MAX
Select MAX(unitprice) as [Precio Mas Caro] from products

6. function concatenadas

7. BETWEEN
SELECT * FROM products WHERE unitprice BETWEEN 20 AND 22
AQUÍ ALGUNOS EJEMPLOS ADICIONALES UTILIZANDO FUNCIONES NUMÉRICAS
UTILIZANDO NORTHWIND Y PUBS:

1) Calcular el precio unitario promedio de todos los productos en la tabla products de la


base NORTHWIND
USE NORTHWIND
SELECT UNITPRICE FROM PRODUCTS--LISTA TODOS LOS PRODUCTOS
UNITARIOS
--LISTA EL PROMEDIO DE LOS PRECIOS UNITARIOS
SELECT AVG(UNITPRICE)'PRECIO PROMEDIO' FROM PRODUCTS
SELECT COUNT(*) "TOTAL FILAS (REGISTROS)" FROM PRODUCTS

2) Totalizar la columna cantidad en la tabla 'order details´.


USE NORTHWIND--LISTA TODAS LAS CANTIDADES

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 54


FUNDAMENTOS DE BASE DE DATOS

SELECT QUANTITY FROM "ORDER DETAILS"


--LUEGO, FIJARSE:
SELECT SUM(QUANTITY)AS "TOTAL CANTIDAD" FROM "ORDER DETAILS"
USE NORTHWIND

3) El ejemplo siguiente calcula el promedio del adelanto y la suma de las ventas del año
hasta la fecha de todos los libros que tratan temas de negocios (business). Cada una
de estas funciones de agregado produce un valor único para todas las filas recuperadas.
--ANALIZE
SELECT TYPE,ADVANCE,YTD_SALES FROM TITLES WHERE TYPE='BUSINESS'
--Luego:
USE pubs

4)
SELECT AVG(ADVANCE)as 'promedio adelanto', SUM(ytd_sales)as 'suma anual de
ventas'
FROM titles

5)
SELECT productid, quantity from "order details" order by productid
--lista resumen

6)
SELECT sum(quantity)as'suma total de todos los productos' from "order details"
-- lista suma total de cantidad por producto

7)
SELECT productid, sum(quantity) as
cantidad_total_pro_producto
from "order details"
group by productid

8) Listar suma total de cantidades por producto


número 2, 3 y7
SELECT productid, sum (quantity) as
cantidad_total_pro_producto
from "order details" where productid =2 or
productid=2 or productid=2
group by productid

9) Utilizando having
SELECT productid, SUM(quantity) AS
Cantidad_total_pro_producto
FROM "ORDER DETAILS"
GROUP BY productid
HAVING SUM(QUANTITY) >1200
--UTILIZANDO LA BASE DE DATOS PUBS

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 55


FUNDAMENTOS DE BASE DE DATOS

1) Cuando se utiliza con una clausula GORP BY, cada funcion de agregado produce un
valor unico para cada grupo, en vez de para toda la tabla. El ejemplo siguiente crea
valores de resumen para cada tipo de libro que incluyen el anticipo medio de cada tipo
de libro y la suma de las ventas del año hasta la fecha para cada tipo de libro. */
USE pubs
SELECT type 'tipo de libro', AVG(ADVANCE)as 'promedioadelanto por grupo',
SUM(ytd_sales) 'total por tipo'
FROM titles
GROUP BY type
ORDER BY type

2) Lista los libros de negocios


select title 'titulo', type 'tipo', price'precio'
FROM titles WHERE type='business'

3) Lista promedio de precios y numero de filas de los libros negocios


SELECT AVG(price)as' ´precio promedio', count(*)' numero de filas' FROM titles
WHERE type='business'

4) Lista el resumen siguiente de todas lasa filas


select count(*)'tot. registros',max(price)'maximo',min(price)'minimo',
sum(price)'suma', sum(price)*1.5 'incremento 50% 'from titles

5) En esta consulta se usa GROUP BY y funciones de agregado y se devuelve un


conjunto de resultados que tiene una fila por grupo que contiene los subtotales
--agregados para ese grupo:
USE pubs
SELECT type 'tipo', SUM (PRICE)' suma precios', SUM (advance)'SUMA ADELANTOS'
FROM titles
GROUP BY type

FUNCIONES DE FECHA Y TIEMPO.

EJERCICIOS CON FUNCIONES DE FECHAS


SELECT DAY('03/12/2016') AS 'Numero de dia'
SELECT MONTH('03/12/2016') AS 'Numero mes'
SELECT YEAR('03/12/2016') AS 'Numero de año'
--
SELECT GETDATE()
SELECT DAY('12/03/2017')
SELECT MONTH('12/03/2017')
SELECT YEAR('12/03/2017'')
--
SELECT GETDATE()+30' A 30 DIAS'
SELECT GETDATE()+90' A 90 DIAS'
SELECT GETDATE()+30' A 120 DIAS'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 56


FUNDAMENTOS DE BASE DE DATOS

SELECT GETDATE()-1 'AYER'


SELECT ayer=GETDATE()-1
SELECT GETDATE()+365 'A UN AÑO'
SELECT GETDATE() AS 'Fecha actual'
SELECT la_fecha_actual_es=GETDATE()
--
SELECT DATEPART(DAY,GETDATE()+1)'MAÑANA ES...'
SELECT DATEPART(day,GETDATE())AS 'HOY ES...'
SELECT DATEPART(month,GETDATE())AS 'EL MES ACTUAL ES..'
SELECT DATEPART(year,GETDATE())AS 'Año'
--
SELECT DATEPART(DD,GETDATE())AS 'hoy dia es:'
SELECT hoy_dia_es=DATEPART(DD,GETDATE())
--
SELECT DATEPART(DD,GETDATE()) 'DIA'
SELECT DATEPART(MM,GETDATE()) 'MES'
SELECT DATEPART(YY,GETDATE()) 'AÑO'
SELECT DATEPART(HH,GETDATE()) 'HORA'
SELECT DATEPART(mi,GETDATE()) 'MINUTO'
SELECT DATEPART(s,GETDATE()) 'SEGUNDO'
--
SELECT DATEPART(weekday,GETDATE()) 'numero que corresponde a la semana'
SELECT DATEPART(week,'11/01/2007') 'numero de semana'
SELECT DATEPART(week,'11/12/2007') 'numero de semana'
SELECT DATEPART(QUARTER,GETDATE())'EN QUE TRIMESTRE ESTAMOS'
SELECT DATEPART(QUARTER,11/03/1979)'EN QUE TRIMESTRE DEL AÑO NACÍ'
--
SELECT DATENAME(WEEKDAY,GETDATE()) 'HOY ES...(DIA EN LETRAS)'
SELECT DATENAME(WEEKDAY,'12/03/85') 'YO NACI UN DIA...'
SELECT DATENAME(MONTH,GETDATE()) 'MES EN LETRAS'
SELECT DATENAME(MONTH,'12/03/85') 'YO NACI EN EL MES DE...'
SELECT DATENAME(DY,GETDATE())'HOY ES EL NUMERO DE DIA DE ESTE AÑO'
SELECT DATENAME(DY,'12/12/2007')'EL ULTIMO DIA DEL AÑO
CRONOLOGICAMENTE ES...'
SELECT DATENAME(DD,'12/12/2007') 'EXTRAE EL DIA DE LA FECHA...'
SELECT DATENAME(MM,'12/12/2007') 'EXTRAE EL MES DE LA FECHA EN
LETRAS...'
SELECT DATENAME(WEEK,GETDATE())'NUMERO SEMANA DEL AÑO'
SELECT DATENAME(WEEK,'12/03/1985')'NUMERO SEMANA DEL AÑO DE
NACIMIENTO'
SELECT DATENAME(WEEK,'12/12/2007')'NUMERO SEMANA DEL AÑO DE ESTA
FECHA'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 57


FUNDAMENTOS DE BASE DE DATOS

CASO APLICATIVO.

Aquí algunos ejemplos adicionales utilizando funciones de cadena, numericas, fechas


complementando con el uso de declaracion de variables en la base de datos northwind
y pubs que son modelos para la clase
SELECT semana_numero=DATENAME(WEEK,'12/12/2017')
--
SELECT DATEADD(DAY,7,GETDATE())'ADICIONA 7 DIAS A PARTIR DE HOY'
SELECT DATEADD(DAY,30,GETDATE())'ADICIONA 30 DIAS A PARTIR DE HOY'
--DATEADD--DESDE LA FECHA ACTUAL, QUE DIA CAERA DENTRO DE 27 DIAS
SELECT DENTRO_27_DIAS=DATEADD(DD,27,GETDATE())
--DESDE LA FECHA ACTUAL, QUE DIA FUA HACE 7 DIAS
SELECT HACE_7_DIAS=DATEADD(DD,-7,GETDATE())
--DESDE LA FECHA ACTUAL, QUE DIA FUE HACE 57 DIAS
SELECT HACE_57_DIAS=DATEADD(DD,-57,GETDATE())
--EN UN AÑO SERA
SELECT EN_UN_AÑO=DATEADD(DD,365 ,GETDATE())

--QUE HORA FUE HACE UNA HORA ATRAS


SELECT HACE_1_HORA=DATEADD(HH,-1,GETDATE())
---UTILIZANDO PUBS
/*En ese ejemplo se imprime una lista de un marco de tiempo de los títulos de la base
de datos [Link] maro de tiempo representa la fechadela publicacion mas 21 dias.
*/
USE pubs
GO
SELECT pubdate as 'fecha de publicacion', DATEADD(day,21,pubdate) AS ' fecha
ampliada'
FROM titles
GO
--
USE pubs
SELECT PUBDATE AS 'FECHA DE PUBLICACION' FROM TITLES
SELECT DATEADD(day,7,pubdate)AS '7 DIAS MAS A LA FECHA DE PUBLICACION'
FROM titles
--datediff
--muestra la edad
select mi_edad=datediff(year,'12/03/1986',getdate())
--años entre dos fechas
select años=datediff(year,'10/11/2016','10/12/2017')
--muestra meses transcurridos
select meses=datediff(month,'10/11/2000','10/09/2017')
--muestra meses transcurridos
select meses =datediff(day,'01/11/2007','10/11/2017')
--
/*

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 58


FUNDAMENTOS DE BASE DE DATOS

Esta consulta usa la fecha 30 de noviembre de 1995 y busca el numero de dias que
hay entre pubdate(fecha de publicacion) y esa fecha. */
USE pubs
SELECT pubdate as 'fecha de publicacion', DATEDIFF(day, pubdate,'Nov 30 1995')
FROM titles
--CON DECLARE Y SET (declaraciones de variables)
DECLARE @AHORA DATETIME
SET @AHORA=GETDATE()
SELECT @AHORA
SELECT DIA=DAY(@AHORA)
SELECT MES=MONTH(@AHORA)
SELECT AÑO=YEAR(@AHORA)
SELECT NOMBRE_MES=DATENAME(MM,@AHORA)
SELECT NOMBRE_DIA=DATENAME(DW,@AHORA)
SELECT HORA=DATEPART(HH,@AHORA)
--FUNCIONES DE CADENAS
DECLARE @CAD1 VARCHAR(40)
SET @CAD1=' SENATI . '
SELECT @CAD1+'-ETI-'
SELECT LTRIM(@CAD1)+ 'SENATI'
SELECT RTRIM(@CAD1)+ 'SENATI-ETI'
--
DECLARE @CAD2 VARCHAR(40)
SET @CAD2='Aprendiendo haciendo'
SELECT LEFT(@CAD2,4)
SELECT RIGHT(@CAD2,4)
SELECT SUBSTRING(@CAD2,2,3)
SELECT LOWER(@CAD2)
SELECT UPPER('senati')
SELECT LEN(@CAD2)
--
DECLARE @CADENA VARCHAR(30)
SET @CADENA=' SQL SERVER 2016'
SELECT LEFT(@CADENA,12)
SELECT SUBSTRING(LTRIM(@CADENA),5,3)
SELECT SUBSTRING(RTRIM(@CADENA),5,3)
--
DECLARE @CADENA varchar(30)
set @cadena=' sql server 2016'
--quitar los espacios en blanco de la izquierda
SELECT LTRIM(@CADENA)AS 'RESULTADO'
SELECT RESULTADO=ltrim(@cadena)
--EXTRAE X LA DERECHA LOS 4 ULTIMOS CARACTERES DE @CADENA
SELECT RIGHT (@CADENA,4) AS 'RESULTADO'
SELECT RESULTADO=RIGHT (@CADENA,4)
--
USE pubs

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 59


FUNDAMENTOS DE BASE DE DATOS

GO

--SELECT AU_FNAME,AU_LNAME,STATE FROM AUTHORS


DECLARE @estado char(2)
SET @estado ='UT'
SELECT RTRIM(au_fname) + '' + RTRIM(AU_lname)+''+state
AS 'NOMBRE Y APELLIDO Y ESTADO'
FROM authors
WHERE state=@estado
-----
USE pubs
DECLARE @find varchar(30)
SET @find='Ring%'
SELECT rtrim(au_lname)+''+rtrim(au_fname)+','+ phone AS 'Apellido, Nombre y
Telefono' FROM authors WHERE au_lname LIKE @find
--FUNCIONES MATEMATICAS
--RAND()
DECLARE @counter smallint
SET @counter=1
WHILE @counter<5
BEGIN
SELECT RAND(@counter)'Numero Aleatorio'
SET @counter=@counter+1
END
GO
--ROUND().- siempre devuelve un [Link] length es un valor negativo y mayor
--que el número de digitos anteriores al separador decimal, ROUND devuelve 0.
SELECT RESULTADO=ROUND(748,1)
--ROUND devuelve una expresion numerica con redondeo, independientemente
--de los tipos de datos, cuando length es un número negativo
SELECT ROUND(748.58,-1)--750.00
SELECT ROUND(748.58,-2)--700.00
SELECT ROUND(748,-1)--750
SELECT ROUND(748,-2)--700
SELECT ROUND(748,-3)--1000
--se muestran dos expresiones que ilustran que, con la función ROUND, los últimos
--dígitos son siempre valores estimados
SELECT ROUND(123.9994,3), ROUND(123.9995,3)
--En este ejemplo se utilizan dos instrucciones SELECT para demostrar la diferencia
--entre redondear y truncar. La primera instruccion redondea el resultado. La segunda
instruccion lo trunca

SELECT ROUND(150.75,0) --151.00


SELECT ROUND(150.75,0,1) --150.00

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 60


FUNDAMENTOS DE BASE DE DATOS

ENTREGABLE DE LA SEMANA.
En esta tarea el estudiante pondrá a prueba lo aprendido en esta semana. El cual
consiste en crear las tablas que se mencionara en cada uno de los casos aplicando los
comandos DML para resolver las consultas que se requiere obtener de la base de datos

CASO FINAL 1.
1. Utilizando el Transact de SQL crear la base de datos INSTITUTO, cuyas tablas son
las siguiente:

Tabla: ALUMNOS.

CODALU APEPALU NOMALU DIRALU DISTALU TELALU FMAT CODCURSO


M001 AVILA MARIA JR. CUBA 461 LINCE 433-1125 20/03/2004 C02
AV. AREQUIPA
M002 CALDERON PATRICIA 1535 CERCADO 979-69658 25/04/1998 C01
M003 GUARDIA CARLOS AV. LA PAZ 230 SURCO 947-12548 20/06/2002 C02
PSJ. AMAZONAS
M004 CERVANTES EDITH 450 CERCADO 332-7841 12/10/2004 C03
M005 INCAQUISPE JAVIER AV. AVIACIÓN 290 SURCO 432-2584 12/05/1999 C01
M006 IZQUIERDO EVELYN AV. BOLIVIA 123 SURCO 975-15468 14/05/2000 C04
M007 GONZALES JANICCE PSJ. OLAYA 158 LINCE 335-7293 08/08/2002 C02
M008 CUEVA MARLON AV. CANADA 674 COMAS 989-82597 04/06/2003 C01
AV. EL BOSQUE
M009 VEGA VICTOR 1012 LINCE 424-2597 14/06/2004 C03
CLL. EL TRIGAL
M010 TAKEUCHI VLADIMIR 121 COMAS 978-82599 12/02/2003 C01

Tabla: CURSOS.

CODCURSO DETCURSO COSTO


C01 WINDOWS 69
C02 MS WORD 79
C03 MS EXCEL 89
C04 SQL 129

2. Elaborar las siguientes consultas:

a) Directorio de alumnos en orden alfabético.


Nombres Apellido Paterno Teléfono

b) Alumnos que viven en Cercado o Lince.

Nombres Apellido Paterno Dirección Distrito

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 61


FUNDAMENTOS DE BASE DE DATOS

c) Alumnos matriculados en Windows, que viven en Surco, Lince o Comas.

Nombres Apellido Paterno Curso Dirección Distrito

d) Alumnos con teléfono fijo matriculados en SQL o Word.


Nombres Apellido Paterno Curso Teléfono

e) Alumnos matriculados en Excel o Word a partir del año 2002.

Nombres Apellido Paterno Curso Fecha Matricula

f) Alumnos con teléfono fijo, matriculados en cualquier curso menos SQL, y que no
vivan en el distrito de Comas.

Nombres Apellido Paterno Curso Teléfono Distrito

g) Alumnos matriculados en cualquier curso menos Windows, y que no vivan ni en


Lince ni Cercado.
Nombres Apellido Paterno Curso Dirección Distrito

h) Alumnos de Windows o Word que viven en pasaje o avenida.


Nombres Apellido Paterno Curso Dirección Distrito

i) Relación de alumnos cuyo nombre comience con cualquiera consonante

Nombres Apellido Paterno Curso

j) Relación de alumnos cuyo apellido termine en vocal.

Nombres Apellido Paterno Curso

k) Relación de alumnos cuya tercera letra del nombre no sea una vocal.
Nombres Apellido Paterno Curso

l) Relación de alumnos con teléfono celular, cuyo apellido comience con cualquiera de
las 7 primeras letras del abecedario.

Nombres Apellido Paterno Teléfono Fecha Matricula

m) Relación de alumnos cuyo nombre consta de 6 caracteres.

Nombres Apellido Paterno Curso

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 62


FUNDAMENTOS DE BASE DE DATOS

n) Relación de alumnos matriculados durante el ultimo trimestre del año.

Nombres Apellido Paterno Curso Fecha Matricula

CASO FINAL 2.
I. Crear una Base de Datos, Utilizando sentencias SQL, con el nombre BDSEMANA2
y una tabla Con la Definición siguiente:
CODIGO (PK, int, not null)
NOMBRE (char(16), null)
APELLIDO (char(16), null)
CIUDAD (char(4), null)EDAD (int, null)

II. Ingresar las filas siguientes:

CÓDIGO NOMBRE APELLIDO CIUDAD EDAD


1 Pablo Márquez Lima 25
2 Martín Márquez Lima 27
3 Roberto Sánchez Ica 21
4 Estefanía Guisini Lima 38
5 Rubén Alegrato Ica 32
6 Sandra Britte Ica 40
7 Melisa Ardul Lima 20
8 Soledad Michelli Ica 40
9 Betania Musechegu Lima 31
10 Juan Alva Ica 25
11 César Cepeda Lima 26
12 Fernanda Duarte Ica 25
13 Pablo Gironez Lima 38
14 Marcos Serrat Ica 40
15 Luis Damian Lima 42
16 Ángel Siervo Ica 19

III. Ingresar un mínimo de 35 filas adicionales (SOLO CIUDADES DE ICA Y LIMA).


IV. Realizar las instrucciones necesarias que permita obtener los resultados a partir
de las consultas utilizando la sentencia SELECT:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 63


FUNDAMENTOS DE BASE DE DATOS

1) Listar las filas con las columnas: CIUDAD, APELLIDO Y NOMBRE. Deben estar
ordenado por ciudad y por apellido.
2) Listar todas las filas únicamente de la ciudad de LIMA. Deben estar ordenado por
apellido y por nombre.
3) Visualizar únicamente las filas de ICA, comprendidos entre las edades de 18 y 35 y
cuyos apellidos se inicien con letra A.
4) Determinar el total de filas que cumplieron con las condiciones del ejercicio 2 y
ADEMAS el promedio de las edades.
5) Determinar el total de filas que cumplieron con las condiciones del ejercicio 3 y
ADEMAS el promedio de las edades.
6) Listar todas las filas con todas sus columnas; y al final obtener un resumen, en una
sola fila, con el número (total) de registros, el promedio de las edades, cual es la edad
mayor y cuál es la edad menor.
7) Listar todas las filas con todas sus columnas; obtener una fila por cada grupo de
ciudades, con el número (total) de registros de dicha ciudad, el promedio de las
edades de dicha ciudad, cual es la edad mayor de dicha ciudad y cuál es la edad
menor de dicha ciudad. AL FINAL obtener un resumen, en una sola fila, con el
número (total) de registros, el promedio de las edades, cual es la edad mayor y cuál
es la edad menor.
8) Listar las filas con cinco columnas: CIUDAD, APELLIDO, NOMBRE, EDAD y el
campo INCREMENTADO. Deben estar ordenado por ciudad y por apellido. La
columna INCREMENTADO debe figurar la edad incrementado en 1.
9) Listar las filas con cinco columnas: CIUDAD, APELLIDO, NOMBRE, EDAD y el
campo CUMPLEAÑOS. Deben estar ordenado por ciudad y por apellido. La columna
CUMPLEAÑOS debe figurar EL AÑO que caerá a partir de la edad actual. Ejemplo:
Si tiene 34 años, a partir del año actual (que debe ser el de la computadora), su
próximo cumpleaños será en el 2042.
10) Listar todos los campos de los empleados que tengan las edades de 21, 25, 31, 32,
38 ó 40 Y sus códigos deben ser impares (no usar AND u OR para buscar las
edades).
11) Determinar SOLO PARA LA CIUDAD DE LIMA: el promedio de edades, el número
de registros, la máxima y la mínima edad y la suma de edades incrementado en un
10%.
12) Listar todos los campos, y además la columna con el nombre de
AUTOGENERADO. Esta columna, deberá tener de manera concatenada: La
primera letra del nombre + la tercera letra del nombre + la primera letra del apellido
+ la tercera letra del apellido + la segunda y tercera letra del nombre (todo en
minúscula) + la segunda y tercera letra del apellido (todo en minúscula) + el texto
SENATI + la edad + el nombre del mes actual de la computadora (en letras y en
minúscula).
13) Listar en UNA SOLA COLUMNA, el nombre y el apellido de aquellas filas cuyos
nombres sean "pablo" o "juan" (entre el nombre y el apellido, deje un espacio vacío).
Se usa funciones de cadena.
14) Listar los campos nombre, apellido y edad, solo si la edad es mayor a 30 y la ultima
letra del nombre sea a y la segunda letra del apellido sea u y debe estar ordenado
descendentemente por edad.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 64


FUNDAMENTOS DE BASE DE DATOS

15) De su fecha de nacimiento, con el formato dd/mm/yyyyy debe obtener la frase: “yo
nací el miércoles 23 de octubre de 1984” (saldrá de esta manera si la fecha de
nacimiento fuera 23/10/1984. Se utiliza una sola instrucción select con FUNCIONES
DE CADENA.

MARCO TEÓRICO
Lenguaje de definición de datos (DDL).
Las sentencias DDL se utilizan para crear y modificar la estructura de las tablas, así
como otros objetos de la base de datos.

 CREATE - para crear objetos en la base de datos.


 ALTER - modifica la estructura de la base de datos.
 DROP - borra objetos de la base de datos.

TRUNCATE - Elimina todos los registros de la tabla, incluyendo todos los espacios
asignados a los registros.

Lenguaje de manipulación de datos (DML).


Introducción.
Es una de las partes fundamentales del lenguaje SQL. El DML (Data Manipulation
Language) lo forman las instrucciones capaces de modificar los datos de las tablas. Al
Conjunto de instrucciones DML que se ejecutan consecutivamente, se las llama
Transacciones y se pueden anular todas ellas o aceptar, ya que una instrucción DML
no es realmente efectuada hasta que no se acepta (commit).

En todas estas consultas, el único dato devuelto por SQL es el número de registros que
se han modificado.
Cláusulas.
Las cláusulas son condiciones de modificación utilizadas para definir los datos que
desea seleccionar o manipular.

Cláusula
FROM: Utilizada para especificar la tabla de la cual se van a seleccionar los registros
WHERE: Utilizada para especificar las condiciones que deben reunir los registros que
se van a seleccionar
GROUP BY: Utilizada para separar los registros seleccionados en grupos específicos.
HAVING: Utilizada para expresar la condición que debe satisfacer cada grupo.
ORDER BY: Utilizada para ordenar los registros seleccionados de acuerdo con un orden
específic.

Inserción de datos.
La adición de datos a una tabla se realiza mediante la instrucción:
INSERT. Su sintaxis fundamental es:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 65


FUNDAMENTOS DE BASE DE DATOS

INSERT INTO tabla [(listaDeCampos)]


VALUES (valor1 [,valor2 ...])

La tabla representa a la que se quiere añadir el registro y los valores que siguen a
VALUES son los valores que se dan a los distintos campos del registro.

Sistemas Gestores de Bases de Datos.

El lenguaje SQL especifica la lista de campos, la lista de valores debe seguir el orden
de las columnas según fueron creados (es el orden de columnas según las devuelve el
commando DESCRIBE).

La lista de campos a rellenar se indica si no queremos rellenar todos los campos. Los
campos no rellenados explícitamente con la orden INSERT, se rellenan con su valor por
defecto (DEFAULT) o bien con NULL si no se indicó valor alguno. Si algún campo tiene
restricción de tipo NOT NULL, ocurrirá un error si no rellenamos el campo con algún
valor.

Por ejemplo, supongamos que tenemos una tabla de clientes cuyos campos son: dni,
nombre, apellido1, apellido2, localidad y dirección; supongamos que ese es el orden de
creación de los campos de esa tabla y que la localidad tiene como valor por defecto
Palencia y la dirección no tiene valor por defecto. En ese caso estas dos instrucciones
son equivalentes:

INSERT INTO clientes


VALUES('11111111','Pedro','Gutiérrez', 'Crespo',DEFAULT,NULL);
INSERT INTO clientes(dni,nombre,apellido1,apellido2)
VALUES('11111111','Pedro','Gutiérrez', 'Crespo')

Son equivalentes puesto que en la segunda instrucción los campos no indicados se


rellenan con su valor por defecto y la dirección no tiene valor por defecto. La palabra
DEFAULT fuerza a utilizar ese valor por defecto.

El uso de los distintos tipos de datos debe de cumplir los requisitos ya comentados en
temas anteriores, relleno de registros a partir de filas de una consulta.

Hay un tipo de consulta, llamada de adición de datos, que permite rellenar datos de una
tabla copiando el resultado de una consulta.

Ese relleno se basa en una consulta SELECT que poseerá los datos a añadir.

Lógicamente el orden de esos campos debe de coincidir con la lista de campos indicada
en la instrucción INDEX. Sintaxis:
INSERT INTO tabla (campo1, campo2,...)
SELECT campoCompatibleCampo1, campoCompatibleCampo2,...
FROM tabla(s)
[...otras cláusulas del SELECT...]

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 66


FUNDAMENTOS DE BASE DE DATOS

Ejemplo:
INSERT INTO clientes2017 (dni, nombre, localidad, direccion)
SELECT dni, nombre, localidad, direccion
FROM clientes
WHERE problemas=0;

Actualización de registros.
La modificación de los datos de los registros lo implementa la instrucción:
UPDATE.
Sintaxis:
UPDATE tabla
SET columna1=valor1 [, columna2=valor2...]
[WHERE condición]
}
Se modifican las columnas indicadas en el apartado SET con los valores indicados. La
cláusula WHERE permite especificar qué registros serán modificados.

Ejemplos:
UPDATE clientes SET provincia='Ourense'
WHERE provincia='Orense';
UPDATE productos SET precio=precio*1.16;

El primer dato actualiza la provincia de los clientes de Orense para que aparezca como
Ourense. El segundo UPDATE incrementa los precios en un 16%. La expresión para el
valor puede ser todo lo compleja que se desee:

UPDATE partidos SET fecha= NEXT_DAY(SYSDATE,'Martes')


WHERE fecha=SYSDATE;

Incluso se pueden utilizar subconsultas:


UPDATE empleados
SET puesto_trabajo = (SELECT puesto_trabajo FROM empleados WHERE
id_empleado=12)
WHERE seccion=23;

Esta consulta coloca a todos los empleados de la sección 23 el mismo puesto de trabajo
que el empleado número 12. Este tipo de actualizaciones sólo son válidas si el subselect
devuelve un único valor, que además debe de ser compatible con la columna que se
actualiza.

Hay que tener en cuenta que las actualizaciones no pueden saltarse las reglas de
integridad que posean las tablas.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 67


FUNDAMENTOS DE BASE DE DATOS

Borrado de registros.
Se realiza mediante la instrucción:
DELETE:
DELETE [FROM] tabla
[WHERE condición]

Sistemas Gestores de Bases de Datos.


El lenguaje SQL es más sencillo que los anteriores, elimina los registros de la tabla que
cumplan la condición indicada. Ejemplos:

DELETE FROM empleados WHERE seccion=23


DELETE FROM empleados
WHERE id_empleado IN (SELECT id_empleado FROM errores_graves);
Hay que tener en cuenta que el borrado de un registro no puede provocar fallos de
integridad y que la opción de integridad ON DELETE CASCADE (véase página 83, clave
secundaria o foránea) hace que no sólo se borren los registros indicados en el SELECT,
sino todos los relacionados.

Transacciones.
Como se ha comentado anteriormente, una transacción está formada por una serie de
instrucciones DML. Una transacción comienza con la primera instrucción DML que se
ejecute y finaliza con alguna de estas circunstancias:
Una operación COMMIT o ROLLBACK
Una instrucción DDL (como ALTER TABLE por ejemplo)
Una instrucción DCL (como GRANT)
El usuario abandona la sesión
Caída del sistema

Hay que tener en cuenta que cualquier instrucción DDL o DCL da lugar a un COMMIT
implícito, es decir todas las instrucciones DML ejecutadas hasta ese instante pasan a
ser definitivas.

Commit
La instrucción COMMIT hace que los cambios realizados por la transacción sean
definitivos, irrevocables. Sólo se debe utilizar si estamos de acuerdo con los cambios,
conviene asegurarse mucho antes de realizar el COMMIT ya que las instrucciones
ejecutadas pueden afectar a miles de registros.
Además, el cierre correcto de la sesión da lugar a un COMMIT, aunque siempre
conviene ejecutar explícitamente esta instrucción a fin de asegurar lo que se hace.

Rollback
Esta instrucción regresa a la instrucción anterior al inicio de la transacción, normalmente
el último COMMIT, la última instrucción DDL o DCL o al inicio de sesión. Anula
definitivamente los cambios, por lo que conviene también asegurarse de esta operación.
Un abandono de sesión incorrecto o un problema de comunicación o de caída del
sistema dan lugar a un ROLLBACK implícito.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 68


FUNDAMENTOS DE BASE DE DATOS

Administración de Sistemas Informáticos.


Si se inicia una transacción usando comandos DML hay que tener en cuenta que: Se
puede volver a la instrucción anterior. a la transacción cuando se desee Las
instrucciones de consulta SELECT realizadas por el usuario que inició la transacción
muestran los datos ya modificados por las instrucciones DML.

El resto de usuarios ven los datos tal cual estaban antes de la transacción; de hecho,
los registros afectados por la transacción aparecen bloqueados hasta que la
Transacción finalice. Esos usuarios no podrán modificar los valores de dichos Registros.
Tras la transacción todos los usuarios ven los datos tal cual quedan tras el fin de
Transacción. Los bloqueos son liberados y los puntos de ruptura borrados.

Vistas.
Introducción.
Una vista no es más que una consulta almacenada a fin de utilizarla tantas veces como
se desee. Una vista no contiene datos sino la instrucción SELECT necesaria para crear
la vista, eso asegura que los datos sean coherentes al utilizar los datos almacenados
en las tablas. Por todo ello, las vistas gastan muy poco espacio de disco.

Las vistas se emplean para:


- Realizar consultas complejas más fácilmente, ya que permiten dividir la consulta en
varias partes.
- Proporcionar tablas con datos completos.
- Utilizar visiones especiales de los datos.
- Ser utilizadas como tablas que resumen todos los datos.
- Ser utilizadas como cursores de datos en los lenguajes procedimentales (como
PL/SQL).

Hay dos tipos de vistas:


 Simples. Las forman una sola tabla y no contienen funciones de agrupación. Su
ventaja es que permiten siempre realizar operaciones DML sobre ellas.
 Complejas. Obtienen datos de varias tablas, pueden utilizar funciones de
agrupación. No siempre permiten operaciones DML.

Sistemas Gestores de Bases de Datos. Lenguaje SQL.


Creación de vistas.
Sintaxis:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW vista
[(alias [, alias2...]]
AS consultaSELECT
[WITH CHECK OPTION [CONSTRAINT restricción]]
[WITH READ ONLY [CONSTRAINT restricción]]
OR REPLACE. Si la vista ya existía, la cambia por la actual.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 69


FUNDAMENTOS DE BASE DE DATOS

FORCE. Crea la vista, aunque los datos de la consulta SELECT no existan vista.
Nombre que se le da a la vista alias. Lista de alias que se establecen para las columnas
devueltas por la consulta SELECT en la que se basa esta vista. El número de alias debe
coincidir con el número de columnas devueltas por SELECT.

WITH CHECK OPTION. Hace que sólo las filas que se muestran en la vista puedan ser
añadidas (INSERT) o modificadas (UPDATE). La restricción que sigue a esta sección
es el nombre que se le da a esta restricción de tipo CHECK OPTION.

WITH READ ONLY. Hace que la vista sea de sólo lectura. Permite grabar un nombre
para esta restricción.

Lo bueno de las vistas es que tras su creación se utilizan como si fueran una tabla.

Ejemplo:
CREATE VIEW resumen
/* alias */
(id_localidad, localidad, poblacion, n_provincia, provincia,
superficie, capital_provincia,
id_comunidad, comunidad, capital_comunidad)
AS
(SELECT l.id_localidad, [Link], [Link],n_provincia, [Link], [Link],
[Link],id_comunidad, [Link], [Link]
FROM localidades l
JOIN provincias p USING (n_provincia)
JOIN comunidades c USING (id_comunidad)
JOIN localidades l2 ON (p.id_capital=l2.id_localidad)
JOIN localidades l3 ON (c.id_capital=l3.id_localidad)
)
SELECT DISTINCT (comunidad, capital_comunidad) FROM resumen;

La creación de la vista del ejemplo es compleja ya que hay relaciones complicadas, pero
una vez creada la vista, se le pueden hacer consultas como si se tratara de una tabla
normal. Incluso se puede utilizar el comando DESCRIBE sobre la vista para mostrar la
estructura de los campos que forman la vista ejecución de comandos DML sobre vistas.

Las instrucciones DML ejecutadas sobre las vistas permiten añadir o modificar los datos
de las tablas relacionados con las filas de la vista. Ahora bien, no es posible ejecutar
instrucciones DML sobre vistas que:

Utilizar funciones de grupo (SUM, AVG,..)


Usar GROUP BY o DISTINCT
Poseen columnas con cálculos (PRECIO * 1.16)
Además, no se pueden añadir datos a una vista si en las tablas referencias en la consulta
SELECT hay campos NOT NULL que no aparecen en la consulta (es lógico ya que al

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 70


FUNDAMENTOS DE BASE DE DATOS

añadir el dato se tendría que añadir el registro colocando el valor NULL en el campo).
Ejemplo (sobre la vista anterior):
INSERT INTO resumen(id_localidad, localidad, poblacion)
VALUES (10000, 'Sevilla', 750000)
Mostrar la lista de vistas
La vista del diccionario de datos de Oracle USER_VIEWS permite mostrar una lista de
todas las vistas que posee el usuario actual. Es decir, para saber qué vistas hay
disponibles se usa:
SELECT * FROM USER_VIEWS;
La columna TEXT de esa vista contiene la sentencia SQL que se utilizó para crear la
vista (sentencia que es ejecutada cada vez que se invoca a la vista).
Borrar vistas.
Se utiliza el comando DROP VIEW:
DROP VIEW nombreDeVista;
secuencias
Una secuencia sirve para generar automáticamente números distintos. Se utilizan para
generar valores para campos que se utilizan como clave forzada (claves cuyo valor no
interesa, sólo sirven para identificar los registros de una tabla). Es decir, se utilizan en
los identificadores de las tablas (campos que comienzan con la palabra id), siempre y
cuando no importe qué número se asigna a cada fila.
Es una rutina interna de la base de datos la que realiza la función de generar un número
distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo
que la misma secuencia se puede utilizar para diversas tablas.
Sistemas Gestores de Bases de Datos
Lenguaje SQL
Creación de secuencias
Sintaxis:
CREATE SEQUENCE secuencia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]

Donde:
secuencia. Es el nombre que se le da al objeto de secuencia
INCREMENT BY. Indica cuánto se incrementa la secuencia cada vez que se usa.
Por defecto se incrementa de uno en uno
START WITH. Indica el valor inicial de la secuencia (por defecto 1)
MAXVALUE. Máximo valor que puede tomar la secuencia. Si no se toma

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 71


FUNDAMENTOS DE BASE DE DATOS

NOMAXVALUE que permite llegar hasta el 1027


MINVALUE. Mínimo valor que puede tomar la secuencia. Por defecto -1026
CYCLE. Hace que la secuencia vuelva a empezar si se ha llegado al máximo valor.

Ejemplo:
CREATE SEQUENCE numeroPlanta
INCREMENT 100
STARTS WITH 100
MAXVALUE 2000

Ver lista de secuencias.


La vista del diccionario de datos de Oracle USER_SEQUENCES muestra la lista de
secuencias actuales. La columna LAST_NUMBER muestra cual será el siguiente
número de secuencia disponible

Uso de la secuencia.
Los métodos NEXTVAL y CURRVAL se utilizan para obtener el siguiente número y el
valor actual de la secuencia respectivamente. Ejemplo de uso:

SELECT [Link] FROM DUAL;


Eso muestra en pantalla el siguiente valor de la secuencia. Realmente NEXTVAL
incrementa la secuencia y devuelve el valor actual. CURRVAL devuelve el valor de la
secuencia, pero sin incrementar la misma.

Ambas funciones pueden ser utilizadas en:

Administración de Sistemas Informáticos.


Una consulta SELECT que no lleve DISTINCT, ni grupos, ni sea parte de una vista, ni
sea subconsulta de otro SELECT, UPDATE o DELETE
Una subconsulta SELECT en una instrucción INSERT
La cláusula VALUES de la instrucción INSERT
La cláusula SET de la instrucción UPDATE
No se puede utilizar (y siempre hay tentaciones para ello) como valor para la cláusula
DEFAULT de un campo de tabla.

Su uso más habitual es como apoyo al comando INSERT:


INSERT INTO plantas(num, uso) VALUES([Link], 'Suites');

Mdificar secuencias.
Se pueden modificar las secuencias, pero la modificación sólo puede afectar a los
futuros valores de la secuencia, no a los ya utilizados. Sintaxis:
ALTER SEQUENCE secuencia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 72


FUNDAMENTOS DE BASE DE DATOS

Borrar secuencias.
Lo hace el comando DROP SEQUENCE seguido del nombre de la secuencia a borrar.

Índices.
Los índices son esquemas que hacen que una base de datos acelere las operaciones
de consulta y ordenación sobre los campos a los que el índice hace referencia. Se
almacenan aparte de la tabla a la que hace referencia, lo que permite crearles y borrarles
en cualquier momento.

Lo que realizan es una lista ordenada por la que Oracle puede acceder para facilitar la
búsqueda de los datos. cada vez que se añade un nuevo registro, los índices
involucrados se actualizan a fin de que su información esté al día. De ahí que cuantos
más índices haya, más le cuesta a Oracle añadir registros, pero más rápidas se realizan
las instrucciones de consulta.

La mayoría de los índices se crean de manera implícita, como consecuencia de las


restricciones PRIMARY KEY (que obliga a crear un índice único sobre los campos clave)
UNIQUE (crea también un índice único) y FOREIGN KEY (crea un índice con posibilidad
de repetir valores, índice con duplicados). Estos son índices obligatorios, por los que les
crea la propia base de datos. El nombre que se les da a esos índices suele ser el mismo
que el nombre de la restricción que los genera

Creación de índices.
Aparte de los índices obligatorios comentados anteriormente, se pueden crear índices
de forma explícita. Éstos se crean para aquellos campos sobre los cuales se realizarán
búsquedas e instrucciones de ordenación frecuente.

Sintaxis:
CREATE INDEX nombre
ON tabla (columna1 [,columna2...])

Ejemplo:
CREATE INDEX nombre_completo
ON clientes (apellido1, apellido2, nombre);

El ejemplo crea un índice para los campos apellido1, apellido2 y nombre. Esto no es
lo Mismo que crear un índice para cada campo, este índice es efectivo cuando se buscan
Ordenan clientes usando los tres campos (apellido1, apellido2, nombre) a la vez.

Se aconseja crear índices en campos que:


Contengan una gran cantidad de valores
Contengan una gran cantidad de nulos

Son parte habitual de cláusulas WHERE, GROUP BY u ORDER BY

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 73


FUNDAMENTOS DE BASE DE DATOS

Son parte de listados de consultas de grandes tablas sobre las que casi siempre se
Muestran como mucho un 4% de su contenido.

No se aconseja en campos que:


- Pertenezcan a tablas pequeñas.
- No se usan a menudo en las consultas.
- Pertenecen a tablas cuyas consultas muestran más de un 6% del total de registros.
- Pertenecen a tablas que se actualizan frecuentemente.

Se utilizan en expresiones.

Los índices se pueden crear utilizando expresiones complejas:


CREATE INDEX nombre_complejo
ON clientes (UPPER(nombre));

Esos índices tienen sentido si en las consultas se utilizan exactamente esas


expresiones.

Lista de índices.
Para ver la lista de índices se utiliza la vista USER_INDEXES. Mientras que la vista
USER_IND_COLUMNS Muestra la lista de columnas que son utilizadas por índices.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 74


FUNDAMENTOS DE BASE DE DATOS

III. IMPLEMENTA BASE DE DATOS Y TABLAS EN MYSQL.

En esta tarea se tratará las siguientes Operaciones:

- Diseñar Modelo Relacional en Mysql.


- Crear operaciones con la base de datos en Mysql.
- Implementar Operaciones utilizando DML.
- Crear taller de implementacion de base de datos con Mysql.

3.1. DISEÑAR MODELO RELACIONAL EN MYSQL.

Creacion de la base de datos con SQLYOG.

Creacion de la tabla:

Paso 1.

Paso 2. Creación de la tabla cliente.


Seguir las indicaciones del instructor:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 75


FUNDAMENTOS DE BASE DE DATOS

Caso Aplicativo.
Paso 1. Crear las siguientes tablas:
Tabla : Empleado.

Tabla movimiento.

Paso 2. Relacionando las tablas.

Paso 3.

Paso 4. Agregar las tablas creadas.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 76


FUNDAMENTOS DE BASE DE DATOS

Arrastrar del campo chr_empl_codigo de la tabla empleado al campo


chr_empl_codigo de la tabla movimiento. Tal como muestra la pantalla, aparecerá:

El código se genera automáticamente como se aprecia :

Deberá mostrar la relación de la siguiente manera :

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 77


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 2:

Crear las siguientes relaciones tomando en cuenta el siguiente diseño:

3.2. CREAR OPERACIONES CON LA BASE DE DATOS EN MYSQL.

1. Creación de una copia de seguridad.


Paso 1. Click derecho en la BD.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 78


FUNDAMENTOS DE BASE DE DATOS

Paso2. Ubicar lugar de exportación del archivo.

2. Eliminación de la BD.
Paso1. Click derecho en la BD/elegir drop database.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 79


FUNDAMENTOS DE BASE DE DATOS

Paso 2. Refrescar la operación.

3. Generar script.
Paso 1.

Paso 2.

Paso 3. Exportar.

4. Restaurar una BD.


Paso 1.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 80


FUNDAMENTOS DE BASE DE DATOS

Paso 2. Seleccionar el archivo a abrir.

3.3. IMPLEMENTAR OPERACIONES UTILIZANDO DML.


Utilizando comandos Mysq
1. Creación de la BD.

2. Creación de la tabla.

CREATE TABLE Empleado (


chr_emplcodigo CHAR(4) NOT NULL,
vch_emplpaterno VARCHAR(25) NOT NULL,
vch_emplmaterno VARCHAR(25) NOT NULL,
vch_emplnombre VARCHAR(30) NOT NULL,
vch_emplciudad VARCHAR(30) NOT NULL,
vch_empldireccion VARCHAR(50) NULL,
vch_emplusuario VARCHAR(15) NOT NULL,
vch_emplclave VARCHAR(15) NOT NULL,
CONSTRAINT PK_Empleado
PRIMARY KEY (chr_emplcodigo),
CONSTRAINT U_Empleado_vch_emplusuario
UNIQUE (vch_emplusuario)
) ENGINE = INNODB ;
3. Sentencia insert
Ejemplo:
Insert into Empleado values (‘0001’,’Romero’,’Castillo,’Carlos Alberto’,’Trujillo’,’Calle 1
Nro 456’,’Cromero’,’chicho’)

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 81


FUNDAMENTOS DE BASE DE DATOS

3. Buscar y mostrar registros.

4. Búsqueda con condición.


SELECT `vch_emplnombre`,`vch_emplciudad`,`vch_empldireccion` FROM empleado
WHERE `vch_emplpaterno` LIKE 'R%'

5. Búsqueda por rangos.


SELECT
`chr_emplcodigo`,`vch_emplnombre`,`vch_emplciudad`,`vch_empldireccion` FROM
empleado WHERE `chr_emplcodigo`
BETWEEN '0002' AND '0005'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 82


FUNDAMENTOS DE BASE DE DATOS

6. Eliminación de registros.
DELETE FROM empleado
DELETE FROM empleado WHERE `vch_emplpaterno` LIKE 'R%' AND
´chr_emplcodigo` > '0003'

7. Modificacion de registro.
UPDATE empleado SET `vch_emplclave` = '123456' WHERE `chr_emplcodigo` = '0001'

8. Eliminacion de un table.
Drop table empleado.
Ejercicio Libre:

9. Trabajando con algunas funciones Mysql


Paso 1.
CREATE TABLE libros(
codigo INT UNSIGNED AUTO_INCREMENT,
titulo VARCHAR(40) NOT NULL,
autor VARCHAR(30),
editorial VARCHAR (20),
precio DECIMAL(5,2) UNSIGNED,
PRIMARY KEY(codigo)
);

Paso 2.
INSERT INTO libros (titulo,autor,editorial,precio)
VALUES('El alehp','Borges','Paidos',33.4);
INSERT INTO libros (titulo,autor,editorial,precio)
VALUES('Alicia en el pais de las maravillas','L. Carroll','Planeta',16);

Paso 3. Utilizando funciones de cadena.


Usar la función "concat_ws()":

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 83


FUNDAMENTOS DE BASE DE DATOS

select concat_ws('-',titulo,autor) from libros;


la salida muestra una sola columna en la cual se concatenan, con el separador "-", los
distintos campos especificados.
Usar la función "left()":
select left(titulo,15) from libros;
la salida muestra los títulos con los primeros 15 caracteres.
Emplear la función "insert()":
select titulo,insert(editorial,1,0,'edit. ') from libros;
retorna el nombre de las editoriales agregando al inicio la cadena "Edit. ".
Usar las funciones "lower()" y "upper()":
select lower(titulo), upper(editorial) from libros;

Paso 4. Insertando más registros.


INSERT INTO libros (titulo,autor,editorial,precio) VALUES ('El
alehp','Borges','Paidos',33.4);
INSERT INTO libros (titulo,autor,editorial,precio)
VALUES('Alicia en el pais de las maravillas','L. Carroll','Planeta',16.3);
INSERT INTO libros (titulo,autor,editorial,precio)
VALUES('Alicia a traves del espejo','L. Carroll','Planeta',18.8);

Paso 5. Usando la función "ceiling(x)":


select titulo, ceiling(precio),floor(precio) from libros;

Usando la función "round(x)":


select titulo, round(precio) from libros;
Empleando la función "truncate(x,d)":
select titulo,truncate(precio,1) from libros;

Paso 5. Utilizando funciones de fecha.


Agregando una nueva table.
create table prestamos(
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de 1 grado','23456789','2006-08-10',date_add('2006-08-10', interval 5
day));
select * from prestamos;
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Alicia en el pais de las maravillas','23456789',
'2006-08-12',date_add('2006-08-12', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('El aleph','22543987','2006-08-15',date_add('2006-08-15', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 84


FUNDAMENTOS DE BASE DE DATOS

values ('Manual de geografia 5 grado','25555666','2006-08-30',


date_add('2006-08-30', interval 5 day));
--comprobando
select * from prestamos;
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Atlas universal','24000111',current_date,date_add(current_date, interval 5
day));
select * from prestamos;

Paso 6. Utilizando funciones de agrupamiento.


eliminar la tabla libro (tabla anterior) / crear la siguiente tabla
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad) values('El aleph',
'Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad) values('Martin Fierro','Jose
Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad) values('Antologia poetica',
'J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
select sum(cantidad) from libros;
select sum(cantidad) from libros where editorial ='Planeta';
select max(precio) from libros;
select * from libros order by precio desc;
select min(precio) from libros where autor like '%Rowling%';
select * from libros where autor like '%Rowling%' order by 5;
select avg(precio) from libros where titulo like '%PHP%';
select * from libros where titulo like '%PHP%';
select count(*) from libros;

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 85


FUNDAMENTOS DE BASE DE DATOS

select count (*) from libros;

Ejercicicio:
Utilizando el Script crear la base de datos ALMACEN, cuyas tablas son las siguiente:

ARTÍCULOS:

Idarticulo Articulo Marca Modelo Idcategoria Idproveedor Fingreso Stock Precio$


A-01 MICROPROCESADOR INTEL PENTIUM IV 2,5 GB C04 P01 15/02/2004 5 155
A-02 MOUSE GENIUS 3BOOTNES C02 P02 12/05/2005 2 10
A-03 MOUSE TOSHIBA OPTICO C02 P03 01/06/2004 3 15
A-04 TECLADO DELL 121 TECLAS C02 P04 02/04/2003 4 10
A-05 MEMORIA USB KINGSTON 128 GB C05 P05 01/03/2002 5 25
A-06 MEMORIA USB LG 256 GB C05 P06 25/08/2000 2 35
A-07 DISCO DURO SONY 80 GB C01 P07 24/03/2004 1 85
A-08 QUEMADOR LG 64 MMX C05 P01 21/09/2002 5 55
A-09 MONITOR SAMGUMG 21 PULG. C03 P02 17/04/2003 6 150
A-10 MONITOR LG 15 PULG. C03 P03 25/10/2000 8 120
A-11 MICROPROCESADOR INTEL CELERON 2,3 GB C04 P04 15/06/2002 7 150
A-12 TECLADO TOSHIBA KB -2971 C02 P05 10/02/2001 1 10
A-13 CD SONY R-720 MB C01 P06 15/02/2003 2 1,5
A-14 CD IMATION RW-690MB C01 P07 21/11/2004 3 2
A-15 DISCKETT SONY 1,44 MB C01 P01 23/05/2003 4 0,2
A-16 IMPRESORA EPSON ESTYLUS COLOR 800 C03 P02 26/06/2004 5 85
A-17 IMPRESORA CANON JT-230 C03 P03 15/05/2003 6 78

PROVEEDORES: CATEGORÍAS:

IDPROVEEDOR PROVEEDOR TELEFONO DISTRITO IDCATEGORIA CATEGORIA


P01 OMEGA S.A. 433-2145 SURCO C01 ALMACENAMIENTO
P02 COMPUTECH SRL 968-98987 LIMA C02 INGRESO
P03 GRUPO LEAFAR S.A. 536-2569 LIMA C03 SALIDA
P04 MEGATRONIC S.A. 987-65988 SURCO C04 PROCESO
P05 DATA SYSTEM SRL 332-7525 LINCE C05 OTROS
P06 ALPHA SRL 336-8789 LINCE
P07 PRIMA S.A. 978-895458 SURCO

Elaborar las siguientes consultas:

a) Lista de artículos ordenados por precio en forma descendente.

Articulo IdCategoria IdProveedor Precio$

b) Artículos cuyo precio es mayor a $20.


Articulo Idategoria IdProveedor Precio$

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 86


FUNDAMENTOS DE BASE DE DATOS

c) Dispositivos de Ingreso o Almacenamiento.

Articulo IdCategoria IdProveedor Precio$

d) Proveedores con teléfono fijo.

Proveedor Distrito Telefono

e) Proveedores que sean Sociedad Anónima.

Proveedor Distrito Telefono

f) Artículos que no sean dispositivos de proceso y que ingresaron en el primer


semestre del año 2003 y 2005

Articulo IdCategoria IdProveedor FIngreso

g) Relación de artículos cuya marca tenga más de 4 caracteres.

Articulo Marca IdProveedor Precio$

.
h) Relación de artículos que ingresaron a almacén a partir de la segunda quincena de
julio del 2002.

Articulo Marca IdProveedor FIngreso

i) Relación artículos cuya antepenúltima letra de la Marca sea cualquiera de las ultimas
6 letras del abecedario.

Articulo Marca IdProveedor FIngreso

j) Relación de artículos cuya penúltima letra de la marca no sea una vocal.

Articulo Marca IdProveedor FIngreso

k) Elaborar una lista de artículos de la marca LG, SONY e INTEL cuyo Stock sea mayor
a 2 unidades.

Articulo Marca Stock FIngreso

l) Elaborar una lista de CD, Teclado, Mouse y Memoria que ingresaron en al almacen
a partir del año 2003.

Articulo Marca Stock FIngreso

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 87


FUNDAMENTOS DE BASE DE DATOS

3.4. CREAR TALLER DE IMPLEMENTACION DE BASE DE DATOS CON MYSQL.

CASO FINAL 1 (Anáisis y diseño).


En esta operación el estudiante pondrá a prueba lo aprendido para lo cual tendrá que
Crear tablas utilizando su mejor estrategia la cual conlleve a crear una base de datos
para un sistema web de control y programación de horarios para la escuela de
tecnologías de la información (ETI).
IMPORTANTE: una vez terminado comunicar al instructor para la exposición de su
diseño y el análisis de su creación

CASO FINAL 2 (Implementacion y desarrollo de consultas).


Crear una base de datos de nombre: bdfinal Las siguientes tablas están basadas en el
modelo de una tienda comercial que brinda la venta de diversos productos de primera
necesidad y otros artículos de uso diario. Consta de las tablas FACTURA y DETFAC
donde se encuentran registrados los comprobantes de pagos, con sus respectivos
detalles. Los Productos están clasificados por categorías (Observe la tabla Productos y
Categorías)

CLIENTES:
CODCLI APECLI NOMCLI DIRCLI DISTCLI RUCCLI TELCLI FNCLI SEXOCLI
001 CARRANZA RAFAEL Av. Venezuela Breña 10141512123 4252623 10/02/78 M
002 RUIZ NANCY 345 Lince 4645223 14/05/73 F
003 OLIVA Jr. Junín 345
. MENDEZ
.
.
010

PRODUCTOS:

CODPRO NOMPRO DESPRO MARPRO PREPRO STOCK CODCAT


001 ACEITE Botella de 1 Litro Primor 4.99 100 001
002 JABON Tocador Palmolive 2.50 50 005
003
.
.
010

FACTURAS:

NROFAC CODCLI FECFAC STFAC IGVFAC MPFAC CODVEN


000001 002 14/09/2007 10.50 1.99 12.49 01
000002 001 15/10/2007 12.58 2.39 14.97 02

VENDEDORES: CODVEN APEVEN NOMVEN


01 García Karen
02 Cáceres Carlos

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 88


FUNDAMENTOS DE BASE DE DATOS

DETFAC:

NROFAC CODPRO CANT TOTAL


000001 002 3 7.50
000001 001 1 4.99
000002 001 2 9.98

CATEGORÍA:

CODCAT NOMCAT
001 ABARROTES
002 PANADERIA
003 LACTEOS
004 LIMPIEZA

Visualizar las siguientes consultas:

a) Visualizar una lista de clientes cuyas direcciones correspondan a una avenida.


b) Visualizar una lista de artículos del más caro al más barato.
c) Visualizar una lista de clientes que sean mayores de 25 años.
d) Visualizar una lista de clientes que hayan nacido entre agosto y diciembre.
e) Visualizar una lista de clientes que nacieron un martes 13.
f) Visualizar una lista de clientes cuya última letra del nombre sea R o N.
g) Visualizar una lista de artículos cuya primera letra de la descripción sea A o la tercera Letra
sea E.
h) Visualizar un listado donde figuren las facturas emitidas a los clientes 003 y 006.
i) ¿Cuántos clientes no tienen número de RUC?
j) Mostrar una lista de clientes que hicieron compras el día de su cumpleaños.
k) Muestrar una lista de los clientes que hayan adquirido la mayor cantidad de artículos
(listado de mayor a menor).
l) Mostrar una lista de los clientes a quienes se les haya emitido mayor número de facturas
(listado de mayor a menor).
m) Listar a los clientes que nacieron en el cuarto trimestre del año.
n) Listar a los clientes que vivan en los distritos de Cercado, Miraflores y San Isidro.
o) Listar los productos cuyo nombre empiece con cualquiera de las siguientes letras: A, J, P.
p) Visualizar la lista de productos con su respectivo: valor total de mercadería.
(STOCK*CANT).
q) Visualizar la lista de vendedores que no han emitido facturas.
r) Visualizar los productos vendidos en las facturas 001 y 002, calcule el total por cada
producto (Ptotal*Cant).
s) Incrementar el precio de los productos en un 2% (la modificación debe realizarse en el
campo PUPRO).

IMPORTANTE: Una vez terminado comunicar al instructor y sustentar el trabajo.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 89


FUNDAMENTOS DE BASE DE DATOS

MARCO TEÓRICO

MySQL. Es un gestor de base de datos sencillo de usar e increíblemente rápido en ejecución


de comandos. También es uno de los motores de base de datos más usados en Internet, la
principal razón de esto es que es gratis para aplicaciones no comerciales.
Las características principales de MySQL son:
Es un gestor de base de datos. Una base de datos es un conjunto de datos y un gestor de
base de datos es una aplicación capaz de manejar este conjunto de datos de manera eficiente
y cómoda.
Es una base de datos relacional. Una base de datos relacional es un conjunto de datos que
están almacenados en tablas entre las cuales se establecen unas relaciones para manejar los
datos de una forma eficiente y segura. Para usar y gestionar una base de datos relacional se
usa el lenguaje estándar de programación SQL.
Es Open Source. El código fuente de MySQL se puede descargar y está accesible a
cualquiera, por otra parte, usa la licencia GPL para aplicaciones no comerciales.
Es una base de datos muy rápida, segura y fácil de usar. Gracias a la colaboración de
muchos usuarios, la base de datos se ha ido mejorando optimizándose en velocidad. Por eso
es una de las bases de datos más usadas en Internet.

TIPO DE DATOS.
MySQL soporta un número de tipos de columnas divididos en varias categorías: tipos
numéricos, tipos de fecha y hora, y tipos de cadenas de caracteres.
Varias descripciones de los tipos de columnas usan estas convenciones:
M ->Indica la máxima anchura al mostrar los datos. El máximo ancho de muestra es 255.
D ->Se aplica a tipos de coma flotante y de coma fija e indica el número de dígitos a
continuación del punto decimal. El valor máximo posible es 30, pero no debe ser mayor que
M-2.
Los corchetes ('[' y ']') indican partes de especificadores de tipos que son opcionales.
TIPOS NUMÉRICOS
BIT[(M)]
En un tipo de datos bit. M indica el número de bits por valor, de 1 a 64. El valor por defecto es
1 si se omite M.
Este tipo de datos se añadió en MySQL 5.0.3 para MyISAM, una extensión en 5.0.5 para
MEMORY, InnoDB, y BDB. Antes de 5.0.3, BIT es un sinónimo de TINYINT(1).
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Un entero muy pequeño. El rango con signo es de -128 a 127. El rango sin signo es de 0 a
255. BOOL, BOOLEAN Son sinónimos para TINYINT(1). Un valor de cero se considera falso.
Valores distintos a cero se consideran ciertos.
En el futuro, se introducirá tratamiento completo de tipos booleanos según el estándard SQL.
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Un entero pequeño. El rango con signo es de -32768 a 32767. El rango sin signo es de 0 a
65535.
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
Entero de tamaño medio. El rango con signo es de -8388608 a 8388607. El rango sin singo
es de 0 a 16777215.
INT[(M)] [UNSIGNED] [ZEROFILL]

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 90


FUNDAMENTOS DE BASE DE DATOS

Un entero de tamaño normal. El rango con signo es de -2147483648 a 2147483647. El rango


sin signo es de 0 a 4294967295.

INTEGER[(M)] [UNSIGNED] [ZEROFILL]


Es un sinónimo de INT.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]

Un entero grande. El rango con signo es de -9223372036854775808 a


9223372036854775807. El rango sin signo es de 0 a 18446744073709551615.

Algunos aspectos a considerar con respecto a las columnas BIGINT :

Toda la aritmética se hace usando valores BIGINT o DOUBLE, así que no debe usar enteros
sin signos mayores que 9223372036854775807 (63 bits) except con funciones bit! Si lo hace,
algunos de los últimos dígitos en el resultado pueden ser erróneos por culpa de errores de
redondeo al convertir valores BIGINT a DOUBLE.

MySQL 5.0 puede tratar BIGINT en los siguientes casos:


Cuando usa enteros para almacenar valores grandes sin signo en una columna BIGINT .
En MIN(col_name) o MAX(col_name), donde col_name se refiere a una columna BIGINT
Al usar operadores (+, -, *, y así) donde ambos operadores son enteros.

Siempre puede guardar un valor entero exacto en una columna BIGINT almacenándolo
usando una cadena de carácteres. En este caso, MySQL realiza una conversión cadena de
carácteres-número que no implica representación de doble precisión intermedia.

Los operadores -, +, y * usan BIGINT en operaciones aritméticas cuando ambos operandos


son valores enteros. Esto significa que si multiplica dos enteros grandes (o resultados de
funciones que devuelven enteros), puede obtener resultados inesperados cuando el resultado
es mayor que 9223372036854775807.

FLOAT(p) [UNSIGNED] [ZEROFILL]


Número con coma flotante. p representa la precisión. Puede ir de 0 a 24 para números de
coma flotante de precisión sencilla y de 25 a 53 para números de coma flotante con doble
precisión. Estos tipos son como los tipos FLOAT y DOUBLE descritos a continuación.
FLOAT(p) tiene le mismo rango que los tipos correspondientes FLOAT y DOUBLE, pero la
anchura de muestra y el número de decimales no están definidos.

En MySQL 5.0, este es un valor de coma flotante auténtico.

Esta sintaxis se proporciona para compatibilidad con ODBC.

Usar FLOAT puede darle algunos problemas inesperados ya que todos los cálculos se en
MySQL se hacen con doble precisión.

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 91


FUNDAMENTOS DE BASE DE DATOS

Un número de coma flotante pequeño (de precisión simple). Los valores permitidos son de -
3.402823466E+38 a -1.175494351E-38, 0, y de 1.175494351E-38 a 3.402823466E+38. Si se
especifica UNSIGNED, los valores negativos no se permiten. M es la anchura de muestra y D
es el número de dígitos significativos. FLOAT sin argumentos o FLOAT(p) (donde p está en
el rango de 0 a 24) es un número de coma flotante con precisión simple.

DOUBLE[(M,B)] [UNSIGNED] [ZEROFILL]


Número de coma flotante de tamaño normal (precisión doble). Los valores permitidos son de
-1.7976931348623157E+308 a -2.2250738585072014E-308, 0, y de 2.2250738585072014E-
308 a 1.7976931348623157E+308. Si se especifica UNSIGNED, no se permiten valores
negativos. M es la anchura de muestra y B es el número de bits de precisión. DOUBLE sin
parámetros o FLOAT(p) (donde p está en el rango de 25 a 53) es un número de coma flotante
con doble precisión. Un número de coma flotante con precisión sencilla tiene una precisión de
7 decimales aproximadamente; un número con coma flotante de doble precisión tiene una
precisión aproximada de 15 decimales.

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED]


[ZEROFILL]
Son sinónimos de DOUBLE. Excepción: Si el modo del servidor SQL incluye la opción
REAL_AS_FLOAT, REAL es un sinónimo para FLOAT en lugar de DOUBLE.

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]


A partir de MySQL 5.0.3:
Número de punto fijo exacto y empaquetado. M es el número total de dígitos y D es el número
de decimales. El punto decimal y (para números negativos) el signo '-' no se tiene en cuenta
en M. Si D es 0, los valores no tienen punto decimal o parte fraccional. El máximo número de
dígitos (M) para DECIMAL es 64. El máximo número de decimales soportados (D) es 30. Si
UNSIGNED se especifica, no se permiten valores negativos.

Si se omite D, el valor por defecto es 0. Si se omite M, el valor por defecto es 10.

Todos los cálculos básicos (+, -, *, /) con columnas DECIMAL se hacen con precisión de 64
dígitos decimales. Si se omite D, el valor por defecto es 0. Si se omite M, el valor por defecto
es 10.

DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL],


FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
Son sinónimos para DECIMAL. El sinónimo FIXED está disponible por compatibilidad con
otros servidores.

TIPOS CRONOLÓGICOS.
1.-DATE
Una fecha. El rango soportado es de '1000-01-01' a '9999-12-31'. MySQL muestra valores
DATE en formato 'YYYY-MM-DD', pero permite asignar valores a columnas DATE usando
cadenas de caracteres o números.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 92


FUNDAMENTOS DE BASE DE DATOS

2.-DATETIME
Combinación de fecha y hora. El rango soportado es de '1000-01-01 [Link]' a '9999-12-31
[Link]'. MySQL muestra valores DATETIME en formato 'YYYY-MM-DD HH:MM:SS', pero
permite asignar valores a las columnas DATETIME usando cadenas de caracteres o números.
TIMESTAMP[(M)]
Una marca temporal. El rango es de '1970-01-01 [Link]' hasta el año 2037.
Una columna TIMESTAMP es útil para registrar la fecha y hora de una operación INSERT o
UPDATE . La primera columna TIMESTAMP en una tabla se rellena automáticamente con la
fecha y hora de la operación más reciente si no le asigna un valor. Puede asignar a cualquier
columna TIMESTAMP la fecha y hora actual asignándole un valor NULL .
En MySQL 5.0, TIMESTAMP se retorna como una cadena de caracteres en el formato 'YYYY-
MM-DD HH:MM:SS' cuya anchura de muestra son 19 caracteres. Si quiere obtener el valor
como un número, debe añadir +0 a la columna timestamp .

3.-TIME
Una hora. El rango es de '-[Link]' a '[Link]'. MySQL muestra los valores TIME en
formato 'HH:MM:SS', pero permite asignar valores a columnas TIME usando números o
cadenas de caracteres.

4.-YEAR [(2|4)]
Un año en formato de dos o cuatro dígitos. El valor por defecto está en formato de cuatro
dígitos. En formato de cuatro dígitos, los valores permitidos son de 1901 a 2155, y 0000. En
formato de dos dígitos, los valores permitidos son de 70 a 69, representando los años de 1970
a 2069. MySQL muestra los valores YEAR en formato YYYY pero permite asignar valores a
columnas YEAR usando cadenas de caracteres o números.

TIPOS DE CADENA DE CARACTERES.


[NATIONAL] CHAR(M) [BINARY | ASCII | UNICODE]
Una cadena de caracteres de longitud fija que siempre tiene el número necesario de espacios
a la derecha para ajustarla a la longitud especificada al almacenarla. M representa la longitud
de la columna. El rango de M en MySQL 5.0 es de 0 a 255 caracteres.

Nota: Los espacios a la derecha se borran cuando se obtiene los valores CHAR.

Antes de MySQL 5.0.3, una columna CHAR con una longitud especificada mayor que 255 se
convierte al tipo TEXT más pequeño que pueda tener los valores de la longitud dada. Por
ejemplo, CHAR(500) se convierte a TEXT, y CHAR(200000) se convierte en MEDIUMTEXT.
Esta es una característica de compatibilidad. Sin embargo, esta conversión causa que la
columna tenga longitud variable, y también afecta a la eliminación de espacios.

CHAR es una abreviatura para CHARACTER. NATIONAL CHAR (o su forma equivalente de,
NCHAR) es la forma estándard de SQL de definir que una columna CHAR debe usar el
conjunto de caracteres por defecto. Este es el comportamiento por defecto en MySQL.

El atributo BINARY es una abreviatura para especificar la colación binaria del conjunto de
caracteres de la columna. La ordenación y comparación se basa en los valores numéricos de
los caracteres.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 93


FUNDAMENTOS DE BASE DE DATOS

El tipo de columna CHAR BYTE es un alias para CHAR BINARY. Esta es una característica
de compatibilidad.

El atributo ASCII puede especificarse para CHAR. Asigna el conjunto de caracteres latin1. El
atributo UNICODE puede especificarse en MySQL 5.0 para CHAR. Asigna el conjunto de
caracteres ucs2 .

MySQL le permite crear un tipo de columna CHAR(0). Esto es útil cuando tiene que cumplir
con las especificaciones de alguna aplicación vieja que dependa de la existencia de una
columna pero que no usa realmente el valor. Esto es también útil cuando necesita una
columna que sólo pueda tener dos valores: Una columna CHAR(0) que no esté definido como
NOT NULL ocupa sólo un bit y sólo puede tener dos valores NULL y '' (la cadena de
caracteres vacía).

CHAR
Es un sinónimo de CHAR(1).
[NATIONAL] VARCHAR(M) [BINARY]
Cadena de carácteres de longitud variable. M representa la longitud de columna máxima. En
MySQL 5.0, el rango de M es de 0 a 255 antes de MySQL 5.0.3, y de 0 a 65,535 en MySQL
5.0.3 y posterior. (La longitud máxima real de un VARCHAR en MySQL 5.0 se determina por
el tamaño de registro máximo y el conjunto de carácteres que use. La longitud máxima efectiva
desde MySQL 5.0.3 es de 65,532 bytes.).

Nota: Antes de 5.0.3, los espacios finales se eliminaban cuando se almacenaban los valores
VARCHAR, lo que difiere de le especificación estándard de SQL.

Previo a MySQL 5.0.3, una columna VARCHAR con una longitud especificada mayor a 255
se convertía al valor de tipo TEXT más pequeño que podía soportar el valor de la longitud
dada. Por ejemplo, VARCHAR(500) se convertía a TEXT, y VARCHAR(200000) se convertía
a MEDIUMTEXT. Esto era una cuestión de compatibilidad. Sin embargo, esta conversión
afectaba la eliminación de espacios finales.

VARCHAR es la abreviación de CHARACTER VARYING.


En MySQL 5.0, el atributo BINARY es abreviatura para especificar la colación binaria del
conjunto de carácteres de la columna. La ordenación y la comparación se basa en los valores
numéricos de los carácteres.

Desde MySQL 5.0.3, VARCHAR se guarda con un prefijo de longitud de uno o dos bytes +
datos. La longitud del prefijo es de dos bytes si la columna VARCHAR se declara con una
longitud mayor a 255.

BINARY(M)
El tipo BINARY es similar al tipo CHAR, pero almacena cadenas de datos binarios en lugar
de cadenas de carácteres no binarias.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 94


FUNDAMENTOS DE BASE DE DATOS

VARBINARY(M)
El tipo VARBINARY es similar al tipo VARCHAR, pero almacena cadenas de carácteres
binarias en lugar de cadenas de carácteres no binarias.

TINYBLOB
Una columna BLOB con una longitud máxima de 255 (2^8 - 1) bytes.

TINYTEXT
Una columna TEXT con longitud máxima de 255 (2^8 - 1) carácteres.

BLOB[(M)]
Una columna BLOB con longitud máxima de 65,535 (2^16 - 1) bytes.
Una longitud opcional M puede darse para este tipo en MySQL 5.0. Si se hace, MySQL creará
las columnas como el tipo BLOB de tamaño mínimo para tratar los valores de M bytes.

TEXT[(M)]
Una columna TEXT con longitud máxima de 65,535 (2^16 - 1) carácteres.
En MySQL 5.0, se puede dar una longitud opcional M . En ese caso MySQL creará las
columnas con el tipo TEXT de longitud mínima para almacenar los valores de longitud M.

MEDIUMBLOB
Una columna BLOB con longitud de 16,777,215 (2^24 - 1) bytes.

MEDIUMTEXT
Una columna TEXT con longitud máxima de 16,777,215 (2^24 - 1) carácteres.

LONGBLOB
Una columna BLOB con longitud máxima de 4,294,967,295 o 4GB (2^32 - 1) bytes. La
longitud máxima efectiva (permitida) de las columnas LONGBLOB depende del tamaño
máximo configurado para los paquetes en el protocolo cliente/servidor y la memoria
disponible.

LONGTEXT
Una columna TEXT con longitud máxima de 4,294,967,295 or 4GB (2^32 - 1) carácteres. La
longitud máxima efectiva (permitida) de columnas LONGTEXT depende del tamaño máximo
de paquete configurado en el protocolo cliente/servidor y la memoria disponible.

ENUM('value1','value2',...)
Una enumeración. Un objeto de cadena de carácteres que sólo puede tener un valor, elegido
de una lista de valores 'value1', 'value2', ..., NULL o el valor de error especial '' . Una columna
ENUM puede tener un máximo de 65,535 valores distintos. Los valores ENUM se representan
internamente como enteros.

SET('value1','value2',...)
Un conjunto. Un objeto de cadena de carácteres que puede tener cero o más valores que
deben pertenecer a la lista de valores 'value1', 'value2', ... Una columna SET puede tener un
máximo de 64 miembros. Los valores SET se representan internamente como enteros.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 95


FUNDAMENTOS DE BASE DE DATOS

FUNCIONES DE MySQL
Funciones para cadena de caracteres
Las funciones de cadenas de carácteres retornan NULL si la longitud del resultado es mayor
que el valor de la variable de sistema max_allowed_packet .

Para funciones que operan en posiciones de cadenas de carácteres, la primera posición es la


1.

BIT_LENGTH(str)
Retorna la longitud de la cadena de carácteres str en bits.
mysql> SELECT BIT_LENGTH('text'); -> 32
CHAR(N,...)
CHAR() interpreta los argumentos como enteros y retorna la cadena de carácteres que
consiste en los carácteres dados por los códigos de tales enteros. Los valores NULL no se
tienen en cuenta.
mysql> SELECT CHAR(77,121,83,81,'76'); -> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3'); -> 'MMM'

CHAR_LENGTH(str)
Retorna la longitud de la cadena de carácteres str, medida en carácteres. Un carácter de
múltiples bytes cuenta como un sólo carácter. Esto significa que para una cadena de
carácteres que contiene cinco carácteres de dos bytes, LENGTH() retorna 10, mientras
CHAR_LENGTH() returna 5.

CONCAT(str1,str2,...)
Retorna la cadena resultado de concatenar los argumentos. Retorna NULL si algúna
argumento es NULL. Puede tener uno o más argumentos. Si todos los argumentos son
cadenas no binarias, el resultado es una cadena no binaria. Si los argumentos incluyen
cualquier cadena binaria, el resultado es una cadena binaria. Un argumento numérico se
convierte a su forma de cadena binaria equivalente; si quiere evitarlo puede usar conversión
de tipos explícita, como en este ejemplo: SELECT CONCAT(CAST(int_col AS CHAR),
char_col)
mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULL
mysql> SELECT CONCAT(14.3); -> '14.3'

INSTR(str,substr)
Retorna la posición de la primera ocurrencia de la subcadena substr en la cadena str. Es lo
mismo que la forma de dos argumentos de LOCATE(), excepto que el orden de los
argumentos es inverso.
mysql> SELECT INSTR('foobarbar', 'bar'); -> 4
mysql> SELECT INSTR('xbar', 'foobar'); -> 0
Esta función puede trabajar con múltiples bytes. En MySQL 5.0, sólo es sensible a mayúsculas
si uno de los argumentos es una cadena binaria.
LCASE(str)

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 96


FUNDAMENTOS DE BASE DE DATOS

LCASE() es sinónimo de LOWER().

LEFT(str,len)
Retorna los len carácteres empezando por la izquierda de la cadena str.
mysql> SELECT LEFT('foobarbar', 5); -> 'fooba'

LENGTH(str)
Retorna la longitud de la cadena str, medida en bytes. Un carácter multi-byte cuenta como
múltiples bytes. Esto significa que para cadenas que contengan cinco carácteres de dos bytes,
LENGTH() retorna 10, mientras que CHAR_LENGTH() retorna 5.
mysql> SELECT LENGTH('text'); -> 4

LOWER(str)
Retorna la cadena str con todos los carácteres cambiados a minúsculas según el mapeo del
conjunto de carácteres actual (por defecto es ISO-8859-1 Latin1).
mysql> SELECT LOWER('QUADRATICALLY'); -> 'quadratically'
Esta función funciona con múltiples bytes.

LPAD(str,len,padstr)
Retorna la cadena str, alineado a la izquierda con la cadena padstr a una longitud de len
carácteres. Si str es mayor que len, el valor retornado se acorta a len carácteres.
mysql> SELECT LPAD('hi',4,'??'); -> '??hi'
mysql> SELECT LPAD('hi',1,'??'); -> 'h'

LTRIM(str)
Retorna la cadena str con los carácteres en blanco iniciales eliminados.
mysql> SELECT LTRIM(' barbar'); -> 'barbar'
Esta función trabaja con múltiples bytes.

MAKE_SET(bits,str1,str2,...)
Retorna un conjunto de valores (una cadena conteniendo subcadenas separadas por
carácteres ',' ) consistiendo en cadenas que tienen el bit correspondiente en bits asignado.
str1 se corresponde al bit 0, str2 al bit 1, y así. Los valores NULL en str1, str2, ... no se añaden
al resultado.
mysql> SELECT MAKE_SET(1,'a','b','c'); -> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');-> 'hello,world'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world');-> 'hello'
mysql> SELECT MAKE_SET(0,'a','b','c'); -> ''

MID(str,pos,len)
MID(str,pos,len) es sinónimo de SUBSTRING(str,pos,len).

OCT(N)
Retorna una representación en cadena del valor octal de N, donde N es un número largo
(BIGINT). Es equivalente a CONV(N,10,8). Retorna NULL si N es NULL.
mysql> SELECT OCT(12); -> '14'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 97


FUNDAMENTOS DE BASE DE DATOS

OCTET_LENGTH(str)
OCTET_LENGTH() es sinónimo de LENGTH().
ORD(str)
Si el carácter más a la izquierda de la cadena str es un carácter multi-byte , retorna el código
de ese carácter, calculado a partir del valor numérico de sus bytes usando esta fórmula:
(1st byte code)+ (2nd byte code * 256)+ (3rd byte code * 256^2) ...
Si el caráctar más a la izquierda no es multi-byte , ORD() retorna el mismo valor que la función
ASCII() .
mysql> SELECT ORD('2'); -> 50

POSITION(substr IN str)
POSITION(substr IN str) es sinónimo de LOCATE(substr,str).

QUOTE(str)
Acota una cadena para producir un resultado que puede usarse como un valor con carácteres
de escape en un comando SQL. La cadena se retorna rodeado por comillas sencillas y con
cada instancia de comilla sencilla ('''), antibarra ('\'), ASCII NUL, y Control-Z predecidos por
una antibarra. Si el argumento es NULL, el valor de retorno es la palabra “NULL” sin comillas
alrededor.
mysql> SELECT QUOTE('Don\'t!'); -> 'Don\'t!'
mysql> SELECT QUOTE(NULL); -> NULL

REPEAT(str,count)
Retorna una cadena consistente de la cadena str repetida count veces. Si count <= 0, retorna
una cadena vacía. Retorna NULL si str o count son NULL.
mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL'

REPLACE(str,from_str,to_str)
Retorna la cadena str con todas las ocurrencias de la cadena from_str reemplazadas con la
cadena to_str.
mysql> SELECT REPLACE('[Link]', 'w', 'Ww');-> '[Link]'
Esta función trabaja con múltiples bytes.

REVERSE(str)
Retorna la cadena str con el orden de los carácteres invertido.
mysql> SELECT REVERSE('abc'); -> 'cba'
Esta función trabaja con múltiples bytes.

RIGHT(str,len)
Retorna los len carácteres de la derecha de la cadena str.
mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'
Esta función trabaja con múltiples bytes.

RPAD(str,len,padstr)
Retorna la cadena str, alineada a la derecha con la cadena padstr con una longitud de len
carácteres. Si str es mayor que len, el valor de retorno se corta a len carácteres.
mysql> SELECT RPAD('hi',5,'?'); -> 'hi???'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 98


FUNDAMENTOS DE BASE DE DATOS

mysql> SELECT RPAD('hi',1,'?'); -> 'h'


Esta función trabaja con múltiples bytes.

RTRIM(str)
Retorna la cadena str con los espacios precedentes eliminados.
mysql> SELECT RTRIM('barbar '); -> 'barbar'
Esta función trabaja con múltiples bytes.

SPACE(N)
Retorna la cadena consistente en N carácteres blancos.
mysql> SELECT SPACE(6); -> ' '

SUBSTRING(str,pos) , SUBSTRING(str FROM pos), SUBSTRING(str,pos,len) ,


SUBSTRING(str FROM pos FOR len)

Las formas sin el arguemnto len retornan una subcadena de la cadena str comenzando en la
posición pos. Las formas con el argumento len retornan una subcadena de longitud len a partir
de la cadena str, comenzando en la posición [Link] formas que usan FROM son sintaxis
SQL estándard. En MySQL 5.0, es posible usar valores negativos para pos. En este caso, el
inicio de la subcadena son pos carácteres a partir del final de la cadena, en lugar del principio.

Un valor negativo puede usarse para pos en cualquier de las formas de esta función.
mysql> SELECT SUBSTRING('Quadratically',5); -> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica'
mysql> SELECT SUBSTRING('Sakila', -3); -> 'ila'
mysql> SELECT SUBSTRING('Sakila', -5, 3); -> 'aki'
mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -> 'ki'

Esta función trabaja con múltiples bytes.

Tener en cuenta que si usa un valor menor a 1 para len, el resultado siempre es una cadena
vacía.

SUBSTR() es sinónimo de SUBSTRING().


SUBSTRING_INDEX(str,delim,count)
Retorna la subcadena de la cadena str antes de count ocurrencias del delimitador delim. Si
count es positivo, todo a la izquierda del delimitador final (contando desde la izquierda) se
retorna. Si count es negativo, todo a la derecha del delimitador final (contando desde la
derecha) se retorna.
mysql> SELECT SUBSTRING_INDEX('[Link]', '.', 2);-> '[Link]'
mysql> SELECT SUBSTRING_INDEX('[Link]', '.', -2);
-> '[Link]'

Esta función trabaja con múltiples bytes.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 99


FUNDAMENTOS DE BASE DE DATOS

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM(remstr FROM] str)


Retorna la cadena str con todos los prefijos y/o sufijos remstr eliminados. Si ninguno de los
especificadores BOTH, LEADING, o se daTRAILING, BOTH se asumen. Si remstr es
opcional y no se especifica, los espacios se eliminan.
mysql> SELECT TRIM(' bar '); -> 'bar'
mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx'
mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar'
mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'

Esta función trabaja con múltiples bytes.

UCASE(str)
UCASE() es sinónimo de UPPER().
UPPER(str)
Retorna la cadena str con todos los carácteres cambiados a mayúsculas según el mapeo del
conjunto de carácteres actual (por defecto es ISO-8859-1 Latin1).
mysql> SELECT UPPER('Hej'); -> 'HEJ'

Esta función trabaja con múltiples bytes.

Funciones Numé[Link] las funciones matemáticas retornan NULL en caso de error.

ABS(X)
Retorna el valor absoluto de X.
mysql> SELECT ABS(2); -> 2
mysql> SELECT ABS(-32); -> 32
Esta función puede usar valores BIGINT.

CEILING(X), CEIL(X)
Retorna el entero más pequeño no menor a X.
mysql> SELECT CEILING(1.23); -> 2
mysql> SELECT CEIL(-1.23); -> -1
Estas dos funciones son sinónimos. Tenga en cuenta que el valor retornado se convierte a
BIGINT.

FLOOR(X)
Retorna el valor entero más grande pero no mayor a X.
mysql> SELECT FLOOR(1.23); -> 1
mysql> SELECT FLOOR(-1.23); -> -2
Tener en cuenta que el valor devuelto se convierte a BIGINT.

LN(X)
Retorna el logaritmo natural de X, esto es, el logaritmo de X base e.
mysql> SELECT LN(2);
-> 0.69314718055995
mysql> SELECT LN(-2);
-> NULL

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 100


FUNDAMENTOS DE BASE DE DATOS

Esta función es sinónimo a LOG(X).


MOD(N,M) , N % M, N MOD M
Operación de módulo. Retorna el resto de N dividido por M.
mysql> SELECT MOD(234, 10); -> 4
mysql> SELECT 253 % 7; -> 1
mysql> SELECT MOD(29,9); -> 2
mysql> SELECT 29 MOD 9; -> 2
Esta función puede usar valores BIGINT.

MOD() también funciona con valores con una parte fraccional y retorna el res-to exacto tras la
división:
mysql> SELECT MOD(34.5,3); -> 1.5
POW(X,Y) , POWER(X,Y)
Retorna el valor de X a la potencia de Y.
mysql> SELECT POW(2,2); -> 4
mysql> SELECT POW(2,-2); -> 0.25

RAND(), RAND(N)
Retorna un valor aleatorio en coma flotante del rango de 0 a 1.0. Si se especifica un argumento
entero N, es usa como semilla, que produce una secuencia repetible.
mysql> SELECT RAND();
-> 0.9233482386203
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND();
-> 0.63553050033332
mysql> SELECT RAND();
-> 0.70100469486881
mysql> SELECT RAND(20);
-> 0.15888261251047

Se puede usar esta función para recibir registros de forma aleatoria como se muestra aquí:
mysql> SELECT * FROM tbl_name ORDER BY RAND();

ORDER BY RAND() combinado con LIMIT es útil para seleccionar una muestra aleatoria de
una conjunto de registros:
mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d
-> ORDER BY RAND() LIMIT 1000;

Tener en cuenta que RAND() en una cláusula WHERE se re-evalúa cada vez que se ejecuta
el WHERE.

RAND() no pretende ser un generador de números aleatorios perfecto, pero es una forma
rápida de generar números aleatorios ad hoc portable entre plataformas para la misma versión
de MySQL.
ROUND(X), ROUND(X,D)

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 101


FUNDAMENTOS DE BASE DE DATOS

Retorna el argumento X, redondeado al entero más cercano. Con dos argumentos, retorna X
redondeado a D decimales. D puede ser negativo para redondear D dígitos a la izquierda del
punto decimal del valor X.
mysql> SELECT ROUND(-1.23); -> -1
mysql> SELECT ROUND(-1.58); -> -2
mysql> SELECT ROUND(1.58); -> 2
mysql> SELECT ROUND(1.298, 1); -> 1.3
mysql> SELECT ROUND(1.298, 0); -> 1
mysql> SELECT ROUND(23.298, -1); -> 20

El tipo de retorno es el mismo tipo que el del primer argumento (asumiendo que sea un entero,
doble o decimal). Esto significa que para un argumento entero, el resultado es un entero (sin
decimales).

Antes de MySQL 5.0.3, el comportamiento de ROUND() cuando el argumento se encuentra a


medias entre dos enteros depende de la implementación de la biblioteca C. Implementaciones
distintas redondean al número par más próximo, siempre arriba, siempre abajo, o siempre
hacia cero. Si necesita un tipo de redondeo, debe usar una función bien definida como
TRUNCATE() o FLOOR() en su lugar.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 102


FUNDAMENTOS DE BASE DE DATOS

IV. IMPLEMENTA PROGRAMACIÓN CON T-SQL.

En esta tarea se tratarán las siguientes operaciones:

- Implementar Store Procedure básico.


- Implementar Store Procedure con varias tablas.
- Crear disparadores básicos.
- Crear disparadores avanzados.

4.1. IMPLEMENTAR STORE PROCEDURE BÁSICO.

1. Sp_definidos por el usuario (USP). Su propósito va a quedar como objetos fijos en el


sistema.
Sintaxis.
Create procedure [nombre ][@param1 ,tipo 1 , @param2 ,tipo 2, @ param3 ,tipo 3 ]
As instrucciones SQL
GO

Para ejecutar un sp utilizar el comando EXECUTE


EXECUTE nombre del SP [Lista de datos]
Ejemplos prácticos de aplicación.

Ejemplo 1:
Procedimiento almacenado que
hace un select y realiza grupos por
número de deparamento y cuenta
cuántos empleados hay en cada
departamento.

Nota: En este ejemplo sólo hay 1


empleado

CLIENTES REGISTRADOS:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 103


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 2: Procedimiento almacenado de Inserción.


create Procedure Usp_InsertarCLiente
@Cod varchar(8),
@nom_cliente VarChar(50) ,
@ape_cliente VarChar(50) ,
@dir_cliente VarChar(50) ,
@tel_cliente VarChar(8),
@Ruc_cliente Varchar(15),
@DNI_cliente Varchar(8),
@Email_cliente Varchar(50),
@Distrito VarChar(3)
as
Insert Clientes Values
(@Cod,@nom_cliente,@ape_cliente,@dir_cliente,@tel_cliente,@ruc_cliente,@dni_cliente,
@email_cliente,@Distrito)
Go
Print 'Insertar Cliente creado'

Ejemplo 3: Procedimiento de consulta.

Ejemplo 4:

Se acaba de eliminar un registro de la tabla clients.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 104


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 5:
--Procedimiento de Modificacion(Edición)
select * from clientes
Create Procedure Usp_Update_CLiente
@Cod varchar(8),
@nom_cliente VarChar(50) ,
@ape_cliente VarChar(50) ,
@dir_cliente VarChar(50) ,
@tel_cliente VarChar(8),
@Ruc_cliente Varchar(15),
@DNI_cliente Varchar(8),
@Email_cliente Varchar(50),
@Distrito VarChar(3)
as
Update Clientes set
nom_cli=@nom_cliente,
ape_cli=@ape_cliente,
dir_cli=@dir_cliente,
tel_cli=@tel_cliente,
Ruc_cli=@ruc_cliente,
DNI_cli=@dni_cliente,Email_cli=@email_cliente,iddistrito=@Distrito
where IdCliente=@Cod
Go
Print 'Cliente Modificado'
Primero, verificar los registros que se tienen a disposición:

Proceder a ejecutar el procedimiento de actualización para ver los cambios:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 105


FUNDAMENTOS DE BASE DE DATOS

Verificar con un select:

Ejemplo 6: (En la Bd Northwind)


PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR
DEFECTO.
Sintaxis:
Create Procedure Nombre @Variable tipo = Valor
As
Instrucciones
Donde Valor es el valor que le damos por defecto, este valor puede almacenar
Comodines (como % que equivale a *).

Ejemplo 7: VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS.


Sintaxis: Create Procedure Nombre @Variable tipodedato Output.
Instrucciones:
Print @Variable
Create Procedure Totalprecio @product varchar(25), @total int Output
--Crear el procedimiento con un parámetro y una variable de salida
As
--Declarar dos variables para almacenar valores
Declare @Sal Int
Declare @Com Int
--Asignar los valores correspondientes a las variables y después se suman y
--guardar en la variable de salida.
Select @Sal = Unitprice from products where productname = @product
Select @Com = Unitprice from products where productname = @product

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 106


FUNDAMENTOS DE BASE DE DATOS

--Select @Com = Comision from products where productname = @product


Set @Total = @Sal + @Com
--Devolver el valor de la variable que se quiere
Print @total

Ejemplo 8: Listado de empleados.


************************
lista_empleado
**********************/
create proc lista_employees
as
select employeeid,lastname from employees

Ejemplo 9: (de la bd Northwind)


create proc lista_paises
as
select distinct country from customers
go

4.2. IMPLEMENTAR STORE PROCEDURE CON VARIAS TABLAS.

Ejemplo 1: (de la Bd Northwind)


/************************
lista_Productos segun categoria
**********************/
create proc lista_productos
@cod char(5)
as
select

[Link],[Link],ProductName,UnitPrice
from Categories c inner join products p
on [Link]=[Link]
--Ejecutando
lista_productos 'Beverages'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 107


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 2: De la base de datos BDVENTASLIBRO

Primero realizando una consulta a la tabla Libro

Creando el procedimiento Lista de Nombres no se tiene que ingresar todo el nombre, sólo
unos cuantos caracteres como muestra el ejemplo:

CREATE PROC LISTAR_LIBROS_NOMBRE


@NOMBRE VARCHAR(30)='%'
AS
SELECT COD_LIBRO,NOM_LIBRO,PRE_LIBRO,STK_LIBRO
FROM LIBROS

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 108


FUNDAMENTOS DE BASE DE DATOS

WHERE NOM_LIBRO LIKE '%'+@NOMBRE+'%'


GO
--
--LISTAR_LIBROS_NOMBRE
LISTAR_LIBROS_NOMBRE 'BEGINNING '

Ejemplo 3: Procedimiento de consulta que muestra los libros que se encuentran activos; es
decir, cuyo estado sea igual a 1.

CREATE PROC LISTA_LIBROS


@COD INT=0
AS
IF @COD<=0
SELECT COD_LIBRO, NOM_LIBRO, PRE_LIBRO,STK_LIBRO, EDICION
FROM LIBROS
WHERE ESTADO=1
ELSE
SELECT COD_LIBRO, NOM_LIBRO, PRE_LIBRO,
STK_LIBRO, EDICION
FROM LIBROS
WHERE COD_LIBRO=@COD AND ESTADO=1
GO
--

Si fuese cero mostrará todos aquellos que se encuentren activos.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 109


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 4: Procedimiento almacenado que actualiza el nombre de un libro si este código ya


existe, de lo contrario ingresarlo como un nuevo libro.

CREATE PROC GRABAR_LIBRO


@COD INT,@NOM VARCHAR(60),@PRE MONEY,@STK INT,@ED INT
AS
IF EXISTS(SELECT * FROM LIBROS WHERE COD_LIBRO=@COD)
UPDATE LIBROS SET NOM_LIBRO=@NOM,
PRE_LIBRO=@PRE, STK_LIBRO=@STK,
EDICION=@ED
WHERE COD_LIBRO=@COD
ELSE
INSERT INTO LIBROS VALUES(@COD,@NOM,@PRE,
@STK,@ED,1)
GO
--Ejecucion
GRABAR_LIBRO 16,'SQL SERVER 2016',30,100,2
Registro insertado

Ejemplo 5: Procedimiento de eliminación.

CREATE PROC ELIMINAR_LIBRO


@COD INT
AS
UPDATE LIBROS SET ESTADO=0
WHERE COD_LIBRO=@COD
GO

Ejemplo 6: Procedimiento almacenado que genera un Nuevo pedido (correlative), ideal para
generar códigos.

CREATE PROC NUEVO_PEDIDO


AS
SELECT NRO=MAX(NUM_VTA)+1 FROM CAB_PEDIDO
GO
Inicialmente se tiene:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 110


FUNDAMENTOS DE BASE DE DATOS

Ejecutando el procedimiento:

Ejemplo 7: Procedimiento que graba un nuevo pedido, primero generar un nuevo pedido y
posteriormente proceder a grabar el pedido. Deberá visualizarse como está en la pantalla:

Ejemplo 8: Creación del procedimiento Grabar detalles.

CREATE PROC GRABAR_DETALLE


@NUM_VTA INT,@COD_LIBRO INT,@CANT INT,@PRECIO MONEY
AS
INSERT INTO DET_PEDIDO VALUES
(@NUM_VTA,@COD_LIBRO,@CANT,@PRECIO,1)
GO

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 111


FUNDAMENTOS DE BASE DE DATOS

---
select * from DET_PEDIDO
select * from libros
--Ejecucio del procedimiento
GRABAR_DETALLE 10253,16,4,120

Ejemplo 9: Procedimiento de migración de


datos.

Create procedure Migra_datos_tabla


as
SELECT cod_autor AS Codigo,
Nom_autor=Nom_autor,
fec_nac_aut=fec_nac_aut
INTO Tblauto-- CREA LA TABLA CLIENTES
FROM AUTORES
GO
--comprobando
Migra_datos_tabla
--visualizando
select * from tblauto

Ejemplo 10 (de la BD Northwind):

Paso 1. Crear la vista:


create view v_resumen
as
select [Link], country,
año=year([Link]),
monto=sum([Link]*[Link])
from customers c, orders o, [order details] d where [Link]=[Link]
and [Link]=[Link] group by [Link], country, year([Link])
go

Paso 2. Crear el procedimiento:


create proc listar_resumen
@pais varchar(25)
as

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 112


FUNDAMENTOS DE BASE DE DATOS

select customerid,[1996],[1997],[1998] from v_resumen pivot(sum(monto)


for año in ([1996],[1997],[1998])) as t
where country=@pais
go

Paso 3. Ejecutar el procedimiento:

Ejemplo 11:

4.3. CREAR DISPARADORES BÁSICOS.

Un Trigger es una rutina especial que se ejecuta automáticamente cuando surgen eventos
DDL, DML; aquí se podrán visualizar algunos ejemplos:

Ejemplo1:

Paso 1.
-- TRIGGERS DDL
-- CREAR UN TRIGGER QUE NO PERMITA ELIMINAR TABLAS EN LA BD ACTIVA
CREATE TRIGGER TR_ELIMINACION_TABLAS
ON DATABASE AFTER DROP_TABLE
AS
PRINT 'NO SE PERMITE LA ELIMINACION'
PRINT 'DE TABLAS EN ESTA BD'
ROLLBACK -- CANCELA A DROP TABLE
GO

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 113


FUNDAMENTOS DE BASE DE DATOS

Paso 2. Crear una table como ejemplo de prueba.


CREATE TABLE TABLA1
(COL1 INT)
GO

Paso 3.
-- DISPARANDO AL TRIGGER
DROP TABLE TABLA1
GO

Ejemplo 2:
Trigger que no permite la eliminación y modificación de la tabla.

Solución:
ALTER TRIGGER TR_ELIMINACION_TABLAS
ON DATABASE AFTER DROP_TABLE,ALTER_TABLE
AS
-- lista los eventos realizados por el usuario
-- en formato XML
select eventdata()
DECLARE @NOMBD VARCHAR(30)
SET @NOMBD=DB_NAME()
PRINT 'NO SE PERMITE LA ELIMINACION'
PRINT 'Y LA MODIFICACION DE TABLAS EN LA BD '+@NOMBD
ROLLBACK -- CANCELA A DROP TABLE
GO
--Eliminacion de la tabla
DROP TABLE TABLA1
GO
---Modificacion de la tabla
ALTER TABLE TABLA1 DROP COLUMN COL2
GO

Ejemplo 3:
Paso 1. Crear la table.
CREATE TABLE GRABA_EVENTOS
( NUMERO INT IDENTITY,
EVENTOS XML
)
GO
--Triggers que muestra el evento realizado en una tabla por ejemplo evento o acción de
inserccion de registro
Nota: Utilizando el mismo trigger creado desde el inicio.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 114


FUNDAMENTOS DE BASE DE DATOS

Paso 2. Creando el disparador.


ALTER TRIGGER TR_ELIMINACION_TABLAS
ON DATABASE AFTER DROP_TABLE, ALTER_TABLE
AS
-- lista los eventos realizados por el usuario
-- en formato XML
-- select eventdata()
DECLARE @data XML
SET @data=EVENTDATA()
-- Extrayendo algun valor de un elemento de un campo XML
declare @nomtabla varchar(20)
set @nomtabla=Convert(varchar(20),
@[Link]('data(/EVENT_INSTANCE/ObjectName)'))
--Mostrando las columnas sin evento
select * from GRABA_EVENTOS
--Realizando la prueba de Insercon
Insert into GRABA_EVENTOS(EVENTOS) values('Insertar')
Mostrando el resultado

Ejemplo 4:
-- DESACTIVANDO UN TRIGGER DDL
DISABLE TRIGGER
TR_ELIMINACION_TABLAS ON
DATABASE
GO
-- ADICIONANDO UNA NUEVA COLUMNA
ALTER TABLE GRABA_EVENTOS
ADD NOMTABLA VARCHAR(20)
DEFAULT('') WITH VALUES
GO
SP_HELP GRABA_EVENTOS
GO

Ejemplo 5:
-- ACTIVANDO UN TRIGGER DDL
ENABLE TRIGGER TR_ELIMINACION_TABLAS ON DATABASE
GO
--Consultado
SELECT * FROM GRABA_EVENTOS;
--Intentado eliminar la tabla
Drop TABLE TABLA1

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 115


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 6:
Trigger que no permite crear usuarios
------------------------------------------
-- Sp_grantdbaccess ha sido reemplazado / create user / sp_addlogin ha sido reemplazado
-- create login
CREATE TRIGGER TR_NO_CREA_USUARIOS
ON ALL SERVER AFTER CREATE_LOGIN
AS
DECLARE @NOMSERV VARCHAR(30)
SET @NOMSERV=CONVERT(VARCHAR(30),
SERVERPROPERTY('SERVERNAME'))
PRINT 'NO SE PUEDEN CREAR NUEVOS USUARIOS '
PRINT 'EN EL SERVIDOR '+@NOMSERV
ROLLBACK
GO
-- EJECUTANDO EL TRIGGER
CREATE LOGIN SQL1 WITH PASSWORD='123'
Triggers DML
Paso 1
CREATE DATABASE BDTRIGGERS
GO
USE BDTRIGGERS
GO
CREATE TABLE PRODUCTOS
(
COD_PROD INT IDENTITY,
NOM_PROD VARCHAR(50),
PRE_COM MONEY,
PRE_VTA MONEY,
COD_CAT INT
)
GO CREATE TABLE CATEGORIAS
(
COD_CAT INT IDENTITY,
NOM_CAT VARCHAR(50),
VAL_DSCTO DECIMAL(5,2)
)
INSERT CATEGORIAS VALUES('CATEGORIA
GO 1',0.1)
INSERT CATEGORIAS VALUES('CATEGORIA 2',0.2)
INSERT CATEGORIAS VALUES('CATEGORIA 3',0.3)
GO
INSERT PRODUCTOS VALUES('MOUSE',12,24,2)
INSERT PRODUCTOS VALUES('CD-ROM',28,35,1)
INSERT PRODUCTOS VALUES('TECLADO',15,29,2)
GO

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 116


FUNDAMENTOS DE BASE DE DATOS

Ejemplo 1:
CREATE TRIGGER TR_PROD_PRE_VTA
ON PRODUCTOS AFTER INSERT,UPDATE
AS
DECLARE @P_COM MONEY
DECLARE @P_VTA MONEY
SELECT @P_COM=PRE_COM,@P_VTA=PRE_VTA
FROM INSERTED
IF @P_VTA<@P_COM
BEGIN
PRINT 'ERROR EL PRECIO DE VTA '+STR(@P_VTA,5)
+' NO PUEDE SER MENOR AL DE COMPRA '+STR(@P_COM,5)
ROLLBACK
END
ELSE
PRINT 'PRECIO DE VENTA OK'

GO
--VISUALIZANDO REGISTROS
SELECT * FROM PRODUCTOS
--Intentando actualizar debera mostrar error porque el precio de venta es 1
UPDATE PRODUCTOS SET PRE_VTA=1 WHERE COD_PROD=1

--REGISTRO ACTUALIZADO PORQUE EL


PRECIO DE VENTA ES 25
UPDATE PRODUCTOS SET PRE_VTA=25
WHERE COD_PROD=1
--VISUALIZACION FINAL

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 117


FUNDAMENTOS DE BASE DE DATOS

SELECT * FROM PRODUCTOS

Ejemplo 2:
-- CREAR UN TRIGGER QUE NO PERMITA ACTUALIZAR EL PRECIO DE VENTA
-- CON UN PORCENTAJE MAYOR DE DESCUENTO AL QUE TUVIERA POR LA
-- CATEGORIA A LA QUE PERTENECE
ALTER TABLE PRODUCTOS
DISABLE TRIGGER ALL
GO
SELECT * FROM PRODUCTOS
SELECT * FROM CATEGORIAS
CREATE TRIGGER TR_UPD_PRECIOS
ON PRODUCTOS AFTER UPDATE
AS
DECLARE @P_VTA_ANT MONEY, @P_VTA_NEW MONEY
SELECT @P_VTA_ANT=PRE_VTA FROM DELETED
SELECT @P_VTA_NEW=PRE_VTA FROM INSERTED
-- OBTENIENDO LA CATEGORIA DEL PRODUCTO ACTUALIZADO
DECLARE @COD_CAT INT
SELECT @COD_CAT=COD_CAT FROM INSERTED
-- OBTENIENDO EL PORCENTAJE DE DESCUENTO X LA CATEGORIA
DECLARE @PORCENTAJE DECIMAL (5,2)
SELECT @PORCENTAJE=VAL_DSCTO FROM CATEGORIAS
WHERE COD_CAT=@COD_CAT
-- P_VTA_ANT=100
-- COD_CAT = 1
-- PORCENTAJE=0.1

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 118


FUNDAMENTOS DE BASE DE DATOS

-- P_VTA_NEW= 100 - (100 * 0.1) = 90


-- 100 (1 - 0.1) = 100 (0.9) = 90
IF @P_VTA_NEW<@P_VTA_ANT*(1-@PORCENTAJE)
-- IF @P_VTA_NEW<@P_VTA_ANT -(@P_VTA_ANT*@PORCENTAJE)
BEGIN
PRINT 'EL PRECIO DE VENTA NO CORRESPONDE CON SU
MAXIMO '
+'DESCUENTO POR SU CATEGORIA'
ROLLBACK
END
ELSE
PRINT 'PRECIO DE VENTA ACTUALIZADO CORRECTAMENTE'
GO
--
SELECT * FROM PRODUCTOS
--
UPDATE PRODUCTOS SET PRE_VTA=9 WHERE COD_PROD=2

4.4. CREAR DISPARADORES AVANZADOS.

EJEMPLO 1:

Paso 1.
USE Northwind

Paso 2. Creación de la tabla de modelo auditoría.


CREATE TABLE AUDITORIA
(
NUMERO INT IDENTITY,
TABLA VARCHAR(30),
ACCION VARCHAR(50),
USUARIO VARCHAR(30),
FECHA DATETIME
)
GO

Paso 3. Migrando la data de products a la nueva table TBLPRODUCTOS.


SELECT PRODUCTID,PRODUCTNAME,
UNITPRICE,UNITSINSTOCK
INTO TBLPRODUCTOS
FROM PRODUCTS
GO
----TRIGGERS_1701_AUDITA TRIGERS AVANZADOS
CREATE TRIGGER TR_AUDITA_ELI
ON TBLPRODUCTOS AFTER DELETE

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 119


FUNDAMENTOS DE BASE DE DATOS

AS
DECLARE @USER VARCHAR(30)
DECLARE @FECHA DATETIME
SELECT @USER=SYSTEM_USER,
@FECHA=GETDATE()

IF (SELECT COUNT(*) FROM DELETED)>0


BEGIN
ROLLBACK
PRINT 'NO SE PERMITE LA ELIMINACION'
INSERT AUDITORIA
VALUES('TBLPRODUCTOS','ELIMINACION',@USER,@FECHA)
END
GO
--PROBANDO LA
ELIMINACION DE UN
REGISTRO (Generando
error)
DELETE TBLPRODUCTOS
WHERE PRODUCTID=2
SELECT * FROM AUDITORIA

EJEMPLO 2:
CREATE TRIGGER TR_AUDITA_PRECIO
ON TBLPRODUCTOS AFTER UPDATE
AS
DECLARE @USER VARCHAR(30)
DECLARE @FECHA DATETIME
SELECT @USER=SYSTEM_USER,
@FECHA=GETDATE()
-- SI EL PRECIO ESTA SIENDO ACTUALIZADO
IF UPDATE(UNITPRICE)
BEGIN
INSERT AUDITORIA VALUES(
'TBLPRODUCTOS','ACTUALIZANDO PRECIOS',@USER,@FECHA)
END
GO
--ACTUALIZANDO LA TABLA

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 120


FUNDAMENTOS DE BASE DE DATOS

UPDATE TBLPRODUCTOS SET PRODUCTNAME='CAMBIADO' WHERE


PRODUCTID=2
GO
SELECT * FROM TBLPRODUCTOS WHERE PRODUCTID=2
--Visualizando la accion o evento realizado
select * from auditoria
--
SELECT * FROM TBLPRODUCTOS WHERE PRODUCTID=2
UPDATE TBLPRODUCTOS SET UNITPRICE=50 WHERE PRODUCTID=2
GO
SELECT * FROM TBLPRODUCTOS WHERE PRODUCTID=2
--visualizando el nuevo reporte
SELECT * FROM AUDITORIA

EJEMPLO 3:
----------------------------------------
-- CREAR UN TRIGGER QUE PERMITA ACTUALIZAR EL
-- STOCK DE PRODUCTOS CADA VEZ QUE SE INSERTE
-- UN NUEVO DETALLE EN LA TABLA TBLDETALLES.
-- SI EL NUEVO STOCK DEL PRODUCTO ES INFERIOR
-- AL STOCK MINIMO (50), SE DEBE AGREGAR UN
-- NUEVO REGISTRO A LA TABLA REQUERIMIENTOS.
--PASO 1.-CREACION DE TABLAS DE EJEMPLO
CREATE TABLE REQUERIMIENTOS
(
NUMERO INT IDENTITY,
COD_PROD INT, FECHA DATETIME
)
GO
--CREACION DEL TRIGGER
CREATE TRIGGER TR_ACT_STOCK
ON TBLDETALLES AFTER INSERT
AS
DECLARE @CODIGO INT,@STOCK INT,@CANT INT
SELECT @CODIGO=PRODUCTID,@CANT=CANTIDAD
FROM INSERTED

SELECT @STOCK=UNITSINSTOCK FROM TBLPRODUCTOS


WHERE PRODUCTID=@CODIGO
IF @STOCK-@CANT<50 -- MINIMO
BEGIN

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 121


FUNDAMENTOS DE BASE DE DATOS

INSERT REQUERIMIENTOS VALUES


(@CODIGO,GETDATE())
END
UPDATE TBLPRODUCTOS
SET UNITSINSTOCK=UNITSINSTOCK-@CANT
WHERE PRODUCTID=@CODIGO
GO
SELECT * FROM TBLPRODUCTOS
--INSERTANDO
INSERT TBLDETALLES VALUES (4,3)
--CONSULTANDO
SELECT * FROM TBLDETALLES
SELECT * FROM TBLPRODUCTOS WHERE PRODUCTID=4
SELECT * FROM REQUERIMIENTOS
INSERT TBLDETALLES VALUES(4,1)
SELECT * FROM TBLDETALLES
SELECT * FROM TBLPRODUCTOS WHERE PRODUCTID=4
SELECT * FROM REQUERIMIENTOS
--CREANDO LA TABLA DE AUDITORIA
CREATE TABLE AUDITA_DDL
(NUMERO INT IDENTITY, EVENTOS XML)
GO
CREATE TRIGGER TR_AUDITA_DDL
ON DATABASE AFTER CREATE_TABLE
AS
DECLARE @X XML
SELECT @X=EVENTDATA()
ROLLBACK
SELECT @X
INSERT AUDITA_DDL VALUES(@X)
GO
--CREANDO LA TABLA DE PRUEBA
CREATE TABLE TBLPRUEBA
( COL1 INT, COL2 INT )
GO
--VISUALIZANDO EL EVENTO EN FORMATO XML
SELECT * FROM AUDITA_DDL
GO
RESULTADO

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 122


FUNDAMENTOS DE BASE DE DATOS

EJEMPLO 4: Utilizando la base de datos SistFact

CREATE TRIGGER DescontarstockFactura


ON [DetalleFactura]
FOR INSERT
AS
DECLARE @Cantidad integer,
@CodProducto Char(12), @Unidades integer
SELECT @CodProducto = IdArticulo, @Cantidad =
cant_det
FROM [DetalleFactura]
SELECT @Unidades = stock_arti
FROM Articulos
BEGIN TRANSACTION
IF @Cantidad < @Unidades
BEGIN
UPDATE Articulos
SET Stock_arti = Stock_arti - @Cantidad
WHERE IdArticulo = @CodProducto
COMMIT TRANSACTION
END
ELSE
ROLLBACK
GO
Print 'Descontar Stock de factura creado'

EJEMPLO 5: Trigger que descuenta el stock bolete.

CREATE TRIGGER DescontarStockBoleta


ON [DetalleBoleta]
FOR INSERT
AS
DECLARE @Cantidad integer,
@CodProducto Char(12), @Unidades integer
SELECT @CodProducto = IdArticulo, @Cantidad = cant_det
FROM [DetalleBoleta]

SELECT @Unidades = stock_arti


FROM Articulos
BEGIN TRANSACTION
IF @Cantidad < @Unidades
BEGIN
UPDATE Articulos
SET Stock_arti = Stock_arti - @Cantidad
WHERE IdArticulo = @CodProducto
COMMIT TRANSACTION
END

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 123


FUNDAMENTOS DE BASE DE DATOS

ELSE
ROLLBACK
GO
Print 'Descontar Stock de boleta creado'

EJEMPLO 6: Trigger de facturas emitidas.

CREATE TRIGGER FacturasEmitidas


ON [Encabezadofactura]
FOR INSERT
AS
DECLARE @NumeroFactura VarChar(10),@SubTotal Decimal(12,2),@IGV
Decimal(12,2),@Fecha DateTime
SELECT @NumeroFactura = IdEnFac, @IGV =
IGV,@SubTotal=SubTotal_Fac, @Fecha = Fech_fac FROM [EncabezadoFactura]
BEGIN TRANSACTION
Insert Into HistorialFactura (NumeroFactura,Fecha,SubTotal,IGV,UsuarioSistema,
EstacionUsuario) Values (@NumeroFactura,@Fecha,@SubTotal,@IGV,System_User
,Host_Name())
Commit Transaction
GO
Print 'Historial de facturas creado'

EJEMPLO 7: Proformas emitidas.

CREATE TRIGGER ProformasEmitidas


ON [EncabezadoProforma]
FOR INSERT
AS

DECLARE @NumeroProforma VarChar(10),@SubTotal Decimal(12,2),@IGV


Decimal(12,2),@Fecha DateTime
SELECT @NumeroProforma = IdEnProf, @IGV = IGV,@SubTotal=Total_Prof,
@Fecha = Fech_Prof FROM [EncabezadoProforma]

BEGIN TRANSACTION
Insert Into HistorialProforma
(NumeroProforma,Fecha,SubTotal,IGV,UsuarioSistema,EstacionUsuario)
Values
(@NumeroProforma,@Fecha,@SubTotal,@IGV,System_User,Host_Name())
Commit Transaction
GO
Print 'Historial de proformas creado'

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 124


FUNDAMENTOS DE BASE DE DATOS

CASO PRÁCTICO APLICATIVO PARA IMPLEMENTAR.


create database mibd2017
go
use mibd2017
go
create table Resumen
(
numero int primary key,
detalle xml
)
go
insert into Resumen
values(1, '<Factura>
<Numero>1258</Numero>
<Cliente>Hugo Mamanchura Lima</Cliente>
<Fecha>"12/01/2017"</Fecha>
<Total>1580</Total>
<Numero>1281</Numero>
<Cliente>Juan Rodriguez</Cliente>
<Fecha>"12/01/2017"</Fecha>
<Total>4826</Total>
</Factura>')
go
insert into Resumen
values(2, '<Factura>
<Numero>1315</Numero>
<Cliente>Pedro Torres</Cliente>
<Fecha>"12/01/2017"</Fecha>
<Total>5080</Total>
</Factura>')
go
insert into Resumen
values(3, '<Detalle>
<Codigo>1315</Codigo>
<Articulo>Teclado</Articulo>
<Precio>50</Precio>
</Detalle>')
go
select * from Resumen
-- query
-- listar los nombres de los clientes que se encuentran dentro del campo xml detalle.
select convert(varchar(200),[Link]('Factura/Cliente')) from Resumen
select convert(varchar(100),[Link]('data(Factura/Cliente)'))
from Resumen
select * from Resumen
where convert(varchar(100),[Link]('data(Factura/Cliente)')) like 'H%'
-- no devuelve nada, por Cliente, no tiene nodos o elementos que mostrar

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 125


FUNDAMENTOS DE BASE DE DATOS

select [Link]('Factura/Cliente/*') from Resumen


-- lista solo la columna Cliente
select [Link]('Factura/Cliente') from Resumen
-- lista todos los elementos que se encuetren dentro
-- Factura
select [Link]('Factura/*') from Resumen
select [Link]('Detalle/*') from Resumen
------------------------
----- value --------
-- listar los totales de las facturas
select [Link]('(Factura/Numero)[1]','int'), [Link]('(Factura/Total)[1]','money')
from Resumen
--
create table tabla1
(col1 int)
go
--
create table tabla2
(col1 int)
go
--
create table audita_ddl
( num int identity,
accion xml )
go
create trigger tr_no_borra_tablas
on database after drop_table,alter_table,create_table
as
declare @mibd varchar(20)
set @mibd=db_name()
declare @arch_xml xml
set @arch_xml=(select eventdata())
raiserror('No se permiten Borrar Tablas en: %s',
16,1,@mibd)
rollback
insert audita_ddl values(@arch_xml)
go
--PROBANDO GENERARA ERROR
drop table tabla1
--PROBANDO GENERARA ERROR
create table tabla3(col1 int)
alter table tabla1 add col2 int
go
--Visualizando el evento
select * from audita_ddl
--Visualizand el reporte
select num,

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 126


FUNDAMENTOS DE BASE DE DATOS

TABLA=[Link]('(EVENT_INSTANCE/ObjectName)[1]','varchar(20)'),
COMANDO=convert(varchar(20),
[Link]('data(EVENT_INSTANCE/EventType)'))
from audita_ddl
go
--Deshabilitando el trigger
disable trigger tr_no_borra_tablas on database
go
--Ahora si se podra eliminar la tabla
drop table tabla1
go
--FINAL

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 127


FUNDAMENTOS DE BASE DE DATOS

V. IMPLEMENTAR OPERACIONES AVANZADAS CON SQL

En este capítulo se tratarán los siguientes temas:

- Crear Operaciones utilizando el Agente SQL.


- Crear Subquery con SQL.
- Crear Operacion con SQL Azure.

5.1. CREAR OPERACIONES UTILIZANDO EL AGENTE SQL.


Activando el servicio Agente

Paso 1: Escribir [Link]

Paso 2: Ingresar a propiedades:

Paso 3: Cambiar en modo automática y


luego Iniciar:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 128


FUNDAMENTOS DE BASE DE DATOS

Operaciones con el agente SQL server


Trabajo de tipo Backup.

Ejemplo 1:

Paso 1. Inicializar el servicio.

Paso 2. Crear un trabajo de copia de respaldo.

Paso 3.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 129


FUNDAMENTOS DE BASE DE DATOS

Paso 4. Ficha pasos.

Notar el código para ejecutar el trabajo es:


Use Sistfact
go
declare @fec varchar(max)
declare @file varchar(max)
set @fec=convert(varchar(15),Getdate(),105)
set @file='C:\BD\Sistfact-'+@fec+'.bkp'
Backup database Sistfact
to disk = @file
with format,
Name = 'Sistfact';
GO

Paso 5. Ficha programación.

Paso 6. Iniciar el trabajo.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 130


FUNDAMENTOS DE BASE DE DATOS

Paso 7. Comprobar el backup.

Envio de alerta Via Email.

Paso 1. Configurar el database name:

Paso 2. Siguiente.

Paso 3. Activar Instalar correo electrónico.

Paso 4. Habilitar (Si).

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 131


FUNDAMENTOS DE BASE DE DATOS

Paso 5. Click en agregar (parte posterior de la ventana) /activar servidor SSL.

Importante: Si es Gmail será puerto 587 servidor smtp@[Link], si es Hotmail será puerto
25 y servidor smtp@[Link]

Paso 6. Agregar un correo y asignar la clave de su correo electrónico.

Paso 7.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 132


FUNDAMENTOS DE BASE DE DATOS

Paso 8. Activar público.

Paso 9.

Paso 10.

Enviado correo:

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 133


FUNDAMENTOS DE BASE DE DATOS

Paso 11. Aceptar.

Paso 12.

Visualizando correos enviados se tiene que esperar para que el mensaje llegue.

5.2. CREAR SUBQUERY CON SQL.

Caso 1:
‐‐Listado de productos cuyos cantidadaes sean 
superiores a 100 
SELECT ProductName 
  FROM Products  
 WHERE ProductID IN (SELECT ProductId  
                FROM [Order Details] 
               WHERE Quantity > 100) 

Caso 2:

‐‐Lista de todos los clientes con su número total 
de pedidos 
SELECT CompanyName, Address,  
       OrderCount = (SELECT COUNT([Link]) FROM [Orders] O WHERE [Link] = 
[Link])  FROM Customers C  

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 134


FUNDAMENTOS DE BASE DE DATOS

Caso 3:

  ‐‐¿Qué productos fueron vendidos por unidad (es 
decir, la cantidad = 1) 
  SELECT ProductName 
  FROM Products 
 WHERE ProductID = ANY 
       (SELECT ProductId  
          FROM [Order Details] 
         WHERE Quantity = 1) 

Caso 4:

-- Lista de clientes que realizaron pedidos Mayores que el promedio de cada orden de
cliente
SELECT DISTINCT CompanyName + ' ' + Address as Direccion 
FROM Customers, [Orders] 
 WHERE [Link] = [Orders].CustomerId 
   AND freight > ALL  
       (SELECT AVG(freight) 
          FROM [Orders] 
         GROUP BY CustomerId) 
 

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 135


FUNDAMENTOS DE BASE DE DATOS

5.3. CREAR OPERACIÓN CON SQL AZURE.

Creación de una base de datos con AZURE:

Paso 1. Suscripción, tomar en cuenta que una vez suscrito se contará con $200 dolares para
realizar pruebas. Una vez terminado su consumo tendrá la posibilidad de comprar si se cree
necesario. Para ello, deberá contar con una cuenta Hotmail gratuita o coorporativa, ver el
ejemplo:

Paso 2.

Paso 3.

Paso 4. Llenar los datos del formulario generará un código enviado al número telefónico.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 136


FUNDAMENTOS DE BASE DE DATOS

Paso 5. Autenticacion a través de tarjeta de débito o crédito.

Paso 6:

Paso 7:

Paso 8: Botón crear/crear base de datos/asignar nombre a la base de datos ejemplo


senatiBd_Hugo

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 137


FUNDAMENTOS DE BASE DE DATOS

Paso 9: Seleccionar uno libre de 32 Mb como prueba.

Paso 10: Crear el servidor.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 138


FUNDAMENTOS DE BASE DE DATOS

Paso 11. Visualizando a la base de datos creada.

Visualizando las propiedades de la base de datos.


Paso 1:

TAREAS DE INVESTIGACIÓN
1) ¿Qué es Microsoft Azure?
2) ¿Qué son las Tecnologias SaaS, PaaS y IaaS? Exponer en clase sus diferencias con
un ejemplo.
3) Generar un video de creación de tablas en la base de datos creada.
4) Generar un video de subir una base de datos de Sqlserver a azure.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 139


FUNDAMENTOS DE BASE DE DATOS

MARCO TEÓRICO

Computacion en la nube (Cloud Computing).


El término cloud computing hace referencia a una concepción tecnológica y a un modelo de
negocio que reúne ideas tan diversas como el almacenamiento de información, las
comunicaciones entre ordenadores, la provisión de servicios o las metodologías de desarrollo
de aplicaciones, todo ello bajo el mismo concepto: todo ocurre en la nube.

Ofrecer al cliente espacio de almacenamiento o capacidad de procesamiento en sus


servidores. Así el usuario tendrá a su disposición “un disco duro de capacidad ilimitada” y un
procesador de rendimiento casi infinito, solo restringido a su capacidad económica de
contratación del servicio. Este servicio se basa en el acceso al uso de hardware radicado en
la nube.
Modelos de nube según la privacidad.
El hecho de que la información manejada resida temporal o definitivamente en servidores en
la nube lleva a que dichos servicios ofrezcan distintos formatos de privacidad que pueden
elegir los usuarios. De ahí que se planteen varios modelos de nubes como espacios de
desarrollo de los servicios ofertados. Serían:

1. Nubes públicas. Los usuarios acceden a los servicios de manera compartida sin que
exista un exhaustivo control sobre la ubicación de la información que reside en los
servidores del proveedor. El hecho de sean públicas no es un sinónimo de sean inseguras.
2. Nubes privadas. Para los clientes que necesiten, por la criticidad de la información que
manejen una infraestructura, plataforma y aplicaciones de su uso exclusivo.
3. Nubes híbridas. Combinan características de las dos anteriores, de manera que parte del
servicio se puede ofrecer de manera privada (por ejemplo, la infraestructura) y otra parte
de manera compartida (por ejemplo, las herramientas de desarrollo).
Características de un servicio ‘cloud’.
 Autoservicio bajo demanda. Un usuario debe poder, de forma unilateral, proveerse de
recursos informáticos tales como tiempo de proceso o capacidad de almacenamiento en la
medida de sus necesidades sin que sea necesaria la intervención humana del proveedor
del servicio.
 Acceso amplio a la red. Los servicios proporcionados deben poder ser accesibles a través
de mecanismos estándares y desde plataformas heterogéneas (por ejemplo: ordenadores,
teléfonos móviles o tabletas).
 Asignación común de recursos. Los recursos son puestos a disposición de los
consumidores siguiendo un modelo de multipropiedad, asignándose y reasignándose
dispositivos físicos o lógicos atendiendo a la demanda de dichos consumidores. En este
sentido el usuario no tiene un estricto control del lugar exacto en el que se encuentra su
información, aunque sí debe poder especificar un ámbito mínimo de actuación (por
ejemplo: un país, un estado o un centro de proceso de datos concreto).

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 140


FUNDAMENTOS DE BASE DE DATOS

 Rápida elasticidad. Las capacidades en los recursos proporcionados a los usuarios deben
poder crecer o decrecer bajo demanda de los mismos con celeridad, incluso mediante
procesos automáticos.
 Servicio medible. Los sistemas cloud deben controlar y optimizar sus recursos dotándose
de capacidades para medir su rendimiento en un nivel de abstracción suficiente para la
naturaleza del servicio proporcionado. Además, dicho control debe permitir ser reportado
de manera transparente tanto al proveedor del servicio como al consumidor del mismo.

ESCUELA DE TECNOLOGÍAS DE INFORMACIÓN 141

También podría gustarte