Files
email-tracker/external/duckdb/test/sakila/test_sakila.test_slow
2025-10-24 19:21:19 -05:00

567 lines
18 KiB
Plaintext

# 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