# Datenbank - SQL & Tabellen

# IHK  SQL-Trainer - Fachinformatiker Systemintegration



# SQL - Trainer 01 – Grundlagen bis JOIN

<p><strong>Schwierigkeitsstufe:  einfach-mittel </strong></p>

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-01.html?v=5"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-01.html?v=5"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 02 – Kombinierte SQL-Abfragen

<p><strong>Schwierigkeitsstufe:  mittel-schwer </strong></p>

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-02.html?v=2"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-02.html?v=2"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 02 im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 03 – Materialverwaltung

<p><strong>Schwierigkeitsstufe:  mittel </strong></p>

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-03.html?v=1"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-03.html?v=1"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 03 im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 04 - Schulungs-PCs

Schwierigkeitsstufe: mittel

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-04.html?v=1"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-04.html?v=1"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 04 im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 05 – Filter, Datum und Aggregation

<p><strong>Schwierigkeitsstufe: mittel</strong></p>

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-05.html?v=1"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-05.html?v=1"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 05 im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 06 – Fortbildung

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-06.html?v=4"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-06.html?v=4"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 06 im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 07 – Kursdatenbank

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-07.html?v=1"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-07.html?v=1"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 07 im Vollbild öffnen
  </a>
</div>

# SQL - Trainer 08 – Mietimmobilien

<div style="width:100%; margin:0 0 16px 0;">
  <iframe
    src="https://trainer.ulrich-wiki.com/sql-trainer-ihk-08.html?v=4"
    width="100%"
    height="1250"
    style="display:block; width:100%; min-height:1250px; border:1px solid #444; border-radius:12px; background:#111827;"
    loading="lazy"
    allowfullscreen>
  </iframe>
</div>

<div style="margin:16px 0;">
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-ihk-08.html?v=4"
     target="_blank"
     rel="noopener"
     style="display:inline-block; padding:12px 18px; background:#2563eb; color:#ffffff; font-weight:bold; text-decoration:none; border-radius:10px; border:1px solid #1d4ed8;">
    SQL-Trainer 08 im Vollbild öffnen
  </a>
</div>

# SQL-Trainer 08 – Northwind Datenbank

<p>
  <a href="https://trainer.ulrich-wiki.com/sql-trainer-08-northwind.html?v=9" target="_blank"
     style="display:inline-block; padding:10px 14px; background:#2563eb; color:white; text-decoration:none; border-radius:8px; font-weight:bold;">
    SQL-Trainer 08 im Vollbild öffnen
  </a>
</p>

<iframe src="https://trainer.ulrich-wiki.com/sql-trainer-08-northwind.html?v=9"
        style="width:100%; height:1100px; border:0; border-radius:12px;"
        loading="lazy">
</iframe>

# Kapitel 1 – Grundlagen



# 1.1 Datenbank, Datenbanksystem und DBMS

**Definition**

Eine **Datenbank** ist eine strukturierte Sammlung von Daten.

Ein **Datenbanksystem** besteht aus der Datenbank und dem Datenbankmanagementsystem.

Ein **DBMS** ist die Software zur Verwaltung der Datenbank.

---

**Begriffe**

| Begriff | Bedeutung |
|--------|-----------|
| Datenbank | gespeicherte, strukturierte Daten |
| DBMS | Software zur Verwaltung der Datenbank |
| Datenbanksystem | Datenbank + DBMS |

---

**Aufgaben eines DBMS**

Ein DBMS übernimmt unter anderem:

- Daten speichern
- Daten suchen
- Daten ändern
- Daten löschen
- Zugriffe verwalten
- Datenintegrität sichern
- gleichzeitige Zugriffe steuern

---

**Beispiele für DBMS**

| DBMS | Typischer Einsatz |
|------|------------------|
| MySQL | Webanwendungen |
| MariaDB | Webanwendungen |
| PostgreSQL | Server, Anwendungen |
| Microsoft SQL Server | Unternehmen |
| Oracle Database | große Unternehmenssysteme |
| SQLite | lokale Anwendungen |

---

**Merksatz**

Eine Datenbank enthält die Daten.  
Das DBMS verwaltet diese Daten.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig zwischen **Datenbank**, **DBMS** und **Datenbanksystem** unterschieden.

Typische Fehler:

- Datenbank und DBMS gleichsetzen.
- DBMS als eigentliche Datensammlung verstehen.
- Datenbanksystem und Datenbank verwechseln.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 1.2 Tabelle, Datensatz und Feld

**Definition**

Eine **Tabelle** speichert Daten in Zeilen und Spalten.

Ein **Datensatz** ist eine Zeile in einer Tabelle.

Ein **Feld** ist eine einzelne Information innerhalb eines Datensatzes.

---

**Begriffe**

| Begriff | Bedeutung |
|--------|-----------|
| Tabelle | Sammlung gleichartiger Datensätze |
| Datensatz | eine Zeile in einer Tabelle |
| Feld | einzelner Wert in einem Datensatz |
| Attribut | Spalte einer Tabelle |
| Spalte | Eigenschaft eines Datensatzes |

---

**Beispiel**

Tabelle: **Kunde**

| Kundennr | Name | Ort |
|---------:|------|-----|
| 1 | Müller | Berlin |
| 2 | Schneider | Potsdam |

---

**Zuordnung**

| Element | Beispiel |
|--------|----------|
| Tabelle | Kunde |
| Datensatz | 1, Müller, Berlin |
| Feld | Müller |
| Attribut / Spalte | Name |

---

**Merksatz**

Eine Tabelle besteht aus **Spalten** und **Zeilen**.  
Eine Zeile ist ein **Datensatz**.  
Ein einzelner Wert ist ein **Feld**.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig zwischen **Tabelle**, **Datensatz**, **Feld**, **Attribut** und **Spalte** unterschieden.

Typische Fehler:

- Datensatz und Feld verwechseln.
- Attribut und Datensatz verwechseln.
- Tabelle als einzelne Zeile verstehen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 1.3 Primärschlüssel und Fremdschlüssel

**Definition**

Ein **Primärschlüssel** identifiziert jeden Datensatz einer Tabelle eindeutig.

Ein **Fremdschlüssel** verweist auf den Primärschlüssel einer anderen Tabelle.

---

**Primärschlüssel**

Ein Primärschlüssel muss:

- eindeutig sein
- vorhanden sein
- jeden Datensatz eindeutig identifizieren

**Beispiele**

- Kundennr
- Artikelnummer
- Rechnungsnummer
- Personalnummer

---

**Fremdschlüssel**

Ein Fremdschlüssel stellt eine Beziehung zwischen zwei Tabellen her.

Er verweist auf den Primärschlüssel einer anderen Tabelle.

---

**Beispiel**

Tabelle: **Kunde**

| Kundennr | Name |
|---------:|------|
| 1 | Müller |
| 2 | Schneider |

Tabelle: **Bestellung**

| Bestellnr | Kundennr |
|----------:|---------:|
| 1001 | 1 |
| 1002 | 2 |

In der Tabelle **Bestellung** ist **Kundennr** ein Fremdschlüssel.

---

**Merksatz**

Der Primärschlüssel identifiziert einen Datensatz.  
Der Fremdschlüssel verbindet Tabellen miteinander.

---

**Prüfungshinweis**

In IHK-Aufgaben müssen Primärschlüssel und Fremdschlüssel häufig in Tabellenmodellen eingetragen werden.

Typische Fehler:

- Primärschlüssel und Fremdschlüssel verwechseln.
- keinen eindeutigen Primärschlüssel wählen.
- Fremdschlüssel nicht als Verbindung zwischen Tabellen erkennen.
- zusammengesetzte Schlüssel bei Zwischentabellen vergessen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 1.4 Redundanz, Inkonsistenz und Datenintegrität

**Definition**

**Redundanz** bedeutet, dass gleiche Daten mehrfach gespeichert werden.

**Inkonsistenz** bedeutet, dass widersprüchliche Daten vorhanden sind.

**Datenintegrität** bedeutet, dass Daten korrekt, vollständig und widerspruchsfrei sind.

---

**Begriffe**

