Tutoriales MySQL


COMO CREAR UNA BASE DE DATOS EN MYSQL

En este ejemplo veremos como crear una base de datos en MySQL, antes que nada debes tener instalado el paquete de MySQL, una ves instalado entra en MySQL Command Line Client aparecesar una pantalla negra como la del Ms-Dos, te pedira una contraseña, si aun no le has puesto contraseña, solo presiona enter despues aparecera un promp como el de Ms-Dos pero este dira Mysql> es hay en donde debes teclear lo comandos.

create database facturacion; aqui presiona enter te aparecera un mensaje como este Query Ok, 1 row affected (0.16) sec).

Para llamar tu base de datos solo teclea show databases; te aparecera una tabla en donde se visualizara tu base de datos.




COMO CREAR UNA TABLA EN MYSQL

Una ves que ya creamos la base de datos facturacion, vamos a agregarle una tabla a esa base de datos.

Tecleamos esto use facturacion; esto para realizar cambios en la base de datos facturacion. te aparecera un mensaje como este change facturacion

ahora teclea
create table clientes(;
Id_cliente int(5),
nombre char(50),
rfc char(15),
telefono char(15),
direccion char(50));

para visualizar la tabla solo llamala igual que la base de datos con el comando show tables;

Nota: si deseamos ver una tabla primero debemos abrir la base de datos que la contiene con el comando use database facturacion; despues llamamos la tabla con el comando show tables; una ves abierta la tabla, visualizamos las columnas y los tipos de datos con el comando describe clientes;




TIPOS DE DATOS ACEPTADOS POR MYSQL

Los tipos de datos que puede permitirnos MySQL es muy variada y se los referimos a continuación:

CHAR/CHAR(): Las columnas de tipo char o char() almacenan un carácter o una cadena de caracteres de 0 hasta 255 respectivamente (Si lo recuerdan, este fue el tipo de datos que le asignamos a todas nuestras columnas en la tabla UNO)

VARCHAR:

Estas columnas almacenan una cadena de caracteres variables de 0 a 255.

TINYINT(): Almacena un valor entero pequeño de 0 a 255 o de -128 a 127

BIT BOOL

BOOLEAN: Todos estos tipos son sinónimos de TINYINT(1).

SMALLINT: Almacena un entero corto (digamos que, no tan pequeño), entre -32768 y 32767 o, en caso de no tener un signo de 0 a 65535.

MEDIUMINT: Almacena un entero de tamaño medio entre -83888608 y 8388607 y entre 0 y 16777215 sin signo.

INT/INTEGER: Contiene un entero de tamaño normal (este normal es para nosotros en realidad un tamañote) entre -2147483648 y 2147483647 o entre 0 y 4294967295.

BIGINT: Como podrán imaginarse contiene un entero grande (o lo que es lo mismo un enterote) entre -9223372036854775808 a 922337203685477807 con signo o de 0 a 18446744073709551615 sin signo.

FLOAT/FLOAT(): Guarda un número de coma flotante. Opcionalmente puede acompañarse (al tipo flota sin los paréntesis) de la palabra precision que le indica la precisión decimal que se desea, que puede llegar hasta 24 para precisión sencilla y de 25 a 53 para una precisión doble. Para flota(), los valores permitidos van desde -3402823466E+38 y -1.175494351E-38, 0, y entre 1.175494351E+38 y 3.402823466E+38. En caso de espcificarse el modificador UNSIGNED los valores negativos no son permitidos.

DOUBLE: Contiene un número de coma flotante de precisión normal. Sus valores van desde -1.7976931348623157E+308 y -2.2250738585072014E-308, 0, y entre 2.2250738585072014E-308 y 1.7976931348623157E+308. Una vez más, si se define UNSIGNED, los valores negativos no son permitidos.

DOUBLE PRECISION
REAL : Son sinónimos de DOUBLE

DECIMAL: Guarda un número de coma flotante sin empaquetar. Esto de sin empaquetar implica que se guarda como una cadena (véase CHAR), usando un carácter para dígito del valor.

DEC
NUMERIC
FIXED : Son todos sinónimos de DECIMAL

DATE: Almacena un valor de fecha, los rangos permitidos son desde ‘1000-01-01’ y ‘9999-12-31’ (Fecha en la que podría que nosotros ya no estemos vivos). El formato de fecha presentado es, como ya lo habrán imaginado ‘AAAA-MM-DD’

DATETIME: Contiene un “MIX” (para demostrar que sabemos de terminología moderna), es decir una mezcla de fecha y hora. El rango que MySQL soporta es desde ‘1000-01-01 00:00:00’ hasta ‘9999-12-31 23:59:59’. El formato es del tipo ‘AAAA-MM-DD HH:MM:SS’

TIMESTAMP: Es un valor de tiempo que puede estar desde -1970-01-01 00:00:00’ hasta un momento en el año 2037 (lo cual suena como a un libro de ciencia ficción o algo así, ¿no les parece?)

TIME: Es una hora que permite los valores ‘-838:59:59’ a ‘838:59:59’. Los valores se muestran en formato HH:MM:SS

YEAR: Guarda un año en formato de 2 o 4 dígitos, siendo el valor por defecto 4. Los valores permitidos son desde 1901 a 2155 y 0000 en el formato de 4 dígitos y desde 1970 a 2069 en el formato de 2 dígitos (70-69).

Los siguientes tipos son para datos sin tipo o grandes cantidades de datos.

TINYBLOB


TINYTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 255 caracteres (28-1)

BLOX

TEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 65535 caracteres (216-1)

MEDIUMBLOB

MEDIUMTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 16777215 caracteres (224-1)

LONGBLOB

LONGTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 4294967298 caracteres (232-1)
Los siguientes son los tipos enumerados y los conjuntos:

ENUM: Almacena un enumerado, el cual es un objeto cadena que pueden un valor de entre una lista, el valor NULL o el valor de error “”. Este valor puede tener un máximo de 65535 valores diferentes.

SET: Almacena un conjunto. Es una cadena que puede tener 0 ó más valores. Todos esos valores debe estar entre una lista de valores. El máximo de miembros de un conjunto puede ser 64.




COMO BORRAR UNA BASE DE DATOS O UNA TABLA MYSQL

Hay ocaciones en que creamos tablas y las deseamos borrar, bueno para hacer esto primero visualizamos las bases de datos con el comando show databases; despues abrimos la base de datos que tiene la tabla que deseaos borrar con el comando use nombre_de_la_base_de_datos; despues visualizamos las tablas que contiene la base de datos para ver si esta la que deseamos borar con el comando show tables; ahora si borramos la tabla deseada con el comando drop nombre_de_la_tabla;




Volver a Temario
COMO INSERTAR REGISTROS A UNA TABLA DE MYSQL

Para insertar registros manejamos el comando Insert Into nombre_tabla(campo1,campo2,campo3) values('valor1','valor2','valor4');




COMO MODIFICAR REGISTROS A UNA TABLA DE MYSQL

Para modificar registros manejamos el comando:

Update nombre_tabla set campo_a_modificar=valor_a_insertar where campo_condicion="valor_condicion";

Nota: si los valores son numericos el valor_condicion va sin comillas, solo las cadenas de texto van entre comillas.




COMO BORRAR REGISTROS A UNA TABLA DE MYSQL

Para borrar registros manejamos el comando

Delete nombre_tabla where campo_a_borrar="valor_condicion";

Nota: si los valores son numericos el valor_concicion va sin comillas, solo las cadenas de texto van entre comillas.

Nota2: para borrar todos los registros solo ponga Delete nombre_tabla




COMO SELECCIONAR CIERTOS REGISTROS EN UNA TABLA DE MYSQL

Para seleccionar ciertos registros de una tabla utilizamos las siguientes sentencias:

Select campo1, campo2, from nombre_tabla Where campo_condicion="valor_condicion";

Nota: Si el valor condicion es numerico, va sin comillas.



COMO AGREGAR UNA COLUMNA A UNA TABLA DE MYSQL

Para agregar una columna a una tabla utilizamos las siguientes sentencias:

