Advertisement
YavorGrancharov

Databases MySQL Exam - 22 Oct 2017

Oct 24th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 3.50 KB | None | 0 0
  1. 01. DDL - Table Design (28/30)
  2. CREATE TABLE users(
  3.     id INT(11) UNIQUE PRIMARY KEY AUTO_INCREMENT,
  4.     username VARCHAR(30) UNIQUE,
  5.     `password` VARCHAR(50) NOT NULL,
  6.     name VARCHAR(50),
  7.     gender VARCHAR(1),
  8.     birthdate DATE,
  9.     age INT(11),
  10.     email VARCHAR(50) NOT NULL
  11. );
  12. CREATE TABLE departments(
  13.     id INT(11) UNIQUE PRIMARY KEY AUTO_INCREMENT,
  14.     name VARCHAR(50) NOT NULL
  15. );
  16. CREATE TABLE employees(
  17.     id INT(11) UNIQUE PRIMARY KEY AUTO_INCREMENT,
  18.     first_name VARCHAR(25),
  19.     last_name VARCHAR(25),
  20.     gender VARCHAR(1),
  21.     birthdate DATE,
  22.     age INT(11),
  23.     department_id INT(11),
  24.     CONSTRAINT fk_department_id
  25.     FOREIGN KEY (department_id) REFERENCES departments(id)
  26. );
  27. CREATE TABLE categories(
  28.     id INT(11) UNIQUE PRIMARY KEY AUTO_INCREMENT,
  29.     name VARCHAR(50) NOT NULL,
  30.     department_id INT(11),
  31.     CONSTRAINT fk_categories_id
  32.     FOREIGN KEY (department_id) REFERENCES departments(id)
  33. );
  34. CREATE TABLE `status`(
  35.     id INT(11) UNIQUE PRIMARY KEY AUTO_INCREMENT,
  36.     label VARCHAR(30) NOT NULL
  37. );
  38. CREATE TABLE reports(
  39.     id INT(11) UNIQUE PRIMARY KEY AUTO_INCREMENT,
  40.     category_id INT(11),
  41.     status_id INT(11),
  42.     open_date DATE,
  43.     close_date DATE,
  44.     description VARCHAR(200),
  45.     user_id INT(11),
  46.     employee_id INT(11),
  47.     CONSTRAINT fk_category_id
  48.     FOREIGN KEY (category_id) REFERENCES categories(id),
  49.     CONSTRAINT fk_status_id
  50.     FOREIGN KEY (status_id) REFERENCES `status`(id),
  51.     CONSTRAINT fk_user_id
  52.     FOREIGN KEY (user_id) REFERENCES users(id),
  53.     CONSTRAINT fk_employee_id
  54.     FOREIGN KEY (employee_id) REFERENCES employees(id)
  55. );
  56. -----------------------
  57. 2. Insert
  58. INSERT INTO employees(first_name,last_name,gender,birthdate,department_id)
  59. VALUES ('Marlo','O''Malley','M','1958-09-21',1),('Niki','Stanaghan','F',
  60. '1969-11-26',4),('Ayrton','Senna','M','1960-03-21',9),('Ronnie','Peterson',
  61. 'M','1944-02-14',9),('Giovanna','Amati','F','1959-07-20',5);
  62. INSERT INTO reports(category_id,status_id,open_date,close_date,description,
  63. user_id,employee_id) VALUES (1,1,'2017-04-13',NULL,'Stuck Road on Str.133',
  64. 6,2),(6,3,'2015-09-05','2015-12-06','Charity trail running',3,5),
  65. (14,2,'2015-09-07',NULL,'Falling bricks on Str.58',5,2),(4,3,'2017-07-03',
  66. '2017-07-06','Cut off streetlight on Str.11',1,1);
  67. --------------------
  68. 3. Update
  69. UPDATE reports
  70. SET status_id = 2
  71. WHERE status_id=1 AND category_id=4;
  72. ----------------------
  73. 4. Delete
  74. DELETE FROM reports
  75. WHERE status_id=4;
  76. ----------------
  77. 5. Users by Age
  78. SELECT username,age FROM users
  79. ORDER BY age ASC,username DESC;
  80. ---------------
  81. 6. Unassigned Reports
  82. SELECT description,open_date FROM reports AS r
  83. WHERE r.employee_id IS NULL ORDER BY r.open_date ASC, r.description ASC;
  84. -------------------
  85. 7. Employees and Reports
  86. SELECT first_name,last_name,description,
  87. DATE_FORMAT(open_date,'%Y-%m-%d') AS open_date
  88. FROM employees AS e JOIN reports AS r ON r.employee_id=e.id
  89. ORDER BY e.id ASC,r.open_date ASC,r.id ASC;
  90. ----------------
  91. 8. Most Reported Category
  92. SELECT c.name AS `category_name`,COUNT(r.id) AS `reports_number`
  93. FROM categories AS c JOIN reports AS r ON r.category_id=c.id
  94. GROUP BY c.id ORDER BY COUNT(r.id) ASC, name ASC;
  95. ---------------
  96. 9. One Category Employees
  97. SELECT c.name AS `category_name`,COUNT(e.id) AS `employees_number`
  98. FROM categories AS c JOIN employees AS e ON e.department_id=c.department_id
  99. GROUP BY c.id ORDER BY name ASC;
  100. -----------------
  101. 10. Birthday Report
  102. SELECT DISTINCT c.name AS `category_name` FROM categories AS c
  103. JOIN reports AS r ON r.category_id=c.id JOIN users AS u
  104. ON u.id=r.user_id WHERE DAY(r.open_date)=DAY(u.birthdate)
  105. ORDER BY c.name ASC;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement