viernes, 29 de marzo de 2013

MYSQL MIniTutorial parte 4

Introducion al minitutorial parte 4

Bievenidos ya la parte 4 :P Uff rapido que pasa el tiempo jejeje.... bueno en esta parte espero ver funciones de mysql, una cosa que cabe aclarar aqui no creamos nuestros "Scripts" como al final de cada capitulo de estas series, simplemente por que como son funciones solo es cuestion de saber aplicarlas, es decir, ya sabemos todo lo anterior, entonces definire un pequeño concepto de cada funcion, con su sintaxis y ejemplo :D de esta manera ustedes pueden aplicarlo en cualquier consulta a la base de datos :D


Funciones

Bueno no se como explicarselos, asi que pondre un ejemplo a mi modo, has visto alguna ves una ¿funcion de php? donde tu describes lo que haga esa funcion y les pasas unos parametros, por ejemplo:

function nombre(parametro1,parametro2,parametron){
y aqui va lo que realiza dicha funcion :D
}

en este caso entonces digamos que mysql tiene una funcion, por ejemplo una que vimos en un capitulo anterior asi de "rapidin" fue la funcion count() que contaba el numero de registros, entonces, digamos que es algo asi:

function count(tabla){
cuenta los numeros de registros del parametro tabla y me lo devuelve
}

en este caso la accion es lo importante que es lo que realiza :P
entonces, una cosa bien clara aqui es que no puse el codigo de count por que realmente no lo se :P XD pero eso es lo que realizaria, asi que las funciones sirven para no hacer tanto trabajo y ayudarnos en muchas ocasiones :D


Bueno empezare poniendo funciones que pueden ser realmente utiles.... si se me pasa alguna, por favor en los comentarios haganmelo saber :D

Estas son algunas de las funciones que utilizan valores numericos.....antes decirles que sino agrego la sintaxis en alguna de estas funciones es por que son utilizadas en las columnas aunque no solo ahi sino en subconsultas... clausula where.. como hemos venido viendo :P

Funciones Matematicas
No no estoy hablando de las funciones que te enseñan en el cole, donde tienes que saber que numero se acerca a tal... xD sino a las funciones de mysql donde utilizamos valores numericos y se utiliza matematicas, aunque en este caso pondre ejemplo de pura aritmetica para no acomplejarlos :P

Count()
Cuenta los registros

Sintaxis:

Select count(nombre_columna) from nombre_tabla;
select count(*) from tabla;

en este caso tenemos dos sintaxis, veremos los ejemplos y explicaremos un poco :D

Primero seleccionamos todos los registros desde la tabla personas....
como ves tenemos 3 filas....
entonces seleccionamos count(apellido) as contando desde personas....
explico esta parte de count....

count(apellido) decimos que nos cuente el numero de registros de la columna apellidos, en este caso son 3
y luego le damos un alias para que se llame contando
y es exactamente lo que nos muestra :D

pero que pasa si agregamos un registro nuevo ¿con un valor nulo o vacio?

Entonces como puedes ver, el valor nulo no es contado y sigue seleccionando 3...

Entonces podriamos usar * (todos) para contar todos los registros, count(*), de esta manera si no sabemos si un valor es nulo, pues igual no seleccionaria todos los registros :D


Una sintaxis que no mencione arriba por que no es muy usada la verdad, pero aveces puede resultarle util, es usar distinct, asi seleccionaria valores distintos, es decir, que no esten repetidos, un ejemplo lo hariamos con la tabla  pedidos:

 Como ves en este caso, tenemos 6 clientes, pero resulta ser que hay clientes que estan repetidos y son los mismos clientes, entonces seleccionamos valores que no esten repetidos con distinct, lo que nos contaria en realidad que son 3 clientes....

seleccionar y contar valores distintos de la columna clientes desde la tabla pedidos;

seria una forma de interpretarlo....

Otro ejemplo usando count es como lo vimos en los minitutos anteriores donde agregabamos group by para poder ordenar registros utilizando funciones, lo recuerdas?


Avg()

