From e80efd720403295fdb8420ae6fd6d98eaa48d434 Mon Sep 17 00:00:00 2001 From: Robin Kaga Date: Wed, 22 Jan 2025 12:53:38 +0100 Subject: [PATCH 1/2] core done --- .idea/.gitignore | 3 +++ .idea/api-sql-intro.iml | 9 +++++++++ .idea/misc.xml | 6 ++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ sql/films/create-films.sql | 7 +++++++ sql/films/insert-films.sql | 15 +++++++++++++++ sql/films/select-films-core.sql | 27 +++++++++++++++++++++++++++ 8 files changed, 81 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/api-sql-intro.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 sql/films/create-films.sql create mode 100644 sql/films/insert-films.sql create mode 100644 sql/films/select-films-core.sql diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/api-sql-intro.iml b/.idea/api-sql-intro.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/api-sql-intro.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..37813b7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..3f39777 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/sql/films/create-films.sql b/sql/films/create-films.sql new file mode 100644 index 0000000..20320b0 --- /dev/null +++ b/sql/films/create-films.sql @@ -0,0 +1,7 @@ +CREATE TABLE films( + id serial primary key, + title varchar(255) UNIQUE NOT NULL, + genre varchar(50) NOT NULL, + release_year int NOT NULL, + score int NOT NULL + ); \ No newline at end of file diff --git a/sql/films/insert-films.sql b/sql/films/insert-films.sql new file mode 100644 index 0000000..48e3678 --- /dev/null +++ b/sql/films/insert-films.sql @@ -0,0 +1,15 @@ +INSERT INTO films (title, genre, release_year, score) VALUES +('The Shawshank Redemption', 'Drama', 1994, 9), +('The Godfather', 'Crime', 1972, 9), +('The Dark Knight', 'Action', 2008, 9), +('Alien', 'SciFi', 1979, 9), +('Total Recall', 'SciFi', 1990, 8), +('The Matrix', 'SciFi', 1999, 8), +('The Matrix Resurrections', 'SciFi', 2021, 5), +('The Matrix Reloaded', 'SciFi', 2003, 6), +('The Hunt for Red October', 'Thriller', 1990, 7), +('Misery', 'Thriller', 1990, 7), +('The Power Of The Dog', 'Western', 2021, 6), +('Hell or High Water', 'Western', 2016, 8), +('The Good the Bad and the Ugly', 'Western', 1966, 9), +('Unforgiven', 'Western', 1992, 7); \ No newline at end of file diff --git a/sql/films/select-films-core.sql b/sql/films/select-films-core.sql new file mode 100644 index 0000000..3b20fff --- /dev/null +++ b/sql/films/select-films-core.sql @@ -0,0 +1,27 @@ +SELECT * FROM films; + +SELECT title, score FROM films ORDER BY score DESC; + +SELECT title, release_year FROM films ORDER BY release_year ASC; + +SELECT title, score FROM films WHERE score >= 8; + +SELECT title, score FROM films WHERE score <= 7; + +SELECT title, release_year FROM films WHERE release_year = 1990; + +SELECT title, release_year FROM films WHERE release_year <= 1999 ORDER BY release_year ASC; + +SELECT title, release_year FROM films WHERE release_year > 1999 ORDER BY release_year ASC; + +SELECT title, release_year FROM films WHERE release_year < 1999 AND release_year > 1990 ORDER BY release_year ASC; + +SELECT title, genre, release_year FROM films WHERE genre = 'SciFi' ORDER BY release_year DESC; + +SELECT title, genre, release_year FROM films WHERE genre = 'SciFi' OR genre = 'Western' ORDER BY release_year DESC; + +SELECT title, genre, release_year FROM films WHERE NOT genre = 'SciFi' ORDER BY release_year DESC; + +SELECT title, genre, release_year FROM films WHERE genre = 'Western' AND release_year < 2000 ORDER BY release_year DESC; + +SELECT title, release_year FROM films WHERE title LIKE '%Matrix%' ORDER BY release_year DESC; From 04a459fc877d722282ae71682b81b760209d7b7e Mon Sep 17 00:00:00 2001 From: Robin Kaga Date: Wed, 22 Jan 2025 14:03:50 +0100 Subject: [PATCH 2/2] extension done --- sql/films/create-directors.sql | 4 ++++ sql/films/create-films.sql | 12 +++++++----- sql/films/select-films-ext.sql | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 sql/films/create-directors.sql create mode 100644 sql/films/select-films-ext.sql diff --git a/sql/films/create-directors.sql b/sql/films/create-directors.sql new file mode 100644 index 0000000..98032b0 --- /dev/null +++ b/sql/films/create-directors.sql @@ -0,0 +1,4 @@ +CREATE TABLE directors( +id serial primary key, +name varchar(255) NOT NULL, +) \ No newline at end of file diff --git a/sql/films/create-films.sql b/sql/films/create-films.sql index 20320b0..7d58dd9 100644 --- a/sql/films/create-films.sql +++ b/sql/films/create-films.sql @@ -1,7 +1,9 @@ CREATE TABLE films( - id serial primary key, - title varchar(255) UNIQUE NOT NULL, - genre varchar(50) NOT NULL, - release_year int NOT NULL, - score int NOT NULL + id SERIAL PRIMARY KEY, + title VARCHAR(255) UNIQUE NOT NULL, + genre VARCHAR(50) NOT NULL, + release_year INT NOT NULL, + score INT NOT NULL, + directorId INT, + CONSTRAINT fk_director FOREIGN KEY (directorId) REFERENCES directors(id) ON DELETE SET NULL ); \ No newline at end of file diff --git a/sql/films/select-films-ext.sql b/sql/films/select-films-ext.sql new file mode 100644 index 0000000..34560a3 --- /dev/null +++ b/sql/films/select-films-ext.sql @@ -0,0 +1,21 @@ +SELECT ROUND(AVG(score), 1) AS average_rating FROM films; + +SELECT COUNT(title) FROM films AS total_films; + +SELECT genre, ROUND(AVG(score), 1) AS average_rating FROM films GROUP BY genre ORDER BY ROUND(AVG(score), 1) DESC; + + + +SELECT films.title, directors.name AS director +FROM films +JOIN directors +ON films.directorid = directors.id; + + + +SELECT directors.name, COUNT(films.directorId) AS movies +FROM films +JOIN directors +ON films.directorId = directors.id +GROUP BY directors.id; +