alter nombre_tabla add nombre_campo tipo_campo(longitud_campo);



COMO RENOMBRAR UNA TABLA DE MYSQL

Para renombrar una tabla utilizamos las siguientes sentencias:

alter nombre_tabla rename nuevo_nombre;

Nota: No se recomienda hacer esto si su aplicación ya esta funcionando, ya que puede haber modulos que tengan como origen esa tabla.




COMO HACER UN CAMPO QUE SE AUTO INCREMENTE Y CONVERTIRLO EN LLAVE PRIMARIA EN MYSQL

Para hacer esto utilizamos las siguientes sintaxis:

create table nombre_tabla(
campo1 smallint not null auto_increment,
campo2 int(5),
campo3 char(60),
campo4 char(15),
primary key(campo1));




COMO REALIZAR OPERACIONES MATEMATICAS EN MYSQL

Otra de las bondades de la sentencia SELECT es que nos permite realizar estas operaciones

select 2+2;

select 2*2;




USO DE LA FUNCION IF EN MYSQL

La funcion if es muy parecida e la sentencia propiedad where en MySQL, realiza consultas en base a una operacion.

select if campo1 if(campo_condicion = condicion,'si se cimple'.'si no se cumple')
from nombre tabla
order by campo1;






OPERACIONES CON CADENAS DE TEXTO EN MYSQL


Los operadores de cadenas trabajan de manera muy similar a los operadores lógicos de la lección anterior, es decir, retornan un valor de cierto o falso (valor booleano)

Una vez más, nuestra grande y vieja amiga SELECT hace el trabajo por nosotros, la forma de hacerlos es:

SELECT ‘cadena’ operador ‘cadena’;

Por favor presten atención a lo que encierra a ambos valores de cadena, es decir a las comillas simples. Lo que las comillas simples hacen, como seguramente ya habrán imaginado, es decirle a MySQL que el valor a evaluar es precisamente una cadena de caracteres.

De tal manera, la sentencia: SELECT ‘me llamo Juan’ = ‘me llamo Juan’;

Retornaría un valor de 1, es decir verdadero.

Por otro lado, si la expresión escrita fuese:

SELECT me llamo Juan = me llamo Juan; el resultado dara error




USO DEL OPERADOR LIKE Y SUS COMODINES GUION BAJO (_) Y EL SIGNO DE PORCENTAJE(%) EN MYSQL


Como verán, es un error cruel y gráficamente mortificante (créanlo, cuando a las 3 de la madrugada, después de batallar con nuestra base de datos, un error similar se presenta, entonces,… entonces es cuando los y las verdaderas valientes muestran su casta evitando llorar)

Con las operaciones de cadenas, podemos igualmente utilizar el operador LIKE, de una manera similar a como la utilizamos al hacer consultas a una tabla, es decir:

SELECT ‘bibidibabidibu’ LIKE ‘bibidibabidibu’;

Retornaría un valor verdadero (afortunadamente la computadora no tartamudea al comparar esto, lo cual es supercalifragilisticoespialidoso, ¿no les parece?).

Una de las ventajas de utilizar la sentencia LIKE, es que nos permite utilizar comodines. Lo que un comodín hace, como en un juego de póker (perdón si no son tahúres como nosotros), es reemplazar o bien un carácter o bien la cadena completa.

Los caracteres que utilizamos como comodines pueden ser:

El símbolo sustituto de un solo carácter, el cual es el guión bajo (‘_’)

O el símbolo que sustituye la cadena completa, o el resto de la cadena a partir de donde ponemos el símbolo, el cual es el símbolo de porcentaje (‘%’)

Después de todo lo expuesto, veamos el comportamiento de los operadores de cadena, ¿les parece?

select 'juan' like 'juan' Dara como resultado 1

select 'juan' like juan Dara como resultado error

select 'juan' like '_uan' Dara como resultado 1 en esta expresion el guion bajo sustituye al caracter faltante.

select 'juan' like '__an' Dara como resultado 1 en esta expresion los giones bajos sustituyen a los caracteres faltantes.

select 'juan' like '_an' Dara como resultado error en esta expresios solo hay un gion bajo que sustituye a solo con caracter pero en la palabra juan faltan dos caracteres.