| Begriff | Bedeutung |
|--------|-----------|
| Redundanz | doppelte oder mehrfache Speicherung gleicher Daten |
| Inkonsistenz | widersprüchliche Daten |
| Datenintegrität | Korrektheit und Widerspruchsfreiheit der Daten |

---

**Beispiel für Redundanz**

Ein Kundenname wird in mehreren Tabellen mehrfach gespeichert.

Ändert sich der Name nur an einer Stelle, entstehen unterschiedliche Datenstände.

---

**Beispiel für Inkonsistenz**

| Tabelle | gespeicherter Name |
|--------|--------------------|
| Kunde | Müller GmbH |
| Rechnung | Mueller GmbH |

Die Daten widersprechen sich.

---

**Ziel**

Datenbanken sollen Redundanzen vermeiden und Datenintegrität sicherstellen.

Das geschieht unter anderem durch:

- Primärschlüssel
- Fremdschlüssel
- Normalisierung
- Constraints
- eindeutige Datenhaltung

---

**Merksatz**

Redundanz kann zu Inkonsistenz führen.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, warum Daten normalisiert oder auf mehrere Tabellen verteilt werden.

Typische Fehler:

- Redundanz als grundsätzlich gewünscht ansehen.
- Inkonsistenz mit Redundanz gleichsetzen.
- Datenintegrität nur auf Datenschutz beziehen.
- Fremdschlüssel nicht als Maßnahme zur Datenintegrität erkennen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 2 – Datenmodellierung



# 2.1 Entity-Relationship-Modell

**Definition**

Das **Entity-Relationship-Modell** beschreibt Daten und deren Beziehungen zueinander.

Es wird zur Planung und Darstellung von Datenbanken verwendet.

---

**Bestandteile**

| Bestandteil | Bedeutung |
|------------|-----------|
| Entität | Objekt oder Sache, über die Daten gespeichert werden |
| Attribut | Eigenschaft einer Entität |
| Beziehung | Verbindung zwischen Entitäten |
| Kardinalität | beschreibt, wie viele Entitäten miteinander verbunden sind |

---

**Beispiel**

Entitäten:

- Kunde
- Bestellung
- Artikel

Beziehungen:

- Ein Kunde gibt Bestellungen auf.
- Eine Bestellung enthält Artikel.

---

**Darstellung**

Ein ERM zeigt:

- welche Entitäten vorhanden sind
- welche Attribute dazugehören
- wie Entitäten miteinander in Beziehung stehen
- welche Kardinalitäten gelten

---

**Merksatz**

Das ERM ist der Bauplan für eine relationale Datenbank.

---

**Prüfungshinweis**

In IHK-Aufgaben muss häufig aus einer Beschreibung ein ERM oder ein Tabellenmodell erstellt werden.

Typische Fehler:

- Entität und Attribut verwechseln.
- Beziehung nicht einzeichnen.
- Kardinalitäten falsch bestimmen.
- N:M-Beziehungen nicht auflösen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 2.2 Entität, Attribut und Beziehung

**Definition**

Eine **Entität** ist ein eindeutig bestimmbares Objekt, über das Daten gespeichert werden.

Ein **Attribut** beschreibt eine Eigenschaft einer Entität.

Eine **Beziehung** beschreibt den Zusammenhang zwischen Entitäten.

---

**Begriffe**

| Begriff | Bedeutung |
|--------|-----------|
| Entität | einzelnes Objekt |
| Entitätstyp | Gruppe gleichartiger Entitäten |
| Attribut | Eigenschaft einer Entität |
| Beziehung | Verbindung zwischen Entitäten |

---

**Beispiel**

Entitätstyp:

**Kunde**

Attribute:

- Kundennummer
- Name
- Adresse
- Telefonnummer

Entität:

Ein bestimmter Kunde, z. B. **Kunde Müller**

---

**Beziehung**

Beispiel:

Ein **Kunde** gibt eine **Bestellung** auf.

Dabei stehen die Entitäten **Kunde** und **Bestellung** in Beziehung zueinander.

---

**Merksatz**

Entität = Objekt  
Attribut = Eigenschaft  
Beziehung = Verbindung

---

**Prüfungshinweis**

In IHK-Aufgaben müssen aus Texten häufig Entitäten, Attribute und Beziehungen erkannt werden.

Typische Fehler:

- Attribut als eigene Entität behandeln.
- Entität und Entitätstyp verwechseln.
- Beziehung nicht aus dem Verb im Aufgabentext erkennen.
- zu viele unnötige Entitäten bilden.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 2.3 Kardinalitäten

**Definition**

**Kardinalitäten** beschreiben, wie viele Datensätze einer Tabelle mit Datensätzen einer anderen Tabelle in Beziehung stehen können.

---

**Wichtige Kardinalitäten**

| Kardinalität | Bedeutung |
|-------------|-----------|
| 1:1 | Ein Datensatz gehört zu genau einem anderen Datensatz |
| 1:n | Ein Datensatz kann zu mehreren anderen Datensätzen gehören |
| n:m | Mehrere Datensätze können zu mehreren anderen Datensätzen gehören |

---

**1:1-Beziehung**

Ein Datensatz in Tabelle A gehört zu genau einem Datensatz in Tabelle B.

**Beispiel**

Ein Mitarbeiter hat genau einen Mitarbeiterausweis.

---

**1:n-Beziehung**

Ein Datensatz in Tabelle A kann zu mehreren Datensätzen in Tabelle B gehören.

**Beispiel**

Ein Kunde kann mehrere Bestellungen aufgeben.

---

**n:m-Beziehung**

Mehrere Datensätze aus Tabelle A können mit mehreren Datensätzen aus Tabelle B verbunden sein.

**Beispiel**

Eine Bestellung kann mehrere Artikel enthalten.  
Ein Artikel kann in mehreren Bestellungen vorkommen.

---

**Merksatz**

1:n ist die häufigste Beziehung in relationalen Datenbanken.

---

**Prüfungshinweis**

In IHK-Aufgaben müssen Kardinalitäten häufig aus dem Aufgabentext abgeleitet werden.

Typische Fehler:

- 1:n und n:m verwechseln.
- n:m-Beziehungen nicht auflösen.
- Kardinalität aus Sicht nur einer Tabelle betrachten.
- Wörter wie „mehrere“, „genau ein“, „mindestens“ oder „kann“ überlesen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 2.4 N:M-Beziehungen auflösen

**Definition**

Eine **N:M-Beziehung** kann in einer relationalen Datenbank nicht direkt umgesetzt werden.

Sie wird durch eine zusätzliche **Zwischentabelle** aufgelöst.

---

**Grundprinzip**

Aus einer N:M-Beziehung werden zwei 1:n-Beziehungen.

---

**Beispiel**

Eine **Bestellung** kann mehrere **Artikel** enthalten.  
Ein **Artikel** kann in mehreren **Bestellungen** vorkommen.

Das ist eine N:M-Beziehung.

---

**Auflösung**

| Tabelle | Aufgabe |
|--------|---------|
| Bestellung | speichert Bestellungen |
| Artikel | speichert Artikel |
| Bestellposition | verbindet Bestellung und Artikel |

---

**Zwischentabelle**

Die Zwischentabelle enthält normalerweise:

- Fremdschlüssel auf Tabelle A
- Fremdschlüssel auf Tabelle B
- ggf. weitere Attribute

Beispiel:

| Attribut | Bedeutung |
|---------|-----------|
| Bestellnr | Fremdschlüssel auf Bestellung |
| Artikelnr | Fremdschlüssel auf Artikel |
| Menge | zusätzliche Information zur Beziehung |

---

**Merksatz**

Eine N:M-Beziehung wird durch eine Zwischentabelle aufgelöst.

---

**Prüfungshinweis**

In IHK-Aufgaben müssen N:M-Beziehungen fast immer in eine zusätzliche Tabelle umgewandelt werden.

Typische Fehler:

- N:M-Beziehung direkt als Fremdschlüssel eintragen.
- Zwischentabelle vergessen.
- Fremdschlüssel in der Zwischentabelle nicht eintragen.
- zusätzliche Attribute der Beziehung vergessen, z. B. Menge oder Preis.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 2.5 Relationenmodell

**Definition**

