Delen via


Query's maken met behulp van iets naast een tabel (Visual Database Tools)

van toepassing op:SQL Server-

Wanneer u een ophaalquery schrijft, definieert u welke kolommen u wilt, welke rijen u wilt gebruiken en waar de queryprocessor de oorspronkelijke gegevens moet vinden. Deze oorspronkelijke gegevens bestaan doorgaans uit een tabel of meerdere tabellen die aan elkaar zijn gekoppeld. Maar de oorspronkelijke gegevens kunnen afkomstig zijn van andere bronnen dan tabellen. Het kan zelfs afkomstig zijn van weergaven, query's, synoniemen of door de gebruiker gedefinieerde functies die een tabel retourneren.

Een weergave gebruiken in plaats van een tabel

U kunt rijen selecteren in een weergave. Stel dat de database een weergave bevat met de naam 'ExpensiveBooks', waarin elke rij een titel beschrijft waarvan de prijs hoger is dan 19,99. De weergavedefinitie kan er als volgt uitzien:

SELECT *
FROM titles
WHERE price > 19.99;

U kunt de dure psychologieboeken alleen selecteren door de psychologieboeken te selecteren in de weergave ExpensiveBooks. De resulterende SQL kan er als volgt uitzien:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';

Op dezelfde manier kan een weergave deelnemen aan een JOIN bewerking. U kunt bijvoorbeeld alleen de verkoop van dure boeken vinden door de verkooptabel aan de weergave ExpensiveBooks toe te voegen. De resulterende SQL kan er als volgt uitzien:

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

Zie Tabellen toevoegen aan query's (Visual Database Tools) voor meer informatie over het toevoegen van een weergave aan een query.

Een query gebruiken in plaats van een tabel

U kunt rijen selecteren in een query. Stel dat u al een query hebt geschreven voor het ophalen van titels en identificaties van boeken die mede-auteurs hebben, de boeken met meer dan één auteur. De SQL ziet er mogelijk als volgt uit:

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;

U kunt vervolgens een andere query schrijven die voortbouwt op dit resultaat. U kunt bijvoorbeeld een query schrijven waarmee de samen geschreven boeken voor psychologie worden opgehaald. Als u deze nieuwe query wilt schrijven, kunt u de bestaande query gebruiken als de bron van de gegevens van de nieuwe query. De resulterende SQL kan er als volgt uitzien:

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';

De onderstreepte tekst toont de bestaande query die wordt gebruikt als de bron van de gegevens van de nieuwe query. De nieuwe query maakt gebruik van een alias ('co_authored_books') voor de bestaande query. Zie Tabelaliassen maken (Visual Database Tools) en Kolomaliassen maken (Visual Database Tools) voor meer informatie over aliassen.

Op dezelfde manier kan een query deelnemen aan een JOIN bewerking. U kunt bijvoorbeeld de verkoop van dure cocreatieboeken vinden door de weergave ExpensiveBooks toe te voegen aan de query die de boeken met cocreatie opvraagt. De resulterende SQL kan er als volgt uitzien:

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
        )

Zie Tabellen toevoegen aan query's (Visual Database Tools) voor meer informatie over het toevoegen van een query aan een query.

Een door de gebruiker gedefinieerde functie gebruiken in plaats van een tabel

U kunt een door de gebruiker gedefinieerde functie maken die een tabel retourneert. Dergelijke functies zijn handig voor het uitvoeren van complexe of procedurele logica.

Stel dat de tabel Werknemer een extra kolom employee.manager_emp_idbevat en dat er een refererende sleutel bestaat van manager_emp_id tot employee.emp_id. Binnen elke rij van de tabel Werknemer geeft de manager_emp_id kolom de baas van de werknemer aan. Om precies te zijn, geeft het de baas emp_idvan de werknemer aan. U kunt een door de gebruiker gedefinieerde functie maken die een tabel retourneert die één rij bevat voor elke werknemer die in een bepaalde organisatiehiërarchie van een bepaalde manager op hoog niveau werkt. U kunt de functie fn_GetWholeTeam aanroepen en deze ontwerpen om een invoervariabele te gebruiken: de emp_id manager van wie u het team wilt ophalen.

U kunt een query schrijven die gebruikmaakt van de functie fn_GetWholeTeam als gegevensbron. De resulterende SQL kan er als volgt uitzien:

SELECT *
FROM fn_GetWholeTeam('VPA30890F');

VPA30890F is de emp_id manager van wie u de organisatie wilt ophalen. Zie Tabellen toevoegen aan query's (Visual Database Tools) voor meer informatie over het toevoegen van een door de gebruiker gedefinieerde functie aan een query. Zie Door de gebruiker gedefinieerde functies voor een volledige beschrijving van door de gebruiker gedefinieerde functies.