select 'juan' like '%' Dara como resultado 1 en esta expresion el signo sustytuye a la palabra juan.

select 'juan' like '%a' Dara como resultado 1 en esta expresion el signo sustytuye a la palabra juan.

select 'juan' like '%n' Dara como resultado 1 en esta expresion el signo sustytuye al resto de la palabra juan.

select 'juan' like '%u' Dara como resultado error en esta expresion el signo sustituye los caracteres faltantes antes de la ultima letra en este caso la ultima letra es n por lo cual marca error.

select 'juan' like '%u%' Dara como resultado error en esta expresion el primer signo sustituye los caracteres que estan a la izquierda de la letra u y el otro signo sustituye a los que estan a la derecha.




OPERADORES LOGICOS EN MYSQL


Los operadores lógicos en MySQL nos permiten combinar más de una expresión, y obtener un resultado booleano, es decir cierto o falso (1 ó 0 respectivamente).

Tal y como vimos en nuestra lección sobre los operadores comparativos, podemos hacer comparaciones entre dos expresiones, lo cual nos limita de una manera bastante grande, esto es lo que podemos librar con la utilización de los operadores lógicos, siendo que podemos utilizar más de una expresión.

Así por ejemplo, la expresión:

SELECT 12 = 12 OR 28 = 115;

Nos da un valor verdadero (1), pese a que 28 es definitivamente diferente de 115 (a menos de que las reglas de igualdad hayan cambiado al mismo tiempo que escribimos este manual). Esto claro, es debido a que estamos utilizando el operador lógico OR, el cual decide de entre la evaluación de una expresión O la evaluación de otra.

Una observación importante, es que en MySQL, al igual que en muchos lenguajes de programación como C o C++, los operadores lógicos pueden escribirse con base en símbolos. Dicho lo anterior, observen que la expresión de arriba, es totalmente equivalente a la siguiente:

SELECT 12 = 12 || 28 = 115;

Por otro lado, la contraparte del operador OR (||) es el operador AND (Y en español), el cual, al contrario del operador OR, EXIGE que ambas expresiones comparadas sean verdaderas, de tal manera que la expresión anterior, aplicada al operador AND nos daría un valor falso (0), la razón es que 12 = 12 es cierto, pero 28 = 115 no lo es. Recordando, ambas expresiones TIENEN que ser verdaderas, de lo contrario, la expresión evaluada retorna falso (0).

El operador AND, se abrevia mediante un par de ampersands (&&), y se escriben de la misma manera en la que se escribe el operador OR (||), es decir:

SELECT 12 = 12 && 28 = 115;

Otro operador lógico es el Operador de Negación, el cual, en realidad revierte la evaluación de las expresiones que estamos evaluando (¿mareados?, no se preocupen, nosotros también)

A nivel matemático debemos recordar que la negación de la negación es, en realidad una afirmación (así pues, si la mujer de nuestros sueños nos dijese “no, no te quiero”, podemos hincarnos y cantar aleluya)

Para aclarar un poquito este operador, veamos la siguiente expresión:

SELECT NOT (3 = 6);

La evaluación normal sería obviamente falsa, sin embargo, siendo que estamos anteponiendo el operador lógico NOT, la evaluación resulta verdadera. Razón, lo falso de los falso,… es lo verdadero.

El símbolo para sustituir la sentencia NOT es el signo de cerrado de exclamación (!).




EXPRESIONES REGULARES EN MYSQL


Las expresiones regulares son una herramienta poderosa que nos ayuda a seleccionar expresiones de una manera general. Podríamos ver a las expresiones regulares como una enorme extensión de la expresión LIKE, que ya vimos en una lección anterior. Decimos que es una extensión debido a que podemos incluir una serie de operadores lógicos que nos ayudarán a hacer de nuestra selección una selección más especializada y detallada.

Las expresiones regulares son privativas de MySQL, y por ende siguen sus propias reglas de sintaxis (caprichositas las nenas)

Las expresiones regulares pueden ser utilizadas de muchas formas. Para muestra un botón:

