T-SQL Grundkurs – Teil 2: Daten einfügen, abfragen, ändern & verknüpfen (INSERT, SELECT, UPDATE, JOINs)

✍️ T-SQL Grundkurs – Teil 2

Daten einfügen · abfragen · aktualisieren · Tabellen verknüpfen (JOINs)

INSERT · SELECT · UPDATE · INNER/LEFT JOIN
🔁 Voraussetzung & bekannte Tabellen
Wir arbeiten mit den Tabellen aus Teil 1 (Kurse & Teilnehmer). Falls du sie noch nicht erstellt hast, hier die kompakte Wiederholung. Alle Code-Beispiele bauen auf dieser Struktur auf.
-- Datenbank & Tabellen (Basisschema) CREATE DATABASE Kursportal; GO USE Kursportal; GO CREATE TABLE Kurse ( KursID INT IDENTITY(1,1) PRIMARY KEY, Titel NVARCHAR(100) NOT NULL, DauerTage INT, Preis DECIMAL(8,2) ); CREATE TABLE Teilnehmer ( TeilnehmerID INT IDENTITY(1,1) PRIMARY KEY, Vorname NVARCHAR(50) NOT NULL, Nachname NVARCHAR(50) NOT NULL, Email VARCHAR(120) UNIQUE, KursID INT NULL, CONSTRAINT FK_Teilnehmer_Kurs FOREIGN KEY (KursID) REFERENCES Kurse(KursID) );
1 INSERT – Neue Datensätze einfügen
Mit INSERT INTO werden Zeilen in eine Tabelle eingefügt. Man kann entweder alle Spalten (außer Identity/Default) angeben oder nur bestimmte Spalten.
-- 1. Einfaches Einfügen (alle Nicht-IDENTITY-Spalten) INSERT INTO Kurse (Titel, DauerTage, Preis) VALUES ('T-SQL für Einsteiger', 3, 199.00); -- 2. Mehrere Zeilen auf einmal INSERT INTO Kurse (Titel, DauerTage, Preis) VALUES ('Datenbankmodellierung', 2, 249.00), ('Fortgeschrittene Abfragen', 4, 349.00); -- 3. Einfügen in Teilnehmer (KursID kann NULL oder existierender Kurs) INSERT INTO Teilnehmer (Vorname, Nachname, Email, KursID) VALUES ('Lisa', 'Schmidt', Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.', 1), ('Paul', 'Weber', Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.', 2), ('Mia', 'Berger', Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.', NULL); -- noch kein Kurs zugeordnet
💡 Tipp: Bei IDENTITY-Spalten wie KursID oder TeilnehmerID wird der Wert automatisch generiert. Du brauchst ihn nicht anzugeben. Mit SCOPE_IDENTITY() kannst du die zuletzt eingefügte ID auslesen.
2 SELECT – Die Kunst der Abfrage
Mit SELECT holst du Daten aus einer oder mehreren Tabellen. Grundform: SELECT Spalten FROM Tabelle WHERE Bedingung ORDER BY Spalte.

📘 Basis-SELECT

-- Alle Kurse anzeigen SELECT * FROM Kurse; -- Bestimmte Spalten SELECT Titel, Preis FROM Kurse; -- Mit WHERE: Kurse teurer als 200€ SELECT Titel, Preis FROM Kurse WHERE Preis > 200;

🔍 Sortierung & Alias

-- Absteigend nach Preis SELECT Titel AS Kursname, Preis FROM Kurse ORDER BY Preis DESC; -- Teilnehmer mit bek. KursID SELECT Vorname, Nachname, Email FROM Teilnehmer WHERE KursID IS NOT NULL;
Wichtige SELECT-Klauseln: DISTINCT (doppelte Zeilen entfernen), TOP (n) (nur erste n Zeilen), LIKE für Muster-Suche.
-- Nur 2 günstigste Kurse SELECT TOP 2 Titel, Preis FROM Kurse ORDER BY Preis; -- Teilnehmer, deren Nachname mit 'B' beginnt SELECT Vorname, Nachname FROM Teilnehmer WHERE Nachname LIKE 'B%';
3 UPDATE – Gespeicherte Daten modifizieren
Mit UPDATE kannst du bestehende Zeilen verändern – immer mit Vorsicht! Eine WHERE-Klausel ist essenziell, sonst werden alle Zeilen geändert.
-- Preis für einen bestimmten Kurs erhöhen UPDATE Kurse SET Preis = Preis * 1.1 WHERE Titel = 'T-SQL für Einsteiger'; -- Teilnehmer einen Kurs zuweisen (KursID = 1) UPDATE Teilnehmer SET KursID = 1 WHERE TeilnehmerID = 3; -- Mehrere Spalten gleichzeitig ändern UPDATE Kurse SET DauerTage = 5, Preis = 399.00 WHERE KursID = 3;
⚠️ ACHTUNG: Führe immer zuerst ein SELECT mit der gleichen WHERE-Bedingung aus, um zu prüfen, welche Zeilen betroffen sind. So vermeidest du Datenverlust.
4 JOINs – Zusammenhängende Daten aus mehreren Tabellen
In relationalen Datenbanken sind Daten oft auf mehrere Tabellen verteilt. Mit JOIN kombinierst du sie basierend auf einer Beziehung (z.B. Fremdschlüssel). Die wichtigsten JOIN-Typen: INNER JOIN (nur übereinstimmende Zeilen) und LEFT JOIN (alle Zeilen der linken Tabelle + passende der rechten).

🔗 INNER JOIN

-- Alle Teilnehmer mit ihren Kursnamen (nur wenn Kurs zugewiesen) SELECT t.Vorname, t.Nachname, k.Titel AS KursTitel FROM Teilnehmer t INNER JOIN Kurse k ON t.KursID = k.KursID;
Zeigt nur Teilnehmer an, die einem existierenden Kurs zugeordnet sind.

⬅️ LEFT JOIN

-- Alle Teilnehmer, auch ohne Kurs SELECT t.Vorname, t.Nachname, ISNULL(k.Titel, 'Kein Kurs') AS Kurs FROM Teilnehmer t LEFT JOIN Kurse k ON t.KursID = k.KursID;
LEFT JOIN gibt alle Teilnehmer zurück – falls kein Kurs, wird NULL angezeigt.
📌 Weitere JOIN-Typen: RIGHT JOIN (seltener), FULL OUTER JOIN. Bei der Mehrfachverknüpfung kannst du mehrere JOINs hintereinander schreiben. Aliasnamen (t, k) machen den Code lesbar.
-- Beispiel mit 2 JOINs: Kurse, Teilnehmer und eine hypothetische Bewertungstabelle -- (Annahme: separate Tabelle "Bewertungen" mit Fremdschlüssel auf Teilnehmer) -- SELECT * FROM Kurse k -- INNER JOIN Teilnehmer t ON t.KursID = k.KursID -- INNER JOIN Bewertungen b ON b.TeilnehmerID = t.TeilnehmerID;
🎯 Praxisblock – Alles zusammen
Wir füllen die Tabellen mit Leben, führen ein UPDATE durch und zeigen eine aussagekräftige JOIN-Abfrage.
-- Schritt 1: Weitere Kurse einfügen INSERT INTO Kurse (Titel, DauerTage, Preis) VALUES ('Reporting mit Power BI', 2, 279.00), ('T-SQL Performance', 3, 399.00); -- Schritt 2: Teilnehmer nachtragen INSERT INTO Teilnehmer (Vorname, Nachname, Email, KursID) VALUES ('Tom', 'Krause', 'tom@mail.de', 2), -- KursID 2 existiert ('Sofia', 'Müller', 'sofia@mail.de', 5); -- KursID 5 (Reporting) -- Schritt 3: UPDATE – Einem Teilnehmer den Kurs wechseln UPDATE Teilnehmer SET KursID = 4 WHERE Nachname = 'Berger'; -- Mia bekommt KursID 4 (T-SQL Performance) -- Schritt 4: SELECT mit LEFT JOIN und Berechnung SELECT t.TeilnehmerID, t.Vorname + ' ' + t.Nachname AS TeilnehmerName, k.Titel AS Kursname, k.Preis, CASE WHEN k.Preis > 300 THEN 'Premium' ELSE 'Standard' END AS PreisKategorie FROM Teilnehmer t LEFT JOIN Kurse k ON t.KursID = k.KursID ORDER BY k.Preis DESC;
🔍 Erklärung: Die Abfrage zeigt alle Teilnehmer, verknüpft mit Kursinformationen. Bei Teilnehmern ohne Kurs erscheint NULL. Die CASE-Anweisung erzeugt dynamische Kategorien.
🗑️ Kurzer Ausblick: DELETE & Sicherheit
DELETE entfernt Zeilen. Noch gefährlicher als UPDATE! Immer mit WHERE-Klausel. TRUNCATE löscht den gesamten Tabelleninhalt (ohne WHERE, nicht protokolliert).
-- Beispiel: Teilnehmer mit E-Mail Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.' löschen DELETE FROM Teilnehmer WHERE Email = Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.'; -- Vorsicht: Alle Zeilen der Tabelle löschen (nicht die Tabelle selbst) -- DELETE FROM Teilnehmer;
🛡️ Beste Praxis für Anfänger: Verwende innerhalb von Übungen eine Testdatenbank. Beginne jede Transaktion mit BEGIN TRAN und prüfe die Änderung, bevor du COMMIT oder ROLLBACK ausführst.
BEGIN TRANSACTION; UPDATE Kurse SET Preis = Preis * 0.9 WHERE KursID = 1; -- Prüfen: SELECT * FROM Kurse WHERE KursID = 1; ROLLBACK; -- Macht die Änderung rückgängig -- COMMIT -- würde speichern
📝 Mini-Challenges zum Mitmachen
Versuche folgende Aufgaben mit T-SQL zu lösen (basierend auf Kurse & Teilnehmer):
  • 1. Füge einen neuen Kurs mit dem Titel "Azure Datenbanken", Dauer 4 Tage, Preis 449 € ein.
  • 2. Ändere die E-Mail-Adresse von "Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein." zu "Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.".
  • 3. Schreibe eine Abfrage, die alle Teilnehmer zeigt, deren Nachname mit "M" beginnt – sortiert nach Vorname.
  • 4. Erstelle einen INNER JOIN, der Kursname und die Anzahl der Teilnehmer pro Kurs anzeigt. (Tipp: GROUP BY + COUNT)
-- Lösungshinweise: -- 1. INSERT INTO Kurse (Titel, DauerTage, Preis) VALUES ('Azure Datenbanken',4,449); -- 2. UPDATE Teilnehmer SET Email = Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.' WHERE Email = Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.'; -- 3. SELECT * FROM Teilnehmer WHERE Nachname LIKE 'M%' ORDER BY Vorname; -- 4. SELECT k.Titel, COUNT(t.TeilnehmerID) AS AnzahlTeilnehmer -- FROM Kurse k LEFT JOIN Teilnehmer t ON k.KursID = t.KursID -- GROUP BY k.Titel;
🎉 Glückwunsch! Du beherrschst nun die grundlegenden Datenmanipulationen mit T-SQL. Von INSERT über SELECT, UPDATE bis hin zu JOINs. Im nächsten Schritt kannst du dich mit Aggregatfunktionen (SUM, AVG, COUNT), Unterabfragen und Views beschäftigen – der Einstieg ist jetzt gelegt!
📘 T-SQL Grundkurs – Teil 2 | INSERT, SELECT, UPDATE, JOINs | ← Teil 1 (Datenbank, Tabellen, Schlüssel)
Alle Beispiele für Microsoft SQL Server / Azure SQL. Übe mit einer eigenen Testdatenbank – no risk, no fun!