Está en la página 1de 29

Tutorial Basico de MySQL

Guia de MYSQL - Por CYREX

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

Necesitaran algunos programas para comenzar a utilizar esta herramienta, ademas


del sistema operativo adecuado para iniciar en el. Como yo no tengo Windows, solo
Linux, les recomendare algunas herramientas similares en Windows como en Linux.
A continuacion les coloco las herramientas y los requerimientos para MySQL:

REQUERIMIENTOS

Windows 2000/XP/2003 - Linux (Recomendado)


512 RAM (Recomendado) (Mas memoria, mas rapido son los query en algunos
casos)
2GB HDD (Minimo)
2Ghz (Recomendado) (Mas cpu, mas rapido son los query en algunos casos)

SOFTWARE NECESARIO

Se necesita la base de datos a utilizar, las herramientas de MySQL y el servidor


MySQL instalado.

Para la base de datos utilizaremos la de este


sitio: http://www.neogmx.com/tools/sdb.7z

Para el MySQL tienen 2 opciones:

1. Si eres usuario a de Windows lo siguiente te toca a ti:


MYSQL 5.X Version FREE

Visita http://sourceforge.net/projects/xampp/ o bajalo directo desde aqui:

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:

http://dev.mysql.com/downloads/gui-tools/5.0.html (La version que dice "Windows


(x86)")
Otros administradores de SQL son:
Navicat (Posee un 30 Day trial) Buscalo en Google
PHPMyadmin (Gratis) Buscalo en Google
SLQYog Otro manejador de SQL

NOTA: Con la excepcion de PHPMyAdmin, es recomendado usar los programas


oficiales de MySQL (MySQL GUI TOOLS) en vez de Navicat o SQLYog. PHPMyAdmin
solo tiene un limite de cuanto ocupe un archivo SQL, ya que tiene un rango de
memoria de entre 512KB a 32MB por defecto.

MYSQL ADMINISTRATOR

mysql administrator (o mysql-admin) es el encargado de las siguientes tareas no


necesariamente exclusivas de el:
+Crear DBs (Incluyendo Tablas y Columnas)
+Borrar DBs
+Respaldar DBs (con opcion a escoger tablas)
+Optimizar DBs
+Reparar DBs
+Iniciar/Remover Servicio MySQL
+Cambiar parametros globales
+Crear usuarios para cada DB
+Permisologia de los usuarios
+Ver estadisticas de cada DB y del servicio MySQL

Por ahora solo usaremos la parte de creacion de DBs para entender rapidamente el
comportamiento y formacion de una DB.

Se debe entender por DB o Base de Datos (DataBase) como la coleccion o


recompilacion de informacion dentro de un mismo sitio y organizada de forma
sistematica. Una DB esta formada por varios elementos. Su base es la columna.
Una columna puede representar cualquier informacion posible, desde el nombre, la
cedula, lugares, sitios y tiempos. Es en la columna donde se encuentran las filas o
rows. El row es la unidad basica donde se encuentra una data especifica. Esta es
parte de la primera pieza de una DB, la columna. 1 o mas columnas forman lo que
se conoce como tabla, la cual es un conjunto de informacion tipicamente comun
entre si que abarcan una parte de toda la informacion con la que se trabajara o
tratara una DB. 1 o mas tablas conforman en si, la llamada DB, que no es mas que
el total de toda la informacion necesaria sobre una tarea especifica. A continuacion
se explican las jerarquias y algunos ejemplos de cada pieza.

DB (Base de Datos de la Universidad)


- TABLA1 (Informacion del Alumno)
- - - COLUMNA1 (ID del Alumno)
- - - COLUMNA2 (Nombre)
- - - COLUMNA3 (Apellido)
- - - COLUMNA4 (Cedula)
- - - COLUMNA5 (Edad)
- TABLA2 (Notas del Alumno)
- - - COLUMNA1 (ID del Alumno)
- - - COLUMNA2 (Nota1)
- - - COLUMNA3 (Nota2)
- - - COLUMNA4 (Nota3)
- - - COLUMNA5 (Nota4)
- TABLA3 (Materias)
- - - COLUMNA1 (Materia)
- - - COLUMNA2 (Profesor)

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