SELECT ‘rumpelspinskin’ REGEXP ‘k’;

La sentencia anterior nos daría como resultado un valor de 1, lo cual implica que es un resultado verdadero. ¿Quién nos dice por qué? De acuerdo, el muchacho de la camisa café con rombos rojos (un aplauso al que haga juego con nuestra descripción) Correcto, la letra k está incluida en la cadena que estamos evaluando.

Por otro lado, si evaluamos la sentencia:

SELECT ‘rumpelspinskin’ REGEXP ‘k|z’;

La evaluación en este caso también resulta verdadera, dado que la barra vertical le dice a MySQL que evalúe si existe una expresión O la otra. Si por ejemplo la sentencia hubiese sido REGEXP ‘a|z’, entonces la expresión hubiese sido evaluada como falsa (0). Una observación que se hace necesaria, es que no importa si la evaluación incluye más de una palabra, de tal manera que si la expresión fuese:

SELECT ‘rumpelspinskin’ REGEXP ‘rumpelspinskin|rapunzel’;

El resultado hubiese sido evaluado como cierto, dado que una de las dos palabras (o nombres) está incluido en la expresión evaluada.

Podemos evaluar, de igual manera, el hecho de si la expresión regular comienza con un carácter específico, utilizando en la evaluación el circunflejo (^), de la manera siguiente:

SELECT ‘El perfume’ REGEXP ‘^E’;

Con la expresión anterior, el resultado sería cierto (1), dado que la expresión comienza con el carácter ‘E’

La contraparte del circunflejo viene a ser el signo de dólar ($), el cual le advierte a MySQL que la expresión regular que deseamos evaluar debe ser el carácter final, de la siguiente manera:

SELECT ‘Karamazov’ REGEXP ‘v$’;

Esta expresión retornaría un valor verdadero, dado que la expresión comparada finaliza con el signo de dólar.

Si nuestras necesidades se encaminan a comparar solamente el primer y el último carácter de nuestra expresión, podríamos utilizar un carácter comodín, de la siguiente forma:

SELECT ‘Karamazov’ REGEXP ‘^K.+v$’;

Por favor obseren que la expresión de evaluación es ‘^K.+v$’, y que inmediatamente después de la K hay un punto, esto es importante, pues le dice a MySQL que busque la expresión regular cuyo inicio sea la letra “K”, el siguiente carácter sea cualquiera, los siguiente caracteres (sin importar su número) sean cualesquiera y el carácter final, sea la negra “v”

Para hacer que MySQL evalúe partes muy específicas de una expresión, podemos hacer uso del siguiente truco (en realidad es simplemente una construcción de MySQL, lo del truquito es sólo un decir)

Digamos que lo que deseamos es averiguar si la expresión regular “rren” se encuentra en la cadena “Rápido corren los carros por el ferrocarril”

¿Qué hacemos? Utilizamos la siguiente evaluación:

SELECT “Rápido corren los carros por el ferrocarril” REGEXP ‘[rren]’;

Esta evaluación nos da un valor verdadero (1), dado que lo que hacen los corchetes, es decirle a MySQL que busque la expresión regular contenida dentro de ellos, en cualquier lugar de la cadena evaluada.

Por otro lado, si deseásemos, por ejemplo, hacer un rango de evaluación, bastaría con incluirlo dentro de los corchetes, de la siguiente manera:

SELECT ‘alskjdhasjkdhasljkdhas’ REGEXP ‘[a-z]’;

Lo anterior basta para que la expresión sea evaluada como verdadera, debido que estamos especificando un rango extenso entre la a y la z. Sin embargo, bastaría con incluir un número (perdón, un dígito) para que la expresión sea evaluada como falsa. Por otro lado, la expresión:

SELECT ‘lksjfsdfsdlfsdjlsfd45646465lkashdakshdkas’ REGEXP ‘[a-z0-9]’;

Sería evaluada como verdadera.

Finalmente, la utilidad real de las expresiones regulares se da cuando evaluamos contenidos de una base de datos (no es simplemente un deseo de existir de ellas, claro que no). Así pues, vean un la manera de utilizar las expresiones regulares para evaluar el contenido de una tabla.




