22
FACENA UNNE Taller de Programación I Teoría Facultad de Ciencias Exactas y Naturales y Agrimensura- UNNE Desarrollo de Aplicaciones Web. Año 2012 Expto. Oscar Zalazar - Lic. Lucía Salazar - Expto. Pedro L. Alfonzo - Lic. Yanina Medina - Osvaldo P. Quintana

TeoríaBaseDeDatosEnLaWeb

  • Upload
    navaeli

  • View
    15

  • Download
    4

Embed Size (px)

Citation preview

Page 1: TeoríaBaseDeDatosEnLaWeb

FACENA

UNNE

Taller de Programación I

Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura-

UNNE Desarrollo de Aplicaciones Web. Año 2012

Expto. Oscar Zalazar - Lic. Lucía Salazar - Expto. Pedro L. Alfonzo - Lic. Yanina Medina - Osvaldo P. Quintana

Page 2: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

1

Tema 9: Acceso a bases de datos MySQL en PHP

9.1.- Concepto.

- 9.1.2. Base de Datos en la Web.

- 9.1.3. La base de datos MySQL.

- 9.1.4. Base de datos relacionales.

9.2.- Lenguaje SQL.

9.2.1.- Consultas estructurales.

9.2.2.- Tipos de datos.

9.2.3.- Atributos.

9.2.4.- Consultas de Manipulación de Datos

9.2.4.1- Sentencia INSERT INTO

9.2.4.2.- Sentencia SELECT

9.2.4.3.- Sentencia UPDATE

9.2.4.4.- Sentencia DELETE

9.3.- PHP y MySQL

9.3.1.- PhpmyAdmin.

9.3.2.-Comunicación entre PHP y MySql.

9.3.4.-Conexión.

Page 3: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

2

9.1.1. Concepto:

Una Base de Datos es una colección de datos relacionados o bien estructura donde se almacena

información siguiendo pautas de disposición y ordenación, o bien, una Base de Datos es una

colección de datos organizados de tal manera que se pueda encontrar información cuando sea

necesaria, pueden ser simples y pequeñas o complejas y muy grandes.

Técnicamente el término Base de Datos, se refiere al archivo o grupo de archivos que

contienen datos reales.

Las Bases de Datos permiten acceder a datos sin necesidad de recorrer toda la Base de Datos

para encontrar el dato buscado.

El acceso a la Base de Datos es mediante un conjunto de programas llamado Sistema

Administrador de Base de Datos (DBMS: Database Management System). Actualmente la

mayoría de los DBMS son sistemas Administradores de Bases de Datos relacionales

(RDBMSs: Relational Database Management Systems) donde los datos se organiza y almacena

en tablas relacionadas.

Uno de los puntos fuertes de PHP es que ofrece soporte para diferentes tipos de DBMS (Ej.

IBM, DB2, INFORMIX, MICROSOFT, SQL SERVER, MS SQL, ORACLE, POSTGRE

SQL).

Adicionalmente PHP también ofrece soporte para el estándar ODBC (Open Database

Connectivity). El objetivo de ODBC es hacer posible el acceder a cualquier dato desde

cualquier aplicación, sin importar que DBMS almacene los Datos; se necesita tener instalado

un driver ODBC.

Luego de tener instalado el RDBMS a utilizar e instalarlo, es necesario conocer como diseñar y

crear la Base de Datos a la cual se accederá de los scripts de PHP.

9.1.2. Base de Datos en la Web

Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la

información de un sitio web.

Ventajas:

Proporcionar información actualizada

Facilitar la realización de búsquedas

Disminuir los costes de mantenimiento

Implementar sistemas de control de acceso

Page 4: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

3

Almacenar preferencias de los usuarios

Esquema básico de un sitio web soportado por bases de datos:

En este esquema se observa que cuando un usuario desde su navegador (maquina del cliente)

hace clic sobre un enlace correspondiente a un documento HTML que incluye código PHP, el

navegador realiza la solicitud al servidor web correspondiente. El servidor Web llama al

intérprete de PHP si es necesario, PHP ejecuta los scripts interactuando con la base de datos (a

través de su gestor de base de datos que puede ser PHPMyAdmin) y devuelve al servidor el

documento generado en formato HTML, el documento es interpretado por el navegador se

ejecutan los scripts del lado del cliente y se presenta el resultado en la maquina del cliente.

9.1.3. La base de datos MySQL

Dentro de las múltiples posibilidades que los sitios Web dinámicos ofrecen al usuario está la

obtención de información almacenada en una base de datos en el servidor.

Suponga que se quiere escribir una página desde el cual el usuario pueda obtener los

resultados de los eventos deportivos que se celebran en su ciudad. Se tendrá una base de datos

donde almacenará los resultados de encuentros de fútbol, partidos de tenis, combates de boxeo,

carreras de caballos, etc. Su página dinámica recibirá la solicitud del cliente sobre un

determinado deporte, buscará esta información en la base de datos y se la servirá al cliente. En

el mercado existen diversos sistemas de bases de datos. Nosotros hemos elegido para este caso

MySQL, por varias razones. Por una parte, es gratuito (aunque también existen licencias

comerciales). Por otra parte, los datos se almacenan en archivos que tienen un tamaño mucho

menor que otras bases de datos. Además, el motor de datos de MySQL es mucho más rápido,

Page 5: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

4

tanto grabando datos como localizándolos y recuperándolos, que el de otras bases de datos. Eso

sin contar con que MySQL ofrece una gran seguridad sobre la integridad de los datos

almacenados. El software open source es gratis y por otra parte los programas de tecnología

abierta son tan eficientes y seguros como los programas que no son gratuitos.

9.1.4. Bases de Datos relacionales.

Las Base de Datos relacionales, permiten establecer relaciones entre los distintos datos que

componen la misma. Una base de datos relacional está compuesta de relaciones que se llaman

tablas.

En una base de datos la información se almacena en TABLAS (entidades) cada TABLA está

formada por FILAS (Instancias) llamadas también REGISTROS. Cada registro esta divido en

CAMPOS (atributos) que forman columnas. Cada campo contiene un DATO y todos los

campos de una columna tienen la misma estructura, es decir que en todos ellos se almacena un

dato del mismo tipo tamaño máximo etc.

Cuando se crea una tabla cada columna tiene un nombre de campo, por ejemplo para una tabla

“Clientes”, los campos serian: Nombre, Apellido, Domicilio, Teléfono.

Nombre Apellido Domicilio Teléfono

Juan Jose Perez Chaco 1546 379-4458263

Dentro de cada una de las tablas es conveniente aunque no obligatorio crear un campo clave. El

cual sirve de referencia para localizar el registro como se observa en el siguiente ejemplo.

Las Base de datos relacionales son el tipo de Base de Datos más comúnmente utilizados y para

ello es necesario conocer algunos conceptos como: Tablas, Columnas, Filas, Valores, Claves,

esquemas y Relaciones.

¬ Las tablas: tienen un nombre, un número de columnas, cada una corresponde a una

pieza de dato (campo o atributo).

¬ Columnas: cada columna en la tabla tiene un nombre único y contiene distintos tipos

de datos. Adicionalmente cada columna tiene asociado un tipo de dato.

¬ Filas: cada fila en la tabla representa un registro, cada fila tiene los mismos atributos.

Page 6: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

5

¬ Valores: cada fila se corresponde de un conjunto de valores individuales que

corresponden a las columnas. Cada valor tiene el tipo de datos especificado por su

columna.

¬ Claves: cada registro en una tabla se debe identificar unívocamente, la columna que

identifica al registro en la tabla se llama clave o clave primaria. La clave también

puede ser compuesta.

Las Bases de Datos, en general están compuestas por múltiples tablas y utilizan una

clave como referencia de una tabla a otra (Figura 2).

El término para el tipo de relaciones es clave foránea.

Ejemplo (Figura 1) tabla CLIENTES

CLIENTES

Cliente_id Nombre Dirección Ciudad

1 Gabriel Pasaje Cruz 12310 Corrientes

2 Miguel San Juan 1525 Misiones

3 Julio San Lorenzo 1544 Corrientes

Figura 1: TABLA DE datos CLIENTES

ARTICULOS

Articulo_id Cliente_id Cantidad Fecha

1 3 25 2011-10-02

2 2 18 2011-08-5

3 1 15 2011-05-22

Figura 2: Clave Primaria y Clave Foránea

¬ Esquema: es el conjunto completo de tablas para una Base de Datos. El esquema puede

representarse con diagramas informales, modelo entidad-relación como texto.

¬ Relaciones: existen 3 tipos de relaciones:-----a) Relación uno a uno

-----b) Relación uno a muchos

-----c) Relación muchos a muchos

Page 7: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

6

a) Relación uno a uno: significa que una fila en una tabla se relaciona con una sola fila en

otra tabla y viceversa.

b) Relación uno a muchos: una fila en una tabla se relaciona con muchas filas en otra. La

tabla que tiene varios registros tiene una clave foránea hacia la tabla con un registro.

c) Relación muchos a muchos: muchas filas de una tabla se relacionan con muchas filas

de otra tabla. En este tipo de relaciones se utiliza una tercer tabla que contiene las

claves de las otras dos tablas como claves foráneas.

Una de las ventajas de los RDBMS (Sistema administrador de Base de Datos Relacionales) es

la seguridad de los Datos ya que no permite a cualquiera almacenar y obtener datos pues es

necesaria una cuenta de usuario para utilizarlo.

Una vez diseñada la Base de Datos se puede almacenar, actualizar y recuperar los datos, PHP

hace de esto una tarea sencilla

9.2.- Lenguaje SQL (Structured Query Languaje).

Es un lenguaje estándar para manipular sistemas de base de datos relacionales (RDBMSs).

Se utiliza para almacenar y recuperar datos desde una Base de datos y se integra muy bien a los

lenguajes de programación modernos, tiene relativamente pocas instrucciones y es muy facil de

aprender a manejar con soltura. Por ejemplo SQL, no puede mostrar un registro de una Base

de Datos en una página WEB pero si puede recuperar el contenido del registro y cedérselo al

Script PHP, que es el que se encargará de darle el formato adecuado y mostrarlo en un

documento HTML al usuario.

Es utilizado en sistemas de bases de datos tales como: MYSQL, ORACLE, POSTGRE SQL

MS SQL SERVER, entre otros.

Hay un estándar de ANSI para SQL, y los Sistemas de Base de Datos como MySql

generalmente luchan para implementar este estándar. Existen algunas diferencias entre el

estándar SQL y MySQL.

Las instrucciones de SQL, llamadas genéricamente consultas, se pueden considerar divididas

en 2 grupos.

A) Las estructurales, también llamadas de definición de datos DDL (Data definition

Languaje) o definición de datos del lenguaje: permite a los usuarios de la base de datos

Page 8: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

7

llevar a cabo las tareas de definición de las estructuras que almacenarán los datos así

como de los procedimientos o funciones que permiten consultarlos. Están destinadas a

crear, modificar y eliminar la Base de Datos) y las estructuras de las tablas así como los

índices.

B) La de manipulación de datos DML (Data Manipulation Languaje) o lenguaje de

manipulación de datos, es un lenguaje proporcionado por el Sistema de gestión de Base

de Datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o

manipulación de datos organizados, por el modelo de datos adecuado. Estas

instrucciones se ocupan de incorporar nuevos registros a las tablas según los criterios

necesarios, buscar nuevo registro, modificar los datos y grabarlos o eliminarlos.

La mayoría de las acciones que se necesitan realizar sobre una base de datos se hacen con

sentencias SQL.

Las sentencias para definición de datos del lenguaje (DDL) son:

- CREATE DATABASE

- ALTER DATABASE

- CREATE TABLE

- ALTER TABLE

- DROP TABLE

- CREATE INDEX

- DROP INDEX

Las sentencias para Manipulación de datos del lenguaje (DML) son:

- SELECT

- UPDATE

- DELETE

- INSERTO INTO

9.2.1. Consultas estructurales:

Lo primero que hacemos para gestionar (administrar) una base de datos es crearla, las

instrucciones SQL para realizar esto son llamadas genéricamente consulta. Para crear

realizamos la consulta CREATE DATABASE.

Ej CREATE DATABASE IF NOT EXISTS CLIENTES; //(creamos la base de datos

clientes).

Page 9: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

8

Todas las consultas SQL al igual que las de PHP deben terminar con punto y coma. La clausula

IF NOT EXISTS es opcional pero si la Base de Datos ya existe se producirá un error. La Base

de Datos recién creada (CLIENTES) es solo un contenedor donde se guardaran los datos. Pero

sin las tablas la Base de Datos no permite guardar nada.

consulta SQL para crear una tabla: CREATE TABLE `clientes` ( `id_clientes` INT NOT NULL AUTO_INCREMENT , `nombre_clientes` VARCHAR( 50 ) NOT NULL , `apellido_clientes` VARCHAR( 50 ) NOT NULL , `ciudad_clientes` CHAR( 30 ) NOT NULL , `telefono_cliente` TINYINT( 15 ) NOT NULL , PRIMARY KEY ( `id_clientes` ) ) TYPE = MYISAM ;

En este ejemplo hemos creado la tabla clientes, usando CREATE TABLE seguido del nombre

de la tabla que queremos crear, entre paréntesis aparece la definición de los campos que tendrá

la tabla, separadas cada uno del siguiente por una coma. Cada campo se crea anotando su

nombre seguido del tipo de dato que se almacenara.

En el ejemplo de creación de la tabla clientes, hemos definido datos del tipo CHAR Y

VARCHAR, los cuales se usan para almacenar cadenas alfanuméricas y van seguidos de un

número entre paréntesis. En el caso de CHAR, este número indica la cantidad de caracteres

que se reservan para la cadena. Si el dato introducido tiene menos caracteres, el campo seguirá

ocupando lo mismo en el disco, si se empleara VARCHAR y el dato introducido ocupa

menos caracteres de los que se reservaron, ese campo en ese registro concreto ocupa menos,

tantos bytes como caracteres tenga la cadena grabada.

Al final de la definición de la estructura de la tabla clientes, que hemos visto aparecen dos

clausulas, en primer lugar tenemos PRIMARY KEY (id_cliente) nos indica que es una clave

primaria. La cual la hemos definido como autoincremental.

Otra clausula a la que tenemos que prestar atención es la siguiente: TYPE = MYISAM, el tipo

de tabla se refiere a la forma en que el motor de Base de Datos va a gestionarla. Esto es

transparente al usuario. Las alternativas a MyISAM son ISAM Y HEAP. Cuando emplee

MYSQL use siempre el tipo MyISAM, que es el menos restrictivo y más eficiente.