Asi podemos decir lo siguiente sobre como se conforma una DB:

La fila es la base de toda DB la cual guarda la informacion. Esta se organiza por


Columnas las cuales tienen cada una, una informacion especifica sobre parte de la
informacion general (nombre, apellido, cedula), estas columnas forman la tabla, la
cual es la que posee informacion generalmente comun entre sus columnas internas.
Esta tabla forma con otras (o sola) una base de datos o DB. Asi:

Fila --> Columna --> Tabla --> DB

Diciendo que la DB, la Tabla y la Columna son formas de organizar la informacion, y


la fila es la informacion como tal.

Teniendo ahora esto claro comenzaremos a utilizar mysql administrator. Hagan


click derecho en la rueda azul en la parte inferior derecha de su escritorio (system
tray) y seleccionen Mysql Administrator
Como ya hemos visto arriba, con MySQL Administrator se pueden realizar varias
operaciones con esta herramienta, pero solo usaremos la de crear DBs por ahora.
Antes de crear la DB debo explicar una parte de la creacion de DBs que es MUY
importante para la correcta creacion de una DB. Sin esto podrian pasarles multiples
problemas de los cuales algunos tendrian como solucion borrar totalmente una o
varias tablas.

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.

INNODB - Formato de tablas que ofrece mas seguridad y confiabilidad con


respecto a la informacion ingresada, borrada, actualizada. Su mayor ventaja es la
seguridad que proporciona con la informacion vs MyISAM. En ultimas versiones a
llegada a alcanzar en velocidad a MyISAM, en muchos casos pasandolo, incluso con
la seguridad incluida de INNODB.

Existen formatos de columnas que, ya sea, no funcionan en un formato dado, no


existen o son mas lentos o rapidos dependiendo del formato. Esto ya seria todo un
estudio mayor sobre cual es mas rapido o mas lento dependiendo del formato dado
a la tabla. Por ahora no importara cual tomen, ambos serviran para los propositos
de este curso.

Luego de haber escogido el formato de la tabla, ya podemos comenzar a crear las


columnas. Aqui es donde se debe tener en cuenta que tipo de informacion se desea
tener en cada columna. A continuacion luego de mucha busqueda coloco todos los
formatos existentes en MySQL para las columnas, su rango y para que sirve cada
una.
TIPO DE DATO DE COLUMNA - RANGO USO
BOOLEAN - 2 SI, NO, Verdadero, Falso
BOOL - 2
BIT - 8 BIT
TINYINT - 255 La edad, cedula, telefono
SMALLINT - 65,535 Cuenta bancaria encriptada
MEDIUMINT - 16,777,215 Cantidad de dinero, serial
INT - 4,294,967,295 Cantidad de dinero, serial
INTEGER - 4,294,967,295
BIGINT - 18,446,744,073... Cantidad de dinero, serial
DOUBLE - Doble Precision Numeros con decimales
FLOAT - Precision Simple Numeros con decimales
DECIMAL - Numero con Decimales Numeros con decimales
NUMERIC - Numero con Decimales Numeros con decimales
DATE - Formato de tiempo Dia, Mes, Año
TIME - Formato de tiempo Hora:Minuto:Segundo
TIMESTAMP - Formato de tiempo Fecha de cambio de fila
DATETIME - DATE y TIME unidos DATE y TIME unidos
CHAR - 255 nombres, apellidos, ciudades
VARCHAR - 255 nombres, apellidos, ciudades
TINYTEXT - 255 nombres, apellidos, ciudades
TEXT - 65535 Comentarios largos, info general
MEDIUMTEXT - 16,777,215 Comentarios muy largos
LONGTEXT - 4,294,967,295 Documentos, libros, textos
TINYBLOB - 255 Bytes Todo
BLOB - 65,535 Bytes Todo
MEDIUMBLOB - 16,777,215 Bytes Todo
LONGBLOB - 4,294,967,295 Bytes Todo

