InstaHub ist ein soziales Netzwerk, welches im Unterricht eingesetzt wird, um die Themen Datenbanken, Umgang mit sozialen Netzen und Datenschutz zu lehren.1) Es wird ein soziales Netzwerk simuliert, in dem du die administrative Rolle einnimmst. Wir lassen also die theoretische Entity-Relationship-Modellierung hinter uns und wollen nun praktisch arbeiten.
SQL ist eine Datenbanksprache zum Verwalten und Auswerten einer Datenbasis. Wir wollen sie erlernen, um an erweiterte Informationen unseres Hubs zu kommen.
Das Ausführen des SQL-Befehls
SELECT id, username, name, city FROM users;
liefert die folgende Ergebnistabelle: Sie zeigt einen Ausschnitt aus der Entitymenge users mit den gewählten Attributen id, username, name, city. Zu jeder Entität sind zu den verschiedenen Eigenschaften nun auch Attributwerte eingetragen. Diese Informationen konnten den bisherigen ER-Diagrammen nicht entnommen werden.
SQL-Abfragen sind stets gleich aufgebaut. Sie beginnen mit einer Auswahl von Attributen, gefolgt von Tabellennamen und gegebenenfalls weiterer Einschränkungen oder Bedingungen.
SELECT attribut1, attribut2, ... FROM tabelle WHERE bedingung ORDER BY attribut;
SELECT * FROM users;
SELECT id, name FROM users;
SELECT * FROM photos;
SELECT city FROM users;
SELECT DISTINCT city FROM users;
SELECT city FROM users ORDER BY city;
SELECT username, city FROM users ORDER BY city DESC;
SELECT DISTINCT gender FROM users;
SELECT name, centimeters FROM users ORDER BY centimeters;
SELECT name, centimeters FROM users ORDER BY centimeters DESC, name;
SELECT * FROM users WHERE city = "Berlin";
SELECT * FROM users WHERE city != "Berlin"; -- "!=" steht für ungleich. Folglich werden alle Mitglieder*innen ausgegeben, die nicht in Berlin wohnen.
SELECT * FROM users WHERE city LIKE "B%"; -- % ist ein Platzhalter für beliebig viele Zeichen. -- _ ist ein Platzhalter für genau ein Zeichen.
SELECT * FROM users WHERE name LIKE "%mann" ORDER BY name ASC;
SELECT name FROM users WHERE centimeters < 166 AND gender = "female"; -- Durch die Und-Verknüpfung werden nur Dateneinträge gezeigt, die gleichzeitig beide Bedingungen erfüllen. Bei jedem Eintrag gilt also, dass die Person kleiner als 166 cm und weiblich ist.
SELECT name FROM users WHERE centimeters < 180 AND gender = "male";
SELECT name FROM users WHERE (centimeters < 166 AND gender = "female") OR (centimeters < 180 AND gender = "male"); -- Die Klammerung bewirkt, dass beide Bedingungen getrennt voneinander bearbeitet werden. Durch die Oder-Verknüpfung werden dann alle Datensätze gelistet, bei denen die 1., die 2. oder beide Bedingungen erfüllt sind.
SELECT * FROM users, comments WHERE users.username = "stella439" AND users.id = comments.user_id; -- Bei dieser Abfrage müssen zwei Tabellen abgefragt werden. Beide Tabellen haben die Nutzer-ID gemeinsam, weshalb gilt: users.id = comments.user_id. Da die Abfrage über mehrere Tabellen geht, müssen die Attribute mittels der Punktnotation der korrekten Tabelle zugeordnet werden. Dies kennst du bereits aus dem KOAM-Modell.
SELECT users.name FROM users, comments WHERE body LIKE "Kann man das Photo irgendwo kaufen?" AND users.id = comments.user_id AND users.gender = "female"; -- Es erscheint: Greta Bauer mit den Initialien GB. Es geht also in das Vereinigte Königreich.
Mittlerweile hast du einen Einblick in die Datenorganisation deines InstaHubs gewonnen. Aber wie schaut eigentlich das ER-Diagramm zu InstaHub aus?