SQL
Standardisierte Abfragesprache für relationale Datenbanken zum Erstellen, Abfragen, Ändern und Löschen von Daten.
Auf dieser Seite
SQL (Structured Query Language) ist die standardisierte Abfragesprache für relationale Datenbankmanagementsysteme (RDBMS). Mit SQL kannst du Daten in Datenbanken erstellen, abfragen, ändern und löschen. Als deklarative Sprache beschreibst du mit SQL was du haben möchtest, nicht wie es berechnet werden soll. Das übernimmt das Datenbanksystem für dich.
Geschichte und Entwicklung von SQL
SQL wurde in den frühen 1970er Jahren bei IBM von Donald D. Chamberlin und Raymond F. Boyce entwickelt. Ihre Arbeit basierte auf dem bahnbrechenden relationalen Datenbankmodell von Edgar F. Codd, der vorschlug, Daten in Tabellen mit Zeilen und Spalten zu strukturieren.
Ursprünglich hieß die Sprache SEQUEL (Structured English Query Language). IBM musste den Namen jedoch zu SQL ändern, da SEQUEL bereits als Markenname von einer britischen Flugzeugfirma geschützt war. Die erste kommerzielle Implementierung erschien 1979 von Relational Software Inc., dem späteren Oracle.
Wichtige Meilensteine
- 1970: Edgar F. Codd veröffentlicht das relationale Datenbankmodell
- 1974: IBM veröffentlicht die erste SQL-Spezifikation
- 1979: Erste kommerzielle SQL-Implementierung (Oracle)
- 1986: ANSI standardisiert SQL (SQL-86)
- 1987: ISO übernimmt den Standard (ISO 9075:1987)
- 1992: SQL-92 mit erweiterten Funktionen (JOINs, ALTER, DROP)
- 1999: SQL:1999 mit objektorientierten Erweiterungen
- 2016: SQL:2016 mit JSON-Unterstützung
- 2023: SQL:2023 als aktueller Standard
SQL-Befehlskategorien
SQL-Befehle werden nach ihrer Funktion in verschiedene Kategorien eingeteilt. Diese Einteilung hilft dir, die unterschiedlichen Aufgabenbereiche von SQL zu verstehen und die richtigen Befehle für deine Anforderungen auszuwählen.
DDL - Data Definition Language
Mit DDL-Befehlen definierst du die Struktur deiner Datenbank. Du erstellst, änderst und löschst Tabellen, Indizes und andere Datenbankobjekte.
-- Tabelle erstellen
CREATE TABLE mitarbeiter (
id INT PRIMARY KEY AUTO_INCREMENT,
vorname VARCHAR(50) NOT NULL,
nachname VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
einstellungsdatum DATE
);
-- Spalte hinzufügen
ALTER TABLE mitarbeiter ADD gehalt DECIMAL(10,2);
-- Tabelle löschen
DROP TABLE mitarbeiter;
DML - Data Manipulation Language
DML-Befehle nutzt du für die tägliche Arbeit mit Daten. Hierzu gehören das Einfügen, Abfragen, Aktualisieren und Löschen von Datensätzen, auch bekannt als CRUD-Operationen.
-- Daten einfügen (INSERT)
INSERT INTO mitarbeiter (vorname, nachname, email)
VALUES ('Max', 'Mustermann', 'max@firma.de');
-- Daten abfragen (SELECT)
SELECT vorname, nachname, email
FROM mitarbeiter
WHERE einstellungsdatum > '2024-01-01'
ORDER BY nachname ASC;
-- Daten aktualisieren (UPDATE)
UPDATE mitarbeiter
SET gehalt = 45000.00
WHERE id = 1;
-- Daten löschen (DELETE)
DELETE FROM mitarbeiter
WHERE id = 5;
DCL - Data Control Language
DCL-Befehle steuern die Zugriffsrechte auf Datenbankobjekte. Mit ihnen legst du fest, welche Benutzer welche Operationen ausführen dürfen.
-- Leserechte vergeben
GRANT SELECT ON mitarbeiter TO benutzer_readonly;
-- Alle Rechte vergeben
GRANT ALL PRIVILEGES ON firma.* TO administrator;
-- Rechte entziehen
REVOKE DELETE ON mitarbeiter FROM praktikant;
TCL - Transaction Control Language
TCL-Befehle steuern Transaktionen in der Datenbank. Eine Transaktion fasst mehrere Operationen zusammen, die entweder alle erfolgreich sein müssen oder gemeinsam rückgängig gemacht werden.
-- Transaktion starten
BEGIN TRANSACTION;
-- Mehrere Operationen
UPDATE konten SET saldo = saldo - 100 WHERE id = 1;
UPDATE konten SET saldo = saldo + 100 WHERE id = 2;
-- Änderungen dauerhaft speichern
COMMIT;
-- Oder: Änderungen verwerfen
-- ROLLBACK;
Wichtige SQL-Konzepte
JOINs - Tabellen verknüpfen
JOINs verbinden Daten aus mehreren Tabellen basierend auf gemeinsamen Spalten. Sie sind essenziell für normalisierte Datenbanken, in denen Informationen auf mehrere Tabellen verteilt sind.
-- INNER JOIN: Nur übereinstimmende Datensätze
SELECT m.vorname, m.nachname, a.name AS abteilung
FROM mitarbeiter m
INNER JOIN abteilungen a ON m.abteilung_id = a.id;
-- LEFT JOIN: Alle aus linker Tabelle + Matches
SELECT m.vorname, p.projektname
FROM mitarbeiter m
LEFT JOIN projekte p ON m.id = p.leiter_id;
Aggregatfunktionen
Aggregatfunktionen fassen mehrere Datensätze zu einem Ergebnis zusammen. Sie werden oft mit GROUP BY kombiniert, um Berechnungen für bestimmte Gruppen durchzuführen.
-- Grundlegende Aggregatfunktionen
SELECT
COUNT(*) AS anzahl_mitarbeiter,
AVG(gehalt) AS durchschnittsgehalt,
MAX(gehalt) AS hoechstes_gehalt,
MIN(gehalt) AS niedrigstes_gehalt,
SUM(gehalt) AS gehaltsumme
FROM mitarbeiter;
-- Mit GROUP BY für Abteilungen
SELECT
abteilung_id,
COUNT(*) AS anzahl,
AVG(gehalt) AS durchschnitt
FROM mitarbeiter
GROUP BY abteilung_id
HAVING COUNT(*) > 5;
Unterabfragen (Subqueries)
Unterabfragen sind SQL-Abfragen innerhalb einer äußeren Abfrage. Sie ermöglichen komplexe Datenabfragen in einem einzigen Statement.
-- Mitarbeiter mit überdurchschnittlichem Gehalt
SELECT vorname, nachname, gehalt
FROM mitarbeiter
WHERE gehalt > (
SELECT AVG(gehalt) FROM mitarbeiter
);
-- IN mit Unterabfrage
SELECT * FROM mitarbeiter
WHERE abteilung_id IN (
SELECT id FROM abteilungen WHERE standort = 'Berlin'
);
SQL-Dialekte und Datenbanksysteme
Obwohl SQL standardisiert ist, haben verschiedene Datenbankhersteller eigene Erweiterungen entwickelt. Der Kern-SQL-Standard wird von allen Systemen unterstützt, aber jedes System bietet zusätzliche Funktionen.
| Datenbanksystem | SQL-Dialekt | Haupteinsatzgebiet |
|---|---|---|
| Oracle Database | PL/SQL | Enterprise-Anwendungen, Großunternehmen |
| Microsoft SQL Server | T-SQL | Windows-Umgebungen, .NET-Anwendungen |
| MySQL/MariaDB | MySQL-SQL | Webanwendungen, LAMP-Stack |
| PostgreSQL | PL/pgSQL | Open-Source-Enterprise, GIS-Anwendungen |
| SQLite | Standard-SQL | Mobile Apps, eingebettete Systeme |
Laut aktuellen Statistiken dominieren relationale SQL-Datenbanken weiterhin den Markt mit etwa 58% Anteil. Oracle führt bei Enterprise-Lösungen, während MySQL und PostgreSQL im Open-Source-Bereich beliebt sind. Bemerkenswert ist, dass 79% der Unternehmen inzwischen zwei oder mehr Datenbanksysteme parallel einsetzen.
SQL-Sicherheit
Ein kritischer Aspekt bei der Arbeit mit SQL ist die Sicherheit. SQL-Injection gehört zu den häufigsten und gefährlichsten Angriffsmethoden auf Webanwendungen. Dabei schleusen Angreifer schadhaften SQL-Code über Benutzereingaben ein.
-- UNSICHER: Direkte String-Verkettung
$query = "SELECT * FROM users WHERE name = '" + userInput + "'";
-- SICHER: Prepared Statements verwenden
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = ?");
$stmt->execute([$userInput]);
Um dich vor SQL-Injection zu schützen, solltest du immer Prepared Statements oder Parameterized Queries verwenden. Zusätzlich helfen Eingabevalidierung und das Prinzip der minimalen Rechte (Least Privilege) bei der Absicherung.
SQL in der IT-Praxis
SQL ist eine der am häufigsten nachgefragten Fähigkeiten in der IT-Branche. Du begegnest SQL in nahezu jedem Bereich der Softwareentwicklung und Systemadministration:
- Backend-Entwicklung: Datenbankanbindung in Java, PHP oder Python
- Web-APIs: REST-APIs mit Datenbankzugriff
- Business Intelligence: Datenanalyse und Reporting
- DevOps: Datenbankmigration und -verwaltung
- Data Engineering: ETL-Prozesse und Data Warehousing
Als Fachinformatiker für Anwendungsentwicklung wirst du SQL täglich nutzen, um Anwendungen mit Datenbanken zu verbinden. Auch Fachinformatiker für Systemintegration benötigen SQL-Kenntnisse für die Administration und Wartung von Datenbanksystemen.
Quellen und weiterführende Links
- W3Schools SQL Tutorial - Interaktives SQL-Lernen
- PostgreSQL Dokumentation - Umfassende SQL-Referenz
- MySQL Dokumentation - Offizielle MySQL-Docs
- SQL Standard (ISO/IEC 9075) - Offizieller SQL-Standard
- SQLBolt - Interaktive SQL-Übungen
Prüfungsbezug
Passt zu deiner Prüfungsvorbereitung
Wenn dir dieser Begriff in Aufgaben, Projektdokumentation oder Fachgespräch begegnet, ordne ihn direkt in den Prüfungsstoff ein.