NOTA: Estos son algunos de los tipos de campos.

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)

Antes de comenzar sera necesario ingresar la base de datos SDB en el sistema.


Para esto hacemos lo siguientes:
En WINDOWS:

1. Baja el archivo adjunto de este post (Se menciona arriba)


2. Descomprime el archivo en una carpeta que recuerdes (Tipicamente el escritorio)
3. Al descomprimir deberias tener un archivo llamado SDB.sql
4. Abre el MySQL Administrator
5. Ingresa de hostname localhost
6. Ingresa de usuario root
7. Ingresa de clave la clave que colocastes al configurar el MySQL.
8. Ya adentro ve a la opcion que dice en la izquierda "Restaurar"
9. Busca el sitio donde DESCOMPRIMISTES la base de datos SDB.
10. Selecciona la DB de la lista y le das al boton de Restaurar que se encuentra
abajo a la derecha.
11. Al finalizar la restauracion cierra el MySQL Administrator y abre el MySQL Query
Browser con el cual trabajaremos.
12. Escribe de hostname localhost, usuario root y de clave la que colocastes en la
configuracion. De esquema escribe mangos.

NOTA: SI no te deja restaurar marca la opcion que dice "Crear esquema si no


existe"

En LINUX:
Por consola ve a la carpeta donde descomprimistes la SDB. y sigues los siguientes
pasos:

1. Baja el archivo adjunto de este post (Se menciona arriba)


2. Descomprime el archivo en una carpeta que recuerdes (Tipicamente el escritorio)
3. Al descomprimir deberias tener un archivo llamado SDB.sql
4. Abre la consola y escribe lo siguiente: mysql -u root -p
5. La clave que te pedira es la que colocastes al configurar el MySQL
6. Al entrar en MySQL escribe: CREATE DATABASE mangos;
7. Luego escribe: exit;
8. Navega a donde descomprimistes el archivo. Tipicamente en tu carpeta de
usuario. Por ejemplo la mia seria /home/cyrex
9. Estando en la carpeta donde descomprimistes el archivo sdb.sql escribe: mysql
-u root -p mangos < sdb.sql
10. Te pedira clave de nuevo y luego de eso comenzara a transferir la DB al MySQL.
11. Cierra la consola y presiona ALT+F2, cuando salga la ventana para escribir
comandos escribes mysql-query-browser.
12. Escribe de hostname localhost, usuario root y de clave la que colocastes en la
configuracion. De esquema escribe mangos.

Asumiendo que ya estamos con la DB cargada en MySQL y dentro del programa


MySQL Query Browser podemos comenzar con el tutorial
LECCION BASICA
MySQL es una lenguaje de bases de datos o DataBase (DB), y como tal tiene un
sistema de busqueda o query (en ingles). Tu te preguntas, que es este sistema de
busqueda o query. Bueno un query es como una pregunta que se le hace al
lenguaje SQL para que sea ejecutada y nos envie un cierta informacion de regreso,
ya sea una simple informacion, un grupo de datos o nada. Cuando yo pregunto que
edad tienes, tu me envias 1 sola informacion, cuando pregunto como es tu ciudad,
tu me envias un grupo de data, ya sea que tan grande es tu ciudad, como es la
gente, lugares importantes, etc. Cuando yo te digo que no camines, tu
simplemente te paras sin responder (sin enviar ningun tipo de respuesta). Estos
son los 3 casos de query. En general un query es una pregunta que se le hace a tu
base de datos para recibir una de esas 3 respuestas.

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.

Antes de comenzar y para asegurar que estamos utilizando la DB correcta escriban


en la cuadro superior (Cuadro para los query) lo siguiente: USE mangos;
Hagan click en ejecutar o presionen CTRL+ENTER.

RECOMENDACION - Antes de comenzar traten de aprender un poco sobre MySQL