COMO ORDENAR UNA TABLA MYSQL


Esto de los criterios de agrupamiento son en realidad una delicia semántica para impresionar a los incautos. Dicho en buen cristiano, un criterio de agrupamiento es la forma en la que le decimos a nuestro motor de bases de datos (es decir MySQL) en la que queremos que ordene o agrupe los datos de nuestra consulta.

Para que nuestra consulta se ordene de una forma determinada, podemos utilizar la sentencia ORDER BY en conjunto con la sentencia SELECT. Una consulta normal, es decir, una consulta como las que hemos hecho hasta el momento, sería de la siguiente manera:

SELECT * FROM tabla;

Para poner un orden a esta consulta, basta con hacer lo siguiente:

SELECT * FROM tabla ORDER BY columna_1;

La sentencia anterior presentaría nuestro resultado de forma ascendente (de la A a la Z). La forma ascendente es la forma en la que MySQL ordena los resultados por defecto. Sin embargo, si nuestro deseo es cambiar el orden a desdencente (de la Z a la A), entonces basta con poner la palabra DESC inmediatamente después del nombre de la columna que queremos que sea el parámetro de ordenamiento, es decir:

SELECT * FROM tabla ORDER BY columna_1 DESC;

Claro está, la columna por la cual vamos a presentar el ordenamiento, puede ser cualquiera que nosotros escojamos, sin importar el tipo de datos que hayamos guardado en esa columna específica.



COMO LIMITAR UNA CONSULTA EN MYSQL


Antes de explicar como se hace, permítannos darles un ejemplo de “para que se hace”. Supongamos por un momento que estamos desarrollando una aplicación en la cual vamos a tener a nuestro viejo y buen amigo MySQL como motor de base de datos. Digamos que el lenguaje en el que hemos decidido trabajar es C++, y que por consiguiente no vamos a presentar nuestros resultados en una página HTML (como sería el caso de una aplicación en PHP). Lo anterior no parece de mayor importancia, pero pensemos por un momento en la presentación de la información en la pantalla del usuario, ¿se imaginan una cantidad grande (seamos aventurados y digamos una cantidad “obscena” en sentido figurado claro está) de datos siendo presentados en la pantalla? Pues claro, el pobre usuario no tendría la oportunidad de ver las primeras líneas presentadas en la pantalla, siendo que los datos se presentaron sin conmiseración alguna ni límites.

No es adorable como se iluminan los ojos cuando se comprenden las razones de la existencia de algo (de admitir es que ni políticos ni militares han logrado hacer que nuestros ojos se iluminen).

Muy bien, después de toda nuestra explicación-ejemplo, diremos que la sentencia con la que limitamos la presentación de los datos en la pantalla es la sentencia LIMIT (una amarga muestra de lo obvio, ¿no les parece?) de la siguiente forma:

SELECT * FROM tabla LIMIT fila inicio, filas a presentar; Claro está, la sentencia LIMIT puede utilizarse en amena compañía de la sentencia ORDER BY que aprendimos en la lección anterior de la manera siguiente:

SELECT * FROM tabla ORDER BY criterio_de_ordenación LIMIT fila_inicio, filas_a_presentar;




COMO UNIR DOS TABLAS EN MYSQL


Muy bien, muy bien, precisamente son las bases de datos relacionales. Sin embargo, y hasta el momento, no hemos visto en lo absoluto esa propiedad de las bases de datos, es decir, la capacidad de relación.

A partir de este momento, empezamos esa propiedad de las bases de datos relacionales y le damos la bienvenida a las uniones (JOINS es su nombre es inglés). Los tipos de uniones que podemos realizar son INNER JOINS (Uniones Interiores) y LEFT JOINS (Uniones por la Izquierda).

Las uniones más comunes con las del tipo Interior, es decir, INNER JOINS, las cuales son las más sencillas. La forma en la que hacemos un INNER JOIN es simplemente especificando las columnas de las tablas de las que queremos hacer la consulta, escribiendo explícitamente la palabra INNER JOIN inmediatamente después, o simplemente escribiendo una coma entre la tabla uno y la tabla dos, posteriormente DEBEMOS especificar una condición “WHERE” a cumplir. Así por ejemplo, imaginemos la siguiente consulta:

SELECT gente.nombre, gente.apellido, empresa.sueldo, empresa.cargo FROM gente, empresa WHERE gente.cod_empleado = empresa.cod_empleado;

La consulta anterior le dice a MySQL que SELECCIONE de la tabla gente, tanto la columna nombre como la columna apellido; y de la tabla empresa, la columna sueldo y la columna cargo EN DONDE la columna cod_empleado de la tabla gente sea igual a la columna cod_empleado de la tabla empresa. Esta misma consulta podría haberse hecho de la siguiente manera:

SELECT gente.nombre, gente.apellido, empresa.sueldo, empresa.cargo FROM gente INNER JOIN empresa ON gente.cod_empleado = empresa.cod_empleado;

Como verán, la forma de especificar las tablas de donde estamos sacando la información es simplemente con un punto (.), especificando primero el nombre de la tabla y posteriormente el nombre de la columna, esto tanto después de la palabra SELECT, como después de la palabra WHERE.

¿Cómo hacer para que la información de una tabla, sea mostrada junto con la de otra?

La solución es utilizando LEFT JOIN. Los LEFT JOINS (perdón por utilizar las palabras en inglés, pero la traducción de unión izquierda o unión interior para los INNER JOINS no resulta del todo satisfactoria), son uniones en las que le pedimos a MySQL que nos muestre los datos contenidos en las tablas inmiscuidas en la consulta, sin importar que, por ejemplo, en un par de filas el valor nulo (NULL) aparezca.

Contrario a los INNER JOINS, los LEFT JOINS no pueden llevar una condicionante WHERE. Las razones son, claro está, que para cumplir una condicionante WHERE, la consulta debe arrojar solamente los resultados que concuerden exactamente con la condición, y nuestro deseo es precisamente lo contrario.

La sintaxis de los LEFT JOINS es bastante similar a la de los INNER JOINS, salvo que debemos utilizar la sentencia ON forzosamente, de la siguiente manera:

SELECT tabla1.columna1, tabla2.columna1 FROM tabla1 LEFT JOIN tabla2 ON tabla1.columna3 = tabla2.columna1;

Finalmente, como recomendación habremos de decir que los LEFT JOINS son herramientas que podemos utilizar en casos especiales. Sin embargo, debemos tener cuidado en el orden en el que especificamos las tablas en un LEFT JOIN, ya que si la tabla de la izquierda es la tabla que contiene,… digamos menos datos, y la de la derecha es la que contiene más, las filas que no concuerden serán ignoradas por MySQL.




AGRUPAR DATOS A UNA TABLA EN MYSQL


Una de las grandes utilidades que podemos encontrar en una base de datos relacional es el agregado de datos, dado que podemos crear una columna, sin necesidad de que esta se encuentre “físicamente” en alguna de las tablas de nuestra base de datos.

¿Para qué podría servir algo como lo que acabamos de mencionar? Supongamos el caso hipotético de una tienda en la que hay clientes muy importantes en nuestra base, que mes a mes compran productos. Supongamos ahora que uno de los reportes que nuestra aplicación genera gracias al motor de base de datos es un reporte de las órdenes puestas por nuestros clientes muy importantes. Si tuviésemos una columna de TOTAL tendríamos que duplicar la información (o al menos hacer una fila diferente con un valor sumado cada vez que el cliente importante hiciese una compra). Para evitar este trabajo innecesario, podríamos hacer un agregado de datos que hiciese la suma de todos los datos de la columna, con base a una consulta en la que pidamos los nombres de los clientes y sus compras hasta el momento.

Con el agregado de datos, necesitamos presentar una de las muchas FUNCIONES que tiene MySQL (difícilmente las veamos todas en este curso, pero presentaremos las más importantes y significativas conforme avancemos), hablamos de la función SUM, la cual devuelve la suma de una expresión. Claro que la función SUM no es la única que podríamos presentar aquí, pero es la que más se adapta a las necesidades del ejemplo.

