SQL Grundlagen

1 / 25

SQL Grundlagen

Structured Query Language

Von SELECT bis JOIN - Alles was du für die Prüfung brauchst

Drücke Leertaste oder → für die nächste Folie

Was ist SQL?

SQL = Structured Query Language

Standardsprache für relationale Datenbanken

✅ Wozu?

  • • Daten abfragen
  • • Daten einfügen
  • • Daten ändern
  • • Daten löschen

📊 Beispiele

  • • MySQL
  • • PostgreSQL
  • • Microsoft SQL Server
  • • Oracle Database

Wie ist eine Datenbank aufgebaut?

Datenbank → enthält mehrere Tabellen

Tabelle → besteht aus Spalten (Felder) und Zeilen (Datensätze)

KundenID Name Email Stadt
1 Max Müller max@mail.de Berlin
2 Anna Schmidt anna@mail.de Hamburg
3 Tom Weber tom@mail.de München

↑ Diese Tabelle heißt "Kunden" und hat 4 Spalten und 3 Zeilen

SELECT - Daten abfragen

Die wichtigste SQL-Anweisung überhaupt!

SELECT * FROM Kunden;

→ Zeigt alle Spalten aus der Tabelle "Kunden"

SELECT Name, Email FROM Kunden;

→ Zeigt nur die Spalten Name und Email

💡 Merke:

• * = alle Spalten

• Spaltennamen mit Komma trennen

• Jede Anweisung endet mit ;

WHERE - Daten filtern

Nur bestimmte Zeilen auswählen

SELECT * FROM Kunden WHERE Stadt = 'Berlin';

→ Nur Kunden aus Berlin

SELECT * FROM Bestellungen WHERE Betrag > 100;

→ Nur Bestellungen über 100 Euro

Vergleichsoperatoren:

= (gleich)

> (größer)

< (kleiner)

>= (größer gleich)

<= (kleiner gleich)

!= oder <> (ungleich)

⚠️ Wichtig:

Text in 'Anführungszeichen'

Zahlen ohne Anführungszeichen

Logische Operatoren: AND, OR, NOT

AND - Beide Bedingungen müssen erfüllt sein

SELECT * FROM Kunden WHERE Stadt = 'Berlin' AND PLZ > 10000;

OR - Mindestens eine Bedingung muss erfüllt sein

SELECT * FROM Kunden WHERE Stadt = 'Berlin' OR Stadt = 'Hamburg';

NOT - Negiert die Bedingung

SELECT * FROM Kunden WHERE NOT Stadt = 'Berlin';

LIKE - Mustersuche mit Platzhaltern

SELECT * FROM Kunden WHERE Name LIKE 'M%';

→ Namen die mit M beginnen (Max, Müller, Maria...)

SELECT * FROM Kunden WHERE Email LIKE '%@gmail.com';

→ Alle Gmail-Adressen

SELECT * FROM Kunden WHERE Name LIKE '%er%';

→ Namen die "er" enthalten (Weber, Müller, Werner...)

Platzhalter:

% = beliebig viele Zeichen (auch 0)

_ = genau ein Zeichen

IN und BETWEEN

IN - Wert in einer Liste

SELECT * FROM Kunden WHERE Stadt IN ('Berlin', 'Hamburg', 'München');

→ Kürzer als: Stadt = 'Berlin' OR Stadt = 'Hamburg' OR...

BETWEEN - Wertebereich

SELECT * FROM Kunden WHERE PLZ BETWEEN 10000 AND 20000;

→ PLZ von 10000 bis 20000 (inklusive Grenzen!)

💡 Tipp:

BETWEEN inkludiert die Grenzwerte (10000 und 20000 sind dabei)

ORDER BY - Sortierung

SELECT * FROM Kunden ORDER BY Name;

→ Sortiert nach Name aufsteigend (A-Z)

SELECT * FROM Kunden ORDER BY Name DESC;

→ Sortiert nach Name absteigend (Z-A)

SELECT * FROM Kunden ORDER BY Stadt, Name;

→ Erst nach Stadt, dann nach Name sortieren

ASC (aufsteigend):

A → Z

0 → 9

Standard (muss nicht angegeben werden)

DESC (absteigend):

Z → A

9 → 0

Muss explizit angegeben werden

LIMIT und DISTINCT

LIMIT - Anzahl begrenzen

SELECT * FROM Kunden LIMIT 5;

→ Nur die ersten 5 Datensätze

DISTINCT - Duplikate entfernen

SELECT DISTINCT Stadt FROM Kunden;

→ Jede Stadt nur einmal (keine Duplikate)

