Vous êtes sur la page 1sur 39

Bases de Datos MySQL

Tablas y consultas.

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

Bases de Datos MySQL


Recordemos el modelo Entidad Relacin de una escuela...

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

Bases de Datos MySQL

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

Bases de Datos MySQL

Propiedades de las entidades.


DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 4

Bases de Datos MySQL


La entidad alumnos se convierte en la tabla:

Entidad Propiedad

Tabla Columna

Cada fila representa un Registro. La clave puede estar formada por una o mas columnas
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 5

Bases de Datos MySQL

Para crear la base de datos escuela utilizaremos el Sistema de Gestin de Bases de Datos MySQL
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 6

Bases de Datos MySQL

Ventajas de MySQL: * Robusto * Cdigo abierto * Forma parte de LAMP


DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 7

Bases de Datos MySQL

Existe una herramienta, llamada phpMyAdmin, que permite administrar las bases de datos MySQL mediante una interfaz sencilla creada en PHP...
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 8

Bases de Datos MySQL


Ejercicio:
En una base de datos nueva, crear la tabla alumnos, con los campos clave_alumno, nombre, edad y curso_actual utilizando phpMyAdmin.

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

Bases de Datos MySQL


Creacin de una tabla:

Indicar, para cada campo de la tabla los siguientes datos:


Field : Nombre del atributo. Type : Tipo de dato del atributo. Length/Values : Indica la longitud mxima del tipo de dato (especialmente para VARCHAR).

Attributes : UNSIGNED : Slo toma valores positivos (para INTEGER, SMALLINT, ...).
Null : El atributo puede tomar valores nulos? (la clave o identificador de la tabla nunca puede tener valores nulos!!!). Default : Valor por defecto del atributo al aadir una nueva fila. Extra : AUTO_INCREMENT (normalmente se usa para generar, automticamente, valores de la clave). Primary : Se debe marcar si el atributo es Clave Primaria (el identificador) de la tabla. Index : Crea un ndice dentro de la tabla. Unique: Se debe marcar si el valor del atributo es nico para toda la tabla. DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 10

Bases de Datos MySQL


Tipos de Datos en MySQL: Los tipos de datos que puede haber en un campo o atributo de una tabla forman tres grandes grupos: 1. Tipos Numricos 2. Tipos de Fecha 3. Tipos de Cadena de Caracteres

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

11

Bases de Datos MySQL


1) Tipos numricos: Existen tipos de datos numricos, que se pueden dividir en dos grandes grupos, los que incluyen valores decimales (coma flotante) y los que no. TinyInt: es un nmero entero con o sin signo. Con signo el rango de valores vlidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255 Bit Bool: un nmero entero que puede ser 0 1 SmallInt: nmero entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535. MediumInt: nmero entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a 16777215. Integer, Int: nmero entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295 BigInt: nmero entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615. Float: nmero pequeo en coma flotante de precisin simple. Los valores vlidos van desde -3.402823466E+38 a 1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38. Real, Double: nmero en coma flotante de precisin doble. Los valores permitidos van desde 1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308 Decimal, Dec, Numeric: Nmero en coma flotante. El nmero se almacena como una cadena

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

12

Bases de Datos MySQL


2) Tipo Fecha:

Al almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es vlida o no. Simplemente comprueba que el mes est entre 0 y 12 y que el da est entre 0 y 31.
Date: Almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de: ao-mes-dia

DateTime: Combinacin de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de ao-mes-dia horas:minutos:segundos
TimeStamp: Combinacin de fecha y hora. El rango va desde el 1 de enero de 1970 al ao 2037. Time: Almacena la hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS' Year: almacena un ao. El rango de valores permitidos va desde el ao 1901 al ao 2155. El campo puede tener tamao dos o tamao 4 dependiendo de si queremos almacenar el ao con dos o cuatro dgitos. DPOM - Bases de datos MySQL. 13
Prof. Eugenio Tisselli.

Bases de Datos MySQL


3) Tipos de Cadena de Caracteres:

Char(n): almacena una cadena de longitud fija. La cadena podr contener desde 0 a 255 caracteres.
VarChar(n): almacena una cadena de longitud variable. La cadena podr contener desde 0 a 255 caracteres. Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los de tipo Text y los de tipo BLOB (Binary large Object). La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo Text se ordena sin tener en cuenta las Maysculas y las minsculas, el tipo BLOB se ordena tenindolas en cuenta. Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros. TinyText y TinyBlob: Columna con una longitud mxima de 255 caracteres. Blob y Text: un texto con un mximo de 65535 caracteres. MediumBlob y MediumText: un texto con un mximo de 16.777.215 caracteres. LongBlob y LongText: un texto con un mximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicacin en Internet, los paquetes pueden tener un mximo de 16 Mb. Enum: campo que puede tener un nico valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos

Set: un campo que puede contener ninguno, uno varios valores de una lista. La lista puede tener un DPOM - Bases de datos MySQL. 14 mximo de 64 valores. Prof. Eugenio Tisselli.

Bases de Datos MySQL


Ejercicio: Insertar registros en la nueva tabla alumnos. Insertar al menos 4 registros de este tipo:

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

15

Bases de Datos MySQL

El lenguaje standard para los sistemas de bases de datos relacionales se llama SQL.

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

16

Bases de Datos MySQL


Componentes del lenguaje SQL: * DML (Data Manipulation Language) Manipulacin de los datos Seleccionar / Aadir / Modificar / Borrar * DDL (Data Definition Language) Creacin de objetos de la BD Creacin de tablas, ...

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

17

Bases de Datos MySQL


DML = Data Manipulation Language

(Manipulacin de los Datos)


* Select Permite hacer consultas en la BD, obteniendo una nueva tabla con los resultados de la consulta * Insert Permite aadir registros en la BD (filas de una tabla) * Update Permite modificar registros en la BD (filas de una tabla) * Delete Permite borrar registros en la BD (filas de una tabla)
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 18

Bases de Datos MySQL


Consulta de datos: SELECT

Notacin:
SELECT <nombre_cols> FROM <nombre_tablas>; Ejemplo sobre la tabla alumnos: empleados (clave_alumno, nombre, edad, curso_actual)

SELECT nombre, edad FROM alumnos;

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

19

Bases de Datos MySQL


Para mostrar todos los campos (columnas) de la tabla alumnos: SELECT * FROM empleados; Para evitar mostrar filas duplicadas:

SELECT DISTINCT nombre FROM alumnos;


DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 20

Bases de Datos MySQL


Filtros (WHERE). Sirven para aplicar condiciones (o restricciones) en la seleccin de datos. Notacin: SELECT <nombre_cols>

FROM <nombre_tablas>
WHERE <condiciones_booleanas>; Ejemplo: SELECT nombre, curso_actual FROM alumnos WHERE edad = 10;
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 21

Bases de Datos MySQL


Operadores de comparacin aplicables en la clusula WHERE:

=
> < >=

<=
<> Operadores lgicos aplicables en la clusula WHERE: AND / OR / NOT Otros predicados aplicables en la clusula WHERE: <atributo> BETWEEN <limit_1>AND <limit_2> {Rango de valores} <atributo> LIKE <expr> {cadena de caracteres } Comodines: %, _ <atributo> IS [NOT] NULL {consultar si el atributo tiene valor o no}
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 22

Bases de Datos MySQL


Ejemplos:

AND:
SELECT nombre FROM alumnos WHERE curso_actual = 3 AND edad >= 10;

BETWEEN:
SELECT * FROM alumnos WHERE edad BETWEEN 8 AND 12; LIKE: SELECT * FROM alumnos WHERE nombre LIKE "M%" AND curso_actual = 3;
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 23

Bases de Datos MySQL


Ejercicios:
1. Obtener el nombre de todos los alumnos que actualmente estn cursando cuarto ao. 2. Obtener todos los datos de los alumnos cuya edad sea menor o igual que diez aos, o que estn en un curso anterior al tercero.
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 24

Bases de Datos MySQL


Ordenacin de los datos presentados (ORDER BY)

Notacin:
SELECT <nombre_cols> FROM <nombre_tablas> [ WHERE <condiciones_booleanas> ] ORDER BY <atributo_1>, ..., <atributo_N>; Ejemplo:

SELECT nombre, edad


FROM alumnos ORDER BY edad DESC; {por defecto es ASC}
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 25

Bases de Datos MySQL


Funciones de agregacin

COUNT(<fila>) {devuelve el total de filas seleccionadas}


SUM(<columna>) {suma los valores de una columna} MIN(<columna>) {devuelve valor mnimo columna} MAX(<columna>) {devuelve valor mximo columna} AVG(<columna>) {devuelve la mediana de la columna} ... Ejemplos:

SELECT COUNT(*)
FROM alumnos;

