Sei sulla pagina 1di 22

Programacin PHP Mdulo III

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

Como vern utilizaremos el PhpMyAdmin para este tutorial.


La primera tarea a realizar es obtener el contenido completo de cada una de las
tablas. Para ello utilizaremos los comandos SQL USE y SELECT.
USE [base de datos];
SELECT [columnas] FROM [tabla];
Con el comando USE seleccionamos sobre qu base de datos vamos a trabajar.
En el caso que seleccionemos la base de datos del panel de la izquierda, el uso
de este comando es innecesario. Con el comando SELECT obtendremos los datos
almacenados en la tabla.

Por supuesto estos comandos los debemos escribir en la ventana SQL del
PhpMyAdmin.

Como resultado de ejecutar la consulta, mediante el botn Continuar, obtenemos


el contenido completo de la tabla cliente.
Observemos que el comando ingresado fue:
Select * from cliente;

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

Si quisiramos mostrar solo algunos campos simplemente ingresamos:

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.

Observe que luego de la clusula WHERE, se ingres el criterio de seleccin


deseado (codigo = 2).

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 ejecutamos esta consulta el resultado es el siguiente:

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.

El resultado de ejecutar el SELECT con el orden descendente es el mostrado en la


imagen anterior.
Consultas de emparejamiento
Ahora bien, hasta ahora hemos obtenido datos de una de las tablas existentes.
Todava no hemos seleccionada nada que involucre las dos tablas. Por supuesto
lo aplicado individualmente a la tabla cliente, es perfectamente vlido para la tabla
cheques o para cualquier tabla individual sobre la que queramos trabajar.
Para combinar datos de tablas diferentes, SQL nos exige que ambas tablas
compartan uno o un conjunto de campos que posean el mismo significado
semntico. Por ejemplo, en la tabla cheque existe un campo llamado cliente donde
se indica de que cliente es cada cheque, completando dicho campo con el cdigo
del cliente relacionado. Es muy importante entender que en los campos que
compartan ambas tablas, el contenido, esto es lo almacenado no solo debe ser del
9

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

Totalizaciones utilizando SQL


Muchas veces las necesidades de procesamiento que requiere un sistema,
implican la totalizacin o resumen de datos almacenados. Estos es, a partir de los
datos nominales almacenados en la base de datos, realizar una consulta, que
adems de seleccionar los datos a mostrar, nos muestre un resumen de los
mismos, con funciones de totalizacin asociadas (por ejemplo sumarizacin,
promedio, mximo, mnimo, etc.)
Cuando necesitamos totalizar datos de una tabla tenemos que empezar a utilizar
funciones internas del SQL, que nos permiten ir un poco ms all de la simple
seleccin de datos.
Vamos a tomar nuevamente como base la base de datos llamada prueba, que
contiene dos tablas: cliente y cheques con la siguiente estructura:

11

Lo primero que vamos a realizar es contar la cantidad de filas de una tabla.


Para ello necesitamos utilizar la funcin COUNT() que cuenta la cantidad de filas
de una consulta.

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

Si necesitamos contar cuantas filas devuelve la consulta, que cumplen con un


determinado criterio, lo que debemos utilizar es la clusula WHERE.

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

El resultado como vemos es el detalle de la tabla cliente y la totalizacin de la


tabla cheques.
Observamos que hemos introducido una nueva clusula, llamada GROUP BY.
Esta clusula es necesaria porque tenemos en la tabla cheques ms de un
cheque por cada cliente, y lo que nosotros necesitamos saber es el importe total
por cada cliente. La clusula GROUP BY lo que hace es agrupar por los campos
que NO estn la funcin de agregacin (en este caso SUM() ) de manera obtener
en el resultado una fila por cada cliente, con el importe total de todos sus cheques
sumarizados en la columna correspondiente.

14

Utilizamos la funcin SUM() porque en este caso necesitamos totalizar el importe


