39
DPOM - Bases de datos MyS QL. Prof. Eugenio Tissell i. 1 Bases de Datos MySQL Tablas y consultas.

Bases de datos my sql 2

Embed Size (px)

Citation preview

Page 1: Bases de datos my sql 2

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

1

Bases de Datos MySQL

Tablas y consultas.

Page 2: Bases de datos my sql 2

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

2

Bases de Datos MySQL

Recordemos el modelo

Entidad – Relación de una escuela...

Page 3: Bases de datos my sql 2

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

3

Bases de Datos MySQL

Page 4: Bases de datos my sql 2

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

4

Bases de Datos MySQL

Propiedades de las entidades.

Page 5: Bases de datos my sql 2

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

5

Bases de Datos MySQL

La entidad “alumnos” se convierte en la tabla:

Entidad TablaPropiedad Columna

Cada fila representa un Registro.La clave puede estar formada por una o mas columnas

Page 6: Bases de datos my sql 2

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

6

Bases de Datos MySQL

Para crear la base de datos “escuela” utilizaremos el Sistema

de Gestión de Bases de Datos MySQL

Page 7: Bases de datos my sql 2

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

7

Bases de Datos MySQL

Ventajas de MySQL:

* Robusto

* Código abierto

* Forma parte de LAMP

Page 8: Bases de datos my sql 2

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

8

Bases de Datos MySQL

Existe una herramienta, llamada phpMyAdmin, que permite administrar las bases de datos MySQL mediante una interfaz sencilla creada en PHP...

Page 9: Bases de datos my sql 2

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

9

Bases de Datos MySQLEjercicio:

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

Page 10: Bases de datos my sql 2

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

10

Bases de Datos MySQLCreació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.

Page 11: Bases de datos my sql 2

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

11

Bases de Datos MySQLTipos 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

Page 12: Bases de datos my sql 2

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

12

Bases de Datos MySQL1) 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

Page 13: Bases de datos my sql 2

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

13

Bases de Datos MySQL2) 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.

Page 14: Bases de datos my sql 2

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

14

Bases de Datos MySQL3) 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.

Page 15: Bases de datos my sql 2

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

15

Bases de Datos MySQLEjercicio:

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

Page 16: Bases de datos my sql 2

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

16

Bases de Datos MySQL

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

Page 17: Bases de datos my sql 2

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

17

Bases de Datos MySQLComponentes 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, ...

Page 18: Bases de datos my sql 2

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

18

Bases de Datos MySQLDML = 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)

Page 19: Bases de datos my sql 2

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

19

Bases de Datos MySQLConsulta 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;

Page 20: Bases de datos my sql 2

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

20

Bases de Datos MySQLPara mostrar todos los campos (columnas) de la tabla alumnos:

SELECT *

FROM empleados;

Para evitar mostrar filas duplicadas:

SELECT DISTINCT nombre

FROM alumnos;

Page 21: Bases de datos my sql 2

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

21

Bases de Datos MySQLFiltros (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;

Page 22: Bases de datos my sql 2

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

22

Bases de Datos MySQLOperadores 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}

Page 23: Bases de datos my sql 2

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

23

Bases de Datos MySQLEjemplos:

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;

Page 24: Bases de datos my sql 2

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

24

Bases de Datos MySQLEjercicios:

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.

Page 25: Bases de datos my sql 2

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

25

Bases de Datos MySQLOrdenació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}

Page 26: Bases de datos my sql 2

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

26

Bases de Datos MySQLFunciones 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;

Page 27: Bases de datos my sql 2

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

27

Bases de Datos MySQLEjercicios:

3. Obtener la edad del mayor de los alumnos.4. Obtener el número de alumnos cuya edad sea 11 años.

Page 28: Bases de datos my sql 2

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

28

Bases de Datos MySQLEjercicios:

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.

Page 29: Bases de datos my sql 2

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

29

Bases de Datos MySQL

Page 30: Bases de datos my sql 2

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

30

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.

Page 31: Bases de datos my sql 2

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

31

Bases de Datos MySQLRelaciones 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…

Page 32: Bases de datos my sql 2

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

32

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”.

Page 33: Bases de datos my sql 2

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

33

Bases de Datos MySQL

Alumnos (clave_alumno, nombre … )

Listas (clave_alumno, clave_profesor)

Profesores (clave_profesor, nombre … )

Page 34: Bases de datos my sql 2

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

34

Bases de Datos MySQLConsultas 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;

Page 35: Bases de datos my sql 2

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

35

Bases de Datos MySQLEjemplo 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

Page 36: Bases de datos my sql 2

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

36

Bases de Datos MySQLEjemplo 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

Page 37: Bases de datos my sql 2

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

37

Bases de Datos MySQLEjemplo 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

Page 38: Bases de datos my sql 2

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

38

Bases de Datos MySQLEjemplo 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

Page 39: Bases de datos my sql 2

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

39

Bases de Datos MySQLEjemplo 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