From bb9189025c76184b8960aba43aa68758bb190fce Mon Sep 17 00:00:00 2001 From: sandrabosk Date: Wed, 10 Apr 2024 10:44:00 +0200 Subject: [PATCH 1/2] initial commit --- Lab302MySQL.sql | 35 +++++++ Lab302airline.sql | 113 +++++++++++++++++++++ README.md | 251 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 399 insertions(+) create mode 100644 Lab302MySQL.sql create mode 100644 Lab302airline.sql create mode 100644 README.md diff --git a/Lab302MySQL.sql b/Lab302MySQL.sql new file mode 100644 index 0000000..853c87c --- /dev/null +++ b/Lab302MySQL.sql @@ -0,0 +1,35 @@ +-- Drop the existing tables if they exist +DROP TABLE IF EXISTS blog_posts; +DROP TABLE IF EXISTS authors; + +-- Create table for authors +CREATE TABLE authors ( + author_id INT PRIMARY KEY, -- Primary key for authors + author_name VARCHAR(100) NOT NULL -- Name of the author +); + +-- Create table for blog posts +CREATE TABLE blog_posts ( + post_id SERIAL PRIMARY KEY, -- Auto-incrementing primary key for posts + author_id INT NOT NULL, -- Foreign key referencing the authors table + title VARCHAR(255) NOT NULL, -- Title of the blog post + word_count INT NOT NULL, -- Number of words in the post + views INT NOT NULL, -- Number of views for the post + FOREIGN KEY (author_id) REFERENCES authors(author_id) -- Foreign key constraint +); + +-- Inserting sample data into the authors table +INSERT INTO authors (author_id, author_name) VALUES +(1, 'Maria Charlotte'), +(2, 'Juan Perez'), +(3, 'Gemma Alcocer'); + +-- Inserting sample data into the blog_posts table +INSERT INTO blog_posts (author_id, title, word_count, views) VALUES +(1, 'Best Paint Colors', 814, 14), +(2, 'Small Space Decorating Tips', 1146, 221), +(1, 'Hot Accessories', 986, 105), +(1, 'Mixing Textures', 765, 22), +(2, 'Kitchen Refresh', 1242, 307), +(1, 'Homemade Art Hacks', 1002, 193), +(3, 'Refinishing Wood Floors', 1571, 7542); diff --git a/Lab302airline.sql b/Lab302airline.sql new file mode 100644 index 0000000..a1041c7 --- /dev/null +++ b/Lab302airline.sql @@ -0,0 +1,113 @@ +-- 1. +-- Create table for Customers +CREATE TABLE Customers ( + Customer_Name VARCHAR(100) PRIMARY KEY, + Customer_Status VARCHAR(50) +); + +-- Create table for Flights +CREATE TABLE Flights ( + Flight_Number VARCHAR(10) PRIMARY KEY, + Aircraft VARCHAR(50), + Total_Aircraft_Seats INT, + Flight_Mileage INT, + Total_Customer_Mileage INT +); + +-- Create junction table for Customer_Flights +CREATE TABLE Customer_Flights ( + Customer_Name VARCHAR(100), + Flight_Number VARCHAR(10), + PRIMARY KEY (Customer_Name, Flight_Number), + FOREIGN KEY (Customer_Name) REFERENCES Customers(Customer_Name), + FOREIGN KEY (Flight_Number) REFERENCES Flights(Flight_Number) +); + +-- 2. +-- Insert sample data into Customers table +INSERT INTO Customers (Customer_Name, Customer_Status) VALUES +('Agustine Riviera', 'Silver'), +('Alaina Sepulvida', 'None'), +('Tom Jones', 'Gold'), +('Sam Rio', 'None'), +('Jessica James', 'Silver'), +('Ana Janco', 'Silver'), +('Jennifer Cortez', 'Gold'), +('Christian Janco', 'Silver'); + +-- Insert sample data into Flights table +INSERT INTO Flights (Flight_Number, Aircraft, Total_Aircraft_Seats, Flight_Mileage, Total_Customer_Mileage) VALUES +('DL143', 'Boeing 747', 400, 135, 115235), +('DL122', 'Airbus A330', 236, 4370, 127656), +('DL53', 'Boeing 777', 264, 2078, 205767), +('DL222', 'Boeing 777', 264, 1765, 136773), +('DL37', 'Boeing 747', 400, 531, 2653); + +-- Insert sample data into Customer_Flights junction table +INSERT INTO Customer_Flights (Customer_Name, Flight_Number) VALUES +('Agustine Riviera', 'DL143'), +('Agustine Riviera', 'DL122'), +('Alaina Sepulvida', 'DL122'), +('Tom Jones', 'DL122'), +('Tom Jones', 'DL53'), +('Agustine Riviera', 'DL143'), +('Sam Rio', 'DL143'), +('Agustine Riviera', 'DL143'), +('Tom Jones', 'DL222'), +('Jessica James', 'DL143'), +('Sam Rio', 'DL143'), +('Ana Janco', 'DL222'), +('Jennifer Cortez', 'DL222'), +('Jessica James', 'DL122'), +('Sam Rio', 'DL37'), +('Christian Janco', 'DL222'); + +-- 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. +SELECT COUNT(*) AS Total_Flights FROM Flights; + +-- 4. En la base de datos de aerolíneas escriba el script SQL para obtener la distancia promedio de vuelo. +SELECT AVG(Flight_Mileage) AS Average_Flight_Distance FROM Flights; + +-- 5. En la base de datos de aerolíneas escriba el script SQL para obtener el número promedio de asientos. +SELECT AVG(Total_Aircraft_Seats) AS Average_Seats FROM Flights; + +-- 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. +SELECT c.Customer_Status, AVG(f.Total_Customer_Mileage) AS Average_Miles +FROM Customers c +JOIN Customer_Flights cf ON c.Customer_Name = cf.Customer_Name +JOIN Flights f ON cf.Flight_Number = f.Flight_Number +GROUP BY c.Customer_Status; + +-- 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. +SELECT c.Customer_Status, MAX(f.Total_Customer_Mileage) AS Max_Miles +FROM Customers c +JOIN Customer_Flights cf ON c.Customer_Name = cf.Customer_Name +JOIN Flights f ON cf.Flight_Number = f.Flight_Number +GROUP BY c.Customer_Status; + +-- 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. +SELECT COUNT(*) AS Total_Boeing_Aircraft +FROM Flights +WHERE Aircraft LIKE '%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. +SELECT * +FROM Flights +WHERE Flight_Mileage BETWEEN 300 AND 2000; + +-- 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). +SELECT c.Customer_Status, AVG(f.Flight_Mileage) AS Avg_Flight_Distance +FROM Customers c +JOIN Customer_Flights cf ON c.Customer_Name = cf.Customer_Name +JOIN Flights f ON cf.Flight_Number = f.Flight_Number +GROUP BY c.Customer_Status; + +-- 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). +SELECT f.Aircraft, COUNT(*) AS Reservation_Count +FROM Customers c +JOIN Customer_Flights cf ON c.Customer_Name = cf.Customer_Name +JOIN Flights f ON cf.Flight_Number = f.Flight_Number +WHERE c.Customer_Status = 'Gold' +GROUP BY f.Aircraft +ORDER BY Reservation_Count DESC +LIMIT 1; diff --git a/README.md b/README.md new file mode 100644 index 0000000..cca8c33 --- /dev/null +++ b/README.md @@ -0,0 +1,251 @@ + +![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 From fba2aa3f2acec75c82b5e279ce841e24e38bff74 Mon Sep 17 00:00:00 2001 From: laloosun Date: Sat, 27 Apr 2024 09:39:34 +0100 Subject: [PATCH 2/2] initial commit --- .idea/.gitignore | 8 ++++++++ .idea/dataSources.xml | 18 ++++++++++++++++++ .idea/lab-java-sql-es.iml | 9 +++++++++ .idea/misc.xml | 6 ++++++ .idea/modules.xml | 8 ++++++++ .idea/sqldialects.xml | 7 +++++++ .idea/vcs.xml | 6 ++++++ 7 files changed, 62 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/dataSources.xml create mode 100644 .idea/lab-java-sql-es.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/sqldialects.xml create mode 100644 .idea/vcs.xml 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..76412e1 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,18 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306 + + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/lab-java-sql-es.iml b/.idea/lab-java-sql-es.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/lab-java-sql-es.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ 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..1d3f90f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..4306147 --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file