de los cheques.
Por supuesto podemos utilizar los filtros necesarios mediante la clusula WHERE,
en el ejemplo solo la utilizamos para emparejar las tablas, pero podramos filtrar
adems por alguna condicin anterior.
Es importante saber que la clusula WHERE se aplica PREVIAMENTE al a
clausula GROUP BY y a la funcin SUM(), por lo tanto en estas dos ltimas
instrucciones solo van a considerarse las filas que cumplan con las condiciones
especificadas en el WHERE.
Asimismo podemos necesitar filtrar el resultado de la aplicacin de funciones de
agregacin, esto es realizar un filtro sobre el resultado final de la ejecucin de la
consulta SQL. Como ya vimos, la clusula WHERE no nos ayuda en esto puesto
que ella filtra ANTES de la ejecucin de las agregaciones y por lo tanto deberemos
utilizar otra clausual para filtrar DESPUES de las agregaciones.
Esta clusula es HAVING y se utiliza para filtrar el resultado de la agregacin.
Para fer su uso, utilizaremos el mismo ejemplo que el anterior, donde
totalizbamos el importe del cheque agrupndolo por cliente.

15

Vemos que se ha agregado la clusula HAVING donde le indicamos a la consulta


que del resultado solo traiga aquellas lneas donde la sumatoria del importe de los
cheques sea mayor a 10000.

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.

Como siempre escribimos el comando en la venta SQL del PhpMyAdmin, y


observamos como seleccionamos las columnas de la tabla cliente y le asignamos
(por orden) un valor a cada uno de ellas. Observemos que para las columnas que
almacenan valores numricos, los valores han sido ingresados directamente y
para aquellas que almacenan valores tipo carcter, los valores se han especificado
entre comillas.

17

El PhpMyAdmin nos informa que hay 1 (una) columna afectada, por lo que
sabemos que la insercin ha sido realizada con xito.

Ahora en el resultado observamos un problema, La direccin nos qued


almacenada en el campo nombre !
Si observamos el comando que introdujimos, observamos que el campo domicilio
lo pusimos segundo en la lista, sin importar que sea el tercero en la definicin de
la tabla, y el valor del domicilio (pichincha 2365 6to A) lo pusimos como tercer
18

valor asignado, por lo tanto el domicilio lo almaceno en nombre y el nombre en


domicilio, simplemente porque eso fue lo que dije que haga. Por supuesto que
este error es para remarcar que en la clusula INSERT es muy importante
conservar los rdenes puesto que si no es muy fcil cometer errores sobre todo en
inserciones complejas.

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.

Vemos que simplemente usamos la clusula DELETE con la indicacin de sobre


que tabla operar y en la clusula WHERE realizamos el filtro previo al borrado,
esto es seleccionamos que fila se van a borrar.

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

Otra de las necesidades comunes durante la ejecucin de un sistema, es


mantener actualizados los datos almacenados en las bases de datos; esto es,
cualquier dato, por lo general, sufre modificaciones a lo lardo del tiempo y la base
de datos debe reflejarlo.
Por supuesto no sera tericamente posible dar de baja una fila y darla de alta
nuevamente cada vez que se modifique un dato, pero esto es altamente
ineficiente.
Para evitar esto, SQL nos brinda una clusula que nos permite actualizar los datos
de campos individuales dentro de una tabla determinando, esta clusula es
UPDATE y tiene la siguiente sintaxis:
UPDATE tabla
SET campo1=valor1, campo2=valor2, . campoN = ValorN
WHERE campoN = valorN
Supongamos ahora que el cliente Jose se mud y nos informa su nueva direccin,
debemos entonces actualizar su fila de manera que refleje la nueva situacin.

Como vemos, actualizamos el domicilio a su nuevo valor, pero le agregamos la


clusula WHERE indicando que solo lo haga para el cliente Jose. Si no hiciramos
esto, esta consulta les cambiara el domicilio por el especificado a todos los
clientes.

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

Potrebbero piacerti anche