Advertisement
desislava_topuzakova

Exam Preparation 2

Oct 10th, 2022
1,431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 4.87 KB | None | 0 0
  1. Database Basics MySQL Retake Exam - 10 April 2022
  2.  
  3. # 01. Table Design
  4.  
  5. CREATE TABLE `countries`
  6. (
  7.     `id`        INT PRIMARY KEY AUTO_INCREMENT,
  8.     `name`      VARCHAR(30) NOT NULL UNIQUE ,
  9.     `continent` VARCHAR(30) NOT NULL,
  10.     `currency`  VARCHAR(5) NOT NULL
  11. );
  12.  
  13. CREATE TABLE `genres`
  14. (
  15.     `id`   INT PRIMARY KEY AUTO_INCREMENT,
  16.     `name` VARCHAR(50) NOT NULL UNIQUE
  17. );
  18.  
  19.  
  20. CREATE TABLE `actors`
  21. (
  22.     `id`         INT PRIMARY KEY AUTO_INCREMENT,
  23.     `first_name`       VARCHAR(50) NOT NULL,
  24.     `last_name`       VARCHAR(50) NOT NULL,
  25.     `birthdate`  DATE        NOT NULL,
  26.     `height`     INT,
  27.     `awards`     INT,
  28.     `country_id` INT         NOT NULL,
  29.     CONSTRAINT `fk_people_countries`
  30.         FOREIGN KEY (`country_id`) REFERENCES countries (`id`)
  31. );
  32.  
  33. CREATE TABLE `movies_additional_info`
  34. (
  35.     `id`           INT PRIMARY KEY AUTO_INCREMENT,
  36.     `rating`       DECIMAL(10, 2) NOT NULL,
  37.     `runtime`      INT NOT NULL,
  38.     `picture_url`  VARCHAR(80)    NOT NULL,
  39.     `budget`       DECIMAL(10, 2) ,
  40.     `release_date` DATE           NOT NULL,
  41.     `has_subtitles` TINYINT(1),
  42.     `description`  TEXT
  43. );
  44.  
  45. CREATE TABLE `movies`
  46. (
  47.     `id`           INT PRIMARY KEY AUTO_INCREMENT,
  48.     `title`        VARCHAR(70) UNIQUE NOT NULL ,
  49.     `country_id`   INT NOT NULL,
  50.     `movie_info_id`   INT NOT NULL UNIQUE ,
  51.     CONSTRAINT `fk_movies_countries`
  52.         FOREIGN KEY (`country_id`) REFERENCES countries (`id`),
  53.     CONSTRAINT `fk_movies_movie_info`
  54.         FOREIGN KEY (`movie_info_id`) REFERENCES movies_additional_info (id)
  55. );
  56.  
  57. CREATE TABLE `movies_actors`
  58. (
  59.     `movie_id` INT,
  60.     `actor_id` INT,
  61.     KEY `pk_movie_actor` (`movie_id`, `actor_id`),
  62.     CONSTRAINT `fk_movies_actors_movies`
  63.         FOREIGN KEY (`movie_id`) REFERENCES movies (id),
  64.     CONSTRAINT `fk_movies_actors_actors`
  65.         FOREIGN KEY (`actor_id`) REFERENCES actors (id)
  66. );
  67.  
  68. CREATE TABLE `genres_movies`
  69. (
  70.     `genre_id` INT,
  71.     `movie_id` INT,
  72.     KEY `pk_genre_movies`(`genre_id`,`movie_id`),
  73.     CONSTRAINT `fk_genres_movies_genres`
  74.         FOREIGN KEY (`genre_id`) REFERENCES genres(id),
  75.     CONSTRAINT `fk_genres_movies_movies`
  76.         FOREIGN KEY (`movie_id`) REFERENCES movies(id)
  77. );
  78.  
  79. # 02. Insert
  80. INSERT INTO `actors`(`first_name`, `last_name`, `birthdate`, `height`, `awards`, `country_id`)
  81. SELECT (REVERSE(a.`first_name`)),(REVERSE(a.`last_name`)),(DATE (a.`birthdate` - 2)),(a.`height` + 10),(a.`country_id`),(3) FROM `actors` a
  82. WHERE a.`id` <= 10;
  83.  
  84. # 03. Update
  85. UPDATE `movies_additional_info` m
  86. SET m.`runtime` = m.`runtime` - 10
  87. WHERE m.`id` BETWEEN 15 AND 25;
  88.  
  89. # 04. Delete
  90. DELETE c, m
  91. FROM `countries` AS c
  92. LEFT JOIN `movies` AS m
  93. ON c.`id` =  m.`country_id`
  94. WHERE m.`country_id` IS NULL;
  95.  
  96. # 05. Countries
  97. SELECT * from `countries` c
  98. ORDER BY c.`currency` DESC, c.`id`;
  99.  
  100. # 06. Old movies
  101. SELECT m.`id`, m2.`title`, m.`runtime`, m.`budget`, m.`release_date`
  102. FROM `movies_additional_info` AS m
  103. JOIN `movies` m2 on m.`id` = m2.`movie_info_id`
  104. WHERE YEAR(m.`release_date`) BETWEEN 1996 AND 1999
  105. ORDER BY m.`runtime`, m.`id`
  106. LIMIT 20;
  107.  
  108. # 07. Movie casting
  109. SELECT CONCAT(a.`first_name`, " " , a.`last_name`) AS 'full_name',
  110.        CONCAT(REVERSE(a.`last_name`), LENGTH(a.`last_name`), "@cast.com") AS 'email',
  111.        2022 - YEAR(a.`birthdate`) AS age,
  112.        a.`height`
  113. FROM `actors` AS 'a'
  114. WHERE a.`id` NOT IN (SELECT `actor_id` FROM `movies_actors`)
  115. ORDER BY `height` ASC;
  116.  
  117. # 08. International festival
  118. SELECT c.`name`, COUNT(m.`id`) as `movies_count`
  119. FROM `movies` AS m
  120. JOIN `countries` AS c ON c.`id` = m.`country_id`
  121. GROUP BY c.`name`
  122. HAVING `movies_count` >= 7
  123. ORDER BY `name` DESC;
  124.  
  125. # 09. Rating system
  126. SELECT m.`title`,
  127.        (CASE
  128.             WHEN mi.`rating` <= 4 THEN 'poor'
  129.             WHEN mi.`rating` <= 7 THEN 'good'
  130.             ELSE 'excellent'
  131.         END) AS `rating`,
  132.        IF(mi.`has_subtitles`, 'english', '-') `subtitles`,
  133.        mi.`budget`
  134. FROM `movies_additional_info` AS `mi`
  135. JOIN `movies` AS m on mi.`id` = m.`movie_info_id`
  136. ORDER BY `budget` DESC;
  137.  
  138. # 10. History movies
  139. CREATE FUNCTION udf_actor_history_movies_count(full_name VARCHAR(50))
  140.     RETURNS INT
  141.     DETERMINISTIC
  142. BEGIN
  143.     DECLARE movies_count INT;
  144.     SET movies_count := (
  145.         SELECT COUNT(g.name) movies
  146.         FROM actors a
  147.                  JOIN movies_actors ma on a.id = ma.actor_id
  148.                  JOIN genres_movies gm on ma.movie_id = gm.movie_id
  149.                  JOIN genres g on g.id = gm.genre_id
  150.         WHERE CONCAT(a.first_name, ' ', a.last_name) = full_name AND g.name = 'History'
  151.         GROUP BY  g.name);
  152.     RETURN movies_count;
  153. END
  154.  
  155.  
  156. # 11. Movie awards
  157. CREATE PROCEDURE `udp_award_movie`(`movie_title` VARCHAR(50))
  158. BEGIN
  159.     UPDATE actors a
  160.         JOIN movies_actors ma on a.id = ma.actor_id
  161.         JOIN movies m on m.id = ma.movie_id
  162.     SET  a.awards = a.awards + 1
  163.     WHERE m.title = movie_title;
  164. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement