10.07.2015 Views

Base de datos - Fernando Berzal

Base de datos - Fernando Berzal

Base de datos - Fernando Berzal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Álgebra RelacionalEl Álgebra <strong>de</strong>fine operaciones que nos permiten manipular relaciones (tablas).Las operaciones usan una o dos relaciones existentes para obtener una nueva.El resultado <strong>de</strong> una operación pue<strong>de</strong> utilizarse como entrada en otra operación.Trabajadoresid_trabajador nombre tarifa_hr tipo_<strong>de</strong>_oficio id_supv1235 F. Aguilera 12,50 Electricista 13111412 A. Calvo 13,75 Fontanero 15402920 N. Marín 10,00 Carpintero null3231 O. Pons 17,40 Albañil null1540 J.M. Medina 11,75 Fontanero null1311 J.C. Cubero 15,50 Electricista null3001 D. Sánchez 8,20 Albañil 3231Selección o restricciónSelección <strong>de</strong> las tuplas que satisfacen una condición.σ tipo_<strong>de</strong>_oficio=’Electricista’ (Trabajadores)id_trabajador nombre tarifa_hr tipo_<strong>de</strong>_oficio id_supv1235 F. Aguilera 12,50 Electricista 13111311 J.C. Cubero 15,50 Electricista nullσ tarifa_hr>12 (Trabajadores)id_trabajador nombre tarifa_hr tipo_<strong>de</strong>_oficio id_supv1235 F. Aguilera 12,50 Electricista 13113231 O. Pons 17,40 Albañil null1311 J.C. Cubero 15,50 Electricista null<strong>Base</strong>s <strong>de</strong> Datos 2 © <strong>Fernando</strong> <strong>Berzal</strong>


ProyecciónSelección <strong>de</strong> un subconjunto <strong>de</strong> atributos <strong>de</strong> una relaciónπ nombre, tarifa_hr, tipo <strong>de</strong> oficio (Trabajadores)nombre tarifa_hr tipo_<strong>de</strong>_oficioF. Aguilera 12,50 ElectricistaA. Calvo 13,75 FontaneroN. Marín 10,00 CarpinteroO. Pons 17,40 AlbañilJ.M. Medina 11,75 FontaneroJ.C. Cubero 15,50 ElectricistaD. Sánchez 8,20 AlbañilOperaciones sobre conjuntosComo una relación es un conjunto <strong>de</strong> tuplas,se pue<strong>de</strong>n utilizar las operaciones típicas sobre conjuntos:UniónIntersecciónDiferenciaProductoPermite combinar <strong>datos</strong> <strong>de</strong> dos relaciones.Permite i<strong>de</strong>ntificar las tuplas comunes a dos relaciones.I<strong>de</strong>ntifica las tuplas <strong>de</strong> una relación que no están en otra.Forma parejas <strong>de</strong> tuplas (producto cartesiano).X Yx 1 y 1x 2 y 1x 3 y 2A Ba 1 b 1a 4 b 2× =X Y A Bx 1 y 1 a 1 b 1x 1 y 1 a 4 b 2x 2 y 1 a 1 b 1x 2 y 1 a 4 b 2x 3 y 2 a 1 b 1x 3 y 2 a 4 b 2<strong>Base</strong>s <strong>de</strong> Datos 3 © <strong>Fernando</strong> <strong>Berzal</strong>


Reunión [natural]La operación <strong>de</strong> reunión se usa para conectar <strong>datos</strong> <strong>de</strong> distintas relaciones(siguiendo los enlaces que vienen <strong>de</strong>terminados por las claves externas)X Ax 1 a 1x 2 a 1x 3 a 2X Bx 1 b 1x 3 b 2=X A Bx 1 a 1 b 1x 3 a 2 b 2En realidad, la reunión se obtiene combinando el producto cartesiano con laselección y la proyección:Supongamos que queremos hacer la reunión natural <strong>de</strong> dos relaciones, A yB, las cuales tienen los atributos C 1 , ..., C n en común. La reunión <strong>de</strong> Acon B se obtiene realizando las siguientes operaciones:- Se hace el producto cartesiano <strong>de</strong> A y B.La relación resultante tendrá dos columnas para cada C 1 , ..., C n .- Se seleccionan aquellas tuplas <strong>de</strong>l producto cartesiano para las cualeslos valores <strong>de</strong> las columnas C 1 , ..., C n son iguales en A y en B.- Se proyecta una sola copia <strong>de</strong> las columnas C 1 , ..., C n junto a losatributos específicos <strong>de</strong> las relaciones A y B.<strong>Base</strong>s <strong>de</strong> Datos 4 © <strong>Fernando</strong> <strong>Berzal</strong>


<strong>Base</strong> <strong>de</strong> <strong>datos</strong>Biblioteca con los libros clasificados por temas(con los temas organizados jerárquicamente)Libro (ISBN, Título, Autor, Editorial, Año)Tema (ID, Descripción, SUPER)acerca_<strong>de</strong> (ISBN, ID)<strong>Base</strong>s <strong>de</strong> Datos 5 © <strong>Fernando</strong> <strong>Berzal</strong>


