Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

SQL-Grundlagen

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Container-Lab17 Min. Lesezeit20 Befehle

Was du machst

Eine Datenbank speichert Informationen in Tabellen. Eine Tabelle ist wie eine Tabellenkalkulation: Jede Spalte ist eine Art von Information, und jede Zeile ist eine Sache, zum Beispiel ein Kunde.

SQL ist die Sprache, mit der du mit einer Datenbank sprichst. In dieser Lektion fügst du einem kleinen Online-Shop eine neue Tabelle hinzu, legst Zeilen darin ab, stellst Fragen dazu, änderst eine Zeile und entfernst eine Zeile.

Bevor du anfängst

Notiz

Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Der erste Start dauert etwas länger, weil dabei die Shop-Datenbank angelegt wird. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).

1. Sag dem Terminal, wie es sich anmeldet

MySQL erstellt sein eigenes Sicherheitszertifikat. Der erste Befehl sagt deshalb dem Datenbank-Client, dass er es akzeptieren soll. Die Verbindung bleibt privat. Der zweite Befehl legt einen kurzen Namen, sql, für den langen Befehl an, der sich an der Datenbank shop anmeldet und eine SQL-Anweisung ausführt. Danach tippst du nur noch sql und die Anweisung in Anführungszeichen.

Befehl
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
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.

2. Sieh dir die vorhandenen Tabellen an

Der Shop hat schon Tabellen. SHOW TABLES listet sie auf. Jede enthält eine andere Art von Information: customers sind die Leute, die kaufen, products ist das, was sie kaufen.

Befehl
sql "SHOW TABLES"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

3. Sieh in eine Tabelle hinein

DESCRIBE zeigt die Spalten einer Tabelle: ihren Namen, ihren Typ und mehr. Sieh dir die Spalte Key an. PRI heißt Primärschlüssel. Ein Primärschlüssel ist eine Spalte, deren Wert in jeder Zeile anders ist. Er benennt also genau eine Zeile und keine andere. Hier ist das id.

Befehl
sql "DESCRIBE customers"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
sql "DESCRIBE products"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

4. Lege eine neue Tabelle an

Jetzt legst du deine eigene Tabelle wishlist an: Welcher Kunde möchte welches Produkt? CREATE TABLE legt sie an, und der Teil in Klammern listet ihre Spalten auf.

  • id INT AUTO_INCREMENT PRIMARY KEY: eine ganze Zahl, die MySQL für jede neue Zeile hochzählt. Sie ist der Primärschlüssel.
  • customer_id und product_id: welcher Kunde und welches Produkt. Sie enthalten die id einer Zeile in einer anderen Tabelle.
  • priority: wie sehr es gewünscht wird, von 1 (sehr) bis 5. Sie ist 3, wenn du nichts sagst.
  • UNIQUE KEY: Derselbe Kunde und dasselbe Produkt dürfen nicht zweimal in der Tabelle stehen.
  • FOREIGN KEY: Die ids müssen in customers und products existieren. Du kannst dir also kein Produkt wünschen, das es im Shop nicht gibt.

Die Anweisung ist lang, aber du führst sie nur einmal aus.

Befehl
sql "CREATE TABLE wishlist (id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT NOT NULL, product_id INT NOT NULL, priority INT NOT NULL DEFAULT 3, UNIQUE KEY customer_product (customer_id, product_id), FOREIGN KEY (customer_id) REFERENCES customers(id), FOREIGN KEY (product_id) REFERENCES products(id))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
sql "DESCRIBE wishlist"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

5. Lege Zeilen in der Tabelle ab

INSERT INTO fügt Zeilen hinzu. Zuerst kommen die Tabelle und ihre Spalten, dann VALUES und eine Klammer für jede Zeile. Eine id gibst du nicht an: MySQL zählt für dich. Das hier fügt drei Zeilen hinzu: Kunde 1 will Produkt 1 und Produkt 5, und Kunde 2 will Produkt 5. SELECT * zeigt dann alle Spalten jeder Zeile.

Befehl
sql "INSERT INTO wishlist (customer_id, product_id, priority) VALUES (1, 1, 3), (1, 5, 2), (2, 5, 1)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
sql "SELECT * FROM wishlist"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

6. Der Unique Key sagt nein

Kunde 1 will Produkt 1 schon. Versuche, dasselbe Paar noch einmal hinzuzufügen. MySQL lehnt es mit einem Fehler ab, wegen des UNIQUE KEY aus Schritt 4. Dieser Fehler ist nicht dein Fehler: Er zeigt, wie die Tabelle ihre eigenen Daten schützt. Es wurde nichts hinzugefügt.

