Erstellen eines gemeinsamen Tabellenausdrucks

Durch das Erstellen eines gemeinsamen Tabellenausdrucks sparen Sie sich den Aufwand, eine reguläre Ansicht zu erstellen und zu löschen, die Sie nur einmal verwenden müssen. Außerdem muss Db2 während der Vorbereitung der Erklärung nicht auf den Katalog zugreifen, um die Ansicht zu erhalten, wodurch Sie zusätzliche Kosten sparen.

Informationen zu dieser Task

Verwenden Sie die WITH-Klausel, um einen allgemeinen Tabellenausdruck zu erstellen.

Prozedur

Um einen gemeinsamen Tabellenausdruck zu erstellen, verwenden Sie einen der folgenden Ansätze:

  • Geben Sie am Anfang einer SELECT-Anweisung eine WITH-Klausel an.
    Zum Beispiel wird mit der folgenden Anweisung die Abteilung mit der höchsten Gesamtvergütung ermittelt. Die Abfrage umfasst zwei Aggregationsebenen. Zunächst müssen Sie die Gesamtvergütung für jede Abteilung mithilfe der SUM-Funktion ermitteln und die Ergebnisse mithilfe der GROUP BY-Klausel ordnen. Anschließend müssen Sie die Abteilung mit dem höchsten Gesamtgehalt ermitteln, basierend auf dem Gesamtgehalt für jede Abteilung.
    WITH DTOTAL (workdept, totalpay) AS
    		(SELECT deptno, sum(salary+bonus)
    		    FROM  DSN8810.EMP
    		    GROUP BY workdept)
    	SELECT workdept 
          FROM DTOTAL
    	   WHERE totalpay = (SELECT max(totalpay)
    			                   FROM  DTOTAL);
    Die Ergebnistabelle für den allgemeinen Tabellenausdruck DTOTAL enthält die Abteilungsnummer und die Gesamtvergütung für jede Abteilung in der Mitarbeitertabelle. Der Fullselect im vorherigen Beispiel verwendet die Ergebnistabelle für DTOTAL, um die Abteilung mit der höchsten Gesamtvergütung zu ermitteln. Die Ergebnistabelle für die gesamte Aussage sieht ähnlich aus wie die folgenden Ergebnisse:
    WORKDEPT
    ======
    D11
  • Verwenden Sie gängige Tabellenausdrücke, indem Sie in einer CREATE VIEW-Anweisung vor einer Fullselect-Anweisung WITH angeben.
    Diese Technik ist nützlich, wenn Sie die Ergebnisse eines allgemeinen Tabellenausdrucks in mehr als einer Abfrage verwenden müssen.
    Die folgende Anweisung ermittelt beispielsweise die Abteilungen, die eine überdurchschnittliche Gesamtvergütung aufweisen, und speichert die Ergebnisse als Ansicht RICH_DEPT:
    CREATE VIEW RICH_DEPT (workdept) AS
    	     WITH DTOTAL (workdept, totalpay) AS
    		  (SELECT workdept, sum(salary+bonus)
    		      FROM DSN8C10.EMP
    		      GROUP BY workdept)
    	     SELECT workdept
               FROM DTOTAL
    	        WHERE totalpay > (SELECT AVG(totalpay)
    			                        FROM DTOTAL);
    Der Fullselect im vorherigen Beispiel verwendet die Ergebnistabelle für DTOTAL, um die Abteilungen zu finden, die eine überdurchschnittliche Gesamtvergütung haben. Die Ergebnistabelle wird als Ansicht RICH_DEPT gespeichert und sieht ähnlich aus wie die folgenden Ergebnisse:
    WORKDEPT
    ======
    A00
    D11
    D21
  • Verwenden Sie gängige Tabellenausdrücke, indem Sie in einer INSERT-Anweisung vor einem Fullselect WITH angeben.
    In der folgenden Anweisung wird beispielsweise die Ergebnistabelle für VITALDEPT verwendet, um die Abteilungsleiterzahl für jede Abteilung zu ermitteln, die eine überdurchschnittlich hohe Anzahl leitender Ingenieure aufweist. Die Nummer jedes Managers wird dann in die Tabelle vital_mgr eingefügt.
    INSERT INTO vital_mgr (mgrno)
    	  WITH VITALDEPT (workdept, se_count)  AS
    		  (SELECT workdept, count(*)
    		      FROM DSN8C10.EMP
    		      WHERE job = 'senior engineer'
     		      GROUP BY workdept)
    	  SELECT d.manager
    	     FROM DSN8C10.DEPT d, VITALDEPT s
    	     WHERE d.workdept = s.workdept
    	         AND s.se_count  >  (SELECT  AVG(se_count)
    					                     FROM VITALDEPT);