✍️ T-SQL Grundkurs – Teil 2
Daten einfügen · abfragen · aktualisieren · Tabellen verknüpfen (JOINs)
-- 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. 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
📘 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;
-- 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%';
-- 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;
🔗 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;
⬅️ 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;
-- 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;
-- 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;
-- 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;
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
- 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;