Está en la página 1de 55

Introduccin

Sean bienvenidos y bienvenidas al mundo de los motores de las bases de datos,


uno de los pilares de las ciencias informticas, por qu?, pues porque en la
gran mayora de las ocasiones, los datos que utilizamos o insertamos o
modificamos o borramos, necesitan estar "guardados" en algn lugar. Un
ejemplo?, claro, los juegos de vdeo,... no lo creen?, cmo creen entonces que
guardan las puntuaciones ms altas, los nombres de los jugadores, etc., etc.
Las bases de datos estn por todos lados a nivel informtico, estn cuando
pasan un cdigo de barra por la lectora de cdigos en el supermercado; estn
en nuestros carns de empleado que retienen nuestra informacin gracias a un
nmero de empleado o un cdigo de barra; estn en internet cuando entramos
a comprar algo en lnea; estn en el departamento de trnsito cuando debemos
pagar una multa (dolor, dolor, muchsimo dolor).
Este curso es sobre uno de los motores de bases de datos ms famosos,
laseMySQL. Una de las razones de dicha fama, es el hecho de que es de
cdigo abierto bajo licencia GNU. Dicho en palabras mortales: esGRATIS (de
fondo deben escucharse aplausos y gritos de aleluya, por favor)
MySQL es un software creado por MySQL AB y es un software multiusuario,
multihilos y un servidor SQL (Structured Query Language). SQL es el lenguaje
estndar utilizado para manejar las bases de datos, mismo que tambin
aprenderemos en este curso.
En fin, dicho lo anterior, empecemos por decir que MySQL puede ser bajado de
la direccinwww.mysql.com. Una "gua" completa de bajado e instalacin son
las siguiente imgenes:


Las imgenes anteriores nos dicen el sitio en el que buscar, el apartado del sitio
en el que debemos buscar, el tipo de instalador que debemos buscar (en
nuestro ejemplo hemos buscado el instalador para el sistema operativo
Windows), de donde sacaremos los archivos para instalar, el archivo al que
debemos acceder para iniciar la instalacin y la forma de iniciar nuestra sesin
en MySQL como usuario raz o ROOT.
Despus de lo anterior, nos resta decir que a partir de nuestra prxima entrega,
empezamos a ver a fondo lo que son realmente las bases de datos.

Las Bases de datos


Se abre el teln, se ve un anciano de barba imposiblemente larga, un bculo en
sus manos y unos ojos blancos, totalmente blancos, pues es ciego. La cmara
hace un acercamiento (close-up para los conocedores) y el viejo empieza a
hablar:

En un principio, la tierra estaba caliente y los dinosaurios caminaban por los


nuevos senderos formados...

De acuerdo, de acuerdo, tal vez nos fuimos un poquitn atrs en la historia, el


comienzo debera haber sido:
En un principio no existan las bases de datos relacionales existan dos modelos
arcaicos de bases de datos: el jerrquico y el de redes, de los cuales el de redes
era el que ms se adaptaba a las necesidades reales de almacenamiento y
clasificacin.
En fin, el modelo de redes poda tener registros, en los cuales se alojaran otra
cantidad de registros, y dichos registros podan pertenecer a ms de un
conjunto. Sin embargo, el problema de este modelo consista en la dificultad de

la aplicacin de bsquedas o modificaciones. Era necesario ser un cuasi


ingeniero informtico para poder hacer una bsqueda.
Posteriormente, aparecieron las bases de datos relacionales, en las cuales los
datos se relacionaban unos a otros con base en tablas y pequeos vnculos que
servan de puente conector entre una tabla y otra, logrando de esta manera la
"descomposicin" de la informacin en partes, con la posibilidad de reconstruir
dicha informacin y presentarla con todos los agregados respectivos.
De esta forma resumimos (por favor puristas de la informtica, no se revuelvan
en sus tumbas) la historia de las bases de datos, y podemos decir que estamos
listos para iniciar la explicacin de lo que implica construir una base de datos
del tipo relacional. Pero eso ser, como seguramente ya lo habrn adivinado, en
la prxima entrega. Hasta Pronto.

Las bases de datos relacionales


Muy bien, hablemos un poco sobre las bases de datos relacionales en esta
ocasin. Las bases de datos relacionales, como ya explicamos en nuestro
encuentro anterior las bases de datos relacionales tienen la ventaja
de"relacionarse" entre s sin la necesidad de duplicar una gran cantidad de
informacin, con base a un lenguaje estndar llamado SQL (Structured Query
Language), el cual es, podramos decir, la razn para que las bases de datos
relacionales tengan un xito tan arrollador.
De tal manera, las bases de datos relacionales utilizan "punteros disfrazados"
para poder tenerrelacinentre ellas (para los que conocen un poquitn de C o
C++, esto de los punteros debe sonar como oir llover), ahora bien, esto de los
punteros y de las relaciones, a nivel SQL se conoce en realidad
comollavesokeys.
Pero no nos adelantemos, expliquemos cmo se compone una base de datos (de
ahora en adelante, una base de datos relacional, ser simplemente la base de
datos o la base, pues, para abreviar). Podramos pensar en las bases de datos
como en cajas, dentro de las cuales hay celdas, cada una guardando algo.

Bien, las bases de datos estn conformadas por TABLAS, que son las
contenedoras de la informacin. Es decir, la base de datos sera el cuarto
conteniendo las cajas (que seran las tablas). Las tablas contienen campos,
formados por filas y columnas.
Imaginemos una tabla dentro de una base que contenga dos columnas: Nombre
y Apellido. Las columnas representan la informacin genrica de la tabla, que es
en donde se guardar la informacin especfica, es decir, en las filas.
As pues, si tenemos un par de datos que guardar, es decir un nombre y un
apellido, digamos: Ernesto Chvez; estos datos formaran una fila, pues

corresponden a una persona especfica, sin embargo, Ernesto se guardara en


lacolumnaNombre y Chvez se guardara en lacolumnaapellido.
De esta manera, las tablas mantienen comunicacin entre columnas, para
extraer la informacin especfica de las filas.
Pero tambin hay comunicacin entre tablas (incluso entre bases de datos). Sin
embargo, esto, lo aclararemos en nuestra siguiente entrega. Hasta Pronto.

Las bases de datos relacionales 2


