Aussehen
Datenabfragen
📝 Projektion
- Wähle alle Einträge aus der Tabelle
usersaus. - Gib alle Benutzernamen (
username) aususersaus. - Gib alle Benutzernamen (
username) und echten Namen (name) aller Einträge aususersaus. - Gib die Wohnorte aller Mitglieder aus.
Expertenaufgabe: Gib alle Passwörter aus. Informiere dich hier, warum auch dein eigenes Passwort so komisch aussieht und warum das notwendig ist.
ORDER BY
Um die Ergebnisse zu sortieren, kannst du an deine Anfrage den Befehl ORDER BY anfügen. ASC sorgt für eine ansteigende und DESC für eine absteigende Sortierung. Hier findest du eine ausführliche Erklärung.
- Ordne die Mitglieder nach ihrem Benutzernamen in alphabetischer Reihenfolge, um sie schneller durchsuchen zu können.
- Beim ersten User-Treffen sollen die größten Mitglieder beim Aufhängen der Dekoration helfen. Finde die größten Mitglieder. Ordne dazu die Mitglieder nach deren Größe absteigend.
- Kehre die Reihenfolge der Tabelle
usersum.
DISTINCT
Fügst du nach dem SELECT den Befehl DISTINCT ein, so wird jede Zeile nur einmal ausgegeben. Dies ist etwa praktisch, wenn du wissen möchtest, welche Arten von Büchern es gibt.
- Gib jeden Wohnort nur einmal aus.
- Gib jede Benutzerrolle nur einmal aus. Welche Benutzerrolle hat
admin?
LIMIT
Wenn das Netzwerk sehr langsam ist dauert es eine Weile bis alle Mitglieder angezeigt werden. Um nur die ersten Einträge anzuzeigen, kannst du den LIMIT Befehl verwenden:
sql
SELECT username FROM users LIMIT 25- Für ein Gewinnspiel sollen die ersten 3 registrierten Mitglieder einen Preis erhalten. Zeige diese an.
- Für ein Fashion-Shooting sucht InstaHub 5 große Models. Wer sind die 5 größten Mitglieder?
MIN / MAX
Du suchst nur das Extreme? Dann hilft dir der MAX Befehl weiter:
sql
SELECT MAX(centimeters) AS "Maximale Körpergröße:" FROM users- Zeige wie groß das kleinste Mitglied ist.
- Zeige wie alt als das älteste Mitglied ist.
- Zeige an wann sich zuletzt ein Mitglied registriert hat.
COUNT
Mit COUNT kannst du die Einträge aus der Tabelle zählen:
sql
SELECT COUNT(*) AS "Registrierte Mitglieder" FROM users- Ermittle mithilfe des obigen Befehls, wie viele Mitglieder dein InstaHub hat.
GROUP BY
Wenn du nicht die gesamte Menge aller Mitglieder wissen möchtest, sondern die Anzahl etwas differenzierter haben möchtest, kannst du auch die Einträge bezogen auf eine gleiche Eigenschaft auszählen lassen:
sql
SELECT city, COUNT(*) AS "Mitglieder je Stadt" FROM users GROUP BY city- Gib die Mitglieder je Stadt aus.
- Prüfe, ob es Mitglieder gibt, die am gleichen Tag geboren wurden.
Übungen
- Gib die Mitgliedernamen entgegen der alphabetischen Reihenfolge aus.
- Gib die Namen der 3 Städte mit den meisten Mitgliedern aus.
- Gib an, aus wie vielen Ländern die Mitglieder kommen.
📝 Selektion (Auswahl)
Hinweis: Einige Fragen lassen sich nicht unmittelbar als SQL-Satz umbauen. Schaue daher in der vollständigen Tabelle nach, wie die Informationen abgelegt sind.
- Wähle alle Einträge aus der Tabelle users aus, bei denen das Geschlecht (gender) weiblich (female) ist.
- Wähle alle Mitglieder aus Deutschland aus.
- Wähle alle Mitglieder aus, die in Leipzig wohnen.
- Zeige nur Lara Falkenstein an.
- Wähle alle Mitglieder mit der Rolle user aus.
- Ersetze in Aufgabe 5
=durch!=. - Notiere was
!=bedeutet.
Größer und Kleiner
Neben dem bekannten = kannst du auch < und > verwenden, um Bereiche von Werten auszuwählen.
- Gib alle Mitglieder aus, die unter 1,80 Meter groß sind.
- Prüfe, ob es minderjährige Mitglieder gibt. (Beispielformat für ein Geburtsdatum
"2001-01-01")
Oder so ähnlich...
Nicht immer weiß man vollständig, was man sucht. Da hilft der LIKE-Befehl:
sql
SELECT username FROM users WHERE username LIKE "zorn%"- Notiere dir anhand dieser Erklärung, wie der
LIKEBefehl arbeitet. - Welche Mitglieder haben einen Benutzernamen mit einem a?
- Von welchen Mitgliedern beginnt der Vorname mit einem B?
- Enden alle Emailadresse auf
instahub.test? Tipp: Führe zwei Anfragen aus.
Übungen
- Gib die Namen aller Berliner Mitglieder aus.
- Wie viele Personen wohnen in Leipzig?
- Gib die Nutzernamen aller Mitglieder an, die kleiner sind als du.
- Gib die Stadtnamen aus, wo die meisten Mitglieder mit einem
aim Namen wohnen.
📝 Logische Operatoren
AND, OR, AND NOT
- Erschließe dir anhand der nachfolgenden 3 Beispiele die Funktion der Operatoren
AND,OR,AND NOT. Notiere dies.
sql
SELECT name, city FROM users where city = "Kiel" AND name LIKE "Liam%"sql
SELECT name, city FROM users where city = "Kiel" OR name LIKE "Liam%"sql
SELECT name, city FROM users where city = "Kiel" AND NOT name LIKE "Liam%"- Finde alle Züricher die Mira heißen.
- Finde alle Leipziger Frauen.
- Finde alle Linas und Lenas.
- Sortiere alle Männer nach ihrer Körpergröße, welche mindestens 16 Jahre alt sind.
- Zeige das Geburtsdatum und den Benutzernamen aller Frauen an, die kleiner als 1,60 Meter sind.
- Wähle alle Finn aus, die nicht aus Neustadthausen kommen.
Wechselwirkungen von Einschränkungen
Gesucht werden alle Berliner:
sql
SELECT username, name FROM users where city = "Berlin" AND gender = "male" OR gender = "female"- Führe den Befehl aus und prüfe das Ergebnis, indem du die Abfrage ohne explizite Ausführung des Geschlechts erneut ausführst.
Wenn du mehr als 2 Bedingungen hast, ist es manchmal sinnvoll anzugeben, welche zuerst betrachtet werden müssen. Dazu kannst du Klammern verwenden:
sql
SELECT username, name FROM users where city = "Berlin" AND (gender = "male" OR gender = "female")- Die Leipziger Herrenmanschaft im Basketball sucht Männer aus Leipzig, die größer als 185 Zentimeter sind, um diese zu fragen, ob sie mitspielen möchten.
- Die Bundeswehr sucht Rekruten. Gib die Namen aller Männer über 165cm und alle Frauen über 160cm aus.
- Erna sucht eine Bekannte aus München. Ihr Vorname war entweder Mika oder Mila.
📝 Tabellen gemeinsam abfragen
INNER JOIN
- Mit welchem SQL-Befehl kann InstaHub alle Photos eines Mitglieds anzeigen? Liste die Links zu allen Photos von ballballphilosophin auf.
- Wer sind die 20 Follower von klangkunstoskar? a. Ermittle die id von klangkunstoskar. b. Liste alle Follower klangkunstoskar auf. Beachte das in der Datenbank der Nutzer in
following_iddem Nutzer infollower_idfolgt. - Es soll Werbung an alle Abenteurer:innen verschickt werden. Finde alle Photos die den Hashtag #abenteuer enthalten. Gib den Namen, die Emailadresse, den Geburtstag und die Stadt der zugehörigen Benutzer aus.
Expertenaufgabe: Ändere den Befehl der vorherigen Aufgabe so, dass der hashtag aus der Tabelle tags genommen wird.
- Gib alle Kommentare und die zugehörigen Benutzernamen der Verfasser aus Wien an.
- Erstelle eine Liste, welche in absteigender Reihenfolge die Nutzer mit den meisten Photos beinhaltet.
- Erstelle eine Liste, wo für jedes Leipziger Mitglied die Anzahl seiner Fotos aufgeführt ist.
- Gib die 10 beliebtesten Photos aus.
Expertenaufgabe: In Aufgabe 2 hast du mit zwei Abfragen die Follower von klangkunstoskar ermittelt. Das geht auch einfacher. Anstelle zweier getrennter Abfragen kannst du die Bedingung auch wie folgt schreiben:
sql
WHERE follows.follower_id = (SELECT id FROM users WHERE username="klangkunstoskar")- Formuliere die Abfrage aus Aufgabe 2 so um, dass sie mit einer Abfrage ausgeführt wird.
- Gib aus, wem lesezornlotta folgt.
LEFT JOIN ON
- Alle Mitglieder, die noch nie ein Poto hochgeladen haben, sollen per Push-Notification dazu ermutigt werden. Ermittle dafür deren Benutzer-ID.
- Lara würde gern allen Mitgliedern eine Mail schreiben, welche noch nie ein Photo kommentiert haben. Suche deren Mail-Adresse heraus.