Dies ist eine alte Version des Dokuments!
LU06b - SQL-DML: Daten einfügen (INSERT)
Lernziele
- Ich kann mit INSERT einen einzelnen Datensatz einfügen.
- Ich kann mit INSERT mehrere Datensätze in einem Statement einfügen.
- Ich kann mit INSERT … SELECT Daten aus einer anderen Tabelle übernehmen.
- Ich weiss, wie ich einen Apostroph in einem Textwert korrekt schreibe.
Einführung
In LU05 haben wir die DDL (Data Definition Language) kennengelernt, mit der Tabellen angelegt werden. Jetzt geht es an die DML (Data Manipulation Language): Wir füllen eine Tabelle mit Daten.
Dafür bauen wir uns eine eigene Tabelle:
CREATE TABLE favourite_film ( film_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100), director VARCHAR(50), released_year INT, star1 VARCHAR(50) );
| Spalte | Bedeutung |
|---|---|
| film_id | Automatisch hochzählende ID, eindeutiger Primärschlüssel |
| title | Filmtitel |
| director | Regisseur:in |
| released_year | Veröffentlichungsjahr |
| star1 | Hauptdarsteller:in |
Bisher haben wir neue Datensätze über die WebStorm-Oberfläche eingefügt:
Das funktioniert, ist aber mühsam und fehleranfällig, wenn viele Daten eingetragen oder geändert werden müssen. Darum arbeiten wir ab jetzt programmatisch mit SQL – über die DML-Befehle INSERT, UPDATE und DELETE.
INSERT Statement
Der Befehl INSERT fügt neue Datensätze in eine Tabelle ein. Dabei muss angegeben werden, in welche Spalten die Werte eingefügt werden.
Variante A: Ein Datensatz
INSERT INTO tabellenname (spalte1, spalte2, spalte3) VALUES (wert1, wert2, wert3);
Konkret:
INSERT INTO favourite_film (title, director, released_year, star1) VALUES ('Lost in Translation', 'Sofia Coppola', 2003, 'Scarlett Johansson');
| film_id | title | director | released_year | star1 |
|---|---|---|---|---|
| 1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
Platzhalter für Ihr Screencast-Video: INSERT mit einer einzelnen Zeile.
Variante B: Mehrere Datensätze auf einmal
INSERT INTO tabellenname (spalte1, spalte2, spalte3) VALUES (wert1a, wert2a, wert3a), (wert1b, wert2b, wert3b);
Konkret:
INSERT INTO favourite_film (title, director, released_year, star1) VALUES ('Inception', 'Christopher Nolan', 2010, 'Leonardo DiCaprio'), ('Arrival', 'Denis Villeneuve', 2016, 'Amy Adams');
| film_id | title | director | released_year | star1 |
|---|---|---|---|---|
| 1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
| 2 | Inception | Christopher Nolan | 2010 | Leonardo DiCaprio |
| 3 | Arrival | Denis Villeneuve | 2016 | Amy Adams |
Platzhalter für Ihr Screencast-Video: mehrere Zeilen in einem Statement.
Vorsicht bei Apostrophen im Text. Mancher Filmtitel enthält ein Hochkomma, z.B. Five Nights at Freddy's. Da SQL einfache Anführungszeichen zur Begrenzung von Textwerten nutzt, muss das Hochkomma im Titel verdoppelt werden:
'Five Nights at Freddy''s'
Sonst bricht SQL den Textwert an der falschen Stelle ab.
Variante C: INSERT ... SELECT
Mit INSERT … SELECT können Datensätze direkt aus einer anderen Tabelle kopiert werden – praktisch, um Daten aus imdb_top_1000 zu übernehmen.
INSERT INTO zieltabelle (spalte1, spalte2, spalte3) SELECT quelle_spalte1, quelle_spalte2, quelle_spalte3 FROM quelle WHERE bedingung;
Konkret:
INSERT INTO favourite_film (title, director, released_year, star1) SELECT Series_Title, Director, Released_Year, Star1 FROM imdb_top_1000 WHERE Released_Year >= 2000;
Mit WHERE können Sie gezielt nur bestimmte Datensätze übernehmen (hier: ab Jahr 2000). Ohne WHERE würden alle Zeilen von imdb_top_1000 übernommen.
Platzhalter für Ihr Screencast-Video: Daten aus imdb_top_1000 übernehmen.

