Vous êtes sur la page 1sur 14

UNIVERSIDAD FRANCISCO GAVIDIA

FACULTAD DE INGENIERIA Y SISTEMAS


PRACTICA
CICLO II 2016
Asignatura: Administracin 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 prctica es conocer el uso de FUNCIONES Y FORMATOS
que posee MySQL. Otras bases de datos tendrn 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 opcin del
men denominado SQL, en la cual al seleccionarlo, le mostrar una ventana
del editor SQL para que ingrese las instrucciones que se le indicarn y podr
verificar el resultados al presionar el botn Continuar.
La base puede ser descargada ac:
https://code.google.com/archive/p/northwindextended/downloads
Si existe algn error en la instruccin, 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

En este ejercicio muy sencillo, veremos que lo nico que


deseamos es verificar el ttulo que posee cada uno de los
registros. Esto ser importante para los prximos ejercicios que
se obtendrn de la tabla, pues en los siguientes ejercicios, esto
nos permitir realizar consultas con otras caractersticas

EJERCICIO 2. El uso de la funcin IF en MYSQL permite genera datos


condicionales en los campos de resultado. En Oracle se utiliza la
instruccin DECODE.
select if(titleofcourtesy='Mrs.','Sra','Sr') as titulo,
lastname,
firstname
from employees
La sintaxis del IF es el siguiente:
if (condicin, resultado si es verdadero, resultado si es falso)

Es de comentar que la instruccin IF puede ser anidada, es decir, que


dependiendo de lo que deseamos obtener, podemos colocar otro if dentro
del rea para el resultado si es verdadero o en el rea si el resultado es
falso, esto con la finalidad de hacer nuevas evaluaciones. Un ejemplo del
anidamiento sera
if (condicin, resultado si es verdadero,
if (condicin, resultado si es verdadero,
resultado si es falso))
Un ejemplo sera:
Queremos que si en la columna titleofcourtesy posee los siguientes
datos, que aparezcan los siguientes valores respectivamente:
Mr.
Mrs.
Ms.
Dr.

->
->
->
->

Sr.
Sra.
Srita.
Dr.

Por lo que el Query de traduccin quedara como se muestra a


continuacin.
Select if (titleofcourtesy = Mr., Sr.,
if (titleofcourtesy = Mrs., Sra.,
if (titleofcourtesy = Ms., Srita., Dr.))) as titulo
lastname,
firstname
from employees

EJERCICIO 3. Obtener el detalle de las ventas, calculando el descuento


y lo que deber cancelarse con el descuento.
select productid,
unitprice,
quantity,
discount,
(unitprice * quantity ) as Total,
(unitprice * quantity ) * ( 1 - discount ) as 'Con descuento'
from order_details

En este ejercicio se quiere destacar que cuando un alias no es una palabra


sino que un conjunto de palabras, es recomendable colocar el nombre del
alias entre comillas simples, de esta forma ese ser el titulo que se
mostrar como nombre de columna: en el ejemplo la frase Con
descuento, se encuentra entre comillas simples.

EJERCICIO 4. Aplicando formatos de presentacin a los datos


obtenidos.
select productid,
unitprice,
quantity,
concat(discount * 100, '%') as Descuento,
(unitprice * quantity ) as Total,
format((unitprice * quantity ) * ( 1 - discount ),2) as 'Con
descuento'
from order_details

En este caso, lo que se destaca es que cuando deseamos que un valor


numrico queremos que muestre un formato de presentacin como por
ejemplo 1,546.10, se utiliza la funcin:
Format(valor, decimales)
Tambin, se utiliza la funcin para concatenar datos, cuya sintaxis es:
concat(valor1, varlo2, ...)
Esta funcin permite unir textos, constantes, valores, fechas, los cuales
debern ir separados por comas.
A diferencia de ORACLE, que solo permite dos valores. Sin embargo un
equivalente a este es el uso del || (doble pipe) el cual s permite
concatenar ms de dos valores.

EJERCICIO 5. Aplicando formatos de presentacin a los datos obtenidos


resolviendo el caso en que el valor con descuento aparece alineado a la
izquierda, se multiplica por 1 para convertido en nmero.
select productid,
unitprice,
quantity,
concat(discount * 100, '%') as Descuento,
(unitprice * quantity ) as Total,
format((unitprice * quantity ) * ( 1 - discount ),2) * 1 as 'Con
descuento'
from order_details

EJERCICIO 6. Cuando se necesita que el contenido de una columna que