Dicen por ah que no hay nada ms importante que la comunicacin y en
cuestin de bases de datos, esto es, en definitiva, un axioma. Ya hablamos de
la comunicacin entre columnas dentro de una misma tabla, que a su vez est
contenida dentro de una base de datos. Ahora bien, hablemos de la
comunicacin entre tablas dentro de una misma base de datos.
Como seguramente recordarn, hemos hablado ya de las llaves. Las llaves no
son ms que, para los que saben de C y C++, punteros que, de una tabla,
apuntan a otra, teniendo en cuenta un dato comn. Dicho en buen cristiano, y
explicado con un ejemplo prctico:
Nos han puesto una multa por manejar a excesiva velocidad (nuestra bicicleta
iba a 15 en una zona de 7.5 pues nuestra novia nos pidi flores y tuvimos que
ir a comprarlas con rapidez) y vamos a pagar dicha multa a las oficinas
respectivas. Al llegar a las oficinas, amn claro del clima de culpabilidad, vemos
que todo el mundo tiene su licencia en la mano, la cual entregamos a la
amabilsima secretaria de la ventanilla; la secretaria toma nuestra licencia de
conducir, mira los nmeros y digita en la computadora los nmeros que
corresponden al nmero de nuestra licencia. La computadora, despus de algn
tiempo, muestra en pantalla la informacin sobre la persona poseedora de la
licencia, es decir, nosotros. Hasta este punto, podramos asumir que la
computadora ha puesto en marcha una consulta a una sola tabla, es decir, la
tabla que contiene nuestros datos personales, sin embargo, qu ocurre cuando
la siempre sonriente secretaria procesa el pago de nuestra multa? Las multas
deberan ser guardadas en otra tabla, para evitar que la informacin se mezcle
y se haga una cantidad innecesaria de informacin; as pues, el pago de la
multa se procesa en otra tabla, pero, de alguna manera debe estar vinculada a
nuestra informacin, sino, habra un verdadero desastre de informacin en las
oficinas de trnsito, cmo imaginan ustedes que dicho vnculo podra llevarse a
cabo? Veamos las opciones:

- El nombre de la persona
- El apellido de la persona
- El nmero de su licencia

Si escogisemos el nombre habra un problema, cuntas personas existiran con


el mismo nombre; la misma historia pasara si escogisemos el apellido; por
otro lado, escogiendo el nmero de licencia (que es nico) podramos establecer
un vnculo entre la tabla de nombre, digamosdatos_generales, y la tabla de
nombre pagos_efectuados. Dicho en trminos de bases de datos, la llave
entre una tabla y otra sera una columna que contenga el nmero de licencia, y
que debera existir tanto en la tabla datos_generales, como en la tabla
pagos_efectuados, de tal forma que nuestro motor de bases de datos sepa que
el pago efectuado por una persona, pertenece exclusivamente a un nmero de
licencia, que a su vez, corresponde a una persona con un nombre y un apellido
especfico.
Por cierto:


Esta es nuestra bicicleta con las flores

Y esta es la siempre sonriente oficinista


Muy bien, hemos cubierto de manera extremadamente global lo que implican las
bases de datos relacionales y la forma en la que unas mantienen comunicacin
con otras. En nuestro siguiente encuentro, empezaremos a conocer el Lenguaje
Estructurado de Consultas SQL (Structures Query Language). Por el momento,
recuerden: Un pintor es un hombre que pinta lo que vende, un artista es un
hombre que vende lo que pinta (Pablo Picasso) Seamos artistas de nuestros
programas, no pintores de los mismos. Hasta Pronto.

Lenguaje SQL
Hola de Nuevo, damas y caballeros. En esta nuestra nueva entrega, siendo que
lo prometido es deuda, empezamos los pormenores, tanto de SQL como de
MySQL en especfico.
SQL es una lenguaje de alto nivel, lo que entre otras cosas, quiere decir que es
un lenguaje que, para los mortales (nosotros) es mucho ms sencillo de
comprender que los lenguajes de bajo o de medio nivel (como Ensamblador o C
respectivamente).
Por ejemplo, para decirle a SQL (o en nuestro caso a MySQL a travs de SQL)
que muestre los datos en una tabla especfica le decimos:
SELECT * FROM Nombre_de_tabla;
Para el que sepa un poquitn de ingls o para el que tenga un diccionario
espaol-ingls, ingls-espaol a la mano, ser ms que sencillo comprender las
generalidades de la sentencia anterior.
Pero bueno, antes vender el cuero, sin antes haber matado al tigre
No hay nada como MOSTRAR (y si no lo creen pregntenle a las bailarinas o
bailarines strippers) y en MySQL eso es sencillo con la sentenciaSHOW.
La sentenciaSHOWtiene una sintaxis sencilla y en nuestro ejemplo siguiente,
lo utilizamos en tres diferentes formas:

SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM nombre_de_tabla;

Lo que hacen estas sentencias es, en su respectivo orden:


Muestra las bases de datos que estn guardadas en MySQL
Muestra las tablas contenidas en una base de datos especfica.
Muestra las columnas contenidas en una tabla especfica.
Ahora bien, para ver las tablas contenidas en una base, necesitamos primero
que nada, decirle a MySQL que deseamos utilizar o USAR dicha base, lo cual
hacemos por medio de la palabra reservadaUSE, de la siguiente forma:
USE nombre_base_de_datos;
Ahora s, ya podemos ver las tablas que contiene la base de datos que
especificamos, utilizando la instruccin que ya les explicamosSHOW TABLES.
Pero bueno, veamos un ejemplo prctico, con un vdeo, les parece?


En nuestra siguiente entrega vamos a aprender la forma en la que creamos una
base de datos en MySQL, por el momento: Hasta Pronto.

Lenguaje SQL parte 2


Holaaaaa. Cmo estn? Esperamos que de lo mejor.

En este nuevo encuentro, aprenderemos a crear bases de datos y a borrarlas en


caso de ser necesario. Vaya, por fin nos hemos dignado a mostrar como crear
bases de datos! Lo sabemos, nos hemos tomado nuestro tiempo, pero con todo
y eso, tenamos la necesidad de contar un tantito de historia y de la forma en la
que las bases de datos trabajan.

En fin, comencemos:

Las bases de datos, como ya explicamos con anterioridad, son colecciones de


tablas, que a su vez son colecciones de columnas y de filas, que son, a su vez,
colecciones de datos, tanto punteros disfrazados (columnas), como la
informacin a la que apuntan los punteros (las filas y perdn por la
redundancia). Pero antes de crear tablas, columnas y filas, necesitamos crear el
CONTENEDOR de esta informacin, es decir, la gran y venerada Base de Datos.

Para crear la base de datos, basta con utilizar la sentencia SQL

CREATE DATABASE nombre_base;

Y eso es todo, es as de fcil?, si es usted (si usted) de las personas que gustan
de presumirle a las amistades de lo mucho que sabe, y quera presumir sobre
sus conocimientos nicos de crear bases de datos, dada la dificultad que
representa, lo sentimos, su objetivo no se cumplir.

Efectivamente, la creacin de la base de datos es as de sencilla, pero, qu


pasara si el nombre de la tabla ya existe, sencillo, MySQL producira unerror
1007, si, un feo (y ruidoso pues produce un efecto sonoro en el altavoz de la
computadora) error. Cmo evitamos este error, sencillo, agregamos a nuestra
sentencia lo siguiente:

CREATEDATABASE IF NOT EXISTS nombre_base;

Esto no hace que la base de datos que estamos creando sobreescriba que la que
ya existe, sino que simplemente evitamos que MySQL nos de ese error. Si lo
que se estn preguntando es y qu ganamos con eso?, pues bien, en realidad
es una cuestin de forma. Supongamos que tenemos una aplicacin que utiliza
nuestro motor de base de datos, digamos PHP y a la hora de utilizar la

aplicacin tenemos la necesidad de crear una base de datos en tiempo real,


esto nos producira un error en nuestra pantalla, el cual se desplegara en
nuestro navegador de Internet, lo cual sera desastroso para nuestra aplicacin.

Por otro lado, en ocasiones es necesario deshacernos de algunas bases de datos


que han convertido en obsoletas o, tal vez duplicadas, en este caso, lo que
hacemos para borrar dichas bases de datos es lo siguiente:

DROP DATABASE nombre_tabla;

As de sencillo es tanto crear como borrar bases de datos. Pero como dicen, para
muestra un botn, vean el siguiente vdeo:

Delicioso, no es as?, muy bien damas y caballeros, en la prxima leccin


aprenderemos cmo crear tablas, las cuales, como perfectamente sabemos,
estn contenidas dentro de las bases de datos. Por el momento, recuerden
jams darle la razn a Samuel Johnson quien dijo que Todo hombre es, o
confa llegar a ser un holgazn Nosotros, con toda seguridad, le
desmentiremos siempre. Hasta Pronto

Creando tablas
Lo que necesitamos hacer es utilizar la sentencia SQL que nos permite crear
tablas, siempre y cuando tengamos una base de datos que la contenga, es
decir:

CREATE
TABLE
nombre_tabla
(campo1
tipo(longitud), campo_n tipo(longitud));

tipo(longitud),

campo2

Debemos recordar que, antes de utilizar esta sentencia, debemos seleccionar


una base de datos, que ser la que contendr a la tabla que vamos a crear, la
forma de hacerlos es, como seguramente recordarn, utilizando USE
nombre_base_de_datos; para posteriormente crear la tabla.

En caso de que la tabla ya no nos sea de utilidad, podemos deshacernos de ella


utilizando la sentencia DROP TABLE nombre_de_tabla; la cual borra por
completo la tabla indicada.

En fin, dadas todas las explicaciones, vean un ejemplo prctico de cmo se


crean las bases de datos:

