LU07b – SQL-DML: Einführung & Daten einfügen
Einführung
In LU05 haben wir die DDL (Data Definition Language) kennengelernt, mit der Tabellen angelegt werden.
Folgender SQL-Code erzeugt eine leere Tabelle favourite_film mit den Spalten film_id1), title2), director3), released_year4), star15):
CREATE TABLE favourite_film ( film_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100), director VARCHAR(50), released_year YEAR, star1 VARCHAR(50) );
Wichtig: film_id ist der Primärschlüssel → jeder Datensatz erhält automatisch eine eindeutige ID.
DML = Data Manipulation Language: INSERT, UPDATE, DELETE. (Read erfolgt mit SELECT und gehört streng genommen zur DQL, wird im Alltag bei CRUD6) aber mitgemeint.)
Bisher haben wir neue Datensätze über die Webstorm-Oberfläche eingefügt (Edit Data > „+“):
Das funktioniert, ist aber mühsam und fehleranfällig, wenn viele Daten eingetragen oder geändert werden müssen. Darum machen wir das ab jetzt programmatisch mit SQL.
Die CRUD-Operationen aus der vorherigen Lektion setzen wir dabei direkt mit den Befehlen der DML (Data Manipulation Language) um: INSERT entspricht Create, SELECT entspricht Read, UPDATE entspricht Update und DELETE entspricht 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.
Syntax (Einzelzeile)
INSERT INTO tabellenname (spalte1, spalte2, spalte3) VALUES (wert1, wert2, wert3);
Syntax (mehrere Zeilen auf einmal)
INSERT INTO tabellenname (spalte1, spalte2, spalte3) VALUES (wert1a, wert2a, wert3a), (wert1b, wert2b, wert3b);
Syntax (INSERT … SELECT)
INSERT INTO zieltabelle (spalte1, spalte2, spalte3) SELECT quelle_spalte1, quelle_spalte2, quelle_spalte3 FROM quelle WHERE bedingung;
—
Variante A: Spalten explizit angeben
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 |
Variante B: Mehrere Zeilen auf einmal
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 |
Variante C: INSERT … SELECT (Daten aus einer anderen Tabelle übernehmen) Mit INSERT ... SELECT können Datensätze direkt aus einer anderen Tabelle kopiert werden. Das ist z. B. praktisch, wenn Daten aus imdb_top_1000 übernommen werden sollen.
INSERT INTO favourite_film (title, director, released_year, star1) SELECT Series_Title, Director, Released_Year, Star1 FROM imdb_top_1000 WHERE Released_Year >= 2000;
Hinweis: Mit WHERE können gezielt nur bestimmte Datensätze übernommen werden (z. B. ab Jahr 2000).