Kombination

SELECT * FROM Kunden ORDER BY Name LIMIT 10;

→ Die ersten 10 Kunden, sortiert nach Name

⚠️ Wichtig:

LIMIT kommt immer ganz am Ende der SQL-Anweisung!

Aggregatfunktionen

Berechnungen über mehrere Zeilen hinweg

COUNT()

Zählt Zeilen

SELECT COUNT(*) FROM Kunden;

SUM()

Addiert Werte

SELECT SUM(Betrag) FROM Bestellungen;

AVG()

Durchschnitt

SELECT AVG(Betrag) FROM Bestellungen;

MIN() / MAX()

Kleinster / Größter Wert

SELECT MAX(Betrag) FROM Bestellungen;

💡 Merke:

Aggregatfunktionen fassen mehrere Zeilen zu einem Ergebnis zusammen!

COUNT, SUM, AVG - Beispiele

Wie viele Kunden gibt es?

SELECT COUNT(*) FROM Kunden;

Ergebnis: Eine Zahl, z.B. 150

Gesamtumsatz aller Bestellungen?

SELECT SUM(Betrag) FROM Bestellungen;

Ergebnis: z.B. 45230.50

Durchschnittlicher Bestellwert?

SELECT AVG(Betrag) FROM Bestellungen;

Ergebnis: z.B. 87.45

⚠️ Wichtig:

WHERE kommt VOR der Aggregatfunktion!

SELECT COUNT(*) FROM Bestellungen WHERE Betrag > 100;

GROUP BY - Gruppierung

Aggregatfunktionen pro Gruppe berechnen

SELECT Stadt, COUNT(*) FROM Kunden GROUP BY Stadt;

→ Wie viele Kunden pro Stadt?

Stadt COUNT(*)
Berlin 45
Hamburg 32
München 28

⚠️ Goldene Regel:

Alle Spalten in SELECT (außer Aggregatfunktionen) müssen auch in GROUP BY stehen!

HAVING - Gruppen filtern

WHERE vs HAVING

WHERE

Filtert vor der Gruppierung

Einzelne Zeilen

HAVING

Filtert nach der Gruppierung

Gruppen/Aggregate

SELECT Stadt, COUNT(*) FROM Kunden GROUP BY Stadt HAVING COUNT(*) > 5;

→ Nur Städte mit mehr als 5 Kunden zeigen

SELECT KundenID, SUM(Betrag) FROM Bestellungen GROUP BY KundenID HAVING SUM(Betrag) > 500;

→ Nur Kunden mit Gesamtumsatz über 500€

SQL-Befehle: Richtige Reihenfolge!

1. SELECT - Welche Spalten?

2. FROM - Aus welcher Tabelle?

3. WHERE - Zeilen filtern (vor Gruppierung)

4. GROUP BY - Nach was gruppieren?

5. HAVING - Gruppen filtern (nach Gruppierung)

6. ORDER BY - Wie sortieren?

7. LIMIT - Wie viele Zeilen?

SELECT Stadt, COUNT(*) FROM Kunden WHERE PLZ > 10000 GROUP BY Stadt HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC LIMIT 5;

⚠️ Diese Reihenfolge ist Pflicht!

Falsche Reihenfolge = Fehler!

JOINs - Mehrere Tabellen verbinden

Warum JOINs?

Daten sind oft auf mehrere Tabellen verteilt:

Tabelle: Kunden

KundenIDName
1Max
2Anna

Tabelle: Bestellungen

BestellIDKundenIDBetrag
101150€
102175€
103230€

→ JOIN verbindet über KundenID

INNER JOIN

Nur Zeilen, die in BEIDEN Tabellen vorkommen

SELECT Kunden.Name, Bestellungen.Betrag FROM Bestellungen INNER JOIN Kunden ON Bestellungen.KundenID = Kunden.KundenID;

Ergebnis:

NameBetrag
Max50€
Max75€
Anna30€

💡 INNER JOIN:

Zeigt nur Datensätze, die in BEIDEN Tabellen einen passenden Wert haben

Kunde ohne Bestellung? → Wird NICHT angezeigt

LEFT JOIN

ALLE Zeilen der linken Tabelle + passende der rechten

SELECT Kunden.Name, Bestellungen.Betrag FROM Kunden LEFT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;

Ergebnis:

NameBetrag
Max50€
Max75€
Anna30€
TomNULL

Tom hat keine Bestellung → Betrag ist NULL

💡 LEFT JOIN:

Zeigt ALLE Kunden (linke Tabelle), auch die ohne Bestellung

Perfekt für: "Zeige auch Kunden ohne Bestellung"

JOIN-Syntax im Detail

SELECT Tabelle1.Spalte, Tabelle2.Spalte FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.SchlüsselSpalte = Tabelle2.SchlüsselSpalte;

Wichtige Punkte:

  • • Tabelle.Spalte - Gib immer an, aus welcher Tabelle die Spalte kommt
  • • ON - Definiert, wie die Tabellen verbunden werden
  • • Meist wird über ID-Spalten verbunden (z.B. KundenID)
-- Auch möglich: Alias verwenden SELECT k.Name, b.Betrag FROM Kunden AS k INNER JOIN Bestellungen AS b ON k.KundenID = b.KundenID;

→ AS gibt Tabellen einen kürzeren Namen

Mehrere JOINs kombinieren

Drei oder mehr Tabellen verbinden

SELECT Kunden.Name, Produkte.Produktname, Bestellungen.Menge FROM Bestellungen INNER JOIN Kunden ON Bestellungen.KundenID = Kunden.KundenID INNER JOIN Produkte ON Bestellungen.ProduktID = Produkte.ProduktID;

Ergebnis:

NameProduktnameMenge
MaxLaptop1
MaxMaus2
AnnaTastatur1

💡 Mehrere JOINs:

Jeder JOIN verbindet zwei Tabellen

Einfach nacheinander schreiben!

Unterabfragen (Subqueries)

SELECT innerhalb von SELECT

SELECT * FROM Bestellungen WHERE Betrag > (SELECT AVG(Betrag) FROM Bestellungen);

→ Alle Bestellungen über dem Durchschnitt

SELECT * FROM Kunden WHERE KundenID IN ( SELECT KundenID FROM Bestellungen );

→ Alle Kunden, die mindestens eine Bestellung haben

💡 Unterabfragen:

Die innere Abfrage wird zuerst ausgeführt

Das Ergebnis wird in der äußeren Abfrage verwendet

UNION - Ergebnisse kombinieren

Mehrere SELECT-Abfragen zu einem Ergebnis vereinen

SELECT Name FROM Kunden WHERE Stadt = 'Berlin' UNION SELECT Name FROM Kunden WHERE Stadt = 'Hamburg';

→ Alle Kunden aus Berlin und Hamburg (ohne Duplikate)

UNION

Entfernt Duplikate

SELECT ... UNION SELECT ...

UNION ALL

Behält Duplikate

SELECT ... UNION ALL SELECT ...

⚠️ Wichtig:

Beide SELECT-Abfragen müssen die GLEICHE ANZAHL Spalten haben!

Tipps für die Prüfung 🎯

✅ Do's:

  • • SQL-Schlüsselwörter GROSS schreiben (SELECT, FROM, WHERE...)
  • • Text immer in 'einfache Anführungszeichen'
  • • Jede Anweisung mit Semikolon (;) beenden
  • • Bei JOINs immer Tabelle.Spalte angeben
  • • Reihenfolge beachten: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

❌ Don'ts:

  • • Zahlen NICHT in Anführungszeichen
  • • WHERE und HAVING nicht verwechseln
  • • Bei GROUP BY alle Spalten (außer Aggregate) angeben
  • • LIMIT nicht vor ORDER BY schreiben

Häufige Fehler vermeiden ⚠️

❌ FALSCH:

SELECT Name, COUNT(*) FROM Kunden GROUP BY Stadt;

Name ist in SELECT, aber nicht in GROUP BY!

✅ RICHTIG:

SELECT Stadt, COUNT(*) FROM Kunden GROUP BY Stadt;

❌ FALSCH:

SELECT * FROM Kunden WHERE COUNT(*) > 5;

Aggregatfunktion in WHERE nicht erlaubt!

✅ RICHTIG:

SELECT Stadt, COUNT(*) FROM Kunden GROUP BY Stadt HAVING COUNT(*) > 5;

Zusammenfassung 📚

Grundlagen

  • ✓ SELECT, FROM
  • ✓ WHERE
  • ✓ AND, OR, NOT
  • ✓ LIKE, IN, BETWEEN

Sortierung

  • ✓ ORDER BY (ASC/DESC)
  • ✓ LIMIT
  • ✓ DISTINCT

Aggregation

  • ✓ COUNT, SUM, AVG
  • ✓ MIN, MAX
  • ✓ GROUP BY
  • ✓ HAVING

Erweitert

  • ✓ INNER JOIN
  • ✓ LEFT JOIN
  • ✓ Unterabfragen
  • ✓ UNION

Viel Erfolg! 🚀

Jetzt geht's zu den Übungen!