From f96d88a20057e926278b92540df2a449ed098421 Mon Sep 17 00:00:00 2001 From: marcoandresv <153276680+marcoandresv@users.noreply.github.com> Date: Sat, 27 Apr 2024 21:05:40 +0200 Subject: [PATCH 1/3] initial commit --- .idea/.gitignore | 8 + .idea/dataSources.xml | 17 ++ .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/runConfigurations/blog_sql.xml | 7 + .idea/week6lab.iml | 9 + README.md | 255 +++++++++++++++++++++++++++ airline.sql | 123 +++++++++++++ blog.sql | 47 +++++ 9 files changed, 480 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/dataSources.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations/blog_sql.xml create mode 100644 .idea/week6lab.iml create mode 100644 README.md create mode 100644 airline.sql create mode 100644 blog.sql diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..eb71c9e --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,17 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306 + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a086998 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/blog_sql.xml b/.idea/runConfigurations/blog_sql.xml new file mode 100644 index 0000000..4aec64f --- /dev/null +++ b/.idea/runConfigurations/blog_sql.xml @@ -0,0 +1,7 @@ + + + + FILE + + + \ No newline at end of file diff --git a/.idea/week6lab.iml b/.idea/week6lab.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/week6lab.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..138fa3b --- /dev/null +++ b/README.md @@ -0,0 +1,255 @@ +

Marco Villasmil

