# name: test/sakila/test_sakila.test_slow # description: Run Sakila test queries # group: [sakila] statement ok PRAGMA enable_verification statement ok CREATE TABLE actor ( actor_id numeric NOT NULL, first_name VARCHAR(45) NOT NULL, last_name VARCHAR(45) NOT NULL, last_update TIMESTAMP NOT NULL --, --PRIMARY KEY (actor_id) ) statement ok CREATE TABLE country ( country_id SMALLINT NOT NULL, country VARCHAR(50) NOT NULL, last_update TIMESTAMP, PRIMARY KEY (country_id) ) statement ok CREATE TABLE city ( city_id int NOT NULL, city VARCHAR(50) NOT NULL, country_id SMALLINT NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (city_id) --, --CONSTRAINT fk_city_country FOREIGN KEY (country_id) REFERENCES country (country_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE address ( address_id int NOT NULL, address VARCHAR(50) NOT NULL, address2 VARCHAR(50) DEFAULT NULL, district VARCHAR(20) NOT NULL, city_id INT NOT NULL, postal_code VARCHAR(10) DEFAULT NULL, phone VARCHAR(20) NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (address_id) --, -- CONSTRAINT fk_address_city FOREIGN KEY (city_id) REFERENCES city (city_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE LANGUAGE ( language_id SMALLINT NOT NULL, name CHAR(20) NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (language_id) ) statement ok CREATE TABLE category ( category_id SMALLINT NOT NULL, name VARCHAR(25) NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (category_id) ) statement ok CREATE TABLE customer ( customer_id INT NOT NULL, store_id INT NOT NULL, first_name VARCHAR(45) NOT NULL, last_name VARCHAR(45) NOT NULL, email VARCHAR(50) DEFAULT NULL, address_id INT NOT NULL, active CHAR(1) DEFAULT 'Y' NOT NULL, create_date TIMESTAMP NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (customer_id) --, -- CONSTRAINT fk_customer_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE NO ACTION ON UPDATE CASCADE, --CONSTRAINT fk_customer_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE film ( film_id int NOT NULL, title VARCHAR(255) NOT NULL, description string DEFAULT NULL, release_year VARCHAR(4) DEFAULT NULL, language_id SMALLINT NOT NULL, original_language_id SMALLINT DEFAULT NULL, rental_duration SMALLINT DEFAULT 3 NOT NULL, rental_rate DECIMAL(4, 2) DEFAULT 4.99 NOT NULL, length SMALLINT DEFAULT NULL, replacement_cost DECIMAL(5, 2) DEFAULT 19.99 NOT NULL, rating VARCHAR(10) DEFAULT 'G', special_features VARCHAR(100) DEFAULT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (film_id) --, -- CONSTRAINT CHECK_special_features CHECK(special_features is null or -- special_features like '%Trailers%' or -- special_features like '%Commentaries%' or -- special_features like '%Deleted Scenes%' or -- special_features like '%Behind the Scenes%'), -- CONSTRAINT CHECK_special_rating CHECK(rating in ('G','PG','PG-13','R','NC-17')), -- CONSTRAINT fk_film_language FOREIGN KEY (language_id) REFERENCES language (language_id) , -- CONSTRAINT fk_film_language_original FOREIGN KEY (original_language_id) REFERENCES language (language_id) ) statement ok CREATE TABLE film_actor ( actor_id INT NOT NULL, film_id INT NOT NULL, last_update TIMESTAMP NOT NULL --, -- PRIMARY KEY (actor_id, film_id) --, -- CONSTRAINT fk_film_actor_actor FOREIGN KEY (actor_id) REFERENCES actor (actor_id) ON DELETE NO ACTION ON UPDATE CASCADE, -- CONSTRAINT fk_film_actor_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE film_category ( film_id INT NOT NULL, category_id SMALLINT NOT NULL, last_update TIMESTAMP NOT NULL --, --PRIMARY KEY (film_id, category_id) --, -- CONSTRAINT fk_film_category_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE NO ACTION ON UPDATE CASCADE, -- CONSTRAINT fk_film_category_category FOREIGN KEY (category_id) REFERENCES category (category_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE film_text ( film_id SMALLINT NOT NULL, title VARCHAR(255) NOT NULL, description string, PRIMARY KEY (film_id) ) statement ok CREATE TABLE inventory ( inventory_id INT NOT NULL, film_id INT NOT NULL, store_id INT NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (inventory_id) --, -- CONSTRAINT fk_inventory_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE NO ACTION ON UPDATE CASCADE, -- CONSTRAINT fk_inventory_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE staff ( staff_id SMALLINT NOT NULL, first_name VARCHAR(45) NOT NULL, last_name VARCHAR(45) NOT NULL, address_id INT NOT NULL, picture string DEFAULT NULL, email VARCHAR(50) DEFAULT NULL, store_id INT NOT NULL, active SMALLINT DEFAULT 1 NOT NULL, username VARCHAR(16) NOT NULL, PASSWORD VARCHAR(40) DEFAULT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (staff_id) --, -- CONSTRAINT fk_staff_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE NO ACTION ON UPDATE CASCADE, -- CONSTRAINT fk_staff_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE NO ACTION ON UPDATE CASCADE ) statement ok CREATE TABLE store ( store_id INT NOT NULL, manager_staff_id SMALLINT NOT NULL, address_id INT NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (store_id) --, -- CONSTRAINT fk_store_staff FOREIGN KEY (manager_staff_id) REFERENCES staff (staff_id) , -- CONSTRAINT fk_store_address FOREIGN KEY (address_id) REFERENCES address (address_id) ) statement ok CREATE TABLE payment ( payment_id int NOT NULL, customer_id INT NOT NULL, staff_id SMALLINT NOT NULL, rental_id INT DEFAULT NULL, amount DECIMAL(5, 2) NOT NULL, payment_date TIMESTAMP NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (payment_id) --, -- CONSTRAINT fk_payment_rental FOREIGN KEY (rental_id) REFERENCES rental (rental_id) ON DELETE SET NULL ON UPDATE CASCADE, -- CONSTRAINT fk_payment_customer FOREIGN KEY (customer_id) REFERENCES customer (customer_id) , -- CONSTRAINT fk_payment_staff FOREIGN KEY (staff_id) REFERENCES staff (staff_id) ) statement ok CREATE TABLE rental ( rental_id INT NOT NULL, rental_date TIMESTAMP NOT NULL, inventory_id INT NOT NULL, customer_id INT NOT NULL, return_date TIMESTAMP DEFAULT NULL, staff_id SMALLINT NOT NULL, last_update TIMESTAMP NOT NULL, PRIMARY KEY (rental_id) --, -- CONSTRAINT fk_rental_staff FOREIGN KEY (staff_id) REFERENCES staff (staff_id) , -- CONSTRAINT fk_rental_inventory FOREIGN KEY (inventory_id) REFERENCES inventory (inventory_id) , -- CONSTRAINT fk_rental_customer FOREIGN KEY (customer_id) REFERENCES customer (customer_id) ) statement ok CREATE VIEW customer_list AS SELECT cu.customer_id AS ID, cu.first_name || ' ' || cu.last_name AS name, a.address AS address, a.postal_code AS zip_code, a.phone AS phone, city.city AS city, country.country AS country, CASE WHEN cu.active = 'Y' THEN 'active' ELSE '' END AS notes, cu.store_id AS SID FROM customer AS cu JOIN address AS a ON cu.address_id = a.address_id JOIN city ON a.city_id = city.city_id JOIN country ON city.country_id = country.country_id statement ok CREATE VIEW film_list AS SELECT film.film_id AS FID, film.title AS title, film.description AS description, category.name AS category, film.rental_rate AS price, film.length AS length, film.rating AS rating, actor.first_name || ' ' || actor.last_name AS actors FROM category LEFT JOIN film_category ON category.category_id = film_category.category_id LEFT JOIN film ON film_category.film_id = film.film_id JOIN film_actor ON film.film_id = film_actor.film_id JOIN actor ON film_actor.actor_id = actor.actor_id statement ok CREATE VIEW staff_list AS SELECT s.staff_id AS ID, s.first_name || ' ' || s.last_name AS name, a.address AS address, a.postal_code AS zip_code, a.phone AS phone, city.city AS city, country.country AS country, s.store_id AS SID FROM staff AS s JOIN address AS a ON s.address_id = a.address_id JOIN city ON a.city_id = city.city_id JOIN country ON city.country_id = country.country_id statement ok CREATE VIEW sales_by_store AS SELECT s.store_id, c.city || ',' || cy.country AS store, m.first_name || ' ' || m.last_name AS manager, SUM(p.amount) AS total_sales FROM payment AS p INNER JOIN rental AS r ON p.rental_id = r.rental_id INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id INNER JOIN store AS s ON i.store_id = s.store_id INNER JOIN address AS a ON s.address_id = a.address_id INNER JOIN city AS c ON a.city_id = c.city_id INNER JOIN country AS cy ON c.country_id = cy.country_id INNER JOIN staff AS m ON s.manager_staff_id = m.staff_id GROUP BY s.store_id, c.city || ',' || cy.country, m.first_name || ' ' || m.last_name statement ok CREATE VIEW sales_by_film_category AS SELECT c.name AS category, SUM(p.amount) AS total_sales FROM payment AS p INNER JOIN rental AS r ON p.rental_id = r.rental_id INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id INNER JOIN film AS f ON i.film_id = f.film_id INNER JOIN film_category AS fc ON f.film_id = fc.film_id INNER JOIN category AS c ON fc.category_id = c.category_id GROUP BY c.name statement ok COPY actor FROM 'test/sakila/data/actor.csv' (HEADER, DELIMITER '|') statement ok COPY address FROM 'test/sakila/data/address.csv' (HEADER, DELIMITER '|') statement ok COPY category FROM 'test/sakila/data/category.csv' (HEADER, DELIMITER '|') statement ok COPY city FROM 'test/sakila/data/city.csv' (HEADER, DELIMITER '|') statement ok COPY country FROM 'test/sakila/data/country.csv' (HEADER, DELIMITER '|') statement ok COPY customer FROM 'test/sakila/data/customer.csv' (HEADER, DELIMITER '|') statement ok COPY film FROM 'test/sakila/data/film.csv' (HEADER, DELIMITER '|') statement ok COPY film_actor FROM 'test/sakila/data/film_actor.csv' (HEADER, DELIMITER '|') statement ok COPY film_category FROM 'test/sakila/data/film_category.csv' (HEADER, DELIMITER '|') statement ok COPY film_text FROM 'test/sakila/data/film_text.csv' (HEADER, DELIMITER '|') statement ok COPY inventory FROM 'test/sakila/data/inventory.csv' (HEADER, DELIMITER '|') statement ok COPY language FROM 'test/sakila/data/language.csv' (HEADER, DELIMITER '|') statement ok COPY payment FROM 'test/sakila/data/payment.csv' (HEADER, DELIMITER '|') statement ok COPY rental FROM 'test/sakila/data/rental.csv' (HEADER, DELIMITER '|') statement ok COPY staff FROM 'test/sakila/data/staff.csv' (HEADER, DELIMITER '|') statement ok COPY store FROM 'test/sakila/data/store.csv' (HEADER, DELIMITER '|') query TT SELECT first_name,last_name FROM actor ORDER BY actor_id LIMIT 10 ---- PENELOPE GUINESS NICK WAHLBERG ED CHASE JENNIFER DAVIS JOHNNY LOLLOBRIGIDA BETTE NICHOLSON GRACE MOSTEL MATTHEW JOHANSSON JOE SWANK CHRISTIAN GABLE query RTT SELECT actor_id, first_name, last_name FROM actor WHERE first_name='JOE' ORDER BY actor_id ---- 9.000000 JOE SWANK query RTT SELECT actor_id, first_name, last_name FROM actor WHERE last_name LIKE '%GEN%' ORDER BY actor_id ---- 14.000000 VIVIEN BERGEN 41.000000 JODIE DEGENERES 107.000000 GINA DEGENERES 166.000000 NICK DEGENERES query IT SELECT country_id, country FROM country WHERE country IN('Afghanistan', 'Bangladesh', 'China') ORDER BY country_id ---- 1 Afghanistan 12 Bangladesh 23 China query TI SELECT last_name, COUNT(*) as lnc FROM actor GROUP BY last_name HAVING COUNT(*) >=4 ORDER BY lnc desc, last_name ---- KILMER 5 NOLTE 4 TEMPLE 4 query TTT SELECT first_name, last_name, address FROM staff INNER JOIN address ON staff.address_id = address.address_id order by first_name, last_name ---- Jon Stephens 1411 Lillydale Drive Mike Hillyer 23 Workhaven Lane query TTR SELECT first_name, last_name, SUM(amount) as total FROM staff INNER JOIN payment ON staff.staff_id = payment.staff_id AND payment_date::VARCHAR LIKE '2005-08%' GROUP BY first_name, last_name ORDER BY total ---- Mike Hillyer 11853.650000 Jon Stephens 12218.480000 query TI SELECT title, COUNT(actor_id) as actor_count FROM film_actor INNER JOIN film ON film_actor.film_id = film.film_id GROUP BY title order by actor_count desc, title limit 10 ---- LAMBS CINCINATTI 15 BOONDOCK BALLROOM 13 CHITTY LOCK 13 CRAZY HOME 13 DRACULA CRYSTAL 13 MUMMY CREATURES 13 RANDOM GO 13 ARABIA DOGMA 12 HELLFIGHTERS SIERRA 12 LESSON CLEOPATRA 12 query TI SELECT title, COUNT(title) as copies_available FROM film INNER JOIN inventory ON film.film_id = inventory.film_id WHERE title = 'HUNCHBACK IMPOSSIBLE' GROUP BY title ---- HUNCHBACK IMPOSSIBLE 6 query TTR SELECT first_name, last_name, SUM(amount) as total_paid FROM payment INNER JOIN customer ON payment.customer_id = customer.customer_id GROUP BY first_name, last_name ORDER BY total_paid desc, first_name limit 10 ---- KARL SEAL 221.550000 ELEANOR HUNT 216.540000 CLARA SHAW 195.580000 MARION SNYDER 194.610000 RHONDA KENNEDY 194.610000 TOMMY COLLAZO 186.620000 WESLEY BULL 177.600000 TIM CARY 175.610000 MARCIA DEAN 175.580000 ANA BRADLEY 174.660000 query T SELECT title FROM film WHERE title LIKE 'K%' OR title LIKE 'Q%' AND title IN ( SELECT title FROM film WHERE language_id IN ( SELECT language_id FROM language WHERE name ='English' ) ) ORDER BY title ---- KANE EXORCIST KARATE MOON KENTUCKIAN GIANT KICK SAVANNAH KILL BROTHERHOOD KILLER INNOCENT KING EVOLUTION KISS GLORY KISSING DOLLS KNOCK WARLOCK KRAMER CHOCOLATE KWAI HOMEWARD QUEEN LUKE QUEST MUSSOLINI QUILLS BULL query TT SELECT first_name, last_name FROM actor WHERE actor_id IN ( SELECT actor_id FROM film_actor WHERE film_id IN ( SELECT film_id FROM film WHERE title = 'ALONE TRIP' ) ) ORDER BY actor_id ---- ED CHASE KARL BERRY UMA WOOD WOODY JOLIE SPENCER DEPP CHRIS DEPP LAURENCE BULLOCK RENEE BALL query TTT SELECT first_name, last_name, email FROM customer JOIN address ON (customer.address_id = address.address_id) JOIN city ON (city.city_id = address.city_id) JOIN country ON (country.country_id = city.country_id) WHERE country.country= 'Canada' ORDER BY first_name, last_name ---- CURTIS IRBY CURTIS.IRBY@sakilacustomer.org DARRELL POWER DARRELL.POWER@sakilacustomer.org DERRICK BOURQUE DERRICK.BOURQUE@sakilacustomer.org LORETTA CARPENTER LORETTA.CARPENTER@sakilacustomer.org TROY QUIGLEY TROY.QUIGLEY@sakilacustomer.org query T SELECT title FROM film WHERE film_id IN ( SELECT film_id FROM film_category WHERE category_id IN ( SELECT category_id FROM category WHERE name='Family' ) ) ORDER BY film_id LIMIT 10 ---- AFRICAN EGG APACHE DIVINE ATLANTIS CAUSE BAKED CLEOPATRA BANG KWAI BEDAZZLED MARRIED BILKO ANONYMOUS BLANKET BEVERLY BLOOD ARGONAUTS BLUES INSTINCT query TI SELECT title, COUNT(rental_id) as rental_count FROM rental JOIN inventory ON (rental.inventory_id = inventory.inventory_id) JOIN film ON (inventory.film_id = film.film_id) GROUP BY film.title ORDER BY COUNT(rental_id) DESC, title limit 10 ---- BUCKET BROTHERHOOD 34 ROCKETEER MOTHER 33 FORWARD TEMPLE 32 GRIT CLOCKWORK 32 JUGGLER HARDLY 32 RIDGEMONT SUBMARINE 32 SCALAWAG DUCK 32 APACHE DIVINE 31 GOODFELLAS SALUTE 31 HOBBIT ALIEN 31 query IR SELECT store.store_id, SUM(amount) as sum_amount FROM store INNER JOIN staff ON store.store_id = staff.store_id INNER JOIN payment ON payment.staff_id = staff.staff_id GROUP BY store.store_id order by sum_amount ---- 1 33489.470000 2 33927.040000 query ITT SELECT store_id, city, country FROM store INNER JOIN address ON store.address_id = address.address_id INNER JOIN city ON city.city_id = address.city_id INNER JOIN country ON country.country_id = city.country_id order by store_id ---- 1 Lethbridge Canada 2 Woodridge Australia query TR SELECT name, SUM(amount) FROM category INNER JOIN film_category ON category.category_id = film_category.category_id INNER JOIN inventory ON film_category.film_id = inventory.film_id INNER JOIN rental ON inventory.inventory_id = rental.inventory_id INNER JOIN payment ON rental.rental_id = payment.rental_id GROUP BY name ORDER BY SUM(amount) DESC LIMIT 5 ---- Sports 5314.210000 Sci-Fi 4756.980000 Animation 4656.300000 Drama 4587.390000 Comedy 4383.580000 # these four queries are equivalent, see https:www.jooq.org/benchmark query TTI SELECT first_name, last_name, count(*) FROM actor a JOIN film_actor fa USING (actor_id) WHERE last_name LIKE 'A%' GROUP BY fa.actor_id, a.first_name, a.last_name ORDER BY count(*) DESC ---- KIRSTEN AKROYD 34 CHRISTIAN AKROYD 32 ANGELINA ASTAIRE 31 KIM ALLEN 28 CUBA ALLEN 25 DEBBIE AKROYD 24 MERYL ALLEN 22 query TTI SELECT first_name, last_name, count(*) FROM ( SELECT * FROM actor WHERE last_name LIKE 'A%' ) a JOIN film_actor USING (actor_id) GROUP BY a.actor_id, a.first_name, a.last_name ORDER BY count(*) DESC ---- KIRSTEN AKROYD 34 CHRISTIAN AKROYD 32 ANGELINA ASTAIRE 31 KIM ALLEN 28 CUBA ALLEN 25 DEBBIE AKROYD 24 MERYL ALLEN 22 query TTI SELECT * FROM ( SELECT first_name, last_name, ( SELECT count(*) FROM film_actor fa WHERE a.actor_id = fa.actor_id ) AS c FROM actor a WHERE last_name LIKE 'A%' ) a WHERE c > 0 ORDER BY c DESC ---- KIRSTEN AKROYD 34 CHRISTIAN AKROYD 32 ANGELINA ASTAIRE 31 KIM ALLEN 28 CUBA ALLEN 25 DEBBIE AKROYD 24 MERYL ALLEN 22 query TTI SELECT first_name, last_name, c FROM actor JOIN ( SELECT actor_id, count(*) c FROM film_actor GROUP BY actor_id ) fa USING (actor_id) WHERE last_name LIKE 'A%' ORDER BY c DESC ---- KIRSTEN AKROYD 34 CHRISTIAN AKROYD 32 ANGELINA ASTAIRE 31 KIM ALLEN 28 CUBA ALLEN 25 DEBBIE AKROYD 24 MERYL ALLEN 22