Como es lógico, si se desea se puede eliminar una tabla de la Base de Datos con la que estamos

trabajando. Para ello emplearemos la consulta DROP TABLE.

Page 10: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

9

Ejemplo: DROP TABLE IF EXITS nombre de la tabla;

Nota: Se debe tener cuidado ya que la eliminación de una tabla es irreversible. Se pierde

todo: estructura y datos.

El lenguaje SQL permite la creación de índices que el motor de Base de datos usara para

agilizar la búsqueda de registros, mediante la consulta CREATE INDEX.

Ej: CREATE INDEX índice ON tabla (campo);

Para eliminar un índice: DROP INDEX índice;

La estructura de una tabla puede ser modificada si es necesario mediante la consulta ALTER

TABLE, cuya sintaxis genérica es la siguiente:

ALTER TABLE tabla

ADD campo definicióndelcampo

CHANGE campoantiguo camponuevo definiciondelcampo, DROP campo;

(Mediante la clausula ADD añadimos un nuevo campo, cambiamos el nombre y la definición

de campos ya existentes mediante la clausula CHANGE, o eliminar campos mediante la

cláusula DROP).

9.2.2. Tipos de Datos:

Los tipos de datos que se puede manejar desde SQL son los siguientes:

TIPOS DE DATOS SQL

TIPO DESCRIPCION

TNTYINT Entero 0 a 255 sin signo o de 128 a 127 con signo.

SMALLINT Entero de 0 a 65.535 sin signo, o de 32.768 a 32.767 con signo.

MEDIUMINT Entero de 0 a 16.777.215 sin signo o de -8.388.608 a 8.388.607 con signo.

INT Entero de 0 a 4.294.967.295 sin signo o de -2.147.483.648 a 2.147.483.647 con signo.

BEGINT Entero de 0 a 18.446.744.073.709.551.616 sin signo o desde el negativo -9.223.372.036.854.775.807 con signo.

FLOAT (M,D) Numero con coma flotante de simple precisión. M es la cantidad máxima de dígitos, sin contar el signo ni el punto decimal. D es el número de dígitos decimales.

DOUBLE (M,D) Numero en coma flotante de doble precisión. M y D como en el caso anterior.

DATE Fecha en formato HH:MM:SS, o bien HHMMSS o HHMM.

DATETIME Fecha y hora en formato AAAA-MM-DD HH:MM:SS.

TIME Hora en formato HH:MM:SS, o bien HHMMSS o HHMM.

CHAR (N) Cadena de n caracteres. Se reservan n caracteres, aunque el dato que luego se grave ocupe menos. .

VARCHAR (N) Cadena de longitud variable, se reservan n caracteres, pero si el dato ocupa menos, se

Page 11: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

10

reduce su longitud.

TNTYTEXT Texto plano con máximo de 255 caracteres

TEXT Texto plano con un máximo de 65.535 caracteres.

MEDIUMTEXT Texto plano con un máximo de 16.777.215 caracteres.

LONGTEXT Texto plano con un máximo de 4.294.967.295 caracteres.

TINYBLOB Archivo binario (puede ser texto RTF, imágenes, etc. con un máximo de 255 bytes)

BLOB Archivo binario con un máximo de 65.535 bytes.

MEDIUMBLOB Archivo binario con un máximo de 16.777.215 bytes.

LONGBLOB Archivo binario con un máximo de 4.294.967.295 bytes

ENUM (‘V1’, ‘V2, ETC.)

Campo que acepta cualquiera de los posibles valores enumerados entre paréntesis.

DECIMAL (M,D) Número guardado como cadena alfanumérica. M y D como en el caso anterior.

9.2.3.- Atributos:

ATRIBUTOS DE DATOS SQL

ATRIBUTO DESCRIPCION

NULL Indica que el campo podrá quedar sin ningún contenido cuando se cree un registro, o cuando modifique uno ya existente.

NOT NULL Indica que este campo debe tener asignado un contenido obligatoriamente en cada registro. Si se intenta dejar sin contenido se producirá un error.

DEFAULT Valor

Indica el valor que el campo asumirá por defecto. Cuando se cree un nuevo registro de la tabla en el campo se almacenará, de forma automática, el valor establecido por defecto, aunque, por supuesto, si se especifica otro valor se grabará el especificado. Si el campo es numérico, se escribirá el valor, sin más. Si el campo es alfanumérico se acotará con comillas simples

ZEROFILL Este atributo se aplica a campos numéricos cuando queremos que se rellenen con ceros los dígitos de más. Por ejemplo, si se reserva en un campo FLOAT sitio para cuatro dígitos y se almacena el valor 867, quedará como 0867

UNIQUE

Se utiliza cuando queremos que no se pueda repetir el valor de un campo en otro registro. Por ejemplo, si creamos una tabla personal y uno de los capos es el DNI de cada persona, es lógico que no pueda haber dos personas con el mismo número de documento. Si se intenta asignar un valor a ese campo, que ya exista en otro registro, se producirá un error. Hay que indicar que MySQL no reconoce este atributo. Lo ignora, sin dar ningún error, por razones de compatibilidad, pero no lo tiene en cuenta.

