0% encontró este documento útil (0 votos)
20 vistas12 páginas

Practica 4 SQL

El documento detalla la práctica 3 de SQL en la que los estudiantes deben diseñar y crear vistas y procedimientos almacenados en una base de datos. Se explican conceptos fundamentales como la creación, modificación y eliminación de vistas, así como la implementación de procedimientos almacenados con ejemplos prácticos. Además, se incluyen instrucciones para la conexión a SQL Server y ejercicios específicos para aplicar los conocimientos adquiridos.

Cargado por

Uriel Escamilla
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)
20 vistas12 páginas

Practica 4 SQL

El documento detalla la práctica 3 de SQL en la que los estudiantes deben diseñar y crear vistas y procedimientos almacenados en una base de datos. Se explican conceptos fundamentales como la creación, modificación y eliminación de vistas, así como la implementación de procedimientos almacenados con ejemplos prácticos. Además, se incluyen instrucciones para la conexión a SQL Server y ejercicios específicos para aplicar los conocimientos adquiridos.

Cargado por

Uriel Escamilla
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
Está en la página 1/ 12

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE CÓMPUTO


ACADEMIA INGENIERÍA DE SOFTWARE

Unidad de Aprendizaje: Bases de Datos


Profesor: Ing. Tania Rodriguez Sarabia
Práctica no. 3: Implementación de una BD en SQL

ALUMNO:
GRUPO:
FECHA DE ENTREGA:

NotacCon base a la practica 3 de SQL tomar la BD y realizar las vistas y los procedimientos
solicitados

1
I. Objetivos

Qué el estudiante:

1. Diseñar y crear Vistas para la selección de información

2. Implementar la programación con comandos SQL

II. Introducción Teórica

Vistas

Las vistas tiene una tendencia a ser utilizadas mucho o poco: en raras ocasiones se utilizan en su justa medida.
Las vistas se podrían utilizar para:

a. Reducir la complejidad aparente de la base de datos para los usuarios finales

b. Prevenir la selección de columnas confidenciales a la vez que permite el acceso a otros datos
importantes En el fondo, una vista no es más que una consulta almacenada. lo extraordinario es que
podemos combinar y hacer corresponder datos desde tablas base (o desde otras vistas) para crear lo
que, en general, funciona como cualquier otra tabla base.

Al crear una vista, Microsoft SQL Server comprueba la existencia de los objetos a los que se hace referencia
en su definición. El nombre de la vista debe ajustarse a las normas para los identificadores. Opcionalmente,
es posible especificar un nombre de propietario para la vista. Debe establecer una convención de
denominación coherente para distinguir las vistas de las tablas. Por ejemplo, puede agregar la palabra “vista”
como sufijo de cada objeto vista que cree. De este modo podrá distinguir fácilmente entre objetos similares
(tablas y vistas) al consultar la vista INFORMATION_SCHEMA.TABLES.
Sintaxis

