Freigeben über


Erstellen von Abfragen mithilfe einer Tabelle (Visual Database Tools)

Gilt für:SQL Server-

Immer wenn Sie eine Abrufabfrage schreiben, formulieren Sie, welche Spalten Sie benötigen, welche Zeilen Sie benötigen und wo der Abfrageprozessor die ursprünglichen Daten finden soll. In der Regel bestehen diese ursprünglichen Daten aus einer Tabelle oder mehreren Tabellen, die miteinander verbunden sind. Die ursprünglichen Daten können jedoch aus anderen Quellen als Tabellen stammen. Tatsächlich kann es aus Ansichten, Abfragen, Synonymen oder benutzerdefinierten Funktionen stammen, die eine Tabelle zurückgeben.

Verwenden einer Ansicht anstelle einer Tabelle

Sie können Zeilen aus einer Ansicht auswählen. Angenommen, die Datenbank enthält eine Ansicht namens "ExpensiveBooks", in der jede Zeile einen Titel beschreibt, dessen Preis 19,99 überschreitet. Die Definition der Sicht kann folgendermaßen lauten:

SELECT *
FROM titles
WHERE price > 19.99;

Sie können nur die teuren Psychologiebücher auswählen, indem Sie die Psychologiebücher aus der Ansicht "ExpensiveBooks" auswählen. Die resultierende SQL-Datei sieht möglicherweise wie folgt aus:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';

Ebenso kann eine Ansicht an einem JOIN Vorgang teilnehmen. So können Sie z. B. den Verkauf von teuren Büchern nur finden, indem Sie die Verkaufstabelle mit der Ansicht "ExpensiveBooks" verknüpfen. Die resultierende SQL-Datei sieht möglicherweise wie folgt aus:

SELECT *
FROM sales
     INNER JOIN ExpensiveBooks
         ON sales.title_id = ExpensiveBooks.title_id;

Weitere Informationen zum Hinzufügen einer Ansicht zu einer Abfrage finden Sie unter Hinzufügen von Tabellen zu Abfragen (Visual Database Tools).

Verwenden einer Abfrage anstelle einer Tabelle

Sie können Zeilen aus einer Abfrage auswählen. Nehmen Sie z.B. an, dass Sie bereits eine Abfrage erstellt haben, die die Titel und IDs für Bücher zurückgibt, für die ein Mitautor angegeben ist, also alle Bücher mit mehreren Autoren. Sql sieht möglicherweise wie folgt aus:

SELECT titles.title_id,
       title,
       type
FROM titleauthor
     INNER JOIN titles
         ON titleauthor.title_id = titles.title_id
GROUP BY titles.title_id, title, type
HAVING COUNT(*) > 1;

Anschließend können Sie eine weitere Abfrage schreiben, die auf diesem Ergebnis basiert. Dies kann z. B. eine Abfrage sein, die alle Psychologiebücher ermittelt, die von mehreren Autoren geschrieben wurden. Zum Schreiben dieser neuen Abfrage können Sie die vorhandene Abfrage als Quelle der Daten der neuen Abfrage verwenden. Die resultierende SQL-Datei sieht möglicherweise wie folgt aus:

SELECT title
FROM (SELECT titles.title_id,
             title,
             type
      FROM titleauthor
           INNER JOIN titles
               ON titleauthor.title_id = titles.title_id
      GROUP BY titles.title_id, title, type
      HAVING COUNT(*) > 1) AS co_authored_books
WHERE type = 'psychology';

Der hervorgehobene Text zeigt die vorhandene Abfrage, die als Quelle der Daten der neuen Abfrage verwendet wird. Die neue Abfrage verwendet einen Alias ("co_authored_books") für die vorhandene Abfrage. Weitere Informationen zu Aliasen finden Sie unter Erstellen von Tabellenaliasen (Visual Database Tools) und Erstellen von Spaltenaliasen (Visual Database Tools)

Ebenso kann eine Abfrage an einem JOIN Vorgang teilnehmen. Sie können z. B. die Verkäufe an teuren Büchern mit Mitautorenschaft ermitteln, indem Sie die Sicht ExpensiveBooks mit der Abfrage verknüpfen, die die Bücher mit mehreren Autoren zurückgibt. Die resultierende SQL-Datei sieht möglicherweise wie folgt aus:

SELECT
    ExpensiveBooks.title
FROM
    ExpensiveBooks
        INNER JOIN
        (
        SELECT
            titles.title_id,
            title,
            type
        FROM
            titleauthor
                INNER JOIN
                titles
                ON titleauthor.title_id
                =  titles.title_id
        GROUP BY
            titles.title_id,
            title,
            type
        HAVING COUNT(*) > 1
        )

Weitere Informationen zum Hinzufügen einer Abfrage zu einer Abfrage finden Sie unter Hinzufügen von Tabellen zu Abfragen (Visual Database Tools).

Verwenden einer benutzerdefinierten Funktion anstelle einer Tabelle

Sie können eine benutzerdefinierte Funktion erstellen, die eine Tabelle zurückgibt. Solche Funktionen sind nützlich, um komplexe oder prozedurale Logik auszuführen.

Angenommen, die Mitarbeitertabelle enthält eine zusätzliche Spalte, employee.manager_emp_idund dass ein Fremdschlüssel von manager_emp_id zu employee.emp_idvorhanden ist. In jeder Zeile der Mitarbeitertabelle gibt die manager_emp_id Spalte den Vorgesetzten des Mitarbeiters an. Genauer gesagt, zeigt es den Chef des Mitarbeiters emp_idan. Sie können eine benutzerdefinierte Funktion erstellen, die eine Tabelle zurückgibt, die eine Zeile für jeden Mitarbeiter enthält, der in der Organisationshierarchie einer bestimmten obersten Ebene arbeitet. Möglicherweise rufen Sie die Funktion fn_GetWholeTeam auf, und entwerfen Sie sie so, dass eine Eingabevariable verwendet wird – der emp_id Manager, dessen Team Sie abrufen möchten.

Sie können eine Abfrage schreiben, die die funktion fn_GetWholeTeam als Datenquelle verwendet. Die resultierende SQL-Datei sieht möglicherweise wie folgt aus:

SELECT *
FROM fn_GetWholeTeam('VPA30890F');

VPA30890F ist der emp_id Vorgesetzte, dessen Organisation Sie abrufen möchten. Weitere Informationen zum Hinzufügen einer benutzerdefinierten Funktion zu einer Abfrage finden Sie unter Hinzufügen von Tabellen zu Abfragen (Visual Database Tools). Eine vollständige Beschreibung der benutzerdefinierten Funktionen finden Sie unter Benutzerdefinierte Funktionen.