Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduccin al SQL
Tabla de Contenidos
Programacin PHP Mdulo III............................................................................ 1
Introduccin al SQL............................................................................................. 1
Tabla de Contenidos............................................................................................ 2
Introduccin........................................................................................................ 3
Bases de datos relacionales............................................................................. 3
Un Primer Ejemplo........................................................................................... 3
Consultas............................................................................................................ 5
Consultas Simples............................................................................................ 5
Consultas de emparejamiento.........................................................................9
Totalizaciones utilizando SQL.........................................................................11
Inserciones........................................................................................................ 17
Borrado............................................................................................................. 19
Actualizaciones................................................................................................. 20
Introduccin
A lo largo del segundo mdulo de este curso, hemos introducido las nociones
bsicas de la programacin PHP utilizando conexiones a bases de datos,
especialmente MySQL. A partir de ello, en el presente mdulo profundizaremos en
el lenguaje de consulta SQL, lenguaje destinado a operar con bases de datos
relacionales, particularmente MySQL. Posteriormente comenzamos a recorrer el
camino del aprendizaje de la programacin orientada a objetos, los conceptos
subyacentes, y su aplicacin en PHP. Por ultimo revisaremos algunos conceptos
de seguridad en aplicaciones web y su aplicacin mediante PHP.
Bases de datos relacionales
El SQL (Standard Query Language) es, como sus siglas lo indican, un lenguaje
estndar de consultas utilizado en las bases de datos relacionales para acceder,
manipular y actualizar los datos almacenados en ellas.
Las bases de datos relacionales se llaman as porque parten de la utilizacin del
concepto de relacin para obtener datos almacenados en diferentes estructuras de
almacenamiento (tablas) mostrndolos como una estructura especfica en funcin
del resultado necesario (Vistas). La idea detrs de las bases de datos relacionales
es que el usuario final no deba restringirse a la estructura definida de
almacenamiento, si no que pueda obtener los datos que necesita en una sola
estructura aunque ellos estn almacenados completa, parcial o en forma
compartida en una o ms tablas de la base de datos.
El lenguaje SQL, es a la vez un lenguaje simple pero muy potente, y para poder
extraer de l toda su potencialidad hay que dominar disciplinas de algebra
relacional que trascienden los alcances de este mdulo y por lo tanto nos
limitaremos a mostrar la forma de realizar consultas y actualizaciones simples de
los datos almacenados.
Un Primer Ejemplo
Vamos a tomar como base una base de datos llamada prueba, con dos tablas:
cliente y cheques con la siguiente estructura:
Tabla Cheques
Tabla Clientes
Por supuesto estos comandos los debemos escribir en la ventana SQL del
PhpMyAdmin.
Consultas
Consultas Simples
El SELECT es una palabra reservada del SQL e indica que vamos a seleccionar
los campos que se indican a continuacin (* indica todos los campos) desde
(FROM) la tabla elegida (cliente)
5
El resultado es el siguiente:
Como observamos, la consulta solo nos devuelve los campos codigo y nombre
Con esto hemos limitado el nmero de columnas del resultado, si ahora
deseramos limitar el nmero de filas (cantidad de resultados) de la consulta,
deberemos seleccionar un criterio de bsqueda de manera de filtrar la consulta.
Por ejemplo, si deseamos ver los datos solamente del cliente nro. 2; debemos
limitar el resultado en cuanto a las filas que devolver, esto se realiza mediante el
modificador WHERE del comando SELECT.
El resultado es el esperado, y la consulta solo devuelve los datos del cliente nro. 2
Entonces, con el comando SELECT definimos que campos de la tabla vamos a
obtener, con la clusula FROM le indicamos de que tabla los vamos a obtener y
con la clusula WHERE, indicamos condiciones de filtrado sobre los datos a
obtener. La ultima clusula que nos queda para esta primera mirada del comando
SELECT es ORDER BY que como su nombre lo indica nos permite alterar el
orden en que se muestran los valores en el resultado.
Si observamos, traemos todas las filas de la tabla, pero el orden en que se nos
muestran es el indicado con la clusula ORDER BY, esto es, segn el ejemplo,
ordenado por nombre y no por el cdigo que es el orden por defecto.
La clusula ORDER BY, ordena en forma ascendente por defecto y si queremos
invertir su funcionamiento (forma descendente) debemos agregar el modificador
DESC.
mismo tipo y tamao (en el caso que nos ocupa INT de 4) sino que adems deben
poseer el mismo significado.
Si estas condiciones ocurren, podemos combinar en una consulta, datos de
ambas tablas, de manera de mostrar al usuario final los datos como si se tratara
de una nica tabla (concepto de vista).
El emparejamiento de tablas en SQL sigue conceptos de algebra relacional, para
hacerlo un poco ms sencillo, pensemos que cada tabla es un conjunto de
elementos, y al emparejar las tablas, SQL tratara de realizar una interseccin entre
ambas tablas de manera de obtener las filas donde un datos determinado se
comparta entre ambas tablas.
Para combinar ambas tablas entonces necesitamos indicarle al SQL por cual
campo emparejamos ambas tablas de manera que pueda realizar la interseccin
indicada.
SELECT tabla1.campo, tabla1.campo, tabla2.campo FROM tabla1,tabla2 WHERE
tabla1.campo = tabla2.campo
En la descripcin de la sintaxis mostrada ms arriba, vemos que en el rea donde
especificamos las columnas del resultado, podemos incluir campos tanto de la
tabla1 como de la tabla2. Luego en la clusula FROM debemos ingresar todas las
tablas que formen parte de la consulta y en la clusula WHERE igualamos los
campos compartido para realizar el emparejamiento.
En la prctica lo que estamos realizando es una interseccin, es decir que en el
resultado solo nos van a aparecer las filas que emparejen el campo igualado, esto
es que contengan el mismo valor en cliente y en cheques.
El resultado es el siguiente:
10
11
El resultado es el siguiente:
Como vemos nos aparece solamente el total de filas y como titulo la etiqueta total
que es la especificada con el clausula AS.
La funcin COUNT() en realidad cuenta la cantidad de filas en el conjunto de
resultados, y por lo tanto se va a ver afectada si afectamos la cantidad de
resultados. Por lo explicado, el ejemplo anterior cuenta todos los registros de la
tabla seleccionada, puesto que no realizamos ningn tipo de filtrado.
12
En la clusula WHERE indicamos que solo cuente las filas cuyo campo codigo es
mayor a 3.
El resultado es 2, puesto que solo hay 2 filas que cumplen la condicin indicada.
Ahora supongamos que necesitamos saber el importe total en cheques que
tenemos de cada cliente. Esto es un tipo de consulta muy comn en un sistema
administrativo, esto es, a partir de una tabla general, obtener la totalizacin de un
campo de una tabla asociada.
En el ejemplo que estamos usando, podemos utilizar las tablas cliente y cheques
para realizar un ejemplo de este tipo de consultas.
13
14
15
16
Vemos que el resultado, a diferencia del anterior, se limita a traernos dos filas,
aquellas que cumplen con la condicin del HAVING.
Inserciones
Hasta aqu hemos visto como consultar datos existentes en las tablas de nuestra
base de datos, pero los datos estn all porque en algn momento se insertaron en
ella. Como explicamos las base de datos relacionales solo admiten que el usuario
se comunique con ellas mediante SQL y por lo tanto las inserciones de datos
deben ser realizados mediante le mismo lenguaje.
La clusula SQL para insertar datos en una tabla es INSERT y tiene la siguiente
sintaxis:
INSERT INTO tabla (campo1, campo2, campo3, .., campoN)
VALUES (valor1, valor2, valor3, ., valorN);
Vayamos a un ejemplo para entenderlo rpidamente, supongamos que quiero
insertar un nuevo cliente en mi tabla cliente.
17
El PhpMyAdmin nos informa que hay 1 (una) columna afectada, por lo que
sabemos que la insercin ha sido realizada con xito.
Borrado
Como vimos en el ejemplo anterior, cometimos un error en la insercin de una fila,
por lo tanto deseamos eliminarla para corregir este error. Para eliminar una o mas
filas de una tabla necesitamos utilizar la clusula DELETE cuya sintaxis es la
siguiente:
DELETE FROM tabla WHERE condiciones de borrado
Observemos que la clusula DELETE no me permite especificar campos puesto
que borra siempre una fila completa.
En el ejemplo deseamos borrar el cliente cuyo campo cdigo tiene el valor 23 que
es el que ingresamos errneamente.
19
Una vez ms se nos indica que hay una fila afecta por lo que podemos inferir que
el borrado se realiz con xito.
Hay que aclarar que SQL no prev en forma estndar de ningn mtodo de
recuperacin inmediato, por lo tanto siempre hay que estar muy seguro antes de
ejecutar una consulta de borrado.
Actualizaciones
20
21
Como vemos, una vez ms, PhpMyAdmin nos informa de una sola fila afecta por
lo que podemos deducir que la actualizacin se realiz con xito.
22