+ + +![logo_ironhack_blue 7](https://user-images.githubusercontent.com/23629340/40541063-a07a0a8a-601a-11e8-91b5-2f13e4e6b441.png) + +# LAB | Java SQL + +## Introducción + +Acabamos de aprender cómo normalizar bases de datos así como cómo crear esquemas de base de datos y cómo realizar consultas SQL complejas, así que practiquemos un poco más. + +
+ +## Requisitos + +1. Haz un fork de este repositorio. +2. Clona este repositorio. +3. Añade a tu instructor y a los calificadores de la clase como colaboradores de tu repositorio. Si no estás seguro de quiénes son los calificadores de tu clase, pregunta a tu instructor o consulta la presentación del primer día. +4. En el repositorio, crea un proyecto de Java y añade el código para las siguientes tareas. + +## Entrega + +Una vez que termines la tarea, envía un enlace URL a tu repositorio o tu solicitud de extracción en el campo de abajo. + +
+ +## Instrucciones + +1. Normalice la siguiente base de datos de blog y escriba los scripts DDL para crear las tablas de la base de datos: + +| author | title | word count | views | +| --------------- | --------------------------- | ---------- | ----- | +| Maria Charlotte | Best Paint Colors | 814 | 14 | +| Juan Perez | Small Space Decorating Tips | 1146 | 221 | +| Maria Charlotte | Hot Accessories | 986 | 105 | +| Maria Charlotte | Mixing Textures | 765 | 22 | +| Juan Perez | Kitchen Refresh | 1242 | 307 | +| Maria Charlotte | Homemade Art Hacks | 1002 | 193 | +| Gemma Alcocer | Refinishing Wood Floors | 1571 | 7542 | + +
+ +2. Normalice la siguiente base de datos de aerolíneas y escriba los scripts DDL para crear las tablas de la base de datos: + +| Customer Name | Customer Status | Flight Number | Aircraft | Total Aircraft Seats | Flight Mileage | Total Customer Mileage | +| ---------------- | --------------- | ------------- | ----------- | -------------------- | -------------- | ---------------------- | +| Agustine Riviera | Silver | DL143 | Boeing 747 | 400 | 135 | 115235 | +| Agustine Riviera | Silver | DL122 | Airbus A330 | 236 | 4370 | 115235 | +| Alaina Sepulvida | None | DL122 | Airbus A330 | 236 | 4370 | 6008 | +| Agustine Riviera | Silver | DL143 | Boeing 747 | 400 | 135 | 115235 | +| Tom Jones | Gold | DL122 | Airbus A330 | 236 | 4370 | 205767 | +| Tom Jones | Gold | DL53 | Boeing 777 | 264 | 2078 | 205767 | +| Agustine Riviera | Silver | DL143 | Boeing 747 | 400 | 135 | 115235 | +| Sam Rio | None | DL143 | Boeing 747 | 400 | 135 | 2653 | +| Agustine Riviera | Silver | DL143 | Boeing 747 | 400 | 135 | 115235 | +| Tom Jones | Gold | DL222 | Boeing 777 | 264 | 1765 | 205767 | +| Jessica James | Silver | DL143 | Boeing 747 | 400 | 135 | 127656 | +| Sam Rio | None | DL143 | Boeing 747 | 400 | 135 | 2653 | +| Ana Janco | Silver | DL222 | Boeing 777 | 264 | 1765 | 136773 | +| Jennifer Cortez | Gold | DL222 | Boeing 777 | 264 | 1765 | 300582 | +| Jessica James | Silver | DL122 | Airbus A330 | 236 | 4370 | 127656 | +| Sam Rio | None | DL37 | Boeing 747 | 400 | 531 | 2653 | +| Christian Janco | Silver | DL222 | Boeing 777 | 264 | 1765 | 14642 | + +
+ +3. En la base de datos de aerolíneas escriba el script SQL para obtener el número total de vuelos en la base de datos. +4. En la base de datos de aerolíneas escriba el script SQL para obtener la distancia promedio de vuelo. +5. En la base de datos de aerolíneas escriba el script SQL para obtener el número promedio de asientos. +6. En la base de datos de aerolíneas escriba el script SQL para obtener el número promedio de millas voladas por los clientes agrupados por estatus. +7. En la base de datos de aerolíneas escriba el script SQL para obtener el número máximo de millas voladas por los clientes agrupados por estatus. +8. En la base de datos de aerolíneas escriba el script SQL para obtener el número total de aeronaves con un nombre que contiene Boeing. +9. En la base de datos de aerolíneas escriba el script SQL para encontrar todos los vuelos con una distancia entre 300 y 2000 millas. +10. En la base de datos de aerolíneas escriba el script SQL para encontrar la distancia promedio de vuelo reservada agrupada por estatus de cliente (esto requerirá una unión). +11. En la base de datos de aerolíneas escriba el script SQL para encontrar la aeronave más a menudo reservada por los miembros de estatus de oro (esto requerirá una unión). + +
+ +## FAQs (Preguntas frecuentes) + +
+ +
+ Estoy atascado y no sé cómo resolver el problema o por dónde empezar. ¿Qué debo hacer? + +
+ + Si estás atascado en tu código y no sabes cómo resolver el problema o por dónde empezar, debes dar un paso atrás y tratar de formular una pregunta clara y directa sobre el problema específico que enfrentas. El proceso que seguirás al tratar de definir esta pregunta te ayudará a limitar el problema y a encontrar soluciones potenciales. + + Por ejemplo, ¿estás enfrentando un problema porque no entiendes el concepto o estás recibiendo un mensaje de error que no sabes cómo arreglar? Por lo general, es útil intentar formular el problema de la manera más clara posible, incluyendo cualquier mensaje de error que estés recibiendo. Esto puede ayudarte a comunicar el problema a otras personas y, potencialmente, a obtener ayuda de tus compañeros o recursos en línea. + + Una vez que tengas una comprensión clara del problema, deberías poder comenzar a trabajar hacia la solución. + +
+ +
+ +
+ Cómo crear una tabla e insertar datos en ella en SQL? + +
+ +Crear una tabla e insertar datos en ella son las dos tareas más básicas que realizarás en SQL. Aquí hay una guía para hacerlo: + +1. Crear una tabla + +Para crear una tabla, debes usar la declaración CREATE TABLE. Aquí hay un ejemplo de cómo puedes crear una tabla llamada "empleados": + + ```sql + CREATE TABLE employees ( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(50) NOT NULL, + age INT NOT NULL, + salary DECIMAL(10, 2) NOT NULL + ); + ``` + +2. Insertar datos en una tabla + +Una vez que has creado una tabla, puedes insertar datos en ella. Para insertar datos, usas la declaración INSERT INTO. Aquí hay un ejemplo de cómo puedes insertar datos en la tabla "empleados": + + ```sql + INSERT INTO employees (name, age, salary) + VALUES ('John Doe', 32, 50000), + ('Jane Doe', 28, 45000), + ('Jim Smith', 40, 55000); + ``` + +El código anterior inserta tres filas en la tabla "empleados". Puedes insertar tantas filas como quieras, solo separa cada fila con una coma. + +
+ +
+ +
+ ¿Cuál es la diferencia entre usar "INNER JOIN", "LEFT JOIN", "RIGHT JOIN" y "FULL OUTER JOIN" en SQL? + +
+ +Un `INNER JOIN` solo devuelve las filas que tienen valores coincidentes en ambas tablas. Solo devuelve los valores comunes. + +Un `LEFT JOIN` devuelve todas las filas de la tabla izquierda y los valores coincidentes de la tabla derecha. Si no hay coincidencia, devuelve valores NULL. + +Un `RIGHT JOIN` devuelve todas las filas de la tabla derecha y los valores coincidentes de la tabla izquierda. Si no hay coincidencia, devuelve valores NULL. + +Un `FULL OUTER JOIN` devuelve todas las filas de ambas tablas, incluyendo valores coincidentes y no coincidentes. Si no hay coincidencia, devuelve valores NULL. + +Fragmentos de código: + +INNER JOIN: + + ```sql + SELECT * + FROM table1 + INNER JOIN table2 + ON table1.column = table2.column; + ``` + +LEFT JOIN: + + ```sql + SELECT * + FROM table1 + LEFT JOIN table2 + ON table1.column = table2.column; + ``` + +RIGHT JOIN: + + ```sql + SELECT * + FROM table1 + RIGHT JOIN table2 + ON table1.column = table2.column; + ``` + +FULL OUTER JOIN: + + ```sql + SELECT * + FROM table1 + FULL OUTER JOIN table2 + ON table1.column = table2.column; + ``` + +
+ +
+ +
+ ¿Cuál es el propósito de utilizar "GROUP BY", "ORDER BY" y "LIMIT" en SQL? + +
+ + 1. `GROUP BY` en SQL se utiliza para agrupar filas que tengan los mismos valores en las columnas especificadas. Esto es útil cuando quieres realizar funciones de agregación (como SUM, AVG, MIN, MAX) en cada grupo, en lugar de en el conjunto de resultados completo. Por ejemplo, si tienes una tabla de transacciones de ventas y quieres ver las ventas totales de cada vendedor, utilizarías el siguiente código SQL: + + ```sql + SELECT salesperson, SUM(sales) + FROM sales_table + GROUP BY salesperson; + ``` + + 2. `ORDER BY` en SQL se utiliza para ordenar el conjunto de resultados en orden ascendente o descendente basado en una o más columnas. Por ejemplo, si tienes una tabla de clientes y quieres ver la lista ordenada por apellido, utilizarías el siguiente código SQL: + + ```sql + SELECT * + FROM customers + ORDER BY last_name; + ``` + + 3. `LIMIT` en SQL se utiliza para especificar el número máximo de filas que se devolverán en el conjunto de resultados. Por ejemplo, si solo quieres ver los primeros 10 clientes en la lista, utilizarías el siguiente código SQL: + + ```sql + SELECT * + FROM customers + LIMIT 10; + ``` + + Al combinar estos comandos, puedes producir consultas sofisticadas que pueden satisfacer una amplia gama de necesidades. + +
+ +
+ +
+ No puedo enviar cambios a mi repositorio. ¿Qué debo hacer? + + + + Si no puedes enviar cambios a tu repositorio, aquí hay algunos pasos que puedes seguir: + + 1. Verifica tu conexión a internet: Asegúrate de que tu conexión a internet sea estable y funcione. + 2. Verifica la URL de tu repositorio: Asegúrate de estar usando la URL correcta de tu repositorio para enviar tus cambios. + 3. Revisa tus credenciales de Git: Asegúrate de que tus credenciales de Git estén actualizadas y correctas. Puedes revisar tus credenciales usando el siguiente comando: + + ```bash + git config --list + ``` + + 4. Actualiza tu repositorio local: Antes de enviar cambios, asegúrate de que tu repositorio local esté actualizado con el repositorio remoto. Puedes actualizar tu repositorio local usando el siguiente comando: + + ```bash + git fetch origin + ``` + + 5. Revisa posibles conflictos: Si hay conflictos entre tu repositorio local y el repositorio remoto, resuélvelos antes de enviar cambios. + 6. Envía cambios: Una vez que hayas resuelto los conflictos y actualizado tu repositorio local, puedes intentar enviar cambios nuevamente usando el siguiente comando: + + ```bash + git push origin + ``` + +
\ No newline at end of file diff --git a/airline.sql b/airline.sql new file mode 100644 index 0000000..bfe4d32 --- /dev/null +++ b/airline.sql @@ -0,0 +1,123 @@ +CREATE SCHEMA airline_data; + +USE airline_data; + +-- created a new schema and chose the schema to insert the tables to + + + +-- the data needs to be devided into several tables + +-- creating an aircrafts table +CREATE TABLE aircraft( + aircraft_id INT AUTO_INCREMENT PRIMARY KEY, + aircraft_model VARCHAR(50), + total_aircraft_seats INT +); + + +-- creating a flights table +CREATE TABLE flights ( + flight_id INT AUTO_INCREMENT PRIMARY KEY, + flight_number VARCHAR(10), + flight_mileage INT +); + + +-- creating customers table +CREATE TABLE customers ( + cust_id INT AUTO_INCREMENT PRIMARY KEY, + cust_name VARCHAR(255), + cust_status VARCHAR(10), + total_cust_mileage INT, + cust_flight_number VARCHAR(10) +); + + +---- inserting data into their respective tables + + +INSERT INTO aircraft (aircraft_model, total_aircraft_seats) +VALUES + ('Boeing 747', 400), + ('Airbus A330', 236), + ('Boeing 777', 264); + +INSERT INTO flights (flight_number, flight_mileage) +VALUES + ('DL143', 135), + ('DL122', 4370), + ('DL53', 2078), + ('DL222', 1765), + ('DL37', 531); + +INSERT INTO customers (cust_name, cust_status, total_cust_mileage, cust_flight_number) +VALUES + ('Agustine Riviera', 'Silver', 115235, 'DL143'), + ('Alaina Sepulvida', 'None', 6008, 'DL122'), + ('Tom Jones', 'Gold', 205767, 'DL122'), + ('Sam Rio', 'None', 2653, 'DL143'), + ('Jessica James', 'Silver', 127656, 'DL143'), + ('Ana Janco', 'Silver', 136773, 'DL222'), + ('Jennifer Cortez', 'Gold', 300582, 'DL222'), + ('Christian Janco', 'Silver', 14642, 'DL222'); + + +-- exercises + +-- total number of flights +SELECT count(*) as total_flights +FROM flights; + + +-- average flight distance +SELECT ROUND(AVG(flight_mileage)) as avg_flight_distance +FROM flights; + + +-- average amount of seats +SELECT ROUND(AVG(total_aircraft_seats)) AS avg_amount_seats +FROM aircraft; + + + +-- average amount of flight miles per cst status group +SELECT + AVG(total_cust_mileage) AS avg_mileage, + cust_status +FROM customers +GROUP BY cust_status +ORDER BY avg_mileage DESC; + +-- max number of flight miles per cst status group +SELECT + MAX(total_cust_mileage) AS max_mileage, + cust_status +FROM customers +GROUP BY cust_status +ORDER BY max_mileage DESC; + + +-- total number of "Boeing" aircrafts +SELECT COUNT(aircraft_model) AS total_Boeing_aircrafts +FROM aircraft +WHERE aircraft_model like '%Boeing%'; + + + +-- list of flights with a distance between 300 and 2000 miles +SELECT flight_number, flight_mileage +FROM flights +WHERE flight_mileage BETWEEN 300 AND 2000; + + +--------- dont understand the wording of the problem +---- the average distance per cst group?? +SELECT + c.cust_status, + AVG(f.flight_mileage) AS average_flight_mileage +FROM customers c +JOIN flights f ON c.cust_flight_number = f.flight_number +GROUP BY c.cust_status; + + diff --git a/blog.sql b/blog.sql new file mode 100644 index 0000000..29bf834 --- /dev/null +++ b/blog.sql @@ -0,0 +1,47 @@ +CREATE SCHEMA blog_info; + +USE blog_info; + +-- created a new schema and chose the schema to insert the tables to + +CREATE TABLE blog_titles ( + blog_id INT AUTO_INCREMENT PRIMARY KEY, + author VARCHAR(50), + title VARCHAR(255), + word_count INT, + views INT +); + +INSERT INTO blog_titles (author, title, word_count, views) +VALUES + ('Maria Charlotte', 'Best Paint Colors', 814, 14), + ('Juan Perez', 'Small Space Decorating Tips', 1146, 221), + ('Maria Charlotte', 'Hot Accessories', 986, 105), + ('Maria Charlotte', 'Mixing Textures', 765, 22), + ('Juan Perez', 'Kitchen Refresh', 1242, 307), + ('Maria Charlotte', 'Homemade Art Hacks', 1002, 193), + ('Gemma Alcocer', 'Refinishing Wood Floors', 1571, 7542); + + +-- displaying different information: + +-- showing everything +SELECT * +FROM blog_titles; + +-- number of views per author +SELECT author, SUM(views) AS total_views +FROM blog_titles +GROUP BY author +ORDER BY total_views DESC; + + +-- author ranking based on word count per views. "return on investment" of words and views +SELECT + author, + SUM(views) / SUM(word_count) AS return_per_views, + ROW_NUMBER() OVER (ORDER BY SUM(views) / SUM(word_count) DESC) AS author_ranking +FROM blog_titles +GROUP BY author +ORDER BY return_per_views DESC; + From 8ad57d0aebaa42de011d2715f025f7e7e9b6973f Mon Sep 17 00:00:00 2001 From: marcoandresv <153276680+marcoandresv@users.noreply.github.com> Date: Sat, 27 Apr 2024 21:16:48 +0200 Subject: [PATCH 2/3] Updated --- airline.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/airline.sql b/airline.sql index bfe4d32..e6d2eae 100644 --- a/airline.sql +++ b/airline.sql @@ -120,4 +120,5 @@ FROM customers c JOIN flights f ON c.cust_flight_number = f.flight_number GROUP BY c.cust_status; +---- From 312fd261178a85860b6429faf28b0bd7911437ff Mon Sep 17 00:00:00 2001 From: marcoandresv <153276680+marcoandresv@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:42:17 +0200 Subject: [PATCH 3/3] Updated --- airline.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/airline.sql b/airline.sql index e6d2eae..bfe4d32 100644 --- a/airline.sql +++ b/airline.sql @@ -120,5 +120,4 @@ FROM customers c JOIN flights f ON c.cust_flight_number = f.flight_number GROUP BY c.cust_status; -----