Tutorial: SQL lernen mit der Datenbank „fünzigvChr“
Von der Erstellung der Datenbank bis zu Abfragen, Aggregaten und Ranking – spielerisch erklärt mit Asterix & Co.
1) Einführung
Mit der Datenbank „fünzigvChr“ steigen wir spielerisch in die Welt von SQL ein.
Figuren aus den Asterix-Comics – Gallier, Römer und die Bände – dienen als Grundlage
für Tabellen und Abfragen. So lassen sich selbst komplexe SQL-Techniken leicht nachvollziehen.
2) Datenbank erstellen
2.1 Datenbank & Schemas
-- existierende DB löschen und neu erstellen
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'fünzigvChr')
DROP DATABASE fünzigvChr;
CREATE DATABASE fünzigvChr;
USE fünzigvChr;
-- Schemas anlegen
CREATE SCHEMA gallisch AUTHORIZATION dbo;
CREATE SCHEMA roemisch AUTHORIZATION dbo;
2.2 Tabellen anlegen
-- Tabelle Gallier
CREATE TABLE gallisch.gallier (
gnr nchar(3) NOT NULL CONSTRAINT gnr_pk PRIMARY KEY,
gname nvarchar(50) NOT NULL
CONSTRAINT gname_chk CHECK(gname LIKE '[A-Z]%'),
gberuf nvarchar(50) NULL,
wschweine int NULL
CONSTRAINT wild_chk CHECK(wschweine BETWEEN 1 AND 200),
gort nvarchar(50) NULL,
gbnr nchar(3) NULL
);
-- Tabelle Römer
CREATE TABLE roemisch.römer (
rnr nchar(3) NOT NULL CONSTRAINT rnr_pk PRIMARY KEY,
rname nvarchar(50) NOT NULL,
rrang nvarchar(50) NULL,
rort nvarchar(50) NULL,
rbnr nchar(3) NULL
);
-- Tabelle Band
CREATE TABLE gallisch.band (
bnr nchar(3) NOT NULL CONSTRAINT bnr_pk PRIMARY KEY,
bname nvarchar(50) NOT NULL,
bchar nchar(3) NULL,
banzahl int NULL,
bjahr datetime NOT NULL
);
2.3 Daten einfügen
-- Gallier
INSERT INTO gallisch.gallier VALUES
('G01','Majestix','Häuptling',10,'Armorica','B01'),
('G02','Asterix','Krieger',10,'Armorica','B01'),
('G03','Obelix','Hinkelsteinlieferant',50,'Armorica','B01');
-- Römer
INSERT INTO roemisch.römer VALUES
('R01','Gaius Julius Cäsar','Imperator','Rom','B01'),
('R02','Gaius Bonus','Zenturio','Kleinbonum','B01');
-- Bände
INSERT INTO gallisch.band VALUES
('B01','Asterix der Gallier','G02',48,'1968-10-29'),
('B04','Der Kampf der Häuptlinge','G01',48,'1969-03-04');
Damit ist die Datenbank einsatzbereit.
3) Die Datenbank „fünzigvChr“ im Überblick
Die Tabellen enthalten zum Beispiel:
- Gallier: Asterix, Obelix, Miraculix, Falbala
- Römer: Julius Cäsar, Brutus, Marcus Schmalzlockus
- Bände: Asterix der Gallier (1968), Asterix als Legionär (1971), Der Papyrus des Cäsar (2015)
4) Erste Abfragen
-- Namen und Berufe aller Gallier
SELECT gname, gberuf FROM gallier;
-- Namen und Wohnorte aller Römer
SELECT rname, rort FROM römer;
-- Anzahl Römer in Kleinbonum
SELECT COUNT(rnr) AS 'Anzahl Römer in Kleinbonum'
FROM römer
WHERE rort = 'Kleinbonum';
5) Sortierungen & Aggregatfunktionen
-- Gallier alphabetisch
SELECT gname FROM gallier
ORDER BY gname ASC;
-- Bände nach Erscheinungsjahr
SELECT * FROM band
ORDER BY bjahr ASC;
-- Gallier mit höchstem Wildschweinkonsum
SELECT TOP(1) gname, wschweine
FROM gallier
ORDER BY wschweine DESC;
6) Erweiterte SQL-Techniken
6.1 OFFSET / FETCH
-- Die 3 stärksten Esser überspringen, 5 weitere ausgeben
SELECT gname, wschweine, gort
FROM gallier
ORDER BY wschweine DESC
OFFSET 3 ROWS FETCH NEXT 5 ROWS ONLY;
6.2 RANK & NTILE
-- Rangfolge nach Wildschweinen
SELECT gname, RANK() OVER(ORDER BY wschweine DESC) AS Rang, wschweine
FROM gallier;
-- Bände in 4 Gruppen
SELECT NTILE(4) OVER(ORDER BY bjahr ASC) AS Kategorie, bname, bjahr
FROM band
ORDER BY bjahr;
6.3 Temporäre Tabellen
-- Hungrige Gallier (10+ Wildschweine)
SELECT gnr, gname, wschweine
INTO #hungrige_gallier
FROM gallier
WHERE wschweine >= 10;
SELECT * FROM #hungrige_gallier;
7) Übungsaufgaben
- Finde alle Gallier und die Bände, in denen sie eine Rolle spielen.
- Liste die Römer nach Rang, sortiert nach Ort.
- Erstelle eine temporäre Tabelle mit allen Römern aus Rom.
- Ermittle den Gallier mit dem geringsten Wildschweinkonsum.
- Teile die Bände in 3 Gruppen nach Erscheinungsjahr.
8) Fazit
Mit der Datenbank „fünzigvChr“ lernst du SQL praxisnah:
von der Datenbankerstellung über Constraints und Datenbefüllung
bis zu SELECT-Abfragen, Aggregaten, Ranking-Funktionen
und temporären Tabellen.

