Aufwärmen · Aufgabe 1 von 7
// B1.1 · ca. 35 Min. · Einstieg
PostgreSQL und psql installieren (oder der Editor im Browser)
Nach dieser Lektion führen Sie SQL in PostgreSQL aus, legen eine kleine Tabelle an, füllen und befragen sie und lesen die Fehlermeldung, wenn eine Anweisung scheitert.
Lektion 1 von 4 in B1 Erste Schritte
Danach können Sie
- PostgreSQL 18 installieren oder den Editor hier nutzen, sich mit psql verbinden und SQL von psql-Befehlen wie \q unterscheiden
- Eine Tabelle anlegen, Zeilen einfügen und abfragen, jede Anweisung mit einem Semikolon beendet
- Einen PostgreSQL-Fehler lesen: die ERROR-Zeile, den Namen, auf den sie zeigt, und wo der Lauf endete
Vorhersagen · Aufgabe 2 von 7
Sagen Sie es voraus, bevor Sie weiterlesen: Welche Zahl liefert die letzte Anweisung?
CREATE TABLE books (title text); INSERT INTO books VALUES ('Dune'); INSERT INTO books VALUES ('Emma'); SELECT count(*) FROM books;Üben · Aufgabe 3 von 7
Ergänzen Sie das Schlüsselwort, damit die Anweisung eine Tabelle books mit einer Spalte title anlegt.
CREATE ____ books (title text);CREATE books (title text);Üben · Aufgabe 4 von 7
Sie tippen in psql SELECT 2 + 2 und drücken Enter, ohne Semikolon. Was passiert?
Üben · Aufgabe 5 von 7
Ordnen Sie jedem Befehl zu, was er tut.
Denksport · Aufgabe 6 von 7
Knobelaufgabe. Die Tabelle wird als Books angelegt, als BOOKS befüllt und als books gelesen. Was liefert das SELECT?
CREATE TABLE Books (Title text); INSERT INTO BOOKS VALUES ('Dune'); select title from books;Anwenden · Aufgabe 7 von 7
Mini-Aufgabe. Schreiben Sie im Editor ein Skript für Ihr eigenes Regal: Legen Sie eine Tabelle shelf mit den Spalten id, title und year an, fügen Sie drei Bücher ein, die Sie kennen, und listen Sie sie mit SELECT * FROM shelf ORDER BY year; auf. Führen Sie es aus und klicken Sie dann erneut auf „Ausführen“: Die Tabelle entsteht neu, weil jeder Lauf mit einer leeren Datenbank beginnt.
Prüfen Sie Ihr Ergebnis anhand dieser Liste
Selbst programmieren
Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.
Ausgearbeitetes Beispiel
Eine winzige Bibliothek
Dieses Skript legt eine Tabelle mit Büchern an, fügt drei Zeilen ein und stellt zwei Abfragen. Das dritte INSERT nennt seine Spalten, der Stil, den viele Entwickler bevorzugen. Führen Sie es aus, fügen Sie dann ein viertes Buch hinzu und führen Sie es erneut aus. Jeder Lauf beginnt mit einer leeren Datenbank, die Tabelle entsteht also jedes Mal neu. Auf Ihrem Computer läuft dieselbe Datei mit psql -X -q -v ON_ERROR_STOP=1 -f main.sql.
main.sql
-- A tiny library: one table, three books.
CREATE TABLE books (
id integer,
title text,
author text,
year integer
);
INSERT INTO books VALUES (1, 'Dune', 'Frank Herbert', 1965);
INSERT INTO books VALUES (2, 'Emma', 'Jane Austen', 1815);
INSERT INTO books (id, title, author, year)
VALUES (3, 'Kindred', 'Octavia E. Butler', 1979);
SELECT * FROM books ORDER BY id;
SELECT count(*) AS books FROM books;
Ausführen mit
psql -X -q -v ON_ERROR_STOP=1 -f main.sqlAusgabe
id | title | author | year
----+---------+-------------------+------
1 | Dune | Frank Herbert | 1965
2 | Emma | Jane Austen | 1815
3 | Kindred | Octavia E. Butler | 1979
(3 rows)
books
-------
3
(1 row)- CREATE TABLE und INSERT geben nichts aus; nur die beiden SELECT-Anweisungen erzeugen eine Ausgabe.
- Jedes Ergebnis ist eine Tabelle: die Spaltennamen, eine Linie aus Bindestrichen, die Zeilen und eine Anzahl wie (3 rows).
- Zahlen stehen rechtsbündig, Text linksbündig.
- Zeilen, die mit -- beginnen, sind Kommentare: PostgreSQL ignoriert sie.
- ORDER BY id legt die Reihenfolge der Zeilen fest; ohne es verspricht SQL keine bestimmte Reihenfolge.
Ändern und ausführen
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser PostgreSQL herunter (bis zu 10.1 MB) und speichert es im Cache. Jeder Lauf beginnt mit einer leeren Datenbank. Ihr Code bleibt auf Ihrem Gerät.
Übungen
Übung 1 von 2
Ihre erste Tabelle
Legen Sie eine Tabelle members mit zwei Spalten an: id (integer) und name (text). Fügen Sie zwei Mitglieder ein: 1, Ada und 2, Grace. Listen Sie sie dann mit SELECT * FROM members ORDER BY id; auf. Beenden Sie jede Anweisung mit einem Semikolon.
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser PostgreSQL herunter (bis zu 10.1 MB) und speichert es im Cache. Jeder Lauf beginnt mit einer leeren Datenbank. Ihr Code bleibt auf Ihrem Gerät.
Hinweise
Hinweis 1
CREATE TABLE members (id integer, name text); legt die Tabelle an.
Hinweis 2
Ein INSERT pro Mitglied: INSERT INTO members VALUES (1, 'Ada');
Hinweis 3
Namen sind Text und stehen daher in einfachen Anführungszeichen; die ids sind Zahlen und brauchen keine.
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
CREATE TABLE members (
id integer,
name text
);
INSERT INTO members VALUES (1, 'Ada');
INSERT INTO members VALUES (2, 'Grace');
SELECT * FROM members ORDER BY id;
Auf dem eigenen Computer ausführen
Installieren Sie PostgreSQL 18 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.
main.sql
-- 1. Create the table members (id integer, name text).
-- 2. Add Ada (id 1) and Grace (id 2).
-- 3. List every member, ordered by id.
test.sql
-- test: Die Tabelle members hat zwei Zeilen
SELECT count(*) = 2 FROM members;
-- test: Ada hat die id 1 und Grace die id 2
SELECT EXISTS (SELECT 1 FROM members WHERE id = 1 AND name = 'Ada')
AND EXISTS (SELECT 1 FROM members WHERE id = 2 AND name = 'Grace');
-- test: Das Skript listet beide Mitglieder auf, nach id sortiert
-- output:
-- id | name
-- ----+-------
-- 1 | Ada
-- 2 | Grace
-- (2 rows)
psql führt die Dateien auf Ihrem eigenen PostgreSQL-Server aus. Nehmen Sie eine leere Datenbank, die Sie wegwerfen können: Hängen Sie -d und ihren Namen an den Befehl an.
Programm ausführen:
psql -X -q -v ON_ERROR_STOP=1 -f main.sqlFür die Prüfungen gibt es auf Ihrem Computer noch keinen Befehl. Sie stehen in test.sql: Jede Prüfabfrage gibt t aus, wenn sie besteht.
Übung 2 von 2
Zwei weitere Bücher
setup.sql hat die Tabelle books (id, title, author, year) mit Dune und Emma angelegt. Fügen Sie oberhalb des SELECT zwei Bücher hinzu: 3, Kindred, Octavia E. Butler, 1979 und 4, Beloved, Toni Morrison, 1987. Das SELECT listet dann alle vier Titel auf, das älteste zuerst.
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser PostgreSQL herunter (bis zu 10.1 MB) und speichert es im Cache. Jeder Lauf beginnt mit einer leeren Datenbank. Ihr Code bleibt auf Ihrem Gerät.
Hinweise
Hinweis 1
Die Tabelle gibt es schon: Legen Sie sie nicht noch einmal an, fügen Sie nur Zeilen hinzu.
Hinweis 2
Die Werte stehen in der Reihenfolge der Spalten: id, title, author, year.
Hinweis 3
INSERT INTO books VALUES (3, 'Kindred', 'Octavia E. Butler', 1979); fügt das erste hinzu.
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
INSERT INTO books VALUES (3, 'Kindred', 'Octavia E. Butler', 1979);
INSERT INTO books (id, title, author, year)
VALUES (4, 'Beloved', 'Toni Morrison', 1987);
SELECT title, year FROM books ORDER BY year;
Auf dem eigenen Computer ausführen
Installieren Sie PostgreSQL 18 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.
main.sql
-- setup.sql has created books and added Dune and Emma.
-- Add Kindred and Beloved here.
SELECT title, year FROM books ORDER BY year;
test.sql
-- test: Die Tabelle enthält vier Bücher
SELECT count(*) = 4 FROM books;
-- test: Kindred ist Buch 3, von Octavia E. Butler, aus dem Jahr 1979
SELECT EXISTS (SELECT 1 FROM books WHERE id = 3 AND title = 'Kindred' AND author = 'Octavia E. Butler' AND year = 1979);
-- test: Beloved ist Buch 4, von Toni Morrison, aus dem Jahr 1987
SELECT EXISTS (SELECT 1 FROM books WHERE id = 4 AND title = 'Beloved' AND author = 'Toni Morrison' AND year = 1987);
-- test: Das Skript listet alle vier Titel auf, das älteste zuerst
-- output:
-- title | year
-- ---------+------
-- Emma | 1815
-- Dune | 1965
-- Kindred | 1979
-- Beloved | 1987
-- (4 rows)
setup.sql
CREATE TABLE books (
id integer,
title text,
author text,
year integer
);
INSERT INTO books VALUES (1, 'Dune', 'Frank Herbert', 1965);
INSERT INTO books VALUES (2, 'Emma', 'Jane Austen', 1815);
psql führt die Dateien auf Ihrem eigenen PostgreSQL-Server aus. Nehmen Sie eine leere Datenbank, die Sie wegwerfen können: Hängen Sie -d und ihren Namen an den Befehl an.
Programm ausführen:
psql -X -q -v ON_ERROR_STOP=1 -f setup.sql -f main.sqlFür die Prüfungen gibt es auf Ihrem Computer noch keinen Befehl. Sie stehen in test.sql: Jede Prüfabfrage gibt t aus, wenn sie besteht.
Häufige Fehler
Ein fehlendes Semikolon
CREATE TABLE books (id integer, title text);
INSERT INTO books VALUES (1, 'Dune')
INSERT INTO books VALUES (2, 'Emma');
Was psql ausgibt
ERROR: syntax error at or near "INSERT"Warum, und die Lösung
Dem ersten INSERT fehlt das Semikolon, also liest PostgreSQL beide Zeilen als eine Anweisung, und das zweite INSERT ergibt mitten darin keinen Sinn. Der Fehler nennt das Wort, an dem das Lesen scheiterte, oft direkt nach dem fehlenden Semikolon. Beenden Sie jede Anweisung mit ;.
Text in doppelten Anführungszeichen
CREATE TABLE books (id integer, title text);
INSERT INTO books VALUES (1, "Dune");
Was psql ausgibt
ERROR: column "Dune" does not existWarum, und die Lösung
In SQL markieren einfache Anführungszeichen Text und doppelte Namen, etwa einer Spalte oder Tabelle. "Dune" wird als Name einer Spalte gelesen, und die gibt es nicht. Schreiben Sie Text in einfache Anführungszeichen: 'Dune'.
Werte in der falschen Reihenfolge
CREATE TABLE books (id integer, title text);
INSERT INTO books VALUES ('Dune', 1);
Was psql ausgibt
ERROR: invalid input syntax for type integer: "Dune"Warum, und die Lösung
Ohne Spaltenliste füllt INSERT die Spalten in der Reihenfolge, die CREATE TABLE vorgegeben hat: erst id, dann title. 'Dune' landet in id, das nur ganze Zahlen annimmt. Geben Sie die Werte in Spaltenreihenfolge an oder nennen Sie die Spalten: INSERT INTO books (title, id) VALUES ('Dune', 1);.
PostgreSQL im Browser: PGlite 0.5.8 (PostgreSQL 18.3), Apache-2.0 und PostgreSQL License. Lizenz und Quellcode
Abschlussquiz
5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.
Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.