SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE SCHEMA IF NOT EXISTS `sakila` ; USE `sakila`; -- ----------------------------------------------------- -- Table `sakila`.`actor` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`actor` ( `actor_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `first_name` VARCHAR(45) NOT NULL , `last_name` VARCHAR(45) NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`actor_id`) , INDEX `idx_actor_last_name` (`last_name` ASC) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`country` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`country` ( `country_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `country` VARCHAR(50) NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`country_id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`city` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`city` ( `city_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `city` VARCHAR(50) NOT NULL , `country_id` SMALLINT UNSIGNED NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`city_id`) , INDEX `idx_fk_country_id` (`country_id` ASC) , CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id` ) REFERENCES `sakila`.`country` (`country_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`address` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`address` ( `address_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `address` VARCHAR(50) NOT NULL , `address2` VARCHAR(50) NULL DEFAULT NULL , `district` VARCHAR(20) NOT NULL , `city_id` SMALLINT UNSIGNED NOT NULL , `postal_code` VARCHAR(10) NULL DEFAULT NULL , `phone` VARCHAR(20) NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`address_id`) , INDEX `idx_fk_city_id` (`city_id` ASC) , CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id` ) REFERENCES `sakila`.`city` (`city_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`category` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`category` ( `category_id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT , `name` VARCHAR(25) NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`category_id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`staff` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`staff` ( `staff_id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT , `first_name` VARCHAR(45) NOT NULL , `last_name` VARCHAR(45) NOT NULL , `address_id` SMALLINT UNSIGNED NOT NULL , `picture` BLOB NULL DEFAULT NULL , `email` VARCHAR(50) NULL DEFAULT NULL , `store_id` TINYINT UNSIGNED NOT NULL , `active` TINYINT(1) NOT NULL DEFAULT TRUE , `username` VARCHAR(16) NOT NULL , `password` VARCHAR(40) BINARY NULL DEFAULT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`staff_id`) , INDEX `idx_fk_store_id` (`store_id` ASC) , INDEX `idx_fk_address_id` (`address_id` ASC) , CONSTRAINT `fk_staff_store` FOREIGN KEY (`store_id` ) REFERENCES `sakila`.`store` (`store_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_staff_address` FOREIGN KEY (`address_id` ) REFERENCES `sakila`.`address` (`address_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`store` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`store` ( `store_id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT , `manager_staff_id` TINYINT UNSIGNED NOT NULL , `address_id` SMALLINT UNSIGNED NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`store_id`) , UNIQUE INDEX `idx_unique_manager` (`manager_staff_id` ASC) , INDEX `idx_fk_address_id` (`address_id` ASC) , CONSTRAINT `fk_store_staff` FOREIGN KEY (`manager_staff_id` ) REFERENCES `sakila`.`staff` (`staff_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_store_address` FOREIGN KEY (`address_id` ) REFERENCES `sakila`.`address` (`address_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`customer` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`customer` ( `customer_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `store_id` TINYINT UNSIGNED NOT NULL , `first_name` VARCHAR(45) NOT NULL , `last_name` VARCHAR(45) NOT NULL , `email` VARCHAR(50) NULL DEFAULT NULL , `address_id` SMALLINT UNSIGNED NOT NULL , `active` TINYINT(1) NOT NULL DEFAULT TRUE , `create_date` DATETIME NOT NULL , `last_update` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`customer_id`) , INDEX `idx_fk_store_id` (`store_id` ASC) , INDEX `idx_fk_address_id` (`address_id` ASC) , INDEX `idx_last_name` (`last_name` ASC) , CONSTRAINT `fk_customer_address` FOREIGN KEY (`address_id` ) REFERENCES `sakila`.`address` (`address_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_customer_store` FOREIGN KEY (`store_id` ) REFERENCES `sakila`.`store` (`store_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COMMENT = 'Table storing all customers. Holds foreign keys to the address table and the store table where this customer is registered.\n\nBasic information about the customer like first and last name are stored in the table itself. Same for the date the record was created and when the information was last updated.'; -- ----------------------------------------------------- -- Table `sakila`.`language` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`language` ( `language_id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT , `name` CHAR(20) NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`language_id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`film` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`film` ( `film_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `title` VARCHAR(255) NOT NULL , `description` TEXT NULL DEFAULT NULL , `release_year` YEAR NULL DEFAULT NULL , `language_id` TINYINT UNSIGNED NOT NULL , `original_language_id` TINYINT UNSIGNED NULL DEFAULT NULL , `rental_duration` TINYINT UNSIGNED NOT NULL DEFAULT 3 , `rental_rate` DECIMAL(4,2) NOT NULL DEFAULT 4.99 , `length` SMALLINT UNSIGNED NULL DEFAULT NULL , `replacement_cost` DECIMAL(5,2) NOT NULL DEFAULT 19.99 , `rating` ENUM('G','PG','PG-13','R','NC-17') NULL DEFAULT 'G' , `special_features` SET('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') NULL DEFAULT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , INDEX `idx_title` (`title` ASC) , INDEX `idx_fk_language_id` (`language_id` ASC) , INDEX `idx_fk_original_language_id` (`original_language_id` ASC) , PRIMARY KEY (`film_id`) , CONSTRAINT `fk_film_language` FOREIGN KEY (`language_id` ) REFERENCES `sakila`.`language` (`language_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_film_language_original` FOREIGN KEY (`original_language_id` ) REFERENCES `sakila`.`language` (`language_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`film_actor` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`film_actor` ( `actor_id` SMALLINT UNSIGNED NOT NULL , `film_id` SMALLINT UNSIGNED NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`actor_id`, `film_id`) , INDEX `idx_fk_film_id` (`film_id` ASC) , CONSTRAINT `fk_film_actor_actor` FOREIGN KEY (`actor_id` ) REFERENCES `sakila`.`actor` (`actor_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_film_actor_film` FOREIGN KEY (`film_id` ) REFERENCES `sakila`.`film` (`film_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`film_category` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`film_category` ( `film_id` SMALLINT UNSIGNED NOT NULL , `category_id` TINYINT UNSIGNED NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`film_id`, `category_id`) , INDEX `fk_film_category_category` (`category_id` ASC) , CONSTRAINT `fk_film_category_film` FOREIGN KEY (`film_id` ) REFERENCES `sakila`.`film` (`film_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_film_category_category` FOREIGN KEY (`category_id` ) REFERENCES `sakila`.`category` (`category_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`inventory` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`inventory` ( `inventory_id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT , `film_id` SMALLINT UNSIGNED NOT NULL , `store_id` TINYINT UNSIGNED NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`inventory_id`) , INDEX `idx_fk_film_id` (`film_id` ASC) , INDEX `idx_store_id_film_id` (`store_id` ASC, `film_id` ASC) , CONSTRAINT `fk_inventory_store` FOREIGN KEY (`store_id` ) REFERENCES `sakila`.`store` (`store_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_inventory_film` FOREIGN KEY (`film_id` ) REFERENCES `sakila`.`film` (`film_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`film_text` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`film_text` ( `film_id` SMALLINT UNSIGNED NOT NULL , `title` VARCHAR(255) NOT NULL , `description` TEXT NULL DEFAULT NULL , PRIMARY KEY (`film_id`) , FULLTEXT INDEX `idx_title_description` (`title` ASC, `description` ASC) , INDEX `fk_film_text` (`film_id` ASC) , CONSTRAINT `fk_film_text` FOREIGN KEY (`film_id` ) REFERENCES `sakila`.`inventory` (`film_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `sakila`.`rental` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`rental` ( `rental_id` INT NOT NULL AUTO_INCREMENT , `rental_date` DATETIME NOT NULL , `inventory_id` MEDIUMINT UNSIGNED NOT NULL , `customer_id` SMALLINT UNSIGNED NOT NULL , `return_date` DATETIME NULL DEFAULT NULL , `staff_id` TINYINT UNSIGNED NOT NULL , `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`rental_id`) , UNIQUE INDEX (`rental_date` ASC, `inventory_id` ASC, `customer_id` ASC) , INDEX `idx_fk_inventory_id` (`inventory_id` ASC) , INDEX `idx_fk_customer_id` (`customer_id` ASC) , INDEX `idx_fk_staff_id` (`staff_id` ASC) , CONSTRAINT `fk_rental_staff` FOREIGN KEY (`staff_id` ) REFERENCES `sakila`.`staff` (`staff_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_rental_inventory` FOREIGN KEY (`inventory_id` ) REFERENCES `sakila`.`inventory` (`inventory_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_rental_customer` FOREIGN KEY (`customer_id` ) REFERENCES `sakila`.`customer` (`customer_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Table `sakila`.`payment` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`payment` ( `payment_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `customer_id` SMALLINT UNSIGNED NOT NULL , `staff_id` TINYINT UNSIGNED NOT NULL , `rental_id` INT NULL DEFAULT NULL , `amount` DECIMAL(5,2) NOT NULL , `payment_date` DATETIME NOT NULL , `last_update` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`payment_id`) , INDEX `idx_fk_staff_id` (`staff_id` ASC) , INDEX `idx_fk_customer_id` (`customer_id` ASC) , INDEX `fk_payment_rental` (`rental_id` ASC) , CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id` ) REFERENCES `sakila`.`rental` (`rental_id` ) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `fk_payment_customer` FOREIGN KEY (`customer_id` ) REFERENCES `sakila`.`customer` (`customer_id` ) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `fk_payment_staff` FOREIGN KEY (`staff_id` ) REFERENCES `sakila`.`staff` (`staff_id` ) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`customer_list` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`customer_list` (`id` INT); -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`film_list` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`film_list` (`id` INT); -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`nicer_but_slower_film_list` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`nicer_but_slower_film_list` (`id` INT); -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`staff_list` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`staff_list` (`id` INT); -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`sales_by_store` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`sales_by_store` (`id` INT); -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`sales_by_film_category` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`sales_by_film_category` (`id` INT); -- ----------------------------------------------------- -- Placeholder table for view `sakila`.`actor_info` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`actor_info` (`id` INT); DELIMITER // // CREATE PROCEDURE `sakila`.`rewards_report` () BEGIN END // // CREATE PROCEDURE `sakila`.`get_customer_balance` () BEGIN END // // CREATE PROCEDURE `sakila`.`film_in_stock` () BEGIN END // // CREATE PROCEDURE `sakila`.`film_not_in_stock`(IN p_film_id INT, IN p_store_id INT, OUT p_film_count INT) READS SQL DATA BEGIN SELECT inventory_id FROM inventory WHERE film_id = p_film_id AND store_id = p_store_id AND NOT inventory_in_stock(inventory_id); SELECT FOUND_ROWS() INTO p_film_count; END // // CREATE PROCEDURE `sakila`.`inventory_held_by_customer` () BEGIN END // // CREATE FUNCTION `sakila`.`inventory_in_stock`(p_inventory_id INT) RETURNS BOOLEAN READS SQL DATA BEGIN DECLARE v_rentals INT; DECLARE v_out INT; #AN ITEM IS IN-STOCK IF THERE ARE EITHER NO ROWS IN THE rental TABLE #FOR THE ITEM OR ALL ROWS HAVE return_date POPULATED SELECT COUNT(*) INTO v_rentals FROM rental WHERE inventory_id = p_inventory_id; IF v_rentals = 0 THEN RETURN TRUE; END IF; SELECT COUNT(rental_id) INTO v_out FROM inventory LEFT JOIN rental USING(inventory_id) WHERE inventory.inventory_id = p_inventory_id AND rental.return_date IS NULL; IF v_out > 0 THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END // DELIMITER ; -- ----------------------------------------------------- -- View `sakila`.`customer_list` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`customer_list`; -- -- View structure for view `customer_list` -- CREATE OR REPLACE VIEW customer_list AS SELECT cu.customer_id AS ID, CONCAT(cu.first_name, _utf8' ', 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, IF(cu.active, _utf8'active',_utf8'') 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; -- ----------------------------------------------------- -- View `sakila`.`film_list` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`film_list`; -- -- View structure for view `film_list` -- CREATE OR REPLACE 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, GROUP_CONCAT(CONCAT(actor.first_name, _utf8' ', actor.last_name) SEPARATOR ', ') 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 GROUP BY film.film_id; -- ----------------------------------------------------- -- View `sakila`.`nicer_but_slower_film_list` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`nicer_but_slower_film_list`; -- -- View structure for view `nicer_but_slower_film_list` -- CREATE OR REPLACE VIEW nicer_but_slower_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, GROUP_CONCAT(CONCAT(CONCAT(UCASE(SUBSTR(actor.first_name,1,1)), LCASE(SUBSTR(actor.first_name,2,LENGTH(actor.first_name))),_utf8' ',CONCAT(UCASE(SUBSTR(actor.last_name,1,1)), LCASE(SUBSTR(actor.last_name,2,LENGTH(actor.last_name)))))) SEPARATOR ', ') 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 GROUP BY film.film_id; -- ----------------------------------------------------- -- View `sakila`.`staff_list` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`staff_list`; -- -- View structure for view `staff_list` -- CREATE OR REPLACE VIEW staff_list AS SELECT s.staff_id AS ID, CONCAT(s.first_name, _utf8' ', 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; -- ----------------------------------------------------- -- View `sakila`.`sales_by_store` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`sales_by_store`; -- -- View structure for view `sales_by_store` -- CREATE OR REPLACE VIEW sales_by_store AS SELECT CONCAT(c.city, _utf8',', cy.country) AS store , CONCAT(m.first_name, _utf8' ', 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 ORDER BY cy.country, c.city; -- ----------------------------------------------------- -- View `sakila`.`sales_by_film_category` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`sales_by_film_category`; -- -- View structure for view `sales_by_film_category` -- -- Note that total sales will add up to >100% because -- some titles belong to more than 1 category -- CREATE OR REPLACE 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 ORDER BY total_sales DESC; -- ----------------------------------------------------- -- View `sakila`.`actor_info` -- ----------------------------------------------------- DROP TABLE IF EXISTS `sakila`.`actor_info`; -- -- View structure for view `actor_info` -- CREATE OR REPLACE DEFINER=CURRENT_USER SQL SECURITY INVOKER VIEW actor_info AS SELECT a.actor_id, a.first_name, a.last_name, GROUP_CONCAT(DISTINCT CONCAT(c.name, ': ', (SELECT GROUP_CONCAT(f.title ORDER BY f.title SEPARATOR ', ') FROM sakila.film f INNER JOIN sakila.film_category fc ON f.film_id = fc.film_id INNER JOIN sakila.film_actor fa ON f.film_id = fa.film_id WHERE fc.category_id = c.category_id AND fa.actor_id = a.actor_id ) ) ORDER BY c.name SEPARATOR '; ') AS film_info FROM sakila.actor a LEFT JOIN sakila.film_actor fa ON a.actor_id = fa.actor_id LEFT JOIN sakila.film_category fc ON fa.film_id = fc.film_id LEFT JOIN sakila.category c ON fc.category_id = c.category_id GROUP BY a.actor_id, a.first_name, a.last_name; USE `sakila`; DELIMITER // CREATE TRIGGER `ins_film` AFTER INSERT ON `film` FOR EACH ROW BEGIN INSERT INTO film_text (film_id, title, description) VALUES (new.film_id, new.title, new.description); END// CREATE TRIGGER `upd_film` AFTER UPDATE ON `film` FOR EACH ROW BEGIN IF (old.title != new.title) or (old.description != new.description) THEN UPDATE film_text SET title=new.title, description=new.description, film_id=new.film_id WHERE film_id=old.film_id; END IF; END// CREATE TRIGGER `del_film` AFTER DELETE ON `film` FOR EACH ROW BEGIN DELETE FROM film_text WHERE film_id = old.film_id; END// DELIMITER ; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;