Das **Relationenmodell** beschreibt eine Datenbank in Form von Tabellen.

Jede Tabelle enthält Attribute, Primärschlüssel und ggf. Fremdschlüssel.

---

**Bestandteile**

| Bestandteil | Bedeutung |
|------------|-----------|
| Relation | Tabelle |
| Attribut | Spalte |
| Tupel | Datensatz / Zeile |
| Primärschlüssel | eindeutige Kennzeichnung eines Datensatzes |
| Fremdschlüssel | Verweis auf eine andere Tabelle |

---

**Beispiel**

**Kunde**

| Kundennr (PK) | Name | Ort |
|--------------:|------|-----|
| 1 | Müller | Berlin |
| 2 | Schneider | Potsdam |

**Bestellung**

| Bestellnr (PK) | Datum | Kundennr (FK) |
|---------------:|-------|--------------:|
| 1001 | 12.03.2026 | 1 |
| 1002 | 14.03.2026 | 2 |

---

**Schreibweise**

Kunde(**Kundennr**, Name, Ort)

Bestellung(**Bestellnr**, Datum, Kundennr*)

---

**Hinweis zur Schreibweise**

- **Primärschlüssel** wird häufig unterstrichen oder mit **PK** gekennzeichnet.
- **Fremdschlüssel** wird häufig mit **FK** oder einem Sternchen gekennzeichnet.

---

**Merksatz**

Das Relationenmodell überführt das ERM in Tabellen.

---

**Prüfungshinweis**

In IHK-Aufgaben muss häufig aus einem ERM ein Relationenmodell erstellt werden.

Typische Fehler:

- Primärschlüssel vergessen.
- Fremdschlüssel nicht eintragen.
- N:M-Beziehung nicht durch Zwischentabelle auflösen.
- Attribute der falschen Tabelle zuordnen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 3 – Normalisierung



# 3.1 Normalisierung

**3.1 Normalisierung**

**Definition**

**Normalisierung** ist ein Verfahren zur Strukturierung von Daten in relationalen Datenbanken.

Ziel ist es, Redundanzen zu vermeiden und Daten konsistent zu speichern.

---

**Ziele**

Die Normalisierung soll:

- doppelte Daten vermeiden
- Datenintegrität verbessern
- Inkonsistenzen verhindern
- Änderungsanomalien vermeiden
- Tabellen sinnvoll aufteilen

---

**Grundprinzip**

Daten werden so auf mehrere Tabellen verteilt, dass jede Information möglichst nur einmal gespeichert wird.

---

**Wichtige Normalformen**

| Normalform | Bedeutung |
|-----------|-----------|
| 1. Normalform | atomare Werte |
| 2. Normalform | volle Abhängigkeit vom gesamten Primärschlüssel |
| 3. Normalform | keine Abhängigkeit von Nicht-Schlüsselattributen |

---

**Beispiel**

Problem:

Kundendaten werden in jeder Bestellung erneut gespeichert.

Lösung:

Kundendaten werden in eine eigene Tabelle **Kunde** ausgelagert und über einen Fremdschlüssel mit **Bestellung** verbunden.

---

**Merksatz**

Normalisierung reduziert Redundanzen und verhindert widersprüchliche Daten.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, warum Tabellen aufgeteilt oder Fremdschlüssel verwendet werden.

Typische Fehler:

- Redundanzen nicht erkennen.
- Normalisierung nur als Speicherplatzersparnis verstehen.
- Fremdschlüssel nach dem Aufteilen vergessen.
- N:M-Beziehungen nicht auflösen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 3.2 Erste, zweite und dritte Normalform

**Definition**

**Normalformen** beschreiben Regeln zur Strukturierung von Tabellen in relationalen Datenbanken.

Ziel ist es, Redundanzen und Anomalien zu vermeiden.



---

**1. Normalform**

Eine Tabelle befindet sich in der **1. Normalform**, wenn alle Werte atomar sind.

Das bedeutet:

- jedes Feld enthält nur einen Wert
- keine Aufzählungen in einem Feld
- keine mehrfachen Werte in einer Zelle

**Beispiel falsch**

| Kundennr | Name | Telefonnummern |
|---------:|------|----------------|
| 1 | Müller | 030123, 0176123 |

**Beispiel richtig**

| Kundennr | Name | Telefonnummer |
|---------:|------|---------------|
| 1 | Müller | 030123 |
| 1 | Müller | 0176123 |

---

**2. Normalform**

Eine Tabelle befindet sich in der **2. Normalform**, wenn sie in der 1. Normalform ist und jedes Nicht-Schlüsselattribut vom gesamten Primärschlüssel abhängig ist.

Wichtig bei:

- zusammengesetzten Primärschlüsseln
- Zwischentabellen
- N:M-Beziehungen

---

**3. Normalform**

Eine Tabelle befindet sich in der **3. Normalform**, wenn sie in der 2. Normalform ist und keine Nicht-Schlüsselattribute voneinander abhängig sind.

Das bedeutet:

- Attribute dürfen nur vom Schlüssel abhängen
- nicht von anderen Nicht-Schlüsselattributen

---

**Übersicht**

| Normalform | Kerngedanke |
|-----------|-------------|
| 1. Normalform | atomare Werte |
| 2. Normalform | abhängig vom gesamten Primärschlüssel |
| 3. Normalform | keine Abhängigkeit von Nicht-Schlüsselattributen |

---

**Merksatz**

1NF = atomar  
2NF = vom ganzen Schlüssel abhängig  
3NF = nur vom Schlüssel abhängig

---

**Prüfungshinweis**

In IHK-Aufgaben werden meist die **1. bis 3. Normalform** abgefragt.

Typische Fehler:

- mehrere Werte in einem Feld zulassen
- zusammengesetzte Schlüssel nicht beachten
- Attribute in der falschen Tabelle lassen
- transitive Abhängigkeiten nicht erkennen

**Hinweis**

In der Datenbanktheorie gibt es weitere Normalformen, z. B. die **4. Normalform** und **5. Normalform**.  
Für IHK-Aufgaben sind jedoch meistens die **1. bis 3. Normalform** entscheidend.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 3.3 Anomalien

**Definition**

**Anomalien** sind Probleme, die durch ungünstige Tabellenstrukturen und redundante Daten entstehen können.

Sie treten häufig auf, wenn Daten nicht ausreichend normalisiert sind.

---

**Arten von Anomalien**

| Anomalie | Bedeutung |
|---------|-----------|
| Einfügeanomalie | Daten können nicht sinnvoll eingefügt werden |
| Änderungsanomalie | Änderungen müssen mehrfach durchgeführt werden |
| Löschanomalie | Beim Löschen gehen ungewollt weitere Informationen verloren |

---

**Einfügeanomalie**

Eine **Einfügeanomalie** liegt vor, wenn neue Daten nicht gespeichert werden können, ohne andere Daten ebenfalls anzugeben.

**Beispiel**

Ein neuer Artikel kann nicht gespeichert werden, solange noch keine Bestellung dazu existiert.

---

**Änderungsanomalie**

Eine **Änderungsanomalie** liegt vor, wenn dieselbe Information an mehreren Stellen geändert werden muss.

**Beispiel**

Eine Kundenadresse ist mehrfach gespeichert und wird nur an einer Stelle geändert.

---

**Löschanomalie**

Eine **Löschanomalie** liegt vor, wenn beim Löschen eines Datensatzes auch wichtige andere Informationen verloren gehen.

**Beispiel**

Wird die letzte Bestellung eines Kunden gelöscht, verschwinden auch die Kundendaten.

---

**Merksatz**

Anomalien entstehen häufig durch Redundanz.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, warum Tabellen normalisiert oder aufgeteilt werden sollen.

Typische Fehler:

- Anomalien nur als technische Fehler verstehen.
- Redundanz nicht als Ursache erkennen.
- Löschanomalie und Änderungsanomalie verwechseln.
- Normalisierung nicht als Lösung erkennen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 3.4 Zusatz: Vierte und fünfte Normalform

**Definition**

Neben der ersten, zweiten und dritten Normalform gibt es weitere Normalformen.

Für die IHK sind meistens die **1. bis 3. Normalform** wichtig.