Viene del ingles Average siendo su sustantivo en español Promedio aunque tambien se le puede llamar media, el promedio se saca de la siguiente manera....
la suma de todos los registros dividido entre el numero de registros
bueno si es que no me di a entender muy bien les dejo un ejemplo que encontre en kioskea.net
Promedio:
Es la media aritmética y se calcula sumando un grupo de números y dividiendo a continuación por el recuento de dichos números.
Por ejemplo,
el promedio de 2, 3, 3, 5, 7 y 10
es: 30 dividido por 6, que es 5.

Ahi tienen el ejemplo mas claro :)

 Sintaxis:

select avg(nombre_columna) from tabla;

Veamos un ejemplo:

Lo primero que hemos hecho en el ejemplo es seleccionar todos los registros desde la tabla pedidos....
si te fijas luego seleccionamos el promedio de la columna precio_pedido desde la tabla pedidos.
Si sacamos el promedio vemos que esta en lo correcto....
200+1000+1600+700+300+100=5700/6=950

Max()

Devuelve el maximo valor  de una columna.
Sintaxis:
Select max(nombre_columna) from tabla;

En este caso tenemos que el valor maximo de la columna precio_pedido es 2000 y es lo que nos devuelve cuando usamos la sintaxis :D

Min()

Al contrario de la anterior devuelve el valor minimo de una columna....
Sintaxis:
select min(nombre_columna) from tabla;


Como puedes ver en el ejemplo anterior, solo aplicamos la sintaxis y podemos ver que el valor minimo de la columna precio_pedido es 100.

Sum()

Devuelve la suma de una columna.
Sintaxis:
select sum(nombre_columna) from tabla;


Como puedes ver solo realizamos la sintaxis, en este caso puedes ver mas arriba donde seleccionamos todos los campos para comprobar esto, igual habiamos realizado la suma en la funcion avg() que era para el promedio....

Round()

Redondea un valor numerico con punto decimal al valor mas cercano.
Sintaxis:
select round(nombre_columna) from tabla where id=1;

en este caso le digo que eliga un solo valor por que es necesario un solo valor numerico ...
Como en este ejemplo no tengo alguna con valores con punto decimal mostrare un ejemplo utilizando la clausula select, de todas maneras es aplicable con la sintaxis que describi arriba :P, solo que en vez de especificar la columna especificare el valor numerico para que vean como funciona :D


Truncate()
Esto lo que hace es truncar un numero matematicamente hablando, para ello les dejo un concepto de wikipedia bien definido:
(Truncamiento) En el subcampo matemático del análisis numérico, truncamiento es el término usado para reducir el número de dígitos a la derecha del punto decimal, descartando los menos significativos.

Sintaxis:
Truncate(valor_numerico,cuantos_valores_numericos_despues_del_punto_decimal)

 Entonces un ejemplo:

Para no hacerlo muy largo explicare asi "rapidin" :p
1.- truncamos 1.56 y le decimos que queremos 1 decimal despues del punto a la derecha
2.- truncamos 1.56 y le decimos que queremos 0 decimales despues del punto a la derecha
3.- truncamos 1.5666666 y le decimos que queremos 2 decimales despues del punto a la derecha

Como puedes ver es facil de comprender :P

Floor()
Este lo que hace es redondear hacia "abajo" en el caso de round() digamos que redondea al valor mas "cercano" en este caso redondeamos hacia abajo. por ejemplo:

tenemos un numero 1.56 si lo redondeamos hacia abajo seria 1, en el otro caso esto es interesante por que si te fijas bien el numero esta hacia abajo ya, es decir, el numero es negativo... entonces si lo redondeas hacia abajo seria 2 por que? simplemente por que es un numero negativo es decir si lo hacemos mas negativo seria 2 :D

SQRT()

 Con esta funcion podemos devolver la raiz cuadrada de un numero, que es la raiz cuadrada? XDDD pues es un numero que elevado 2 veces da el mismo numero que teniamos... mmm creo que no me explique bien, pero para ello les traigo la definicion de wikipedia, que siempre nos salva :D

En las ciencias matemáticas, se llama raíz cuadrada de un número (a veces abreviada como raíz a secas) a aquel otro que siendo mayor o igual que cero, elevado al cuadrado, es igual al primero.

Entonces ya sabemos la definicion ^^, pues veamos un ejemplo :D


Entonces aplicando el concepto o la definicion bien dicha de wikipedia sabemos que 4x4 es 16 siendo esto se pasa de 14 entonces tenemos que recurrir a puntos decimales siendo 3.7416573867739413^2 igual a 14
los dos ultimos ejemplos son mas faciles
2^2 es 4
3^2 es 9

 Pow() o Power()

