Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Actividad 2
Práctica SQL: bases de datos relacionales
Objetivo
En este ejercicio se trabajará con una base de datos sobre países de la Unión
Europea. En la base de datos creada, cargue los archivos tablas.sql (Script
para creación de tablas) y datos.sql (Script de cargue de datos). Para ello,
utilice la herramienta de gestión de la base de datos, phpMyAdmin, por medio
de la opción Importar.
Pregunta:
>use u_europea;
>source ../tablas.sql;
>source ../datos.sql;
Usuario Permiso
SELECT INSERT UPDATE DELETE CREATE DROP
admon X X X X X X
consultas X
auditoria X
destructor X X X
comprobado X X
r
Sentencias SQL para crear los usuarios anteriores con los permisos descritos
>flush privileges;
Usuario: user1
Permisos: Permite crear tablas en la base de datos u_europea (la cual debe crear, con la tabla
personas cuyos campos serán idpersona, nombre, id_pais y domicilio y la tabla estados con los
campos id_estado, id_pais y nombre, permite solo realizar consultas a la tabla personas.
PRIMARY KEY(idPersona)
);
PRIMARY KEY(idEstado)
);
grant select on u_europea . Personas to 'user1'@'localhost';
Usuario: user2
Permisos: Permite borrar tablas en la base de datos u_europea, permite solo realizar
actualizaciones a la tabla ciudades e insertar datos en la tabla ciudades
Usuario: user3
En la tabla de poblaciones, las filas con los datos de 2010 a 2012, ambos
inclusive.
> SELECT * FROM u_europea . poblaciones where anyo between '2010' and '2012'
order by anyo;
Consultas agregadas
+------+----------------+----------------+----------------+
| pais | MAX(poblacion) | AVG(poblacion) | MIN(poblacion) |
+------+----------------+----------------+----------------+
| 1 | 82500849 | 81540882.9167 | 80222065 |
| 2 | 8690076 | 8395137.2500 | 8201359 |
| 3 | 11311117 | 10898998.3333 | 10445852 |
| 4 | 7688573 | 7406697.5000 | 7153784 |
| 5 | 865878 | 812363.8333 | 733067 |
| 6 | 4313530 | 4279355.2500 | 4190669 |
(...)
1. +------------------+------------+
2. | nombre | nombre |
3. +------------------+------------+
4. | Alemania | Berlín |
5. | Austria | Viena |
6. | Bélgica | Bruselas |
7. | Bulgaria | Sofía |
8. | Chipre | Nicosia |
9. (...)
1. +------------------+------------+
2. | País | Capital |
3. +------------------+------------+
4. | Alemania | Berlín |
5. | Austria | Viena |
6. | Bélgica | Bruselas |
7. | Bulgaria | Sofía |
8. | Chipre | Nicosia |
9. (...)
> SELECT * from paises as País inner join capitales on paises.capital =
capitales.id as Capital;
1. +------------+
2. | nombre |
3. +------------+
4. | Alemania |
5. | Austria |
6. | Bélgica |
7. | Luxemburgo |
8. +------------+
>
1. +------------+-----------+
2. | nombre | poblacion |
3. +------------+-----------+
4. | Alemania | 82175684 |
5. | Austria | 8690076 |
6. | Bélgica | 11311117 |
7. | Luxemburgo | 576249 |
8. +------------+-----------+
9. 4 rows in set (0.00 sec)
>
>
Realice una consulta que devuelva filas país-idioma. Para los países con varios
idiomas deben aparecer varias filas. Para los países nuevos, cuyo idioma no
consta en la base de datos, debe aparecer una fila con el país y un NULL en la
posición del idioma. Utiliza para ello LEFT JOIN.
+------------------+---------------+
| País | idioma |
+------------------+---------------+
| Alemania | Alemán |
| Austria | Alemán |
| Bulgaria | Búlgaro |
(...)
| Islandia | NULL |
| Noruega | NULL |
| Turquía | NULL |
| Suiza | NULL |
+------------------+---------------+
>
Los países en que haya caído la población de un año al siguiente, y los años en
que haya ocurrido. Vuelca la salida en el formato siguiente:
+------+------+-----------+------+-----------+
| pais | anyo | poblacion | anyo | poblacion |
+------+------+-----------+------+-----------+
| 1 | 2005 | 82500849 | 2006 | 82437995 |
| 1 | 2006 | 82437995 | 2007 | 82314906 |
| 1 | 2007 | 82314906 | 2008 | 82217837 |
| 1 | 2008 | 82217837 | 2009 | 82002356 |
| 1 | 2009 | 82002356 | 2010 | 81802257 |
| 1 | 2010 | 81802257 | 2011 | 80222065 |
| 4 | 2005 | 7688573 | 2006 | 7629371 |
| 4 | 2006 | 7629371 | 2007 | 7572673 |
(...)
>
Lo mismo que en el apartado anterior, pero con el nombre de cada país
en vez de su identificador:
+------------------+------+-----------+------+-----------+
| nombre | anyo | poblacion | anyo | poblacion |
+------------------+------+-----------+------+-----------+
| Alemania | 2005 | 82500849 | 2006 | 82437995 |
| Alemania | 2006 | 82437995 | 2007 | 82314906 |
| Alemania | 2007 | 82314906 | 2008 | 82217837 |
| Alemania | 2008 | 82217837 | 2009 | 82002356 |
| Alemania | 2009 | 82002356 | 2010 | 81802257 |
| Alemania | 2010 | 81802257 | 2011 | 80222065 |
| Bulgaria | 2005 | 7688573 | 2006 | 7629371 |
| Bulgaria | 2006 | 7629371 | 2007 | 7572673 |
(...)
>
+------------+------+-----------+------+-----------+
| nombre | anyo | poblacion | anyo | poblacion |
+------------+------+-----------+------+-----------+
| Alemania | 2015 | 81197537 | 2016 | 82175684 |
| Austria | 2015 | 8576261 | 2016 | 8690076 |
| Bélgica | 2010 | 10839905 | 2011 | 11000638 |
| Chipre | 2005 | 733067 | 2006 | 744013 |
| Chipre | 2006 | 744013 | 2007 | 757916 |
| Chipre | 2007 | 757916 | 2008 | 776333 |
| Chipre | 2008 | 776333 | 2009 | 796930 |
| Chipre | 2009 | 796930 | 2010 | 819140 |
| Chipre | 2010 | 819140 | 2011 | 839751 |
| Chipre | 2011 | 839751 | 2012 | 862011 |
| Eslovenia | 2008 | 2010269 | 2009 | 2032362 |
| España | 2005 | 43296338 | 2006 | 44009971 |
| España | 2006 | 44009971 | 2007 | 44784666 |
| España | 2007 | 44784666 | 2008 | 45668939 |
| España | 2008 | 45668939 | 2009 | 46239273 |
| Irlanda | 2005 | 4111672 | 2006 | 4208156 |
| Irlanda | 2006 | 4208156 | 2007 | 4340118 |
(...)
>
Creación de tablas
Accede a otra de las bases de datos de las que dispones. Para ello, puedes
ejecutar el comando "USE nombre_de_base_de_datos", o salir del terminal y
acceder cambiando el valor del parámetro "-D".
En esta base de datos, crea las tablas que necesites para representar los libros
en el catálogo de una librería. Crea las tablas como InnoDB. Para cada libro,
almacena el título, ISBN, editorial, año, precio en euros y autores (un libro
puede tener uno o más autores, por lo que es recomendable usar una tabla
aparte con autores y otra con relaciones autor-libro). Crea también una tabla
aparte que almacene las unidades que tiene la librería en existencias de cada
libro, y otra en que se almacenen las operaciones de venta (fecha y hora, libro
vendido, y número de unidades vendidas). Recuerda añadir campos de
identificador autoincrementales en las tablas en que lo creas conveniente).
Inserta unos cuantos datos de ejemplo y haz unas cuantas consultas para
comprobar que todo es correcto. Te resultará útil la función "NOW()" de
MySQL, que devuelve la fecha y hora actual. Puedes llamar a esta función
desde la posición de la consulta de inserción donde necesites establecer este
dato.
Vistas
Las vistas son como tablas virtuales que contienen los resultados de una
consulta, pero solo se guarda la consulta no los datos.
Para crear una vista utilizamos la sentencia CREATE VIEW, para modificarla
ALTER VIEW, para eliminarla DROP VIEW y para seleccionarla o mostrar los
datos se utiliza SELECT FROM como a una tabla.
>
2. CapitalPaisIdioma: con el nombre de cada país, su capital y su idioma:
>
>
Stored procedures – Procedimientos almacenados
Los procedimientos almacenados son un conjunto de instrucciones que se
guardan en el servidor para un posterior uso, ya que se ejecutarán
frecuentemente.
>
>
>
Triggers - Disparadores
Un Trigger es un programa almacenado creado para ejecutarse
automáticamente cuando ocurra un evento en la base de datos como INSERT,
UPDATE y/o DELETE.
>
>
>
Referencias