fork download
  1. CREATE TABLE Università(
  2. nome VARCHAR(30) PRIMARY KEY,
  3. valutazione INTEGER,
  4. CHECK ((valutazione<=5)AND(valutazione>=0))
  5. );
  6.  
  7. CREATE TABLE Studenti(
  8. matricola INTEGER PRIMARY KEY,
  9. università REFERENCES Università(nome),
  10. nome VARCHAR(30) NOT NULL,
  11. cognome VARCHAR(30) NOT NULL
  12. );
  13.  
  14. CREATE TABLE Professori(
  15. codice INTEGER PRIMARY KEY,
  16. nome VARCHAR(30) NOT NULL,
  17. cognome VARCHAR(30) NOT NULL,
  18. università VARCHAR(30) REFERENCES Univeristà(nome)
  19. );
  20.  
  21.  
  22. CREATE TABLE Corsi(
  23. codice CHAR(5) PRIMARY KEY,
  24. nome VARCHAR(30),
  25. università VARCHAR(30) REFERENCES Università(nome),
  26. con voto BOOL NOT NULL,
  27. professore INTEGER REFERENCES Professori(codice)
  28. );
  29.  
  30. CREATE TABLE Aule(
  31. numero INTEGER PRIMARY KEY,
  32. università VARCHAR(30) REFERENCES Università(nome)
  33. );
  34.  
  35. CREATE TABLE AuleCorsi(
  36. "aula" INTEGER REFERENCES Aule("numero"),
  37. "corso" CHAR(5) REFERENCES Corsi("codice"),
  38. PRIMARY KEY ("aula", "corso")
  39. );
  40.  
  41. CREATE TABLE Tesi(
  42. "studente" INTEGER REFERENCES Studenti(matricola) PRIMARY KEY,
  43. "professore" INTEGER REFERENCES Professori(codice),
  44. "titolo" VARCHAR(40),
  45. "sostenuta" BOOL NOT NULL,
  46. "valutazione" INT,
  47. CHECK ( (NOT("sostenuta")AND("valutazione"=NULL)) OR ("sostenuta" AND "valutazione">=18 AND
  48.  
  49. "valutazione"<=30) )
  50. );
  51.  
  52.  
  53. /* ORA RIEMPIO IL DATABASE CON ALCUNI DATI */
  54.  
  55.  
  56. INSERT INTO Università VALUES ('Unipi','4');
  57. INSERT INTO Università VALUES ('URSS','3');
  58. INSERT INTO Università VALUES ('Unimerda','0');
  59. INSERT INTO Università VALUES ('Unistronzi','5');
  60.  
  61. INSERT INTO Studenti VALUES ('1','Unimerda','Alfa','Beto');
  62. INSERT INTO Studenti VALUES ('2','URSS','Grande','Stronzo');
  63. INSERT INTO Studenti VALUES ('3','Unistronzi','Grande','Merda');
  64. INSERT INTO Studenti VALUES ('4','URSS','Pinco','Pallino');
  65. INSERT INTO Studenti VALUES ('5','URSS','iolo','Merda');
  66. INSERT INTO Studenti VALUES ('6','URSS','Testa','di Cazzo');
  67. INSERT INTO Studenti VALUES ('7','Unipi','Pezzo','di Merda');
  68. INSERT INTO Studenti VALUES ('8','Unipi','Bingo','Bongo');
  69. INSERT INTO Studenti VALUES ('9','Unimerda','Uomo','di Merda');
  70. INSERT INTO Studenti VALUES ('10','Unistronzi','Rincoglio','Nito');
  71. INSERT INTO Studenti VALUES ('11','Unistronzi','Rincreti','Nito');
  72. INSERT INTO Studenti VALUES ('12','Unimerda','Scemu','Nito');
  73. INSERT INTO Studenti VALUES ('13','Unipi','Grande','Stronzo');
  74. INSERT INTO Studenti VALUES ('14','Unipi','Pezzo','di Stronzo');
  75. INSERT INTO Studenti VALUES ('15','Unimerda','Grandissima','Merda');
  76.  
  77. INSERT INTO Professori VALUES ('1','Porco','Dio','Unipi');
  78. INSERT INTO Professori VALUES ('2','Puttana','Madonna','Unipi');
  79. INSERT INTO Professori VALUES ('3','Cane','Dio','URSS');
  80. INSERT INTO Professori VALUES ('4','Porco','Dio','URSS');
  81. INSERT INTO Professori VALUES ('5','Cazzo','di Budda','Unimerda');
  82. INSERT INTO Professori VALUES ('6','Potta','di Kalì','Unimerda');
  83. INSERT INTO Professori VALUES ('7','Orca','Madonna','Unistronzi');
  84.  
  85. INSERT INTO Corsi VALUES ('CAZ01','Cazzometria','URSS','1','1');
  86. INSERT INTO Corsi VALUES ('MRD01','Merdologia applicata','Unipi','1','1');
  87. INSERT INTO Corsi VALUES ('CAZ02','Ingegneria del cazzo','Unipi','1','2');
  88. INSERT INTO Corsi VALUES ('SCH01','Schifo applicato','URSS','1','3');
  89. INSERT INTO Corsi VALUES ('SCR01','Scoreggiocultura','Unimerda','1','5');
  90. INSERT INTO Corsi VALUES ('SCR02','Scoreggiocultura','Unipi','0','5');
  91. INSERT INTO Corsi VALUES ('MRD02','Scienze della merda','Unimerda','1','6');
  92. INSERT INTO Corsi VALUES ('CAZ03','Cazzometria','Unistronzi','1','7');
  93. INSERT INTO Corsi VALUES ('SEG01','Segologia antica','Unistronzi','1','7');
  94.  
  95. INSERT INTO Aule VALUES ('01',"Unipi");
  96. INSERT INTO Aule VALUES ('02',"Unipi");
  97. INSERT INTO Aule VALUES ('03',"Unipi");
  98. INSERT INTO Aule VALUES ('04',"Unipi");
  99. INSERT INTO Aule VALUES ('05',"Unipi");
  100. INSERT INTO Aule VALUES ('06',"URSS");
  101. INSERT INTO Aule VALUES ('07',"URSS");
  102. INSERT INTO Aule VALUES ('08',"URSS");
  103. INSERT INTO Aule VALUES ('09',"Unimerda");
  104. INSERT INTO Aule VALUES ('10',"Unimerda");
  105. INSERT INTO Aule VALUES ('11',"Unistronzi");
  106.  
  107. INSERT INTO AuleCorsi VALUES ('02','MRD01');
  108. INSERT INTO AuleCorsi VALUES ('06','CAZ01');
  109. INSERT INTO AuleCorsi VALUES ('02','CAZ02');
  110. INSERT INTO AuleCorsi VALUES ('01','MRD01');
  111. INSERT INTO AuleCorsi VALUES ('11','CAZ03');
  112. INSERT INTO AuleCorsi VALUES ('07','SCH01');
  113. INSERT INTO AuleCorsi VALUES ('09','SCR01');
  114. INSERT INTO AuleCorsi VALUES ('01','SCR02');
  115. INSERT INTO AuleCorsi VALUES ('10','MRD02');
  116. INSERT INTO AuleCorsi VALUES ('11','SEG01');
  117.  
  118. INSERT INTO Tesi VALUES ('04','3','Leccare il culo al professore','1','23');
  119. INSERT INTO Tesi VALUES ('10','7','Per un futuro di merda','0',NULL);
  120. INSERT INTO Tesi VALUES ('12','6','La merda e i suoi usi','1','30');
  121. INSERT INTO Tesi VALUES ('03','1','Misurazione del cazzo nei secoli','1','18');
  122. INSERT INTO Tesi VALUES ('07','1','Cazzometria e Merda, le prospettive','0',NULL);
  123.  
  124.  
  125. /*ORA FACCIO INTERROGAZIONI AL DATABASE */
  126.  
  127.  
  128. /* crea un elenco con tutti i cognomi presenti di alunni e professori*/
  129. CREATE TABLE Cognomi (
  130. cognome VARCHAR(30) PRIMARY KEY
  131. );
  132.  
  133. INSERT INTO Cognomi
  134. SELECT DISTINCT cognome FROM Studenti UNION
  135. SELECT DISTINCT cognome FROM Professori;
  136.  
  137. SELECT "Tutti i cognomi";
  138. SELECT *
  139. FROM Cognomi;
  140.  
  141.  
  142.  
  143. /* esempio di join con prodotto cartesiano Aule x Corsi x AuleCorsi) */
  144. SELECT "Associa ad ogni aula i corsi dai quali viene utilizzata";
  145.  
  146. SELECT Aule.numero, Aule.università, Corsi.codice, Corsi.nome, Corsi.professore, Corsi.università
  147. FROM Aule, Corsi, AuleCorsi
  148. WHERE (aula=numero AND corso=codice);
  149.  
  150.  
  151.  
  152. SELECT "Seleziona tutte le aule vuote";
  153.  
  154. SELECT *
  155. FROM Aule
  156. MINUS
  157. SELECT Aule.numero,Aule.università
  158. FROM AuleCorsi JOIN Aule ON AuleCorsi.aula = Aule.numero;
  159.  
  160.  
  161.  
  162. SELECT "Elenco dei titoli delle tesi e delle loro valutazioni in decimi";
  163.  
  164. SELECT titolo, valutazione/3 AS "valutazione in decimi";
  165. FROM Tesi
  166. WHERE (Sostenuta);
  167.  
  168.  
  169.  
  170. SELECT "Associa ad ongi studente il professore con il quale ha sostenuto o sosterrà la tesi";
  171.  
  172. SELECT Tesi.titolo, Studenti.nome, Studenti.cognome, Professori.nome, Professori.cognome
  173. FROM (Tesi JOIN Studenti ON Tesi.studente = Studenti.matricola)
  174. JOIN Professori ON Tesi.professore = Professori.codice;
  175.  
  176.  
  177.  
  178. SELECT "Elenco di tutti i campi nei quali si svolgono i corsi";
  179.  
  180. SELECT DISTINCT SUBSTRING(nome,1,3)
  181. FROM Corsi;
  182.  
  183.  
  184.  
  185. SELECT "Conteggio degli studenti...";
  186.  
  187. SELECT COUNT (*)
  188. FROM Studenti;
  189.  
  190.  
  191.  
  192. SELECT "Conteggio degli studenti con nomi diversi";
  193.  
  194. SELECT COUNT (DISTINCT nome)
  195. FROM Studenti;
  196.  
  197.  
  198.  
  199. SELECT "Dati sulle valutazioni delle tesi (min/max/media)";
  200.  
  201. SELECT MIN (votazione), MAX (valutazione), AVG(valutazione)
  202. FROM Tesi;
  203.  
  204.  
  205.  
  206. SELECT "conteggio studenti in ongi università";
  207.  
  208. SELECT università, COUNT(*)
  209. FROM Studenti
  210. GROUP BY università;
  211.  
  212.  
  213.  
  214. SELECT "conteggio degli studenti in ogni università con valutazione >= 3";
  215.  
  216. SELECT Studenti.università, COUNT(*)
  217. FROM Studenti JOIN Università ON Studenti.università = Università.nome
  218. GROUP BY Studenti.università
  219. HAVING (Università.valutazione >= 3);
  220.  
  221.  
  222.  
  223. SELECT "Le tre migliori università";
  224.  
  225. SELECT *
  226. FROM Università
  227. ORDER BY Valutazione DESC
  228. LIMIT 3;
