Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial 2 Basico My SQL
Tutorial 2 Basico My SQL
MySQL es una de las mejores bases de datos (DB) en el mundo. Hasta los
extraterrestres usan MySQL. Algunos sitios web famosos como YAHOO.COM,
GOOGLE.COM, YOUTUBE.COM usan mysql para manejar sus clientes y diferentes
pedidos. como usuario dedicado al Open Source uso MySQL y de esta forma puedan
apreciar el poder fenomenal de este tipo de base de datos.
Por supuesto, con esto no quiero decir que MySQL sea el unico que existe, ya que
tambien existe Oracle, Dbase y la familia de los SQL (MsSQL, PostgreSQL entre
otros), pero para razones de aprendizaje utilizaremos de una vez MySQL en este
curso introductorio. Asi ya tendran el conocimiento de la herramientra mas
poderosa en cuestion de DBMS.
Las siguientes razones son algunas pero no todas por las cuales yo uso y ustedes
usaran en este tutorial MySQL:
1. Es gratis
2. Es rapido
3. Es facil de instalar y configurar
4. Es facil de aprender, mantener, optimizar, respaldar e importar.
5. Es compatible con varios sistemas operativos. (Windows, Linux, Unix, Solaris)
6. Es compatible con varios lenguajes (PHP, PYTHON, PERL, C++, JAVA, RUBY)
7. Es codigo abierto
REQUERIMIENTOS
SOFTWARE NECESARIO
http://dev.mysql.com/downloads/mysql/5.1.html
(La version que dice "Windows (x86) ZIP/Setup.EXE" de las 3 existentes alli para
Windows)
MYSQL GUI TOOLS (Trae Mysql Administrator, Mysql Query Browser (Este se
usara mucho), Mysql Benchmark) Visita http://www.mysql.com o bajalo directo
desde aqui:
MYSQL ADMINISTRATOR
Por ahora solo usaremos la parte de creacion de DBs para entender rapidamente el
comportamiento y formacion de una DB.
Aqui pueden observar una DB formada por 3 Tablas, cada tabla tiene entre 2 a 5
columnas cada una con informacion por ejemplo de la siguiente forma:
TABLA:
Materia - Profesor <--- Nombre de las Columnas
Matematica - Pedro Perez <--- Fila o Row 1
Biologia - Angelica Labarca <--- Fila o Row 2
Fisica - Enrique Suarez <--- Fila o Row 3
Quimica - Sergio Hernandez <--- Fila o Row 4
Al crear una DB, esta esta formada por TABLAS, y estas a su vez por COLUMNAS.
En mysql administrator es muy sencillo crear una DB. Ahora crear las tablas y las
columnas mas que todo es un poco mas complicado. Para crear una tabla solo
basta con seleccionar cualquier DB existente y escoger "Create Table" (esto aun no
lo hagan ya que es solo una explicacion) Las tablas tienen lo que se les llama
formatos de tabla. En resumen cada formato esta hecho para realizar x tipo de
operaciones mas rapido. Por ejemplo, para guardar mas rapido, leer mas rapido,
ingresesar datos mas rapido, etc... En este curso trataremos 2 de los multiples
tipos de formatos para las tablas. MyISAM y INNODB.
MyISAM - Formato de tablas que ofrece ingreso de datos de forma rapida, soporta
transacciones entre tabla, busquedas complejas entro otros. Su mayor ventaja es
ser rapido vs INNODB en la mayoria de los casos.
TIPO DE COLUMNA
Llave Primaria - Es la columna con la cual se guian las demas columnas para
organizar la informacion con respecto a un orden. Esta columna es unica y no nula.
Normalmente se auto incrementa con cada fila ingresada.
Unica - Este tipo de columna no permite repetir los mismos valores en cualquiera
de sus filas. Por ejemplo la cedula de los usuarios que no pueden ser iguales.
No Nula - Es un tipo de columna que NO puede estar vacia. Siempre se le debe
ingresar algun tipo de dato.
LECCIONES DE SQL
Para nuestras lecciones utilizaremos una compleja base de datos llamada SDB o
Super Base de Datos (Por el tamaño)
En LINUX:
Por consola ve a la carpeta donde descomprimistes la SDB. y sigues los siguientes
pasos:
Cada query que se mencione a continuacion debe ser escrita en el espacio superior
de MySQL Query Browser. Luego de escribir la informacion alli arriba presionan el
boton de Ejecutar o presionan CTRL+ENTER. Para asi ejecutar el query que
estamos escribiendo.
Ya con esto estaremos todos utilizando la base de datos mangos, con lo cual
comenzamos el tutorial.
SELECT - Selecciona una tabla de una DB. Tambien puedes especificar una
columna de esa tabla.
Código:
SELECT * FROM creature_template;
Esto seleccionaria todas las columnas de la tabla creature_template. El * significa
TODAS las columnas, el FROM es literalmente DE (en este caso) y lo ultimo es la
tabla.
Con esto entendido se podria leer de la siguiente forma: Selecciona TODAS las
columnas DE la tabla creature_template
Código:
SELECT entry FROM creature_template;
Esto solo seleccionaria la columna entry de la tabla creature_template
Código:
SELECT entry,name,speed FROM creature_template;
Esto seleccionaria las columnas entry,name,speed de la tabla creature_template
Como puedes apreciar, puedes jugar un poco con la seleccion de las columnas de
una tabla especificas. El FROM en la linea de syntax es quien separa las columnas
de las tablas, por esto, es facil expresar el SELECT en una simple linea:
Como podras ver, puedes seleccionar multiples tablas, pero debes asegurarte de
que no tengan columnas similares (Ya que ocasionaria un error comun de
Ambiguedad). Tambien puedes seleccionar multiples columnas de multiples tablas.
Un ejemplo seria:
Código:
SELECT spawndist,orientation,name,speed FROM creature,creature_template LIMIT
10;
Ahora coloquemos un ejemplo de lo que pasaria si dos tablas tuvieran una columna
similar (mismo nombre). Tomaremos para este ejemplo las columnas
item_template y creature_template las cuales tienen una columna llamada name.
Si en este ejemplo yo trato de ejecutar el siguiente query:
Código:
SELECT name FROM item_template,creature_template;
Este enviaria un error como respuesta, diciendo que la columna name existe en
ambos y no sabe cual dar como respuesta final (Error de ambiguedad).
Código:
SELECT item_template.name,creature_template.name FROM
item_template,creature_template LIMIT 10;
En este ejemplo se especifico que la columna que se queria mostrar era el name de
la tabla item_template y el name de la tabla creature_template. Esta especificacion
se hizo con el item_template.name y creature_template.name.
Hasta ahora hemos aprendido como usar de forma basica el comando SELECT.
Tambien hemos aprendido como seleccionar multiples columnas, multiples tablas y
multiples DBs en el proceso.
Ahora, digamos que queremos comenzar a organizar la informacion que nos llega.
Existen 2 formas basicas de organizacion. Una es por grupos (GROUP BY), el otro
es por orden (ORDER BY). Tengan el siguiente ejemplo:
Código:
SELECT * FROM creature LIMIT 1000;
Aqui recibiremos como respuesta 1000 filas de informacion. Toda esta informacion
esta mal organizada u organizada de una forma que no es facil para el cliente. Aqui
es donde aplicamos los 2 metodos basicos explicados.
ORDER BY
GROUP BY
Código:
SELECT Columnas FROM Tablas ORDER BY Columnas;
Este es para ORDER BY (Organizar por..)
Código:
SELECT Columnas FROM Tablas GROUP BY Columnas;
Este es para GROUP BY (Agrupar por...)
Código:
SELECT * FROM creature ORDER by id DESC LIMIT 1000;
Supongo que debes estar pensando "ok, y si quisiera organizar con varias
columnas", lo puedes hacer de la siguiente forma:
Código:
SELECT * FROM creature ORDER by id DESC, map;
Ahora el orden dependera primero de la columna id y esta sera invertida, luego que
esto este organizado se organizaran los id similares con la columna map.
Código:
SELECT * FROM creature_movement;
Código:
SELECT * FROM creature_movement GROUP BY id;
Esto simplemente nos dara todas las diferentes columnas que tengan id diferente,
si encuentra un id igual mientras busca, lo agrega al grupo similar con el mismo id
ya que este ya fue encontrado, como resultado, podremos ver todos los diferentes
id que existen en la tabla creature_movement. De esta forma "agrupando" todos
los id. Por ahora tenemos u poco mas de 500 entradas o rows.
Puede ser que te preguntes, podre yo usar ambos comandos GROUP BY y ORDER
BY, pues claro, digamos que tenemos agrupados los diferentes id y queremos
ordenarlos usando la columna map:
Código:
SELECT * FROM creature GROUP BY id ORDER by map;
Asi que a la final la ley del oeste dira que el orden siguiente es el correcto:
Código:
SELECT columnas FROM tablas GROUP BY columnas ORDER BY columnas;
Código:
SELECT * FROM creature WHERE map = 533;
En este ejemplo se le pide a SQL que nos entregue todas los campos o rows que
tengan map = 533.
Digamos que queremos buscar por las filas o rows que tengan spawntimesec mayor
a 1000 en la tabla creature:
Código:
SELECT * FROM creature WHERE spawntimesecs > 1000;
o queremos buscar por los rows que tengan spawndist mayor a 10:
Código:
SELECT * FROM creature WHERE spawndist > 10;
Código:
SELECT * FROM creature WHERE spawndist > 10 ORDER BY spawndist;
Código:
SELECT * FROM creature WHERE spawndist > 10 GROUP BY spawndist ORDER BY
spawndist;
...y asi sucesivamente, solo las limitaciones del programador pueden atarlo a todo
lo que se puede hacer con el comando WHERE, tanto asi que si de limitaciones
estamos hablando existe el comando LIMIT, que tal.
Si no deseas ver todo los rows o filas de una busqueda o de un comando, y solo
quieres ver una porcion entonces el comando LIMIT es necesario como se
demuestra en el ejemplo siguiente:
Código:
SELECT * FROM creature WHERE spawndist >10 GROUP BY spawndist ORDER BY
spawndist LIMIT 5;
Esto solo te dara los primeros 5 rows o filas de la busqueda
Código:
SELECT * FROM creature WHERE spawndist >10 GROUP BY spawndist ORDER BY
spawndist LIMIT 5,10;
Esto te dara las siguientes 10 filas que esten despues de las primeras 5 filas, o sea,
te dara de la fila 6 hasta la 15 de las que se encuentren en la busqueda.
Código:
SELECT * FROM creature WHERE spawndist > 10 AND map = 0;
Esto mostraria todos los rows que tengan spawndist mayor a 10 Y que tengan map
=0
Código:
UPDATE tablaZ SET columna1 = X WHERE columna2 = Y;
Este es el formato tipico de UPDATE en el cual se actualizara la tabla tablaZ con el
nuevo valor X en la columna1 pero solo donde se encuentre el valor Y en la
columna2
Por ejemplo:
Código:
UPDATE creature SET map = 23 WHERE map = 999;
Esto cambiara a 23 todos los valores que sean igual a 999 en la columna map
Código:
UPDATE creature_template SET name = 'Zelda' WHERE id = 1234567;
Esto cambiara los valores en la columna name a Zelda donde tengan en la columna
id el valor 1234567
O sea, una columna puede cambiar a otro si cumple con el WHERE. Un ejemplo de
la vida real seria:
Código:
UPDATE salario SET bonos = 1 WHERE extra = 10;
En este caso si estuvieramos en una base de datos de un trabajo, se actualizarian
todos los campos donde el trabajador halla estado 10 horas trabajando. La columna
bonos seria afectada reflejando esto. De esta forma, si el usuario trabaja 10 horas,
recibe un bonos.
Código:
UPDATE item_template SET name='Michael Jackson', health=334, mana=232,
eyes=blue, sex=male WHERE entry=69;
Esto actualizaria las columnas name, health, mana, eyes y sex donde el entry sea
igual a 69.
1. Primero se lee la linea despues del WHERE en busca de todos los valores que
tenga el WHERE. En nuestro ejemplo anterior seria la columna entry con el valor
69.
2. El query buscaria el entry 69.
3. Si es encontrado (Verdadero) modifica todas las columnas en la parte de SET del
query. En este caso serian name, health, mana, eyes y sex
Código:
INSERT INTO creature VALUES (1,2,3,4,5,6,7,8);
Código:
INSERT INTO creature (C1,C3,C4,C7) VALUES (4,7,2,9);
Esto significa que se agregarian 4 valores a 4 columnas. El valor 4 seria para la
columna 1 (C1), el valor 7 seria para la columna 2 (C3), el valor 2 seria para la
columna 3 (C4) y el valor 9 para la columna 4 (C7). Como se pueden dar cuenta,
las columnas de una tabla no tienen que estar en orden en el comando INSERT,
tampoco tienen que estar todas. Lo que si se tiene que cumplir es que la cantidad
de columnas especificadas en el comando INSERT sera la misma cantidad de
valores que se van a ingresar. Si la cantidad de columnas no es especificada (como
el primer ejemplo de INSERT) se asume que se estan tomando todas las columnas.
Código:
INSERT INTO account (username,password,gmlevel) VALUES (Zelda,Link,1);
En este query estamos agregando un usuario a la base de datos. el nombre de
usuario es Zelda, su clave es Link y su nivel de acceso es 1.
Para la columna username el valor es Zelda. Para la columna password el valor es
Link y para la columna gmlevel el valor es 1.
NOTA: Si tienen algun problema al insertar datos a una tabla, lo mejor es analizar
la tabla a la cual estan tratando de agregar valores y tambien analizar su query
para ver si esta bien escrito.
Para agregar multiples filas o rows pueden hacer lo siguiente:
Código:
INSERT INTO account (username,password,gmlevel) VALUES (Zelda,Link,1),
(Peter,Pong,1), (Tommy,Cark,2), (Wendy,Superman,2);
Esto nos ahorraria tener que escribir un query para cada entrada, como seria en el
proximo caso:
Código:
INSERT INTO account (username,password,gmlevel) VALUES (Zelda,Link,1);
INSERT INTO account (username,password,gmlevel) VALUES (Peter,Pong,1);
INSERT INTO account (username,password,gmlevel) VALUES (Tommy,Cark,2);
INSERT INTO account (username,password,gmlevel) VALUES (Wendy,Superman,2);
Código:
DELETE FROM creature WHERE guid IN (123,321,456,545);
Esto buscaria por los valores especificados en la columna guid y borraria esos rows.
En este caso serian los valores dentro del parentesis.
La opcion IN es para agrupar valores que poseen una columna similar. En el caso
de arriba sin la opcion IN, el query quedaria asi:
Código:
DELETE FROM creature WHERE guid IN (123);
DELETE FROM creature WHERE guid IN (321);
DELETE FROM creature WHERE guid IN (456);
DELETE FROM creature WHERE guid IN (545);
Código:
DELETE FROM item_template WHERE class=0;
Esto eliminaria todos los rows que tengan class igual a 0
Como pueden ver funciona similar a UPDATE pero mezclado con el WHERE de
SELECT.
REPLACE - Este comando reemplaza un valor por otro en una columna especifica.
Código:
REPLACE INTO db_version (version) VALUES (neobuntu);
Esto reemplazaria los valores de la columna version por el nuevo valor neobuntu.
Código:
REPLACE INTO quest_poi (questId, poiId, objIndex, mapId, mapAreaId, floorId, unk3,
unk4) VALUES ('1067', '0', '-1', '1', '362', '0', '0', '3');
Esto reemplazaria los valores de la fila o row que contenga el questId y poiId
iguales al query. Aun si existe el valor en la base de datos, este seria reemplazado
por este query nuevo.
REPLACE utiliza las columnas unicas para saber cuales filas reemplazar ya que, por
ser unicas, no se pueden repetir y por esto mismo son reemplazadas.
Código:
UPDATE game_tele SET name = REPLACE(name,'AltarOfStorms','AltarOfTornado');
Esto reemplazaria todos los valores que tengan AltarOfStorms por AltarOfTornado
en la columna name de la tabla game_tele.
Código:
UPDATE game_tele SET name = REPLACE(name,'Storms','Zelda');
Esto reemplazaria todos los valores que tengan Storms por Zelda en la columna
name de la tabla game_tele.
Quisiera agregar que REPLACE usa el mismo metodo que LIKE (El cual podran ver
mas abajo). Esto significa que si en el valor a buscar escriben la palabra "ado"
REPLACE buscara todos los casos donde "ado" se encuentre, incluyendo palabras
como 'Calmado', 'Heredado', 'Simplificado'. En cuyos casos si fuesemos a ejecutar
la siguiente linea:
Código:
UPDATE game_tele SET name = REPLACE(name,'ado','xyz');
REPLACE tambien puede ser utilizar en SELECT para reemplazar un valor antes de
enviarlo a pantalla, por ejemplo:
Código:
SELECT REPLACE(MaxLvl, 80, 30) FROM battleground_template;
Algunos ejemplos:
Código:
SELECT * FROM creature WHERE spawndist = 20;
Código:
UPDATE creature SET spawndist = 20 WHERE spawndist = 2000;
Código:
DELETE FROM creature WHERE spawndist = 9999;
Algunos ejemplos:
Código:
SELECT * FROM creature WHERE spawndist < 20;
Código:
UPDATE creature SET spawndist = 20 WHERE spawndist < 2;
Código:
DELETE FROM creature WHERE spawndist < 9;
Código:
SELECT * FROM creature WHERE spawndist > 20;
Código:
UPDATE creature SET spawndist = 20 WHERE spawndist > 2;
Código:
DELETE FROM creature WHERE spawndist > 9;
NOTA - Pueden mezclar el operador = con > o < para obtener >= y <=
Algunos ejemplos:
Código:
SELECT * FROM creature WHERE spawndist <> 20;
Selecciona todas las columnas donde spandist sea mayor o menor a 20. Que es lo
mismo que decir que sea diferente a 20.
Código:
UPDATE creature SET spawndist = 20 WHERE spawndist <> 2;
Actualiza la tabla creature colocando el valor 20 en la columna spandist, pero solo
donde spandist sea mayor o menor a 2.
Código:
DELETE FROM creature WHERE spawndist <> 9;
Elimina de la tabla creature todos los rows donde spandist sea mayor o menor a 9.
Código:
SELECT * FROM creature WHERE NOT spawndist = 20;
Código:
UPDATE creature SET spawndist = 20 WHERE NOT spawndist = 2;
Código:
DELETE FROM creature WHERE NOT spawndist = 9;
O con el simbolo !=
Código:
SELECT * FROM creature WHERE spawndist != 20;
Código:
UPDATE creature SET spawndist = 20 WHERE spawndist != 2;
Código:
DELETE FROM creature WHERE spawndist != 9;
|| - OR
Este simbolo es para expresar la letra O, en el caso de que queramos que se
cumpla O esta opcion O la otra. Si se cumple una de las dos o las dos el resultado
es verdadero y se ejecuta el comando.
Código:
SELECT * FROM item_template WHERE (class = 4 || class = 0);
Selecciona todos los rows donde la columna class sea igual a 4 o 0.
Código:
UPDATE item_template SET quality = 2 WHERE (subclass = 2 || BuyPrice = 0);
Actualiza la tabla item_template con el valor 2 en la columna quality donde la
columna subclass sea igual a 2 o la columna BuyPrice sea igual a 0.
Código:
DELETE FROM item_template WHERE (subclass = 1 || class = 2);
Eliminaria de la tabla item_template los rows que tengan 1 en la columna subclass
o 2 en la columna class.
Código:
SELECT * FROM item_template WHERE (class = 4 OR class = 0);
Código:
UPDATE item_template SET quality = 2 WHERE (subclass = 2 OR BuyPrice = 0);
Código:
DELETE FROM item_template WHERE (subclass = 1 OR class = 2);
AND && - Simboliza la palabra Y. A diferencia de OR donde se debe cumplir por lo
menos solo uno para que sea verdadero el query, con AND se deben cumplir ambos
para que sea verdadero el query.
Código:
SELECT * FROM item_template WHERE (class = 4 && subclass = 0);
Selecciona todos los rows donde la clase sea igual 4 Y la subclase sea igual a 0.
Código:
UPDATE item_template SET quality = 2 WHERE (subclass = 2 && BuyPrice = 0);
Actualiza la tabla item_template con el valor 2 en la columna quality donde la
columna subclass sea igual a 2 y BuyPrice sea igual a 0.
Código:
DELETE FROM item_template WHERE (subclass = 1 && class = 2);
Eliminaria de la tabla item_template todos los rows donde la columna subclass sea
igual a 1 y class igual a 2.
Los query anteriores tambien pueden ser escritos sustituyendo el simbolo && por
AND:
Código:
SELECT * FROM item_template WHERE (class = 4 AND subclass = 0);
Código:
UPDATE item_template SET quality = 2 WHERE (subclass = 2 AND BuyPrice = 0);
Código:
DELETE FROM item_template WHERE (subclass = 1 AND class = 2);
NOT ! - NO
Utilizado para negar un valor al compararlo.
Código:
SELECT * FROM item_template WHERE class != 0;
Seleccionaria todos los rows que NO tengan un valor de 0 en la columna class.
Código:
UPDATE item_template SET quality = 2 WHERE subclass != 2;
Actualizaria los rows donde subclass NO sea igual a 2.
Código:
DELETE FROM item_template WHERE class!=2;
Eliminaria todos los rows donde class NO sea igual a 2.
Tambien puede ser utilizado sustituyendo el simbolo != por NOT
Código:
SELECT * FROM item_template WHERE NOT class=0;
Código:
UPDATE item_template SET quality = 2 WHERE NOT subclass = 2;
Código:
DELETE FROM item_template WHERE NOT class = 2;
Código:
SELECT * FROM item_template WHERE NOT class != 0;
Seleccionaria todos los rows que SI tengan 0 en la columna class ya que la
negacion NOT se anula con la negacion != .
BETWEEN - ENTRE
Sirve para seleccionar un rango de valores entre un minimo y un maximo.
BETWEEN es un rango
Código:
SELECT * FROM creature_template WHERE minlevel BETWEEN 10 AND 20;
Seleccionaria todas las filas o rows donde minlevel tenga valores entre 10 y 20.
Código:
UPDATE * FROM creature_template SET maxlevel=100 WHERE minlevel BETWEEN
30 AND 50;
Actualizaria las filas donde minlevel tenga valores entre 30 y 50.
Código:
DELETE FROM creature_template WHERE maxlevel BETWEEN 30 AND 32;
Eliminaria los rows donde maxlevel tenga valores entre 30 y 32.
IN - DENTRO o EN
Opcion utilizada para agrupar valores que poseen columnas similares.
Código:
DELETE FROM creature WHERE guid = 999281;
DELETE FROM creature WHERE guid = 12381;
DELETE FROM creature WHERE guid = 13381;
DELETE FROM creature WHERE guid = 4341;
DELETE FROM creature WHERE guid = 4561;
DELETE FROM creature WHERE guid = 6763;
DELETE FROM creature WHERE guid = 2351;
DELETE FROM creature WHERE guid = 67981;
DELETE FROM creature WHERE guid = 565281;
Código:
DELETE FROM creature WHERE guid IN
(999281,12381,13381,4341,4561,6763,2351,67981,565281);
Otro ejemplo:
Código:
UPDATE item_template SET class = 2 WHERE entry = 1;
UPDATE item_template SET class = 2 WHERE entry = 2;
UPDATE item_template SET class = 2 WHERE entry = 3;
UPDATE item_template SET class = 2 WHERE entry = 14;
UPDATE item_template SET class = 2 WHERE entry = 21;
UPDATE item_template SET class = 2 WHERE entry = 111;
UPDATE item_template SET class = 2 WHERE entry = 31;
UPDATE item_template SET class = 2 WHERE entry = 231;
UPDATE item_template SET class = 2 WHERE entry = 451;
Código:
UPDATE item_template SET class = 2 WHERE entry IN (1,2,3,14,21,111,31,231,451);
LIKE utiliza un formato unico donde utiliza 2 simbolos entre comillas simples. El
simbolo % significa TODO y el simbolo _ significa 1 caracter o espacio.
Código:
SELECT * FROM item_template WHERE name LIKE '%sword%';
Selecciona todas las filas o rows que contengan la palabra sword en cualquier parte
de la columna name.
Código:
SELECT * FROM item_template WHERE name LIKE 'sword%';
Selecciona todas las filas o rows que contengan la palabra sword en el COMIENZO
de la columna name. Esto es porque la palabra sword no viene precedida del
simbolo % o del simbolo _.
Código:
SELECT * FROM item_template WHERE name LIKE '%sword';
Selecciona todas las filas o rows que contengan la palabra sword al FINAL de la
columna name. Esto es porque la palabra sword no viene seguida del simbolo % o
del simbolo _.
Código:
SELECT * FROM item_template WHERE name LIKE '% sword%';
Selecciona todas las filas o rows que contengan la palabra sword con un espacio
antes de ella en la columna name.
Código:
SELECT * FROM item_template WHERE name LIKE '% sword';
Selecciona todas las filas o rows que contengan la palabra sword al FINAL de la
columna name pero que ademas la palabra sword tenga un espacio antes de ella.
Código:
SELECT * FROM item_template WHERE name LIKE '%sword ';
Selecciona todas las filas o rows que contengan la palabra sword seguida de un
espacio y que ademas este espacio este al FINAL de la columna name.
Código:
SELECT * FROM item_template WHERE name LIKE 'Worn Sword';
Selecciona todas las filas o rows que contengan la palabra Worn Sword SOLAMENTE
en la columna name.
Código:
UPDATE item_template SET BuyPrice=0 WHERE name LIKE '%sword%';
Selecciona todas las filas o rows que contengan la palabra sword en cualquier parte
de la columna name y que la columna BuyPrice tenga de valor 0.
La condicion LIKE tambien tiene otros usos como por ejemplo los siguientes query:
Código:
SELECT * FROM item_template WHERE name LIKE 's____';
Seleccionaria todos los rows que comiencen con la letras s y luego tengan 4
caracteres cualquiera.
Código:
SELECT * FROM item_template WHERE name LIKE '__S__';
Seleccionaria todos los rows que comiencen con 2 caracteres cualquiera, luego una
S y luego 2 caracteres cualquiera.
Código:
SELECT * FROM item_template WHERE name LIKE '____S';
Seleccionaria todos los rows que contengan 4 caracteres cualquiera y luego que
finalice con la letra S.
Código:
SELECT * FROM item_template WHERE name LIKE '%____S%';
Seleccionaria todos los rows que contengan CUALQUIER tipo de combinacion donde
se cumpla que en alguna parte de su valor se encuentren 4 caracteres cualquiera y
luego una S.
Esto por ejemplo anularia todas las palabras de 4 caracteres o menos ya que la S
mas los 4 caracteres cualquiera dan 5 caracteres en total. Los simbolos % expresan
que el valor buscado puede ser mayor a los 5 caracteres que se estan buscando.
Código:
SELECT * FROM item_template WHERE name LIKE '%S____%';
Seleccionaria todos los rows que en CUALQUIER parte de su valor contengan una
palabra de 5 caracteres que comience con la letra S. O sea la letra S mas los 4
caracteres cualquiera.
Código:
SELECT * FROM item_template WHERE name LIKE '% ____S%';
Seleccionaria todos los rows que contegan un grupo de caracteres de 5 letras y que
finalicen con la letra S y que de paso tengan un espacio antes de ellos. Por ejemplo
la palabra " Matos" cumpliria con esta busqueda ya que tiene un espacio antes de
ella y tiene 4 letras antes de llegar a la letra S. Tambien la palabra " Matosino"
cumpliria con esto, como tambien " Clamsitico Orgunoso". Todod tienen un espacio
seguido de 4 letras y luego la letra S.
HAVING - TENIENDO
Condicion que SE DEBE cumplir para ser verdadera y mostrar los resultados
Código:
SELECT * FROM creature WHERE map = 0 HAVING spawntimesecs > 100;
Sin el HAVING este query nos regresaria todos los rows que tengan de valor 0 en la
columna map. Pero ya que le agregamos HAVING, adicional a que map sea 0, los
resultados deben tener en la columna spawntimesecs valores menores a 100.
NOTA - HAVING es una condicion exclusiva de SELECT la cual sirve para excluir
rows del resultado o agregar mas requisitos al query.
IGNORE - IGNORAR
Condicion que ignora un query si es verdadero o se cumple
Código:
INSERT IGNORE INTO quest_poi (questId, poiId, objIndex, mapId, mapAreaId, floorId,
unk3, unk4) VALUES ('1067', '0', '-1', '1', '362', '0', '0', '3');
Al usar IGNORE, si un row ya existe que posee los valores de cada columna
mencionados en el query, MySQL no arroja un error ya que se ignora el row ya
existente.
Esto es usado tipicamente cuando se agregan valores a una table que posiblemente
existan ya. El IGNORE ayuda a ignorar las filas repetidas.
NOTA - INSERT IGNORE y REPLACE son muy parecidos pero la diferencia radica en
que REPLACE cuando encuentra una fila repetida, reemplaza la fila vieja por la
nueva. INSERT IGNORE cuando encuentra una fila repetida no realiza ningun accion
contra esa fila.
ECUACIONES MATEMATICAS
Código:
SELECT AVG(mindmg) FROM creature_template WHERE name LIKE '%Kobold%';
Esto nos mostraria el promedio de los valores en la columna mindmg que tengan en
la columna name algun valor parecido a Kobold.
Basicamente se sumarian todos los valores encontrados de mindmg y se dividirian
por la cantidad encontrados.
Código:
SELECT AVG((dmg_min1+dmg_max1)/Delay*2) FROM item_template WHERE
entry=22798;
Esto nos mostraria el AVG de la fila con el valor 22798 en la columna entry.
Aun cuando sin necesidad de AVG nos daria el mismo resultado. Esto es solo para
que puedan ver todo lo que pueden hacer con MySQL.
Código:
SELECT AVG((dmg_min1+dmg_max1))/(2*delay/1000) FROM item_template WHERE
entry BETWEEN 18000 AND 20000;
Código:
SELECT entry, name, AVG((dmg_min1+dmg_max1)/(2*delay/1000)) AS DPS FROM
item_template WHERE NOT delay=0 GROUP by name ORDER by DPS;
Nos entregaria el valor del resultado de la formula donde delay sea igual a 0
COUNT - CONTADOR
Sirve para contar cuantas filas o rows cumplen con el resultado.
Código:
SELECT COUNT(name) FROM creature_template WHERE name LIKE '%guard%';
Nos mostraria un valor que es la cantidad de resultados que arrojaria este query
donde name tenga un valor parecido a guard.
MAX - MAXIMO
Nos muestra el maximo valor de un grupo de rows.
Código:
SELECT MAX(maxlevel) FROM creature_template;
Nos mostraria el valor maximo de los valores de la columna maxlevel.
Código:
SELECT MAX(maxlevel) FROM creature_template WHERE name LIKE '%guard%';
Nos mostraria el valor maximo de los valores de la columna maxlevel donde el
valor de la columna name sea parecido a guard.
MIN - MINIMO
Nos muestra el minimo valor de un grupo de rows.
Código:
SELECT MIN(maxlevel) FROM creature_template;
Nos mostraria el valor minimo de los valores de la columna maxlevel.
Código:
SELECT MIN(maxlevel) FROM creature_template WHERE name LIKE '%guard%';
Nos mostraria el valor minimo de los valores de la columna maxlevel donde el valor
de la columna name sea parecido a guard.
SUM - SUMA
Nos muestra la suma de un grupo de rows.
Código:
SELECT SUM(BuyPrice) FROM item_template WHERE itemset=161;
Sumaria todos los valores de la columna BuyPrice que tengan en la columna
itemset el valor de 161.
Código:
SELECT SUM(BuyPrice/10000) FROM item_template WHERE itemset=551;
Sumaria todos los valores de la columna BuyPrice los cuales luego serian divididos
por 100000 y que cumplan con que la columna itemser sea igual a 551.
AS - COMO (En el sentido de esto es como eso)
Sirve para renombrar una columna o grupo de valores.
Código:
SELECT COUNT(guid) AS Cantidad, map FROM creature WHERE guid > 1000 GROUP
BY map;
En este ejemplo seleccionamos todo de la tabla creature donde guid sea mayor a
1000, luego las agruparia por la columna map y por ultimo COUNT se encargaria de
contar cuantas filas existen para cada valor de la columna map.
NOTE: Recuerden que pueden reemplazar los operadores ||, && y ! por sus
palabras correspondientes. Por ejemplo en vez de || usan OR, en vez de && usan
AND y en vez de ! usan NOT.
TIPS DE AYUDA
+ Cuando usen nombre con espacios entre ellos, por ejemplo nombre y apellido,
utilicen siempre comillas simples para agrupar el valor en general. Por ejemplo:
name = 'Peter Parker', food = 'Gummy bears'.
Código:
INSERT INTO creature (C1,C3,C4,C7) VALUES (4,7,2,9);
Ya que garanzimamos a que columnas queremos enviar los datos.
Código:
INSERT INTO creature VALUES (4,7,2,9);
En este caso no se garantiza a que columnas se envian los datos ya que en un
futuro a la tabla se le podrian agregar o quitar columnas con lo cual el segundo
caso de INSERT no serviria.
Un ejemplo para esto seria:
Tenemos una tabla con las siguiente columnas: NAME, AGE, SEX, FOOD
Código:
INSERT INTO creature (name,age,sex,food) VALUES (cyrex,27,male,chocolate);
INSERT INTO creature VALUES (cyrex,27,male,chocolate);
Luego de varios meses tu jefe quiere cambiar la tabla agregando una columna
adicional llamada DINERO.
Código:
INSERT INTO creature (name,age,sex,food) VALUES (cyrex,27,male,chocolate);
Funcionaria perfectamente ya que le estamos especificando las columnas a
cambiar.
Código:
INSERT INTO creature VALUES (cyrex,27,male,chocolate);
No funcionaria ya que el asume que la cantidad de datos a ingresar es igual a la
cantidad de columnas en la tabla. Por ende este query daria error.
CREATE - Sirve para crear bases de datos y tablas. Ejemplo: CREATE DATABASE
firma; Donde firma seria el nombre de la base de datos.
Nota - CREATE es utilizado para crear la estructura completa de una base de datos.
Se necesita un tutorial completo para el.
DROP - Sirve para eliminar bases de datos y tablas. Ejemplo: DROP DATABASE
firma; Donde firma seria la base de datos a eliminar.
SELECT --- COUNT AS -----FROM --- WHERE ---- GROUP BY -----HAVING -----
ORDER BY ------ LIMIT;
UPDATE ----SET ----WHERE;
DELETE FROM -----WHERE;
INSERT INTO -----WHERE;
Por ejemplo:
Código:
SELECT * FROM creature WHERE health > 100 GROUP BY factionid HAVING name
LIKE '%Guard%' ORDER BY name LIMIT 5,5;