Advertisement
Guest User

Untitled

a guest
Jan 12th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 KB | None | 0 0
  1. SET search_path TO 'TPNOTE';
  2.  
  3. DROP TABLE IF EXISTS Lecture;
  4. DROP TABLE IF EXISTS Possède;
  5. DROP TABLE IF EXISTS Critique;
  6. DROP TABLE IF EXISTS Utilisateur;
  7. DROP TABLE IF EXISTS Livre;
  8.  
  9. CREATE TABLE Livre (
  10. idLivre int NOT NULL PRIMARY KEY,
  11. isbn text NOT NULL UNIQUE,
  12. titre text NOT NULL,
  13. auteur text NOT NULL);
  14.  
  15. INSERT INTO Livre VALUES
  16. (1, 'abcd', 'Peter Pan', 'Nicolas'),
  17. (2, 'efgh', 'Pinocchio', 'Henri'),
  18. (3, 'ijkl', 'Zelda', 'Thomas'),
  19. (4, 'mnop', 'A ne pas lire', 'Ingrid'),
  20. (5, 'qrst', 'A ne voir', 'Ingrid');
  21.  
  22. CREATE TABLE Utilisateur (
  23. login text NOT NULL PRIMARY KEY,
  24. mdp text NOT NULL,
  25. email text NOT NULL UNIQUE CHECK (email LIKE '%@%'));
  26.  
  27. INSERT INTO Utilisateur VALUES
  28. ('Mario', 'mushroom', 'Mario@hotmail.fr'),
  29. ('Peach', 'princesse', 'Peach@hotmail.fr'),
  30. ('Link', 'mastersword', 'Link@hotmail.fr');
  31.  
  32. CREATE TABLE Critique (
  33. idLivre int NOT NULL REFERENCES Livre(idLivre),
  34. login text NOT NULL REFERENCES Utilisateur(login),
  35. note int NOT NULL,
  36. texte text NOT NULL CHECK (LENGTH(texte)>=10),
  37. PRIMARY KEY (idLivre, login));
  38.  
  39. INSERT INTO Critique VALUES
  40. (3, 'Link', 10, 'j adore le hero'),
  41. (3, 'Mario', 6, 'je n aime pas beaucoup la princesse'),
  42. (1, 'Peach', 7, 'se lit bien'),
  43. (1, 'Mario', 8, 'le hero est cool'),
  44. (2, 'Peach', 4, 'decevant comme livre');
  45.  
  46. CREATE TABLE Possède (
  47. idLivre int NOT NULL REFERENCES Livre(idLivre),
  48. login text NOT NULL REFERENCES Utilisateur(login),
  49. PRIMARY KEY (idLivre, login));
  50.  
  51. INSERT INTO Possède VALUES
  52. (1, 'Mario'),
  53. (3, 'Mario'),
  54. (1, 'Peach'),
  55. (2, 'Peach'),
  56. (3, 'Link');
  57.  
  58. CREATE TABLE Lecture (
  59. idLivre int NOT NULL REFERENCES Livre(idLivre),
  60. login text NOT NULL REFERENCES Utilisateur(login),
  61. idLecture int NOT NULL,
  62. dateLecture date NOT NULL,
  63. PRIMARY KEY (idLivre, login, idLecture));
  64.  
  65. INSERT INTO Lecture VALUES
  66. (1, 'Mario', 1, '2016-4-1'),
  67. (3, 'Mario', 2, '2015-10-1'),
  68. (1, 'Peach', 3, '2016-9-4'),
  69. (2, 'Peach', 4, '2014-1-9'),
  70. (3, 'Link', 5, '2016-4-20'),
  71. (1, 'Mario', 6, '2016-12-1'),
  72. (2, 'Peach', 7, '2014-12-20');
  73.  
  74. SET search_path TO 'TPNOTE';
  75.  
  76. /*
  77. 4.a
  78.  
  79. SELECT DISTINCT idLivre, titre, auteur FROM Livre
  80. JOIN Lecture USING (idLivre)
  81. WHERE login='Mario';
  82. */
  83.  
  84. /*
  85. 4.b
  86.  
  87. SELECT DISTINCT titre FROM Livre
  88. JOIN Lecture USING (idLivre)
  89. WHERE login='Mario'
  90. AND dateLecture >= '2016-1-1'
  91. AND dateLecture < '2017-1-1';
  92. */
  93.  
  94. /*
  95. 4.c
  96.  
  97. SELECT idLivre, titre, avg(note) AS MoyenneLivre FROM Livre
  98. JOIN Critique USING (idLivre)
  99. GROUP BY idLivre
  100. order by MoyenneLivre DESC;
  101. */
  102.  
  103. /*
  104. 4.d
  105.  
  106. SELECT auteur, count(*) AS Nblecture FROM Livre
  107. JOIN Lecture USING (idLivre)
  108. GROUP BY idLivre;
  109. */
  110.  
  111. /*
  112. 4.e
  113.  
  114. SELECT idLivre, titre FROM Livre
  115. JOIN Lecture USING (idLivre)
  116. WHERE dateLecture >= '2014-1-1'
  117. AND dateLecture < '2015-1-1'
  118. GROUP BY idLivre
  119. HAVING count(*)>=2
  120. */
  121.  
  122. /*
  123. 4.f
  124.  
  125. SELECT idLivre, titre FROM Livre
  126. WHERE idLivre NOT IN ( select idLivre from Lecture)
  127. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement