Production Relational SchemaIntermediate
Movie Database
Movies, actors, genres, ratings and user reviews.
7 Tables25K+ RecordsJoinsGROUP BYAnalytics
Interactive SQL Playground & Query Runner
In-Browser SandboxRun realistic queries against the Movie Database database. Write custom SQL or solve high-yield interview problems.
Interview Challenge:
easyTop Rated Movies with Average Critic Scores
Calculate average review ratings and total review counts per movie. Return title, release_year, review_count, and avg_score.
JOINAVGGROUP BY
query.sql
Press Ctrl + Enter to execute
Entity Relationship (ER) & Foreign Key Architecture
Referential integrity mappings and table cardinalities
1:NFeatures Cast
movies
film_id
movie_cast
film_id
1:NActs In
actors
performer_id
movie_cast
performer_id
1:NTagged With
movies
film_id
film_genres
film_id
1:NClassifies
genres
genre_id
film_genres
genre_id
1:NReviewed By
movies
film_id
reviews
film_id
Relational Tables & Column Data Types
Field definitions, types, and primary keys for query construction
movies
4 colsPKfilm_id
INTtitle
VARCHAR(120)release_year
INTruntime_min
INTactors
2 colsPKperformer_id
INTstage_name
VARCHAR(100)movie_cast
3 colsPKfilm_id
INTPKperformer_id
INTbilled_as
VARCHAR(80)genres
2 colsPKgenre_id
INTgenre_name
VARCHAR(60)film_genres
2 colsPKfilm_id
INTPKgenre_id
INTreviews
5 colsPKrating_id
INTPKfilm_id
INTviewer_alias
VARCHAR(60)score
DECIMAL(3,1)rated_on
DATEstudios
2 colsPKstudio_id
INTstudio_name
VARCHAR(100)Runnable DDL Setup & Seed Script
Run directly in MySQL Workbench, pgAdmin, DBeaver, or terminal
CREATE DATABASE IF NOT EXISTS studyflow_movies;
USE studyflow_movies;
CREATE TABLE movies (
film_id INT PRIMARY KEY,
title VARCHAR(120) NOT NULL,
release_year INT,
runtime_min INT
);
CREATE TABLE actors (
performer_id INT PRIMARY KEY,
stage_name VARCHAR(100) NOT NULL
);
CREATE TABLE movie_cast (
film_id INT,
performer_id INT,
billed_as VARCHAR(80),
PRIMARY KEY (film_id, performer_id),
FOREIGN KEY (film_id) REFERENCES movies(film_id),
FOREIGN KEY (performer_id) REFERENCES actors(performer_id)
);
CREATE TABLE genres (
genre_id INT PRIMARY KEY,
genre_name VARCHAR(60) NOT NULL UNIQUE
);
CREATE TABLE film_genres (
film_id INT,
genre_id INT,
PRIMARY KEY (film_id, genre_id),
FOREIGN KEY (film_id) REFERENCES movies(film_id),
FOREIGN KEY (genre_id) REFERENCES genres(genre_id)
);
CREATE TABLE reviews (
rating_id INT PRIMARY KEY,
film_id INT,
viewer_alias VARCHAR(60),
score DECIMAL(3,1),
rated_on DATE,
FOREIGN KEY (film_id) REFERENCES movies(film_id)
);
CREATE TABLE studios (
studio_id INT PRIMARY KEY,
studio_name VARCHAR(100) NOT NULL
);
INSERT INTO movies VALUES
(1,'Signal at Dawn',2021,118),(2,'Paper Satellites',2023,104),(3,'The Last Monsoon',2022,132),
(4,'Quiet Orbit',2024,110),(5,'Northbound',2020,126);
INSERT INTO actors VALUES
(1,'Ari Vale'),(2,'Mina Ray'),(3,'Dev Shah'),(4,'Nora Sen'),(5,'Kabir Roy');
INSERT INTO movie_cast VALUES
(1,1,'Lead'),(1,2,'Lead'),(2,3,'Lead'),(2,4,'Supporting'),
(3,2,'Lead'),(3,5,'Lead'),(4,1,'Lead'),(5,3,'Lead');
INSERT INTO genres VALUES
(1,'Drama'),(2,'Sci-Fi'),(3,'Thriller'),(4,'Comedy');
INSERT INTO film_genres VALUES
(1,1),(1,3),(2,2),(2,4),(3,1),(3,3),(4,2),(5,1);
INSERT INTO reviews VALUES
(1,1,'viewer_01',8.4,'2026-01-03'),(2,1,'viewer_02',9.0,'2026-01-08'),
(3,2,'viewer_03',7.8,'2026-02-02'),(4,3,'viewer_04',8.7,'2026-02-15'),
(5,4,'viewer_05',9.2,'2026-03-10'),(6,5,'viewer_06',7.9,'2026-03-12');
INSERT INTO studios VALUES
(1,'Northstar Pictures'),(2,'Blue Frame'),(3,'Orbit Works');