Consultas SQLSentencia SELECTConsultas simplesselect from select *from temas;select título, autorfrom libros;select editorialfrom libros<strong>Base</strong>s <strong>de</strong> Datos 6 © <strong>Fernando</strong> <strong>Berzal</strong>


Eliminación <strong>de</strong> duplicadosselect distinct …select distinct editorialfrom libros;Especificación <strong>de</strong> condicionesselect …from …where select título, autor, editorialfrom libroswhere editorial=”Prentice-Hall”;select título, autor, añofrom libroswhere año>2000;<strong>Base</strong>s <strong>de</strong> Datos 7 © <strong>Fernando</strong> <strong>Berzal</strong>


Operadores lógicosAND, OR, NOTselect título, autor, editorialfrom libroswhere editorial=”Prentice-Hall”or editorial=”Addison-Wesley”or editorial=”Pearson”;Valores nulosIS NULL / IS NOT NULLselect *from temaswhere super is not null;Expresiones aritméticasSe pue<strong>de</strong>n incluir expresiones aritméticas, tanto en la lista <strong>de</strong> atributos queacompaña a SELECT como en las condiciones especificadas en la cláusula WHERE.p.ej. select pedido, precio*unida<strong>de</strong>s, precio*unida<strong>de</strong>s*0.16from pedidoswhere precio*unida<strong>de</strong>s > 100;<strong>Base</strong>s <strong>de</strong> Datos 8 © <strong>Fernando</strong> <strong>Berzal</strong>


Producto cartesianoCuando incluimos varias tablas en la cláusula FROM- Para hacer referencia a los atributos, se utiliza la notación tabla.atributo- Cuando una tabla se repite, es necesario utilizar alias: … [AS] aliasselect *from temas t1, temas t2;ReuniónCombinamos producto cartesiano, selección y proyecciónselect *from temas as t1, temas as t2where t1.super=t2.id;select t1.ID as ID, t1.Descripción as Tema,t2.Descripción as Asignaturafrom temas as t1, temas as t2where t1.super=t2.id;<strong>Base</strong>s <strong>de</strong> Datos 9 © <strong>Fernando</strong> <strong>Berzal</strong>


Or<strong>de</strong>n <strong>de</strong> presentación <strong>de</strong> los <strong>datos</strong>- Claúsula ORDER BY- Or<strong>de</strong>n ascen<strong>de</strong>nte (ASC, por <strong>de</strong>fecto) y <strong>de</strong>scen<strong>de</strong>nte (DESC)select autor,título,añofrom librosor<strong>de</strong>r by autorselect año, título, autorfrom libroswhere título like "* bases <strong>de</strong> <strong>datos</strong>"or<strong>de</strong>r by año, títuloselect año, título, autorfrom libroswhere título like "* bases <strong>de</strong> <strong>datos</strong>"or<strong>de</strong>r by año <strong>de</strong>sc, título<strong>Base</strong>s <strong>de</strong> Datos 11 © <strong>Fernando</strong> <strong>Berzal</strong>


Funciones <strong>de</strong> agregaciónResumen <strong>de</strong> los <strong>datos</strong> almacenados en la base <strong>de</strong> <strong>datos</strong>p.ej. Número <strong>de</strong> libros editados en España:select count(*) as “Libros editados en España”from libroswhere libros.ISBN like "84*";p.ej. Número <strong>de</strong> libros por temasselect tema, count(*) AS Librosfrom acerca_<strong>de</strong>group by temaselect temas.<strong>de</strong>scripción, count(*) AS Librosfrom acerca_<strong>de</strong>,temaswhere acerca_<strong>de</strong>.tema = temas.idgroup by temas.<strong>de</strong>scripción<strong>Base</strong>s <strong>de</strong> Datos 12 © <strong>Fernando</strong> <strong>Berzal</strong>


Otras consultas <strong>de</strong> ejemploLibros <strong>de</strong> bases <strong>de</strong> <strong>datos</strong>select libros.título, libros.autorfrom libros, acerca_<strong>de</strong>, temaswhere libros.isbn = acerca_<strong>de</strong>.isbnand acerca_<strong>de</strong>.tema = temas.idand temas.<strong>de</strong>scripción = "<strong>Base</strong>s <strong>de</strong> <strong>datos</strong>"or<strong>de</strong>r by libros.títuloListado <strong>de</strong> libros por temasselect temas.<strong>de</strong>scripción, libros.título, libros.autorfrom libros,acerca_<strong>de</strong>,temaswhere libros.isbn = acerca_<strong>de</strong>.isbnand acerca_<strong>de</strong>.tema = temas.idor<strong>de</strong>r by temas.<strong>de</strong>scripción, libros.título<strong>Base</strong>s <strong>de</strong> Datos 13 © <strong>Fernando</strong> <strong>Berzal</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!