Вы находитесь на странице: 1из 39

Bases de Datos MySQL

Tablas y consultas.

Bases de Datos MySQL

Recordemos el modelo Entidad Relacin Ejemplo Base De Datos Escuela


2

Bases de Datos MySQL

Bases de Datos MySQL

Propiedades de las entidades.


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
5

Bases de Datos MySQL

Para crear la base de datos escuela utilizaremos el Sistema de Gestin de Bases de Datos MySQL

Bases de Datos MySQL


Ventajas de MySQL:

* Robusto
* Cdigo abierto * Forma parte de LAMP

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

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.

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.

Bases de Datos MySQL

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

11

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
12

Bases de Datos MySQL

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

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 mximo de 64 valores.

Bases de Datos MySQL

14

Bases de Datos MySQL


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

15

Bases de Datos MySQL

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

16

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

Bases de Datos MySQL

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)

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;

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;

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;

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}

22

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;

Bases de Datos MySQL

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.

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}

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(*) SELECT AVG(edad) FROM alumnos; FROM alumnos WHERE curso_actual = 3;

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.

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.

28

Bases de Datos MySQL

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.

30

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

Bases de Datos MySQL

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

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

Bases de Datos MySQL


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

33

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;

Bases de Datos MySQL

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

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

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

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
38

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

39

Вам также может понравиться