SQL: UNION Operator (Deutsch)
Beispiel-Verschiedene Feldnamen
Es ist nicht erforderlich, dass die entsprechenden Spalten in jeder SELECT-Anweisung denselben Namen haben, sie müssen jedoch dieselben sein entsprechende Datentypen.
Wenn Sie zwischen den SELECT-Anweisungen nicht dieselben Spaltennamen haben, wird es etwas schwierig, insbesondere wenn Sie die Ergebnisse der Abfrage mithilfe der ORDER BY-Klausel bestellen möchten.
Schauen wir uns an, wie der UNION-Operator mit verschiedenen Spaltennamen verwendet und die Abfrageergebnisse sortiert werden.,
Zum Beispiel:
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
Da die Spaltennamen zwischen den beiden SELECT-Anweisungen unterschiedlich sind, ist es vorteilhafter, auf die Spalten in der ORDER BY-Klausel anhand ihrer Position in der Ergebnismenge zu verweisen. In diesem Beispiel haben wir die Ergebnisse nach supplier_id / company_id in aufsteigender Reihenfolge sortiert, wie durch die ORDER BY 1
. Die Felder supplier_id / company_id befinden sich an Position 1 in der Ergebnismenge.
Lassen Sie uns nun dieses Beispiel mit Daten weiter untersuchen.,p>
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
Sie würden kommen zu folgenden Ergebnissen:
supplier_id | supplier_name |
---|---|
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |
Erste, beachten Sie, dass der Datensatz mit supplier_id von 3000 erscheint nur einmal in der Ergebnismenge, weil die UNION-Abfrage entfernt doppelte Einträge.,
Beachten Sie zweitens, dass die Spaltenüberschriften in der Ergebnismenge supplier_id und supplier_name heißen. Dies liegt daran, dass dies die Spaltennamen waren, die in der ersten SELECT Anweisung in der UNION verwendet wurden.
Wenn Sie es gewollt hätten,hätten Sie die Spalten wie folgt mit einem Alias versehen können:
SELECT supplier_id AS ID_Value, supplier_name AS Name_ValueFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id AS ID_Value, company_name AS Name_ValueFROM companiesWHERE company_id > 1000ORDER BY 1;
Nun werden die Spaltenüberschriften im Ergebnis als ID_Value für die erste Spalte und Name_Value für die zweite Spalte mit einem Alias versehen.,
ID_Value | Name_Value |
---|---|
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |