You are on page 1of 14

UNIVERSIDAD FRANCISCO GAVIDIA

FACULTAD DE INGENIERIA Y SISTEMAS
PRACTICA
CICLO II – 2016
Asignatura: Administración de Base de Datos

Grupo:

Fecha desarrollo:
Aula:
Jueves 1 de septiembre de 2016

Profesor:

PRACTICA: USO DE FUNCIONES AVANZADAS, ALMACENADAS Y FORMATOS

OBJETIVO:
El objetivo de la práctica es conocer el uso de FUNCIONES Y FORMATOS
que posee MySQL. Otras bases de datos tendrán otras instrucciones propias
del lenguaje
Para ello, será necesario acceder al servidor MOWES, XAMPP o cualquier
otro, ingresando a la base de datos NORTHWIND y utilizando la opción del
menú denominado SQL, en la cual al seleccionarlo, le mostrará una ventana
del editor SQL para que ingrese las instrucciones que se le indicarán y podrá
verificar el resultados al presionar el botón “Continuar”.
La base puede ser descargada acá:
https://code.google.com/archive/p/northwindextended/downloads
Si existe algún error en la instrucción, se le mostrará una pantalla color
amarillo en el cual le indicará el tipo de error existe, para lo cual deberá
corregir el query respectivo y volver a ejecutarlo hasta obtener los
resultados.
Favor documentar el proceso y entregar un documento PDF con las
evidencias.
DESARROLLO
EJERCICIO 1. Mostrar los algunos datos de la tabla employees
select titleofcourtesy as titulo,
lastname,
firstname
from employees

Esto será importante para los próximos ejercicios que se obtendrán de la tabla. pues en los siguientes ejercicios.'Sra'. esto nos permitirá realizar consultas con otras características EJERCICIO 2. select if(titleofcourtesy='Mrs. El uso de la función IF en MYSQL permite genera datos condicionales en los campos de resultado.'. resultado si es verdadero.En este ejercicio muy sencillo. resultado si es falso) . veremos que lo único que deseamos es verificar el título que posee cada uno de los registros. firstname from employees La sintaxis del IF es el siguiente: if (condición.'Sr') as titulo. En Oracle se utiliza la instrucción DECODE. lastname.