est en minscula y queremos pasarla a mayscula se usa UPPER.
select titleofcourtesy as titulo,
UPPER(lastname) as Apellido,
LOWER(firstname) as Nombre
from employees

En este caso veremos que el resultado que genere, har que se muestre
en mayscula los datos de la columna lastname y en minscula la
columna firstname.
Aclarando que esta instruccin puede ser vlida en la instruccin WHERE,
por ejemplo cuando buscamos datos de texto que cumplan con un criterio,
pero los datos pueden estar escritos de diferente manera, por ejemplo:
Where
or
or

nombre = Julio
nombre = JULIO
nombre = julio

Sera mejor escribir la instruccin de la siguiente manera:


Where

upper(nombre) = JULIO

Esto permitira que indistinto como se encuentre el valor internamente,


siempre comparara con un solo valor.

EJERCICIO 7. Bsqueda de datos en cuyo nombre la segunda posicin


posea la letra a.
select

titleofcourtesy as titulo,
UPPER(lastname) Apellido,
UPPER(firstname) Nombre

from employees
where firstname like '_a%'

En este caso, adems de la funcin de comodn %, el cual reemplaza


cualquier posible valor, se puede utilizar el guion bajo, el cual indicar
que en esa posicin deber existir cualquier carcter
En ejemplo anterior, podramos obtener resultados como los siguientes:
Carlos
Sandra
Samuel
Si la instruccin la escribimos as:
firstname like '%e_'
estariamos indicando que requerimos que en la columna nombre termine
con cualquier letra, pero que la penltima sea la letra a. Por ejemplo
estos seran algunos resultados:
Raquel
Samuel
Herber
Y si quisiramos 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 tambin una a, deberamos escribir
firstname like '%a_A%', veremos los posibles resultados.

Sandra Amanda
Karla Alejandra
EJERCICIO 8. Mostrar las rdenes que fueron realizados por empleados
cuyo ttulo es de seora.
select * from orders
where employeeid in
(select employeeid
from employees
where titleOfCourtesy='Mrs.')
Adelantando un poco el tema de queries anidados, en este ejercicio lo que
se necesita es mostrar los datos de la tabla orders, pero que estas
correspondan a los empleados que en la columna titleOfCourtesy posean
el valor Mrs

EJERCICIO 9. Mostrar las rdenes que no fueron realizados por


empleados cuyo ttulo no sean el valor Mrs.
select * from orders
where employeeid not in
(select employeeid
from employees
where titleOfCourtesy='Mrs')

Este ejercicio bsicamente es el mismo que el anterior, la diferencia es


que en este caso queremos los que no sean Seoras (Mrs).
En caso de que no retorne resultados, favor revisar el sql.

EJERCICIO 10. Obtener las ordenes cuya identificacin del cliente estn
en una lista predefinida
select *

from orders
where
customerid = 'VINET' or
customerid = 'HANAR' or
customerid = 'ERNSH' or
customerid = 'FOLKO'

Este ejemplo es bastante obvio, sin embargo es comn que se confunda


el uso del or por un and. Por ejemplo, cuando nos dicen en
requerimos aquellos datos que sean VINET y HANAR y ERNSH y FOLKO,
creemos que debemos utilizar un and, lo cual no es correcto pues un
campo no puede tener los 4 valores simultneamente, sino solo uno. Lo
que sucede es que hay varios registros que pueden tener esos posibles
valores.

EJERCICIO 11. Alternativa mejorada para obtener las ordenes cuya


identificacin del cliente estn en una lista predefinida
select *
from orders
where customerid in ('VINET','HANAR','ERNSH','FOLKO')

Cuando se tienen valores predefinidos, lo mas recommendable es utilizar


la instruccin de listas, es decir el in

EJERCICIO 12. Alternativa mejorada para obtener las ordenes cuya


identificacin del cliente NO estn en una lista predefinida
select *
from orders
where customerid not in ('VINET','HANAR','ERNSH','FOLKO')

Este sera similar al ejercicio anterior, pero la diferencia es que no


deseamos esos valores, sino el resto que son diferentes.

FUNCIONES ALMACENADAS
Ahora que hemos aprendido el uso de funciones predefinidas en la instruccin
SELECT y en el WHERE, veremos a continuacin que podemos crear nuestras
propias funciones, es decir, funciones personalizadas.

EJERCICIO 1. Creacin de una Funcin de Base de Datos.


