Welche Notebooks sind zu alt?
Der IT-Support einer Firma bekommt eine einfache Frage. Welche Notebooks wurden vor 2023 gekauft, und wer hat sie?
In einer Tabellenkalkulation würden Sie scrollen und suchen. Eine Datenbank antwortet sofort.
Sie müssen die Frage nur in einer Form stellen, die die Datenbank versteht.
Am Ende dieser Lektion
Notiz
Ich kann eine Datenbank nach den Zeilen fragen, die ich brauche.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Abfrage | eine Frage an eine Datenbank, in SQL geschrieben | |
| Klausel | ein Teil einer Abfrage, den ein Schlüsselwort einleitet | WHERE |
| Bedingung | ein Test, den eine Zeile besteht oder nicht | price < 30 |
| Ergebnis | die Zeilen, die eine Abfrage zurückgibt | |
| Platzhalter | ein Zeichen in einem Muster, das für beliebigen Text steht | % |
| NULL | die Markierung für einen fehlenden Wert |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
WHERE behält die Zeilen, die bestehen
Eine Abfrage beginnt mit SELECT. Es nennt die Spalten. FROM nennt die Tabelle.
WHERE fügt eine Bedingung hinzu. Eine Zeile bleibt nur im Ergebnis, wenn sie besteht. Verbinden Sie Bedingungen mit AND und OR.
Text steht in einfachen Anführungszeichen. Zahlen nicht.
Starten Sie zuerst die zwei Einrichtungszeilen. Sie kennen sie aus der letzten Lektion, und eine Wiederholung schadet nicht.
Das Zertifikat des Servers annehmen
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Abkürzung für den Shop
alias sql='mariadb -h db -u student -pstudent shop -t -e'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nach einem Text suchen
sql "SELECT first_name, city FROM customers WHERE country = 'France' ORDER BY city, first_name"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zwei Bedingungen zugleich
sql "SELECT name, price FROM products WHERE category_id = 4 AND price < 30 ORDER BY price"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Beispiel: die Tests, die Sie nutzen können
| Test | Bedeutung | Beispiel |
|---|---|---|
| = <> | Gleich, ungleich | country = 'Spain' |
| < <= > >= | Kleiner oder größer | price < 30 |
| BETWEEN | In einem Bereich, Enden eingeschlossen | stock BETWEEN 5 AND 10 |
| LIKE | Passt zu einem Muster, % ist beliebiger Text | name LIKE '%Set%' |
| IS NULL | Der Wert fehlt | phone IS NULL |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Bereich, beide Enden eingeschlossen
sql "SELECT name, stock FROM products WHERE stock BETWEEN 5 AND 10 ORDER BY stock, name"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Namen mit einem Muster finden
sql "SELECT name FROM products WHERE name LIKE '%Set%' ORDER BY name"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
NULL heißt fehlend, nicht null
Manche Kunden haben keine Telefonnummer. Die Spalte enthält dann NULL: Es ist nichts bekannt.
NULL ist mit nichts gleich, nicht einmal mit NULL. Darum findet = NULL nie eine Zeile.
Fragen Sie mit IS NULL. Starten Sie beide Runs und vergleichen Sie.
Kunden ohne Telefon zählen
sql "SELECT COUNT(*) AS no_phone FROM customers WHERE phone IS NULL"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Dieselbe Frage, falsch geschrieben
sql "SELECT COUNT(*) AS no_phone FROM customers WHERE phone = NULL"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, phone = NULL finde die fehlenden Nummern. Es findet keine, und es warnt nicht. Ein fehlender Wert ist mit nichts gleich. Schreiben Sie immer IS NULL oder IS NOT NULL.
ORDER BY und LIMIT formen das Ergebnis
Eine Tabelle hat keine feste Reihenfolge. Kommt es darauf an, verlangen Sie sie mit ORDER BY. DESC stellt den größten Wert nach vorn.
LIMIT 3 behält die ersten drei Zeilen des Ergebnisses. OFFSET 2 überspringt vorher zwei.
Nutzen Sie LIMIT mit ORDER BY. Ohne Reihenfolge sagen „die ersten drei“ nichts.
Die drei günstigsten Artikel
sql "SELECT name, price FROM products ORDER BY price LIMIT 3"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zwei überspringen, zwei nehmen
sql "SELECT name, price FROM products ORDER BY price DESC LIMIT 2 OFFSET 2"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Beispiel: wie eine Abfrage gelesen wird
| Schritt | Klausel | Was die Datenbank tut |
|---|---|---|
| 1 | FROM | Wählt die Tabelle |
| 2 | WHERE | Wirft Zeilen weg, die den Test nicht bestehen |
| 3 | SELECT | Behält nur die genannten Spalten |
| 4 | ORDER BY | Bringt die Zeilen in Reihenfolge |
| 5 | LIMIT | Kürzt die Liste auf die verlangte Größe |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Probieren Sie es: Geräte nach Abteilung
-- Geräte der Abteilung Recht oder Vertrieb.
SELECT inventar_nr, modell, abteilung FROM geraete
WHERE abteilung = 'Recht' OR abteilung = 'Vertrieb';
-- Ändern Sie die Abfrage: Geräte, die 2024 oder später gekauft wurden.
Probieren Sie es: die teuersten Geräte
-- Die drei teuersten Geräte, das teuerste zuerst.
SELECT inventar_nr, preis FROM geraete
ORDER BY preis DESC
LIMIT 3;
-- Ändern Sie DESC in ASC und starten Sie noch einmal.
Weiterführend: ein Ergebnis in Seiten teilen
Ein Shop zeigt seine Artikel in Seiten zu je fünf, die günstigsten zuerst. Schreiben Sie die Abfrage für Seite drei.
Sehen Sie dann nach, ob zwei Artikel denselben Preis haben. Was kann an der Grenze zwischen zwei Seiten schiefgehen, und wie verhindern Sie es?