Wie eine Datenbank aussieht

Wenn Sie neu bei SQL sind, beginnen Sie hier. An Beispielen sehen Sie, wie eine Tabelle Daten speichert und wie sich ein Abfrageergebnis lesen lässt.

Zuerst öffnen

Drücken Sie die Schaltfläche unter dem ersten Beispiel. Planche öffnet sich in einem neuen Browser-Tab mit geladener Shopdatenbank. Die Datenbankdatei wird in der Seite verarbeitet; Änderungen betreffen keine anderen Rechner. Wenn Sie wieder von vorn beginnen möchten, laden Sie das Beispiel im Willkommensbildschirm neu.

Eine Tabelle ist ein Raster

Führen Sie das hier aus. Es fragt nach allem, was in der Tabelle categories steht.

1

SELECT * FROM categories;
In Planche ausführen

Ergebnis — erste 5 von 33 Zeilen

idnamedescriptionparent_idsort_orderis_active
1ElectronicsElectronics and related productsNULL01
2LaptopsLaptops in Electronics111
3PhonesPhones in Electronics121
4TabletsTablets in Electronics131
5AudioAudio in Electronics141

Öffnet Planche in einem eigenen Browser-Tab, mit geladener Beispieldatenbank und dieser Abfrage im Editor. Alle Beispiele der Seite verwenden denselben Tab weiter, und ausgeführt wird erst, wenn Sie F9 drücken.

Das Ergebnis ist ein Raster – genau das ist eine Tabelle. Drei Begriffe beschreiben es:

  • Eine Spalte ist eine der Überschriften oben – id, name, description. Jeder Eintrag der Tabelle hat dieselben sechs, und diese Namen tippen Sie später in Abfragen.
  • Eine Zeile ist eine Linie quer durch das Raster, und sie ist ein Ding. Hier ist eine Zeile eine Kategorie. Es sind 33 Zeilen, der Shop hat also 33 Kategorien.
  • Eine Zelle ist der Schnittpunkt von Zeile und Spalte – ein Wert, etwa der Name einer bestimmten Kategorie.

Jede Tabelle dieser Datenbank hat dieselbe Form. products hat eine Zeile je Produkt, orders eine je Bestellung, customers eine je Kunde. Was sich unterscheidet, sind die Spalten.

Manche Zellen sind leer, und das hat einen Namen

2

SELECT id, name, parent_id
FROM categories
LIMIT 8;
In Planche ausführen

Ergebnis — erste 5 von 8 Zeilen

idnameparent_id
1ElectronicsNULL
2Laptops1
3Phones1
4Tablets1
5Audio1

Sehen Sie sich parent_id an. Manche Zeilen haben eine Zahl, andere sind mit NULL markiert. Diese Spalte sagt, in welcher Kategorie die Kategorie liegt – Laptops liegen in Elektronik – und die obersten Kategorien liegen in keiner, es gibt also nichts einzutragen.

NULL heißt "hier ist kein Wert". Es lohnt sich, das als eigene Idee zu lernen und nicht als eine Art Null, denn das ist es nicht:

  • NULL ist nicht 0. Null ist eine Zahl, die Sie gemessen haben; NULL ist eine Messung, die Sie nicht haben.
  • NULL ist auch keine leere Zeichenkette. Ein Kunde, dessen Name als leer erfasst wurde, ist etwas anderes als ein Kunde, dessen Name nie erfasst wurde.

NULL folgt eigenen Vergleichsregeln, die in der dritten Lektion erklärt werden. Vorerst genügt: Eine leere Zelle steht für einen unbekannten oder fehlenden Wert.

Jede Zeile hat ihre eigene Nummer

Die erste Spalte heißt hier id, und sie ist eine Zahl, die genau zu einer Zeile gehört und nie wiederverwendet wird. Das ist der Primärschlüssel der Zeile – so verweist alles andere auf sie, ohne von ihrem Namen abzuhängen, den jemand ändern könnte.

Fast jede Tabelle, der Sie begegnen, hat einen, meist id genannt.

Warum 23 Tabellen und nicht eine

Ein Shop ließe sich im Prinzip als ein einziges riesiges Raster führen: eine Zeile je Bestellung, mit Kundenname, Adresse, jedem Produkt und dessen Preis wiederholt in derselben Zeile. Datenbanken werden aus einem sehr schlichten Grund nicht so gebaut – ein Kunde, der umzieht, müsste in jeder Bestellung geändert werden, die er je aufgegeben hat, und jede übersehene Zeile wird zu einer Version der Wahrheit, die den anderen widerspricht.

