-
Notifications
You must be signed in to change notification settings - Fork 18
Hannah N #9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Hannah N #9
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,20 +2,52 @@ | |
|
|
||
| -- **Question 1** — List the title and published year of every book in the `'Science Fiction'` genre, ordered by published year (oldest first). | ||
|
|
||
| SELECT title,published_year FROM books b | ||
| WHERE b.genre = "Science Fiction" | ||
| ORDER BY b.published_year ASC ; | ||
|
|
||
| -- **Question 2** — Show every book published before 1950. Display the title and year only. | ||
|
|
||
| SELECT title,published_year FROM books b | ||
| WHERE b.published_year < 1950; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here. |
||
|
|
||
| -- **Question 3** — Show every book in the database along with its author's full name. Combine `first_name` and `last_name` into a single column called `author`. _(Hint: you will need a JOIN.)_ | ||
|
|
||
| SELECT b.title,a.first_name || ' ' || a.last_name AS author | ||
| FROM books b | ||
| JOIN authors a ON b.author_id = a.id; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here, you indeed need to prefix the field name SELECT title, first_name || ' ' || last_name AS author
FROM books
JOIN authors a ON author_id = a.id; |
||
|
|
||
| -- **Question 4** — List all books written by Stephen King. Show the title and published year, ordered by year. _(Hint: JOIN the two tables and filter on the author's name.)_ | ||
|
|
||
| SELECT b.title,b.published_year | ||
| FROM books b | ||
| JOIN authors a ON b.author_id = a.id | ||
| WHERE a.first_name = 'Stephen' AND a.last_name = 'King' | ||
| ORDER BY b.published_year; | ||
|
|
||
| -- **Question 5** — Add yourself as a new author. Use your real name, or make one up. Pick any nationality and birth year. | ||
|
|
||
| INSERT INTO authors (first_name, last_name, nationality, birth_year) | ||
| VALUES ('Hannah', 'Nyongo', 'Dutch', 1942); | ||
|
|
||
| -- **Question 6** — Add one book for the author you just inserted. It can be a real book or a made-up one. | ||
|
|
||
| INSERT INTO books (title, published_year, author_id) | ||
| VALUES ('The Joy of Life', 2002, 25); | ||
|
|
||
| -- **Question 7** — The genre for "The Dark Tower: The Gunslinger" was entered incorrectly as `'Fantasy'`. It should be `'Horror'`. Write an UPDATE to fix it, then verify the change with a SELECT. | ||
|
|
||
| UPDATE books | ||
| SET genre = 'Horror' | ||
| WHERE title = 'The Dark Tower: The Gunslinger'; | ||
|
|
||
| SELECT * FROM books | ||
| WHERE genre = 'Horror'; | ||
|
|
||
| -- **Question 8** — Delete the book you added in Question 6. Make sure your query targets only that specific row. | ||
|
|
||
| DELETE FROM books | ||
| WHERE title = 'The Joy of Life'; | ||
| --- | ||
|
|
||
| -- ### Bonus questions _(optional)_ | ||
|
|
@@ -24,4 +56,9 @@ | |
|
|
||
| -- **Bonus A** — How many books are there per genre? Show the genre name and the count, ordered from most to fewest books. | ||
|
|
||
| SELECT genre, | ||
| COUNT(*) AS total_books | ||
| FROM books | ||
| GROUP BY genre | ||
| ORDER BY total_books DESC; | ||
| -- **Bonus B** — Find any authors in the database who have no books at all. _(Hint: you will need a LEFT JOIN and check for NULL.) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| import fs from "fs"; | ||
| import Database from "better-sqlite3"; | ||
|
|
||
| const data = JSON.parse(fs.readFileSync("data/data.json", "utf-8")); | ||
|
|
||
| const db = new Database("data/flashcards.db"); | ||
|
|
||
| for (const deck of data.decks) { | ||
| db.prepare("INSERT INTO decks (id, name, description) VALUES (?, ?, ?)").run( | ||
| deck.id, | ||
| deck.name, | ||
| deck.description, | ||
| ); | ||
|
|
||
| console.log(`Added deck: ${deck.name}`); | ||
| } | ||
|
|
||
| // loop through every card in the JSON file | ||
| for (const card of data.cards) { | ||
| const learned = card.learned ? 1 : 0; | ||
|
|
||
| db.prepare( | ||
| "INSERT INTO cards (id, question, answer, learned, deck_id) VALUES (?, ?, ?, ?, ?)", | ||
| ).run( | ||
| card.id, // the card id | ||
| card.question, // the question | ||
| card.answer, // the answer | ||
| learned, // 1 or 0 | ||
| card.deckId, // which deck it belongs to | ||
| ); | ||
|
|
||
| // tell us what is happening | ||
| console.log(`Added card: ${card.question}`); | ||
| } | ||
|
|
||
| console.log("Migration done! All decks and cards are in the database."); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Works fine. |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.