Está en la página 1de 39

Bases de Datos MySQL

Tablas y consultas.

DPOM - Bases de datos MySQL. 1


Prof. Eugenio Tisselli.
Bases de Datos MySQL

Recordemos el modelo
Entidad – Relación de una escuela...

DPOM - Bases de datos MySQL. 2


Prof. Eugenio Tisselli.
Bases de Datos MySQL

DPOM - Bases de datos MySQL. 3


Prof. Eugenio Tisselli.
Bases de Datos MySQL

Propiedades de las entidades.


DPOM - Bases de datos MySQL. 4
Prof. Eugenio Tisselli.
Bases de Datos MySQL
La entidad “alumnos” se convierte en la tabla:

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

Para crear la base de datos


“escuela” utilizaremos el Sistema
de Gestión de Bases de Datos
MySQL

DPOM - Bases de datos MySQL. 6


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Ventajas de MySQL:
* Robusto
* Código abierto
* Forma parte de LAMP

DPOM - Bases de datos MySQL. 7


Prof. Eugenio Tisselli.
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. 8


Prof. Eugenio Tisselli.
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. 9


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Creación 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 máxima del tipo de dato (especialmente para VARCHAR).
Attributes : UNSIGNED : Sólo 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 añadir una nueva fila.
Extra : AUTO_INCREMENT (normalmente se usa para generar, automáticamente,
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. 10


Prof. Eugenio Tisselli.
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 Numéricos
2. Tipos de Fecha
3. Tipos de Cadena de Caracteres

DPOM - Bases de datos MySQL. 11


Prof. Eugenio Tisselli.
Bases de Datos MySQL
1) Tipos numéricos:
Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los que incluyen valores decimales
(coma flotante) y los que no.
TinyInt: es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el
rango de valores es de 0 a 255
Bit ó Bool: un número entero que puede ser 0 ó 1
SmallInt: número 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: número 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: número 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: número 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: número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -
1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.
Real, Double: número en coma flotante de precisión 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: Número en coma flotante. El número se almacena como una cadena

DPOM - Bases de datos MySQL. 12


Prof. Eugenio Tisselli.
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 válida o no. Simplemente comprueba que el mes está entre 0 y 12
y que el día 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: año-mes-dia
DateTime: Combinación 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 año-mes-dia
horas:minutos:segundos
TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al
año 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 año. El rango de valores permitidos va desde el año 1901 al año 2155.
El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el
año con dos o cuatro dígitos. 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
Mayúsculas y las minúsculas, el tipo BLOB se ordena teniéndolas en cuenta.
Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.
TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres.
Blob y Text: un texto con un máximo de 65535 caracteres.
MediumBlob y MediumText: un texto con un máximo de 16.777.215 caracteres.
LongBlob y LongText: un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta
que debido a los protocolos de comunicación en Internet, los paquetes pueden tener un máximo 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
máximo de 64 valores. DPOM - Bases de datos MySQL. 14
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. 15


Prof. Eugenio Tisselli.
Bases de Datos MySQL

El lenguaje standard para los


sistemas de bases de datos
relacionales se llama SQL.

DPOM - Bases de datos MySQL. 16


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Componentes del lenguaje SQL:
* DML (Data Manipulation Language)
Manipulación de los datos
Seleccionar / Añadir / Modificar / Borrar
* DDL (Data Definition Language)
Creación de objetos de la BD
Creación de tablas, ...

DPOM - Bases de datos MySQL. 17


Prof. Eugenio Tisselli.
Bases de Datos MySQL
DML = Data Manipulation Language
(Manipulación de los Datos)
* Select
Permite hacer consultas en la BD, obteniendo una nueva “tabla” con los
resultados de la consulta
* Insert
Permite añadir 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. 18


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Consulta de datos: SELECT
Notación:
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. 19


Prof. Eugenio Tisselli.
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. 20


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Filtros (WHERE). Sirven para aplicar condiciones (o restricciones) en la
selección de datos.
Notación:
SELECT <nombre_cols>
FROM <nombre_tablas>
WHERE <condiciones_booleanas>;

• Ejemplo:
SELECT nombre, curso_actual
FROM alumnos
WHERE edad = 10;
DPOM - Bases de datos MySQL. 21
Prof. Eugenio Tisselli.
Bases de Datos MySQL
Operadores de comparación aplicables en la cláusula WHERE:
=
>
<
>=
<=
<>
Operadores lógicos aplicables en la cláusula WHERE:
AND / OR / NOT
Otros predicados aplicables en la cláusula 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. 22


Prof. Eugenio Tisselli.
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. 23


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Ejercicios:

1. Obtener el nombre de todos los alumnos


que actualmente estén cursando cuarto año.
2. Obtener todos los datos de los alumnos
cuya edad sea menor o igual que diez años,
o que estén en un curso anterior al tercero.

DPOM - Bases de datos MySQL. 24


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Ordenación de los datos presentados (ORDER BY)
Notación:
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. 25


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Funciones de agregación
COUNT(<fila>) {devuelve el total de filas seleccionadas}
SUM(<columna>) {suma los valores de una columna}
MIN(<columna>) {devuelve valor mínimo columna}
MAX(<columna>) {devuelve valor máximo columna}
AVG(<columna>) {devuelve la mediana de la columna}
...
• Ejemplos:
SELECT COUNT(*) SELECT AVG(edad)
FROM alumnos; FROM alumnos
WHERE curso_actual = 3;

DPOM - Bases de datos MySQL. 26


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Ejercicios:

3. Obtener la edad del mayor de los


alumnos.
4. Obtener el número de alumnos cuya edad
sea 11 años.

DPOM - Bases de datos MySQL. 27


Prof. Eugenio Tisselli.
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. 28


Prof. Eugenio Tisselli.
Bases de Datos MySQL

DPOM - Bases de datos MySQL. 29


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Ejercicios extra:
1. Crear y ejecutar el comando SELECT para obtener los
nombres (ordenados alfabéticamente) de los alumnos que
tengan 10 años y estén 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 número de alumnos cuya edad sean 10 años.

DPOM - Bases de datos MySQL. 30


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Relaciones entre tablas:
Recordemos que un aula puede tener varias
asignaturas, según nuestro modelo…

Por lo tanto, la relación entre las tablas está


dada por la relación entre sus campos…

DPOM - Bases de datos MySQL. 31


Prof. Eugenio Tisselli.
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. 32


Prof. Eugenio Tisselli.
Bases de Datos MySQL

Alumnos (clave_alumno, nombre … )


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

DPOM - Bases de datos MySQL. 33


Prof. Eugenio Tisselli.
Bases de Datos MySQL
Consultas en más de una tabla
Notación:
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. 34


Prof. Eugenio Tisselli.
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. 35


Prof. Eugenio Tisselli.
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. 36


Prof. Eugenio Tisselli.
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. 37


Prof. Eugenio Tisselli.
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. 39


Prof. Eugenio Tisselli.

También podría gustarte