Universidad Católica del Maule Facultad de Ciencias de la Ingeniería Escuela de Ingeniería Civil Informática Tarea 1 Ba
Views 96 Downloads 0 File size 548KB
Universidad Católica del Maule Facultad de Ciencias de la Ingeniería Escuela de Ingeniería Civil Informática
Tarea 1 Base de Datos ‘Consultas’
Alumno: Miguel Ortega Urrutia Profesora: Dra. Angélica Urrutia Fecha: 11 de Septiembre de 2014
Script Base de Datos DROP TABLE Libros_Pedidos; DROP TABLE Proveedores; DROP TABLE Usuarios; CREATE TABLE Usuarios( ID_Lector NUMBER NOT NULL, Apellido VARCHAR(20), Nombre VARCHAR(20), Telefono NUMBER, CONSTRAINT PK_USUARIO PRIMARY KEY(ID_Lector) ); CREATE TABLE Proveedores( NIF NUMBER NOT NULL, Empresa VARCHAR(30), CONSTRAINT PK_PROVEEDORES PRIMARY KEY(NIF) ); CREATE TABLE Libros_Pedidos( ID_Libro NUMBER NOT NULL, Titulo VARCHAR(30), Autor VARCHAR(30), ISBN NUMBER, SolicitadoPor NUMBER NOT NULL, Proveedor NUMBER NOT NULL, FechaP DATE, FechaR DATE, Precio NUMBER, CONSTRAINT PK_LIBROSPEDIDOS PRIMARY KEY(ID_libro), CONSTRAINT FK_LIBROS FOREIGN KEY(SolicitadoPor) REFERENCES Usuarios(ID_Lector), CONSTRAINT FK_LIBROS2 FOREIGN KEY(Proveedor) REFERENCES Proveedores(NIF));
Antes de comenzar con el análisis de las consultas es de suma importancia agregar que cada una de las consultas están creadas bajo ‘Vistas’, estas vistas se comportan como tablas virtuales, las cuales guardan el esquema de una tabla, pero no la tabla en sí. Las vistas se pueden crear, actualizar y eliminar, para este caso práctico solo usamos creación de vistas.
Consultas Simples Uso del LIKE: Usamos esta expresión para encontrar ciertas columnas de una tabla que comience, termine o contenga una letra o parte de una palabra.
Tiempos de Ejecución: Cantidad 5000 50000 100000
Tiempo 0.062 0.256 0.47
Grafico de Comparación:
LIKE 0,5 0,4 0,3 0,2
Tiempo (s)
0,1 0 5000
50000
100000
Uso del BETWEEN: Usamos esta expresión para encontrar los valores de las columnas indicadas que estén entre ciertos parámetros.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.109 0.967 1.045
Grafico de Comparación:
BETWEEN 1,2 1 0,8 0,6 0,4 0,2 0
Tiempo
5000
50000
100000
Uso de ORDER BY, con Operadores de Comparación: usamos ‘ORDER BY’, para que el resultado de la consulta se nos entregue ordenado según uno de los atributos de la tabla a la cual se le está haciendo la consulta. Para esta consulta también usamos operadores de comparación ‘>’ (mayor que) y además la función ‘EXTRACT’, la cual puede extraer ya sea el día, el mes o el año de una fecha.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.661 2.739 3.205
Grafico de Comparación:
ORDER BY 3,5 3 2,5 2 1,5 1 0,5 0
Tiempo(s)
5000
50000
100000
Consultas con Funciones Uso de GROUP BY y COUNT: Usamos ‘GROUP BY’, para literalmente agrupar los resultados de una consulta según un atributo determinado. Además usamos ‘COUNT’ para contar la cantidad de apariciones de una determinada columna.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.016 0.109 0.141
Grafico de Comparación:
COUNT & GROUP BY 0,15 0,1 Tiempo(s)
0,05 0 5000
50000
100000
Uso de función MIN y EXTRACT: la función ‘MIN’, devuelve el mínimo valor de una columna, y la función ‘EXTRACT’ retorna el día, mes o año de la fecha que se le pasa como parámetro.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.016 0.047 0.063
Grafico de Comparación:
MIN & EXTRACT 0,07 0,06 0,05 0,04 0,03 0,02 0,01 0
Tiempo(s)
5000
50000
100000
Uso de función AVG: La función ‘AVG’, saca el promedio de una columna pasada por parámetro, esta función no toma en cuenta los valores nulos que puedan existir a lo largo de la columna.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.007 0.015 0.023
Grafico de Comparación:
AVG & WHERE 0,025 0,02 0,015 Tiempo(s)
0,01 0,005 0 5000
50000
100000
Consultas con tipos de JOIN
Uso de JOIN: Utilizamos esta clausula para comparar dos o más tablas que tienen un campo en común. Para la siguiente consulta hacemos que la consulta busque las correspondencias entre las tablas Libros_Pedidos y Usuarios.
La consulta anterior, también se puede hacer usando la clausula ‘WHERE’
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo JOIN 0.705 5.087 16.214
Tiempo WHERE 0.502 4.609 16.178
Grafico de Comparación:
JOIN VS WHERE 18 16 14 12 10 8 6 4 2 0
Tiempo JOIN(s) Tiempo WHERE(s)
5000
50000
100000
De acuerdo al grafico podemos observar que la sentencia ‘WHERE’, es un poco más efectiva que usar ‘JOIN’, sobre dos tablas. Ahora bien, esto ocurre por la forma en que ambas clausulas tienen para trabajar sobre las tablas, ya que la sentencia ‘where’ actúa sobre la parte de la tabla que se indica, mientras que el ‘join’, actúa sobre la tabla completa haciendo que la consulta sea mas lenta que con su contraparte ‘where’.
Uso de INNER JOIN: Alternativo al ‘JOIN’ también está el ‘INNER JOIN’, este devuelve todas las filas cuando hay por lo menos una coincidencia en ambas tablas.
La consulta anterior, también se puede hacer usando la clausula ‘WHERE’
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo INNER JOIN 0.422 2.028 9.323
Tiempo WHERE 0.332 1.954 7.927
Grafico de Comparación:
10 9 8 7 6 5
Tiempo INNER JOIN
4
Tiempo WHERE
3 2 1 0 5000
50000
100000
Al igual que en el caso anterior, de acuerdo al grafico podemos observar que la sentencia ‘WHERE’, es un poco más efectiva que usar ‘INNER JOIN’, sobre dos tablas. Ahora bien, esto ocurre por la forma en que ambas clausulas tienen para trabajar sobre las tablas, ya que la sentencia ‘where’ actúa sobre la parte de la tabla que se indica, mientras que el ‘join’, actúa sobre la tabla completa haciendo que la consulta sea más lenta que con su contraparte ‘where’.
Uso de LEFT JOIN: Este tipo JOIN devuelve todas las filas de la tabla de la izquierda, y las filas coincidentes de la tabla derecha.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.811 6.456 22.414
Grafico de Comparación:
LEFT JOIN 25 20 15 Tiempo (s)
10 5 0 5000
50000
100000
Uso de RIGHT JOIN: Este tipo de JOIN devuelve todas las filas de la tabla de la derecha, y las filas coincidentes de la tabla izquierda.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.825 6.672 22.96
Grafico de Comparación:
RIGHT JOIN 25 20 15 Tiempo (s)
10 5 0 5000
50000
100000
Algo muy importante que debemos destacar es sobre el uso de ‘LEFT JOIN’ Y ‘RIGHT JOIN’, ambas consultas no generan las mismas tuplas pero sí en cambio representan los mismos conjuntos.
SUBQUERIES Una subconsulta es una consulta SELECT que devuelve un único valor y esta ANIDADA en las instrucciones SELECT, INSERT, UPDATE o DELETE, o dentro de otra subconsulta. En general una subconsulta se puede utilizar en cualquier parte en la que se permita una expresión. La siguiente subconsulta está hecha sobre la misma tabla, esta devuelve los precios de los libros que están por sobre el promedio.
Tiempos de Ejecución:
Cantidad 5000 50000 100000 Grafico de Comparación:
Tiempo 0.159 1.05 2.297
SUBQUERY & AVG 2,5 2 1,5 Tiempo(s)
1 0,5 0 5000
50000
100000
La siguiente subconsulta está hecha sobre dos tablas distintas, esta devuelve todos los usuarios cuyo id sea distinto de 3 y el id del proveedor sea menor que 3.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Grafico de Comparación:
Tiempo 0.391 1.767 2.637
SUBQUERY & AND 3 2,5 2 1,5 Tiempo(s)
1 0,5 0 5000
50000
100000
HAVING La consulta HAVING se añadió a SQL, ya que la clausula WHERE no admitía funciones tales como AVG, MIN, MAX, etc. Generalmente es usada después de la clausula GROUP BY, para agrupar los resultados obtenidos de GROUP BY que cumplen las condiciones de HAVING. La siguiente consulta entrega los datos de los libros que fueron pedidos más de una vez.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.068 0.154 0.266
Grafico de Comparación:
HAVING 0,3 0,25 0,2 0,15 Tiempo(s)
0,1 0,05 0 5000
50000
100000
En la siguiente consulta, pedimos las ganancias por libro vendido, agrupados por Titulo, Precio y Autor, con la condición de que precio sea menor que $11000 y el Autor sea igual a ‘Leiva’.
Tiempos de Ejecución:
Cantidad 5000 50000 100000 Grafico de Comparación:
Tiempo 0.003 0.312 1.111
HAVING & COMPARACIÓN 1,2 1 0,8 0,6 Tiempo(s)
0,4 0,2 0 5000
50000
100000
UNION Y CONSULTA SOBRE VISTA El operador UNION se usa para combinar el resultado conjunto de dos o más instrucciones SELECT. Se debe tener en cuenta que cada sentencia SELECT dentro de la Unión debe tener el mismo número de columnas. Las a su vez deben tener tipos de datos similares. Además, las columnas de cada instrucción SELECT deben estar en el mismo orden. La siguiente consulta devuelve los libros cuyo autor su nombre comience con ‘T’ y además todos los libros cuyo autor sea ‘Larson’ notemos también que se pueden hacer consultas por sobre la vista, y para este caso filtramos aun más el resultado de de la consulta que se pide dentro de la vista, y pedimos además que el precio de los libros no supere los $15000.
El hecho de usar vistas, simplifica en parte las consultas que contienen ‘SELECT’ complejos, además que permite personalizar la BD para los distintos usuarios, de forma que presenten los datos con una estructura lógica para los mismos. Además podemos destacar que sobre una vista también podemos hacer consultas, esto quiere decir que el resultado que está dentro de la vista podemos filtrar aun más la información que ella contiene.
Tiempos de Ejecución:
Cantidad 5000 50000 100000
Tiempo 0.039 0.127 1.215
Grafico de Comparación:
UNION & CONSULTA SOBRE VISTA 1,4 1,2 1 0,8 0,6
Tiempo(s)
0,4 0,2 0 5000
50000
100000
Introducción
Como ya se ha visto en curso anterior, el trabajo con bases de daos es vital al momento de mantener la información ordenada y poder manipular los datos, realizando consultas, agregando datos. Y esto pasa principalmente en nuestro rubro, ya que estamos constantemente trabajando con un sinfín de datos, que nos ayudan ya sean a resolver problemas o simplemente almacenar para su posterior uso. El problema ocurre cuando tenemos que manipular estos datos, para los cuales la cantidad puede variar. Ahora bien, cuando tenemos tal magnitud de datos que no podemos controlarlos mediante métodos básicos, y en nuestro caso cuando los datos están sobre una base de datos relacional tenemos una gran gama posibilidades para manipular los datos que allí se encuentran. El fin de este informe es trabajar con las más importantes funciones y clausulas del lenguaje SQL y Oracle, haciendo comparaciones con tiempos de ejecución para distintas cantidades de datos (5000,50000 y 100000). La herramienta utilizada para la realización de este trabajo es Oracle 10G Express Edition, con un entorno de desarrollo llamado SQLDeveloper.
Conclusión:
El hecho de reforzar lo aprendido en clases, haciendo este informe, hace que podamos adquirir un mayor dominio de estos temas tan importantes en nuestra carrera como lo son las Bases de Datos y por supuesto su manipulación. También es posible apreciar que existen algunos tipos de consultas que hacen lo mismo que otras pero que su tiempo de ejecución es mayor. También debemos destacar el uso de vistas, las cuales simplifican bastante el entendimiento de la Base de Datos. Este trabajo ha sido muy importante para demostrar la rapidez que se tiene al manejar conocimientos en Oracle y SQL. Es importante destacar que el tiempo de ejecución de una consulta también depende de la maquina en la que se esté trabajando, pues, en una computadora común y corriente no es posible trabajar con grandes cantidades de datos. Es destacable que para trabajar fue necesario evitar tener otra aplicaciones que utilizaran muchos recursos de la maquina, pues se ponía más lento el equipo.