UNSIGNED Este atributo, aplicado a campos numéricos, hace que el motor de la base de datos genere un error si se intenta introducir un valor con signo, lo que, en la práctica impide el uso de valores negativos.

AUTO_INCREMENT

Este atributo se asigna a un campo numérico cuando deseamos que se incremente de forma automática. Es decir cada nuevo registro que se cree almacenará, en dicho campo, un valor que sea una unidad más que el anterior. Si elimina un registro, el valor que tenía en ese campo no se le volverá a asignar a ningún otro.

PRIMARY KEY Este atributo define un campo como clave primaria. Esto hace que en dicho campo no pueda haber valores repetidos, lo que en la práctica, sustituye al atributo UNIQUE en aquellos motores de BBDD que no lo utilizan como es el caso de MYSQL.

Page 12: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

11

9.2.4.- Consultas de Manipulación de Datos:

9.2.4.1.- Sentencia INSERT INTO

Para añadir registros, SELECT para localizar registros, UPDATE para actualizar registros y

DELETE para eliminar registros.

INSERT INTO: se utiliza para insertar una nueva fila en una tabla. Es posible escribir la

instrucción INSERT INTO en 2 formas.

La primera forma no especifica los nombres de la columna en que los datos se insertan, solo

sus valores:

INSERT INTO tabla VALUES (valor_1, valor_2, valor_3,….);

La segunda forma específica tanto los nombres de las columnas y valores que se insertan

INSERT INTO tabla (columna_1, columna_2,) VALUES (valor_1, valor_2,…);

9.2.4.2.- Sentencia SELECT:

Se utiliza para localizar registros dentro de una tabla determinada.

SELECT (campo_1, campo_2,… campo_n) FROM tabla WHERE condición;

Esto recupera los campos especificados de la tabla indicada para aquellos registros que

cumplan la condición. Por ejemplo: SELECT nombre, apellido FROM clientes

WHERE ciudad = “corrientes”;

Con esta consulta conseguiremos el nombre y apellido de los clientes que son de la ciudad de

corrientes.

Si queremos recuperar todos los datos de los registros que cumplan la condición la consulta

será: SELECT * FROM clientes WHERE ciudad = “corrientes”;

La clausula WHERE permite establecer condiciones de selección de registros, es

especialmente potente y flexible.

Clausula GROUP BY, permite agrupar registros según ciertos criterios, la consulta seria:

SELECT nombre, apellido FROM clientes GROUP BY ciudad;

Con esto tendremos el nombre y apellido de los clientes agrupados por ciudad.

Page 13: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

12

Clausula LIKE, podemos establecer una condición basada en similitudes no exactas. Esto

quiere decir que podemos crear un cierto criterio sobre patrones. Esta palabra LIKE es un

comparativo que se refiere a la similitud entre dos cosas.

Por ejemplo supongamos que queremos ver la lista con todos los datos de los clientes cuyo

nombre es “julio” la consulta sería la siguiente.

SELECT * FROM clientes WHERE nombre LIKE “julio”;

Como hemos mencionado la clausula WHERE es muy flexible y operadores como LIKE le

dan más potencia.

Podemos usar operadores para encadenar varias condiciones bajo una sola clausula WHERE.

En SQL consideramos dos tipos de operadores: los aritméticos y los lógicos, los cuales

combinados tienen mucha potencia para el procesamiento de datos.

OPERADORES DE LA CLAUSULA WHERE (aritméticos)

OPERADOR DESCRIPCION

> Mayor que.

< Menor que.

= Igual a.

<= Menor o igual que.

>= Mayor o igual que.

<> Distinto de.

LIKE Parecido a.

BETWEEN Comprendido entre dos valores

IN Se usa para hacer una consulta en una tabla que está en otra Base de datos distinta de la que estamos usando.

OPERADORES DE LA CLAUSULA WHERE (lógicos)

OPERADOR DESCRIPCION

AND Une dos condiciones. Deben cumplirse ambas.

OR Une dos condiciones de modo que seleccionará los registros que cumplan, al menos una de ellas.

NOT Selecciona los registros que no cumplen la condición.

Page 14: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

13

UNIONES:

Se utilizan para consultar los datos de dos o más tablas sobre la base de una relación entre

ciertas columnas en estas tablas:

JOIN

ALEFT JOIN

RIGHT JOIN

FULL JOIN

La palabra clave INNER JOIN devuelve las filas para las cuales hay al menos una

coincidencia en ambas tablas.

SELECT columnas(s) FROM tabla1

INNER JOIN (tabla2) ON (tabla1.columna=tabla2.columna);

La palabra LEFT JOIN devuelve todas las filas de la tabla de la izquierda (tabla1), incluso si

no hay coincidencias en la tabla a la derecha (tabla2).

SELECT columna(s) FROM tabla1

LEFT JOIN (tabla2) ON (tabla1.column=tabla2.columna);