Die **4. Normalform** und **5. Normalform** sind eher Zusatzwissen für komplexere Datenbankmodelle.

---


**Übersicht**

| Normalform | Fachlicher Name | Kerngedanke |
|-----------|-----------------|-------------|
| 1. Normalform | 1NF | atomare Werte |
| 2. Normalform | 2NF | abhängig vom gesamten Primärschlüssel |
| 3. Normalform | 3NF | keine Abhängigkeit von Nicht-Schlüsselattributen |
| BCNF | Boyce-Codd-Normalform | strengere Form der 3NF |
| 4. Normalform | 4NF | keine unabhängigen Mehrfachabhängigkeiten |
| 5. Normalform | 5NF / PJNF | keine verlustbehafteten Zerlegungen |

---

**4. Normalform**

Eine Tabelle befindet sich in der **4. Normalform**, wenn sie in der 3. Normalform ist und keine unabhängigen Mehrfachabhängigkeiten enthält.

Eine Mehrfachabhängigkeit entsteht, wenn zu einem Datensatz mehrere voneinander unabhängige Werte gespeichert werden.

**Beispiel**

Ein Mitarbeiter kann mehrere Sprachen sprechen.  
Ein Mitarbeiter kann mehrere Projekte bearbeiten.

Wenn Sprachen und Projekte unabhängig voneinander sind, sollten sie nicht gemeinsam in einer Tabelle gespeichert werden.

**Besser**

- Mitarbeiter
- Mitarbeiter_Sprache
- Mitarbeiter_Projekt

---

**5. Normalform**

Eine Tabelle befindet sich in der **5. Normalform**, wenn sie nicht weiter verlustfrei in kleinere Tabellen zerlegt werden kann.

Dabei geht es um sehr komplexe Beziehungen zwischen mehreren Tabellen.

Die 5. Normalform ist in der Praxis und in der IHK-Prüfung deutlich seltener relevant.

---

**Merksatz**

1NF bis 3NF sind für die IHK am wichtigsten.  
4NF und 5NF sind Zusatzwissen für komplexere Datenbankstrukturen.

---

**Prüfungshinweis**

In IHK-Aufgaben werden normalerweise die **1. bis 3. Normalform** abgefragt.

Die 4. und 5. Normalform sollte man kennen, aber nicht so tief lernen wie die ersten drei Normalformen.

Typische Fehler:

- 4NF und 5NF für normale IHK-Aufgaben überlernen.
- Mehrfachabhängigkeiten mit normalen Fremdschlüsseln verwechseln.
- 5NF mit 3NF gleichsetzen.
- Tabellen zu stark zerlegen, obwohl es für die Aufgabe nicht nötig ist.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 4 – SQL-Grundlagen



# 4.1 SELECT, FROM und WHERE

**Definition**

**SELECT**, **FROM** und **WHERE** gehören zu den wichtigsten SQL-Befehlen für Datenbankabfragen.

Mit ihnen werden Daten aus Tabellen ausgewählt und gefiltert.

---

**Grundaufbau**

```sql
SELECT spalte
FROM tabelle
WHERE bedingung;
```

---

**SELECT**

**SELECT** legt fest, welche Spalten ausgegeben werden sollen.

Beispiel:

```sql
SELECT name
FROM kunde;
```

---

**FROM**

**FROM** legt fest, aus welcher Tabelle die Daten gelesen werden.

Beispiel:

```sql
SELECT name
FROM kunde;
```

---

**WHERE**

**WHERE** filtert Datensätze nach einer Bedingung.

Beispiel:

```sql
SELECT name
FROM kunde
WHERE ort = 'Berlin';
```

---

**Alle Spalten ausgeben**

```sql
SELECT *
FROM kunde;
```

Das Sternchen **\*** steht für alle Spalten.

---

**Merksatz**

SELECT = welche Spalten  
FROM = aus welcher Tabelle  
WHERE = welche Bedingung

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, welche Datensätze mit einer SQL-Abfrage ausgegeben werden.

Typische Fehler:

- SELECT und FROM vertauschen.
- WHERE vergessen.
- Textwerte nicht in Anführungszeichen setzen.
- `=` mit `LIKE` verwechseln.
- `SELECT *` verwenden, obwohl nur bestimmte Spalten gefragt sind.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 4.2 ORDER BY und DISTINCT

**Definition**

**ORDER BY** sortiert das Ergebnis einer SQL-Abfrage.

**DISTINCT** entfernt doppelte Werte aus dem Ergebnis.

---

**ORDER BY**

Mit **ORDER BY** werden Datensätze sortiert.

```sql
SELECT name, ort
FROM kunde
ORDER BY name;
```

---

**ASC und DESC**

| Schlüsselwort | Bedeutung |
|--------------|-----------|
| ASC | aufsteigend sortieren |
| DESC | absteigend sortieren |

---

**Beispiel aufsteigend**

```sql
SELECT name, ort
FROM kunde
ORDER BY name ASC;
```

---

**Beispiel absteigend**

```sql
SELECT name, ort
FROM kunde
ORDER BY name DESC;
```

---

**DISTINCT**

Mit **DISTINCT** werden doppelte Werte entfernt.

```sql
SELECT DISTINCT ort
FROM kunde;
```

---

**Merksatz**

ORDER BY sortiert.  
DISTINCT entfernt doppelte Werte.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, in welcher Reihenfolge Datensätze ausgegeben werden oder wie doppelte Werte vermieden werden.

Typische Fehler:

- ORDER BY vor WHERE schreiben.
- ASC und DESC verwechseln.
- DISTINCT mit GROUP BY verwechseln.
- DISTINCT auf einzelne Werte falsch verstehen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 4.3 Vergleichsoperatoren

**Definition**

**Vergleichsoperatoren** werden in SQL verwendet, um Werte miteinander zu vergleichen.

Sie werden häufig in der **WHERE-Klausel** eingesetzt.

---

**Wichtige Vergleichsoperatoren**

| Operator | Bedeutung |
|---------|-----------|
| = | gleich |
| <> | ungleich |
| < | kleiner als |
| > | größer als |
| <= | kleiner oder gleich |
| >= | größer oder gleich |

---

**Beispiele**

**Gleich**

```sql
SELECT *
FROM kunde
WHERE ort = 'Berlin';
```

**Ungleich**

```sql
SELECT *
FROM kunde
WHERE ort <> 'Berlin';
```

**Größer als**

```sql
SELECT *
FROM artikel
WHERE preis > 100;
```

**Kleiner oder gleich**

```sql
SELECT *
FROM artikel
WHERE bestand <= 10;
```

---

**Textwerte**

Textwerte werden in SQL normalerweise in einfache Anführungszeichen gesetzt.

```sql
WHERE name = 'Müller'
```

---

**Zahlenwerte**

Zahlenwerte werden ohne Anführungszeichen geschrieben.

```sql
WHERE preis >= 50
```

---

**Merksatz**

Vergleichsoperatoren prüfen Bedingungen in der WHERE-Klausel.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig geprüft, ob die richtige Bedingung für eine Abfrage gewählt wurde.

Typische Fehler:

- `=` und `<>` verwechseln.
- Textwerte ohne Anführungszeichen schreiben.
- Zahlenwerte unnötig in Anführungszeichen setzen.
- `<` und `>` vertauschen.
- WHERE-Klausel vergessen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 4.4 LIKE, IN, BETWEEN und IS NULL

**Definition**

**LIKE**, **IN**, **BETWEEN** und **IS NULL** werden in SQL verwendet, um Daten gezielt zu filtern.

Sie werden meistens in der **WHERE-Klausel** eingesetzt.

---

**LIKE**

**LIKE** sucht nach Mustern in Textwerten.

```sql
SELECT *
FROM kunde
WHERE name LIKE 'M%';
```

Bedeutung:

Alle Kunden, deren Name mit **M** beginnt.

---

**Platzhalter bei LIKE**

| Platzhalter | Bedeutung |
|------------|-----------|
| % | beliebig viele Zeichen |
| _ | genau ein Zeichen |

---

**IN**

**IN** prüft, ob ein Wert in einer Liste enthalten ist.

```sql
SELECT *
FROM kunde
WHERE ort IN ('Berlin', 'Potsdam');
```

---

**BETWEEN**

**BETWEEN** prüft, ob ein Wert in einem Bereich liegt.

```sql
SELECT *
FROM artikel
WHERE preis BETWEEN 50 AND 100;
```

---

**IS NULL**

**IS NULL** prüft, ob ein Feld keinen Wert enthält.

```sql
SELECT *
FROM kunde
WHERE telefon IS NULL;
```

---

**Übersicht**

| Ausdruck | Bedeutung |
|---------|-----------|
| LIKE | Mustervergleich |
| IN | Wert ist in einer Liste enthalten |
| BETWEEN | Wert liegt zwischen zwei Grenzen |
| IS NULL | Feld ist leer / ohne Wert |

---

**Merksatz**

LIKE sucht Muster.  
IN sucht in Listen.  
BETWEEN sucht Bereiche.  
IS NULL sucht fehlende Werte.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, welcher Operator für eine bestimmte Filterung geeignet ist.

Typische Fehler:

- `=` statt `LIKE` für Muster verwenden.
- `%` und `_` verwechseln.
- `NULL` mit `= NULL` prüfen.
- `BETWEEN` mit zwei Einzelbedingungen verwechseln.
- Textwerte ohne Anführungszeichen schreiben.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 5 – SQL-Auswertung



# 5.1 Aggregatfunktionen

**Definition**

**Aggregatfunktionen** berechnen einen einzelnen Ergebniswert aus mehreren Datensätzen.

Sie werden häufig zusammen mit **GROUP BY** verwendet.

---

**Wichtige Aggregatfunktionen**

| Funktion | Bedeutung |
|---------|-----------|
| COUNT() | zählt Datensätze |
| SUM() | berechnet die Summe |
| AVG() | berechnet den Durchschnitt |
| MIN() | ermittelt den kleinsten Wert |
| MAX() | ermittelt den größten Wert |

---

**COUNT**

```sql
SELECT COUNT(*)
FROM kunde;
```

Zählt alle Datensätze der Tabelle **kunde**.

---

**SUM**

```sql
SELECT SUM(preis)
FROM artikel;
```

Berechnet die Summe aller Werte in der Spalte **preis**.

---

**AVG**

```sql
SELECT AVG(preis)
FROM artikel;
```

Berechnet den Durchschnitt der Werte in der Spalte **preis**.

---

**MIN und MAX**

```sql
SELECT MIN(preis), MAX(preis)
FROM artikel;
```

Ermittelt den kleinsten und größten Preis.

---

**Merksatz**

Aggregatfunktionen fassen mehrere Datensätze zu einem Ergebnis zusammen.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig gefragt, welche Funktion für Zählen, Summe oder Durchschnitt verwendet wird.

Typische Fehler:

- COUNT und SUM verwechseln.
- AVG für die Summe verwenden.
- Aggregatfunktionen ohne GROUP BY falsch interpretieren.
- WHERE und HAVING verwechseln.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 5.2 GROUP BY

**Definition**

**GROUP BY** fasst Datensätze mit gleichen Werten zu Gruppen zusammen.

Es wird häufig zusammen mit **Aggregatfunktionen** verwendet.

---

**Grundaufbau**

```sql
SELECT spalte, aggregatfunktion
FROM tabelle
GROUP BY spalte;
```

---

**Beispiel**

```sql
SELECT ort, COUNT(*)
FROM kunde
GROUP BY ort;
```

Bedeutung:

Die Kunden werden nach **Ort** gruppiert.  
Für jeden Ort wird die Anzahl der Kunden gezählt.

---

**Typische Verwendung**

**GROUP BY** wird verwendet für:

- Anzahl pro Gruppe
- Summe pro Gruppe
- Durchschnitt pro Gruppe
- kleinster oder größter Wert pro Gruppe

---

**Beispiel mit SUM**

```sql
SELECT kundennr, SUM(betrag)
FROM rechnung
GROUP BY kundennr;
```

Bedeutung:

Für jeden Kunden wird die Summe seiner Rechnungsbeträge berechnet.

---

**Merksatz**

GROUP BY bildet Gruppen aus Datensätzen.

---

**Prüfungshinweis**

In IHK-Aufgaben wird **GROUP BY** häufig zusammen mit **COUNT**, **SUM** oder **AVG** verwendet.

Typische Fehler:

- GROUP BY vergessen.
- GROUP BY mit ORDER BY verwechseln.
- WHERE und HAVING verwechseln.
- Spalten im SELECT verwenden, die nicht gruppiert oder aggregiert sind.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 5.3 HAVING

**Definition**

**HAVING** filtert gruppierte Ergebnisse nach einer Bedingung.

HAVING wird zusammen mit **GROUP BY** und Aggregatfunktionen verwendet.

---

**Grundaufbau**

```sql
SELECT spalte, aggregatfunktion
FROM tabelle
GROUP BY spalte
HAVING bedingung;
```

---

**Beispiel**

```sql
SELECT ort, COUNT(*)
FROM kunde
GROUP BY ort
HAVING COUNT(*) > 5;
```

Bedeutung:

Es werden nur Orte angezeigt, in denen mehr als **5 Kunden** vorhanden sind.

---

**WHERE und HAVING**

| Klausel | Aufgabe |
|--------|---------|
| WHERE | filtert einzelne Datensätze vor der Gruppierung |
| HAVING | filtert Gruppen nach der Gruppierung |

---

**Beispiel WHERE**

```sql
SELECT *
FROM kunde
WHERE ort = 'Berlin';
```

Filtert einzelne Kunden aus Berlin.

---

**Beispiel HAVING**

```sql
SELECT ort, COUNT(*)
FROM kunde
GROUP BY ort
HAVING COUNT(*) > 5;
```

Filtert Gruppen mit mehr als 5 Kunden.

---

**Merksatz**

WHERE filtert Datensätze.  
HAVING filtert Gruppen.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig der Unterschied zwischen **WHERE** und **HAVING** abgefragt.

Typische Fehler:

- HAVING ohne GROUP BY verwenden.
- Aggregatfunktionen in WHERE verwenden.
- WHERE und HAVING verwechseln.
- HAVING vor GROUP BY schreiben.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 5.4 SQL-Reihenfolge

**Definition**

Die **SQL-Reihenfolge** beschreibt, in welcher Reihenfolge SQL-Klauseln in einer Abfrage geschrieben werden.

---

**Schreibreihenfolge**

```sql
SELECT spalte
FROM tabelle
WHERE bedingung
GROUP BY spalte
HAVING gruppenbedingung
ORDER BY spalte;
```

---

**Bedeutung**

| Klausel | Aufgabe |
|--------|---------|
| SELECT | legt fest, welche Spalten ausgegeben werden |
| FROM | legt fest, aus welcher Tabelle gelesen wird |
| WHERE | filtert einzelne Datensätze |
| GROUP BY | gruppiert Datensätze |
| HAVING | filtert Gruppen |
| ORDER BY | sortiert das Ergebnis |

---

**Wichtige Reihenfolge**

1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY

---

**Beispiel**

```sql
SELECT ort, COUNT(*)
FROM kunde
WHERE aktiv = 1
GROUP BY ort
HAVING COUNT(*) > 5
ORDER BY ort;
```

---

**Merksatz**

WHERE kommt vor GROUP BY.  
HAVING kommt nach GROUP BY.  
ORDER BY steht am Ende.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig geprüft, ob SQL-Klauseln in der richtigen Reihenfolge verwendet werden.

Typische Fehler:

- WHERE nach GROUP BY schreiben.
- HAVING vor GROUP BY schreiben.
- ORDER BY vor WHERE schreiben.
- Aggregatfunktionen in WHERE verwenden.
- GROUP BY und ORDER BY verwechseln.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 6 – SQL-Joins



# 6.1 JOIN-Grundlagen

**Definition**

Ein **JOIN** verbindet Datensätze aus mehreren Tabellen miteinander.

JOINs werden verwendet, wenn benötigte Daten auf mehrere Tabellen verteilt sind.

---

**Grundprinzip**

Tabellen werden meist über **Primärschlüssel** und **Fremdschlüssel** verbunden.

---

**Beispiel**

Tabelle **Kunde**

| Kundennr | Name |
|---------:|------|
| 1 | Müller |
| 2 | Schneider |

Tabelle **Bestellung**

| Bestellnr | Kundennr |
|----------:|---------:|
| 1001 | 1 |
| 1002 | 2 |

Die Spalte **Kundennr** verbindet beide Tabellen.

---

**Grundaufbau**

```sql
SELECT kunde.name, bestellung.bestellnr
FROM kunde
JOIN bestellung
ON kunde.kundennr = bestellung.kundennr;
```

---

**Wichtige JOIN-Arten**

| JOIN-Art | Bedeutung |
|---------|-----------|
| INNER JOIN | nur passende Datensätze aus beiden Tabellen |
| LEFT JOIN | alle Datensätze der linken Tabelle |
| RIGHT JOIN | alle Datensätze der rechten Tabelle |
| FULL OUTER JOIN | alle Datensätze aus beiden Tabellen |

---

**Merksatz**

JOINs verbinden Tabellen über gemeinsame Schlüssel.

---

**Prüfungshinweis**

In IHK-Aufgaben werden JOINs häufig benötigt, wenn Informationen aus mehreren Tabellen abgefragt werden sollen.

Typische Fehler:

- JOIN-Bedingung vergessen.
- Primärschlüssel und Fremdschlüssel verwechseln.
- falsche Tabellen verbinden.
- INNER JOIN und LEFT JOIN verwechseln.
- Spaltennamen ohne Tabellennamen verwenden, obwohl sie mehrfach vorkommen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 6.2 INNER JOIN

**Definition**

Ein **INNER JOIN** verbindet Datensätze aus zwei Tabellen.

Es werden nur Datensätze ausgegeben, bei denen die Join-Bedingung in beiden Tabellen erfüllt ist.

---

**Grundaufbau**

```sql
SELECT spalte
FROM tabelle1
INNER JOIN tabelle2
ON tabelle1.schluessel = tabelle2.fremdschluessel;
```

---

**Beispiel**

```sql
SELECT kunde.name, bestellung.bestellnr
FROM kunde
INNER JOIN bestellung
ON kunde.kundennr = bestellung.kundennr;
```

---

**Bedeutung**

Es werden nur Kunden angezeigt, die eine passende Bestellung haben.

Kunden ohne Bestellung erscheinen nicht im Ergebnis.

---

**Typischer Einsatz**

Ein INNER JOIN wird verwendet, wenn nur zusammengehörige Datensätze ausgegeben werden sollen.

Beispiele:

- Kunden mit Bestellungen
- Artikel mit Kategorien
- Mitarbeiter mit Abteilungen
- Rechnungen mit Kunden

---

**Merksatz**

INNER JOIN zeigt nur passende Datensätze aus beiden Tabellen.

---

**Prüfungshinweis**

In IHK-Aufgaben ist der INNER JOIN die häufigste JOIN-Art.

Typische Fehler:

- Join-Bedingung vergessen.
- INNER JOIN mit LEFT JOIN verwechseln.
- Fremdschlüssel und Primärschlüssel falsch verbinden.
- erwarten, dass Datensätze ohne passende Beziehung angezeigt werden.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 6.3 LEFT JOIN

**Definition**

Ein **LEFT JOIN** verbindet Datensätze aus zwei Tabellen.

Es werden alle Datensätze der linken Tabelle ausgegeben, auch wenn es keinen passenden Datensatz in der rechten Tabelle gibt.

---

**Grundaufbau**

```sql
SELECT spalte
FROM tabelle1
LEFT JOIN tabelle2
ON tabelle1.schluessel = tabelle2.fremdschluessel;
```

---

**Beispiel**

```sql
SELECT kunde.name, bestellung.bestellnr
FROM kunde
LEFT JOIN bestellung
ON kunde.kundennr = bestellung.kundennr;
```

---

**Bedeutung**

Es werden alle Kunden angezeigt.

Kunden ohne Bestellung erscheinen ebenfalls im Ergebnis.

Bei fehlender Bestellung steht in den Spalten der rechten Tabelle **NULL**.

---

**Typischer Einsatz**

Ein LEFT JOIN wird verwendet, wenn alle Datensätze der linken Tabelle erhalten bleiben sollen.

Beispiele:

- alle Kunden, auch ohne Bestellung
- alle Artikel, auch ohne Verkauf
- alle Mitarbeiter, auch ohne Abteilung
- alle Kategorien, auch ohne Artikel

---

**Merksatz**

LEFT JOIN zeigt alle Datensätze der linken Tabelle und passende Datensätze der rechten Tabelle.

---

**Prüfungshinweis**

In IHK-Aufgaben ist LEFT JOIN wichtig, wenn auch Datensätze ohne passende Beziehung angezeigt werden sollen.

Typische Fehler:

- LEFT JOIN mit INNER JOIN verwechseln.
- erwarten, dass nur passende Datensätze angezeigt werden.
- NULL-Werte bei fehlenden passenden Datensätzen nicht beachten.
- linke und rechte Tabelle vertauschen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 6.4 Mehrere Tabellen verbinden

**Definition**

Bei SQL-Abfragen können mehrere Tabellen mit mehreren **JOINs** verbunden werden.

Das wird benötigt, wenn die gesuchten Informationen auf mehr als zwei Tabellen verteilt sind.

---

**Grundprinzip**

Jede zusätzliche Tabelle wird mit einem weiteren JOIN verbunden.

Die Verbindung erfolgt meistens über **Primärschlüssel** und **Fremdschlüssel**.

---

**Beispiel Tabellen**

| Tabelle | Enthält |
|--------|---------|
| kunde | Kundendaten |
| bestellung | Bestellungen |
| bestellposition | Artikel einer Bestellung |
| artikel | Artikeldaten |

---

**Beispiel SQL**

```sql
SELECT kunde.name, bestellung.bestellnr, artikel.bezeichnung
FROM kunde
INNER JOIN bestellung
ON kunde.kundennr = bestellung.kundennr
INNER JOIN bestellposition
ON bestellung.bestellnr = bestellposition.bestellnr
INNER JOIN artikel
ON bestellposition.artikelnr = artikel.artikelnr;
```

---

**Bedeutung**

Die Abfrage verbindet:

- Kunde mit Bestellung
- Bestellung mit Bestellposition
- Bestellposition mit Artikel

---

**Typischer Einsatz**

Mehrere Tabellen werden verbunden bei:

- Kunden und Bestellungen
- Bestellungen und Artikeln
- Rechnungen und Positionen
- Mitarbeiter und Abteilungen
- Produkte und Kategorien

---

**Merksatz**

Mehrere Tabellen werden Schritt für Schritt über JOINs verbunden.

---

**Prüfungshinweis**

In IHK-Aufgaben müssen häufig mehrere Tabellen verbunden werden, wenn die benötigten Spalten nicht in einer einzigen Tabelle stehen.

Typische Fehler:

- eine notwendige Zwischentabelle vergessen
- falsche Schlüssel miteinander verbinden
- JOIN-Bedingung vergessen
- Primärschlüssel und Fremdschlüssel verwechseln
- Spaltennamen ohne Tabellennamen verwenden, obwohl sie mehrfach vorkommen

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 7 – Daten ändern und Tabellen erstellen



# 7.1 INSERT, UPDATE und DELETE

**Definition**

**INSERT**, **UPDATE** und **DELETE** gehören zu den SQL-Befehlen zum Ändern von Daten.

Sie werden verwendet, um Datensätze einzufügen, zu ändern oder zu löschen.

---

**INSERT**

**INSERT** fügt neue Datensätze in eine Tabelle ein.

```sql
INSERT INTO kunde (kundennr, name, ort)
VALUES (1, 'Müller', 'Berlin');
```

---

**UPDATE**

**UPDATE** ändert vorhandene Datensätze.

```sql
UPDATE kunde
SET ort = 'Potsdam'
WHERE kundennr = 1;
```

---

**DELETE**

**DELETE** löscht vorhandene Datensätze.

```sql
DELETE FROM kunde
WHERE kundennr = 1;
```

---

**Übersicht**

| Befehl | Aufgabe |
|--------|---------|
| INSERT | Datensatz einfügen |
| UPDATE | Datensatz ändern |
| DELETE | Datensatz löschen |

---

**Merksatz**

INSERT fügt ein.  
UPDATE ändert.  
DELETE löscht.

---

**Prüfungshinweis**

In IHK-Aufgaben ist besonders wichtig, bei **UPDATE** und **DELETE** die **WHERE-Klausel** zu beachten.

Typische Fehler:

- WHERE bei UPDATE vergessen.
- WHERE bei DELETE vergessen.
- INSERT mit UPDATE verwechseln.
- Textwerte ohne Anführungszeichen schreiben.
- falsche Spaltennamen verwenden.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 7.2 CREATE TABLE

**Definition**

**CREATE TABLE** erstellt eine neue Tabelle in einer Datenbank.

Dabei werden Tabellenname, Spalten, Datentypen und optional Einschränkungen festgelegt.

---

**Grundaufbau**

```sql
CREATE TABLE kunde (
    kundennr INT,
    name VARCHAR(100),
    ort VARCHAR(100)
);
```

---

**Beispiel mit Primärschlüssel**

```sql
CREATE TABLE kunde (
    kundennr INT PRIMARY KEY,
    name VARCHAR(100),
    ort VARCHAR(100)
);
```

---

**Beispiel mit Fremdschlüssel**

```sql
CREATE TABLE bestellung (
    bestellnr INT PRIMARY KEY,
    kundennr INT,
    datum DATE,
    FOREIGN KEY (kundennr) REFERENCES kunde(kundennr)
);
```

---

**Wichtige Bestandteile**

| Bestandteil | Bedeutung |
|------------|-----------|
| Tabellenname | Name der Tabelle |
| Spaltenname | Name eines Attributs |
| Datentyp | Art der gespeicherten Daten |
| PRIMARY KEY | eindeutiger Schlüssel |
| FOREIGN KEY | Verweis auf andere Tabelle |

---

**Merksatz**

CREATE TABLE erstellt Tabellen mit Spalten, Datentypen und Schlüsseln.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig geprüft, ob Tabellen mit passenden Datentypen, Primärschlüsseln und Fremdschlüsseln erstellt werden können.

Typische Fehler:

- Primärschlüssel vergessen.
- falschen Datentyp wählen.
- Fremdschlüssel nicht eintragen.
- Klammern oder Kommas vergessen.
- Tabellennamen und Spaltennamen verwechseln.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 7.3 Datentypen und Constraints

**Definition**

**Datentypen** legen fest, welche Art von Daten in einer Spalte gespeichert werden darf.

**Constraints** sind Regeln, die die Daten in einer Tabelle einschränken oder absichern.

---

**Wichtige Datentypen**

| Datentyp | Bedeutung |
|---------|-----------|
| INT | ganze Zahl |
| DECIMAL | Dezimalzahl |
| VARCHAR | Text mit variabler Länge |
| CHAR | Text mit fester Länge |
| DATE | Datum |
| TIME | Uhrzeit |
| BOOLEAN | Wahrheitswert |

---

**Beispiele**

```sql
kundennr INT
name VARCHAR(100)
preis DECIMAL(10,2)
geburtsdatum DATE
```

---

**Wichtige Constraints**

| Constraint | Bedeutung |
|-----------|-----------|
| PRIMARY KEY | eindeutiger Primärschlüssel |
| FOREIGN KEY | Fremdschlüssel auf andere Tabelle |
| NOT NULL | Wert darf nicht leer sein |
| UNIQUE | Wert muss eindeutig sein |
| CHECK | prüft eine Bedingung |
| DEFAULT | Standardwert, wenn kein Wert angegeben wird |

---

**Beispiel**

```sql
CREATE TABLE kunde (
    kundennr INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    ort VARCHAR(100) DEFAULT 'Berlin'
);
```

---

**Merksatz**

Datentypen bestimmen die Art der Daten.  
Constraints bestimmen Regeln für diese Daten.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig geprüft, ob passende Datentypen und Schlüssel richtig gewählt werden.

Typische Fehler:

- Text als INT speichern.
- Geldbeträge mit INT statt DECIMAL speichern.
- Primärschlüssel vergessen.
- Fremdschlüssel nicht eintragen.
- NOT NULL und UNIQUE verwechseln.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# Kapitel 8 – IHK-Aufgaben und Übersichten



# 8.1 ERM-Aufgaben lösen

**Definition**

Bei **ERM-Aufgaben** wird aus einer Beschreibung ein Datenmodell erstellt.

Dabei werden Entitäten, Attribute, Beziehungen und Kardinalitäten bestimmt.

---

**Vorgehen**

| Schritt | Aufgabe |
|--------|---------|
| 1 | Entitäten erkennen |
| 2 | Attribute zuordnen |
| 3 | Primärschlüssel festlegen |
| 4 | Beziehungen bestimmen |
| 5 | Kardinalitäten eintragen |
| 6 | N:M-Beziehungen auflösen |
| 7 | Relationenmodell ableiten |

---

**Typische Entitäten**

Entitäten sind häufig Substantive im Aufgabentext.

Beispiele:

- Kunde
- Bestellung
- Artikel
- Rechnung
- Mitarbeiter
- Abteilung

---

**Typische Beziehungen**

Beziehungen ergeben sich häufig aus Verben im Aufgabentext.

Beispiele:

- Kunde gibt Bestellung auf
- Bestellung enthält Artikel
- Mitarbeiter gehört zu Abteilung
- Rechnung bezieht sich auf Bestellung

---

**Kardinalitäten**

| Aussage im Text | Typische Kardinalität |
|----------------|----------------------|
| genau ein | 1 |
| mehrere | n |
| kann mehrere | n |
| gehört zu genau einem | 1 |
| enthält mehrere | n |

---

**Merksatz**

Substantive werden oft zu Entitäten.  
Verben zeigen häufig Beziehungen.

---

**Prüfungshinweis**

In IHK-Aufgaben wird häufig ein Text vorgegeben, aus dem ein ERM oder Relationenmodell erstellt werden muss.

Typische Fehler:

- Attribute als Entitäten darstellen.
- Beziehungen vergessen.
- Kardinalitäten falsch bestimmen.
- N:M-Beziehungen nicht auflösen.
- Primär- und Fremdschlüssel nicht kennzeichnen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 8.2 SQL-Aufgaben lösen

**Definition**

Bei **SQL-Aufgaben** wird aus einer Aufgabenstellung eine passende SQL-Abfrage erstellt.

Dabei müssen Tabellen, Spalten, Bedingungen und ggf. JOINs erkannt werden.

---

**Vorgehen**

| Schritt | Aufgabe |
|--------|---------|
| 1 | Gesuchte Ausgabe erkennen |
| 2 | Benötigte Tabelle bestimmen |
| 3 | Benötigte Spalten auswählen |
| 4 | Bedingungen aus dem Text ableiten |
| 5 | Falls nötig JOIN verwenden |
| 6 | Falls nötig gruppieren oder sortieren |
| 7 | SQL-Reihenfolge prüfen |

---

**Typische Signalwörter**

| Formulierung | SQL-Bestandteil |
|-------------|----------------|
| „zeige“ / „liste“ | SELECT |
| „aus Tabelle“ | FROM |
| „nur“ / „bei denen“ | WHERE |
| „sortiert nach“ | ORDER BY |
| „Anzahl“ | COUNT |
| „Summe“ | SUM |
| „Durchschnitt“ | AVG |
| „pro Kunde / je Ort“ | GROUP BY |
| „mehr als / weniger als“ bei Gruppen | HAVING |

---

**Beispiel**

Aufgabe:

Alle Kunden aus Berlin anzeigen.

```sql
SELECT *
FROM kunde
WHERE ort = 'Berlin';
```

---

**Beispiel mit Sortierung**

Aufgabe:

Alle Artikel nach Preis absteigend sortieren.

```sql
SELECT *
FROM artikel
ORDER BY preis DESC;
```

---

**Merksatz**

Erst verstehen, was ausgegeben werden soll, dann SQL schreiben.

---

