¿Qué son las funciones?
MySQL puede hacer mucho más que almacenar y recuperar datos . También podemos realizar manipulaciones en los datos antes de recuperarlos o guardarlos. Ahí es donde entran las funciones de MySQL. Las funciones son simplemente fragmentos de código que realizan algunas operaciones y luego devuelven un resultado. Algunas funciones aceptan parámetros mientras que otras funciones no los aceptan.
Veamos brevemente un ejemplo de función MySQL. De forma predeterminada, MySQL guarda los tipos de datos de fecha en el formato "AAAA-MM-DD". Supongamos que hemos creado una aplicación y nuestros usuarios quieren que la fecha se devuelva en el formato "DD-MM-AAAA", podemos usar la función DATE_FORMAT incorporada de MySQL para lograrlo. DATE_FORMAT es una de las funciones más utilizadas en MySQL. Lo veremos con más detalle a medida que desarrollemos la lección.
¿Por qué utilizar funciones?
Con base en el ejemplo dado en la introducción, las personas con experiencia en programación de computadoras pueden estar pensando "¿Por qué molestar las funciones de MySQL? Se puede lograr el mismo efecto con el lenguaje de programación / scripting?" Es cierto que podemos lograrlo escribiendo algunos procedimientos / funciones en el programa de aplicación.
Volviendo a nuestro ejemplo de DATE en la introducción, para que nuestros usuarios obtengan los datos en el formato deseado, la capa empresarial deberá realizar el procesamiento necesario.
Esto se convierte en un problema cuando la aplicación tiene que integrarse con otros sistemas. Cuando usamos funciones de MySQL como DATE_FORMAT, entonces podemos tener esa funcionalidad incrustada en la base de datos y cualquier aplicación que necesite los datos los obtiene en el formato requerido. Esto reduce la repetición de trabajo en la lógica empresarial y reduce las inconsistencias de datos.
Otra razón por la que deberíamos considerar el uso de funciones MySQL es el hecho de que puede ayudar a reducir el tráfico de red en aplicaciones cliente / servidor . Business Layer solo necesitará realizar llamadas a las funciones almacenadas sin la necesidad de manipular datos. En promedio, el uso de funciones puede ayudar a mejorar en gran medida el rendimiento general del sistema.
Tipos de funciones
Funciones integradas
MySQL viene con una serie de funciones integradas. Las funciones integradas son simplemente funciones que ya vienen implementadas en el servidor MySQL. Estas funciones nos permiten realizar diferentes tipos de manipulaciones sobre los datos. Las funciones integradas se pueden clasificar básicamente en las siguientes categorías más utilizadas.
- Funciones de cadenas : operan en tipos de datos de cadenas
- Funciones numéricas : operan con tipos de datos numéricos
- Funciones de fecha : operan con tipos de datos de fecha
- Funciones agregadas : operan en todos los tipos de datos anteriores y producen conjuntos de resultados resumidos.
- Otras funciones : MySQL también admite otros tipos de funciones integradas, pero limitaremos nuestra lección solo a las funciones mencionadas anteriormente.
Veamos ahora en detalle cada una de las funciones mencionadas anteriormente. Te estaremos explicando las funciones más utilizadas usando nuestro "Myflixdb".
Funciones de cadena
Ya vimos qué hacen las funciones de cadena. Veremos un ejemplo práctico que los usa. En nuestra tabla de películas, los títulos de las películas se almacenan usando combinaciones de letras minúsculas y mayúsculas. Supongamos que queremos obtener una lista de consulta que devuelva los títulos de las películas en mayúsculas. Podemos usar la función "UCASE" para hacer eso. Toma una cadena como parámetro y convierte todas las letras a mayúsculas. El script que se muestra a continuación demuestra el uso de la función "UCASE".
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
AQUÍ
- UCASE (`title`) es la función incorporada que toma el título como parámetro y lo devuelve en letras mayúsculas con el alias` upper_case_title`.
La ejecución del script anterior en MySQL workbench contra Myflixdb nos da los siguientes resultados que se muestran a continuación.
movie_id | title | UCASE('title') |
---|---|---|
16 | 67% Guilty | 67% GUILTY |
6 | Angels and Demons | ANGELS AND DEMONS |
4 | Code Name Black | CODE NAME BLACK |
5 | Daddy's Little Girls | DADDY'S LITTLE GIRLS |
7 | Davinci Code | DAVINCI CODE |
2 | Forgetting Sarah Marshal | FORGETTING SARAH MARSHAL |
9 | Honey mooners | HONEY MOONERS |
19 | movie 3 | MOVIE 3 |
1 | Pirates of the Caribean 4 | PIRATES OF THE CARIBEAN 4 |
18 | sample movie | SAMPLE MOVIE |
17 | The Great Dictator | THE GREAT DICTATOR |
3 | X-Men | X-MEN |
MySQL admite varias funciones de cadena. Para obtener una lista completa de todas las funciones de cadena integradas, consulte este enlace http://dev.mysql.com/doc/refman/5.0/en/string-functions.html en el sitio web de MySQL.
Funciones numéricas
Como se mencionó anteriormente, estas funciones operan en tipos de datos numéricos. Podemos realizar cálculos matemáticos sobre datos numéricos en las declaraciones SQL.
Operadores aritemáticos
MySQL admite los siguientes operadores aritmáticos que se pueden utilizar para realizar cálculos en las declaraciones SQL.
Nombre |
Descripción |
---|---|
DIV |
División entera |
/ |
División |
- |
Sustracción |
+ |
Adición |
* |
Multiplicación |
% o MOD |
Módulo |
Veamos ahora ejemplos de cada uno de los operadores anteriores.
División de enteros (DIV)
SELECT 23 DIV 6 ;
La ejecución del script anterior nos da los siguientes resultados.
3
Operador de división (/)
Veamos ahora el ejemplo del operador de división. Modificaremos el ejemplo DIV.
SELECT 23 / 6 ;
La ejecución del script anterior nos da los siguientes resultados.
3.8333
Operador de resta (-)
Veamos ahora el ejemplo del operador de resta. Usaremos los mismos valores que en los dos ejemplos anteriores.
SELECT 23 - 6 ;
Ejecutar el script anterior nos da 17
Operador de suma (+)
Veamos ahora el ejemplo del operador de suma. Modificaremos el ejemplo anterior.
SELECT 23 + 6 ;
Ejecutar el script anterior nos da 29
Operador de multiplicación (*)
Veamos ahora el ejemplo del operador de multiplicación. Usaremos los mismos valores que en los ejemplos anteriores.
SELECT 23 * 6 AS `multiplication_result`;
La ejecución del script anterior nos da los siguientes resultados.
resultado_multiplicación |
138 |
Operador de módulo (-)
El operador de módulo divide N por M y nos da el resto. Veamos ahora el ejemplo del operador de módulo. Usaremos los mismos valores que en los ejemplos anteriores.
SELECT 23 % 6 ;
O
SELECT 23 MOD 6 ;
Ejecutar el script anterior nos da 5
Veamos ahora algunas de las funciones numéricas comunes en MySQL.
Piso : esta función elimina los lugares decimales de un número y lo redondea al número más bajo más cercano. El script que se muestra a continuación demuestra su uso.
SELECT FLOOR(23 / 6) AS `floor_result`;
La ejecución del script anterior nos da los siguientes resultados.
Floor_result |
3 |
Redondear : esta función redondea un número con posiciones decimales al número entero más cercano. La secuencia de comandos que se muestra a continuación demuestra su uso.
SELECT ROUND(23 / 6) AS `round_result`;
La ejecución del script anterior nos da los siguientes resultados.
Round_result |
4 |
Rand : esta función se utiliza para generar un número aleatorio, su valor cambia cada vez que se llama a la función. El script que se muestra a continuación demuestra su uso.
SELECT RAND() AS `random_result`;
Funciones almacenadas
Las funciones almacenadas son como funciones integradas, excepto que usted mismo tiene que definir la función almacenada. Una vez que se ha creado una función almacenada, se puede utilizar en sentencias SQL como cualquier otra función. La sintaxis básica para crear una función almacenada es la que se muestra a continuación.
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
AQUÍ
- "CREATE FUNCTION sf_name ([parámetro (s)])" es obligatorio y le dice al servidor MySQL que cree una función llamada `sf_name 'con parámetros opcionales definidos entre paréntesis.
- El "tipo de datos RETURNS" es obligatorio y especifica el tipo de datos que debe devolver la función.
- "DETERMINISTIC" significa que la función devolverá los mismos valores si se le proporcionan los mismos argumentos.
- "STATEMENTS" es el código de procedimiento que ejecuta la función.
Veamos ahora un ejemplo práctico que implementa una función incorporada. Supongamos que queremos saber qué películas alquiladas han pasado de la fecha de devolución. Podemos crear una función almacenada que acepte la fecha de retorno como parámetro y luego la compare con la fecha actual en el servidor MySQL. Si la fecha actual es menor que la fecha de regreso de la película, devolvemos "No", de lo contrario devolvemos "Sí". El guión que se muestra a continuación nos ayuda a lograrlo.
DELIMITER |CREATE FUNCTION sf_past_movie_return_date (return_date DATE)RETURNS VARCHAR(3)DETERMINISTICBEGINDECLARE sf_value VARCHAR(3);IF curdate() > return_dateTHEN SET sf_value = 'Yes';ELSEIF curdate() <= return_dateTHEN SET sf_value = 'No';END IF;RETURN sf_value;END|
Al ejecutar el script anterior, se creó la función almacenada `sf_past_movie_return_date`.
Probemos ahora nuestra función almacenada.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
La ejecución del script anterior en MySQL workbench contra myflixdb nos da los siguientes resultados.
movie_id | membership_number | return_date | CURDATE() | sf_past_movie_return_date('return_date') |
---|---|---|---|---|
1 | 1 | NULL | 04-08-2012 | NULL |
2 | 1 | 25-06-2012 | 04-08-2012 | yes |
2 | 3 | 25-06-2012 | 04-08-2012 | yes |
2 | 2 | 25-06-2012 | 04-08-2012 | yes |
3 | 3 | NULL | 04-08-2012 | NULL |
Funciones definidas por el usuario
MySQL también admite funciones definidas por el usuario que amplían MySQL. Las funciones definidas por el usuario son funciones que puede crear utilizando un lenguaje de programación como C, C ++, etc. y luego agregarlas al servidor MySQL. Una vez añadidos, pueden utilizarse como cualquier otra función.
Resumen
- Las funciones nos permiten mejorar las capacidades de MySQL.
- Las funciones siempre devuelven un valor y, opcionalmente, pueden aceptar parámetros.
- Las funciones integradas son funciones que se envían con MySQL. Se pueden clasificar de acuerdo con los tipos de datos con los que operan, es decir, cadenas, fecha y funciones integradas numéricas.
- Las funciones almacenadas son creadas por el usuario dentro del servidor MySQL y pueden usarse en declaraciones SQL.
- Las funciones definidas por el usuario se crean fuera de MySQL y se pueden incorporar al servidor MySQL.