La palabra RIGHT JOIN devuelve todas las filas de la tabla de la derecha (tabla2), incluso si

no hay coincidencias en la tabla de la izquierda (tabla1).

SELECT columna(s) FROM tabla1

RIGHT JOIN (tabla2) ON (tabla1.columna=tabla2.columna);

La palabra FULL JOIN devuelve filas cuando hay una coincidencia en una de las tablas.

SELECT columna(s) FROM tabla1

FULL JOIN (tabla2) ON (tabla1.columna=tabla2.columna);

FUNCIONES DE AGRUPADO:

Devuelve un valor único, calculado a partir de valores de una columna:

AVG( ) : devuelve el valor promedio de 1 columna numerica

SELECT AVG (columna) FROM tabla;

COUNT( ): devuelve el numero de filas que coinciden con un criterio especifico.

SELECT COUNT (columna) FROM tabla;

FIRST( ): devuelve el primer valor de la columna seleccionada.

SELECT FIRST (columna) FROM tabla;

LAST( ) devuelve el ultimo valor de la columna seleccionada.

SELECT LAST (columna) FROM tabla;

MAX( ): Devuelve el mayor valor de la columna seleccionada

SELECT MAX (columna) FROM tabla;

Page 15: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

14

MIN( ): Devuelve el menor valor de la columna seleccionada.

SELECT MIN (columna) FROM tabla;

SUM( ): Devuelve la suma total de una columna numérica.

SELECT SUM (columna) FROM tabla;

Sentencia GROUP BY: se utiliza en conjunción con las funciones de agregado para agrupar el

conjunto de resultados por una o más columnas.

SELECT columna,

funcion(columna) FROM tabla

WHERE columna operador valor

GROUP BY columna;

CLAUSULA HAVING: Se añadió a SQL puesto que la clausula WHERE no se puede utilizar

con funciones de agregado.

FUNCIONES DE FECHA Y HORA:

NOW( ): fecha y hora actual

CURDATE( ): fecha actual

CURTIME( ) hora actual

MySQL viene con los siguientes tipos de datos para almacenar una fecha o valor de fecha/hora

en la Base de datos:

DATE formato YYY-MM-DD

DATETIME formato YYY-MM-DD HH:MM:SS

TIMESTAMP formato YYY-MM-DD HH:MM:SS

YEAR formato YYY o YY

Sub-Consultas: Una sub-consulta es una sentencia SELECT dentro de otra sentencia SELECT

SELECT * FROM tabla1 WHERE columna1= (SELECT columna1 FROM tabla2);

La Sub-consulta esta anidada dentro de la consulta exterior:

- Es posible anidar sub-consultas dentro de otras Sub-consultas hasta una profundidad

considerable.

- Una Sub-consulta debe siempre aparecer entre paréntesis.

Las principales ventajas de las Sub-Consultas son:

- Permiten consultas estructuradas de forma que es posible aislar cada parte de un

comando.

- Proporcionan un modo alternativo de realizar operaciones que de otro modo

necesitarían JOINS y uniones complejas.

Page 16: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

15

9.2.4.3.- Sentencia UPDATE:

Se utiliza para actualizar los registros existentes en una tabla

UPDATE tabla

SET (columna_1= valor_1, columna_2=valor_2)

WHERE columna=valor;

La clausula WHERE especifica que registro o registros deben ser actualizados. Si se omite,

todos los registros serán actualizados.

9.2.4.4.- Sentencia DELETE:

Se utiliza para eliminar filas de una tabla

DELETE FROM tabla

WHERE columna = valor;

La clausula WHERE especifica que registro o registros deben ser eliminados. Si se omite,

todos los registros serán eliminados.

ALIAS: se puede dar a una tabla o a una columna otro nombre mediante el uso de un alias. Es

útil cuando se tienen nombres de tablas o columnas muy largos o complejos.

SELECT columna(s)

FROM tabla AS alias

9.3.- PHP y MySQL

En este apartado solo nos vamos a centrar en el uso de php con mysql, ya que sql es un

lenguaje en particular, y muy generalizado. Normalmente, para la administración de bases de

datos mysql, se usa PhpMyAdmin, una interfaz muy amigable con la que se puede manejar

las bases de datos.

9.3.1.- PhpMyAdmin

Las formas básicas para trabajar con MySql son:

- El cliente de la línea de comando (proporcionado por MySQL). (Figura 3)

- El cliente basado en Web (phpMyadmin se instala con el paquete XAMPP). Figura 4

Page 17: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

16

Figura 3: Cliente de línea de comando MySQL

Figura 4: Cliente basado en WEB phpMyAdmin

PhpMyadmin: Es una herramienta de software libre (incluida en el paquete XAMPP) y

escrita en PHP, destinada al manejo y administración de MySql sobre la Web.

- Soporta un amplio rango de operaciones con MySql.

Las operaciones utilizadas con mayor frecuencia, están soportadas por la interfaz del

usuario. Administración de bases de datos, Tablas, Campos, Relaciones, Índices,

Permisos de usuario. Capacidad de ejecutar cualquier sentencia SQL.

Page 18: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

17

9.3.2.- Comunicación en PHP y MySql:

Cualquiera sea la manera de trabajar para conectar PHP con MySql el proceso siempre sigue la

secuencia:

- Conectar con MySql para lo cual es necesario proporcionar el Host, el usuario y la

contraseña.

- Seleccionar la Base de datos con la que se quiere trabajar.

- Preparar la consulta SQL.

- Ejecutar la consulta y recuperar el resultado.

- Extraer los datos del resultado de la consulta y mostrarlos (en general mediante una

iteración).

- Liberar la conexión.

9.3.3.- Conexión

Lo primero que se debe realizar siempre, es la conexión de php con mysql. La función que se

utiliza es mysql_connect la cual conecta el programa PHP con el gestor de base de datos que

contiene la base de datos con la que se desea trabajar. El primer parámetro (servidor) contiene

el nombre DNS del servidor que almacena la base de datos y el puerto por el que el servidor

mysql escucha las peticiones de consulta. El parámetro usuario contiene el nombre de usuario

con el que se va a acceder al servidor y el parámetro password contiene la contraseña de

autenticación del usuario sin cifrar. Si la función se ejecuta correctamente, devuelve un

descriptor de conexión que se utilizará en las funciones de acceso al servidor. Si, por cualquier

razón, no se puede realizar la conexión, devuelve el valor booleano false.

La sintaxis es: mysql_connect (string servidor, string user, string passwd) Aquí un ejemplo:

<?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = "books"; $conx = mysql_connect($dbhost, $dbuser, $dbpass); ?>

En las variables dbhost, dbuser, y dbpass, definimos el servidor, el usuario y la clave de nuestro

servidor mysql, y en la variable $conx, creamos la variable de conexión.

La función mysql_close cierra una conexión con un servidor MySQL que se ha abierto

invocando a mysql_connect( ) . Si la funcion se ejecuta correctamente devuelve el valor

booleano true y si se produce algún error, devuelve el valor false.

La sintaxis es: mysql_close (descriptor mydb)

Page 19: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

18

A continuación se muestra un ejemplo de conexión y el script finaliza cerrando la conexión

abierta invocando a mysql_close( ). <?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = "mysql"; $conx = mysql_connect($dbhost, $dbuser, $dbpass); If (!$conx) die (“No se puede conectar al servidor”); // die es un alias de exit mysql_close($conx); ?>

A continuación, tenemos que seleccionar, dentro del servidor, la base de datos que queremos

usar. Para lo cual se utiliza la función mysql_selected_db( ), la cual toma un argumento que es

nombre de la base de datos a utilizar, la cual retorna TRUE o FALSE según si se conecto con

éxito o no.

Aquí un ejemplo: en donde se realiza la conexión con el servidor Mysql y se selecciona la base

de datos alumnos.

<?php

$dbhost = "localhost";

$dbuser = "Mysql";

$dbpass = "";

$conx = mysql_connect($dbhost, $dbuser, $dbpass);

$db=mysql_select_db('alumnos');

if(!$conx=mysql_connect($dbhost,$dbuser,"")){

die("Error al Tratar De Conectar");

}

if(!mysql_select_db("alumnos")){

die ("Error al Tratar De Conectar Con La Base De Datos");

}

?>

La funcion mysql_select_db selecciona una base de datos almacenada en el gestor Mysql,

sobre el que se habrá realizado una conexión previa invocando a mysql_connect.

La sintaxis es: $db = mysql_select_db(string bdatos);//

Preparar la consulta SQL

Enviar la instrucción SQL a la base de datos: mysql_query()

◦ Devuelve un identificador o true (dependiendo de la instrucción) si la

instrucción se ejecuta correctamente y false en caso contrario.

Sintaxis: $consulta = mysql_query (instrucción, $conexion);

Ejemplo:$consulta=mysql_query (“select * from alumnos”, $conexion)

or die (“Fallo en la consulta”);

La consulta es un string:

Page 20: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

19

Por ejemplo:

$ query= “SELECT usuario, password FROM usuarios

WHERE usuario=´juan´ AND password = ´juan08´”;

Los datos insertados dentro de la consulta deberían estar correctamente conectados.

Enviar una consulta MySql:

Se utiliza la función mysql_query( ), la cual envía una única consulta ya que múltiples

consultas no están soportadas a la base de datos actualmente activa en el servidor asociado con

el identificador de la conexión.

El conjunto de resultados devuelto, se pasa a una función que maneje el resultado de las tablas

y y el acceso a los datos retornados.

Ejemplo: $result = mysql_query($query);

Ejecutar la consulta y recupera el resultado: para ello existen varias funciones:

a) mysql_fetch_array( )

b) mysql_fetch_assoc( )

c) mysql_fetch_row( )

Es importante tener en cuenta que mysql_fetch_array( ) no es significativamente más lenta que