Stattdessen bekommt jede Art von Ding eine eigene Tabelle, und die Zeilen verweisen über Primärschlüssel aufeinander. products.category_id enthält eine categories.id, orders.customer_id eine customers.id. Eine Spalte, die auf die Zeile einer anderen Tabelle zeigt, ist ein Fremdschlüssel, und ihm zu folgen nennt die vierte Lektion einen Join.

Deshalb brauchen Sie auch einen Ort, an dem Sie nachsehen, welche Spalten eine Tabelle hat. Die Seite zur Beispieldatenbank listet jede Tabelle, jede Spalte und jeden Verweis auf. Lassen Sie sie in einem zweiten Tab offen – auch Leute, die täglich SQL schreiben, haben das Schema neben sich liegen.

Eine Abfrage ist eine Frage, und die Antwort ist auch eine Tabelle

3

SELECT COUNT(*) AS how_many FROM products;
In Planche ausführen

Ergebnis — 1 Zeile

how_many
400

Eine Zeile, eine Spalte, eine Zahl. Das ist immer noch eine Tabelle, nur eine sehr kleine – und darin steckt die ganze Idee von SQL: Sie schicken eine Frage, und was zurückkommt, hat immer dieselbe rechteckige Form, ob es nun 400 Zeilen sind oder eine.

Beachten Sie auch, dass diese Antwort nirgends in der Datenbank steht. Die Zahl 400 ist nirgends gespeichert; die Datenbank hat die Zeilen gezählt, als Sie gefragt haben. Die meisten nützlichen Abfragen sind so – sie berechnen eine Antwort, statt sie nachzuschlagen.

Selbst eine ausführen

Im Editor oben im Arbeitsbereich schreiben oder ändern Sie eine Abfrage und führen sie mit F9 aus – oder mit Strg / ⌘ + Enter nur die Anweisung, in der der Cursor steht. Das Ergebnis erscheint im Raster darunter, die Zeilenzahl unten.

Die Leiste links zeigt dieselbe Datenbank als Baum: Klappen Sie main auf, dann Tables, und ein Doppelklick auf eine Tabelle zeigt deren Zeilen, ohne dass Sie etwas schreiben. Das ist oft der schnellste Weg herauszufinden, was in einer Tabelle steht, bevor Sie sie abfragen.

Jedes Beispiel dieser Seiten öffnet sich in einem eigenen Tab, Sie können also eines ändern, ausführen und wieder zurückändern, ohne Ihren Platz zu verlieren.

Wenn etwas schiefgeht

Es wird schiefgehen, und die Meldungen sind kurz und wörtlich zu nehmen. Vertippen Sie sich in einem Spaltennamen, bekommen Sie:

no such column: naem

Lesen Sie das Ende der Meldung zuerst – dort steht meist genau das, was die Datenbank nicht finden konnte. Drei Ursachen machen fast alle Anfängerfehler aus: ein vertippter Spaltenname, eine Spalte in einer anderen Tabelle als gedacht, und fehlende Anführungszeichen um Text (SQL will 'paid' mit einfachen Anführungszeichen; doppelte bedeuten etwas anderes).

Ein Fehler heißt, dass nichts ausgeführt wurde. Die Anweisung wird als Ganzes abgelehnt, eine gescheiterte Abfrage hat also nichts verändert.

Wie es weitergeht

Sie wissen jetzt, was Tabelle, Zeile, Spalte und NULL sind, und Sie können eine Abfrage ausführen und das Ergebnis lesen. Die nächste Lektion behandelt die vier Klauseln, aus denen fast jede Abfrage gebaut ist.

Selbst ausprobieren

  1. Wie viele Kunden hat der Shop? Die Form dieser Abfrage haben Sie im letzten Beispiel der Seite gesehen.

    Lösung anzeigen

    Lösung anzeigen

    SELECT COUNT(*) AS how_many FROM customers;
    In Planche ausführen

    Ergebnis — 1 Zeile

    how_many
    1500

    COUNT(*) zählt Zeilen, und AS how_many gibt der Ergebnisspalte nur einen lesbaren Namen. Ersetzen Sie customers durch einen anderen Tabellennamen, um dort zu zählen.