Como vimos en la funcion sqtr() deciamos que elevavamos el valor a la potencia 2, pues pow o power es eso mismo elevar a una potencia indicada...
Una potencia es un numero multiplicado por si mismo un numero n de veces....

pow(numero_a_elevar,potencia_a_elevar);

Aplicando el concepto anterior, ponemos que
3^2 es 9 con esto tambien como en el ejemplo anterior sabemos que 3 es la raiz de 9
^ significa la potencia, elevar a la....
como ves en el ejemplo utilizamos pow y power que viene siendo lo mismo nada mas que a mi se me hace mas facil de recordar power por su abreviacion jejeje

2^2 es 2
3.7416573867739413^2 es 14
5^3 es 125

Como dije arriba casi al principio de este minituto en este caso no me adentrare mucho en las funciones y solo es para dar una pequeña explicacion de como se usan y pues casi todo es saber matematicas en estas funciones que les estoy poniendo :P

CRC32()

Este es muy utilizado en las paginas web cuando deseas comprobar un archivo, es decir, por ejemplo, digamos que te subes una archivo a mega :D y el archivo se corrompio al subirlo o al bajarlo si tu das un codigo crc32 para que verifiquen que no le esta roto o corrompido el archivo, es decir, para que ellos se den cuenta que es identico a tu archivo, entonces funciona perfectamente, aunque tambien suelen utilizarse los md5 y demas encriptaciones.... que no son nada mas que matematicas :D

Despues de darle una "pequeña platica ahi xD" entonces veamos un ejemplo:

Lo que hace es indicarle un parametro y devuelve un valor de redundancia ciclica, para entenderlo mejor es un valor random o aleatorio.... ahorita abajo veremos un ejemplo con una funcion random :D

Rand()

Esta nos devuelve un valor aleatorio del 0 al 1 ,  si le especificamos parametro nos devuelve valores repetidos segun el numero... por ejemplo:


Si te fijas rand() nos ha generado numeros aleatorios del 0 al 1, pero en caso de rand(6) que tiene como parametro 6 nos genera un valor del 0 al 1 pero si lo volvemos a llamar nos arroja el mismo valor...

Existen otras funciones numericas pero creo que estas son las que ami me parecieron mas interesantes :P

Funciones con caracteres
Como lo dice el titulo veremos algunas de las funciones con caracteres, estan en lo personal son las que mas me gustan jeje :P

Empecemos....

Ascii() o Ord()

Devuelve el valor en decimal (0-9) de una letra o numero de la tabla ascii (en este caso solo acepta valores del 0-255), el ascii es un codigo que tiene cada tecla de nuestro teclado.... Pero si quieres una mejor definicion tenemos wikipedia jeje :D

El código ASCII (acrónimo inglés de American Standard Code for Information Interchange — Código Estadounidense Estándar para el Intercambio de Información), pronunciado generalmente , es un código de caracteres basado en el alfabeto latino tal como se usa en inglés moderno y en otras lenguas...

 aqui les dejo una tabla del codigo ascii, les puede servir :D


Pongamos un ejemplo, de como lo usamos:

 En este caso como ves solo partimos de un solo caracter por que si indicaramos mas, seria lo mismo solo nos devolveria el codigo ascii del primer caracter, en este caso devolvemos el codigo ascii de a que es 97 lo puedes verificar en la tabla ascii de arriba donde dice Dec (decimal) y en el segundo el numero 0 que seria 48 :)

Bueno con ord() puedes realizar la misma accion :P


Char()

En este caso tenemos esta funcion char() que lo que hace es devolvernos el caracter que le demos en ascii, por ejemplo:


Bin()

Devuelve el valor binario (ceros y unos) de un entero...
Antes que nada vamos a ver que nos dice wikipedia de lo que es un binario ;)

