1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* Ejercicio 15: Escribir un procedimiento que reciba una cadena y visualice el apellido y el número de empleado de todos los empleados cuyo apellido contenga la cadena especificada. Al finalizar visualizar el número de empleados mostrados. */ delimiter $$ drop procedure if exists 1x15 $$ create procedure 1x15(in cad tinytext) begin /* -- Mostrando las coincidencias enumerando las filas: set @col = 0; set @cadena = concat( 'select (@col := @col +1) as "Fila", e.emp_no as "Num. empleado", e.apellido as "Apellido" from empleados e where e.apellido like "%', cad ,'%"' ); prepare consulta from @cadena; execute consulta; deallocate prepare consulta; set @cadena = null; set @col = null; */ -- Mostrando las coincidencias y el total en dos tablas (y sin necesidad de preparar la sentencia): select e.emp_no as "Num. empleado", e.apellido as "Apellido" from empleados e where e.apellido like concat("%", cad ,"%"); select count(*) as 'Numero de empleados' from empleados e where e.apellido like concat("%", cad ,"%"); end $$ delimiter ; -- call 1x15('MA'); |
Categoría: Programación
1×14: Consultas a varias tablas con Group by
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/* Ejercicio 14: Codificar un procedimiento que muestre el nombre de cada departamento y el número de empleados que tiene. */ delimiter $$ drop procedure if exists 1x14 $$ create procedure 1x14() begin select d.dnombre as 'Nombre departamento', count(e.dep_no) as 'Numero de empleados' from departamentos d, empleados e where d.dep_no = e.dep_no group by d.dep_no; end $$ delimiter ; -- call 1x14(); |
1×13: Mostrar información por orden descendente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* Ejercicio 13: TABLAS empleados y departamentos (script cargatablas1.sql) Desarrollar un procedimiento que visualice el apellido y la fecha de alta de todos los empleados ordenados por apellido. */ delimiter $$ drop procedure if exists 1x13 $$ create procedure 1x13() begin select apellido as 'Apellido', fecha_alta as 'Fecha de alta' from empleados order by apellido asc; end $$ delimiter ; -- call 1x13(); |
1×12: Sentencias preparadas, borrar columna de una tabla
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* Ejercicio 12: Realizar un procedimiento que acepte dos cadenas: El nombre de una tabla y el de una columna y elimine la columna de la tabla. No es necesario que el procedimiento controle antes si existe la tabla o columna. */ delimiter $$ drop procedure if exists 1x12 $$ create procedure 1x12( in tabla tinytext, in columna tinytext ) begin -- Se concatenan las diferentes partes de la consulta: set @cadena = concat('alter table ', tabla, ' drop ', columna ); prepare consulta from @cadena; -- Se prepara la consulta. execute consulta; -- Se ejecuta. deallocate prepare consulta; -- Se borra la consulta preparada. set @cadena = null; -- Se borra la cadena. end $$ delimiter ; -- call 1x12('empleados','nomem'); |
1×11: Devuelve parámetros por valor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* Ejercicio 11: Realizar un procedimiento que acepte un departamento y devuelva mediante dos parámetros de tipo OUT su número de director (director) y presupuesto. */ delimiter $$ drop procedure if exists 1x11 $$ create procedure 1x11( in elDepartamento tinytext, out numDirector int, out presupuesto int ) begin -- Dos formas de guardar la consulta, la primera con into y la segunda con set: select direc into numDirector from departamentos where nomde like elDepartamento; set presupuesto = ( select presu from departamentos where nomde like elDepartamento ); end $$ delimiter ; -- call 1x11( 'FINANZAS', @numDirector, @presupuesto ); -- select @numDirector as 'ID Director', @presupuesto as 'Presupuesto'; |
1×10: Consulta triple anidada con un varios valores
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* Ejercicio 10: Realizar un procedimiento que acepte un centro como argumento y devuelva (visualice) todos los datos de los empleados que en él trabajan. */ delimiter $$ drop procedure if exists 1x10 $$ create procedure 1x10(in elCentro varchar(30)) begin select * from empleados where numde in ( select numde from departamentos where numce = ( select numce from centros where nomce like elCentro ) ); end $$ delimiter ; -- call 1x10('RELACION CON CLIENTES'); |
1×09: Consulta doble anidada con un único valor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* Ejercicio 9: Tablas Centros/Departamentos/Empleados (script primeros_pasos.sql) Realizar un procedimiento que acepte un departamento como argumento y devuelva (visualice) todos los datos de los empleados que en él trabajan. */ delimiter $$ drop procedure if exists 1x09 $$ create procedure 1x09( in elDepartamento varchar(30) ) begin select * from empleados where numde = ( select numde from departamentos where nomde like elDepartamento ); end $$ delimiter ; -- call 1x09('SECTOR SERVICIOS'); |
1×08: Descompón un importe de euros en billetes y monedas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/* Ejercicio 8: Implementar un procedimiento que reciba un importe y visualice el desglose del cambio en unidades monetarias de céntimos de €, 1€, 2€, 5€, 10€, 50€. Ej. 58.9 = 1 billete de 50€, 1 billete de 5 €, 3 monedas de 1€ y 90 céntimos de € */ delimiter $$ drop procedure if exists 1x07 $$ create procedure 1x07(in e double) begin # Variables: declare euros integer default e div 1; #Parte entera declare centimos integer default truncate( (e-floor(e)), 2 )*100 div 1; #Parte decimal declare cincuentaEuros, diezEuros, dosEuros, unEuro, cincuentaCents, veinteCents, cincoCents, dosCents, unCents integer default 0; # Euros: set cincuentaEuros = euros div 50; set diezEuros = euros mod 50 div 10; set dosEuros = euros mod 50 mod 10 div 2; set unEuro = euros mod 50 mod 10 mod 2 div 1; # Centimos: set cincuentaCents = centimos div 50; set veinteCents = centimos mod 50 div 20; set cincoCents = centimos mod 50 mod 20 div 5; set dosCents = centimos mod 50 mod 20 mod 5 div 2; set unCents = centimos mod 50 mod 20 mod 5 mod 2 div 1; # Muestra el resultado de forma desglosada: select e as 'Total', if( cincuentaEuros = 0, null, cincuentaEuros ) as '50€', if( diezEuros = 0, null, diezEuros ) as '10€', if( dosEuros = 0, null, dosEuros ) as '2€', if( unEuro = 0, null, unEuro ) as '1€', if( cincuentaCents = 0, null, cincuentaCents ) as '0,50€', if( veinteCents = 0, null, veinteCents ) as '0,20€', if( cincoCents = 0, null, cincoCents ) as '0,05€', if( dosCents = 0, null, dosCents ) as '0,02€', if( unCents = 0, null, unCents ) as '0,01€' ; end $$ delimiter ; -- call 1x07(524.60); |