Abfragen über mehrere Tabellen - mit JOINS oder Unterabfragen
Beispielszenario
Schüler besuchen Praktikumsbetriebe (1:n-Beziehung):
Tabelle Schueler
s_id | name | b_id# |
---|---|---|
1 | Jonas | 101 |
2 | Aylin | 102 |
3 | Leon | 103 |
Tabelle Betrieb
b_id | name |
---|---|
101 | IT Solutions |
102 | Autohaus Müller |
103 | Bäckerei Lenz |
Was ist ein JOIN?
Ein JOIN verbindet Datensätze aus mehreren Tabellen, um Informationen zu kombinieren – z. B. Schüler mit ihren Praktikumsbetrieben.
Die Verbindung erfolgt über Primär- und Fremdschlüssel. Dabei gibt es verschiedene Varianten:
🔗 Variante 1: JOIN (empfohlen bei Beziehungen)
SELECT s.name, b.name AS betrieb
FROM Schueler s
JOIN Betrieb b ON s.b_id = b.b_id;
✅ Ergebnis: Zeigt alle Schüler mit dem Namen ihres Praktikumsbetriebs.
📝 Erklärung:
- Der JOIN verknüpft die Tabellen Schueler und Betrieb.
- Die Verbindung erfolgt über den Fremdschlüssel b_id.
- Nur Schüler mit gültigem Betriebsbezug werden angezeigt.
🔄 Variante 2: WHERE-Vergleich (klassisch, aber veraltet)
SELECT s.name, b.name AS betrieb
FROM Schueler s, Betrieb b
WHERE s.b_id = b.b_id;
📝 Erklärung:
- Ähnliche Funktion wie der JOIN.
- Technisch korrekt, aber weniger modern.
- Empfehlung: Stattdessen JOIN ... ON verwenden.
🔍 Variante 3: Subquery in SELECT
SELECT s.name,
(SELECT name FROM Betrieb WHERE b_id = s.b_id) AS betrieb
FROM Schueler s;
📝 Erklärung:
- Für jede Zeile wird der passende Betrieb über eine Unterabfrage ermittelt.
- Vorteil: keine zweite Tabelle im FROM.
- Nachteil: schlechtere Performance bei vielen Datensätzen.
➕ Variante 4: Subquery in WHERE-Klausel
SELECT name
FROM Schueler
WHERE b_id = (
SELECT b_id
FROM Betrieb
WHERE name = 'IT Solutions'
);
✅ Ergebnis: Zeigt alle Schüler, die im Betrieb „IT Solutions“ ihr Praktikum machen.
📝 Erklärung:
- Die innere Abfrage liefert die b_id von „IT Solutions“.
- Die äußere Abfrage zeigt alle Schüler mit dieser b_id.
🧠 JOIN vs. Subquery – Wann was?
Ziel | Empfehlung |
---|---|
Daten aus mehreren Tabellen kombinieren | JOIN |
Einzelne Werte aus einer anderen Tabelle anzeigen | Subquery (SELECT) |
Klarheit und gute Performance | JOIN |
Schnelle Lösung für einfache Anforderungen | Subquery |
Selektion auf Grundlage eines Werts aus einer anderen Tabelle | Subquery (WHERE) |
JOINS (inner, left, right)
Beispielszenario
Schülerinnen und Schüler besuchen Praktikumsbetriebe
→ 1:n-Beziehung
(Jeder SuS besucht einen Betrieb. Ein Betrieb kann von mehreren SuS besucht werden.)
Ausgangstabellen:
Schüler
id | name | betrieb_id# |
---|---|---|
1 | Ali | 1 |
2 | Lea | 1 |
3 | Tim | 2 |
4 | Jonas | NULL |
Betrieb
id | name |
---|---|
1 | Auto AG |
2 | IT GmbH |
3 | Bau GmbH |
Was ist ein JOIN?
Ein JOIN verbindet Datensätze aus mehreren Tabellen, um Informationen zu kombinieren – z. B. Schüler mit ihren Praktikumsbetrieben.
Die Verbindung erfolgt über Primär- und Fremdschlüssel.
Je nach gewünschtem Ergebnis gibt es verschiedene JOIN-Arten:
INNER JOIN
SELECT *
FROM schueler
INNER JOIN betrieb ON schueler.betrieb_id = betrieb.id;
Schüler ohne Betrieb (z. B. Jonas) werden nicht angezeigt.
„INNER“ bedeutet: Schnittmenge – nur Datensätze, die innen, also in beiden Tabellen vorkommen.
Ergebnistabelle
id | name | betrieb_id | id | name |
---|---|---|---|---|
1 | Ali | 1 | 1 | Auto AG |
2 | Lea | 1 | 1 | Auto AG |
3 | Tim | 2 | 2 | IT GmbH |
LEFT JOIN
SELECT *
FROM schueler
LEFT JOIN betrieb ON schueler.betrieb_id = betrieb.id;
Der Betrieb ist dann NULL.
„LEFT“ meint: Alles aus der linken Tabelle (schueler), passende aus der rechten (betrieb)
Ergebnistabelle
id | name | betrieb_id | id | name |
---|---|---|---|---|
1 | Ali | 1 | 1 | Auto AG |
2 | Lea | 1 | 1 | Auto AG |
3 | Tim | 2 | 2 | IT GmbH |
4 | Jonas | - | - | - |
RIGHT JOIN
SELECT *
FROM schueler
RIGHT JOIN betrieb ON schueler.betrieb_id = betrieb.id;
Schüler ist dann NULL.
„RIGHT“ meint: Alles aus der rechten Tabelle (betrieb), passende aus der linken (schueler)
Ergebnistabelle
id | name | betrieb_id | id | name |
---|---|---|---|---|
1 | Ali | 1 | 1 | Auto AG |
2 | Lea | 1 | 1 | Auto AG |
3 | Tim | 2 | 2 | IT GmbH |
- | - | - | 3 | Bau GmbH |
Zusammenfassung:
JOIN-Typ | Welche Zeilen werden angezeigt? |
---|---|
INNER JOIN | Nur Zeilen mit Übereinstimmung in beiden Tabellen |
LEFT JOIN | Alle Zeilen aus linker Tabelle, passende Daten aus rechter Tabelle |
RIGHT JOIN | Alle Zeilen aus rechter Tabelle, passende Daten aus linker Tabelle |
SQL Datentypen
Ganze Zahlen
Datentyp: int
Beispiel:
create table testtabelle(
ganzezahl int
);
Beispiel Datensatz einfügen:
insert into testtabelle values (1234);
Kommazahlen
Datentyp: float oder double
Besipiel:
create table testtabelle(
kommazahl1 float,
kommazahl2 double
);
Beispielwerte einfügen:
insert into testtabelle values (1.34, 45.55);
Anmerkung: Englische Notation beachten (Punkt statt Komma).
(Komma-) Zahlen mit fester Länge
Datentyp: DEC
Bespiel 1: Ganze Zahlen mit fester Länge
create table testtabelle(
zahl DEC(5)
);
Folgende Werte können eingefügt werden:
insert into testtabelle values (34);
insert into testtabelle values (3435);
insert into testtabelle values (45676);
Kann nicht eingefügt werden:
insert into testtabelle values (456767);
Beispiel 2: Kommazahlen mit fester Länge
Oft ist es sinnvoll, die Anzahl der Nachkommastellen festzulegen, z.B. bei Geldbeträgen.
Dies geschieht auch mit dem Datentyp DEC.
In den Klammern wird zunächst die Gesamtanzahl der Stellen (inkl. Nachkommastellen) angegeben.
Danach wird angegeben, wie viele Stellen davon Nachkommastellen sind.
Diese Angaben werden durch ein "," (Komma) getrennt.
DEC(5,2) bedeutet also: Insgesamt 5 Stellen, davon 2 Stellen nach dem Komma (und 3 vor dem Komma).
create table testtabelle(
zahl DEC(5,2)
);
-- Folgende Werte können eingefügt werden:
insert into testtabelle values (3.4);
insert into testtabelle values (34.35);
insert into testtabelle values (456.76);
-- Kann nicht eingefügt werden:
insert into testtabelle values (45677);
insert into testtabelle values (45676.7);
insert into testtabelle values (5676.72);
insert into testtabelle values (456.767);
Textketten mit variabler Länge
Datentyp: VARCHAR
Beispiel: Textketten mit bis zu 25 Zeichen verarbeiten
create table testtabelle(
eintext varchar(25)
);
Beispiel Datensatz einfügen:
insert into testtabelle values ('Dies ist ein Test');
Datumswerte
Datentyp: Date
Beispiel:
create table testtabelle(
beginn date
);
Beispiel Datensatz einfügen:
insert into testtabelle values ('2020-12-07');
Anmerkung: Das Datum hat das Format YYYY-MM-DD.
Uhrzeit
Datentyp: time
create table testtabelle(
uhrzeit time
);
Beispiel Datensatz einfügen:
insert into testtabelle values ('12:45:00');
Inhalte Prüfung 2025
Grundlage für die Prüfungsinhalte ist das Kerncurriculum Informationstechnik für die Fachoberschule (KCFOS)
mit folgenden Themenfeldern (Angaben ohne Gewähr):
TF 12.1 Objektorientierte Softwareentwicklung
Objektorientierte Modellierung:
- Anforderungsanalyse und Darstellung als Unified Modeling Language (UML) Anwendungsfalldiagramm und in weiteren Notationen (z. B. Text, Pflichtenhefte, User Stories)
- Objektorientierter Softwareentwicklungsprozess mit UML-Diagrammen (Objekt- und Klassendiagramm)
- Objektorientiertes Testen (Testdaten, Testfälle)
- Qualitätskriterien (Funktionalität, Wartbarkeit, Zuverlässigkeit, Benutzbarkeit)
Umsetzung objektorientierter Modelle in einer objektorientierten Programmiersprache:
- Implementierung von Klassen mit Attributen und Methoden
- Implementierung von Schnittstellen (Interfaces)
- Implementierung einfacher Assoziationen
- Implementierung komplexer Assoziationen und abstrakter Datentypen unter Verwendung vorgegebener Container (Arrays, generische Listen)
- Implementierung von Algorithmen
- Überladen von Methoden, Überschreiben von Methoden und Operatoren, Kapselung
- Testdurchführung
- Qualitätskontrolle
TF 12.2 Datenbanksysteme
Konzeptionelle und logische Modellierung einer Datenbank:
- ER-Modell: Entität, Entitätstyp, Attribut, Beziehung, Kardinalität
- Relationenmodell
- Redundanzen, Anomalien
- Normalisierung in erste, zweite, dritte Normalform (1. NF, 2. NF, 3. NF)
Datendefinition mit SQL:
- Erzeugen und Löschen von Tabellen (CREATE TABLE, DROP TABLE)
- Ändern der Tabellenstruktur (ALTER TABLE)
- Löschweitergabe und Änderungsweitergabe
Datenabfrage und Datenmanipulation mit SQL:
- Abfragen, Einfügen, Ändern und Löschen (SELECT, INSERT, UPDATE, DELETE)
- Abfragen über verknüpfte Tabellen mittels JOIN und Unterabfragen
- Abfragen über rekursive Beziehungen
- Sortierung
- Aggregatfunktionen, Gruppierung, Auswahl von Gruppen mittels HAVING
TF 12.4 Netzwerke
Grundlagen vernetzter Systeme
Prinzip der Nachrichtenübertragung (Nachricht, Information, Signal)
Open System Interconnection (OSI)- und Transmission Control Protocol/Internet Protocol (TCP/IP)-Referenzmodell
Struktur Local Area Network (LAN) und Wide Area Network (WAN)
TCP/IP
Adressbildung (IPv4 und IPv6)
Subnetzmaske und Subnetzbildung IPv4
Hostnamen und Namensauflösung (Domain Name System (DNS))
Dynamische Vergabe von IP-Adressen (Dynamic Host Configuration Protocol (DHCP))
Router und Wegesteuerung (statisch)
Komponenten eines lokalen Netzwerks
Strukturierte Verkabelung
Switches und Router
Netzwerkadministration
Störungsanalyse und -beseitigung mithilfe von Diagnosewerkzeugen wie ping oder tracroute
Datensicherheit (Zutritts-, Zugangs- und Zugriffskontrolle)
Vorteile durch den Einsatz von Secure Sockets Layer/Transport Layer Security (SSL/TLS)-Zertifikaten
Virtuelle private Netze (VPN)
Dienste im Internet (Hypertext Transfer Protocol (HTTP), Secure Shell (SSH), Simple Mail Transfer Protocol (SMTP), Post Office Protocol Version 3 (POP3), Internet Message Access Protocol (IMAP))
TF 12.6 Webanwendungen
Architekturen von Webanwendungen:
- Trennung von Inhalt und Design, insbesondere HTML und CSS
- Client/Server-Architektur
- Webserver
Clientseitige Skriptsprachen, insbesondere JavaScript:
- Konzepte clientseitiger Skriptsprachen
- Dynamisches Aktualisieren der Darstellung, insbesondere DOM
- Interaktive Inhalte und Animationen
- Formulare: Übertragung und Validierung von Formularinhalten
Alle Angaben ohne Gewähr, Siehe auch: Prüfungserlass für die zentrale Abschlussprüfung 2025 in Hessen
Datenschutzerklärung
1. Verantwortlicher
1.1 Verantwortlicher gem. Art. 4 Abs. 7 EU-Datenschutz-Grundverordnung (EU-DSGVO) ist
Herr Christian Frye
Brandenburger Str. 62
63329 Egelsbach
E-Mail:
(siehe unser Impressum).
Diese Seite dient ausschließlich privaten und nicht geschäftlichen Interessen. Sie wird ausschließlich von mir betrieben.
2. Information über die Erhebung personenbezogener Daten, Speicherdauer
2.1 Im Folgenden informieren wir über die Erhebung personenbezogener Daten bei Nutzung unserer Website. Personenbezogene Daten sind alle Daten, die auf Sie persönlich beziehbar sind, z. B. Name, Adresse, E-Mail-Adressen, Nutzerverhalten.
2.2 Bei Ihrer Kontaktaufnahme mit uns per E-Mail oder über ein Kontaktformular werden die von Ihnen mitgeteilten Daten (Ihre E-Mail-Adresse, ggf. Ihr Name und Ihre Telefonnummer) von uns gespeichert, um Ihre Fragen zu beantworten. Die in diesem Zusammenhang anfallenden Daten löschen wir, nachdem die Speicherung nicht mehr erforderlich ist, oder schränken die Verarbeitung ein, falls gesetzliche Aufbewahrungspflichten bestehen.
2.3 Falls wir für einzelne Funktionen unseres Angebots auf beauftragte Dienstleister zurückgreifen oder Ihre Daten für werbliche Zwecke nutzen möchten, werden wir Sie untenstehend im Detail über die jeweiligen Vorgänge informieren. Dabei nennen wir auch die festgelegten Kriterien der Speicher-dauer.
3. Ihre Rechte
3.1 Sie haben gegenüber uns folgende Rechte hinsichtlich der Sie betreffenden personenbezogenen Daten: – Recht auf Auskunft, – Recht auf Berichtigung oder Löschung, – Recht auf Einschränkung der Verarbeitung, – Recht auf Widerspruch gegen die Verarbeitung, – Recht auf Datenübertragbarkeit.
3.2 Sie haben zudem das Recht, sich bei einer Datenschutz-Aufsichtsbehörde über die Verarbeitung Ihrer personenbezogenen Daten durch uns zu beschweren. Die Datenschutzaufsichtsbehörde ist der Hessische Beauftragte für Datenschutz und Informationsfreiheit, Postfach 3163, 65021 Wiesbaden.
3.4 Werden personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt, so haben Sie das Recht, über die geeigneten Garantien gemäß Art. 46 EU-DSGVO im Zusammenhang mit der Übermittlung unterrichtet zu werden.
4. Erhebung und Zweck personenbezogener Daten bei Besuch unserer Website
4.1 Bei der bloß informatorischen Nutzung der Website, also wenn Sie sich nicht registrieren oder uns anderweitig Informationen übermitteln, erheben wir nur die personenbezogenen Daten, die Ihr Browser an unseren Server übermittelt. Wenn Sie unsere Website betrachten möchten, erheben wir die folgenden Daten, die für uns technisch erforderlich sind, um Ihnen unsere Website anzuzeigen und die Stabilität und Sicherheit zu gewährleisten (Rechtsgrundlage ist Art. 6 Abs. 1 S. 1 lit. f EU-DSGVO):
- IP-Adresse
- Datum und Uhrzeit der Anfrage
- Zeitzonendifferenz zur Greenwich Mean Time (GMT)
- Inhalt der Anforderung (konkrete Seite)
- Zugriffsstatus/HTTP-Statuscode
- jeweils übertragene Datenmenge
- Website, von der die Anforderung kommt
- Browser
- Betriebssystem und dessen Oberfläche
- Sprache und Version der Browsersoftware.
4.2 Zusätzlich zu den zuvor genannten Daten werden bei Ihrer Nutzung unserer Website Cookies auf Ihrem Rechner gespeichert. Bei Cookies handelt es sich um kleine Textdateien, die auf Ihrer Festplat-te dem von Ihnen verwendeten Browser zugeordnet gespeichert werden und durch welche der Stelle, die den Cookie setzt (hier durch uns), bestimmte Informationen zufließen. Cookies können keine Pro-gramme ausführen oder Viren auf Ihren Computer übertragen. Sie dienen dazu, das Internetangebot insgesamt nutzerfreundlicher und effektiver zu machen.
4.3 Einsatz von Cookies 1:
a) Diese Website nutzt folgende Arten von Cookies, deren Umfang und Funktionsweise im Fol-genden erläutert werden:
– Transiente Cookies (dazu b)
– Persistente Cookies (dazu c).
b) Transiente Cookies werden automatisiert gelöscht, wenn Sie den Browser schließen. Dazu zäh-len insbesondere die Session-Cookies. Diese speichern eine sogenannte Session-ID, mit wel-cher sich verschiedene Anfragen Ihres Browsers der gemeinsamen Sitzung zuordnen lassen.
Dadurch kann Ihr Rechner wiedererkannt werden, wenn Sie auf unsere Website zurückkehren.
Die Session-Cookies werden gelöscht, wenn Sie sich ausloggen oder den Browser schließen.
c) Persistente Cookies werden automatisiert nach einer vorgegebenen Dauer gelöscht, die sich je nach Cookie unterscheiden kann. Sie können die Cookies in den Sicherheitseinstellungen Ihres Browsers jederzeit löschen.
d) Sie können Ihre Browser-Einstellung entsprechend Ihren Wünschen konfigurieren und z. B. die Annahme von Third-Party-Cookies oder allen Cookies ablehnen. Wir weisen Sie darauf hin, dass Sie eventuell nicht alle Funktionen dieser Website nutzen können.
e) Wir setzen Cookies ein, um Sie für Folgebesuche identifizieren zu können, falls Sie über einen Account bei uns verfügen. Andernfalls müssten Sie sich für jeden Besuch erneut einloggen.