Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfragen und Datenänderung » Abfrageergebnisse zusammenfassen, gruppieren und sortieren » Mengenoperationen für Abfrageergebnisse mit UNION, INTERSECT und EXCEPT

 

Regeln für Mengenoperationen

Die folgenden Regeln gelten für UNION-, EXCEPT- und INTERSECT-Anweisungen:

  • Vorrang   Die Operatoren UNION und EXCEPT haben die gleiche Priorität und werden beide von links nach rechts ausgewertet. Der INTERSECT-Operator hat eine höhere Priorität als die Operatoren UNION und EXCEPT und wird ebenfalls von links nach rechts ausgewertet, wenn mehr als eine INTERSECT verwendet wird.

  • Gleiche Anzahl von Elementen in den SELECT-Listen   Alle SELECT-Listen in den Abfragen müssen dieselbe Anzahl von Ausdrücken (z.B. von Spaltennamen, arithmetischen Ausdrücken und Aggregatfunktionen) aufweisen. Die folgende Anweisung ist ungültig, weil die erste SELECT-Liste länger ist als die zweite:
    SELECT store_id, city, state
       FROM stores
    UNION
       SELECT store_id, city
         FROM stores_east;

  • Datentypen müssen übereinstimmen   Einander entsprechende Ausdrücke in den Auswahllisten müssen denselben Datentyp haben, oder eine implizite Datenkonvertierung muss zwischen den beiden Datentypen möglich sein bzw. eine explizite Konvertierung eingeplant werden.

    Beispiel: Ein UNION-, INTERSECT- oder EXCEPT-Vorgang ist nicht möglich zwischen einer Spalte des Datentyps CHAR und einer Spalte des Datentyps INT, wenn nicht eine explizite Konvertierung eingebaut wird. Allerdings ist eine Mengenoperation möglich zwischen einer Spalte des Datentyps MONEY und des Datentyps INT.

  • Spaltenreihenfolge   Sie müssen einander entsprechende Ausdrücke in die einzelnen Abfragen einer Mengenoperation in derselben Reihenfolge eingeben, da die Mengenoperatoren eins-zu-eins in der Reihenfolge vergleichen, die in den einzelnen Abfragen in den SELECT-Klauseln angegeben wird.

  • Mehrere Mengenoperationen   Sie können mehrere Mengenoperationen zusammenbinden, wie dies im folgenden Beispiel der Fall ist:
    SELECT City AS Cities
       FROM Contacts
       UNION
          SELECT City
             FROM Customers
       UNION
          SELECT City
             FROM Employees;

    Bei UNION-Anweisungen ist die Reihenfolge der Abfragen ohne Bedeutung. Bei INTERSECT ist die Reihenfolge von Bedeutung, wenn es zwei oder mehr Abfragen gibt. Bei EXCEPT ist die Reihenfolge immer von Bedeutung.

  • Spaltentitel   Die Spaltennamen in der Tabelle, die aus einem UNION-Vorgang hervorgehen, werden der ersten individuellen Abfrage in der Anweisung entnommen. Definieren Sie einen neuen Spaltentitel für die Ergebnismenge in der SELECT-Liste der ersten Abfrage, wie im folgenden Beispiel gezeigt wird:
    SELECT City AS Cities
       FROM Contacts
       UNION
          SELECT City
             FROM Customers;

    In der folgenden Abfrage bleibt der Spaltentitel "City" erhalten, da er in der ersten Abfrage der UNION-Klausel definiert wurde.

    SELECT City
       FROM Contacts
       UNION
          SELECT City AS Cities
             FROM Customers;

    Oder Sie verwenden die WITH-Klausel, um die Spaltennamen festzulegen. Beispiel:

    WITH V( Cities )
    AS ( SELECT City
         FROM Contacts
         UNION
            SELECT City
             FROM Customers )
    SELECT * FROM V;

  • Sortierung der Ergebnisse   Mit der WITH-Klausel der SELECT-Anweisung können Sie die Reihenfolge der Spaltennamen in der SELECT-Liste bestimmen. Beispiel:
    WITH V( CityName )
    AS ( SELECT City AS Cities
         FROM Contacts
         UNION
            SELECT City
               FROM Customers )
    SELECT * FROM V
       ORDER BY CityName;

    Sie können auch eine einzige ORDER BY-Klausel am Ende der Liste der Abfragen verwenden, müssen aber Ganzzahlen anstelle von Spaltennamen benutzen, wie im folgenden Beispiel gezeigt wird:

    SELECT City AS Cities
       FROM Contacts
       UNION
          SELECT City
            FROM Customers
       ORDER BY 1;