You are on page 1of 10

Tutorial sobre la Introduccin a SQL

Enviado por DeXon el 20 diciembre, 2011 10:46Sin comentarios | 96 veces leido

Bueno hoy toca un poco de teora, sobre algunos conceptos basicos que tenemos que tener en cuenta a la hora de programar nuestras bases de datos. SQL (Structuredquerylanguage) es el lenguaje para interactuar con las bases de datos, el cual nos permitir insertar registros, actualizar registros, buscar registros as como manipular tablas. El lenguaje SQL es semejante en todos los servidores de base de datos salvo pequeas diferencias, en nuestro caso veremos una gua de SQL para MySQL. Los ejemplos los puedes probar directamente en la lnea de comandos de MySQL o en algn cliente como phpMyAdmin o Navicat. Preparando los datos Para nuestro ejemplo imaginemos que necesitamos almacenar los datos de una empresa. Para cada empresa necesitamos guardar: nombre, direccin, telfono y una imagen con su logo. Entonces necesitaremos crear una tabla a la que llamaremos empresa la cual tendr 5 campos:

id: ser el identificador (interno) de la empresa el cual ser un nmero entero. nombre: es el campo que aceptar una cadena de texto con el nombre de la empresa. direccion: campo que guardar una cadena de texto con la direccin de la empresa. telefono: es un campo que aceptar solo nmeros que representan el telfono de la empresa. imagen: es el campo donde guardaremos el nombre del archivo del logo de la empresa.

Crear tablas con SQL Para definir la estructura de la tabla utilizaremos CREATE TABLE, donde se asigna el nombre de la tabla as como cada uno de los campos indicando que tipos de datos vamos a almacenar. Entre los principales tipos de datos disponibles tenemos:

int: que permite guardar nmeros enteros. float: permite almacenar datos decimales. date: para guardar fechas, el formato de la fecha es aaaa-mm-dd. datetime: es para guardar fecha y hora, el formato es aaaa-mm-ddhh:mm:ss. time: para almacenar la hora, el formato de la hora es hh:mm:ss. char(n): almacena una cadena de texto de longitud fija n (De 0 a 255 caracteres). varchar(n): para cadenas de tamao variable de hasta n caracteres (De 0 a 255). text es un campo para almacenar textos de hasta 65535 caracteres.

Para nuestro ejemplo crearamos la tabla con 5 campos, donde el primero de ellos ser el identificador de la empresa que ser un entero que ser ir auto-incrementando.
CREATETABLEempresa ( id int(11) NOTNULLAUTO_INCREMENT, nombre varchar(180), direccionvarchar(180), telefonoint(8), imagen varchar(50) )

Notese que por cada campo definimos el tipo de dato que puede almacenar. Los campos nombre y direccin aceptan textos de hasta 180 caracteres mientras que el campo imagen solo acepta 50 caracteres como mximo. Insertar datos con SQL Para insertar datos en las tablas haremos uso de la sentencia INSERT INTO, para ello podemos indicar los campos con sus respectivos valores, esto respetando los tipos de datos aceptados. Para nuestra tabla recin creada, insertaremos registros de la siguiente forma:
INSERTINTOempresa (nombre, direccion, telefono, imagen) VALUES('Apple', '1 Infinite Loop, Cupertino', 89961010, 'apple.png')

Como se aprecia no es necesario incluir el dato para el id por el del tipo AUTO_INCREMENT lo cual significa que se crear automticamente y con un valor incrementado en 1 al anterior registro. Si estamos insertando todos los valores de una tabla, podramos obviar los nombres de los campos si mantenemos el mismo orden en el que fueron creados los campos.
INSERTINTOempresa VALUES('Apple', '1 Infinite Loop, Cupertino', 89961010, 'apple.png')

Tambin se pueden insertar solo algunos campos de la tabla y no necesariamente en el orden en que fueron creados los campos en donde si debemos indicar los nombres de los campos, por ejemplo:
INSERTINTOempresa (nombre, logo) VALUES('Apple', 'apple.png')

Los campos para los que no asignamos valores tendrn valores nulos o el valor por defecto que hayamos definido en la creacin de la tabla. Editar datos con SQL Para actualizar datos de los registros de una tabla se puede utilizar UPDATE, donde indicamos la tabla donde se harn los cambios, los campos a reemplazar con sus respectivos valores asi como la condicin que se debe cumplir para realizar el cambio de los datos. Para hacer uso de estas condiciones, MySQL provee de funciones de comparacin como:

= para comparar si dos valores son iguales. <> para comparar si dos valores son diferentes. != para comparar si dos valores son diferentes. Igual al operador &lt;&gt;. <= compara si un dato es menor o igual a otro. < verifica si el datos es menor a otro. => para compara si el datos es mayor o igual a otro. > prueba si el datos es mayor a otro. IS NULL devuelve verdadero si el campo es nulo. IS NOT NULL verdadero si el campo no es nulo.

Adicionalmente se pueden utilizar las funciones booleanas como NOT, AND, OR y XOR. Continuando con nuestro ejemplo, suponiendo que tenemos registrada una empresa con el identificador 57, podramos actualizar los datos de la siguiente forma:
UPDATEempresa SETnombre = 'Google', direccion = '1600 Amphitheatre Parkway, Mountain View' WHEREid = 57

Tambin podramos asignar una imagen por defecto a todas las empresas que no tengan logo, para ello haramos:
UPDATEempresa SETimagen = 'logo-default.png' WHEREimagen ISNULL

Eliminar datos con SQL Para eliminar datos utilizaremos DELETE FROM, en esta sentencia indicamos sobre que tabla vamos a realizar la eliminacin adems de la condicin que se debe cumplir para realizar la eliminacin. En nuestro ejemplo eliminaremos todas las empresas que tengan el campo del nombre vacio o nulo.
DELETEFROMempresa WHEREnombre ISNULLORnombre = ''

Consultar datos con SQL Para consultar datos (extraer datos) de una tabla se utiliza SELECT indicando los campos que deseamos extraer y el nombre de la tabla que utilizaremos. Para nuestra tabla de ejemplo si deseamos consultar todas nombres y direcciones de las empresas:
SELECTnombre, direccion FROMempresa

Se pueden utilizar alias para los campos extrados, por ejemplo:


SELECTnombre AS'Empresa', direccion AS'Direcci&#243;n'FROMempresa

Si deseamos extraer todos los campos podemos utilizar el caracter *.


SELECT* FROMempresa

Filtrando los resultados Podemos aplicar condiciones a nuestras consultas con la directiva WHERE. Para extraer la empresa con identificador 57 la consulta sera:
SELECT* FROMempresa WHEREid = 57

Si deseamos mostrar todas las empresas que tengan registradas su direccin:


SELECT* FROMempresa WHEREdireccion ISNOTNULL

Tambimpodriamos consultar todas las empresas cuyo nombre empiece con la letra A.
SELECT* FROMempresa WHEREnombre LIKE'A%'

Ordenando los resultados Para el ordenamiento de los resultados se utilizaORDER BY, este define por que campo se har el ordenamiento as como si ser en forma ascendente (ASC) o descendente (ASC). Si utilizamos nuestra tabla de ejemplo podramos listar todas las empresas en orden alfabtico:
SELECT* FROMempresa ORDERBYnombre ASC

Contando los resultados Es posible contar los registros utilizando COUNT, esto unido al filtro de datos es til para hacer conteos de datos. Si deseamos conocer cuantas empresa registradas tenemos:
SELECTCOUNT(*) FROMempresa

Podramos conocer cuantas empresas tienen registradas direcciones vacas:


SELECTCOUNT(*) FROMempresa WHEREdireccion = ''

Limitando los resultados MySQL permite limitar la cantidad de resultados utilizando la palabra LIMIT, esta sentencia es muy flexible pues permite definir a partir de que registro y la cantidad de datos devueltos. Si deseamos visualir las 5 ultimas empresas registradas en nuestra tabla tendramos:
SELECT* FROMempresa ORDERBYid DESCLIMIT 5

Si estamos mostrando los resultados ordenados alfabeticamente en grupos de 10, tendramos:


/* Para SELECT* /* Para SELECT* mostrar los FROMempresa mostrar los FROMempresa primero 10 resultados */ ORDERBYnombre ASCLIMIT LIMIT 0, 10 siguientes 10 resultados */ ORDERBYnombre ASCLIMIT LIMIT 10, 10

Ahora ya podemos crear, editar, eliminar y consultar los datos utilizando condiciones con la posibilidad de filtrar, ordenar y limitar los resultados.

En mis proyectos siempre defino los valores de conexin para la base de datos en un archivo php llamado conexion.php en mi caso se puede poner muchos otros, va a gustos , de forma que cada vez que necesito conectarme tan solo tengo que hacer un include del mismo.(databasename, username, password, database host) Una vez que tengamos creado nuestra base de datos a traves de phpMyAdmin o desde nuestro gestor en el hosting, tan solo tenemos que crear este archivo, que es muy sencillo y solo ocupa unas lineas.

