Bases de Datos (I) Computación Web (Curso 2015/2016) Jesús Arias Fisteus // jaf@it.uc3m.es Bases de Datos (I) p. 1
Bases de datos relacionales Colección de datos almacenados en una o más tablas. Las tablas constan de filas y columnas. Las tablas pueden estar relacionadas entre sí. Bases de Datos (I) p. 2
Ejemplo CustomerID FirstName LastName 1 William Smith 2 Natalie Lopez 3 Brenda Harper OrderID CustomerID OrderAmount 1 1 50.00 2 1 60.00 3 2 33.50 4 3 20.00 Bases de Datos (I) p. 3
Sistema gestor de bases de datos relacionales Programa que da soporte al uso de bases de datos relacionales. Ejemplos: Oracle Database, Microsoft SQL Server, IBM DB2, IBM Informix, MySQL, PostgreSQL, SQLite, Derby, etc. Bases de Datos (I) p. 4
El lenguaje SQL SQL es un lenguaje estándar para utilizar y mantener bases de datos relacionales. Utilizado en los principales gestores de bases de datos relacionales: Aunque hay pequeñas variaciones dependiendo del gestor. Bases de Datos (I) p. 5
El lenguaje SQL Bases de Datos (I) p. 6
Tipos de datos Las columnas tienen un tipo de datos asociado. Principales grupos de tipos de datos: Numéricos. Cadenas. Fechas / horas. Los tipos de datos concretos varían según el gestor de bases de datos. Valor especial NULL: ausencia de valor. Bases de Datos (I) p. 7
Tipos de datos en MySQL Numéricos: INTEGER, SMALLINT, BIGINT, BIT, DECIMAL, NUMERIC, FLOAT, DOUBLE, etc. Cadenas: CHAR, VARCHAR, TEXT, BINARY, VARBINARY, BLOB, ENUM, SET. Fechas / horas: DATE, DATETIME, TIMESTAMP, TIME, YEAR. Bases de Datos (I) p. 8
Recuperación de datos Sentencia SELECT. 1 SELECT <columnas> 2 FROM <tabla> 3 WHERE <condición>; Bases de Datos (I) p. 9
Ejemplos 1 SELECT * 2 FROM Customers; 3 4 SELECT FirstName, LastName 5 FROM Customers; Bases de Datos (I) p. 10
Ejemplos 1 SELECT FirstName, LastName 2 FROM Customers 3 WHERE LastName = ³ Harper ³; 4 5 SELECT * 6 FROM Orders 7 WHERE CustomerID = 1; Bases de Datos (I) p. 11
Lógica Booleana Operadores Booleanos: AND, OR, NOT. Expresiones de comparación: =, <>, <, >, <=, >=, BETWEEN. Otros operadores: IN, IS NULL, IS NOT NULL. Bases de Datos (I) p. 12
Ejemplos 1 SELECT * 2 FROM Orders 3 WHERE OrderAmount >= 50.0; 4 5 SELECT * 6 FROM Orders 7 WHERE OrderAmount >= 50.0 AND CustomerID = 1; 8 9 SELECT * 10 FROM Orders 11 WHERE OrderAmount >= 50.0 12 OR (OrderAmount >= 20.0 AND CustomerID = 1); Bases de Datos (I) p. 13
Ejemplos 1 SELECT * 2 FROM Orders 3 WHERE OrderAmount BETWEEN 50.00 AND 70.00; 4 5 SELECT * 6 FROM Customers 7 WHERE State IN ( ³IL ³, ³NY ³); Bases de Datos (I) p. 14
Ordenación y restricción del número de resultados Ordenación: ORDER BY <Columnas>. Sentido de ordenación: ASC (por defecto), DESC. Restricción del número de resultados: Palabra clave LIMIT. Palabra clave OFFSET para seleccionar el rango. Bases de Datos (I) p. 15
Ejemplos 1 SELECT * 2 FROM Orders 3 WHERE OrderAmount > 10.0 4 ORDER BY OrderAmount; 5 6 SELECT * 7 FROM Orders 8 WHERE OrderAmount > 10.0 9 ORDER BY OrderAmount DESC; 10 11 SELECT * 12 FROM Customers 13 ORDER BY LastName, Name; Bases de Datos (I) p. 16
Ejemplos 1 SELECT * 2 FROM Orders 3 WHERE OrderAmount > 10.0 4 ORDER BY OrderAmount DESC 5 LIMIT 10; 6 7 SELECT * 8 FROM Customers 9 ORDER BY LastName, Name 10 LIMIT 10 OFFSET 20; Bases de Datos (I) p. 17
Agregación de datos: datos únicos DISTINCT permite eliminar resultados duplicados. 1 SELECT 2 DISTINCT 3 Artist 4 FROM SongTitles; Bases de Datos (I) p. 18
Agregación de datos: sumas, medias, etc. Cómputo sobre las filas obtenidas: SUM, AVG, MIN, MAX. 1 SELECT 2 SUM(Fee) AS ³Total Gym Fees ³ 3 FROM Fees 4 WHERE FeeType = ³Gym ³; Bases de Datos (I) p. 19
Cuenta del número de resultados 1 SELECT COUNT permite contar el número de resultados de la consulta. 2 COUNT(*) AS ³Count of Homework Rows ³ 3 FROM Grades 4 WHERE GradeType = ³ Homework ³; 5 6 SELECT 7 COUNT(DISTINCT FeeType) AS ³Number of Fee Types ³ 8 FROM Fees; Bases de Datos (I) p. 20
Agregación de datos: agrupación GROUP BY permite hacer cómputos (suma, media, etc.) sobre grupos de resultados. 1 SELECT 2 GradeType AS ³ Grade Type ³, 3 AVG(Grade) AS ³ Average Grade ³ 4 FROM Grades 5 GROUP BY GradeType; 6 7 SELECT 8 GradeType AS ³ Grade Type ³, 9 Student AS ³Student ³, 10 AVG(Grade) ³ AS Average ³ Grade 11 FROM Grades 12 GROUP BY GradeType, Student 13 ORDER BY GradeType, Student; Bases de Datos (I) p. 21
Agregación de datos: filtrado de grupos HAVING permite seleccionar grupos que cumplan ciertos requisitos. 1 SELECT 2 Student AS ³Student ³, 3 AVG(Grade) AS ³Average Quiz Grade ³ 4 FROM Grades 5 WHERE GradeType ³ = ³ Quiz 6 GROUP BY Student 7 HAVING AVG(Grade) >= 70 8 ORDER BY Student; Bases de Datos (I) p. 22
Claves primarias y foráneas Claves primarias: identifican unívocamente una fila de una tabla. Garantizan que sólo una fila de la tabla pueda tener una clave primaria dada. Pueden estar formadas por una o más columnas. Claves foráneas: referencias a la clave primaria de filas de otras tablas. En combinación con las claves primarias, permiten relacionar datos de distintas tablas entre sí. Bases de Datos (I) p. 23
Ejemplos CustomerID FirstName LastName 1 William Smith 2 Natalie Lopez 3 Brenda Harper 4 Adam Petrie OrderID CustomerID Quantity OrderAmount 1 1 4 50.00 2 2 10 60.00 3 2 12 33.50 4 3 5 20.00 Bases de Datos (I) p. 24
Consultas en múltiples tablas (INNER JOIN) Con INNER JOIN se puede realizar consultas sobre datos de varias tablas. 1 SELECT * 2 FROM Customers 3 INNER JOIN Orders 4 ON Customers.CustomerID = Orders.CustomerID; Bases de Datos (I) p. 25
Ejemplo 1 SELECT * 2 FROM Customers 3 INNER JOIN Orders 4 ON Customers.CustomerID = Orders.CustomerID; Customer First Last Order Customer Quantity OrderAmount ID Name Name ID ID 1 William Smith 1 1 4 50.00 2 Natalie Lopez 2 2 10 60.00 2 Natalie Lopez 3 2 12 33.50 3 Brenda Harper 4 3 5 20.00 Bases de Datos (I) p. 26
Consulta equivalente a INNER JOIN Las siguientes dos consultas son equivalentes: 1 SELECT * 2 FROM Customers 3 INNER JOIN Orders 4 ON Customers.CustomerID = Orders.CustomerID; 5 6 SELECT * 7 FROM Customers, Orders 8 WHERE Customers.CustomerID = Orders.CustomerID; Bases de Datos (I) p. 27
Ejemplos 1 SELECT FirstName, LastName, Quantity, PricePerItem 2 FROM Customers 3 INNER JOIN Orders 4 ON Customers.CustomerID = Orders.CustomerID; First Last Quantity Price Name Name PerItem William Smith 4 2.50 Natalie Lopez 10 1.25 Natalie Lopez 12 1.50 Brenda Harper 5 4.00 Bases de Datos (I) p. 28
Alias de nombres 1 SELECT Customers.LastName 2 FROM Customers 3 INNER JOIN Orders 4 ON Customers.CustomerID = Orders.CustomerID; 5 6 SELECT C.LastName AS ³Last ³ Name 7 FROM Customers AS C 8 INNER JOIN Orders AS O 9 ON C.CustomerID = O.CustomerID; Bases de Datos (I) p. 29
Columnas calculadas 1 SELECT 2 LastName AS ³ Last Name ³, 3 PricePerItem * Quantity AS ³Total Price ³ 4 FROM Customers 5 INNER JOIN Orders 6 ON Orders.CustomerID = Customers.CustomerID; Last Name Total Price Smith 10 Lopez 12.5 Lopez 18 Harper 20 Bases de Datos (I) p. 30
Referencias The Language of SQL, Larry Rockoff. Course Technology PTR (2010). Accesible en Safari: http://proquest. safaribooksonline.com/book/databases/sql/9781435457515 Capítulos: 1, 2, 5, 7, 8, 10, 11. Gran parte de los ejemplos de estas transparencias proceden de este libro. Bases de Datos (I) p. 31