Guia BD PDF
Guia BD PDF
Guia BD PDF
GUIA DE LABORATORIO Nº 1
I. OBJETIVOS
1. Crear la base de datos en SQL SERVER
2. Describir los tipos de archivos que lo conforman
En una versión más extendida de la instrucción CREATE DATABASE se pueden indicar los
detalles de los archivos:
create database dbcurso on primary
(name='dbcurso',
filename='D:\Datos\dbcurso.mdf',
size=5 MB, maxsize=10 MB, filegrowth=1 MB)
log on
(name='dbcurso_log',
filename='D:\Datos\dbcurso_log.ldf',
size=5 MB, maxsize=10 MB, filegrowth=1 MB)
Parametro Descripcion
Name Nombre lógico del archivo de datos. Facilita posteriormente el tratamiento
del archivo a través de instrucciones T-SQL
Filename Ubicación física del archivo. La cuenta de servicio del SQL SERVER debe
tener permisos de escritura en la carpeta elegida
Size SQL SERVER reserva este espacio en disco para que no sea utilizado por
otras aplicaciones
Filegrowth Cuando el tamaño inicial sea totalmente ocupado con información, SQL
SERVER reservara nuevamente en disco la cantidad indicada en este
parámetro, que puede venir dada en KB, MB o en porcentaje
Maxsize Tamaño máximo del archivo. Si no se indica, el archivo crecerá hasta llenar
el disco
En el ejemplo que se acaba de presentar se crea un archivo principal de extensión mdf de
tamaño inicial de 5 MB, cuando este espacio se agote, este se expandirá en 1 MB más para
tener espacio libre y meter más registros o tablas y cuando se agote nuevamente el archivo
físico de 1MB, éste se expandirá en 1 MB nuevamente y así en lo sucesivo hasta alcanzar el
máximo 10 MB ya de ahí no crecerá más.
MAXSIZE=10MB
FILEGROWTH=1MB
FILEGROWTH=1MB
SIZE=5MB
El archivo de datos secundario almacena todos los datos que no caben en el archivo
principal de datos. Las bases de datos no necesitan archivos de datos secundarios si
el archivo principal es suficientemente grande para contener todos los datos de la
base de datos.
III. REQUERIMIENTOS
SQL SERVER
GUIA DE LABORATORIO Nº 1
IV. PROCEDIMIENTOS
Parte 1: Iniciando sesión desde SQL Server Managment Studio
Para conectarse con el servidor de base de datos elija los siguientes parámetros de
autenticación:
Crear la base de datos DBEjemplo_01 que especifique los archivos de registro de datos y
de transacciones. El archivo de datos con tamaño 5MB, máximo tamaño 20MB, aumento
de 5MB, y de transacciones 2MB, 15MB, 5MB respectivamente, con una ubicación física
en la unidad D, carpeta Datos.
Ejemplo 2
Crear la base de datos dbejemplo_02 mediante la especificación de múltiples archivos de
registro de de datos y de transacciones
create database dbejemplo_02 on primary
(name='logi1',
filename='D:\Datos\logidat1.mdf',
size=5 MB, maxsize=10 MB, filegrowth=10 MB),
(name='arch2',
filename='D:\Datos\logidat2.ndf',
size=5 MB, maxsize=10 MB, filegrowth=10 MB),
(name='arch3',
filename='D:\Datos\logidat3.ndf',
size=5 MB, maxsize=10 MB, filegrowth=10 MB)
log on
(name='logilog1',
filename='D:\Datos\logilog1.ldf',
size=5 MB, maxsize=10 MB, filegrowth=10 MB),
(name='archlog2',
filename='D:\Datos\logilog2.ldf',
size=5 MB, maxsize=10 MB, filegrowth=10 MB)
Ejemplo 3
Crear una base de datos dbejemplo_03 especificando un único archivo
Ejemplo 4
Crear una base de datos sin especificar los archivos
create database dbejemplo_04
V. EJERCICIO COMPLEMENTARIO
1. Crear la base de datos dbejemplo_05 con un único archivo con las siguientes
características:
Nombre de la base de datos : dbejemplo_05
Nombre de archivo lógico : dbejemplo_05_dat
Nombre de archivo físico : D:\Datos\db_05dat.mdf
Tamaño inicial : 5 MB
Tamaño máximo : 20 MB
Porcentaje incremento archivo : 30%
2. Crear la base de datos dbejemplo_06 que especifique los archivos de registro de datos
y de transacciones con las siguientes características:
Nombre de la base de datos : dbejemplo_06
Para los archivos de registros de datos
Nombre de archivo lógico : dbejemplo_06_dat
Nombre de archivo físico : D:\Datos\db_06dat.mdf
Tamaño inicial : 10 MB
Tamaño máximo : 30 MB
Porcentaje incremento archivo : 25%
GUIA DE LABORATORIO Nº 2
I. OBJETIVOS
1. Modificar los archivos de la base de datos SQL SERVER
2. Cambiar el nombre de la base de datos
3. Eliminar la base de datos
III. REQUERIMIENTOS
SQL SERVER
GUIA DE LABORATORIO Nº 2
IV. PROCEDIMIENTOS
Ejemplo 1
Ejemplo 3
Aumentar el tamaño de test1dat3 de la base de datos dbejemplo_03 a 20 MB
alter database dbejemplo_03
modify file
(name=test1dat3,
size=20MB)
Ejemplo 4
Cambiar el nombre de la base de datos dbejemplo_03 por dbejemplo_03c
exec sp_renamedb 'dbejemplo_03', 'dbejemplo_003c'
Ejemplo 5
Eliminar la base de datos dbejemplo_003c
use master
go
drop database dbejemplo_003c
go
V. Ejercicio Complementario
GUIA DE LABORATORIO Nº 3
I. OBJETIVOS
1. Conocer las instrucciones IF-ELSE en SQL SERVER
2. Conocer las instrucciones CASE en SQL SERVER
3. Conocer las instrucciones WHILE en SQL SERVER
1. IF ... ELSE
BEGIN --EMPEZAR
Sentencia de instrucciones SQL
END --FIN
ELSE
BEGIN --EMPEZAR
Sentencia de instrucciones SQL END –FIN
Ejemplo 1
Ejemplo 2
IF @num > 50
BEGIN
SET @num = @num * (-1)
PRINT CONCAT('Valor cambiado = ', @num)
END
ELSE
PRINT CONCAT('Valor sin cambio = ', @num)
Ejemplo 4
Implementar un Script que permita insertar un nuevo registro en la tabla país, en caso se registre
duplicidad en el nombre de un país mostrar un mensaje de “país ya registrado”, caso contrario
insertar dicho registro y mostrar un mensaje de “País registrado Correctamente
Tarea
Realizar un programa que usando la función rand, genere 3 números enteros de 1 digito. Luego
usando la instrucción print debe imprimirlos ordenados de mayor a menor.
2. CASE
La expresión CASE buscada evalúa un conjunto de expresiones booleanas para determinar
el resultado
Ejemplo 1
SELECT CASE
WHEN @OPERADOR ='+' THEN @NUM1 + @NUM2
WHEN @OPERADOR ='-' THEN @NUM1 - @NUM2
WHEN @OPERADOR ='*' THEN @NUM1 * @NUM2
WHEN @OPERADOR ='/' THEN @NUM1 / @NUM2 ELSE 0
--Nos devuelve cero siempre cuando
--no ingresamos el Operador Correcto
END
AS CALCULO
Ejemplo 2
Implementar un script que permita mostrar la fecha en texto registrada en la tabla Reserva
Establece una condición para la ejecución repetida de una instrucción o bloque de instrucciones
SQL. Las instrucciones se ejecutan repetidamente siempre que la condición especificada sea
verdadera. Se puede controlar la ejecución de instrucciones en el bucle WHILE con las palabras
clave BREAK y CONTINUE.
WHILE
Boolean_expression
BEGIN
{ sql_statement |
statement_block } [ BREAK
]
{ sql_statement |
statement_block } [
CONTINUE ]
{ sql_statement |
statement_block } END
Argumentos
Boolean_expression
Es una expresión que devuelve TRUE o FALSE. Si la expresión booleana contiene una
instrucción SELECT, la instrucción SELECT debe ir entre paréntesis.
{sql_statement | statement_block}
BREAK
Produce la salida del bucle WHILE más interno. Se ejecutan las instrucciones que
aparecen después de la palabra clave END, que marca el final del bucle.
CONTINUE
Hace que se reinicie el bucle WHILE y omite las instrucciones que haya después
de la palabra clave CONTINUE
Ejemplo 1
Muestra los pares del 2 al 10 y su suma
END
END
PRINT ' _ '
Ejemplo 2
Muestra la suma de la cifras de un numero
SET @SUMA = 0
SET @N = 45623 --Ingresando un Numero Positivo
Como vemos solo nos deja ver 4 números ya que al sumar ya 5, le decimos que se salga del bucle.
Ejemplo 4
Muestra los números del 1 al 5 con while y continue
Como aquí vemos el continue pasa de nosotros y nos deja seguir ejecutando el bucle.
III. REQUERIMIENTOS
SQL SERVER
GUIA DE LABORATORIO Nº 3
GUIA DE LABORATORIO Nº 4
I. Objetivos
1. Crear una base de datos con Lenguaje SQL
2. Crear tablas y definir tipos de datos con lenguaje SQL
3. Implementar la integridad referencial en una base de datos
1. Instrucción CREATE
La primera parte de CREATE será siempre igual:
A esta parte le seguirán los detalles, que variarán según la naturaleza del objeto que estemos
creando. A continuación se presenta un listado de sintaxis más completa de CREATE:
Sintaxis:
Limitar el tipo de dato que puede ingresarse en una tabla. Dichas restricciones pueden
especificarse cuando la tabla se crea por primera vez a través de la instrucción CREATE TABLE, o
luego de crear la tabla a través de la instrucción ALTER TABLE.
- NOT NULL
- UNIQUE
- CHECK
- DEFAULT
- PRIMARY KEY
- FOREIGN KEY
De forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor NULL en
una columna, deberá colocar una restricción NOT NULL en esta columna especificando que en
esa columna es obligatorio introducir un dato.
Con la instrucción NOT NULL en las columnas “Codigo” y “Apellido”, estas no aceptan valores
nulos (vacíos), mientras que el campo “Nombre” si puede contener valores nulos.
2.2 UNIQUE
La restricción UNIQUE asegura que todos los valores en una columna sean únicos.
La columna “Codigo” no puede incluir valores duplicados, dicha restricción no se aplica para
columnas “Apellido” y “Nombre”
2.3 CHECK
La restricción CHECK asegura que todos los valores en una columna cumplan ciertas
condiciones.
2.4 DEFAULT
La restricción DEFAULT establece un valor por defecto a un campo de la tabla. Un valor por
defecto se inserta cuando no está presente al ingresar un registro
Queremos que el valor por defecto del campo "autor" de la tabla "libros" sea "Desconocido" y
el valor por defecto del campo "cantidad" sea "0":
2.5 PRIMARY KEY
La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una tabla
Al campo "nombre" no lo definimos "not null", pero al establecerse como clave primaria, SQL
Server lo convierte en "not null".
La clave primaria (PRIMARY KEY) puede estar compuesta por varias columnas, por ejemplo por
las columnas 'identificador' y 'nombre', entonces se define así:
La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para señalar
cual es la clave primaria de otra tabla.
La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya
existan en la clave primaria PRIMARY KEY de la otra tabla.
Dep Departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave
primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de los
que tiene en la tabla
departamento varchar(255),
nombre varchar(255),
apellido1 varchar(255),
Si la clave externa o foránea (FOREIGN KEY) está compuesta por varias columnas o queremos
ponerle un nombre, utilizaremos la fórmula siguiente:
Esta sentencia nos permite agregar el campo estado con un tipo de dato VARCHAR de 8 caracteres a la tabla
contactos
p (precisión)
El número total máximo de dígitos decimales que se puede
almacenar, tanto a la izquierda como a la derecha del separador
decimal. La precisión debe ser un valor comprendido entre 1 y la
precisión máxima de 38. La precisión predeterminada es 18.
s (escala)
El número máximo de dígitos decimales que se puede almacenar a
la derecha del separador decimal. La escala debe ser un valor
comprendido entre 0 y p. Sólo es posible especificar la escala si se
ha especificado la precisión. La escala predeterminada es 0; por lo
tanto, 0 <= s <= p. Los tamaños de almacenamiento máximo
varían, según la precisión.
Precisión Bytes de
almacenamiento
1‐9 5
10‐19 9
20‐28 13
29‐38 17
Int De ‐2^31 (‐2.147.483.648) a 2^31‐1 (2.147.483.647) 4 bytes
Money De ‐922,337,203,685.477,5808 a 922,337,203,685.477,5807 8 bytes
Numeric Se emplea al igual que el tipo decimal. Numeric[(p, s)]
Smallint De ‐2^15 (‐32.768) a 2^15‐1 (32.767) 2 bytes
Smallmoney De ‐ 214.748,3648 a 214.748,3647 4 bytes
Tinyint De 0 a 255 1 byte
Tabla 5.1 Numéricos exactos.
Tipo de dato Intervalo Almacenamiento
Float De – 1,79E+308 a ‐2,23E‐308, 0 y de 2,23E‐308 a 1,79E+308 Depende de n.
float [ ( n ) ]
Donde n es el número de bits que se utilizan para almacenar la
mantisa del número float en notación científica y, por tanto,
dicta su precisión y el tamaño de almacenamiento. Si se
especifica n, debe ser un valor entre 1 y 53. El valor
predeterminado de n es 53.
Valor de n Precisión Tamaño de almacenamiento
1‐24 7 dígitos 4 bytes
25‐53 15 dígitos 8 bytes
IV. Procedimiento
Tablas Campos
Distritos Iddistrito
Nombre_dist
Pagos Idpago
Descripción_pago
Proveedor idproveedor
nombre_prov
iddistrito
idpago
Productos idproducto
nombre_prod
precio
cantidad
idproveedor
Nota:
A la tabla Proveedor se agregó el campo iddistrito por la relación que existe entre esta
tabla y la tabla Distritos
A la tabla Productos se agregó el campo idproveedor por la relación que existe entre esta
tabla y la tabla Proveedor
1. Seleccionar la base de datos Restricciones. Clic derecho. Nueva consulta
Seleccionar desde el comando CREATE hasta la instrucción GO, hacer clic en la opción Ejecutar
Relaciones a crear:
Tabla Pagos
idpago Idpago
Hace referencia a la clave primaria de la
tabla Pagos
1. En el editor de consultas digitar la consulta la cual va a crear la relación entre la tabla
proveedor y distritos, proveedor y pagos
distritos
iddistrito
nombre_dist
proveedor
idproveedor pagos
nombre_prov idpago
iddistrito descripcion_pago
idpago
productos
idproducto
nombre_prod
precio
cantidad
idproveedor
UNIVERSIDAD FEDERICO VILLAREAL
FACULTAD DE INGENIERIA INDUSTRIAL Y SISTEMAS
ESCUELA DE INGENIERIA DE SISTEMAS
GUIA DE LABORATORIO Nº 5
I. Objetivos
1. Crear una base de datos con Lenguaje SQL
2. Crear tablas y definir tipos de datos con lenguaje SQL
3. Implementar la integridad referencial en una base de datos
II. Requerimientos
Máquina con SQL Server
Guía Número 5 de base de datos
III. Procedimiento
Tablas Campos
Autor CodigoAutor
Nombre (PrimerNombre y Primer
Apellido)
FechaNacimiento
Nacionalidad
Libro CodigoLibro
Titulo
ISBN
AñoEdicion
CodigoEditorial
Editorial CodigoEditorial
Nombre
País
Detalle_AutorLibro CodigoAutor
CodigoLibro
Fecha
Nota:
A la tabla Libro se agregó el campo CodigoEditorial por la relación que existe entre esta tabla y la tabla
Editorial
Se creó la tabla Detalle_AutorLibro ya que esta tabla intermedia rompe la relación de muchos a
muchos que existe entre Autor y Libro, se le agregaron los campos CodigoAutor y CodigoLibro para
crear la relación de uno a muchos.
1. Crear la tabla Autor, digitar después de la última instrucción GO, la siguiente consulta
2. Ahora se tiene que crear la tabla Libro, digite la siguiente consulta después de la última instrucción GO:
3. Crear la tabla Editorial, digite la siguiente consulta después de la última instrucción GO:
4. Ejecutar la consulta y actualice la base de datos
5. Crear la tabla Detalle_AutorLibro, después de la consulta anterior, digitar la siguiente:
6. Ejecutar la consulta y actualice la carpeta Tables, al final deberá tener en la base de datos Biblio, las
cuatro tablas creadas
1. Después de la última consulta SQL de la parte de creación de tablas, digite la siguiente consulta:
2. Seleccione la consulta desde la instrucción ALTER hasta el comando GO y ejecútela, si no hay ningún
error actualice su tabla
3. Expanda la carpeta dbo.Autor y luego la carpeta Columns, observará los campos de la tabla y la
asignación de la clave principal en el campo CodigoAutor
4. Asigne la clave principal a las siguientes tablas:
Tabla Campo
Libro CodigoLibro
Editorial CodigoEditorial
6. Ejecute cada consulta y verifique que se han creado las claves principales en las tablas
7. En el editor de consultas digite la consulta la cual va a crear la relación entre la tabla Autor y
Detalle_AutorLibro
8. Seleccione la consulta y ejecútele
9. Digite la siguiente consulta, la cual creará la relación de Libro y Detalle_AutorLibro
14. Actualice la base de datos y observará los cambios en las tablas Libro y Editorial
Estableciendo restricciones: Default, Check y Unique
Restricción Default
1. Se creará una restricción Default en el campo Fecha para la tabla Detalle_AutorLibro, en la cual si el
usuario no digita nada para esta fecha que se introduzca la fecha del sistema.
Restricción Check
4. La cual agrega una restricción Check , para el campo AñoEdicion de la tabla Libro, los datos que se
introduzcan para este campo deberán ser mayores del 2010
5. Ejecute la consulta y verifique los cambios que le hizo a la columna
Restricción Unique
6. La consulta que se digitará a continuación, crea una restricción Unique para el campo ISBN de la tabla
Libro, el cual se puede tomar ese campo como dato único, pero no es una clave principal ya que ese
campo no se utiliza para crear relaciones entre tablas
9. Hasta aquí ha creado las relaciones entre las tablas y las restricciones asegurando la calidad de los
datos
IV. Ejercicio Complementario
Nombre de la base de datos: Hotel
Crear:
1. La base de datos
2. Las tablas con sus correspondientes campos y propiedades
3. Las relaciones entre las tablas
4. Crear las siguientes restricciones en los campos:
a. Unique:
i. Tabla Hotel (Nombre, SitioWeb)
ii. Tabla Huesped (E-mail)
b. Check:
i. Tabla Habitacion (Precio mayor que 25, Tipo: Doble, individual)
ii. Tabla Reservacion (Fecha final tiene que ser mayor a la fecha de inicio)
c. Default:
i. Tabla Reservacion (Fecha inicio por defecto puede ser la fecha actual del sistema)
Profesores Especialidades
Módulos Especialidades
Grupos Ciclos
Matriculas Alumnos
Matriculas Módulos
Docencia Grupos
Docencia Módulos
3. Crear las tablas. Las claves primarias y foráneas deben crearse como restricciones
(constraints). Todos los campos que contengan el nombre (o denominación) y los apellidos (de
personas, departamentos, áreas, etc.) son obligatorios.
4. Agregar a la tabla GRUPOS el campo "observaciones" de 100 caracteres (que sea obligatorio)
5. Agregar a la tabla MÓDULOS el campo "horas_semanales", de tipo número decimal con un
decimal. Se le asignara por defecto el valor 8. Añadir la restricción de que no se pueda
introducir un valor negativo (ni tampoco cero).
6. Añadir la llave foránea DOCENCIA (dni_profesor) con PROFESORES(dni)
7. Añadir la restricción de que en DOCENCIA el campo “día” sólo pueda tomar los valores 'L', 'M',
'X', 'J' y 'V'.
8. Desactivar la restricción NOT NULL en el campo "denominación" de la tabla ESPECIALIDADES
use master
go
create database institucion1
go
use institucion1
go
GUIA DE LABORATORIO Nº 6
I. Objetivos
SELECT. Permite recuperar datos de una o varias tablas. Esta sentencia es de la más compleja y
potente de las sentencias SQL.
Sintaxis:
SELECT lista_de_campos
[ FROM nombre_tabla ]
[ WHERE condicion_individual]
[ GROUP BY campos_a_agrupar ]
[ HAVING condicion_grupo ]
[ ORDER BY campo_a_ordenar [ ASC | DESC ] ]
FROM
Se utiliza en conjunto con la cláusula FROM con la cual se indica en qué tabla o tablas se tiene que
buscar la información.
Ejemplo 1
El ejemplo siguiente retorna todas las columnas y filas de la tabla Clientes que se encuentran en la base
de datos nw
use nw
go
select * from clientes
go
Nota: El * significa que se quiere seleccionar todos los campos de la tabla Clientes
Resultado
Ejemplo 2
El ejemplo siguiente retorna las columnas idproducto, nombreproducto, y preciounidad de la tabla Productos
WHERE
La cláusula WHERE permite seleccionar únicamente las filas que cumplan con una condición de selección
especificada. Sólo se mostrarán las filas para las cuales la evaluación de la condición sea verdadera (TRUE).
Los campos con valores NULL no se incluirán en las filas de resultado.
La condición de la cláusula WHERE puede ser cualquier condición válida o combinación de condiciones
utilizando operadores lógicos (NOT, AND, OR) y relacionales (=, <, >, <=, >=).
Si quisiera unir más condiciones utilizare los operadores lógicos AND u OR, esto será de acuerdo a la
información de lo que se desea obtener.
Ejemplo 1
Seleccionar los datos de la tabla Productos en donde el dato almacenado en el campo precio sea mayor a 15
SELECT idproducto, nombreproducto, preciounidad
FROM productos
WHERE preciounidad > 15
Resultado
Ejemplo 2
Seleccionar los datos de la tabla Productos donde el dato almacenado en el campo preciounidad sea mayor o
igual a 15 y menor o igual a 50
SELECT idproducto, nombreproducto, preciounidad
FROM productos
WHERE preciounidad >=15 and preciounidad <=50
Resultado
Operador Between
Debe tener dos condiciones, que uno sea mayor igual (>=) y el otro menor igual (<=)
Tiene que estar unidas con AND
Que el campo sea el mismo
Ejemplo 3
Ejemplo 4
Usando el operador NOT, obtener los registros de la tabla Productos en donde el dato almacenado en el campo
preciounidad sea menor a 15
SELECT idproducto, nombreproducto, preciounidad
FROM productos
WHERE not preciounidad >= 15
Ejemplo 5
Seleccionar los registros de la tabla productos en donde el dato almacenado en el campo idproducto sea mayor
a 50 y el dato almacenado en el campo preciounidad sea menor a 10
SELECT idproducto, nombreproducto, preciounidad
FROM productos
WHERE idproducto > 15 or preciounidad < 10
Del resultado tomamos el registro 1 y vemos que el dato de ProductID es igual 13 y no cumple la condición,
pero el dato almacenado en el campo UnitPrice si es menor que 10 y se cumple la condición, y como se está
utilizando el operador OR con uno que sea verdadero es suficiente para que el registro se muestre como un
resultado de la consulta SELECT
Ejemplo 6
El siguiente ejemplo retorna las columnas idopedido, idproducto, cantidad y el campo calculado Subtotal de la
tabla Detalles de pedidos
SELECT idpedido, preciounidad, cantidad, preciounidad * cantidad as subtotal
FROM [dbo].[Detalles de pedidos]
Resultado
Operador IN
Ejemplo 7
Retornar las filas de la tabla Productos que pertenezcan a las categorías 1, 2, o 3. Usar IN.
SELECT * FROM PRODUCTOS
WHERE IdCategoría in(1,3,5)
El operador like
Sintaxis
select *
from nombre_tabla
where columa LIKE expresión_cadena_a_buscar
COMODIN DESCRIPCION
% Representa cualquier cadena en la posición que sea
colocada
_ Representa cualquier carácter en la posición que sea
colocada
[abc] Representa un conjunto de caracteres validos en la
posición que sea colocada
[a-b] Representa un rango de caracteres validos en la
posición que sea colocada
^ Excluir. Indica que el carácter, conjunto de
caracteres, o rango de caracteres que sigue al
símbolo ^ no debe figurar en el resultado de la
consulta
Ejemplo 1
Retornar las filas de la tabla Clientes que tengan la letra “F” como carácter inicial en el nombre de la compañía
SELECT * FROM Clientes
WHERE NombreCompañía LIKE 'F%'
Ejemplo 2
Retornar todas las columnas de la tabla Clientes que tengan los caracteres “ia” al final del de la columna País
SELECT * FROM Clientes
WHERE País LIKE '%ia'
Ejemplo 3
Retornar las filas de la tabla Productos que comienzan con la letra “M” y que el segundo carácter excluya la
letra “ä”
Mostrar todos los campos de la tabla Empleados, EXCEPTO aquellos donde el dato almacenado en Apellidos
comience con la letra D
Ejemplo 5
Retornar todos los detalles de pedidos donde el dato almacenado en idpedido termine con los dígitos 0248
ORDER BY
Se puede hacer uso de la cláusula ORDER BY para mostrar los datos de forma ordenada.
Si se utiliza en conjunto la cláusula ASC, los registros se mostrarán en orden ascendente (de menor a mayor)
según el campo(s) especificado(s) en la cláusula ORDER BY. Si se utiliza la cláusula DESC, los registros serán
mostrados en orden descendente (de mayor a menor.
Ejemplo 1
Ordenar de forma ascendente los campos de la tabla Productos por medio del campo idproducto
SELECT * FROM PRODUCTOS
ORDER BY IDPRODUCTO ASC
Ejemplo 2
Ordenar de forma descendente los campos de la tabla Productos por medio del campo idproducto
SELECT * FROM PRODUCTOS
ORDER BY IDPRODUCTO DESC
DISTINCT
La cláusula DISTINCT especifica que los registros con ciertos datos duplicados sean ignorados en el resultado.
Ejemplo 1
Seleccionar todos los registros no repetidos almacenados en el campo idpedido de la tabla Detalles de Pedidos
SELECT DISTINCT Idpedido
FROM [dbo].[Detalles de pedidos]
TOP N
TOP n, especifica que solo se mostrará el primer conjunto de filas del resultado de la consulta.
El conjunto de filas puede ser un número o un porcentaje de las filas (TOP n PERCENT)
TOP n WITH TIES: Esta cláusula permite incluir en la selección, todos los registros que tengan el mismo valor del
campo por el que se ordena.
Para estos ejercicios se ha calculado la venta (unidades vendidas por el precio unitario) de cada orden y se ha
renombrado a la columna con el nombre Venta Total
Ejemplo 1
Seleccionar las primeras 3 mejores ventas de la tabla Detalles de Pedidos
SELECT TOP 3 idpedido, preciounidad * cantidad as [Venta Total]
FROM [dbo].[Detalles de pedidos]
ORDER BY [Venta Total] DESC
Ejemplo 2
Seleccionar las tres mejores ventas, utilizando la instrucción WITH TIES se permitirá incluir en los resultados los
registros que tengan el mismo valor en el cálculo de la Venta Total
Ejemplo 3
Seleccionar el 25% del total de registros de las ventas las cuales están almacenadas en la tabla Order Details
III. Requerimientos
SELECT TOP 3 *
FROM SSCResults1
ORDER BY Score DESC
SELECT TOP 10 *
FROM Production.ProductCostHistory
ORDER BY StandardCost DESC
SELECT SalesOrderID,LineTotal
FROM Sales.SalesOrderDetail
ORDER BY LineTotal DESC
Base de datos: AdventureWorks2012
SELECT TOP 10 *
FROM Sales.SalesOrderDetail
ORDER BY LineTotal DESC
a. Seleccionar de la tabla employee los datos en donde el campo lname contenga la letra K
b. Seleccionar de la tabla employee los datos del campo emp_id que comience con cualquiera de las letras que
se encuentren en el rango de la F a la M
c. Mostrar de la tabla sales los datos donde la fecha de pedido (ord_date) sean mayores o iguales a 01/01/1994
d. Seleccionar de la tabla stores los datos donde el campo state sea igual a CA
e. Seleccionar de la tabla title los 5 libros más caros (price) que se encuentran almacenados
GUIA DE LABORATORIO Nº 8
I. Objetivos
Tipos de Indices
Sintaxis
III. Requerimientos
Tabla Proyectos
GUIA DE LABORATORIO Nº 9
I. Objetivos
1. Agregar información a una o varias tablas almacenadas en una Base de datos.
2. Actualizar datos almacenados en una Base de datos tomando ciertos criterios
3. Eliminar datos o información innecesaria almacenada en una Base de datos
Para comprender este tipo de consultas vamos a utilizar como ejemplo el siguiente diagrama
de base de datos:
Creando la base de datos Ventas:
Tabla: Marca
CREATE TABLE marca(
CodigoMarca int NOT NULL,
NombreMarca varchar(50)
CONSTRAINT pk_marca PRIMARY KEY(CodigoMarca)
)
Tabla Producto
CREATE TABLE Producto
(CodigoProducto int NOT NULL,
NombreProducto varchar(50) NOT NULL,
PrecioUnitario decimal(18,2),
CodigoMarca int
CONSTRAINT pk_producto PRIMARY KEY (CodigoProducto)
CONSTRAINT fk_marca FOREIGN KEY (Codigomarca)
REFERENCES Marca(CodigoMarca)
)
Sentencia INSERT
INSERT. Permite agregar, adicionar o insertar uno o más registros a una (y solo una) tabla en
una base de datos relacional.
Debe proporcionar en una sentencia INSERT igual número de campos o columnas.
Ejemplo 1:
Insertando sin colocar los nombres de los campos esto indica que se debe agregar datos a
todas las columnas NOT NULL y se debe tomar en cuenta el orden de los campos de la tabla
Si se van a proporcionar valores para todos los campos de una tabla pueden omitirse los
nombres de dichos campos en la instrucción.
Ejemplo 2:
Colocando los nombres de los campos, no importa el orden de como estén los campos en la
tabla
Ejemplo 3:
Agregando varios registros al mismo tiempo en la tabla
Ejemplo:
Se desea crear una tabla con los datos de la tabla producto que pertenezcan a la marca HP
Al hacer un SELECT a la tabla Producto se tienen los siguientes resultados:
SELECT * FROM Producto
Resultado:
Después de ejecutar la sentencia SELECT INTO y al hacer un SELECT a la tabla Producto Marca, se
obtienen los siguientes resultados
Ejemplo:
Crear la tabla Producto MarcaA, con las mismas propiedades de la tabla Producto
En el siguiente ejemplo, la instrucción INSERT agregar en la tabla Producto MarcaE, los datos de la tabla
Producto donde el valor del campo CodigoMarca sea igual a 4
Al hacer un SELECT a la tabla esta debe tener los datos de los productos que pertenecen a la marca con
código igual a 4
Nota: a diferencia con la sentencia SELECT - INTO, aquí debe de crearse la tabla previamente
Sentencia UPDATE
UPDATE. Permite la actualización o modificación de uno o varios registros de una única tabla.
Se debe utilizar en conjunto con la cláusula SET con la cual se indicará(n) el(los) campo(s) a actualizar
con el valor indicado.
Una segunda cláusula WHERE, opcional, permite indicar qué registros deben ser actualizados.
Si se omite la cláusula WHERE la ejecución de la consulta modificará todos los registros de la tabla.
Con este ejemplo se actualiza el dato almacenado en el campo PrecioUnitario de cada registro de la
tabla Producto MarcaA
UPDATE [Producto MarcaA] SET PrecioUnitario=45
Varias condiciones:
Actualiza el precio del producto donde el Codigo del producto sea igual 9 y el codigo de la marca sea
igual 4
Sentencia DELETE
DELETE. Permite eliminar o borrar todos los registros de una tabla.
La sentencia DELETE no borra la estructura física de la tabla únicamente elimina los datos.
Ejemplo 1:
Elimina todos los registros de la tabla Producto MarcaA
Ejemplo 2:
La tabla productos tiene los siguientes datos:
Eliminar los registros de la tabla Producto donde el código de la marca sea igual a 2
Ahora hacer un SELECT a la tabla se observa que Ya no se encuentran los productos con código de
marca 2 en los registros obtenidos
III. Requerimientos
Máquina con SQL Server
Guía Número 9 de base de datos
IV. Procedimiento
Ejercicio 1. Creación de la base de datos
Crear la base de datos Control Alumno
Ejercicio 2. Creación de tablas
Tabla Alumno
Nombre del Campo Tipo de Dato Tamaño Permite valores Tipo de
nulos restricción
Carnet char 8 no Llave primaria
Nombre completo varchar 50 si
Tabla Materia
Nombre del Campo Tipo de dato Tamaño Permite valores Tipo de restricción
nulos
Codigo char 5 no Llave primaria
Nombre varchar 30 si Valor único, el
nombre de la
materia no se
puede repetir
UV int si Check, en donde se
aceptan valores
entre 2 y 5
Tabla Inscripcion
--tabla materia
create table materia(
codigo char(5) not null,
nombre varchar(30),
uv int,
constraint pk_materia primary key(codigo),
constraint u_nombre unique(nombre),
constraint ck_uv check(uv between 2 and 5)
)
go
--tabla inscripcion
create table inscripcion(
carnet char(8),
codigomateria char(5),
ciclo char(5),
constraint pk_inscripcion primary key (carnet, codigomateria, ciclo)
)
go
1. El alumno que tiene el carnet GH121214 se debe cambiar el nombre de Gerardo Hierro a Gerardo
Hernández, digitar la siguiente consulta:
Como se observa en los resultados se realizó la actualización de los datos en el campo carnet de la
tabla Inscripcion al mismo tiempo que se ejecutó la consulta UPDATE en la tabla Alumno
2. Comprobar los datos de las tablas Alumno e Inscripcion por medio de una consulta SELECT
V. Ejercicio Complementario
Carnet NombreCompleto
MC1219854 Mauricio Campos
IP110943 Ignacio Perez
MU127895 Mikel Urrutia
OH132390 Oscar Hernandez
ML1390032 Mayra Lopez
3. Con la instrucción SELECT INTO, crear una tabla con el nombre MateriaUV que tenga los datos de la
materia donde las unidades valorativas sean mayores o iguales a 4
4. Con la instrucción INSERT INTO – SELECT, crear una tabla con el nombre Alumno2012 en donde se
almacenen aquellos alumnos que sean del año 2012
5. Crear las siguientes consultas de actualización de datos
i. Modificar el nombre completo del alumno con carnet GM119056 a Martínez
ii. Cambiar el carnet del alumno Martínez a GM119156
iii. Modificar el ciclo de la inscripción de C1-14 a C1-15
iv. Modificar el código de la materia HM02 a HM01
v. Modificar el nombre completo del alumno con carnet IP110943 a Pereira
6. Crear las siguientes consultas de eliminación de datos
I. Eliminar el alumno con el carnet GM119056
II. Eliminar los alumnos en donde el carnet comience con letra M
III. Eliminar la materia Introducción a la Programación
IV. Eliminar el alumno Oscar Hernández
V. Eliminar la inscripción donde el código de la materia es igual RD02 y el ciclo es igual C1-15
UNIVERSIDAD FEDERICO VILLAREAL
FACULTAD DE INGENIERIA INDUSTRIAL Y SISTEMAS
ESCUELA DE INGENIERIA DE SISTEMAS
GUIA DE LABORATORIO Nº 10
I. Objetivos
1. Implementar las diferentes tipos de funciones en la selección de datos almacenados en una
base de datos.
2. Combinar las funciones de agregado con las diferentes cláusulas de agrupación de datos
COMODIN DESCRIPCION
AVG() Retorna el promedio de los valores de una columna o
expresión
COUNT() Retorna la cuenta del número de valores distintos a
null en una columna o expresión. Devuelve un valor
de tipo int
COUNT(ALL expresion) Evalúa la expresión en todas las filas del grupo y
devuelve el número de valores no NULL
COUNT(DISTINCT expresion) Evalúa la expresión en todas las filas del grupo y
devuelve el número de valores no NULL únicos
MAX() Retorna el valor máximo de una columna o expresión
MIN() Retorna el valor mínimo de una columna o expresión
SUM() Retorna la suma de los valores de una columna o
expresión
Ejercicio 1. Uso de la función count()
1. Mostrar el número de empleados de la tabla empleados
select count(*) as [Total Empleados]
from Empleados
Al final solo cuenta los empleados que tienen asignado una región en este caso WA, el mismo
resultado, se obtendría a ejecutar la siguiente consulta:
select count (Región)as [Total Empleados]
from Empleados
3. Se quiere contar a los empleados que tienen asignado una región, la cual esta no debe repetirse
select count (DISTINCT Región)as [Total Empleados]
from Empleados
2. La cláusula GROUP BY
Se utiliza para agrupar los registros en base a determinado criterio y luego ejecutar cálculos
sobre las columnas para consolidar los datos para cada uno de los grupos obtenidos.
Ejercicio 1.
En este ejercicio se devuelve información acerca de los pedidos de la tabla Detalles de Pedidos.
La consulta agrupa y presenta cada identificador de producto (IdProducto) y calcula la cantidad
total de pedido por cada producto. La cantidad total se calcula con la función de agregado SUM
y presenta un valor para cada producto del conjunto de resultados, y al final se ordena la
información con el ORDER BY.
Ejercicio 2
Este ejemplo agrega una cláusula WHERE a la consulta del ejercicio anterior. Esta consulta
restringe las filas al producto cuyo identificador (IDProducto), está dentro del rango 10 y 25 y,
después, agrupa dichas filas y calcula la cantidad total del pedido.
3. La cláusula HAVING
Utilizar la cláusula HAVING en columnas o expresiones para establecer condiciones en los grupos
incluidos en un conjunto de resultados. La cláusula HAVING establece condiciones en la cláusula
GROUP BY de una forma muy similar a como interactúa la cláusula WHERE con la instrucción SELECT.
Cuando utilice la cláusula HAVING, considere los hechos e instrucciones siguientes:
Utilice la cláusula HAVING sólo con la cláusula GROUP BY para restringir los agrupamientos. El
uso de la cláusula HAVING sin la cláusula GROUP BY no tiene sentido.
En una cláusula HAVING puede haber hasta 128 condiciones. Cuando utilice varias condiciones,
tiene que combinarlas con operadores lógicos (AND, OR o NOT).
Puede hacer referencia a cualquiera de las columnas que aparezcan en la lista de selección.
No utilice la palabra clave ALL con la cláusula HAVING, porque la cláusula HAVING pasa por alto
la palabra clave ALL y sólo devuelve los grupos que cumplen la cláusula HAVING.
Ejercicio 1
En este ejemplo se calcula el total de productos (Cantidad) que se han realizado en los pedidos
almacenados en la tabla Detalles de Pedidos y donde esa cantidad tiene que ser mayor o igual a 100
unidades y las filas se ordenan en forma ascendente según la suma de las cantidades
4. El operador ROLL UP
Permite resumir los valores de grupo y se usa normalmente para producir promedios acumulados o
sumas acumuladas. Puede hacer esto aplicando la función de agregación en la lista de columnas de
SELECT para cada columna en la cláusula GROUP BY moviéndose de izquierda a derecha.
Ejercicio 1
select idproducto, idpedido, sum(cantidad) as [total cantidad]
from [Detalles de pedidos]
group by idproducto, idpedido
with rollup
Se muestra el total general para cada idproducto (el idproducto 1 tiene un total en cantidad de 828)
Se muestra el total general (la suma de todos los idproductos en cantidad es 51317)
5. El operador CUBE
Permite crear y resumir todas las posibles combinaciones de grupos basadas en la cláusula GROUP BY.
Ejercicio 1
select idproducto, idpedido, sum(cantidad) as [total cantidad]
from [Detalles de pedidos]
group by idproducto, idpedido
with cube
El total general en cantidad para la orden 10248 es 27.
Se muestra el total general (la suma de todos los idproductos en cantidad es 51317)
En la fila 3015 se muestra el total en cantidad de idproducto
III. Requerimientos
Máquina con SQL Server
Guía Número 10 de base de datos
1. Mostrar la suma de las unidades vendidas (OrderQty) por cada orden (SalesOrderID)
2. Mostrar el promedio de ventas (LineTotal) por cada orden (SalesOrderID)
3. Mostrar la venta (LineTotal) máxima por cada orden (SalesOrderID)
4. Mostrar la venta (LineTotal) mínima por cada orden (SalesOrderID)
V. Actividad Complementaria
1. Creación de base de datos: Nombre de la base de datos: Control_de_libros
2. Crear las tablas tomando en cuenta: Crear las relaciones entre las tablas (llaves primarias y
llaves foráneas).
3. El formato de las tablas son:
Tabla Autor
Tabla Editorial
Tabla Libro
CodigoAutor CodigoLibro
PL001 BDCOL00001
NH004 BDCOL00001
CM002 PRCOL00002
PM003 BDESP00002
PM003 DWING00003
HM005 PRING00005
CM002 ABESP00006
NH004 HJMEX00005
JR006 DWING00003
GUIA DE LABORATORIO Nº 11
I. Objetivos
1. Combinar datos de dos o más tablas por medio de JOINS.
2. Seleccionar información de varias tablas utilizando SUBCONSULTAS
Tipos de Combinaciones
9. Combinación interna INNER JOIN
10. Combinación Cruzada CROSS JOIN
11. Combinación externa OUTER JOIN
i. LEFT OUTER JOIN o LEFT JOIN
ii. RIGHT OUTER JOIN o RIGHT JOIN
iii. FULL OUTER JOIN o FULL OUTER JOIN
La palabra OUTER es opcional y no añade ninguna función
A. INNER JOIN
Se utiliza para mostrar los datos coincidentes entre las tablas de donde se quiere mostrar la
información:
SELECT <lista_campos>
FROM <TablaA A>
INNER JOIN <TablaB B>
ON A.Key=B.Key
Nota: ON se utiliza para colocar los nombres de los campos con los cuales se ha realizado la
relación entre las tablas
Ejemplo 1
Obtener el nombre de los proveedores y los productos que estos suministran
ordenados por el nombre de proveedor
Ejemplo 2
Obtener el idproducto, nombreproducto y nombrecategoria. Utilice una combinación de las
tablas Productos y Categorias.
Ejemplo 4
Obtener el idproducto, nombreproducto, nombrecategoria y nombrecompania donde
idproveedor es igual a 1. Utilice una combinación de las tablas Productos, Categorias y
Proveedores. (combinación de tres tablas)
B. LEFT JOIN
Muestra los registros de la tabla izquierda más los registros coincidentes con la tabla derecha
SELECT <lista_campos>
FROM <TablaA A>
LEFT JOIN <TablaB B>
ON A.KEY=B.KEY
Ejemplo 1
Retornar las columnas idcliente, nombrecompania de la tabla Clientes utilizando una
combinación externa izquierda (LEFT OUTER JOIN) con la tabla Pedidos. De esta tabla obtiene
las columnas idpedido y fechapedido
Ejemplo 2
Retornar todos los clientes que no realizaron pedidos. Utilizar una combinación externa
izquierda LEFT OUTER JOIN
SELECT <lista_campos>
FROM <TablaA A>
LEFT JOIN <TablaB B>
ON A.Key=B.Key
WHERE B.Key IS NULL
Ejemplo 1
C. RIGHT JOIN
Muestra los registros de la tabla derecha más los registros coincidentes con la tabla izquierda
SELECT <lista_campos>
FROM <TablaA A>
RIGHT JOIN <TablaB B>
ON A.KEY=B.KEY
Ejemplo 1
El ejemplo siguiente inserta 3 registros a la tabla Compania de Envios. Estos datos son
necesarios para crear los ejercicios siguientes
Ejemplo 2
Retorna las columnas idpedido de la tabla Pedidos y nombrecompania de la tabla compañía
de envios utilizando una combinación externa derecha RIGHT OUTER JOIN
SELECT P.IdPedido, CE.NombreCompañía
FROM Pedidos AS P
RIGHT OUTER JOIN [Compañías de Envíos] AS CE
ON P.FormaEnvío = CE.IdcompañíaEnvíos
ORDER BY 2
GO
Muestra los registros de la tabla derecha menos los registros coincidentes con la tabla
izquierda
SELECT <lista_campos>
FROM <TablaA A>
RIGHT JOIN <TablaB B>
ON A.Key=B.Key
WHERE A.Key IS NULL
Ejemplo 1
Mostrar que proveedor no ha ofrecido productos
select nombreproducto
from productos p
right join Proveedores pr
on p.IdProveedor=pr.IdProveedor
where p.IdProveedor is null
D. FULL JOIN
Muestra los registros de la tabla izquierda y la tabla derecha más los registros coincidentes
entre ambas
SELECT <lista_campos>
FROM <TablaA A>
FULL JOIN <TablaB B>
ON A.KEY=B.KEY
Ejemplo 1
Retornar las columnas idcliente de la tabla Pedidos y nombrecompania de la tabla compañía
de envios utilizando una combinación externa completa FULL OUTER JOIN
Una combinación cruzada que no tenga una cláusula WHERE genera el producto cartesiano de
las tablas involucradas en la combinación.
El tamaño del conjunto de resultados de un producto cartesiano es igual al número de filas de
la primera tabla multiplicado por el número de filas de la segunda tabla.
Ejemplo 1
Usar la base de datos northwind
Ejecutamos las siguientes consultas para conocer la cantidad de filas o registros tienen las
siguientes tablas:
Como resultado tenemos 2233 filas o registros, ya que si multiplicamos las 77 filas de la
primera tabla por las 29 filas de la segunda obtenemos ese resultado
III. Requerimientos
Guia de Laboratorio
Maquina con SQL SERVER
1. Haciendo uso de INNER JOIN mostrar los campos OrderDate y ProductID de las tablas Orders
y Order Details donde el dato almacenado en el campo OrderDate sea igual 8 de Julio de 1996
2. Se desea mostrar cuantas cantidades de cada producto se han vendido y la fecha de la venta
de cada uno de ellos, se debe tomar en cuenta el siguiente diagrama relacional
a. Mostrar los empleados que hayan o estén haciendo uso de una maquina
i. Campos a mostrar: Nombres del empleado, Marca, Modelo y Descripción de la maquina
Una subconsulta (subquery) es una sentencia "select" anidada en otra sentencia "select", "insert",
"update" o "delete" (o en otra subconsulta).
Las subconsultas se emplean cuando una consulta es muy compleja, entonces se la divide en varios
pasos lógicos y se obtiene el resultado con una única instrucción y cuando la consulta depende de los
resultados de otra consulta.
las que retornan un solo valor escalar que se utiliza con un operador de comparación o en lugar de una
expresión.
las que retornan una lista de valores, se combinan con "in", o los operadores "any", "some" y "all".
los que testean la existencia con "exists".
Las subconsultas que retornan un solo valor escalar se utiliza con un operador de comparación o en
lugar de una expresión:
La sintaxis es la siguiente:
select CAMPOS
from TABLA
where CAMPO OPERADOR (SUBCONSULTA);
Ejemplo:
Mostrar el título, autor y precio del libro más costoso:
La sintaxis es la siguiente:
Mostrar los nombres de las editoriales que han publicado libros de un determinado autor:
select nombre
from editoriales
where codigo in
(select codigoeditorial
from libros
where autor='Richard Bach');
La subconsulta (consulta interna) retorna una lista de valores de un solo campo (codigo) que la consulta
exterior luego emplea al recuperar los datos.
...VALORESCALAR OPERADORDECOMPARACION
ANY (SUBCONSULTA);
Ejemplo:
Mostrar los títulos de los libros de "Borges" que pertenecen a editoriales que han publicado también
libros de "Richard Bach", es decir, si los libros de "Borges" coinciden con ALGUNA de las editoriales
que publicó libros de "Richard Bach":
select titulo
from libros
where autor='Borges' and
codigoeditorial = any
(select e.codigo
from editoriales as e
join libros as l
on codigoeditorial=e.codigo
where l.autor='Richard Bach');
La consulta interna (subconsulta) retorna una lista de valores de un solo campo (puede ejecutar la
subconsulta como una consulta para probarla), luego, la consulta externa compara cada valor de
"codigoeditorial" con cada valor de la lista devolviendo los títulos de "Borges" que coinciden.
All
También compara un valor escalar con una serie de valores. Chequea si TODOS los valores de la lista de
la consulta externa se encuentran en la lista de valores devuelta por la consulta interna.
Sintaxis:
Ejemplo:
Mostrar si TODAS las editoriales que publicaron libros de "Borges" coinciden con TODAS las editoriales que
publicaron libros de "Richard Bach":
select titulo
from libros
where autor='Borges' and
codigoeditorial = all
(select e.codigo
from editoriales as e
join libros as l
on codigoeditorial=e.codigo
where l.autor='Richard Bach');
La consulta interna (subconsulta) retorna una lista de valores de un solo campo (puede ejecutar la subconsulta
como una consulta para probarla), luego, la consulta externa compara cada valor de "codigoeditorial" con cada
valor de la lista, si TODOS coinciden, devuelve los títulos.
Los operadores "exists" y "not exists" se emplean para determinar si hay o no datos en una lista de valores.
Cuando se coloca en una subconsulta el operador "exists", SQL Server analiza si hay datos que coinciden con la
subconsulta, no se devuelve ningún registro, es como un test de existencia; SQL Server termina la recuperación
de registros cuando por lo menos un registro cumple la condición "where" de la subconsulta.
EXISTS simplemente verifica si la consulta interna arroja alguna fila. Si lo hace, entonces la consulta externa
procede. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de la instrucción SQL no arroja nada.
La sintaxis es la siguiente:
Ejemplo
Se usa una subconsulta correlacionada con un operador "exists" en la cláusula "where" para devolver una
lista de clientes que compraron el artículo "lapiz":
select cliente,numero
from facturas as f
where exists
(select *from Detalles as d
where f.numero=d.numerofactura
and d.articulo='lapiz');
ANY
Compara con cualquier registro de la subconsulta. La instrucción es válida si hay un registro en la
subconsulta que permite que la comparación sea cierta.
o
Se suele utilizar la palabra ANY (SOME es un sinónimo)
SOME
Compara con todos los registros de la consulta. La instrucción resulta cierta si es cierta toda
ALL
comparación con los registros de la subconsulta
No usa comparador, ya que sirve para comprobar si un valor se encuentra en el resultado de la
IN
subconsulta
NOT
Comprueba si un valor no se encuentra en una subconsulta
IN
Este operador devuelve verdadero si la consulta que le sigue devuelve algún valor. Si no, devuelve
EXISTS
falso. Se utiliza normalmente mediante consultas correlacionadas
Ejercicio Complementario
GUIA DE LABORATORIO Nº 12
I. Objetivos
1. Diseñar y crear Vistas para la selección de información
2. Implementar la programación con comandos SQL
Una vista es una tabla virtual cuyo contenido está definido por una consulta. Al igual que una tabla
real, una vista consta de un conjunto de columnas y filas de datos con un nombre. Sin embargo, la
vista no existe como conjunto de valores de datos almacenados en una base de datos. Las filas y las
columnas de datos proceden de tablas a las que se hace referencia en la consulta que define a la
vista y se producen de forma dinámica cuando se hace referencia a la vista.
Sintaxis
Ejemplo 1
Crear una vista que devuelva el idcliente, nombrecompania, dirección y país de la tabla clientes
Ejemplo 2
Crear la vista vista_02 que permita visualizar solo a los clientes que residen en Brasil
Ejemplo 3
Crear la vista ClientesProveedores_Ciudad que presenta información de los clientes y
proveedores (utilizar unión)
Ejemplo 4
Crear la vista ListaAlfabetica_ProductosCategoria donde se presenta el idproducto,
nombreproducto y nombrecategoria. Utilizar las tablas productos y categorías de la base de
datos nw
Ejemplo 5
Crear la vista ProductosPorCategoria, retorna el nombre de categoría y los productos
pertenecientes a dicha categoría. Utilizar las tablas categorias y productos de la base de datos
nw
Ejemplo 6
Crear la vista Subtotal_Pedidos, calcula el subtotal por cada pedido realizado
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.
Ejemplo 1
Agregar un nuevo campo (ciudad destinatario de la tabla Pedidos ) a la consulta ShipStatusView
Ejemplo 2
Eliminar la vista ShipStatusView
drop view ShipStatusView
III. Requerimientos
Guia de Laboratorio
Maquina con SQL SERVER
IV. Ejercicio Complementario
1. Usar la base de datos Northwind. Seleccionar los campos ProductID, ProductName, SupplierID,
CategoryID, QuantityPerUnit, UnitPrice, Discontinued. Definir una restricción WHERE la cual es:
SupplierID = 14
2. Crear una vista donde se muestren las ventas de un producto las cuales se han realizado en el año
1997, los campos que podría mostrar son los siguientes:
a. Nombre del producto (ProductName)
b. Fecha de pedido (OrderDate)
c. Fecha de envió (ShippedDate)
d. Calcular el subtotal (UnitPrice*Quantity)
3. Mostrar el código del producto, el nombre del producto y el precio por unidad de todos los
productos de la empresa
4. Mostrar todos los productos cuya categoría sea Beverages
5. Mostrar los datos del cliente y las fechas de las ordenes que estos han realizado
6. Cuantos productos existen por cada categoría
7. Mostrar el promedio de los precios unitarios de las categorías: Produce y Confections
UNIVERSIDAD FEDERICO VILLAREAL
FACULTAD DE INGENIERIA INDUSTRIAL Y SISTEMAS
ESCUELA DE INGENIERIA DE SISTEMAS
GUIA DE LABORATORIO Nº 13
I. Objetivos
1. Diseñar y crear procedimientos almacenados para la selección de información
2. Implementar la programación con comandos SQL
II. Introducción Teórica
Un procedimiento almacenado es una colección de sentencias SQL que están guardadas en
el servidor.
¿Cómo se ejecutan?
Cuando un procedimiento almacenado es ejecutado por primera vez se compila, se crea y
se guarda en memoria su plan de ejecución., luego SQL utiliza ese plan de ejecución
cuando se vuelve a llamar al procedimiento sin volver a compilarlo nuevamente.
Procedimientos de Entrada
Se esperan parámetros. Condicionan la ejecución del mismo a procedimiento almacenado
Sintaxis
create procedure nombreprocedimiento
@parametro1 tipo,
@parametro2 tipo
as
sentencia
Ejemplo
Procedimientos de Salida
Cuando se ejecuta el procedimiento, que me devuelva una salida con una variable
Sintaxis
III. REQUERIMIENTOS
SQL SERVER
GUIA DE LABORATORIO
IV. PROCEDIMIENTOS
Usar la base de datos Nwind
2. Crear un procedimiento que contiene tres parámetros N1, N2 y N3 de salida, que devuelve la
suma
Create Procedure spejemplo_02
@N1 int,
@N2 int,
@N3 int Output
As
Set @N3 = @N1+@N2
return (@N3)
Go
/* EJECUTAR EL PROCEDIMIENTO */
Declare @a Int, @b Int, @c Int
Set @a = 5
Set @b = 3
Exec spejemplo_02 @a, @b, @c output
Select @c
3. Crear un procedimiento almacenado que permita insertar, actualizar y eliminar registros de
una tabla
GO
exec usp_employee_delete 1
go
create PROCEDURE MasterInsertUpdateDelete
(
@id INTEGER,
@first_name VARCHAR(10),
@last_name VARCHAR(10),
@salary DECIMAL(10,2),
@city VARCHAR(20),
@StatementType nvarchar(20) = ''
)
AS
BEGIN
IF @StatementType = 'Insert'
BEGIN
insert into employee (id,first_name,last_name,salary,city) values( @id, @first_name, @last_name, @salary,
@city)
END
IF @StatementType = 'Select'
BEGIN
select * from employee
END
IF @StatementType = 'Update'
BEGIN
UPDATE employee SET
First_name = @first_name, last_name = @last_name, salary = @salary,
city = @city
WHERE id = @id
END
else IF @StatementType = 'Delete'
BEGIN
DELETE FROM employee WHERE id = @id
END
end
V. EJERCICICIO COMPLEMENTARIO
1. Crear un P.A q reciba el código de un cliente como input y muestre el número de comprobantes
de pago que ha recibido.
2. Crear un P.A. que tenga como input DNI de un personal y muestre el número de comprobantes
emitidos por dicho personal entre una fecha inicial y una fecha final
3. Crear un P.A. que reciba como input el cod de un distrito y que devuelva como output el nomdist
4. Crear un P.A. que reciba como input el nombre de una marca y devuelva como output el número
de productos q tiene dicha marca.
--5) crear un P.A q reciba el codigo de un cliente como imput y muestre el numero de
comprobanets de pago quqe ah recibido.
--creAr un p.a que tenga como imput DNI DE UN PERSONAL Y MUESTRE EL NUMERO DE COMPROBANTES
EMITIDOS POR DICHO PERSONAL
--ENTRE UNA FECHA INICIAL Y UNA FECHA FINAL.
--1)CREAR UN PA QUE RECIBA COMO IMPUT EL COD DE UN DIST Y QUE DEVUELVA COMO OUTPUTS EL NOMDIST
AS
SET @NOMDIST =(SELECT NOMDIST FROM DISTRITOS WHERE CODDIST=@COD)
GO
--Ejecutar el P.A con output
Declare @x varchar(30)
exec NOMDIST 'D005',@X OUTPUT
PRINT @X
--2)CREAR UN P.A QUE RECIBA COMO IMPUT EL OMBRE DE UNA MARCA Y DEVUELVA COMO OUTPUT EL NRO DE
PRODUCTOS Q TIENE DICHA MARCA.
Declare @n varchar(30)
exec NROPRODUCTOS1 'IBM',@N OUTPUT
PRINT @N
UNIVERSIDAD FEDERICO VILLAREAL
FACULTAD DE INGENIERIA INDUSTRIAL Y SISTEMAS
ESCUELA DE INGENIERIA DE SISTEMAS
GUIA DE LABORATORIO Nº 14
I. Objetivos
Identificar los tipos de funciones que hay en SQL SERVER
SQL Server admite 3 tipos de funciones definidas por los usuarios clasificados según el valor
retornado:
1) escalares: retornan un valor escalar;
2) con valores de tabla en linea
3) con valores de tabla de declaración múltiple
Las funciones definidas por el usuario se crean con la instrucción "create function" y se
eliminan con "drop function".
b. Funciones Escalares: Una función escalar retorna un único valor. Como todas las funciones, se
crean con la instrucción "create function".
La sintaxis básica es:
Ejemplo 1
Crear función denominada "f_promedio" que recibe 2 valores y retorna el promedio
Al hacer referencia a una función escalar, se debe especificar el propietario y el nombre de la función:
select dbo.f_promedio(5.5,8.5);
Ejemplo 2
Crear una función que devuelva la cantidad de ordenes realizadas por un determinado cliente
(campo customerid)
Es similar a una vista, pero más flexible en el empleo de parámetros. En una vista no se puede incluir
un parámetro, lo que hacemos es agregar una cláusula "where" al ejecutar la vista. Las funciones con
valores de tabla en línea funcionan como una vista con parámetros.
Sintaxis
Ejemplo 1
Creamos una función con valores de tabla en línea que recibe un valor de autor como parámetro:
create database f1
go
use f1
go
Ejemplo 2
create database f2
go
use f2
go
Ejemplo 3
Crear una función que devuelva la cantidad de ordenes realizadas por un determinado cliente
(campo customerid)
III. Requerimientos
Maquina SQL SERVER
Guía de Laboratorio
1. Crear una función que retorne el número de productos vendidos en un año determinado de
una marca determinada
2. Crear una función que retorne el factorial de un número entero
Funciones de Tabla
3. Crear una función que retorne una tabla con los siguientes campos:
codprod, nomprod, nommarca y precio teniendo como input la función el nombre de la
marca
4. Crear una función que reciba como input el nombre de un distrito y retorne una tabla con las
siguientes columnas: codper, nomper, dni, dirección y nombre de distrito.
5. Crear una función que reciba como input nombre de un personal y retorne una tabla con
los siguientes campos: codcomp ,nomcli,nomper,fechacomprobante de todos los
comprobantes emitidos por ese personal
6. Crear una función que reciba como input el nomcar, y devuelva una tabla con los siguientes
campos: nomcar, número de personas que tienen dicho cargo, suma de sueldos por cargo y
promedio de sueldo por cargo
UNIVERSIDAD FEDERICO VILLAREAL
FACULTAD DE INGENIERIA INDUSTRIAL Y SISTEMAS
ESCUELA DE INGENIERIA DE SISTEMAS
GUIA DE LABORATORIO Nº 15
I. Objetivos
Qué el estudiante sea capaz de:
Utilizar desencadenadores para activar mensajes de advertencia
Implementar los diferentes tipos de desencadenadores
After triggers, como su nombre lo indica, se dispara después de la acción de disparo. Las
instrucciones INSERT, UPDATE, y DELETE, hacen que se active un desencadenador posterior
después de que las instrucciones respectivas completen la ejecución.
Por otro lado, como su nombre lo dice, Instead of triggers, se dispara en lugar de la acción de
activación. Las instrucciones INSERT, UPDATE y DELETE pueden hacer que un desencadenador
INSTEAD OF se active en lugar de la ejecución de la instrucción respectiva.
Ejemplo 1
tblEmployee
Cuando se agrega un nuevo empleado, queremos capturar la ID y la fecha y la hora, el nuevo empleado se
agrega en la tabla tblEmployeeAudit. La forma más fácil de lograr esto, es tener un AFTER INSERT para el
evento INSERT.
--Ejemplo para AFTER TRIGGER para el evento INSERT en la tabla tblEmployee:
CREATE TRIGGER tr_tblEMployee_ForInsert
ON tblEmployee
FOR INSERT
AS
BEGIN
Declare @Id int
Select @Id = Id from inserted
En el activador, obtenemos el ID de la tabla insertada. Entonces, ¿qué es esta tabla insertada? La tabla
INSERTADA, es una tabla especial utilizada por los activadores DML. Cuando agrega una nueva fila a la tabla
tblEmployee, también se realizará una copia de la fila en la tabla insertada, a la que solo puede acceder un
activador. No puede acceder a esta tabla fuera del contexto del activador. La estructura de la tabla insertada
será idéntica a la estructura de la tabla tblEmployee.
Entonces, ahora si ejecutamos la siguiente instrucción INSERT en tblEmployee. Inmediatamente, después de
insertar la fila en la tabla tblEmployee, el disparador se activa (se ejecuta automáticamente), y también se
inserta una fila en tblEmployeeAudit.
Insert into tblEmployee values (7,'Tan', 2300, 'Female', 3)
Ejemplo 2
Ejemplo para AFTER TRIGGER para el evento DELETE en la tabla tblEmployee:
Ahora capturemos información de auditoría, cuando se elimina una fila de la tabla, tblEmployee.
CREATE TRIGGER tr_tblEMployee_ForDelete
ON tblEmployee
FOR DELETE
AS
BEGIN
Declare @Id int
Select @Id = Id from deleted
insert into tblEmployeeAudit
values('An existing employee with Id = ' + Cast(@Id as nvarchar(5)) + ' is deleted at ' + Cast(Getdate() as
nvarchar(20)))
END
La única diferencia aquí es que, estamos especificando, el evento desencadenante como DELETE y recuperando
el ID de fila eliminado de la tabla DELETED. DELETED table, es una tabla especial utilizada por los activadores
DML.
Cuando eliminas una fila de la tabla tblEmployee, una copia de la fila eliminada estará disponible en la tabla
DELETED, a la que solo puede acceder un activador. Al igual que en la tabla INSERTED, no se puede acceder a la
tabla DELETED, fuera del contexto del activador y, la estructura de la tabla DELETED será idéntica a la
estructura de la tabla tblEmployee.
delete from tblEmployee where id=1
Ejemplo 4
-- Delete the row from temp table, so we can move to the next row
Delete from #TempTable where Id = @Id
End
End
Un disparador puede definirse para más de una acción; en tal caso, deben separarse con comas.
Ejemplo 5
Un club almacena los datos de sus socios en una tabla denominada "socios", las inscripciones en "inscritos" y
en otra tabla "morosos" guarda los documentos de los socios que deben matrículas.
Crear un trigger para evitar que se inscriban socios que deben matrículas y no permitir que se eliminen las
inscripciones de socios deudores. El trigger se define para ambos eventos en la misma sentencia de creación.
create database te
go
use te
go
create table socios(
documento char(8) not null,
nombre varchar(30),
domicilio varchar(30),
constraint PK_socios primary key(documento)
)
go
El trigger controla:
El disparador se activa ante el "insert", permite la transacción y agrega al socio en la tabla "morosos".
Verifiquémoslo consultando las tablas correspondientes:
El disparador se activa ante el "insert" y deshace la transacción porque encuentra su documento en la tabla
"morosos".
El disparador se activa ante la sentencia "delete" y permite la transacción. Verificamos que la inscripción nº
4 fue eliminada de "inscriptos":
1. CREAR UN TRIGGER QUE PERMITA ELIMINAR UN SOLO REGISTRO DE LA TABLA ORDER DETAILS
2. CREAR UN TRIGGER QUE CUANDO SE INSERTE UN REGISTRO EN LA TABLA ORDER DETAILS, LA
CANTIDAD PEDIDA SE DEBE RESTAR EN EL CAMPO UNITSINSTOCK DE LA TABLA PRODUCTS
3. CREAR UN TRIGGER QUE CUANDO SE BORRE UN DETALLE DE LA ORDEN, EL PRODUCTO QUE ESTABA
PEDIDO EN LA ORDEN SE ACTUALIZARA A DESCONTINUADO EN LA TABLA PRODUCTS.
4. CREAR UN TRIGGER QUE CUANDO SE QUIERA ACTUALIZAR EL NOMBRE DE LA COMPANIA DEL
PROVEEDOR, NO DEBE PERMITIRLO
5. CREAR UNA TABLA HISTORICO QUE VAYA GUARDANDO EL NOMBRE DE LA COMPANIA (ACTUAL NOMBRE
Y NUEVO NOMBRE) DE LOS PROVEEDORES. TABLA: HISTORICO (ID, ACTUAL, NUEVO) EL ID ES
IDENTITY.
3. Instead Of
Los activadores INSTEAD OF se activan en lugar del evento activador (eventos INSERT, UPDATE o DELETE). En
general, los activadores INSTEAD OF generalmente se usan para actualizar correctamente las vistas que se
basan en varias tablas.
Usando los triggers Instead Of, se puede agregar lógica que permita ejecutar operaciones inserts, deletes o
updates a cualquier clase de Vista SQL.
Instead Of Insert
--SQL Script to create tblEmployee table:
CREATE TABLE tblEmployee
(
Id int Primary Key,
Name nvarchar(30),
Gender nvarchar(10),
DepartmentId int
)
Como ahora tenemos las tablas requeridas, vamos a crear una vista basada en estas tablas. La vista debe
devolver las columnas Id. De empleado, Nombre, Género y Nombre del departamento. Por lo tanto, la vista
está obviamente basada en varias tablas.
--creamos la vista
Create view vWEmployeeDetails
as
Select Id, Name, Gender, DeptName
from tblEmployee
join tblDepartment
on tblEmployee.DepartmentId = tblDepartment.DeptId
go
Cuando ejecute, select * from vWEmployeeDetails, los datos de la vista, deben ser como se muestra a
continuación:
Select * from vWEmployeeDetails
Ahora, intentemos insertar una fila en la vista, vWEmployeeDetails, ejecutando la siguiente consulta. En este
punto, se generará un error que indica que "Ver o función vWEmployeeDetails no se puede actualizar porque
la modificación afecta a varias tablas base".
Por lo tanto, al insertar una fila en una vista basada en tablas de varios tipos, se genera un error de forma
predeterminada. Ahora, entendamos, en qué medida INSTEAD OF TRIGGERS puede ayudarnos en esta
situación. Como estamos recibiendo un error, cuando intentamos insertar una fila en la vista, vamos a crear un
activador INSTEAD OF INSERT en la vista vWEmployeeDetails.
Ejemplo 1
--Script para crear INSTEAD OF INSERT trigger:
Create trigger tr_vWEmployeeDetails_InsteadOfInsert
on vWEmployeeDetails
Instead Of Insert
as
Begin
Declare @DeptId int
The instead of trigger inserta correctamente, el registro en la tabla tblEmployee. Como estamos insertando una
fila, la tabla insertada (tabla inserted) contiene la fila recién agregada, donde la tabla eliminada (tabal deleted
)estará vacía.
En el activador, usamos la función Raiserror () para generar un error personalizado, cuando el nombre de
departamento proporcionado en la consulta de inserción no existe. Estamos pasando 3 parámetros al método
Raiserror (). El primer parámetro es el mensaje de error, el segundo parámetro es el nivel de gravedad. El nivel
de gravedad 16 indica errores generales que pueden ser corregidos por el usuario. El parámetro final es el
estado.
Instead of Update
Un desencadenador INSTEAD OF UPDATE se activa en lugar de un evento de actualización, en una tabla o en
una vista. Por ejemplo, digamos que tenemos un activador INSTEAD OF UPDATE en una vista o una tabla, y
luego, cuando intenta actualizar una fila en esa vista o tabla, en lugar de la ACTUALIZACIÓN, el activador se
activa automáticamente. Un desencadenador INSTEAD OF UPDATE, son de gran ayuda para actualizar
correctamente una vista, que se basa en varias tablas.
--SQL Script para crear la tabla tblEmployee:
CREATE TABLE tblEmployee
(
Id int Primary Key,
Name nvarchar(30),
Gender nvarchar(10),
DepartmentId int
)
Como ahora tenemos las tablas requeridas, vamos a crear una vista basada en estas tablas. La vista debe
devolver las columnas Id. De empleado, Nombre, Género y Nombre del departamento. Por lo tanto, la vista
obviamente se basa en múltiples tablas.
--creamos la vista
Create view vWEmployeeDetails1
as
Select Id, Name, Gender, DeptName
from tblEmployee
join tblDepartment
on tblEmployee.DepartmentId = tblDepartment.DeptId
Cuando ejecute, select * from vWEmployeeDetails1, los datos de la vista, deben ser como se muestra a
continuación:
-- If DeptName is updated
if(Update(DeptName))
Begin
Declare @DeptId int
if(@DeptId is NULL )
Begin
Raiserror('Invalid Department Name', 16, 1)
Return
End
-- If gender is updated
if(Update(Gender))
Begin
Update tblEmployee set Gender = inserted.Gender
from inserted
join tblEmployee
on tblEmployee.Id = inserted.id
End
-- If Name is updated
if(Update(Name))
Begin
Update tblEmployee set Name = inserted.Name
from inserted
join tblEmployee
on tblEmployee.Id = inserted.id
End
End
Ahora, intentemos actualizar Nombre, Género y Nombre de Dept. La consulta ACTUALIZACIÓN, funciona como
se esperaba, sin generar el error: "Ver o funcionar vWEmployeeDetails1 no es actualizable porque la
modificación afecta a varias tablas base".
Update vWEmployeeDetails1
set Name = 'Johny', Gender = 'Female', DeptName = 'IT'
where Id = 1
Un disparador INSTEAD OF DELETE se activa en lugar de un evento DELETE, en una tabla o en una vista. Por
ejemplo, digamos que tenemos un desencadenador INSTEAD OF DELETE en una vista o tabla, y luego, cuando
intenta actualizar una fila desde esa vista o tabla, en lugar del evento DELETE real, el desencadenador se activa
automáticamente. INSTEAD OF DELETE TRIGGERS, se utilizan para eliminar registros de una vista, que se basa
en varias tablas.
Como ahora tenemos las tablas requeridas, vamos a crear una vista basada en estas tablas. La vista debe
devolver las columnas Id. De empleado, Nombre, Género y Nombre del departamento. Por lo tanto, la vista
está obviamente basada en varias tablas
--crear la vista
Create view vWEmployeeDetails2
as
Select Id, Name, Gender, DeptName
from tblEmployee
join tblDepartment
on tblEmployee.DepartmentId = tblDepartment.DeptId
Cuando ejecute, select * from vWEmployeeDetails2, los datos de la vista, deben ser como se muestra a
continuación
Ejemplo 1
--Subquery
--Delete from tblEmployee
--where Id in (Select Id from deleted)
End
Al ejecutar la siguiente instrucción DELETE, la fila se SUPRIME como se espera de la tabla tblEmployee.