Was ist ein JOIN?
Ein JOIN verknüpft Daten aus mehreren Tabellen, indem Datensätze nach einem gemeinsamen Merkmal (typischerweise über Schlüssel) zusammengeführt werden. So kann man Informationen aus mehreren Tabellen in einer gemeinsamen Ergebnistabelle ausgeben.
Welche JOIN-Typen gibt es häufig im SQL-Standard?
INNER JOIN: Verknüpft Datensätze, bei denen das JOIN-Kriterium in beiden Tabellen erfüllt ist.
LEFT JOIN (left outer join): Enthält alle Datensätze der linken Tabelle, auch wenn rechts kein passender Eintrag existiert (rechte Spalten werden mit NULL aufgefüllt).
RIGHT JOIN (right outer join): Enthält alle Datensätze der rechten Tabelle, auch wenn links kein passender Eintrag existiert (linke Spalten werden mit NULL aufgefüllt).
NATURAL JOIN: Wie ein INNER JOIN, allerdings werden alle Spalten, die in beiden Tabellen gleich heißen, automatisch verglichen (Vorsicht, kann zu ungewollten Vergleichen führen).
Was ist der Unterschied zwischen einem INNER JOIN und einem NATURAL JOIN?
INNER JOIN: Man gibt explizit an, welche Spalten verglichen werden sollen (z. B. ON TabelleA.id = TabelleB.id).
ON TabelleA.id = TabelleB.id
NATURAL JOIN: Vergleicht automatisch alle Spalten gleichen Namens. Das kann schnell zu unerwarteten Ergebnissen führen, wenn zufällig mehrere Spalten identisch heißen.
Wie sehen typische JOIN-Bedingungen in SQL aus?
Mit ON:
ON
SELECT *
FROM TabelleA
INNER JOIN TabelleB
ON TabelleA.Schluessel = TabelleB.Schluessel;
Mit USING(spaltenname): (wenn die gemeinsame Spalte in beiden Tabellen gleich heißt)
USING(spaltenname)
USING (gemeinsame_spalte);
Wozu dienen OUTER JOINs (LEFT/RIGHT JOIN)?
Mit OUTER JOINs lassen sich auch Datensätze ausgeben, bei denen das JOIN-Kriterium nicht erfüllt ist. Dabei werden die nicht gefundenen Werte der jeweils anderen Tabelle als NULL angezeigt.
LEFT JOIN: Sämtliche Zeilen der linken Tabelle bleiben erhalten.
RIGHT JOIN: Sämtliche Zeilen der rechten Tabelle bleiben erhalten.
Was versteht man unter Mengenoperationen wie UNION, INTERSECT und EXCEPT?
UNION: Vereinigung zweier Ergebnismengen (z. B. zweier SELECT-Abfragen); doppelte Datensätze werden standardmäßig entfernt (bzw. UNION ALL → behält Duplikate).
UNION ALL
INTERSECT: Schnittmenge; enthält nur Datensätze, die in beiden Ergebnismengen vorkommen. (Manche Systeme unterstützen INTERSECT nicht, dann muss man es über andere SQL-Konstrukte lösen.)
EXCEPT bzw. MINUS: Differenz; enthält Datensätze der ersten Abfrage, die in der zweiten nicht vorkommen.
Wie lautet das Grundschema für eine Mengenoperation in SQL?
Eine Mengenoperation verbindet zwei (oder mehrere) SELECT-Ergebnisse. Das Grundschema:
SELECT ...
FROM ...
[WHERE ...]
[GROUP BY ...]
[HAVING ...]
[ORDER BY ...]
UNION / INTERSECT / EXCEPT
...
Die Spaltenzahl und -typen der beiden SELECT-Ergebnisse müssen zueinander passen.
Was sind Sichten (Views) und warum sind sie nützlich?
Definition: Eine Sicht (View) ist eine gespeicherte SELECT-Anweisung. Sie erzeugt eine „virtuelle Tabelle“, die nicht dauerhaft Daten speichert, sondern das Ergebnis einer Abfrage repräsentiert.
Vorteile:
Wiederverwendung von komplexen SQL-Abfragen.
Vereinfachung für den Datenbankzugriff (z. B. kann man häufiger benötigte JOINs in eine View packen).
Zugriffsbeschränkungen und Sicherheit (man kann bestimmten Rollen nur die View erlauben, nicht die Originaltabelle).
Wie legt man eine Sicht (View) an?
CREATE VIEW Sichtname AS
WHERE ...;
Danach kann man mit:
SELECT * FROM Sichtname;
auf die Daten zugreifen, als wäre es eine Tabelle.
Gibt es Unterschiede bei Views hinsichtlich Schreibzugriffen (Update, Insert)?
Schreibbare (updatable) Views sind nur dann möglich, wenn:
Die View nur auf eine einzige Tabelle verweist (keine JOINs).
Keine GROUP-BYs, Aggregatsfunktionen, DISTINCT usw. benutzt werden.
Alle notwenigen Schlüsselspalten der Basistabelle in der View vorhanden sind.
Read-Only Views erlauben keine Änderungen am zugrunde liegenden Datenbestand.
Zuletzt geändertvor 2 Monaten