From f769520204886210d3975b79d6e572c48abc26eb Mon Sep 17 00:00:00 2001 From: Prabhatkumar Vijaybhai Bhanderi <113227297+Prabhat-Bhanderi@users.noreply.github.com> Date: Wed, 27 May 2026 16:36:52 +0200 Subject: [PATCH] Initialize blog and airline databases with sample data Create tables for authors, posts, aircrafts, flights, customers, and bookings with sample data and SQL queries for analysis. --- lab.sql | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 lab.sql diff --git a/lab.sql b/lab.sql new file mode 100644 index 0000000..1b354bb --- /dev/null +++ b/lab.sql @@ -0,0 +1,163 @@ +-- ============================================================ +-- EXERCISE 1: Blog Database (Normalized to 3NF) +-- ============================================================ + +CREATE TABLE authors ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(100) NOT NULL UNIQUE +); + +CREATE TABLE posts ( + id INT PRIMARY KEY AUTO_INCREMENT, + author_id INT NOT NULL, + title VARCHAR(255) NOT NULL, + word_count INT NOT NULL CHECK (word_count > 0), + views INT NOT NULL DEFAULT 0 CHECK (views >= 0), + FOREIGN KEY (author_id) REFERENCES authors(id) +); + +-- Sample Data - Exercise 1 +INSERT INTO authors (name) VALUES + ('Maria Charlotte'), + ('Juan Perez'), + ('Gemma Alcocer'); + +INSERT INTO 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); + + +-- ============================================================ +-- EXERCISE 2: Airline Database (Normalized to 3NF) +-- ============================================================ + +CREATE TABLE aircrafts ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(100) NOT NULL UNIQUE, + total_seats INT NOT NULL CHECK (total_seats > 0) +); + +CREATE TABLE flights ( + flight_number VARCHAR(10) PRIMARY KEY, + aircraft_id INT NOT NULL, + mileage INT NOT NULL CHECK (mileage > 0), + FOREIGN KEY (aircraft_id) REFERENCES aircrafts(id) +); + +CREATE TABLE customers ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(100) NOT NULL UNIQUE, + status ENUM('None', 'Silver', 'Gold') NOT NULL DEFAULT 'None', + total_mileage INT NOT NULL DEFAULT 0 CHECK (total_mileage >= 0) +); + +CREATE TABLE bookings ( + id INT PRIMARY KEY AUTO_INCREMENT, + customer_id INT NOT NULL, + flight_number VARCHAR(10) NOT NULL, + FOREIGN KEY (customer_id) REFERENCES customers(id), + FOREIGN KEY (flight_number) REFERENCES flights(flight_number) +); + +-- Sample Data - Exercise 2 + +INSERT INTO aircrafts (name, total_seats) VALUES + ('Boeing 747', 400), + ('Airbus A330', 236), + ('Boeing 777', 264); + +INSERT INTO flights (flight_number, aircraft_id, mileage) VALUES + ('DL143', 1, 135), + ('DL122', 2, 4370), + ('DL53', 3, 2078), + ('DL222', 3, 1765), + ('DL37', 1, 531); + +INSERT INTO customers (name, status, total_mileage) VALUES + ('Agustine Riviera', 'Silver', 115235), + ('Alaina Sepulvida', 'None', 6008), + ('Tom Jones', 'Gold', 205767), + ('Sam Rio', 'None', 2653), + ('Jessica James', 'Silver', 127656), + ('Ana Janco', 'Silver', 136773), + ('Jennifer Cortez', 'Gold', 300582), + ('Christian Janco', 'Silver', 14642); + +INSERT INTO bookings (customer_id, flight_number) VALUES + (1, 'DL143'), + (1, 'DL122'), + (2, 'DL122'), + (1, 'DL143'), + (3, 'DL122'), + (3, 'DL53'), + (1, 'DL143'), + (4, 'DL143'), + (1, 'DL143'), + (3, 'DL222'), + (5, 'DL143'), + (4, 'DL143'), + (6, 'DL222'), + (7, 'DL222'), + (5, 'DL122'), + (4, 'DL37'), + (8, 'DL222'); + + +-- ============================================================ +-- EXERCISE 3: SQL Queries on the Airline Database +-- ============================================================ + +-- 1. Total number of flights +SELECT COUNT(DISTINCT flight_number) AS total_flights +FROM flights; + +-- 2. Average flight distance +SELECT AVG(mileage) AS avg_flight_distance +FROM flights; + +-- 3. Average number of seats per aircraft +SELECT AVG(total_seats) AS avg_seats_per_aircraft +FROM aircrafts; + +-- 4. Average miles flown by customers, grouped by status +SELECT status, AVG(total_mileage) AS avg_mileage +FROM customers +GROUP BY status; + +-- 5. Max miles flown by customers, grouped by status +SELECT status, MAX(total_mileage) AS max_mileage +FROM customers +GROUP BY status; + +-- 6. Number of aircrafts with "Boeing" in their name +SELECT COUNT(*) AS boeing_count +FROM aircrafts +WHERE name LIKE '%Boeing%'; + +-- 7. Flights with distance between 300 and 2000 miles +SELECT * +FROM flights +WHERE mileage BETWEEN 300 AND 2000; + +-- 8. Average flight distance booked, grouped by customer status +SELECT c.status, AVG(f.mileage) AS avg_booked_distance +FROM bookings b +JOIN customers c ON b.customer_id = c.id +JOIN flights f ON b.flight_number = f.flight_number +GROUP BY c.status; + +-- 9. Most booked aircraft among Gold status members +SELECT a.name, COUNT(*) AS total_bookings +FROM bookings b +JOIN customers c ON b.customer_id = c.id +JOIN flights f ON b.flight_number = f.flight_number +JOIN aircrafts a ON f.aircraft_id = a.id +WHERE c.status = 'Gold' +GROUP BY a.name +ORDER BY total_bookings DESC +LIMIT 1;