**Prüfungshinweis**

In IHK-Aufgaben ist die richtige SQL-Reihenfolge besonders wichtig.

Typische Fehler:

- SELECT-Spalten falsch auswählen.
- WHERE-Bedingung vergessen.
- Textwerte ohne Anführungszeichen schreiben.
- ORDER BY an die falsche Stelle setzen.
- GROUP BY und HAVING verwechseln.
- JOIN vergessen, obwohl Daten aus mehreren Tabellen benötigt werden.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 8.3 JOIN-Übersicht

**Definition**

Ein **JOIN** verbindet Datensätze aus mehreren Tabellen.

JOINs werden verwendet, wenn benötigte Daten auf mehrere Tabellen verteilt sind.

---

**Wichtige JOIN-Arten**

| JOIN-Art | Bedeutung |
|---------|-----------|
| INNER JOIN | nur passende Datensätze aus beiden Tabellen |
| LEFT JOIN | alle Datensätze der linken Tabelle |
| RIGHT JOIN | alle Datensätze der rechten Tabelle |
| FULL OUTER JOIN | alle Datensätze aus beiden Tabellen |

---

**INNER JOIN**

Gibt nur Datensätze aus, bei denen die Join-Bedingung in beiden Tabellen erfüllt ist.

```sql
SELECT kunde.name, bestellung.bestellnr
FROM kunde
INNER JOIN bestellung
ON kunde.kundennr = bestellung.kundennr;
```

---

**LEFT JOIN**

Gibt alle Datensätze der linken Tabelle aus.

Fehlende passende Datensätze der rechten Tabelle werden mit **NULL** dargestellt.

```sql
SELECT kunde.name, bestellung.bestellnr
FROM kunde
LEFT JOIN bestellung
ON kunde.kundennr = bestellung.kundennr;
```

---

**Grundregel**

JOINs werden meistens über **Primärschlüssel** und **Fremdschlüssel** verbunden.

---

**Merksatz**

INNER JOIN = nur passende Datensätze  
LEFT JOIN = alle Datensätze links + passende rechts

---

**Prüfungshinweis**

In IHK-Aufgaben ist meist entscheidend, ob auch Datensätze ohne passende Beziehung angezeigt werden sollen.

Typische Fehler:

- INNER JOIN und LEFT JOIN verwechseln.
- JOIN-Bedingung vergessen.
- falsche Schlüssel verbinden.
- linke und rechte Tabelle vertauschen.
- NULL-Werte bei LEFT JOIN nicht beachten.

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 8.4 Normalformen-Übersicht

**Definition**

**Normalformen** sind Regeln zur Strukturierung von Tabellen in relationalen Datenbanken.

Ziel ist es, Redundanzen, Inkonsistenzen und Anomalien zu vermeiden.

---

**Übersicht**

| Normalform | Kernaussage |
|-----------|-------------|
| 1. Normalform | alle Werte sind atomar |
| 2. Normalform | jedes Nicht-Schlüsselattribut hängt vom gesamten Primärschlüssel ab |
| 3. Normalform | keine Nicht-Schlüsselattribute hängen voneinander ab |

---

**1. Normalform**

Eine Tabelle ist in der **1. Normalform**, wenn jedes Feld nur einen einzelnen Wert enthält.

**Nicht erlaubt:**

- mehrere Telefonnummern in einem Feld
- Listen in einer Zelle
- zusammengesetzte Werte in einem Feld

---

**2. Normalform**

Eine Tabelle ist in der **2. Normalform**, wenn sie in der 1. Normalform ist und jedes Nicht-Schlüsselattribut vom gesamten Primärschlüssel abhängig ist.

Wichtig besonders bei:

- zusammengesetzten Primärschlüsseln
- Zwischentabellen
- N:M-Beziehungen

---

**3. Normalform**

Eine Tabelle ist in der **3. Normalform**, wenn sie in der 2. Normalform ist und keine Nicht-Schlüsselattribute voneinander abhängig sind.

---

**Merksatz**

1NF = atomare Werte  
2NF = vom ganzen Schlüssel abhängig  
3NF = nur vom Schlüssel abhängig

---

**Prüfungshinweis**

In IHK-Aufgaben werden meistens die **1. bis 3. Normalform** abgefragt.

Typische Fehler:

- mehrere Werte in einem Feld zulassen
- zusammengesetzten Primärschlüssel nicht beachten
- abhängige Attribute in derselben Tabelle lassen
- Normalisierung nur als Speicherplatzersparnis verstehen

---

**Quellen**

- IT-Handbuch für Fachinformatiker

# 8.5 Häufige Verwechslungen

**Definition**

**Häufige Verwechslungen** sind Begriffe, die in Datenbankaufgaben ähnlich wirken, aber fachlich unterschiedliche Bedeutungen haben.

---

**Grundbegriffe**

| Begriff 1 | Begriff 2 | Unterschied |
|----------|-----------|-------------|
| Datenbank | DBMS | Datenbank enthält Daten, DBMS verwaltet Daten |
| Tabelle | Datensatz | Tabelle enthält mehrere Datensätze |
| Datensatz | Feld | Datensatz = Zeile, Feld = einzelner Wert |
| Attribut | Datensatz | Attribut = Spalte, Datensatz = Zeile |

---

**Schlüssel**

| Begriff 1 | Begriff 2 | Unterschied |
|----------|-----------|-------------|
| Primärschlüssel | Fremdschlüssel | Primärschlüssel identifiziert, Fremdschlüssel verweist |
| Primärschlüssel | Attribut | Primärschlüssel ist ein besonderes Attribut |
| Fremdschlüssel | Beziehung | Fremdschlüssel setzt eine Beziehung technisch um |

---

**Datenmodellierung**

| Begriff 1 | Begriff 2 | Unterschied |
|----------|-----------|-------------|
| Entität | Attribut | Entität = Objekt, Attribut = Eigenschaft |
| Entität | Entitätstyp | Entität = einzelnes Objekt, Entitätstyp = Gruppe gleichartiger Objekte |
| Beziehung | Kardinalität | Beziehung verbindet Entitäten, Kardinalität beschreibt die Anzahl |
| N:M-Beziehung | Zwischentabelle | N:M wird durch eine Zwischentabelle aufgelöst |

---

**SQL**

| Begriff 1 | Begriff 2 | Unterschied |
|----------|-----------|-------------|
| WHERE | HAVING | WHERE filtert Datensätze, HAVING filtert Gruppen |
| GROUP BY | ORDER BY | GROUP BY gruppiert, ORDER BY sortiert |
| COUNT | SUM | COUNT zählt Datensätze, SUM addiert Werte |
| INNER JOIN | LEFT JOIN | INNER JOIN nur passende, LEFT JOIN alle linken Datensätze |
| DELETE | DROP | DELETE löscht Datensätze, DROP löscht Tabellen oder Datenbankobjekte |

---

**Normalisierung**

| Begriff 1 | Begriff 2 | Unterschied |
|----------|-----------|-------------|
| Redundanz | Inkonsistenz | Redundanz = doppelte Daten, Inkonsistenz = widersprüchliche Daten |
| 1. Normalform | 2. Normalform | 1NF = atomar, 2NF = abhängig vom ganzen Schlüssel |
| 2. Normalform | 3. Normalform | 2NF betrifft Schlüsselabhängigkeit, 3NF transitive Abhängigkeiten |
| Normalisierung | Denormalisierung | Normalisierung reduziert Redundanz, Denormalisierung nimmt Redundanz bewusst in Kauf |

---

**Merksatz**

Viele Datenbankfehler entstehen durch verwechselte Begriffe.

---

**Prüfungshinweis**

In IHK-Aufgaben immer genau lesen, ob nach **Modellierung**, **Schlüsseln**, **SQL-Abfrage** oder **Normalisierung** gefragt wird.

Typische Fehler:

- Tabelle und Datensatz verwechseln.
- Primärschlüssel und Fremdschlüssel verwechseln.
- WHERE und HAVING verwechseln.
- GROUP BY und ORDER BY verwechseln.
- N:M-Beziehung ohne Zwischentabelle umsetzen.

---

**Quellen**

- IT-Handbuch für Fachinformatiker