Query Browser. Donde muestra las base de datos, como ver las tablas y sus
columnas, etc. Algo por encima para que esten familiarizados con el. Por ejemplo
las bases de datos estan a la derecha. Si le hacemos doble click a una de ellas se
despliegan sus tablas. Si hacemos doble click en una de sus tablas podremos ver
las columnas y sus datos. De esta forma aprendemos un poco mas sobre MySQL
Query Browser.

Ya con esto estaremos todos utilizando la base de datos mangos, con lo cual
comenzamos el tutorial.

Iniciaremos la leccion con el comando SELECT.

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:

SELECT EstasColumnas FROM EstasTablas;

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;

En esta linea se seleccionan multiples columnas de 2 tablas, ninguna columna esta


duplicada en ambas tablas, asi que no se tendra ningun problema ejecutando esta
linea. El parametro opcional LIMIT sera explicado al final, pero es usado para limitar
la cantidad de informacion que regresa al usuario luego de un query.

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).

Pero si cambiaramos el query pasado por este:

Código:
SELECT item_template.name,creature_template.name FROM
item_template,creature_template LIMIT 10;

Esto te dara 2 columnas como respuesta, la primera es la columna name de la tabla


item_template, la segunda es la columna name de la tabla creature_template. He
colocado LIMIT 10 para no tener problemas con una larga lista de informacion.
Tambien se debe tener en cuenta el signo ; al final de cada query. El signo ; le
indica a MySQL que el query finaliza en ese punto.
Ahora analicemos el cambio que se tuvo que realizar para que el query pudiese ser
ejecutado correctamente. Como podras ver, las columnas ahora incluyen a su tabla,
o sea, en vez de solo name, ahora es item_template.name y
creature_template.name . El . (punto) une a la tabla de la columna, como tambien
de una DB a una tabla a una columna. Con eso se da a entender lo siguiente:

SELECT Tabla1.ColumnaX, Tabla2.ColumnaX ....


SELECT Tabla1.Pepe, Tabla2.Pepe ....
SELECT Tabla1.Carro, Tabla1.Casa, Tabla2.Casa ......
SELECT DB1.Tabla1, DB2.Tabla1 .....
SELECT DB1.Tabla1.Columna1, DB2.Tabla2.Columna2 ....

Todos son validos.

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

La forma general es la siguiente:

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...)

ORDER BY reorganizara todas las filas de acuerdo a la(s) columna(s) colocadas


luego del parametro ORDER BY, por ejemplo:
Código:
SELECT * FROM creature ORDER by id LIMIT 1000;

Reorganizara todas las filas segun su columna id.

Si quisieramos organizarlo al reves, es facil:

Código:
SELECT * FROM creature ORDER by id DESC LIMIT 1000;

El parametro DESC despues de la columna en ORDER BY invierte el orden

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.

Esto se puede resumir en

ORDER BY Columna1 (Prioridad de orden 1), Columna2 (Prioridad de orden 2),


Columna3 (Prioridad de orden 3), Columna4 (Prioridad de orden 4). La primera
columna mencionada en ORDER BY sera la primera que organizara toda la
respuesta del query. La segunda columna solo sera ejecutada cuando la primera
finalice su reorganizacion, y asi sucesivamente con todas las columnas que sigan.
Las prioridades que le siguen a otra no pueden modificar la anterior. O sea segunda
columna en ORDER BY no puede modificar lo que hizo la primera columna.

Ahora con el parametro GROUP BY....

Seleccionemos ahora la tabla creature_movement:

Código:
SELECT * FROM creature_movement;

ok tenemos seleccionada la tabla creature_movement, pero digamos que queremos


saber cuantas diferentes entradas tenemos en la tabla utilizando como columna
base a la columna id

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;

Esto agrupara los id y luego los organizara por map.

Se debe tener en cuenta que NO SE PUEDE ordenar antes de agrupar, siempre se


debe GROUP BY y luego ORDER BY, al final de este tutorial se podra ver la jerarquia
que se tiene cada comando usando como base el comando SELECT.

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;

Ahora usaremos el hermano de los 2 antes mencionados, el comando WHERE

