lehrkraefte:blc:informatik:efi-2023:exam4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
lehrkraefte:blc:informatik:efi-2023:exam4 [2024/04/30 08:43]
Ivo Blöchliger [Freifächer]
lehrkraefte:blc:informatik:efi-2023:exam4 [2024/04/30 08:51]
Ivo Blöchliger [Freifächer]
Line 94: Line 94:
  
 </code> </code>
-Was liefert folgende Abfrage? Kommentieren Sie die einzelnen Teil der Abfrage.+  * Was liefert folgende Abfrage? Kommentieren Sie die einzelnen Teil der Abfrage.
 <code sql> <code sql>
 SELECT score.score,user.name FROM score,user WHERE score.userid=user.id ORDER BY score.score DESC, score.zeit ASC LIMIT 3; SELECT score.score,user.name FROM score,user WHERE score.userid=user.id ORDER BY score.score DESC, score.zeit ASC LIMIT 3;
 </code> </code>
  
-Geben Sie eine Anfrage an, die alle Scores mit Zeitstempel von ''margarethe'' in absteigender Reihenfolge ausgibt. +  * Geben Sie eine Anfrage an, die alle Scores mit Zeitstempel von ''margarethe'' in absteigender Reihenfolge ausgibt.  
 + 
 +<hidden Dump der Datenbank> 
 +Kann mit ''sqlite3 freifach.sqlite < freifach.dump'' (oder einfach copy-paste in sqlite) importiert werden. 
 +<code sql highscore.dump> 
 +PRAGMA foreign_keys=OFF; 
 +BEGIN TRANSACTION; 
 +CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL); 
 +INSERT INTO user VALUES(1,'vreni'); 
 +INSERT INTO user VALUES(2,'hans'); 
 +INSERT INTO user VALUES(3,'ueli'); 
 +INSERT INTO user VALUES(4,'margarethe'); 
 +CREATE TABLE score (id INTEGER PRIMARY KEY AUTOINCREMENT,  
 +  userid INT NOT NULL,  
 +  zeit TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,  
 +  score INT,  
 +  FOREIGN KEY(userid) REFERENCES USER(id)); 
 +INSERT INTO score VALUES(1,1,'2024-04-30 05:41:37',120); 
 +INSERT INTO score VALUES(2,3,'2024-04-30 05:41:47',104); 
 +INSERT INTO score VALUES(3,4,'2024-04-30 05:41:53',84); 
 +INSERT INTO score VALUES(4,2,'2024-04-30 05:42:00',120); 
 +INSERT INTO score VALUES(5,4,'2024-04-30 05:42:39',144); 
 +INSERT INTO score VALUES(6,2,'2024-04-30 05:42:50',110); 
 +DELETE FROM sqlite_sequence; 
 +INSERT INTO sqlite_sequence VALUES('user',4); 
 +INSERT INTO sqlite_sequence VALUES('score',6); 
 +COMMIT; 
 +</code> 
 +</hidden>
  
 ===== Freifächer ===== ===== Freifächer =====
Line 142: Line 170:
 </code> </code>
  
-Schreiben Sie eine Abfragedie die Namen aller Freifächer auflistetdie von ''ueli'' gewählt wurden. +<hidden Dump der Datenbank> 
 +Kann mit ''sqlite3 freifach.sqlite < freifach.dump'' (oder einfach copy-paste in sqlite) importiert werden. 
 +<code sql freifach.dump> 
 +PRAGMA foreign_keys=OFF; 
 +BEGIN TRANSACTION; 
 +CREATE TABLE student (id INTEGER PRIMARY KEY AUTOINCREMENT, 
 +name TEXT NOT NULL); 
 +INSERT INTO student VALUES(1,'vreni'); 
 +INSERT INTO student VALUES(2,'hans'); 
 +INSERT INTO student VALUES(3,'ueli'); 
 +INSERT INTO student VALUES(4,'margarethe'); 
 +CREATE TABLE freifach (id INTEGER PRIMARY KEY AUTOINCREMENT, 
 +name TEXT UNIQUE NOT NULL); 
 +INSERT INTO freifach VALUES(1,'python'); 
 +INSERT INTO freifach VALUES(2,'javascript'); 
 +INSERT INTO freifach VALUES(3,'sql'); 
 +CREATE TABLE wahl (id INTEGER PRIMARY KEY AUTOINCREMENT, 
 +freifachid INTEGER NOT NULL, 
 +studentid INTEGER NOT NULL, 
 +FOREIGN KEY(freifachid) REFERENCES freifach(id), 
 +FOREIGN KEY(studentid) REFERENCES student(id)); 
 +INSERT INTO wahl VALUES(1,1,1); 
 +INSERT INTO wahl VALUES(2,1,3); 
 +INSERT INTO wahl VALUES(3,2,3); 
 +INSERT INTO wahl VALUES(4,1,4); 
 +INSERT INTO wahl VALUES(5,2,4); 
 +INSERT INTO wahl VALUES(6,3,4); 
 +DELETE FROM sqlite_sequence; 
 +INSERT INTO sqlite_sequence VALUES('student',4); 
 +INSERT INTO sqlite_sequence VALUES('freifach',3); 
 +INSERT INTO sqlite_sequence VALUES('wahl',6); 
 +COMMIT; 
 +</code> 
 +</hidden>
  
-Erklären Sie folgende Anfrage und deren Ausgabe:+  * Erklären Sie folgende Anfrage und deren Ausgabe:
 <code txt> <code txt>
 sqlite> select freifach.name, count(freifachid) from wahl,freifach where freifach.id=wahl.freifachid group by freifachid; sqlite> select freifach.name, count(freifachid) from wahl,freifach where freifach.id=wahl.freifachid group by freifachid;
Line 154: Line 214:
 sql                         sql                        
 </code> </code>
 +
 +  * Schreiben Sie eine Abfrage, die die Namen aller Freifächer auflistet, die von ''ueli'' gewählt wurden.
 +  * Erklären Sie, warum eine dritte Tabelle ''wahl'' nötig ist, insbesondere warum diese Information nicht sinnvoll in den Tabellen ''student'' und ''freifach'' gespeichert werden kann.
 +
 +
  • lehrkraefte/blc/informatik/efi-2023/exam4.txt
  • Last modified: 2024/04/30 08:58
  • by Ivo Blöchliger