bases de datos my sql

39
Bases de Datos MySQL Bases de Datos MySQL Tablas y consultas. 1

Upload: arnulfo-gomez

Post on 20-Jun-2015

47.849 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

Tablas y consultas.

1

Page 2: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

Recordemos el modelo Entidad – Relación

Ejemplo Base De Datos Escuela

2

Page 3: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

3

Page 4: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

4

Propiedades de las entidades.

Page 5: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLLa 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

5

Page 6: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

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

de Gestión de Bases de Datos MySQL

6

Page 7: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

Ventajas de MySQL:

* Robusto

* Código abierto

* Forma parte de LAMP

7

Page 8: Bases De Datos My Sql

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

8

Page 9: Bases De Datos My Sql

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

9

Page 10: Bases De Datos My Sql

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

10

Page 11: Bases De Datos My Sql

Bases de Datos MySQLBases 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éricos2. Tipos de Fecha3. Tipos de Cadena de Caracteres

11

Page 12: Bases De Datos My Sql

Bases de Datos MySQLBases 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 255Bit ó Bool: un número entero que puede ser 0 ó 1SmallInt: 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.295BigInt: 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+308Decimal, Dec, Numeric: Número en coma flotante. El número se almacena como una cadena

12

Page 13: Bases De Datos My Sql

Bases de Datos MySQLBases 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-diaDateTime: 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:segundosTimeStamp: 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.

13

Page 14: Bases De Datos My Sql

Bases de Datos MySQLBases 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 distintosSet: un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.

14

Page 15: Bases De Datos My Sql

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

15

Page 16: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

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

16

Page 17: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLComponentes del lenguaje SQL:* DML (Data Manipulation Language)

Manipulación de los datosSeleccionar / Añadir / Modificar /

Borrar* DDL (Data Definition Language)

Creación de objetos de la BD Creación de tablas, ...

17

Page 18: Bases De Datos My Sql

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

18

Page 19: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLConsulta de datos: SELECTNotación:

SELECT <nombre_cols>FROM <nombre_tablas>;

Ejemplo sobre la tabla alumnos:empleados (clave_alumno, nombre, edad, curso_actual)

SELECT nombre, edadFROM alumnos;

19

Page 20: Bases De Datos My Sql

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

SELECT *FROM empleados;

Para evitar mostrar filas duplicadas:

SELECT DISTINCT nombreFROM alumnos;

20

Page 21: Bases De Datos My Sql

Bases de Datos MySQLBases 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_actualFROM alumnosWHERE edad = 10;

21

Page 22: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLOperadores de comparación aplicables en la cláusula WHERE:=><>=<=<>Operadores lógicos aplicables en la cláusula WHERE:AND / OR / NOTOtros 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}

22

Page 23: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLEjemplos:AND:SELECT nombreFROM alumnosWHERE curso_actual = 3 AND edad >= 10;BETWEEN:SELECT *FROM alumnosWHERE edad BETWEEN 8 AND 12;LIKE:SELECT *FROM alumnosWHERE nombre LIKE "M%" AND curso_actual = 3;

23

Page 24: Bases De Datos My Sql

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

24

Page 25: Bases De Datos My Sql

Bases de Datos MySQLBases 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, edadFROM alumnosORDER BY edad DESC; {por defecto es ASC}

25

Page 26: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLFunciones de agregaciónCOUNT(<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;

26

Page 27: Bases De Datos My Sql

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

27

Page 28: Bases De Datos My Sql

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

28

Page 29: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

29

Page 30: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

30

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

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

31

Page 32: Bases De Datos My Sql

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

Page 33: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQL

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

33

Page 34: Bases De Datos My Sql

Bases de Datos MySQLBases de Datos MySQLConsultas en más de una tablaNotación:SELECT <nom_cols>FROM <nom_tabla>, <nom_tabla>, ... , <nom_tabla>[ WHERE <condiciones_booleanas> ]Ejemplo:

SELECT asignaturas.nombre, aulas.nombreFROM asignaturas, aulasWHERE aulas.clave_aula = asignaturas.clave_aula;

34

Page 35: Bases De Datos My Sql

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

35

Page 36: Bases De Datos My Sql

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

36

Page 37: Bases De Datos My Sql

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

37

Page 38: Bases De Datos My Sql

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

38

Page 39: Bases De Datos My Sql

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

39