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

SQL Anywhere 12.0.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Abfrageergebnisse zusammenfassen, gruppieren und sortieren » Mengenoperationen auf Abfrageergebnissen mit UNION, INTERSECT und EXCEPT ausführen

 

Regeln für Mengenoperationen

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

  • Gleiche Anzahl von Elementen in den Auswahllisten   Alle Auswahllisten in den Abfragen müssen dieselbe Anzahl von Ausdrücken haben (wie Spaltennamen, arithmetische Ausdrücke und Aggregatfunktionen). Folgende Anweisung ist ungültig, weil die erste Auswahlliste länger als die zweite ist:
    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 nacheinander 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. Wenn Sie einen neuen Spaltentitel für die Ergebnismenge definieren wollen, können Sie dies in der ersten Abfrage tun, 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 Auswahlliste 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;