Write SQL queries to solve a mystery.
A Mystery in Fiftyville
The CS50 Duck has been stolen! The town of Fiftyville has called upon you to solve the mystery of the stolen duck. Authorities believe that the thief stole the duck and then, shortly afterwards, took a flight out of town with the help of an accomplice. Your goal is to identify:
- Who the thief is,
- What city the thief escaped to, and
- Who the thief’s accomplice is who helped them escape
All you know is that the theft took place on July 28, 2020 and that it took place on Chamberlin Street.
How will you go about solving this mystery? The Fiftyville authorities have taken some of the town’s records from around the time of the theft and prepared a SQLite database for you,
fiftyville.db, which contains tables of data from around the town. You can query that table using SQL
SELECT queries to access the data of interest to you. Using just the information in the database, your task is to solve the mystery.
Here’s how to download this problem into your own CS50 IDE. Log into CS50 IDE and then, in a terminal window, execute each of the below.
cdto ensure that you’re in
~/(i.e., your home directory, aka
- If you haven’t already, execute
mkdir pset7to make (i.e., create) a directory called
pset7in your home directory.
cd pset7to change into (i.e., open) that directory.
wget https://cdn.cs50.net/2020/fall/psets/7/fiftyville/fiftyville.zipto download a (compressed) ZIP file with this problem’s distribution.
unzip fiftyville.zipto uncompress that file.
rm fiftyville.zipfollowed by
yto delete that ZIP file.
ls. You should see a directory called
fiftyville, which was inside of that ZIP file.
cd fiftyvilleto change into that directory.
ls. You should see a
log.sqlfile, and an
For this problem, equally as important as solving the mystery itself is the process that you use to solve the mystery. In
log.sql, keep a log of all SQL queries that you run on the database. Above each query, label each with a comment (in SQL, comments are any lines that begin with
--) describing why you’re running the query and/or what information you’re hoping to get out of that particular query. You can use comments in the log file to add additional notes about your thought process as you solve the mystery: ultimately, this file should serve as evidence of the process you used to identify the thief!
Once you solve the mystery, complete each of the lines in
answers.txt by filling in the name of the thief, the city that the thief escaped to, and the name of the thief’s accomplice who helped them escape town. (Be sure not to change any of the existing text in the file or to add any other lines to the file!)
Ultimately, you should submit both your
sqlite3 fiftyville.dbto begin running queries on the database.
- While running
.tableswill list all of the tables in the database.
- While running
.schema TABLE_NAME, where
TABLE_NAMEis the name of a table in the database, will show you the
CREATE TABLEcommand used to create the table. This can be helpful for knowing which columns to query!
- While running
- You may find it helpful to start with the
crime_scene_reportstable. Start by looking for a crime scene report that matches the date and the location of the crime.
- See this SQL keywords reference for some SQL syntax that may be helpful!
Execute the below to evaluate the correctness of your code using
How to Submit
You must submit both your
log.sql file and your
answers.txt file for this problem.
- Download your
answers.txtfiles by control-clicking or right-clicking on the files in CS50 IDE’s file browser and choosing Download.
- Go to CS50’s Gradescope page.
- Click “Problem Set 7: Fiftyville”.
- Drag and drop your
answers.txtfiles to the area that says “Drag & Drop”. Be sure that each file is correctly named!
- Click “Upload”.
You should see a message that says “Problem Set 7: Fiftyville submitted successfully!” You won’t see a score just yet, but if you see the message then we’ve received your submission!
Inspired by another case over at SQL City.