CREATE VIEW nombreVista [(columna [,n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
[,n ]] AS instrucciónSelect
[WITH CHECK OPTION]

2
Para poder ejecutar la instrucción CREATE VIEW es necesario ser miembro de la función de administradores
del sistema (sysadmin), de la función propietario de la base de datos (db_owner) o de la función
administrador de lenguaje de definición de datos (db_ddladmin), o bien tener el permiso CREATE VIEW.
También es necesario tener el permiso SELECT en todas las tablas o vistas a las que la vista haga referencia.
Para evitar situaciones en las que el propietario de una vista y el propietario de las tablas subyacentes sean
distintos, se recomienda que el usuario dbo (propietario de base de datos) sea el propietario de todos los
objetos de la base de datos. Especifique siempre el usuario dbo como propietario al crear el objeto pues, de
lo contrario, usted, es decir, su nombre de usuario, será el propietario.
El contenido de una vista se especifica con una instrucción SELECT. Con algunas excepciones, las vistas pueden
ser tan complejas como se requiera. Debe especificar los nombres de columna en las situaciones siguientes:
▪ Alguna de las columnas de la vista se deriva de una expresión aritmética, de una función integrada o
de una constante.
▪ Hay columnas con el mismo nombre en las tablas que se van a combinar.

Ejemplo
Este es un ejemplo de una vista que crea una columna (Subtotal) que calcula los subtotales de un pedido a
partir de las columnas id_pedido, menú y cantidad
CREATE VIEW (OrderID, Subtotal) AS
SELECT FROM
GROUP BY GO
En este ejemplo se consulta la vista para ver los resultados.
Vista de tablas combinadas Ejemplo
A menudo se crean vistas para conseguir una forma más práctica de ver información centralizada de dos o
más tablas combinadas.

CREATE VIEW dbo.ShipStatusView


AS
SELECT OrderID, ShippedDate, ContactName
FROM Customers c INNER JOIN Orders o ON
c.CustomerID=o.CustomerID
WHERE RequiredDate<ShippedDate GO

3
Resultado

El resultado da un total de 37 filas

Modificación y eliminación de vistas

A menudo, las vistas se alteran como respuesta a las peticiones de información adicional por parte de los
usuarios o a causa de cambios en la definición de las tablas subyacentes. Para alterar una vista puede quitarla
y volverla a crear, o bien puede ejecutar la instrucción ALTER VIEW. Eliminación de vistas

Si ya no necesita una vista, puede quitar su definición de la base de datos con la instrucción DROP VIEW. Al
quitar una vista se quita su definición y todos los permisos que tenga asignados. Además, si los usuarios
consultan vistas que hagan referencia a la vista quitada, obtendrán un mensaje de error. Sin embargo, al quitar
una tabla que hace referencia a una vista, ésta no se quita automáticamente. Es necesario quitarla de forma
explícita. Se utiliza la instrucción DROP VIEW.

Ejemplo.

Ejemplo

Agregar un nuevo campo (CompanyName de la tabla Customers) a la consulta ShipStatusView

ALTER VIEW dbo.ShipStatusView


AS

4
SELECT OrderID, ShippedDate, ContactName, CompanyName
FROM Customers c INNER JOIN Orders o ON
c.CustomerID=o.CustomerID
WHERE RequiredDate<ShippedDate GO

Eliminar la vista ShipStatusView

DROP VIEW ShipStatusView


PROCEDIMIENTOS ALMACENADOS

Transact-SQL no es realmente un lenguaje de programación similar a las herramientas de tercera y cuarta


generación sin embargo permite utilizar SQL para realizar tareas complejas que requieren saltos, bucles,
decisiones. Transact-SQL se utiliza a menudo en la creación de procedimientos almacenados y triggers
(desencadenadores) de tal forma que las aplicaciones clientes que se conectan a SQL Server solo se preocupan
por la presentación de los datos para el usuario final, mientras que la lógica de los procesos se maneja en el
servidor.

El control de flujo en Transact-SQL

INSTRUCCIÓN DESCRIPCIÓN
IF…ELSE Define una decisión.
GOTO etiqueta Define un salto incondicional
WAITFOR Establece un tiempo para la ejecución de una instrucción. El tiempo puede ser un
intervalo de retardo o un instante especificado de ejecución (una hora concreta del
día)
WHILE Bucle básico de SQL
BREAK Acompaña al bucle WHILE y le indica finalizarlo inmediatamente.
CONTINUE Acompaña al bucle WHILE y le indica continuar con la siguiente iteración.
RETURN [n] Salida incondicional del procedimiento o proceso por lotes, se puede definir un
número entero como estado devuelto y puede asignarse a cualquier variable.
BEGIN...END Utilizado en conjunto con IF..ELSE o WHILE para agrupar un conjunto de
instrucciones.
CASE Implementada en la instrucción SELECT y UPDATE y permite realizar consultas y
actualizaciones condicionales.

5
PRINT Es una instrucción que se utiliza para imprimir un dato en la pantalla, la sintaxis es:
PRINT "cadena"; cadena puede ser también una variable de tipo varchar. Por
ejemplo: PRINT ‘Hola a todos’

Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden
almacenarse en el propio servidor. Los procedimientos almacenados de SQL Server, son más potentes, porque
permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos,
bucles, etc.

Creación de procedimientos almacenados (Store Procedures)

La instrucción general para crear procedimientos almacenados es la siguiente:

CREATE PROC nombre_proc parametros AS INSTRUCCION SQL

Es necesario aclarar, que un procedimiento almacenado puede recibir parámetros de entrada y devolver
parámetros de salida.

Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un cliente (), cuyo código se pasa
por parámetro.

CREATE PROCEDURE ObtenerNombre @cliente_id nchar(5) AS


SELECT ContactName
FROM Customers WHERE CustomerID = @cliente_id
Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un
parámetro, llamado @cliente_id, de tipo nchar tamaño 5, que realiza una consulta para obtener el nombre
del cliente de la tabla Customers, cuyo código (CustomerID) coincida con el parámetro. De esta forma, si
queremos obtener el nombre del Cliente cuyo código sea 'ALFKI', deberemos ejecutar el procedimiento
pasándole como argumento este valor.

Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas:

• Pasando los argumentos en el mismo orden que en el que se han declarado.

EXEC ObtenerNombre 'ALFKI'

• Pasando los argumentos nombrados. En este caso no hace falta que los parámetros vayan en el mismo
orden.

EXEC ObtenerNombre @cliente_id='ALFKI'

Parámetros por referencia

Si ejecutamos las anteriores sentencias, obtendremos el resultado directamente en la ventana que tengamos
abierta en SQL Server. Pero ¿qué pasa si queremos obtener un parámetro de salida, como resultado de la
ejecución del procedimiento? La solución para este caso es utilizar la palabra reservada OUTPUT para los
argumentos de salida.

6
Si por ejemplo, queremos obtener el número de títulos que tenemos en la base de datos, crearemos el
siguiente procedimiento almacenado:

CREATE PROCEDURE num_productos @productos int OUTPUT AS


SELECT * FROM Products
SELECT @productos = @@ROWCOUNT RETURN
(0)

Vamos a estudiar el anterior ejemplo:


Detrás de la palabra reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuación
proporcionamos los parámetros, junto con su tipo (que en este caso es entero), y diremos si éstos son de
salida, en cuyo caso especificamos la palabra reservada OUTPUT a continuación. Tras la palabra reservada AS
se codifica el cuerpo del procedimiento.

Primero contamos todas las filas de la tabla Products, realizando un SELECT * FROM Products.
A continuación devolvemos en el parámetro @productos el valor obtenido, utilizando @@ROWCOUNT.

Para ejecutar este procedimiento ejecutamos las siguientes sentencias (las tres al mismo tiempo):

DECLARE @productos int


EXEC num_productos @productos OUTPUT
SELECT [Total de productos] = @productos

En el resultado de la consulta nos mostrará los registros de la tabla Products y en una nueva fila el valor de la
variable @productos en una columna llamada Total de productos

Borrar Procedimientos Almacenados

Si queremos borrar un procedimiento almacenado, ejecutaremos la sentencia DROP PROCEDURE, seguido


del nombre del procedimiento. Por ejemplo, si queremos borrar el procedimiento almacenado, creado en
el anterior ejemplo, escribiremos el Código:

DROP PROCEDURE num_productos

III. Requerimientos

7
Nº Cantidad Descripción
1 1 Guía de Laboratorio #9 de Base de Datos
2 1 Maquina con SQL Server 2012

IV. Procedimiento

Parte 1: Iniciando sesión desde SQL Server Managment Studio

1. Hacer clic en el botón Inicio

2. Hacer clic en la opción Todos los programas y hacer clic en Microsoft SQL Server

Para conectarse con el servidor de base de datos elija los siguientes parámetros de autenticación:

• Tipo de servidor: Database Engine


• Nombre del servidor: Colocar el nombre del servidor local, por ejemplo PC
• NumMaquina-SALA# Nota: NumMaquina es el número de la maquina local
• Autenticación: SQL Server Authentication
• Login:
• Password:

3. Luego, presione Ctrl+N o de clic en “New Query” en la barra de trabajo estándar.


Parte 2: Ejemplos de Vistas Ejercicio 1

En este ejercicio va a crear una vista, de datos almacenados en la base de datos STARBUCKS

La vista debe mostrar los productos de un proveedor en particular, el nombre de la vista será:
productos_proveedor_SuCarnet ()

1. Seleccionar la base de datos

2. Seleccionar la tabla Products

3. Seleccionar las columnas:


IdMenu, Nombre, IdProveedor, Categoria, Costo

4. Definir una restricción WHERE la cual es: IdCategoria = 1

CREATE VIEW productos_proveedor


AS
SELECT IdMenu, Nombre, IdProveedor, Categoria, Costo
FROM menu
WHERE IdProveedor = 1;
GO

8
5. Consulte la vista para asegurarse de que ha recibido el conjunto de resultados esperado.

SELECT * FROM productos_proveedor

6. Modificar la vista anterior y ahora se debe mostrar también el nombre del proveedor
(CompanyName) el cual está almacenado en la tabla Proveedores

NOTA: Para esta vista necesitaras crear una nueva tabla para los proveedores la cual deberá registrar el
IdProveedor y el nombre del proveedor, ademas de la tabla menu necesitaremos una llave foránea que haga
referencia a la tabla proveedores para poder obtener el nombre
Ejercicio 2

1. Tomado en cuenta la misma base de datos, debe crear una vista donde se muestren las ventas de un
producto las cuales se han realizado, los campos que podría mostrar son los siguientes: a. Nombre
del producto
a. Nombre
b. Fecha del pedido
c. Subtotal
2. Ordenar los resultados por el campo

3. Nombre de la vista: Pedidos_Productos_Todos_Sucarnet

1. Parte 3: Ejemplos de Procedimientos almacenados

Ejercicio 1

1. Utilice la bases de datos STARBUCKS

2. Vamos a crear un procedimiento almacenado que ingrese un nuevo registro a la tabla Tipo_Cliente
solo si el Código o el Nombre del tipo de cliente que se le envían como parámetros no existan en la
tabla.

Create procedure sp_Insertar_Cliente


@ID INT,
@Cliente VARCHAR(50)
AS
IF (SELECT COUNT(*) FROM Tipo_Cliente
WHERE IdTipoCliente=@ID OR TipoCliente=@Cliente)=0
INSERT INTO tipo_cliente(TipoCliente)
Values(@Cliente)
ELSE
PRINT 'Error: El tipo de cliente ya existe'
3. Ejecutemos el procedimiento anterior comprobando si funciona correctamente, ejecutar cada
instrucción individualmente:

--Ejecutamos Primero
EXEC sp_Insertar_Cliente 1,'Alumnos'
--Segundo
EXEC sp_Insertar_Cliente 5 'Administrativos'
--Tercero
EXEC sp_Insertar_Cliente 6,'Visitantes'
9
Nota: si los datos del ejemplo anterior existen en la tabla probar con otros datos

4. Hacer un SELECT y verifique cuantos registros se agregaron a la tabla Tipo_Cliente

Select * from tipo_cliente

Ejercicio 2

1. En el siguiente procedimiento hacemos uso de la sentencia CASE para verificar si existen clientes en
una determinada ciudad la cual su dato se pasa como parámetro.

Create procedure sp_Hay_Menu


@Menu varchar(50)
AS
SELECT
CASE (SELECT COUNT(*) FROM menu WHERE Nombre = @Menu)
WHEN 0 THEN 'El platillo ' + @Menu + ' no se encuentra en el Menu' ELSE
'El platillo ' + @Menu + ' si se encuentra en el Menu'
END

2. Ejecutemos el procedimiento anterior comprobando si funciona correctamente:

EXEC sp_Hay_Menu 'Enchiladas'


EXEC sp_Hay_Menu 'Tortas'

Ejercicio 3.

1. En el siguiente procedimiento se calcula el total de ventas de los pedidos que están almacenados en la
tabla Detalles_Del_Pedido

CREATE PROCEDURE Proce_Total


@Id_Pedido int
AS
SELECT IdPedido,
SUM(CONVERT(money,(Cantidad*Costo*(1-Descuento)/100))*100)
AS Total
FROM [Detalles_del_Pedido]
WHERE IdPedido=@Id_Pedido
GROUP BY IdPedido
GO

La función CONVERT () es una función general que convierte una expresión de un tipo de dato a otro.

10
2. Ejecutar el procedimiento

EXEC Proce_Total

3. Ahora vamos a alterar o modificar el procedimiento para que reciba como parámetro de entrada una
orden o pedido especifico

ALTER PROCEDURE Proce_Total_Alan


@Id_Pedido int
AS
SELECT IdPedido,
SUM(CONVERT(money,(Cantidad*Costo*(1-Descuento)/100))*100)
AS Total
FROM Detalles_del_Pedido
WHERE IdPedido=@Id_Pedido
GROUP BY IdPedido
GO

4. Ejecutar el procedimiento

EXEC Proce_Total 282

5. Ahora ejecutamos el mismos procedimiento con otro código de pedido

EXEC Proce_Total 400

Analice y comente la diferencia entre los resultados obtenidos, como se dará cuenta el IdPedido 400
no existe en la tabla, pero al ejecutarse se muestran las columnas con datos vacíos

6. Se puede modificar el procedimiento de la siguiente manera, en donde se muestra un mensaje


indicando que no existe esa orden

ALTER PROCEDURE Proce_Total


@Id_Pedido int
AS
DECLARE @total INT--Declaracion de variables locales
SELECT @total = COUNT (IdPedido) FROM Detalles_del_Pedido WHERE IdPedido = @Id_Pedido
IF (@total>=1) --Evalua condición
BEGIN
SELECT detalles_del_pedido.IdPedido,
SUM(CONVERT(money,(Cantidad*Costo*(1-Descuento)/100))*100)
AS Total
FROM Detalles_del_Pedido
WHERE IdPedido=@Id_Pedido
GROUP BY IdPedido
END
ELSE
BEGIN
PRINT 'La orden no existe y el codigo es: ' + CONVERT(VARCHAR(10),@Id_Pedido)
END
GO

7. Ejecutar el procedimiento
11
--Codigo de pedido que si existe en Detalles_del_pedido
EXEC Proce_Total 282
--Codigo de pedido que no existe en Detalles_del_pedido
EXEC Proce_Total 400

8. Verifique y analice los resultados

9. Guardar el script con el nombre Guia9_BasedeDatosSucarnet.sql

V. Ejercicio complementario

Creación de Vistas
Ejercicio 1

La base de datos a utilizar es:

Crear las siguientes vistas:

a. Mostrar el código del producto, el nombre del producto y el precio por unidad de todos los
productos de la empresa.

b. Mostrar todos los productos cuya categoría comidas

c. Mostrar los datos del cliente y las fechas de las ordenes que estos han realizado

d. Cuantos productos existen por cada categoría

e. Mostrar el promedio de los precios unitarios de las categorías:

Ejercicio 2

Crear un procedimiento almacenado que calcule y muestre la edad de un empleado (Tabla vendedores, campo
BirthDate), puede utilizar la siguiente instrucción para calcular la edad:

(CAST(DATEDIFF(dd, BirthDate,GETDATE())/365.25 as int)) o la que conisderen que funcione

Y por medio de una sentencia CASE deberá calcular y mostrar si el empleado esta por retirarse (mayores de
60 y menores o igual a 70 años), si ya está jubilado (mayores a 70 años) o le falta otros años para trabajar
(menores o iguales a 60 años)

El procedimiento recibe como parámetros el código del empleado (Id_Vendedor) si el empleado no existe
deberá mostrar un mensaje indicándolo.
NOTA: En este ejercicio se necesitará insertar una columna a la tabla vendedores llamada FechaNac
almacenando la fecha de nacimiento del vendedor, deberás insertar una fecha de nacimiento para todos los
registros

12

También podría gustarte