’. Sra. Un ejemplo del anidamiento sería if (condición. if (condición. resultado si es verdadero. resultado si es verdadero.’.’.discount ) as 'Con descuento' from order_details .’))) as titulo lastname. -> -> -> -> Sr. que aparezcan los siguientes valores respectivamente: Mr. if (titleofcourtesy = ‘Ms. (unitprice * quantity ) * ( 1 .’. Por lo que el Query de traducción quedaría como se muestra a continuación. Srita. if (titleofcourtesy = ‘Mrs. ‘Dr. Select if (titleofcourtesy = ‘Mr. ‘Sra. resultado si es falso)) Un ejemplo sería: Queremos que si en la columna titleofcourtesy posee los siguientes datos. podemos colocar otro if dentro del área para el resultado si es verdadero o en el área si el resultado es falso.’. es decir. Obtener el detalle de las ventas. Mrs. ‘Srita. firstname from employees EJERCICIO 3. (unitprice * quantity ) as Total. que dependiendo de lo que deseamos obtener.’. calculando el descuento y lo que deberá cancelarse con el descuento. Dr. ‘Sr. quantity. Dr. Ms. esto con la finalidad de hacer nuevas evaluaciones. discount. unitprice. select productid.Es de comentar que la instrucción IF puede ser anidada.

) Esta función permite unir textos. se encuentra entre comillas simples. A diferencia de ORACLE. es recomendable colocar el nombre del alias entre comillas simples. que solo permite dos valores. select productid. '%') as Descuento. constantes. se utiliza la función: Format(valor. Aplicando formatos de presentación a los datos obtenidos.10. quantity.2) as 'Con descuento' from order_details En este caso. EJERCICIO 4. varlo2. unitprice. fechas. lo que se destaca es que cuando deseamos que un valor numérico queremos que muestre un formato de presentación como por ejemplo 1. format((unitprice * quantity ) * ( 1 .. concat(discount * 100. (unitprice * quantity ) as Total. Sin embargo un equivalente a este es el uso del || (doble pipe) el cual sí permite concatenar más de dos valores.discount ).En este ejercicio se quiere destacar que cuando un alias no es una palabra sino que un conjunto de palabras. los cuales deberán ir separados por comas. . decimales) También. de esta forma ese será el titulo que se mostrará como nombre de columna: en el ejemplo la frase “Con descuento”.546. valores. . cuya sintaxis es: concat(valor1. se utiliza la función para concatenar datos..

select titleofcourtesy as titulo. por ejemplo cuando buscamos datos de texto que cumplan con un criterio.2) * 1 as 'Con descuento' from order_details EJERCICIO 6. Aplicando formatos de presentación a los datos obtenidos resolviendo el caso en que el valor con descuento aparece alineado a la izquierda. (unitprice * quantity ) as Total. quantity. hará que se muestre en mayúscula los datos de la columna lastname y en minúscula la columna firstname. por ejemplo: Where or or nombre = ‘Julio’ nombre = ‘JULIO’ nombre = ‘julio’ Sería mejor escribir la instrucción de la siguiente manera: Where upper(nombre) = ‘JULIO’ . select productid. UPPER(lastname) as Apellido. se multiplica por 1 para convertido en número. '%') as Descuento. concat(discount * 100. unitprice. Cuando se necesita que el contenido de una columna que está en minúscula y queremos pasarla a mayúscula se usa UPPER.discount ). Aclarando que esta instrucción puede ser válida en la instrucción WHERE. LOWER(firstname) as Nombre from employees En este caso veremos que el resultado que genere. format((unitprice * quantity ) * ( 1 .EJERCICIO 5. pero los datos pueden estar escritos de diferente manera.

pero que la penúltima sea la letra “a”. deberíamos escribir firstname like '%a_A%'. el cual indicará que en esa posición deberá existir cualquier carácter En ejemplo anterior. . EJERCICIO 7. select titleofcourtesy as titulo. UPPER(lastname) Apellido. se puede utilizar el guion bajo. además de la función de comodín %. podríamos obtener resultados como los siguientes: Carlos Sandra Samuel Si la instrucción la escribimos así: firstname like '%e_' estariamos indicando que requerimos que en la columna nombre termine con cualquier letra. veremos los posibles resultados. Búsqueda de datos en cuyo nombre la segunda posición posea la letra a. el cual reemplaza cualquier posible valor. UPPER(firstname) Nombre from employees where firstname like '_a%' En este caso. Por ejemplo estos serían algunos resultados: Raquel Samuel Herber Y si quisiéramos que si en la columna posee dos nombre pero queremos que la última letra del primer nombre sea una “a” y la primera del segundo nombre sea también una “a”. siempre comparara con un solo valor.Esto permitiría que indistinto como se encuentre el valor internamente.

Mostrar las órdenes que fueron realizados por empleados cuyo título es de señora. Obtener las ordenes cuya identificación del cliente estén en una lista predefinida select * .') Adelantando un poco el tema de queries anidados. EJERCICIO 10. Mostrar las órdenes que no fueron realizados por empleados cuyo título no sean el valor Mrs. la diferencia es que en este caso queremos los que no sean Señoras (‘Mrs’). pero que estas correspondan a los empleados que en la columna titleOfCourtesy posean el valor Mrs EJERCICIO 9. En caso de que no retorne resultados. select * from orders where employeeid not in (select employeeid from employees where titleOfCourtesy='Mrs') Este ejercicio básicamente es el mismo que el anterior. favor revisar el sql. select * from orders where employeeid in (select employeeid from employees where titleOfCourtesy='Mrs. en este ejercicio lo que se necesita es mostrar los datos de la tabla orders.Sandra Amanda Karla Alejandra EJERCICIO 8.

'ERNSH'.'HANAR'. EJERCICIO 11. Alternativa mejorada para obtener las ordenes cuya identificación del cliente NO estén en una lista predefinida select * from orders where customerid not in ('VINET'. Alternativa mejorada para obtener las ordenes cuya identificación del cliente estén en una lista predefinida select * from orders where customerid in ('VINET'.'HANAR'. sino solo uno. cuando nos dicen en requerimos aquellos datos que sean VINET y HANAR y ERNSH y FOLKO.'FOLKO') .'FOLKO') Cuando se tienen valores predefinidos. Lo que sucede es que hay varios registros que pueden tener esos posibles valores. sin embargo es común que se confunda el uso del “or” por un “and”. es decir el “in” EJERCICIO 12. lo cual no es correcto pues un campo no puede tener los 4 valores simultáneamente. lo mas recommendable es utilizar la instrucción de listas.'ERNSH'.from orders where customerid = 'VINET' or customerid = 'HANAR' or customerid = 'ERNSH' or customerid = 'FOLKO' Este ejemplo es bastante obvio. creemos que debemos utilizar un and. Por ejemplo.

FUNCIONES ALMACENADAS Ahora que hemos aprendido el uso de funciones predefinidas en la instrucción SELECT y en el WHERE. veremos a continuación que podemos crear nuestras propias funciones. pero la diferencia es que no deseamos esos valores. sino el resto que son diferentes.val2. funciones personalizadas.2) DETERMINISTIC BEGIN DECLARE result decimal(10. El ejemplo permitirá realizar las 4 operaciones básicas. ELSE SET result = -1. EJERCICIO 1. WHEN 4 THEN SET result = val1 / val2. CASE op WHEN 1 THEN SET result = val1 + val2.Este sería similar al ejercicio anterior. op int) RETURNS decimal(10.2) DEFAULT 0. . val2 int. END CASE. WHEN 3 THEN SET result = val1 * val2. es decir. para lo cual se requieren dos parámetros de entrada para los cálculos y uno que indica el tipo de operación: DELIMITER // CREATE FUNCTION operacion (val1 int. WHEN 2 THEN SET result = val1 . Creación de una Función de Base de Datos.

END // DELIMITER . EJERCICIO 2: Función para calcular el volumen de un objeto DELIMITER $$ CREATE FUNCTION volumen(radio FLOAT) RETURNS FLOAT DETERMINISTIC BEGIN DECLARE volume FLOAT. La función la podríamos llamar de la siguiente manera: . en el entendido que el tercer parámetro indica la operación que debe realizar con los operando siguientes: 1 = suma 2 = resta 3 = producto 4 = división Escriba las siguientes instrucciones y verifique el resultado: a) select operacion(3. END $$ DELIMITER . 4. 4. SET volume = (4/5)*PI()*POW(radio.RETURN result. 4)// Realice otras pruebas con otros parámetros para ver el resultado Puede realizar otras funciones que realicen otros tipos de cálculos. realizar las siguientes pruebas. Para probar la función.2). RETURN volume. 1)// b) select operación(3.

La función quedaría así: DELIMITER $$ CREATE FUNCTION calcularvalorventa(costo float. porganancia int) RETURNS float DETERMINISTIC BEGIN DECLARE vventa FLOAT default 0. Nombre varchar(30) not null. costo. el valor venta seria 2. Costo float not null. Cree una tabla llamada productos (código. . RETURN vventa. nombre.300.Select volumen(5). EJERCICIO 4: Ahora utilizaremos la función pero con datos que proceden de una base de datos. ejemplo si el costo es 2.15) as valorventa. EJERCICIO 3: Se necesita calcular el valor de venta de un producto sabiendo que tiene un costo y porcentaje de ganancia. SET vventa = costo +costo*porganancia/100. Esta función se puede usar de la siguiente manera con una tabla. Para llamar una funcion se hace dentro del select asi: select calcularvalorventa(2000. END $$ DELIMITER . cantidad) Create table productos ( Codigo int not null primary key.000 y el porcentaje de ganancia es 15. porganancia.

30).30.’avena alpina vaso’. not null Inserte varios datos.15.45). SET ganancia = costo*porganancia/100. Insert into productos values(1.’gasesosa 350’.10).’salsa tomate fruco 1000gr’. porganancia int) RETURNS float DETERMINISTIC BEGIN DECLARE ganancia FLOAT default 0.8). costo. int float not null.1300.150). EJERCICIO 5 Crear función para calcular ganancia Se puede crear otra función que calcule la ganancia así: DELIMITER $$ CREATE FUNCTION calcularganancia(costo float. Porganancia) as valorventa from productos. END $$ DELIMITER . calcularvalorventa(costo.’menta helada’.20. RETURN ganancia. Insert into productos values(3. Insert into productos values(4. de la siguiente manera: select codigo.850. Insert into productos values(2. Insert into productos values(5.800. Es posible que deba corregir algún carácter.100.25. Ahora usamos la función creada con datos de la tabla.5250.10.’arroz libra’. nombre.Porganancia Cantidad ). .

Porganancia) as valorventa. calcularganancia(costo. calcularvalorventa(costo. nombre. SELECT LastName INTO x FROM `employees` WHERE EmployeeID = i. END.Y lo podría utilizar así: select codigo. RETURN x. Porganancia) as ganancia from productos. costo. . EJERCICIO 6 Crear función para usar un sql con la base de datos Northwind delimiter $$ CREATE FUNCTION getLastName (i int) RETURNS TEXT BEGIN DECLARE x TEXT.

Y lo podría utilizar así: select getLastName (1). .$$ delimiter . Este último ejercicio ilustra las formas en que puede interactuar con la base de datos.