Se necesita un sistema en Java que sea capaz de interpretar las sentencias CREATE TABLE
, INSERT
, UPDATE
, SELECT
, DELETE
, así como otros comandos SQL utilizando archivos CSV para las consultas de datos. Se entenderá que cada Tabla corresponderá a un archivo CSV en la ruta de trabajo (Base de Datos), en donde cada campo/atributo de la tabla corresponderá a una columna del archivo CSV.
A continuación se describirán cada una de las sentencias.
- Se deberá establecer una ruta de trabajo, el cual será el directorio desde donde se leerán y/o crearán los archivos. El nombre de la carpeta corresponderá al nombre de la base de datos. Lo anterior mediante el comando
USE $PATH$
donde $PATH$ será la ruta relativa o obsoluta de la carpeta de trabajo. - Una vez establecida la ruta de trabajo, se deberá poder mostrar el listado de las Tablas (archivos CSV en la ruta de trabajo) mediante el comando
SHOW TABLES
. - El comando
CREATE TABLE
deberá ser capáz de crear un nuevo archivo, respetando la sintaxis de SQL para la creación de los campos. Por ejemplo:
CREATE TABLE Alumnos ( id INT NOT NULL PRIMARY KEY, nombre VARCHAR(20) NOT NULL, app VARCHAR(20) NOT NULL, apm VARCHAR(20) NOT NULL, edad INT NULL );
dará como resultado el archivo $PATH$/Alumnos.csv
con las columnas:
id,nombre,app,apm,edad
.
- El comando
DROP TABLE
deberá ser capáz de eliminar el archivo de la carpeta. Se deberá preguntar si realmente quiere borrar el archivo. - El comando
INSERT
deberá ser capáz de insertar una nueva línea en el archivo/tabla. Se deberá respetar la sintaxis de SQL. Por ejemplo:INSERT INTO table_name (column1, column2,column3, ...) VALUES (value1, value2, value3, ...);
. - El comando
DELETE
deberá ser capáz de borrar una fila o un conjunto de filas respetando la secciónWHERE
de la sintaxis de SQL (DELETE FROM table_name WHERE condition;
).
NOTA: Se deberá respetar las búsquedas complejas utilizando los comandos
AND
YOR
. Por ejemplo:DELETE FROM Alumnos WHERE (app='González' AND apm <> 'Hernández') OR id=25;
; Sólo borraría a los alumnos con apellidos González Hernández o aquél con id=25.
- El comando
UPDATE
actualizará las columnas de una fila o un conjunto de filas. Se deberá respetar la sintaxis de SQL.UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
. **NOTA: la sección deWHERE condition
respeta el mismo formato del comandoDELETE
. - El comando
SELECT
obtendrá el conjunto de datos desde la tabla/archivo respetando la sintaxys de SQLSELECT [*] | select_expr [, select_expr] ... [as alias] [FROM table_reference [WHERE where_condition]
.
A continuación se describe el conjunto de entregables:
- Librería en archivo
JAR
auto ejecutable. - Código fuente, éste se mantendrá en el respositorio.
- Como parte del repositorio se deberán programar todas las pruebas unitarias necesarias para probar el funcionamiento del sistema.
- Se deberá realizar un reporte que contenga la explicación del funcionamiento del sistema, así como la explicación a detalle de las pruebas unitarias realizadas. *EL REPORTE SE SUBIRÁ EN FORMATO PDF EN CLASSROOM.
Se necesita un framework de Excepciones para manejar las distintas situaciones anómalas (Excepciones) de la librería para el menejo de sentencias SQL (Práctica 1). Se deberán establecer excepciones marcadas y no marcadas dentro del framework.
Del mismo modo se deberá implementar un sistema interactivo (interprete interactivo) para consultar tablas (archivos CSV) de diferentes bases de datos (carpetas). Del mismo modo se deberán agregar funciones BUIT-IN (Ver anexo).
- Archivo JAR auto-ejecutable del sistema.
- Código fuente, éste se mantendrá en el respositorio.
- Como parte del repositorio se deberán programar todas las pruebas unitarias necesarias para probar el funcionamiento del sistema.
- Se deberá realizar un reporte que contenga la explicación del funcionamiento del sistema, así como la explicación a detalle de las pruebas unitarias realizadas. *EL REPORTE SE SUBIRÁ EN FORMATO PDF EN CLASSROOM.
Nota Se deberán generar y cachar todas las posibles excepciones. Dado que si el programa no responde o se cierra debido a una excepción. La práctica será marcada como no entregada.
SQL viene incluido con una serie de funciones integradas. Las funciones integradas son simplemente funciones que ya vienen implementadas en el servidor SQL. Estas funciones nos permiten realizar diferentes tipos de manipulaciones en los datos. Las funciones integradas se pueden clasificar básicamente en las siguientes categorías más utilizadas.
Funciones de cadenas – operan en tipos de datos de cadena Funciones numéricas : opere en tipos de datos numéricos Funciones de fecha : operan en tipos de datos de fecha Funciones agregadas : opere en todos los tipos de datos anteriores y produzca conjuntos de resultados resumidos.
El script que se muestra a continuación demuestra el uso de la función “UCASE”.
SELECT `movie_id`,` title`, UCASE (`title`) FROM` movies`;
Aqui UCASE ('title')
es la función incorporada que toma el título como parámetro y lo devuelve en letras mayúsculas con el nombre de alias upper_case_title
.
Podemos realizar cálculos matemáticos sobre datos numéricos en las declaraciones SQL.
SQL admite los siguientes operadores aritmáticos que se pueden usar para realizar cálculos en las sentencias de SQL.
Nombre | Descripción |
---|---|
DIV | División entera |
/ | División |
– | Sustracción |
+ | Adición |
* | Multiplicación |
% o MOD | Módulo |
SELECT 23 DIV 6;
Ejecutar el script anterior nos da los siguientes resultados.
3
Veamos ahora el ejemplo del operador de división. Modificaremos el ejemplo de DIV.
SELECT 23/6;
Ejecutar el script anterior nos da los siguientes resultados.
3.8333
Veamos ahora el ejemplo del operador de resta. Utilizaremos los mismos valores que en los dos ejemplos anteriores
SELECT 23 - 6;
Ejecutar el script anterior nos da 17
Veamos ahora el ejemplo del operador de suma. Modificaremos el ejemplo anterior.
SELECT 23 + 6;
Ejecutar el script anterior nos da 29
Veamos ahora el ejemplo del operador de multiplicación. Usaremos los mismos valores que en los ejemplos anteriores.
SELECT 23 * 6 AS `multiplication_result`;
Ejecutar el script anterior nos da los siguientes resultados.
multiplication_result
138
El operador de módulo divide N por M y nos da el recordatorio. Veamos ahora el ejemplo del operador de módulo. Usaremos los mismos valores que en los ejemplos anteriores.
SELECT 23% 6;
OR
SELECT 23 MOD 6;
Ejecutar el script anterior nos da 5
Veamos ahora algunas de las funciones numéricas comunes en SQL.
FLOOR : esta función elimina decimales de un número y lo redondea al número más bajo más cercano. El script que se muestra a continuación demuestra su uso.
SELECT FLOOR (23/6) AS `floor_result`;
Ejecutar el script anterior nos da los siguientes resultados.
Floor_result
3
ROUND : esta función redondea un número con decimales al número entero más cercano. El script que se muestra a continuación demuestra su uso.
SELECT ROUND (23/6) AS `round_result`;
Ejecutar el script anterior nos da los siguientes resultados.
Round_result
4
RAND : esta función se usa para generar un número aleatorio, su valor cambia cada vez que se llama a la función. El script que se muestra a continuación demuestra su uso.
SELECT RAND() AS `random_result`;
La función COUNT
devuelve el número total de valores en el campo especificado. Funciona tanto en tipos de datos numéricos como no numéricos. Todas las funciones agregadas por defecto excluyen valores nulos antes de trabajar en los datos.
COUNT (*)
es una implementación especial de la función COUNT
que devuelve el recuento de todas las filas en una tabla especificada. COUNT (*)
también considera nulos y duplicados.
La tabla que se muestra a continuación muestra los datos en la tabla movierentals
número de referencia | Fecha de Transacción | Fecha de regreso | número de socio | movie_id | movie_ returned |
---|---|---|---|---|---|
11 | 20-06-2012 | NULO | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | NULO | 3 | 3 | 0 |
Supongamos que queremos obtener el número de veces que la película con ID 2 se ha alquilado
SELECT COUNT (`movie_id`) FROM` movierentals` WHERE `movie_id` = 2;
Ejecutar la consulta anterior en SQL workbench contra myflixdb nos da los siguientes resultados.
COUNT (‘movie_id’)
3
La palabra clave DISTINCT
que nos permite omitir los duplicados de nuestros resultados. Esto se logra agrupando valores similares juntos.
Para apreciar el concepto de Distinct, vamos a ejecutar una consulta simple
SELECT `movie_id` FROM` movierentals`;
movie_id
1
2
2
2
3
Ahora ejecutemos la misma consulta con la palabra clave distinct –
SELECT DISTINCT `movie_id` FROM` movierentals`;
Como se muestra a continuación, distinct omite registros duplicados de los resultados.
movie_id
1
2
3
La función MIN
devuelve el valor más pequeño en el campo de tabla especificado .
Como ejemplo, supongamos que queremos saber el año en el que se lanzó la película más antigua de nuestra biblioteca, podemos usar la función `MIN`` de SQL para obtener la información deseada.
La siguiente consulta nos ayuda a lograr eso
SELECT MIN (`year_released`) FROM` movies`;
Ejecutar la consulta anterior en SQL workbench contra myflixdb nos da los siguientes resultados.
MIN (‘año liberado’)
2005
Tal como su nombre lo sugiere, la función MAX
es lo opuesto a la función MIN
. Se devuelve el valor más grande desde el campo de la tabla especificada .
Supongamos que queremos obtener el año en que se lanzó la última película en nuestra base de datos. Podemos usar fácilmente la función MAX
para lograr eso.
El siguiente ejemplo devuelve el último año de la película publicado.
SELECT MAX (`year_released`) FROM` movies`;
Ejecutar la consulta anterior en SQL workbench utilizando myflixdb nos da los siguientes resultados.
MAX (‘year_released’)
2012
Supongamos que queremos un informe que dé la cantidad total de pagos realizados hasta el momento. Podemos usar la función SUMA
de SQL que devuelve la suma de todos los valores en la columna especificada . SUM funciona solo en campos numéricos . Los valores nulos se excluyen del resultado devuelto.
La siguiente tabla muestra los datos en la tabla de pagos.
ID de pago | número de socio | fecha de pago | descripción | cantidad pagada | número de referencia_externo |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Pago de alquiler de película | 2500 | 11 |
2 | 1 | 25-07-2012 | Pago de alquiler de película | 2000 | 12 |
3 | 3 | 30-07-2012 | Pago de alquiler de película | 6000 | NULO |
a consulta que se muestra a continuación obtiene todos los pagos realizados y los resume para devolver un único resultado.
SELECT SUM(`amount_paid`) FROM` payments`;
Ejecutar la consulta anterior en MySQL workbench contra myflixdb da los siguientes resultados.
SUM (‘amount_paid’)
10500
La función de SQL AVG devuelve el promedio de los valores en una columna especificada. Al igual que la función SUMA, funciona solo en tipos de datos numéricos .
Supongamos que queremos encontrar el monto promedio pagado. Podemos usar la siguiente consulta:
SELECT AVG(`amount_paid`) FROM` payments`;
Ejecutando la consulta anterior en MySQL workbench, nos da los siguientes resultados.
AVG (‘amount_paid’)
3500