In-class Exercise for Week 5: Getting Information Out of a Database Objective: Learn to retrieve information from a relational database using the SQL SELECT statement. Learning Outcomes: • • • Understand and apply SQL syntax Transform an English-language business question into a SQL statement. Identify data necessary to include in a query based on a schema. Step 1: Individual (30 minutes) To do this exercise, you will be working with a movie rental database. The schema for this database is provided on the accompanying document. All of the tables are in a schema called “moviedb.” You can’t write to any of the tables – you can only use SELECT statements to read from them (so don’t worry about causing any damage). Spend some time looking at the schema carefully. The field names are pretty self-explanatory. For example, here are three tables: You can see that a film has a title, description, rating, and length (among other things). You can also see that an actor has a first name and a last name. The film_actor table implements the many-to-many relationship between actor and film (i.e., a film can have more than one actor, and an actor can be in more than one film). You’ll also notice that data types are listed for each field, but they should be pretty obvious – for example, first_name is a VARCHAR because it is a string value. In MySQL Workbench, open the connection to the class1 server using your username and password. Click on the moviedb schema to see the list of tables. Now try a simple query. In the Query 1 pane, type the following: m And then click the Execute SQL Script button (the lightning bolt): And you’ll see a list of all movie titles (this is just the first few): On the following page you’re going to create a series of SQL SELECT queries to answer questions about the information in this database. Some of the questions can be answered by querying one table; others will require joining multiple tables to get the answer. Make sure you return only the information being requested! For each question you’ll write down the SQL query (which you can copy and paste it from SQL Workbench) and the answer you get as a result of the query (which you can copy and paste from the results). You should try to do as much of this on your own as you can, but you should feel free to consult with your colleagues (or me) in writing your queries. PART 1: SINGLE TABLE QUERIES 1. Which actors have the first name of “Ed”? a. ED CHASE, ED MANSFIELD, ED GUINESS b. select * from actor where first_name = 'Ed' 2. How many PG-13 movies are in the database? a. 223 b. select count(*) from film where rating = 'PG-13' 3. What is the length of the film “Confessions Maguire” a. 65 b. select length from film where title = 'Confessions Maguire' 4. What movie has the longest running time? a. MUSCLE BRIGHT, 185 mins b. select length, title from film order by length desc Notes: If you use the following query: “select max(length), title from film” the result returned will be ACADEMY DINOSAUR, 185. However, ACADEMY DINOSAUR is just the first movie title in the film table; it is not the name of the longest movie! Be aware that MySQL treats the field results independently. It first looks up the max(length), and when that is done, it looks up a movie title. Since there is only one length value returned, it will return one movie name (the first one)! 5. Are PG movies, on average, longer than R movies? Prove it! a. No, R-rated movies are longer (average length = 118.66 mins, compared to 112.01 for PG) b. select avg(length), rating from film where rating = 'PG' Or rating = 'R' group by rating order by avg(length) desc; PART 2: MULTI-TABLE QUERIES (JOINS) 6. How many movies are in French? a. 36 b. select count(*) from film, language where film.language_id = language.language_id And language.name = 'French' 7. What were the titles of the films starring Julianne Dench? (create a query to get them all, but only list the first five) a. ADAPTATION HOLES, ATLANTIS CAUSE, BERETS AGENT, BULL SHAWSHANK, CHOCOLATE DUCK b. select title, first_name, last_name from film, actor, film_actor where film_actor.film_id = film.film_id And film_actor.actor_id = actor.actor_id And actor.first_name = 'Julianne' And actor.last_name = 'Dench' limit 0, 5 8. How many films star Julianne Dench? a. 32 b. select count(*) from film, actor, film_actor where film_actor.film_id = film.film_id And film_actor.actor_id = actor.actor_id And actor.first_name = 'Julianne' And actor.last_name = 'Dench' FOR AN EXTRA CHALLENGE! How many actors have a last name that starts with ‘W’? Notes: You can use LIKE with a WHERE clause. LIKE looks for close matches, not exact ones. If you include a wildcard, it will search for values that match the same format. You would use the LIKE option in this manner… SELECT fieldname FROM tablename WHERE fieldname LIKE value (e.g., ‘%xyz%’) For example, using the wildcard, LIKE ‘ap%’ would match with “apple,” “application,” “apex,” etc. Thus, SELECT fieldname FROM tablename WHERE fieldname LIKE ‘ap%’ will give you results for fieldname where values start with the letters ‘ap’. You can also allow any number of preceding characters by doing this instead LIKE ‘%ap%’. This would match with “cap”, “lap” , “lapse”, “caption”, etc. As long as ap is in there somewhere. a. 19 b. select count(*) from actor where last_name like 'W%'