El sistema binario , en matemáticas e informática, es un sistema de numeración en el que los números se representan utilizando solamente las cifras cero y uno (0 y 1


Como ves nos devuelve el binario de cada uno de esos numeros :P

Compress() Y Uncompress()
 Compress()
Comprime una cadena de caracteres que le indiques
Uncompress()
Descomprime una cadena de caracter comprimida con la funcion compress

Un ejemplo de esto:

 Es facil de utilizar, esto funciona con sql injection en muchos casos jeje por eso tambien la he mencionado :P

Concat()

Lo que hace es concatenar caracteres separados por comas...


tenemos tambien la funcion concat_ws(separador,concatenando,concatenando);

concat_ws lo que hace es agregar un separador y concatenar las cadenas....
prueba con:
select concat(0x3a3a,'testing','concat');
lo que hace es concatenar testing concart y agregar como separador :: que 0x3a3a es su significado esta en hexadecimal(0-9A-F) :P vendria quedando asi:

testing::concat

Find_in_set()

 find in set - en ingles lo traduciria algo como buscar en la lista...
su sintaxis es la siguiente:
select find_in_set('buscar','lista');

donde la lista es nuestra lista de caracteres que van separados por comas y buscar es la cadena a buscar, entonces vendria siendo buscame este caracter en la lista si se encuentra devuelve de 1 a n(n es cualquier caracter arriba de 1) sino se encuentra devuelve cero y si los dos valores son nulos entonces devuelve null (valor desconocido :P)... En ejemplo para que se queden con la idea:


Aqui buscamos en la lista a,b,c,d,e el caracter b si se encuentra devuelve 1 o arriba de 1
en el siguiente ejemplo buscamos en la lista a,b,c,d,e el caracter x si no se encuentra devuelve 0 :P

Hex() y Unhex()

hex() - convierte a hexadecimal lo que indiquemos como parametro
unhex() - convierte a un caracter un hexadecimal, hace el reverso del hex()

Veamos un ejemplo usando estas funciones:

Lo que hacemos arriba es convertir arthusu a hex nos devuelve 61727468757375 que es su valor hexadecimal
Luego lo "desconvertimos" y nos devuelve arthusu
luego lo seleccionamos solamente para poder hacerlo agregamos 0x para decirle que es un valor hexadecimal :P

Lcase () o lower()

Con los dos realizas la misma accion que es pasar todas las cadenas que esten dentro a minusculas... ejemplo:

Como puedes ver es muy facil tenemos ARTHUSU en mayusculas y con las funciones lower o lcase lo pasamos a minusculas :P




Ucase() o Upper()
con estas dos funciones puedes realizar lo mismo que seria convertir el texto en minusculas....es decir lo inverso a las dos anteriores.... un ejemplo:



Length()

Esta funcion nos devuelve la longitud de una cadena, a la longitud me refiero al tamaño, pero si quieres una mejor definicion ta wikipedia:

La longitud es la magnitud que expresa la distancia existente entre dos puntos, a lo largo de un cuerpo unidimensional que los une.

entonces sabiendo esto veamos un ejemplo....


Entonces viendo el ejemplo tenemos que contamos el tamaño o la longitud de la cadena arthusu entonces seria 7 1-a-2-r-3-t-4-h-5-u-6-s-7-u lo podria contar asi para que noten la diferencia en el caso de arthusu BLOG contiene un espacio y el espacio tambien es contado, esto no solo se puede aplicar asi con esta clausula select recuerden que todo esto puede ser aplicado a las columnas....

Load_file()

Esta funcion lo que hace es leer un archivo con la ruta que le indiquemos del archivo, para poder utilizar esta funcion necesitas permisos de FILE si el archivo no existe o no tienes permisos devuelve un valor NULL...
Un ejemplo seria:


Bueno cuando agregue esta funcion me acorde load data local infile y mirando mis otros tutoriales me di cuenta que no agregue into outfile o into dumpfile entonces agregare aqui un pequeño apartado donde mencione como funciona into outfile y into dumpfile....

Into Outfile y Into Dumfile

Como dije arriba esto no tiene nada que ver con funciones pero al haber recordado que no lo puse en otros minitutos y al recordarla gracias a la funcion load_file() las pondre por que son muy importantes de verdad...
Into outfile lo que hace es se podria decir exportar un registro... por ejemplo:

Al principio intento crear un archivo llamado personas2.txt en la ruta de mi home /home/arthusu pero al intentar crearlo no puedo, por que? simple, por que nuestro usuario que estamos usando es decir Nobody<-- no tiene permisos para escribir en esa carpeta, esto lo podemos ver de la siguiente manera:
Como puedes mirar solo tienen permiso el usuario arthusu y root.... y com nuestro usuario es nobody entonces no tenemos permisos y no podemos escribir a menos que le demos permisos usando chmod con el usuario root o buscar otro directorio donde tengamos permisos como por ejemplo /tmp que es la ruta temporal como puedes ver tenemos permisos y ahi esta nuestro archivo personas2.txt

Y como puedes ver sacamos a esa carpeta /tmp el archivo personas2.txt sacamos toda la columna nombre..... y la mostramos luego con la funcion load_file()....

select nombre into outfile '/tmp/personas.txt';

tambien podriamos usar into dumpfile para realizar la misma accion solo que into dumpfile solo puede guardar 1 registro y no más...

Como puedes ver al principio nos sale que contiene mas de 1 fila por lo cual no puede exportar los registros como les comente into dumpfile solo puede exportar 1 registro con esto si lo leemos con la funcion load_file() entonces vemos que solo agarro el primer registro como ves yo use luego la clausula where donde era 1 fila aunque no era necesario por que el archivo ya existia y ya tenia ese el 1 p_id pero en caso de seleccionar otro registro que no sea el primero (p_id=1) especificariamos otro....

y como puedes ver nos devolveria otro registro, bueno como dije no tiene nada que ver con las funciones pero como no lo habia agregado antes lo agrego ahora, "mas vale tarde que nunca XD"....

locate()

Como su significado al español lo dice localiza, nos devuelve la primera ocurrencia de la cadena a buscar.... su sintaxis:

locate(cadena_buscar,cadena_donde_buscas,posicion_empezar)
locate(cadena_buscar,cadena_donde_buscas)

Puedes indicar la posicion a comenzar o no indicarla... por ejemplo:

tenemos la cadena_donde_buscar la siguiente cadena 'one two three testing one two three testing' y buscamos en esa cadena test... lo que hace es devolvernos la posicion donde se encuentra esa cadena que es 15 pero si le indicamos que empieze o comienze desde 22 entonces tenemos que en 15 estaba el primer testing por lo que en el 37 se encuentra el segundo, como la cadena testing tiene un tamaño de 7 entonces 15+7=22 entonces nos brincamos esa cadena la primera y por eso encuentra la segunda... no se si los confundi pero si es asi practiquenlo viendo la sintaxis y es facil de predecir lo que realiza de todas maneras al principio esta el concepto :D

Substring() o substr() o mid()

Cualquiera de estas realiza la misma funcion que substring son "sinonimos"...

Substring en ingles significa subcadena, lo que hace esta funcion es extraer una posicion en una cadena... vamos a ver sus sintaxis:

substring(cadena,posicion)
substring(cadena from posicion)
substring(cadena,posicion,longitud)
substring(cadena from posicion for longitud)

bueno vamos a seguir la sintaxis y veamos unos ejemplos:

Nota Importante: antes de comenzar quiero decirles que empezamos a contar desde 1 y que los espacios tambien cuentan en la longitud de la cadena :P

Como ves en el ejemplo es facil de comprender solo siguiendo la sintaxis, al principio tenemos la cadena:
arthusu BLOG y lo que hacemos es recorrernos 3 posiciones y extraer la cadena por eso que ahora ya no es una cadena sino una subcadena (entiendes el concepto :P)
en la segunda consulta hacemos lo mismo solo que usamos from de todas maneras puedes ver la sintaxis arriba y lo comprendes bien facil :P
ahora en esta parte 3 tenemos la cadena:
arthusu BLOG entonces desde la posicion 8 extraemos 5 caracteres de longitud o tamaño con esto nos devuelve solo BLOG
abajo hacemos lo mismo pero usando from y for puedes ver la sintaxis arriba....

ahora puedes realizar todo esto con la funcion substr() y con la funcion mid() que es equivalente a substring()....

 Bueno hasta aqui la parte 4 espero les haya gustado recuerden que me pueden faltar muchas funciones asi que les recomendaria pasarse por dev.mysql.com y le peguen una checadita a las funciones y como tarea les dejo que las practiquen

Como dicen "La Practica hace al maestro" .....

+-----End----+ Nos vemos la proxima parte

No hay comentarios:

Publicar un comentario en la entrada