SELECT AVG(edad)
FROM alumnos WHERE curso_actual = 3;
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 26

Bases de Datos MySQL


Ejercicios:
3. Obtener la edad del mayor de los alumnos. 4. Obtener el nmero de alumnos cuya edad sea 11 aos.

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

27

Bases de Datos MySQL


Ejercicios:
5. Crear el resto de tablas: profesores, listas, aulas, asignaturas, horarios. OJO: la tabla listas tiene los siguientes campos: clave_alumno, clave_profesor. Ambos campos forman la clave de la tabla.

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

28

Bases de Datos MySQL

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

29

Bases de Datos MySQL


Ejercicios extra:
1. Crear y ejecutar el comando SELECT para obtener los nombres (ordenados alfabticamente) de los alumnos que tengan 10 aos y estn en el tercer curso.

2. Crear y ejecutar el comando SELECT para obtener el nombre y curso actual de los alumnos cuya edad est entre 11 y 12. 3. Obtener el nmero de alumnos cuya edad sean 10 aos.

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

30

Bases de Datos MySQL


Relaciones entre tablas: Recordemos que un aula puede tener varias asignaturas, segn nuestro modelo

Por lo tanto, la relacin entre las tablas est dada por la relacin entre sus campos

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

31

Bases de Datos MySQL

Aulas (clave_aula, nombre ) Asignaturas (clave_asignatura, clave_aula ) En la tabla Asignaturas, clave_aula hace referencia a la clave del mismo nombre en la tabla Aulas.
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 32

Bases de Datos MySQL


Alumnos (clave_alumno, nombre ) Listas (clave_alumno, clave_profesor) Profesores (clave_profesor, nombre )

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

33

Bases de Datos MySQL


Consultas en ms de una tabla

Notacin:
SELECT <nom_cols> FROM <nom_tabla>, <nom_tabla>, ... , <nom_tabla> [ WHERE <condiciones_booleanas> ] Ejemplo: SELECT asignaturas.nombre, aulas.nombre

FROM asignaturas, aulas


WHERE aulas.clave_aula = asignaturas.clave_aula;

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

34

Bases de Datos MySQL


Ejemplo 1. Nombres de las aulas donde se hace la asignatura de Historia:
SELECT aulas.nombre FROM aulas, asignaturas WHERE asignaturas.nombre = 'Historia' AND aulas.clave_aula = asignaturas.clave_aula

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

35

Bases de Datos MySQL


Ejemplo 2. Horarios y dias en los que se imparte la asignatura de Historia:

SELECT horarios.hora_inicio, horarios.hora_fin, horarios.dia FROM horarios, asignaturas WHERE asignaturas.nombre = 'Historia' AND horarios.clave_asignatura = asignaturas.clave_asignatura ORDER BY horarios.dia, horarios.hora_inicio

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

36

Bases de Datos MySQL


Ejemplo 3. Asignaturas que comienzan entre 8:00 y 10:00: SELECT asignaturas.nombre, horarios.hora_inicio, horarios.hora_fin, horarios.dia FROM asignaturas, horarios WHERE asignaturas.clave_asignatura = horarios.clave_asignatura AND horarios.hora_inicio BETWEEN '08:00:00' AND '10:00:00' ORDER BY horarios.dia, horarios.hora_inicio, asignaturas.nombre
DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli. 37

Bases de Datos MySQL


Ejemplo 4. Asignaturas que comienzan entre 8 y 10 el dia lunes: SELECT asignaturas.nombre, horarios.hora_inicio, horarios.hora_fin, horarios.dia FROM asignaturas, horarios WHERE asignaturas.clave_asignatura = horarios.clave_asignatura AND horarios.hora_inicio BETWEEN '08:00:00' AND '10:00:00' AND horarios.dia = 'lunes' ORDER BY horarios.dia, horarios.hora_inicio, asignaturas.nombre DPOM - Bases de datos MySQL. 38
Prof. Eugenio Tisselli.

Bases de Datos MySQL


Ejemplo 5. Alumnos cuyo profesor es 'Roberto Juarez': SELECT DISTINCT alumnos.nombre FROM alumnos, profesores, listas WHERE profesores.nombre = 'Roberto Juarez' AND listas.clave_profesor = profesores.clave_profesor AND alumnos.clave_alumno = listas.clave_alumno ORDER BY alumnos.nombre

DPOM - Bases de datos MySQL. Prof. Eugenio Tisselli.

39

Vous aimerez peut-être aussi