Antes de finalizar con esta leccin, debemos hacer una aclaracin, en el vdeo
mostrado, despus de la sentencia CREATETABLE uno(, hemos presionado
la tecla ENTER o INTRO simple y sencillamente para hacer ms comprensible
las columnas que han de integrar dicha tabla, sin embargo, la tabla pudo
haberse creado sin la necesidad de presionar la tecla ENTER o INTRO, teniendo

una sola lnea de cdigo (o ms de una dada la longitud de la sentencia)

Bien, ya sabemos como crear tablas dentro de una base de datos, pero antes de
aprender a llenar los espacios en las tablas, debemos saber los tipos de datos
que podemos insertar en las tablas y sus secretitos. Dicho esto, los dejamos
pensando en esa parte del vdeo en la cual, despus del nombre de la
columnas, hemos escrito cuatro letras: char y un nmero.

Recuerden siempre, por favor, lo que dice Ernesto Sbato: Las modas son
legtimas en las cosas menores, como el vestido. En el pensamiento y en el arte
son abominables Nunca, jams de los jamases, permitamos que nuestro arte o
nuestro pensamiento estn a la moda Hasta Pronto.

Tipos de datos
Estamos juntos de nuevo y les damos la bienvenida.
En la ltima leccin creamos una tabla de nombre UNO, contenida en una base
de datos de nombre PERSONAS. Sin embargo, hubo algo que no explicamos, y
es que debemos decirle a MySQL el tipo de datos que almacenar la columna
que estamos creando dentro de la tabla.
Los tipos de datos que puede permitirnos MySQL es muy variada y se los
referimos a continuacin:
CHAR/CHAR(): Las columnas de tipo char o char() almacenan un carcter 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 pequeo de 0 a 255 o de -128 a 127

BIT
BOOL
BOOLEAN:Todos estos tipos son sinnimos de TINYINT(1).

SMALLINT: Almacena un entero corto (digamos que, no tan pequeo), entre


-32768 y 32767 o, en caso de no tener un signo de 0 a 65535.

MEDIUMINT: Almacena un entero de tamao medio entre -83888608 y


8388607 y entre 0 y 16777215 sin signo.

INT/INTEGER: Contiene un entero de tamao normal (este normal es para


nosotros en realidad un tamaote) entre -2147483648 y 2147483647 o entre 0
y 4294967295.

BIGINT: Como podrn 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 nmero de coma flotante. Opcionalmente puede


acompaarse (al tipo flota sin los parntesis) de la palabra precisin que le
indica la precisin decimal que se desea, que puede llegar hasta 24 para

precisin sencilla y de 25 a 53 para una precisin 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 nmero de coma flotante de precisin normal. Sus


valores van desde -1.7976931348623157E+308 y -2.2250738585072014E308, 0, y entre 2.2250738585072014E-308 y 1.7976931348623157E+308. Una
vez ms, si se define UNSIGNED, los valores negativos no son permitidos.

DOUBLE PRECISIN
REAL: Son sinnimos deDOUBLE

DECIMAL: Guarda un nmero de coma flotante sin empaquetar. Esto de sin


empaquetar implica que se guarda como una cadena (vase CHAR), usando un
carcter para dgito del valor.

DEC
NUMERIC
FIXED: Son todos sinnimos de DECIMAL

DATE: Almacena un valor de fecha, los rangos permitidos son desde 1000-0101 y 9999-12-31 (Fecha en la que podra que nosotros ya no estemos vivos).
El formato de fecha presentado es, como ya lo habrn imaginado AAAA-MMDD

DATETIME: Contiene un MIX (para demostrar que sabemos de terminologa


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 ao 2037 (lo cual suena como a un libro de
ciencia ficcin 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 ao en formato de 2 o 4 dgitos, siendo el valor por defecto 4.


Los valores permitidos son desde 1901 a 2155 y 0000 en el formato de 4
dgitos y desde 1970 a 2069 en el formato de 2 dgitos (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 mximo de 65535 valores diferentes.

SET: Almacena un conjunto. Es una cadena que puede tener 0 ms valores.


Todos esos valores debe estar entre una lista de valores. El mximo de
miembros de un conjunto puede ser 64.

Muy bien, esta ha sido una mirada rpida (QUEEEEE, ESTO ES RPIDO?) a los
tipos de MySQL. Hay que aclarar que una vez se define una columna como
almacenadora de un tipo, no habremos de intentar guardar valores de un tipo
diferente dentro de ellas. OJO y mucho cuidado en esto.

Esta, los sabemos, ha sido una leccin larga, pero necesaria, as que, sin ms ni
ms, Hasta Pronto.

Insertar datos
Hola, sean bienvenidos a esta reunin.
La garanta de que nuestras bases de datos estn funcionando como Dios
manda, es que haya datos que se estn insertando constantemente.

En esta nueva leccin, vamos a aprender como insertar datos en MySQL. Tal y
como vimos en nuestra leccin anterior, debemos tener siempre en cuenta que
los tipos de datos que vamos a almacenar en nuestras columnas sean el tipo de
datos que hemos definido a la hora de crear nuestra tabla.

Dicho lo anterior, podemos empezar. La insercin en MySQL (basados en el


lenguaje SQL, claro est) se hace por medio de la sentencia INSERT INTO ,
cuya sintaxis bsica es:
INSERT INTO nombre_tabla (columna_1, columna_2, columna_n)
VALUES(valor_1, valor_2, valor_n) WHERE condicin(opcional)

INSERT INTOes, obviamente, la sentencia SQL que inserta los valores en una
tabla.

nombre_tabla es el nombre de la tabla en donde los valores sern insertados.

(columna_1, columna_2, columna_n) especifica las columnas en la que


los datos se insertarn.

VALUESes la palabra que avisa a MySQL que los datos a continuacin son los
que se insertarn.

(valor_1, valor_2, valor_n) son los datos que habrn de insertarse. Las
comas separan los datos dependiendo de la columna a la que pertenecen (el
orden lo especificamos en (columna_1, columna_2, columna_n)

WHEREcondicion especifica una condicin a cumplirse para que la insercin se


lleve a cabo.

Una palabra sobre las condiciones antes de ver nuestro vdeo. Las condiciones
que le hemos de poner a nuestras inserciones dependern exclusivamente de
nuestras necesidades, por ejemplo, si necesitamos que la columna nombre se
grabe nica y exclusivamente si cumple con la condicin que sea Pancracio,

entonces nuestra condicin sera WHERE nombre = Pancracio Como ya lo


dijimos, la condicin WHERE es opcional y puede no incluirse en nuestras
sentenciasINSERT INTO, en caso de no ser insertadas, los datos se insertarn
sin importar nada (o casi nada).

Muy bien, hemos visto los principal en cuanto a inserciones se refiere, para que
vean un poquitn de prctica, los dejamos con el siguiente vdeo:

Antes de finalizar este nuestro encuentro, hay que decir algo sobre nuestro
vdeo. Como vimos al principio (de hecho hace un par de lecciones), la creacin
de una tabla de nombre UNO en la que definimos cuatro columnas:

nombre: que almacenara una cadena de caracteres de hasta 15


apellido: que almacenara una cadena de caracteres de hasta 15
telfono: que almacenara una cadena de caracteres de hasta 10
direccin: que almacenara una cadena de caracteres de hasta 45

Las inserciones de nuestro ejemplo van bien y sin problemas, hasta que
insertamos la columna direccin (que conste no es un error ortogrfico, el
nombre de la columna es direccin sin tilde). Como seguramente habrn
notado, la direccin que intentamos insertar es de ms de 45 caracteres. Qu
ocurri? Sencillo, MySQL tiene una definicin de una columna y respetar esa
decisin hasta el final (no sera genial que algunos personajes de la vida
pblica hiciesen lo mismo?), cualquier intento de insertar ms caracteres de los
especificados resultar en el truncado de todos los caracteres que se
sobrepasen la longitud definida para la columna.

Esto es todo lo que respecta a las inserciones (por el momento), en nuestra


siguiente tertulia aprenderemos a SELECCIONAR los datos. De momento, no se
les olvide que, como dijo Florence Nightingale: Lo importante no es lo que nos
hace el destino, sino lo que nosotros hacemos de l Hagamos de nuestro
destino una sucesin de eventos memorables, siempre. Hasta Pronto.

Seleccionar datos
SELECCIONAR o no SELECCIONAR, esa es la cuestin.
Hola, cmo les va?

Tal y como lo prometimos, en esta leccin aprenderemos a seleccionar los datos


que hemos insertado en una tabla, contenida en una base de datos. La
actividad selectiva es, probablemente, una de las actividades que ms se llevan
a cabo en el trabajo con las bases de datos. Tiene sentido si lo analizamos con
cabeza fra: Nosotros llegamos a un supermercado, tomamos todos los
productos que vamos a llevar, los llevamos a la caja y la cajera empieza a
pasar cada producto por la lectora de cdigo de barras, e inmediatamente la
computadora o la caja registradora sabe perfectamente el producto que
estamos llevando y su precio.

Pregunta del milln, qu proceso est llevando a cabo la computadora o caja


registradora? Cooooooooorrrrrrrectoooooooooo, est seleccionando datos a
partir de un cdigo, a saber: El cdigo de barras.

Antes de continuar con nuestra explicacin del proceso de seleccionar,


recordemos por favor que, una prctica necesaria para trabajar con bases de
datos relacionales, es la de crear una llave o cdigo comn en las tablas que
han de tener relacin. Para el ejemplo que estamos presentando, obviamente la
llave o cdigo debe ser el cdigo de barras. Otra pregunta, podramos
almacenar la descripcin del producto junto con el cdigo de barras y su precio?
Bien la respuesta es, se puede, pero no se debe, la razn?, pues es algo que
se llama normalizacin de una tabla, y es algo que tiene que ver, por decirlo
de alguna forma, con la agrupacin de los elementos ms comunes a los datos
que guardamos en una tabla. Hay algo ms cambiante que un precio? La triste
respuesta es NO, por consiguiente, lo ms recomendable sera tener el precio
en otra tabla.

En fin, continuemos. Para llevar a cabo un proceso selectivo debemos utilizar la


sentencia SQL SELECT, la cual tiene la siguiente sintaxis bsica:

SELECT nombre_columna FROM nombre_tabla WHERE condicion (opcional)


GROUP BY orden_de_agrupacion ORDER BY orden_de_ordenamiento.

Tomando el ejemplo de la caja registradora, supongamos que el cdigo de barra


lanza el siguiente cdigo 0245f0124n01214, la sentencia SELECT que podra
llevarse a cabo en el CPU de la computadora es:

SELECT precio, nombre_producto FROM productos WHERE codigo_barras =

0245f0124n01214;

Claro est, esta es una suposicin bastante global, pero podra estar muy
acertada.

En fin, veamos en accin a la sentencia SELECT, les parece?

Antes de finalizar nuestro encuentro, aclaremos un par cosillas del vdeo:


- La condicin WHERE de la primera sentencia, le dice a MySQL que seleccione la
columna nombre, perteneciente a la tabla uno en DONDE el apellido sea
FORZOSAMENTE Chavez.
- La segunda sentencia utiliza el carcter comodn asterisco (*), el cual le dice a
MySQL que seleccione TODAS las columnas del tabla uno, en donde se cumpla
la condicin (y siendo que no hay condicin alguna, la sentencia selecciona
literalmente a todas las columnas sin excepcin alguna)

A lo largo de nuestro curso aprenderemos a utilizar la sentencia SELECT con un


poco ms de detalle, por el momento, con esta leve degustacin ya tienen para
hacer algunas cosas entretenidas.

En nuestra siguiente leccin aprenderemos a MODIFICAR o ACTUALIZAR los


datos de una tabla. Por el momento recuerden: Si das pescado a un hombre,
lo nutres por una jornada. Si le enseas a pescar, le nutrirs toda la vida (Lao
Ts) Recuerden amigos, esto, es slo la forma en la que tenemos que pescar.

Modificar datos
No hay nada como saberse vivo. Y una muestra clara de que estamos vivos es,
precisamente, el hecho de estar juntos una vez ms en esta leccin, ocasin
por dems fabulosa para celebrar la vida.

Las modificaciones, as como las adiciones y el borrado, representan la columna


vertebral de la evolucin constante de una base de datos. El modificado de una
base de datos nos da la seguridad de tener los datos correctos, o los datos
realmente tiles, almacenados en nuestra base de datos.

Un ejemplo de la importancia de la actualizacin de las bases de datos es, por


ejemplo, la actualizacin de los precios de los productos en venta en un
supermercado (claro, a todos nos encantara que dicha actualizacin fuese para
bajar precios en lugar de para subirlos) En el caso del supermercado, la
actualizacin es una de las tareas ms importantes en la vida de sus bases de
datos. Cmo se sentiran ustedes si fuesen propietarios de un supermercado, y
al registrar sus ventas, los precios de los productos estuviesen registrados con
los precios de hace cinco aos?

Exacto, esa misma sera su cara. Por tanto, las actualizaciones son una parte
vital de una buena y sana base de datos.

Para MySQL las actualizaciones se llevan a cabo mediante la sentenciaUPDATE,


cuya sintaxis es la siguiente:

UPDATE nombre_base/nombre_tabla SET columna_1 = expresion1,

columna_2 = expresion2, columna_n = expresin WHERE condicion.

Antes de ver en accin la sentenciaUPDATE, permtannos una observacin de


vital importancia. Como se darn cuenta, en todas, o en la gran mayora de las
sentencias en MySQL existe la posibilidad de utilizar la condicionanteWHERE.
Esta condicin es en realidad una de las sentencias ms importantes a nivel de
las bases de datos relacionales, ya que es la que le impone condiciones a
nuestro Modificado, Borrado o Seleccionado, evitando de esta forma el que
datos importantes (o no importantes en algunos casos) sean Modificados,
Borrados o Seleccionados. La sentencia WHERE tiene tanto (o ms
protagonismo) que la sentencia que la utiliza. As pues queridos amigos, por
favor, entiendan a la perfeccin el uso de la sentenciaWHERE.

Bien, conforme avancemos en el curso, iremos viendo los usos y necesarias


utilizaciones de la sentenciaWHERE

Esta es la sentencia de modificacin en accin. Esperamos que les sirve de


mucho lo que hemos aprendido. En nuestra prxima leccin vamos a aprender
cmo se BORRAN los datos. Por el momento, recuerden siempre lo que dijo
Robert Louis Stevenson: "El encanto es la virtud sin la cual todas las dems son
intiles" Recordemos siempre que nuestras pasiones deben tener la virtud del
encanto, de lo contrario, las pasiones,... se convierten en obligaciones.

Borrado de datos
Hola, que bueno tenerlos de regreso!
Se imaginan lo que podra pasar si un registro de votantes no sacase a las
personas que van muriendo ao con ao? Claro est, la base de datos podra
colapsar en un determinado momento debido a la cantidad enorme de datos
que se guardaran en ella.

Y, cul creen ustedes que es el proceso que debe llevarse a cabo para hacer
esa limpieza de personas? As es: es elBORRADO.

Una de las recomendaciones de ley es simplemente hacer hincapi en el hecho


de que el borrado es una operacin por dems delicada y que, debemos poner
todos los mtodos de prevencin para evitar que el usuario borre
accidentalmente los datos que NO deberan ser sacados de la base.

Hecha la advertencia anterior, veamos la sintaxis de la sentencia DELETE, que


por cierto es la encargada de borrar los datos de la base:

DELETE FROM nombre_tabla WHERE condicion


Observacin
importante:
Si
omitimos
contenidoTOTALde la tabla se borrar:

la

condicin

WHERE

el

DELETE FROM uno;


La sentencia de arriba hace que la totalidad del contenido de la tabla uno se
borre, de tal suerte que si luego hacemos una consulta como:

SELECT * FROM uno;


El resultado sera el siguiente:


En caso de que necesitemos poner algunos obstculos en el camino del usuario
para evitar que los datos sean borrados a troche y moche. Algunas opciones
podran ser un subformulario en JavaScript o una simple pgina intermedia de
PHP que le pregunte al usuario un nombre de usuario y/o una contrasea para
poder hacer el borrado de tal o cual dato (no saben de PHP?, heeeeeey, hay
dos cursos gratis aqu en aulafacil.com, no hay razones para preocuparse)
Ustedes perdonarn la insistencia patolgica en el cuidado al borrar datos, pero
crannos, es un verdadero calvario encontrarse con datos borrados por
accidente, todo gracias a que no supimos poner un filtro para nuestro querido
usuario.
Bueno, despus de haberle pedido al usuario hasta el acta de defuncin para
poder borrar algo, veamos a nivel de MySQL lo que ocurre, les parece?

Bien ladies and gentlemen he aqu el destructivo poder de DELETE. Por lo


tanto, usadlo con sabidura. Hasta Pronto

Seleccin inexacta
No les ha ocurrido que de cuando en cuando no estn seguros de si un nombre
se escribe de tal o cual forma. Por ejemplo, el nombre Andros (nombre griego
que significa Hombre) podra confundrsenos con el nombre Andrs o viceversa.

Hay una forma de prevenir este tipo de problemas en MySQL: la sentenciaLIKE.

La sentenciaLIKEnos simplifica la vida de una manera enorme, ya que nos da


la facilidad de seleccionar un resultado con base a bsquedas no exactas. La
palabraLIKEen ingls significaCOMO. En otras palabras, cuando le decimos a
MySQL por ejemplo:

SELECT precio FROM tabla WHERE producto LIKE %so%;

Le estamos diciendo a MySQL SELECCIONE la columna precio DESDE


tabla, EN DONDE la columna producto SEA COMO (o CONTENGA) so

Por favor tenga mucho cuidado en la forma en la que escriben la sentencia LIKE,
es decir lo que est a continuacin de la sentencia LIKE. Por favor no olviden
que la forma en la que tenemos que escribirla es primero, comillas simple;
segundo signo de porcentaje; luego la bsqueda como tal; signo de porcentaje
de nuevo; y comillas simples para cerrar la sentencia. Cualquier error en esta
sintaxis, ocasiona un error.

Adems, recuerden siempre de NO poner un signo de igual despus de la


condicinWHERE, ya que tambin proporcionar un error.

Veamos ahora la forma en la que la sentenciaLIKEes utilizada, adems de un


par de errores al no utilizar la sentencia apropiadamente:


Esta es la forma en la que la sentencia LIKE funciona. En nuestra siguiente
leccin aprenderemos aALTERARalgunas cosas en una tabla. Por el momento
recuerden lo que dijo Lucio Anneo Sneca: La vida es como una leyenda: no
importa que sea larga, sino que est bien narrada

Alterar
Hola a todos y todas, cmo estn?
El alterar una tabla no es del todo conveniente, pero se hace a veces necesario.
El alterar una tabla implica a veces el cambiarle de nombre a la tabla, o
cambiarle el tipo de datos que almacenar una tabla, o el cambio del nombre
de la columna, etc.
Por qu no es del todo conveniente? En realidad es un temor milenario
transmitido a travs del ADN como un terror instintivo de cualquier
programador o encargado de una base de datos. Claro est, este temor no es
infundado, no seor. El temor se deriva de una serie de razones, para
mencionar alguna, imaginen ustedes lo que sucedera si, una vez creada la base
de datos, insertados una cantidad considerable de datos y teniendo nuestra
aplicacin siendo utilizada por una gran cantidad de personas que insertan,
borran, modifican y consultan nuestra base, necesitamos cambiar el nombre de
nuestra base por alguna razn. Si la aplicacin que utiliza nuestra base de
datos contiene una cantidad igualmente enorme de llamadas a nuestra base de
datos (especficamente a la tabla a la que le cambiamos el nombre), entonces
nuestra aplicacin est llamando a una tabla que ya no existe (al menos, no
existe nunca ms con el nombre que le dimos en un principio), por lo que
nuestra aplicacin (o nuestro motor de base de datos) nos enviar un mensaje
de error diciendo que la base de datos no existe ms y que nuestro puntero
est apuntando (perdn por la obvia redundancia) a un valor nulo (NULLen la
mayora de las veces).
Todo lo anterior se traduce, como ya seguramente lo habrn adivinado en una
cacera de brujas dentro del cdigo de la aplicacin que hace las llamadas a la
tabla a la que le hemos cambiado el nombre. Lo que implica una cantidad de
tiempo invertido (que podra de hecho ser tiempo perdido) en una tarea que no
hubiese sido necesaria si simplemente no le hubisemos cambiado el nombre
desde un principio a nuestra tabla.
Muy bien, despus de haberles asustado, veamos la sintaxis de la
sentenciaALTER, que es la que se utiliza paraALTERARel balance del universo
de nuestra base de datos:

En nuestro ejemplo vamos a utilizar algunas de las capacidades de la


sentenciaALTER, conforme avancen sus necesidades, aprendern a utilizar
otras opciones de esta sentencia. Por el momento, vean algunas de los poderes
de la sentencia dicha:

Damas y caballeros, tal y como en las enseanzas de las disciplinas espirituales


orientales, nuestro deber es mostrar todos los caminos posibles. Sin embargo,
no est dems hacer de nuevo la advertencia: eviten al mximo utilizar la
sentencia ALTER para modificar una base de datos que ya est llena de
informacin. Claro est, de cuando en cuando se hace imposible prescindir de
esta utilidad, pero en la medida de lo posible, no la utilicen. Hasta Pronto.

Llaves primarias
Una palabra sobre diferenciacin. Es necesario asegurarnos de que las entradas
en una base de datos puedan ser diferenciadas de otras.

La forma de lograr esto, es a travs de lo que suele llamarse una LLAVE


PRIMARIA. Lo que una de estas llaves primarias es, es simplemente una
distincin (usualmente un nmero) que nos ayude a distinguir el contenido de
una fila de otra, incluso si el contenido de una columna es idntico a otro.

Podemos crear una llave primaria en el momento de crear la tabla o incluso


crearla luego por medio de la sentenciaALTER.

Antes de continuar y ver nuestro vdeo, debemos presentar a unas cuantas


sentencias que nos darn muchas satisfacciones (y otros tantos dolores).

Cuando creamos o modificamos las columnas de una tabla nos podemos dar el
lujo de utilizar un par de sentencias que explicamos a continuacin:

NOT NULL: Esta sentencia le dice a MySQL que el valor que debe guardarse en
la columna en donde la utilizamos no puede ser nulo, lo cual previene nuestra
base de guardar no valores en sus contenedores.

AUTO_INCREMENT: Esta sentencia hace que la columna a la que se le aplica le


de un valor numrico que se incrementar automticamente cada vez que una
nuevaFILAsea agregada a nuestra base de datos.

La necesidad de explicar las dos sentencias anteriores, es precisamente porque


se utilizan en muchas ocasiones al asignar a nuestra tabla una llave nica.

Para muestra un botn, vean ahora nuestro vdeo de ejemplo y, posteriormente,


el resultado de insertar datos en la tabla que creamos en nuestro vdeo:


Vean a continuacin el resultado de insertar datos en la tabla que hemos creado
en nuestro vdeo:

Muy bien amigos y amigas, esto es todo lo que respecta a las llaves primarias.
Por el momento recuerden la frase de Billy Wilder: Recuerda que eres tan
bueno como lo mejor que hayas hecho en tu vida Que todo, TODO lo que
vayamos haciendo en nuestras vidas, sea siempre mejor que lo anterior. Hasta
Pronto.

Operadores en MySQL
Hola de nuevo. Esperamos que estn muy bien y con toda la disposicin del
mundo para continuar con nuestro aprendizaje de MySQL.
En MySQL adems de llevar a cabo las operaciones con bases de datos,
podemos tambin llevar a cabo operaciones, no slo con datos guardados en la
base de datos, sino tambin con valores que no necesariamente formen parte
de nuestra base de datos.
Todos conocemos las operaciones bsicas, es decir: la suma, la multiplicacin, la
resta y la divisin. Todas estas operaciones pueden llevarse a cabo sin
problemas en MySQL sin necesidad de recurrir a datos que estn guardados en
la base de datos.
La forma en la que vamos a hacer dichas operaciones es a travs de la
sentenciaSELECT (otras de las bondades de esta sentencia), de la siguiente
forma:
SELECT operacin;
As, la sentencia
SELECT 2+2;
Nos dara como resultado 4 (a que no esperaban una respuesta de este tipo).
Con todo, debemos tener cuidado de la precedencia de los operadores, ya que
algunos operadores tiene mayor precedencia que otros y, por ejemplo, si
hacemos la siguiente operacin:
SELECT 5 + 2 * 2;
La respuesta no ser 14 (teniendo que cuenta que las operaciones se realizan de
izquierda a derecha), sino que ser 9, ya que la multiplicacin tiene prioridad
sobre la suma (lo cual podra tomarse como una especie de racismo
matemtico, pero por fortuna eso, en las sabias e inteligentes matemticas, no
existe).
Finalmente, y antes de ver a los operadores en accin, mencionemos un
operador nuevo (al menos en cuanto a las operaciones matemticas se refiere),
este es, el operadorMdulo (%). Para aquellos conocedores de C, C++ o PHP
les ser muy conocido nuestro viejo amigo Mdulo. Este operador proporciona
el residuo de un cociente, por ejemplo, la operacin:
SELECT 6 % 4;
Nos da como resultado 2, siendo que el residuo de la divisin entre 6 y 4 es 2.
Si lo que se estn preguntando es la utilidad de este operador, en realidad
depende de las necesidades de cada aplicacin o de cada operacin que
necesitemos efectuar con nuestra base de datos.
Ahora s queridos amigos, veamos el resultado de hacer operaciones con
MySQL:


En nuestra siguiente leccin vamos a ver operaciones lgicas en MySQL, por el
momento, qudense con las palabras del maestro Joaqun Sabina: El gobierno
si yo fuera presidente, no dudara tanto en hincarle el diente, al ruido de sables
que hay cada mes, que se cruzan los cables del coronel Qu tal? Sabina para
presidente!, no les parece? Hasta Pronto.

Operadores de comparacin
Bienvenidos y bienvenidas. Con un billete de ida hacia el conocimiento,
iniciamos esta nueva entrega.

Los operadores comparativos son tiles a nivel de programacin y, por


supuesto, a nivel de operaciones con bases de datos. En MySQL los operadores
funcionan de manera extremadamente similar a los operadores a nivel de
lenguajes de programacin, es decir, si las comparaciones (les decir, las
operaciones comparativas) resultan verdaderas, el valor retornado es 1; por el
contrario, si la comparacin resulta falsa, el valor retornado es 0.

La forma de llevar a cabo las comparaciones es a travs de la sentenciaSELECT,


de la siguiente forma:

SELECT operacin comparativa;

Las operaciones comparativas que podemos llevar cabo son:

La operacin de igualdad: 8 = 8
La operacin Mayor que: 7 > 3
La operacin Menor que: 4 < 15
La operacin Mayor o igual que: 3 >= 3
La operacin Menor o igual que: 10 <= 5
La operacin No es igual a: 10 = 3 3 <> 2

La operacin Null: 7 <=> Null(La expresin null, recuerden, no es igual a 0,


null es un valor que no ha sido programado an, lo cual no significa
necesariamente que est vaco, sino que es un valor que no est definido an)
Una observacin importante, es que si decimos que 7 = Null, el resultado no
ser cierto o falso (1 0), sino que resultar en que la expresin entera se
convierte en null, por tal razn, debemos utilizar el operador especial para la
sentencia NULL< = >.

Finalmente, veamos cmo se llevan a cabo las operaciones descritas en el


ambiente MySQL:


Estos son los operadores comparativos con los que podemos trabajar, en
nuestra siguiente entrega, veremos las comparaciones con cadenas que MySQL
es capaz de realizar, por el momento: Hasta Pronto.

Operaciones con Cadenas


Los operadores de cadenas trabajan de manera muy similar a los operadores
lgicos de la leccin anterior, es decir, retornan un valor de cierto o falso (valor
booleano).

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

SELECT cadena operador cadena;

Por favor presten atencin a lo que encierra a ambos valores de cadena, es decir
a las comillas simples. Lo que las comillas simples hacen, como seguramente ya
habrn 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;


Retornara un valor de 1, es decir verdadero.
Por otro lado, si la expresin escrita fuese:
SELECT me llamo Juan = me llamo Juan;

El resultado sera el siguiente:

Como vern, es un error cruel y grficamente mortificante (cranlo, cuando a


las 3 de la madrugada, despus 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 operadorLIKE,


de una manera similar a como la utilizamos al hacer consultas a una tabla, es
decir:

SELECT bibidibabidibu LIKE bibidibabidibu;


Retornara 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 comodn hace, como en un juego de pker (perdn si no
son tahres como nosotros), es reemplazar o bien un carcter o bien la cadena
completa.

Los caracteres que utilizamos como comodines pueden ser:

El smbolo sustituto de un solo carcter, el cual es el guin bajo (_)

O el smbolo que sustituye la cadena completa, o el resto de la cadena a partir


de donde ponemos el smbolo, el cual es el smbolo de porcentaje (%)

Despus de todo lo expuesto, veamos el comportamiento de los operadores de


cadena, les parece?

En nuestra siguiente leccin queridos amigos, veremos los operadores lgicos en


MySQL. Por el momento recuerden: El inteligente se percata de todo, el tonto
hace observaciones sobre todo (Heinrich Heine) Recuerden de percatarse de
todo. Y una de las bendiciones de trabajar con la informtica, es esa, debemos
percatarnos de todo.

Operadores lgico s
Los operadores lgicos en MySQL nos permiten combinar ms de una expresin,
y obtener un resultado booleano, es decir cierto o falso (1 0
respectivamente).

Tal y como vimos en nuestra leccin 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 utilizacin de los
operadores lgicos, siendo que podemos utilizar ms de una expresin.

As por ejemplo, la expresin:

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 lgico OR, el cual decide de entre la evaluacin de una expresin O la
evaluacin de otra.

Una observacin importante, es que en MySQL, al igual que en muchos


lenguajes de programacin como C o C++, los operadores lgicos pueden
escribirse con base en smbolos. Dicho lo anterior, observen que la expresin 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


espaol), el cual, al contrario del operador OR, EXIGE que ambas expresiones
comparadas sean verdaderas, de tal manera que la expresin anterior, aplicada
al operador AND nos dara un valor falso (0), la razn es que 12 = 12 es cierto,
pero 28 = 115 no lo es. Recordando, ambas expresiones TIENEN que ser
verdaderas, de lo contrario, la expresin 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 lgico es el Operador de Negacin, el cual, en realidad revierte la


evaluacin de las expresiones que estamos evaluando (mareados?, no se
preocupen, nosotros tambin)
A nivel matemtico debemos recordar que la negacin de la negacin es, en
realidad una afirmacin (as pues, si la mujer de nuestros sueos nos dijese
no, no te quiero, podemos hincarnos y cantar aleluya)
Para aclarar un poquito este operador, veamos la siguiente expresin:
SELECT NOT (3 = 6);
La evaluacin normal sera obviamente falsa, sin embargo, siendo que estamos
anteponiendo el operador lgico NOT, la evaluacin resulta verdadera. Razn, lo
falso de los falso, es lo verdadero.
El smbolo para sustituir la sentencia NOT es el signo de cerrado de exclamacin
(!).
Ahora, despus de saber cuales son los operadores lgicos que podemos utilizar
en MySQL, veamos un ejemplo visual:

Muy bien queridos amigos, no nos queda ms que decirles que en nuestra
siguiente leccin vamos a ver las expresiones regulares en MySQL; y que
adems necesitamos que no olviden lo que dijo Julios Marx (Groucho):
Encuentro la televisin muy educativa. Cada vez que alguien la enciende, me
retiro a otra habitacin y leo un libro Los comentarios, se los dejamos a
ustedes. Hasta Pronto.

Expresiones regulares
Hola a todos.
En esta nueva entrega vamos a explicar la parte bsica de las expresiones
regulares. Debemos hacer nfasis en el hecho de que el tema de expresiones
regulares es largo y complejo, y que debido a ello trataremos de resumir lo ms
posible.
Las expresiones regulares son una herramienta poderosa que nos ayuda a
seleccionar expresiones de una manera general. Podramos ver a las
expresiones regulares como una enorme extensin de la expresin LIKE, que
ya vimos en una leccin anterior. Decimos que es una extensin debido a que
podemos incluir una serie de operadores lgicos que nos ayudarn a hacer de
nuestra seleccin una seleccin ms 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 botn:
SELECT rumpelspinskin REGEXP k;
La sentencia anterior nos dara como resultado un valor de 1, lo cual implica que
es un resultado verdadero. Quin nos dice por qu? De acuerdo, el muchacho
de la camisa caf con rombos rojos (un aplauso al que haga juego con nuestra
descripcin) 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 evaluacin en este caso tambin resulta verdadera, dado que la barra vertical
le dice a MySQL que evale si existe una expresin O la otra. Si por ejemplo la
sentencia hubiese sido REGEXP a|z, entonces la expresin hubiese sido
evaluada como falsa (0). Una observacin que se hace necesaria, es que no
importa si la evaluacin incluye ms de una palabra, de tal manera que si la
expresin 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 expresin evaluada.
Podemos evaluar, de igual manera, el hecho de si la expresin regular comienza
con un carcter especfico, utilizando en la evaluacin el circunflejo (^), de la
manera siguiente:
SELECT El perfume REGEXP ^E;
Con la expresin anterior, el resultado sera cierto (1), dado que la expresin
comienza con el carcter E
La contraparte del circunflejo viene a ser el signo de dlar ($), el cual le advierte
a MySQL que la expresin regular que deseamos evaluar debe ser el carcter
final, de la siguiente manera:
SELECT Karamazov REGEXP v$;
Esta expresin retornara un valor verdadero, dado que la expresin comparada
finaliza con el signo de dlar.
Si nuestras necesidades se encaminan a comparar solamente el primer y el
ltimo carcter de nuestra expresin, podramos utilizar un carcter comodn,
de la siguiente forma:
SELECT Karamazov REGEXP ^K.+v$;
Por favor obseren que la expresin de evaluacin es ^K.+v$, y que
inmediatamente despus de la K hay un punto, esto es importante, pues le dice
a MySQL que busque la expresin regular cuyo inicio sea la letra K, el
siguiente carcter sea cualquiera, los siguiente caracteres (sin importar su
nmero) sean cualesquiera y el carcter final, sea la negra v.
En nuestro siguiente encuentro, vamos a aprender un poquitn ms sobre
expresiones regulares, por el momento, disfruten de la vida, ranse de ella y
Hasta Pronto.

Expresiones regulares 2
Hola de nuevo amigos y amigas. En esta nueva leccin vamos a seguir
aprendiendo sobre expresiones regulares, haciendo que todo se vuelva ms
interesante.
Para hacer que MySQL evale partes muy especficas de una expresin,
podemos hacer uso del siguiente truco (en realidad es simplemente una
construccin de MySQL, lo del truquito es slo un decir).
Digamos que lo que deseamos es averiguar si la expresin regular rren se
encuentra en la cadena Rpido corren los carros por el ferrocarril
Qu hacemos? Utilizamos la siguiente evaluacin:
SELECT Rpido corren los carros por el ferrocarril REGEXP [rren];
Esta evaluacin nos da un valor verdadero (1), dado que lo que hacen los
corchetes, es decirle a MySQL que busque la expresin regular contenida dentro
de ellos, en cualquier lugar de la cadena evaluada.
Por otro lado, si desesemos, por ejemplo, hacer un rango de evaluacin,
bastara con incluirlo dentro de los corchetes, de la siguiente manera:
SELECT alskjdhasjkdhasljkdhas REGEXP [a-z];
Lo anterior basta para que la expresin sea evaluada como verdadera, debido
que estamos especificando un rango extenso entre la a y la z. Sin embargo,
bastara con incluir un nmero (perdn, un dgito) para que la expresin sea
evaluada como falsa. Por otro lado, la expresin:
SELECT lksjfsdfsdlfsdjlsfd45646465lkashdakshdkas REGEXP [a-z0-9];
Sera 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.

Muy bien amigos y amigas, esto es lo que respecta a expresiones regulares en


este curso. En nuestro siguiente encuentro, vamos a hablar sobre los criterios
de agrupacin a la hora de hacer una consulta. De momento, qudense con las
palabras de Leonard Conhen: El amor no tiene cura, pero es la nica medicina
para todos los males No hay nada como el amor. Amemos lo que hacemos,
amemos lo que somos, amemos lo que damos. Hasta Pronto.

Ordenando
Salud y amor para todos! (lo del dinero depende de sus gustos)
En este nuestro nuevo coloquio, vamos a aprender a hacer consultas ms
complejas, gracias a los criterios de agrupamiento que existen.
Esto de los criterios de agrupamiento son en realidad una delicia semntica 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, sera 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 presentara 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 DESCinmediatamente despus del nombre de la columna que
queremos que sea el parmetro 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 especfica.
Ahora, veamos en accin la sentencia ORDER BY, la cual tratamos de explicar
con detalle en nuestro siguiente vdeo:

En nuestra siguiente leccin, aprenderemos a limitar los resultados de una


consulta. Por el momento cudense mucho y Hasta Pronto.

Limitando una consulta


Buen da a todos.
En esta nueva entrega, vamos a aprender a limitar una consulta.
Antes de explicar como se hace, permtannos darles un ejemplo de para que se
hace. Supongamos por un momento que estamos desarrollando una aplicacin
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
pgina HTML (como sera el caso de una aplicacin en PHP). Lo anterior no
parece de mayor importancia, pero pensemos por un momento en la
presentacin de la informacin 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 tendra la oportunidad de ver las primeras lneas
presentadas en la pantalla, siendo que los datos se presentaron sin
conmiseracin alguna ni lmites.
No es adorable como se iluminan los ojos cuando se comprenden las razones de
la existencia de algo (de admitir es que ni polticos ni militares han logrado
hacer que nuestros ojos se iluminen).
Muy bien, despus de toda nuestra explicacin-ejemplo, diremos que la
sentencia con la que limitamos la presentacin 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 compaa de la
sentencia ORDER BY que aprendimos en la leccin anterior de la manera
siguiente:
SELECT * FROM tabla ORDER
fila_inicio, filas_a_presentar;

BY

criterio_de_ordenacin

LIMIT

Muy bien damas y caballeros, los dejamos ahora con un ejemplo del uso
deLIMITen la vida real.

Gracias por su presencia amigos y amigas, esperamos claro est encontrarnos


pronto (en la prxima leccin claro). Por el momento recuerden las palabras de
Jacinto Benavente: El amor es como Don Quijote: cuando recobra el juicio es
que est para morir Que nuestro amor por el conocimiento no recobre nunca la
cordura. Hasta Pronto.

Inner Joins
Por una de esas casualidades recuerdan ustedes el tipo de base de datos que
estamos estudiando?
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 relacin.
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
ingls). Los tipos de uniones que podemos realizar sonINNER JOINS(Uniones
Interiores) yLEFT JOINS(Uniones por la Izquierda).
Las uniones ms comunes con las del tipo Interior, es decir,INNER JOINS, las
cuales son las ms sencillas. La forma en la que hacemos unINNER JOIN es
simplemente especificando las columnas de las tablas de las que queremos
hacer la consulta, escribiendo explcitamente la palabra INNER
JOINinmediatamente despus, o simplemente escribiendo una coma entre la
tabla uno y la tabla dos, posteriormente DEBEMOS especificar una condicin
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 podra 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 vern, la forma de especificar las tablas de donde estamos sacando la
informacin es simplemente con un punto (.), especificando primero el nombre
de la tabla y posteriormente el nombre de la columna, esto tanto despus de la
palabraSELECT, como despus de la palabraWHERE.
Ahora amigos y amigas, vean la forma en la que se hace un INNER JOIN en

nuestro siguiente vdeo:

Esto es todo lo que respecta a losINNER JOINS (al menos de momento), en


nuestra siguiente entrega,LEFT JOINS. De momento, disfruten de la existencia
y Hasta Pronto.

Left Joins
Cmo hacer para que la informacin de una tabla, sea mostrada junto con la de
otra?
La solucin es utilizando LEFT JOIN. Los LEFT JOINS (perdn por utilizar las
palabras en ingls, pero la traduccin de unin izquierda o unin interior para
losINNER JOINSno 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 condicin, 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 recomendacin 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 unLEFT 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 ms, las filas que no concuerden
sern ignoradas por MySQL.
Veamos por ejemplo el siguiente vdeo, para que todo lo anterior nos quede
claro:

En nuestra siguiente entrega, aprenderemos sobre el agregado de datos. Por el


momento, sean felices y Hasta Pronto.

También podría gustarte