You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

198 lines
8.0 KiB

  1. -- EXERCISE 1
  2. -- I inserted everything manually
  3. CREATE TABLE customers (
  4. customerId INT,
  5. customerName VARCHAR(50),
  6. city VARCHAR(50),
  7. PRIMARY KEY (customerId)
  8. );
  9. CREATE TABLE items (
  10. itemId INT,
  11. itemName VARCHAR(50),
  12. price FLOAT,
  13. PRIMARY KEY (itemId)
  14. );
  15. CREATE TABLE orders (
  16. orderId INT,
  17. customerId INT,
  18. date DATE,
  19. FOREIGN KEY (customerId) REFERENCES customers(customerId),
  20. PRIMARY KEY (orderId)
  21. );
  22. CREATE TABLE order_details (
  23. orderId INT,
  24. itemId INT,
  25. quantity INT,
  26. FOREIGN KEY (itemId) REFERENCES items(itemId),
  27. PRIMARY KEY (orderId, itemId)
  28. );
  29. INSERT INTO customers VALUES('101', 'Martin', 'Prague');
  30. INSERT INTO customers VALUES('107', 'Herman', 'Madrid');
  31. INSERT INTO customers VALUES('110', 'Pedro', 'Moscow');
  32. INSERT INTO items VALUES('3786', 'Net', 35.0);
  33. INSERT INTO items VALUES('4011', 'Racket', 65.0);
  34. INSERT INTO items VALUES('9132', 'Pack-3', 4.75);
  35. INSERT INTO items VALUES('5794', 'Pack-6', 5.0);
  36. INSERT INTO items VALUES('3141', 'Cover', 10.0);
  37. INSERT INTO orders VALUES('2301', '101', '2011-02-23');
  38. INSERT INTO orders VALUES('2302', '107', '2011-02-25');
  39. INSERT INTO orders VALUES('2303', '110', '2011-02-27');
  40. INSERT INTO order_details VALUES ('2301', '3786', 3);
  41. INSERT INTO order_details VALUES ('2301', '4011', 6);
  42. INSERT INTO order_details VALUES ('2301', '9132', 8);
  43. INSERT INTO order_details VALUES ('2302', '5794', 4);
  44. INSERT INTO order_details VALUES ('2303', '4011', 2);
  45. INSERT INTO order_details VALUES ('2303', '3141', 2);
  46. SELECT order_details.orderId, SUM(items.price * order_details.quantity)
  47. FROM order_details
  48. INNER JOIN items on items.itemId=order_details.itemId
  49. group by order_details.orderId ORDER BY sum ASC;
  50. SELECT customers.customerName, customers.city FROM customers
  51. INNER JOIN orders ON customers.customerId=orders.customerId
  52. INNER JOIN order_details ON order_details.orderId=orders.orderId
  53. GROUP BY customers.customerId
  54. ORDER BY SUM(order_details.quantity) DESC
  55. LIMIT 1;
  56. -- Exercise 2
  57. -- Automated insert
  58. CREATE TABLE loan_books
  59. (school VARCHAR(50),
  60. teacher VARCHAR(30),
  61. course VARCHAR(40),
  62. room VARCHAR(10),
  63. grade VARCHAR(15),
  64. book VARCHAR(60),
  65. publisher VARCHAR(30),
  66. loanDate DATE,
  67. PRIMARY KEY (school, teacher, course)
  68. );
  69. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'Chad Russell', 'Logical Thinking', '1.A01', '1st grade', 'Learning and teaching in early childhood education', 'BOA Editions', '2010-09-09');
  70. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'Chad Russell', 'Writing', '1.A01', '1st grade', 'Preschool, N56', 'Taylor & Francis Publishing', '2010-05-05');
  71. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'Chad Russell', 'Numerical thinking', '1.A01', '1st grade', 'Learning and teaching in early childhood education', 'BOA Editions', '2010-05-05');
  72. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'E.F.Codd', 'Spatial, Temporal and Causal Thinking', '1.B01', '1st grade', 'Early Childhood Education N9', 'Prentice Hall', '2010-05-06');
  73. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'E.F.Codd', 'Numerical thinking', '1.B01', '1st grade', 'Learning and teaching in early childhood education', 'BOA Editions', '2010-05-06');
  74. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'Jones Smith', 'Writing', '1.A01', '2nd grade', 'Learning and teaching in early childhood education', 'BOA Editions', '2010-09-09');
  75. INSERT INTO loan_books VALUES ('Horizon Education Institute', 'Jones Smith', 'English', '1.A01', '2nd grade', 'Know how to educate: guide for Parents and Teachers', 'McGraw Hill', '2010-05-05');
  76. INSERT INTO loan_books VALUES ('Bright Institution', 'Adam Baker', 'Logical Thinking', '2.B01', '1st grade', 'Know how to educate: guide for Parents and Teachers', 'McGraw Hill', '2010-12-18');
  77. INSERT INTO loan_books VALUES ('Bright Institution', 'Adam Baker', 'Numerical Thinking', '2.B01', '1st grade', 'Learning and teaching in early childhood education', 'BOA Editions', '2010-05-06');
  78. CREATE TABLE schools (
  79. schoolId SERIAL,
  80. schoolName VARCHAR(50),
  81. PRIMARY KEY (schoolId)
  82. );
  83. CREATE TABLE teachers (
  84. teacherId SERIAL,
  85. teacherName VARCHAR(30),
  86. PRIMARY KEY (teacherId)
  87. );
  88. CREATE TABLE courses (
  89. courseId SERIAL,
  90. courseName VARCHAR(40),
  91. PRIMARY KEY (courseId)
  92. );
  93. CREATE TABLE rooms (
  94. roomId SERIAL,
  95. roomName VARCHAR(40),
  96. PRIMARY KEY (roomId)
  97. );
  98. CREATE TABLE grades (
  99. gradeId SERIAL,
  100. gradeName VARCHAR(15),
  101. PRIMARY KEY (gradeId)
  102. );
  103. CREATE TABLE publishers (
  104. publisherId SERIAL,
  105. publisherName VARCHAR(30),
  106. PRIMARY KEY (publisherId)
  107. );
  108. CREATE TABLE books (
  109. bookId SERIAL,
  110. bookName VARCHAR(60),
  111. publisherId INT,
  112. FOREIGN KEY (publisherId) REFERENCES publishers(publisherId),
  113. PRIMARY KEY (bookId)
  114. );
  115. CREATE TABLE lessons (
  116. lessonId SERIAL,
  117. schoolId INT,
  118. teacherId INT,
  119. courseId INT,
  120. roomId INT,
  121. gradeId INT,
  122. FOREIGN KEY (teacherId) REFERENCES teachers(teacherId),
  123. FOREIGN KEY (courseId) REFERENCES courses(courseId),
  124. FOREIGN KEY (roomId) REFERENCES rooms(roomId),
  125. FOREIGN KEY (gradeId) REFERENCES grades(gradeId),
  126. PRIMARY KEY (lessonId)
  127. );
  128. CREATE TABLE loans (
  129. loanId SERIAL,
  130. lessonId INT,
  131. bookId INT,
  132. loanDate DATE,
  133. FOREIGN KEY (lessonId) REFERENCES lessons(lessonId),
  134. FOREIGN KEY (bookId) REFERENCES books(bookId),
  135. PRIMARY KEY (loanId)
  136. );
  137. INSERT INTO schools (schoolName) SELECT DISTINCT school FROM loan_books;
  138. INSERT INTO teachers (teacherName) SELECT DISTINCT teacher FROM loan_books;
  139. INSERT INTO courses (courseName) SELECT DISTINCT course FROM loan_books; -- Inserted Numerical thinking 2 times because of case sensitivity. Not gonna change anything.
  140. INSERT INTO rooms (roomName) SELECT DISTINCT room FROM loan_books;
  141. INSERT INTO grades (gradeName) SELECT DISTINCT grade FROM loan_books;
  142. INSERT INTO publishers (publisherName) SELECT DISTINCT publisher FROM loan_books;
  143. INSERT INTO books (bookName, publisherId) SELECT DISTINCT loan_books.book, publishers.publisherId FROM loan_books INNER JOIN publishers ON publishers.publisherName=loan_books.publisher;
  144. INSERT INTO lessons (schoolId, teacherId, courseId, roomId, gradeId) SELECT DISTINCT schools.schoolId, teachers.teacherId, courses.courseId, rooms.roomId, grades.gradeId FROM loan_books
  145. INNER JOIN schools ON schools.schoolName=loan_books.school
  146. INNER JOIN teachers ON teachers.teacherName=loan_books.teacher
  147. INNER JOIN courses ON courses.courseName=loan_books.course
  148. INNER JOIN rooms ON rooms.roomName=loan_books.room
  149. INNER JOIN grades ON grades.gradeName=loan_books.grade;
  150. INSERT INTO loans (lessonId, bookId, loanDate) SELECT DISTINCT lessons.lessonId, books.bookId, loan_books.loanDate FROM loan_books
  151. INNER JOIN schools ON schools.schoolName=loan_books.school
  152. INNER JOIN teachers ON teachers.teacherName=loan_books.teacher
  153. INNER JOIN courses ON courses.courseName=loan_books.course
  154. INNER JOIN rooms ON rooms.roomName=loan_books.room
  155. INNER JOIN grades ON grades.gradeName=loan_books.grade
  156. INNER JOIN books ON books.bookName=loan_books.book
  157. INNER JOIN lessons ON lessons.gradeId=grades.gradeId and lessons.roomId=rooms.roomId and lessons.courseId=courses.courseId and lessons.teacherId=teachers.teacherId;
  158. SELECT DISTINCT publishers.publisherName, books.bookName, schools.schoolName FROM books
  159. INNER JOIN loans ON loans.bookId=books.bookId
  160. INNER JOIN lessons ON lessons.lessonId=loans.lessonId
  161. INNER JOIN schools ON schools.schoolId=lessons.schoolId
  162. INNER JOIN publishers ON publishers.publisherId=books.publisherId
  163. ORDER BY publishers.publisherName;
  164. SELECT DISTINCT ON (schools.schoolName) schools.schoolName, publishers.publisherName, books.bookName, loans.loanDate FROM loans
  165. INNER JOIN lessons ON lessons.lessonId=loans.lessonId
  166. INNER JOIN schools ON schools.schoolId=lessons.schoolId
  167. INNER JOIN books ON books.bookId=loans.bookId
  168. INNER JOIN publishers ON publishers.publisherId=books.publisherId
  169. ORDER BY schools.schoolName, loans.loanDate DESC, 1;