Befehl
sql "INSERT INTO wishlist (customer_id, product_id, priority) VALUES (1, 1, 1)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
sql "SELECT * FROM wishlist"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Foreign Key sagt auch nein

Notiz

Probiere sql "INSERT INTO wishlist (customer_id, product_id) VALUES (1, 999)" im Terminal aus. Es gibt kein Produkt 999, deshalb lehnt der FOREIGN KEY es ab.

7. Stelle eine einfache Frage

SELECT stellt eine Frage. FROM sagt, welche Tabelle. WHERE behält nur die Zeilen, die passen, und ORDER BY bringt sie in eine Reihenfolge. Diese Abfrage zeigt, was Kunde 1 will, das Begehrteste zuerst.

Befehl
sql "SELECT * FROM wishlist WHERE customer_id = 1 ORDER BY priority"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
sql "SELECT name, price FROM products WHERE price > 50 ORDER BY price DESC"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

8. Verbinde zwei Tabellen

Die Wunschliste enthält nur Zahlen. Die Produktnamen stehen in products. Ein Join legt zwei Tabellen nebeneinander. JOIN products ON products.id = wishlist.product_id heißt: Suche zu jeder Zeile der Wunschliste das Produkt, dessen id in product_id steht. Jetzt kannst du es lesen.

Befehl
sql "SELECT wishlist.id, products.name, products.price, wishlist.priority FROM wishlist JOIN products ON products.id = wishlist.product_id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

9. Verbinde drei Tabellen

Du kannst noch einmal verbinden, um den Namen des Kunden hinzuzufügen. Dieselbe Idee, ein JOIN mehr.

Befehl
sql "SELECT customers.first_name, products.name, wishlist.priority FROM wishlist JOIN customers ON customers.id = wishlist.customer_id JOIN products ON products.id = wishlist.product_id ORDER BY customers.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.

10. Ändere eine Zeile

UPDATE ändert Zeilen. SET nennt den neuen Wert. WHERE id = 2 sagt, welche Zeile. Kunde 1 will Produkt 5 jetzt am meisten, deshalb wird seine Priorität 1. Prüfe dann mit einem SELECT, dass sich die Zeile wirklich geändert hat.

Befehl
sql "UPDATE wishlist SET priority = 1 WHERE id = 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.

Befehl
sql "SELECT * FROM wishlist WHERE id = 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.

Vergiss nie WHERE

Warnung

Man denkt leicht, UPDATE und DELETE ändern nur die Zeile, die du meinst. Ohne WHERE ändern sie jede Zeile der Tabelle. Schreibe das WHERE immer zuerst und prüfe vorher und nachher mit einem SELECT.

11. Entferne eine Zeile

DELETE FROM entfernt Zeilen. Auch hier sagt WHERE, welche. Kunde 2 hat es sich anders überlegt, entferne also Zeile 3. Sieh dir dann die Tabelle an: Zeile 3 ist weg, und die anderen Zeilen sind noch da.

Befehl
sql "DELETE FROM wishlist WHERE id = 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.

Befehl
sql "SELECT * FROM wishlist"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

12. Zähle, was übrig ist

COUNT(*) zählt Zeilen. Frage nach Zeile 3, und die Antwort ist 0. Das beweist, dass die Zeile weg ist.

Befehl
sql "SELECT COUNT(*) AS rows_found FROM wishlist WHERE id = 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.

13. Sieh es in phpMyAdmin

Klicke in der Lab-Leiste auf phpMyAdmin, um es in einem neuen Tab zu öffnen. Wähle links shop. Deine neue Tabelle wishlist steht in der Liste bei den anderen. Klicke auf wishlist und dann auf Browse, um ihre Zeilen zu sehen, und auf Structure, um den Primärschlüssel und den Unique Key zu sehen, die du angelegt hast.

Mach es noch einmal selbst

Tipp

Um die Lektion von vorn zu beginnen, entferne deine Tabelle mit sql "DROP TABLE wishlist" und gehe zurück zu Schritt 4. Probiere dann eigene Fragen aus: Welche Produkte kosten weniger als 10? Welche Kunden wohnen in Paris?

Wurde das Terminal neu gestartet, führe zuerst den alias aus Schritt 1 noch einmal aus. Die Datenbank behält deine Tabelle.

Mehr in diesem Lab

Über dieses Lab und seinen Quellcode: MySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Sie unterrichten eine Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.