WHERE es el hermano de ORDER BY y GROUP BY en el sentido de que tambien


puede seleccionar y separar una parte de la tabla si se le especifica cual, se podria
decir que WHERE es muy seleccionable.

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;

pero lo quiero ordernar por spawndist:

Código:
SELECT * FROM creature WHERE spawndist > 10 ORDER BY spawndist;

y lo quiero agrupar por 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.

WHERE, como sus hermanos GROUP BY y ORDER BY puede organizar tambien,


usando el comando AND con WHERE podemos realizar lo siguiente:

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

Esto es en general el comando SELECT, el mas usado y conocido en SQL. A


continuacion se trataran los comandos UPDATE, INSERT y DELETE. Pero antes,
practiquen un poco con SELECT.
LECCION BASICA 2
(A diferencia de SELECT, los comandos INSERT, DELETE y UPDATE afectan
directamente a la DB y por lo tanto NO SE DEBE EJECUTAR NINGUN QUERY DE
ESTA LECCION excepto que se tenga una DB de respaldo)
RECOMENDADO - Pueden ejecutar los comandos de esta leccion si piensan
Restaurar de nueva la base de datos al finalizar el tutorial. Ya que estos comandos
pueden alter la DB.

UPDATE - Actualiza una entrada o row existente con un nuevo valor.

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.

UPDATE en todos los casos funciona de la siguiente forma:

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

INSERT - Agrega un campo o row a una tabla existente

Código:
INSERT INTO creature VALUES (1,2,3,4,5,6,7,8);

La estructura basica es INSERT INTO tabla VALUES valores. En nuestro ejemplo


anterior, se agregarian los valores 1,2,3,4,5,6,7,8 a esas 8 columnas si se cumplen
los siquiente requisitos:
1. El numero de columnas sea 8. Ya que estamos agregando 8 valores. Si fuese
1,24,63,88,90 serian 5 columnas. Si tuviesemos 'Pedro','Alvarado',23,1984 serian 4
columnas.
2. No existe la necesidad de especificar las columnas ya que estariamos agregando
el total de columnas en la tabla. El proximo ejemplo explica mejor este punto.
3. No existe una columna llave que obligue a otras columnas a tener valores. Por
ejemplo en una tabla llamada Comida, la columna TipoComida es obligatoria.

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.

El proximo ejemplo ayudara un poco mas a entender INSERT:

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);

Ambos query son lo mismo y hacen lo mismo. La diferencia es la cantidad de datos


a escribir.

DELETE - Borra filas o rows de una tabla.

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);

IN significa basicamente DENTRO. Asi, se podria leer de la siguiente forma:


BORRAR en la tabla creature DONDE guid tenga DENTRO los valores.
Si ven que una columna se repite en sus query, es mejor agruparlos con IN.

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.

Su formato es: REPLACE (Columna, Valor Buscado, Valor Nuevo)

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');

Nos quedarian los nombres cambiados de la siguiente forma:

'Calmado' --> Calmxyz


'Heredado' --> Heredxyz
'Simplificado' --> Simplificxyz

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;

Aqui reemplazamos los valores 80 en la columna MaxLvl por el valor 30.


OPERADORES COMUNES (MUY
IMPORTANTE)
= - IGUAL QUE
Lo utilizamos para comparar si un valor o columnas es igual a otro valor o columna.
Por ejemplo luego de la opcion WHERE cuando mencionados si la columna Name es
igual a 'pedro', su formato seria: WHERE name = 'pedro'.

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;

< - MENOR QUE


Simboliza que el valor o columna de la izquierda es menor que el valor o columna
de la derecha.

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;

> - MAYOR QUE


Simboliza que el valor o columna de la izquierda es mayor que el valor o columna
de la derecha.
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;

NOTA - Pueden mezclar el operador = con > o < para obtener >= y <=

<> - DIFERENTE QUE