mysql_fetch_row( ), sin embargo provee un valor añadido importante.

a) mysql_fetch_array(): recupera una fila de resultado como un array asociativo, un array

numérico o como ambos y devuelve un array de cadena que corresponde a la fila

recuperada, si no hay filas devuelve FALSE.

El tipo de array a ser devuelto depende de una constante:

MYSQL_ASSOC : un array asociativo con índices asociativos.

MYSQL_NUM : un array con índices numéricos.

MYSQL_BOTH : un array con ambos índices asociativos y numéricos.

b)mysql_fetch assoc(): recupera una fila de resultado como un array asociativo, devuelve un

array asociativo de cadenas que corresponde a la fila recuperada o FALSE si no hay mas filas.

Ejemplo: $row = mysql_fetch_assoc($result);

print_r($row);

echo $row[´nombre´];

c) mysql_fetch_row(): recupera una fila de resultado como un array numerico y retorna un array

numérico de cadenas que corresponde a la fila recuperada y si no hay filas devuelve false.

Ejemplo: $row = mysql_fetch_array ($result, mysql_BOTH);

Print_r($row);

Page 21: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

20

Echo $row[´nombre´];

Echo $row[0];

Obtener y procesar los resultados: mysql_num_rows(), mysql_fetch_array()

◦ En el caso de que la instrucción enviada produzca unos resultados,

mysql_query() devuelve las filas de la tabla afectadas por la instrucción

◦ mysql_num_rows() devuelve el número de filas afectadas

◦ Para obtener las distintas filas del resultado se utiliza la función

mysql_fetch_array(), que obtiene una fila del resultado en un array asociativo

cada vez que se invoca

Sintaxis: $nfilas = mysql_num_rows ($consulta);

$fila = mysql_fetch_array ($consulta);

Obtención de las filas:

$nfilas = mysql_num_rows ($consulta);

if ($nfilas > 0)

{

for ($i=0; $i<$nfilas; $i++)

{

$fila = mysql_fetch_array ($consulta);

// procesar fila i-ésima de los resultados

}

}

Obtener los resultados: mysql_num_rows(), mysql_fetch_array()

Para acceder a un campo determinado de una fila se usa la siguiente sintaxis:

$fila[“nombre_campo”] // por ser un array asociativo

$fila[i] // i=índice del campo desde 0

Ejemplo:

for ($i=0; $i<$nfilas; $i++)

{

$fila = mysql_fetch_array ($consulta);

echo “nombre: “ . $fila[“nombre”];

echo “apellido: “ . $fila[“apellido”];

}

Recuperar y mostrar el resultado en un loop:

Ejemplo: <?php

$conn = mysql_connect(´localhost´, ´root´, ´260381´);

$ db = mysql_selected_db(´clientes´);

$query = “SELECT nombre, apellido FROM clientes”;

$result = mysql_query($query);

Page 22: TeoríaBaseDeDatosEnLaWeb

Taller de Programación I FACENA – UNNE Teoría

Facultad de Ciencias Exactas y Naturales y Agrimensura

21

While ($row = mysql_fetch_array($result,MYSQL_BOTH))

{ echo $row[´nombre´];

echo $row[´apellido´];

}

mysql_close ($conn);

?>

Recuperar un número fijo de elementos de una tabla:

Se utiliza la opción LIMIT de la orden SELECT. Así, por ejemplo,

SELECT * from libros LIMIT 0, 5

recupera los 5 primeros elementos de la tabla. Y en general,

SELECT * from libros LIMIT $comienzo, $num

recupera $num elementos a partir de la posición $comienzo

La variable $num tendrá un valor constante (en este caso 5), mientras que la variable

$comienzo se incrementará o decrementará en 5 unidades al pasar a la página siguiente o

anterior.

Para ello se pasará la variable como parámetro en el enlace asociado al botón correspondiente

Por ejemplo, el código para el botón siguiente será:

"<A HREF='$PHP_SELF?comienzo=" . ($comienzo + $num) . "'>Siguiente</A>“

Habrá que comprobar previamente que el nuevo valor de comienzo es válido, es decir, que se

encuentra dentro de los límites de la tabla devuelta por la consulta

Recuperar los elementos de una tabla que cumplen una condición se utiliza la opción WHERE

de la orden SELECT. Por ejemplo,

SELECT * from noticias WHERE categoria=’ofertas’

recupera las noticias cuya categoría tiene el valor “ofertas”. Y en general,

SELECT * from noticias WHERE categoria =’$categoria’

recupera las noticias cuya categoría tiene el valor dado por la variable $categoria

La variable $categoria se obtendrá de un elemento SELECT

Liberar una conexión: La funcion mysql_close() cierra la conexión de Mysql, asociado con el

identificador de enlace específico, si el identificador de enlace no se especificó, el l ultimo

enlace abierto es usado.

Frecuentemente no es necesario liberar la conexión, los enlaces abiertos no continuos son

automáticamente cerrados al final de la ejecución del script.

Ejemplo: $dbc = mysql_close($conn);