Here are five graded tasks based on the lab notes, starting from easy and gradually increasing in difficulty.
### Task 1: The Basics (Easy) 🚀
**Goal:** Get comfortable with creating a database and a table, and performing basic data insertion and retrieval.
**Scenario:** You need to create a simple inventory for a local library.
1. **Create a Database:** Create a new database named `library`.
2. **Create a Table:** Inside the `library` database, create a table named `books`. It should have the following columns:
* `book_id` (`INT`, `PRIMARY KEY`)
* `title` (`VARCHAR(100)`)
* `author` (`VARCHAR(100)`)
* `published_year` (`INT`)
3. **Insert Data:** Use the `INSERT INTO` command to add at least three of your favorite books to the `books` table.
4. **View Data:** Write a `SELECT` query to display all the information for every book in your table.
---
### Task 2: Filtering and Sorting (Medium-Easy) 🧐
**Goal:** Practice filtering data using the `WHERE` clause and sorting the results.
**Scenario:** The library wants to find specific books and organize its catalog display.
1. **Update Table:** Add a new column to the `books` table called `genre` (`VARCHAR(50)`). Use the `UPDATE` command to assign a genre (e.g., 'Fantasy', 'Science Fiction', 'Mystery') to each of your existing books.
2. **Filter by Condition:** Write a query to find all books that were published after the year 2000.
3. **Filter with `AND`:** Write a query to find all books where the genre is 'Fantasy' **AND** the author is 'J.K. Rowling'. (If you don't have this, use an author/genre combination that exists in your data).
4. **Sort Data:** Write a query to list all books, but this time, order them by `published_year` in descending order (newest first).
5. **Delete a Record:** A book is lost. Use the `DELETE` command to remove one book from the table using its unique `book_id`.
---
### Task 3: Aggregation and Grouping (Medium) 📊
**Goal:** Use aggregate functions and `GROUP BY` to summarize data and find patterns.
**Scenario:** The library needs a report on its collection statistics.
1. **Count Books:** Write a query to find the total number of books in the `books` table.
2. **Find Oldest/Newest:** Use the `MIN()` and `MAX()` functions in a single query to find the publication year of the oldest and newest book in the collection.
3. **Group by Author:** Write a query that shows how many books each author has in the library. The result should show the author's name and their total count of books.
4. **Use `LIKE`:** Find all books where the title contains the word 'The'.
5. **Find Average:** Calculate the average `published_year` of all books in the 'Science Fiction' genre.
---
### Task 4: Working with Multiple Tables (Hard) 🔗
**Goal:** Learn to connect data from two separate tables using an `INNER JOIN`.
**Scenario:** The library wants to track which members have borrowed which books.
1. **Create a `members` Table:** Create a new table named `members` with the following columns:
* `member_id` (`INT`, `PRIMARY KEY`)
* `first_name` (`VARCHAR(50)`)
* `last_name` (`VARCHAR(50)`)
* `join_date` (`DATE`)
2. **Create a `borrowals` Table:** Create a third table named `borrowals` to link members and books. It should have:
* `borrow_id` (`INT`, `PRIMARY KEY`)
* `book_id` (`INT`, a `FOREIGN KEY` that references `books(book_id)`)
* `member_id` (`INT`, a `FOREIGN KEY` that references `members(member_id)`)
* `borrow_date` (`DATE`)
3. **Populate Data:** Insert a few members into the `members` table. Then, insert at least three records into the `borrowals` table, linking different members to different books.
4. **Join Tables:** Write a query using `INNER JOIN` that lists the first name of the member and the title of the book they have borrowed.
---
### Task 5: Complex Reporting (Very Hard) 🏆
**Goal:** Combine joins, aggregation, and filtering to create a detailed summary report.
**Scenario:** The library manager needs a report on member activity, but only for the most active members.
1. **The Challenge:** Write a single query that shows the full name of each member (use `CONCAT`) and the total number of books they have borrowed.
2. **Filter the Groups:** Use the `HAVING` clause to ensure your report only includes members who have borrowed **more than one book**.
3. **Sort the Final Report:** Order the results to show the member with the most borrowed books at the top.
**Your final report should have two columns:** `full_name` and `books_borrowed`.