Simboliza que el valor o columna de la izquierda DEBE ser diferente que el valor o
columna de la derecha. Este tipo de comparacion es Verdadera solo si los valores
de la izquierda y derecha no son iguales. Deben ser siempre diferentes para que se
cumpla la accion. Se puede intercambiar <> con la negacion NOT o !=. La
simbologia <> evalua todo el rango positivo por encima del valor expresado y todo
el rango negativo por debajo del valor expresado como Verdadero. NOT o != evalua
la diferencia entre 2 valores. No toma rango sino solo valores especificos pero de
igual forma ambos regresan la misma informacion.

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.

Otra forma de escribir los ejemplos anteriores son:

Con la palabra NOT

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.

De la misma forma || puede ser reeemplazado por la palabra OR:

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;

NOTA: Para los curiosos, si colocamos ambas negaciones en el mismo query es lo


mismo que si multipliquemos un numero negativo por otro negavito. 2 negavitos
hacen un positivo. Por ejemplo:

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.

El siguiente ejemplo seria un grupo de queries donde tienen en comun la columna


guid.

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;

Utilizando la opcion IN, los query de arriba nos quedarian asi:

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;

Utilizando IN nos quedarian asi:

Código:
UPDATE item_template SET class = 2 WHERE entry IN (1,2,3,14,21,111,31,231,451);

LIKE - COMO o PARECIDO A


Condicion que busca por valores similares A o parecidos A el valor que queremos
buscar.

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

AVG - AVERAGE, PROMEDIO BASICO


Utilizado para sacar el promedio o average de una columna

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.

Es posible crear entonces formulas con AVG. Por ejemplo:

Supongamos que queremos buscar el promedio entre la suma de 2 columnas que


tomando en cuenta el valor de una tercera columnas nos arroje un valor.
La ecuacion seria: (MinDamage+MaxDamage)/2*Delay. Esta formula aplicada a
AVG seria:

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.

Pero ahora si complicamos la formula, en el siguiente caso AVG si hace la


diferencia:

Código:
SELECT AVG((dmg_min1+dmg_max1))/(2*delay/1000) FROM item_template WHERE
entry BETWEEN 18000 AND 20000;

Y por ultimo uno mas complejo:

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: Cuando se use COUNT, siempre es recomendable utilizar GROUP BY para


que funcione correctamente.

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'.

+ Tomen en consideracion cuando esten escribiendo su query los signos ' y `. El


simbolo ` es usado ANTES de FROM para las columnas. El simbolo ' es utilizado en
todos los demas casos para agrupar valores.

+ SIEMPRE verifiquen que su query finaliza con el signo ; ya que este es un


indicadivo que alli termina ese query.

+ Estudien la tabla antes de trabajar con ella, especialmente si tienen columnas


unicas o no nulas.

+ Para evitar problema con INSERT, el correcto uso de el es:

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

Nosotros escribimos los siguientes 2 query:

Código:
INSERT INTO creature (name,age,sex,food) VALUES (cyrex,27,male,chocolate);
INSERT INTO creature VALUES (cyrex,27,male,chocolate);

Ambos funcionaran correctamente.

Luego de varios meses tu jefe quiere cambiar la tabla agregando una columna
adicional llamada DINERO.

Si ejecutamos de nuevo ambos INSERT:

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.

ALGUNOS COMANDOS CORTOS DE EXPLICAR...

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.

ALTER - Sirve para modificar una tabla.

USE - Sirve para seleccionar cual base de datos utilizaremos.


OTROS COMANDOS A BUSCAR...

DISTINCT - Para que sirve, como usarlo, ejemplos...

RENAME - Para que sirve, como usarlo, ejemplos...

TRUNCATE - Para que sirve, como usarlo, ejemplos...

LOCK/UNLOCK - Para que sirve, como usarlo, ejemplos...

TRUNCATE - Para que sirve, como usarlo, ejemplos...

SHOW - Para que sirve, como usarlo, ejemplos...

FLUSH - Para que sirve, como usarlo, ejemplos...

ORDEN CORRECTO PARA LOS COMANDOS MAS UTILIZADOS:

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;

También podría gustarte