SELECT columna1, SUM(columna2) FROM tabla1 GROUP BY columna1;

Lo que le estamos diciendo a MySQL en la sentencia anterior es SELECCIONE la columna1 y la suma de la columna2 DE la tabla1 AGRUPADO CON BASE A la columna1.

Algo que no puede olvidársenos cuando hacemos un agregado de datos, es que DEBEMOS incluir la sentencia GROUP BY (por cierto, GROUP BY, te presento a unos amigos y amigas, amigos y amigas,… GROUP BY) Esta sentencia, como su mismo nombre lo indica, agrupa valores en una consulta con base a un criterio (en nuestro fabuloso ejemplo el criterio sería la columna1). La sentencia GROUP BY, no sólo puede utilizarse en un agregado de datos, sino también en una consulta común y silvestre como las que ya hemos visto.

MIN Devuelve el valor mínimo de una expresión MAX Devuelve el valor máximo de una expresión COUNT Devuelve el número de valores distintos de NULL en las filas recuperadas por una sentencia SELECT AVG Devuelve el valor medio ADDDATE Suma un intervalo de tiempo a una fecha ADDTIME Suma tiempos





COMO CAMBIAR EL TIPO DE DATOS A UNA COLUMNA MYSQL


Para hacer esto debemos de tener abierta la base de datos en donde esta la tabla que contiene la columna a la cual le vamos a cambiar el tipo de datos para abrir la base de datos usamos el comando use nombre_base_datos.

Ahora para visualizamos las tablas de esa base de datos con el comando show tables;

Ahora visualizamos las columnas de la tabla con el comando describe nombre_tabla;

Ahora si cambiamos el tipo de datos con esta sintaxis.

alter table nombre_tabla change nombre_columna;
nombre columna tipo_datos(longitud) not null default(cantidad_por_default);





PROCEDIMIENTO ALMACENADO PARA INSERTAR REGISTROS

Aqui mostramos un ejemplo de un procedimiento almacenado para insertar registros en los campos codigo, nombre, direccion y saldo en una tabla llamada clientes, que se encuentra en el server localhost con el usuario root

DELIMITER $$
DROP PROCEDURE IF EXISTS spI_clientes $$

CREATE DEFINER='root'@'localhost' PROCEDURE spI_clientes(
_codigo int ,
_nombre varchar(50) ,
_direccion varchar(60) ,
_saldo decimal(18, 2)
)
BEGIN

SELECT IFNULL(MAX(codigo),0)+1 into _codigo FROM clientes;
INSERT INTO clientes(
codigo,
nombre,
direccion,
saldo
)
VALUES (
_codigo,
_nombre,
_direccion,
_saldo
);
END $$

DELIMITER ;





PROCEDIMIENTO ALMACENADO PARA ACTUALIZAR REGISTROS

Aqui mostramos un ejemplo de un procedimiento almacenado para actualizar registros en los campos codigo, nombre, direccion y saldo en una tabla llamada clientes, que se encuentra en el server localhost con el usuario root

DELIMITER $$

DROP PROCEDURE IF EXISTS spU_clientes $$

CREATE DEFINER='root'@'localhost' PROCEDURE spU_clientes(
_codigo int,
_nombre varchar(50),
_direccion varchar(60),
_saldo decimal(18, 2)
)
BEGIN

UPDATE clientes
SET
nombre = _nombre,
direccion = _direccion,
saldo = _saldo
WHERE
codigo = _codigo;
END $$

DELIMITER ;





PROCEDIMIENTO ALMACENADO PARA CONSULTAR REGISTROS

Aqui mostramos un ejemplo de un procedimiento almacenado para consultar registros en los campos codigo, nombre, direccion y saldo en una tabla llamada clientes, que se encuentra en el server localhost con el usuario root

DELIMITER $$

DROP PROCEDURE IF EXISTS spF_clientes_all $$

CREATE DEFINER='root'@'localhost' PROCEDURE spF_clientes(
)
BEGIN

select codigo, nombre, direccion, saldo from clientes order by nombre;
END $$

DELIMITER ;