Success #stdin #stdout #stderr 0.01s 5296KB
stdin
Standard input is empty
stdout
Tutti i cognomi
Beto
Bongo
Dio
Madonna
Merda
Nito
Pallino
Stronzo
di Budda
di Cazzo
di Kalì
di Merda
di Stronzo
Associa ad ogni aula i corsi dai quali viene utilizzata
2|Unipi|MRD01|Merdologia applicata|1|Unipi
6|URSS|CAZ01|Cazzometria|1|URSS
2|Unipi|CAZ02|Ingegneria del cazzo|2|Unipi
1|Unipi|MRD01|Merdologia applicata|1|Unipi
11|Unistronzi|CAZ03|Cazzometria|7|Unistronzi
7|URSS|SCH01|Schifo applicato|3|URSS
9|Unimerda|SCR01|Scoreggiocultura|5|Unimerda
1|Unipi|SCR02|Scoreggiocultura|5|Unipi
10|Unimerda|MRD02|Scienze della merda|6|Unimerda
11|Unistronzi|SEG01|Segologia antica|7|Unistronzi
Seleziona tutte le aule vuote
Elenco dei titoli delle tesi e delle loro valutazioni in decimi
Associa ad ongi studente il professore con il quale ha sostenuto o sosterrà la tesi
Misurazione del cazzo nei secoli|Grande|Merda|Porco|Dio
Leccare il culo al professore|Pinco|Pallino|Cane|Dio
Cazzometria e Merda, le prospettive|Pezzo|di Merda|Porco|Dio
Per un futuro di merda|Rincoglio|Nito|Orca|Madonna
La merda e i suoi usi|Scemu|Nito|Potta|di Kalì
Elenco di tutti i campi nei quali si svolgono i corsi
Conteggio degli studenti...
15
Conteggio degli studenti con nomi diversi
12
Dati sulle valutazioni delle tesi (min/max/media)
conteggio studenti in ongi università
URSS|4
Unimerda|4
Unipi|4
Unistronzi|3
conteggio degli studenti in ogni università con valutazione >= 3
URSS|4
Unipi|4
Unistronzi|3
Le tre migliori università
Unistronzi|5
Unipi|4
URSS|3
stderr
Error: near line 154: near "SELECT": syntax error
Error: near line 164: no such column: titolo
Error: near line 165: near "FROM": syntax error
Error: near line 180: no such function: SUBSTRING
Error: near line 201: no such column: votazione