Weiter Zurück [Inhalt] Online Suche im Handbuch

17.7 Subselects

Nun, um es vorweg zu nehmen, ACCESS braucht sie auch nicht (?). Subselects kann man durch JOINS recht einfach umschreiben. Es erhöht zwar nicht gerade die Lesbarkeit, ein (self) JOIN ist aber ein vollständiger Ersatz. In der nächsten Version ist aber damit zu rechnen, daß Subselects untestützt werden. Übrigens gibt es in vielen Datenbanken Beschränkungen der Schachteltiefe auf nur wenige SELECT * FROM WHERE ...SELECT * FROM ... WHERE Statements. Es sind auch oft nicht alle Kombinationen mit anderen Parametern erlaubt. Daher sind Subselects nicht unbedingt das K.O. Kriterium für die Auswahl von (nicht MySQL) Datenbanken, inbesondere nicht für User, die von ACCESS her sich MySQL widmen möchten, da hier einige Statements nicht zugelassen sind.

Ein Beispiel ist z.B. der Ausdruck:

SQL> SELECT NAME FROM KURS_1 UNION SELECT NAME FROM KURS_2
Hiermit wird die Vereinigungsmenge der Kursteilnehmer aus beiden Kursen ausgegeben. MySQL kan dieses mit SELF-JOINS umschreiben.

Ein weiteres Beispiel ist die Schnittmenge der Teilnehmer aus beiden Kursen:

SQL> SELECT NAME FROM KURS_1 INTERSECT SELECT NAME FROM KURS_2
Ein anderes Beispiel ist die Menge aller Kursteilnehmer, die nicht in dem zweiten Kursus sind:
SQL> SELECT NAME FROM KURS_1 MINUS SELECT NAME FROM KURS_2
Diese Schreibweise ist zwar sehr elegant, aber auch einfach mit SELF-JOINS zu umschreiben. Hier die Schreibweise in anderen SQL Dialekten:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
Hier der Ersatz in MySQL
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
Komplexere Statements sollte man mit temporären Dateien umschreiben. Folgende Statements funktionieren jedoch.
INSERT ... SELECT ... and REPLACE ... SELECT ...
Wie man sieht, gibt es kaum gute Gründe, ausgewachsene SQL Datenbanken einzusetzen. Ein Grund, MySQL nicht zu Beginn einzusetzen, ist dies aber nicht. Die SELECT Statements von MySQL sind ohne Probleme auf andere SQL Datenbanken portierbar. Die Aufwätskompatibilität ist also gewährleistet.


Weiter Zurück [Inhalt] Online Suche im Handbuch