yo,
wie bereits erwähnt, basieren rdbms auf der basis der mengenlehre. du kannst es dir so vorstellen, dass eine Tabelle eben eine dieser mengen darstellt und als deren elemente die jeweiligen Datensätze.
nun will man bestimmte dinge mit diesen mengen(tabellen) und deren inhalten tun können. ein einfacherer fall wäre zum beispiel, zeige mir aus einer tabelle nur bestimmte datensätze an. dann wieder ein wenig komplexer, verbinde zwei oder mehr mengen(tabellen) miteinander, das können zum beispiel INNER JOINS sein, aber eben auch ein UNION.
UNION verbindet also in aller regel zwei mengen(tabellen) miteinander und zwar auf eine ganz bestimmte art und weise, indem es die Mengen aneinander "klebt". damit man sie aneinander kleben kann, müssen die jeweiligen Mengen bestimmte kriterien erfüllen, zum beispiel die gleiche anzahl an spalten haben, aber auch den gleichen Datentyp aufweisen.
und es gibt noch eine besonderheit, die gerne übersehen wird. ich bin nicht ganz fit in der mathematik und der mengenlehre, aber wenn ich nicht ganz falsch liege, müssen die elemente einer menge immer eindeutig sein, sprich genau gleiche tupel(datensätze) können in einer menge nicht vorkommen. und verbindet man zwei mengen miteinander, so kommt wieder eine menge raus, die auch wieder eindeutige elemente besitzen muss. deswegen filtert der UNION operator auch gleiche datensätze raus und zeigt nur einen davon an, so dass die tupel der neuen mengen wieder eindeutig sind.
die gleichheit zweier datensätze bezieht sich auf alle spalten, die du anzeigen willst, sprich hast du drei spalten, die ausgegeben werden sollen, dann sind sie nur gleich, wenn sie sich auch über alle drei spalten die gleichen werte besitzen.
(SELECT MAX(Einwohnerzahl) FROM Kommune1 WHERE Timestamp < NOW -1 MONTH) UNION (SELECT MAX(Einwohnerzahl) FROM Kommune2 WHERE Timestamp < NOW -5 MONTHS)
bezogen auf deine abfrage bedeutet das, dass du je nach abhängigkeit der jeweiligen ergebnise von MAX(Einwohnerzahl) zwei datensätze als ergebnis zurück bekommen kannst, wenn die werte unterschiedlich sind. oder aber nur einen datensatz, wenn die werte genau gleich sind.
dieses vorgehen ist bei rdbms nicht immer erwünscht. deshalb hat man entgegen der Mengenlehre in der Mathematik noch einen zusätzlichen Operator eingeführt, nämlich UNION ALL.
UNION ALL macht das gleiche wie UNION, nur mit dem unterschied, dass er eben nicht nach genau gleichen werten sucht, die es dann nur einmal anzeigt. mit UNION ALL würde also deine abfrage IMMER zwei datensätze zurück liefern, egal ob die werte gleich sind oder nicht und ist somit auch weniger arbeit für das dbms. also je nach bedarf, sollte man UNION oder UNION ALL verwerden.
Ilja