El ejemplo permitir realizar las 4 operaciones bsicas, para lo cual se
requieren dos parmetros de entrada para los clculos y uno que indica el tipo
de operacin:
DELIMITER //
CREATE FUNCTION operacion (val1 int, val2 int, op int)
RETURNS decimal(10,2)
DETERMINISTIC
BEGIN
DECLARE result decimal(10,2) DEFAULT 0;
CASE op
WHEN 1 THEN SET result = val1 + val2;
WHEN 2 THEN SET result = val1 - val2;
WHEN 3 THEN SET result = val1 * val2;
WHEN 4 THEN SET result = val1 / val2;
ELSE SET result = -1;
END CASE;

RETURN result;
END //
DELIMITER ;
Para probar la funcin, realizar las siguientes pruebas, en el entendido
que el tercer parmetro indica la operacin que debe realizar con los
operando siguientes:
1 = suma
2 = resta
3 = producto
4 = divisin
Escriba las siguientes instrucciones y verifique el resultado:
a)
select operacion(3, 4, 1)//
b)
select operacin(3, 4, 4)//
Realice otras pruebas con otros parmetros para ver el resultado
Puede realizar otras funciones que realicen otros tipos de clculos.

EJERCICIO 2: Funcin para calcular el volumen de un objeto


DELIMITER $$
CREATE FUNCTION volumen(radio FLOAT)
RETURNS FLOAT DETERMINISTIC
BEGIN
DECLARE volume FLOAT;
SET volume = (4/5)*PI()*POW(radio,2);
RETURN volume;
END $$
DELIMITER ;

La funcin la podramos llamar de la siguiente manera:

Select volumen(5);
EJERCICIO 3: Se necesita calcular el valor de venta de un producto
sabiendo que tiene un costo y porcentaje de ganancia, ejemplo si el
costo es 2,000 y el porcentaje de ganancia es 15, el valor venta seria
2,300.
La funcin quedara as:
DELIMITER $$
CREATE FUNCTION calcularvalorventa(costo float, porganancia int)
RETURNS float DETERMINISTIC
BEGIN
DECLARE vventa FLOAT default 0;
SET vventa = costo +costo*porganancia/100;
RETURN vventa;
END $$
DELIMITER ;

Para llamar una funcion se hace dentro del select asi:


select calcularvalorventa(2000,15) as valorventa;

EJERCICIO 4: Ahora utilizaremos la funcin pero con datos que


proceden de una base de datos.
Esta funcin se puede usar de la siguiente manera con una tabla.
Cree una tabla llamada productos (cdigo, nombre, costo, porganancia,
cantidad)
Create table productos
(
Codigo
int
not null primary key,
Nombre
varchar(30) not null,
Costo
float
not null,

Porganancia
Cantidad
);

int
float

not null,
not null

Inserte varios datos.


Insert into productos values(1,arroz libra,850,15,10);
Insert into productos values(2,gasesosa 350,800,20,30);
Insert into productos values(3,avena alpina vaso,1300,10,45);
Insert into productos values(4,menta helada,25,100,150);
Insert into productos values(5,salsa tomate fruco 1000gr,5250,30,8);

Es posible que deba corregir algn carcter.


Ahora usamos la funcin creada con datos de la tabla, de la
siguiente manera:
select codigo, nombre, costo,
calcularvalorventa(costo, Porganancia) as valorventa
from productos;
EJERCICIO 5 Crear funcin para calcular ganancia
Se puede crear otra funcin que calcule la ganancia as:
DELIMITER $$
CREATE FUNCTION calcularganancia(costo float, porganancia int)
RETURNS float DETERMINISTIC
BEGIN
DECLARE ganancia FLOAT default 0;
SET ganancia = costo*porganancia/100;
RETURN ganancia;
END $$
DELIMITER ;

Y lo podra utilizar as:


select codigo, nombre, costo,
calcularvalorventa(costo, Porganancia) as valorventa,
calcularganancia(costo, Porganancia) as ganancia
from productos;

EJERCICIO 6 Crear funcin para usar un sql con la base de datos


Northwind

delimiter $$
CREATE FUNCTION getLastName (i int) RETURNS TEXT
BEGIN
DECLARE x TEXT;
SELECT LastName INTO x FROM `employees` WHERE EmployeeID = i;
RETURN x;
END;

$$
delimiter ;

Y lo podra utilizar as:

select getLastName (1);

Este ltimo ejercicio ilustra las formas en que puede interactuar con la base de
datos.

Vous aimerez peut-être aussi