<?php //Datos de conexion que hay que editar con los que corresponda $GLOBALS['DB_IP'] = 'localhost'; //servidor, en un 99.9% es localhost

$GLOBALS['DB_USER'] = 'USUARIODB'; //el nombre de usuario de la base de datos $GLOBALS['DB_PASS'] = 'PASSDB'; //contrasea de acceso a la base de datos

$GLOBALS['DB_NAME'] = 'NOMBREBD'; //nombre de la base de datos a la cual tienes o quieres conectarte

// // Funcion que vamos a usar para realizar la conexion (es recomendable dejarlo como esta, a menos que conozcas lo que haces) // functionconectar_db() { $conn= mysql_connect($GLOBALS['DB_IP'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASS']);

mysql_select_db($GLOBALS['DB_NAME'], $conn); if(!$conn) { echo"Problemas deconexi&oacute;n con la base de datos: ". mysql_error(); exit; }

return$conn; } ?>

Con eso ya tendriamos los datos de conexin listos, aunque yo siempre incorporo y recomiendo una pequea funcion para proteger los datos de inyeccin SQL (o como dicen en ingles SQL INJECTIONS).Por lo que me aseguro que cada vez que carga una conexion , cargo tambin la funcion que me va a ayudar a protegerme. <?php

//Funcion contra SQL INJECT functioncleanQuery($string) { if(get_magic_quotes_gpc()) { $string= stripslashes($string); } if(phpversion() >= '4.3.0') { $string= mysql_real_escape_string($string); }else{ $string= mysql_escape_string($string); } return$string; } ?>

Por lo tanto nuestro archivo conexion.php Seria de la siguiente manera: <?php //Datos de conexion que hay que editar con los que corresponda $GLOBALS['DB_IP'] = 'localhost'; //servidor, en un 99.9% es local host

$GLOBALS['DB_USER'] = 'USUARIODB'; //el nombre de usuario de la base de datos $GLOBALS['DB_PASS'] = 'PASSDB'; //contrasea de acceso a la base de datos

$GLOBALS['DB_NAME'] = 'NOMBREBD'; //nombre de la base de satos a la cual tienes o quieres conectarte

// // Funcion que vamos a usar para realizar la conexion (es recomendable dejarlo como esta, a menos que conozcas lo que haces)

// functionconectar_db() { $conn= mysql_connect($GLOBALS['DB_IP'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASS']);

mysql_select_db($GLOBALS['DB_NAME'], $conn); if(!$conn) { echo"Problemas cdeconexi&oacute;n con la base de datos: ". mysql_error(); exit; }

return$conn; }

//Funcion contra SQL INJECT functioncleanQuery($string) { if(get_magic_quotes_gpc()) { $string= stripslashes($string); } if(phpversion() >= '4.3.0') { $string= mysql_real_escape_string($string); }else{ $string= mysql_escape_string($string); } return$string;

} ?>

Una vez armado el conexion.php , solo nos queda incluirlo en nuestras pginas. y lo haremos de la siguiente manera: <?phpinclude('config.php'); ?>

Una vez incluido nuestro archivo podemos realizar una nueva conexin de la siguiente forma: //Creamos la variable $conn y le asignamos la conexin a la base de datos $conn=conectar_db();

La funcin cleanQuery la vamos a usar para limpiar las variables. Si juntamos todo los visto anteriormente y suponiendo que tenemos un archivo llamado busquedas.php al cual le pasamos una variable $_GET['musica'] podriamos dejar el cdigo de la siguiente manera: EJ:busquedas.php?musica=LadyGaga <?php include('config.php'); $conn=conectar_db();

$Nautor= cleanQuery($_GET['musica']);

$consulta="SELECT * FROM albumnes WHERE nombre='$Nautor'";

$albumnes=mysql_query($consulta, $conn);

if(!$albumnes){ die('Invalidquery: '. mysql_error()); }else{

//la consulta se ejecuto correctamente y mostramos los datos

?><table><thead> <tr><th>Autor</th><th>Albumnes</th><th>Ao</th></tr> </thead> <tbody> <? while($row= mysql_fecth_assoc($albumnes)){ ?> <tr><td><? echo$row['autor']; ?></td><td><? echo$row['albumn']; ?></td><td><? echo$row['anio']; ?></td></tr> <? } ?> </tbody> </table>

Y esto sera todo, espero que os sirva, y le saquis mucho partido.

You might also like