Udostępnij przez


How to: Create Queries using Something Besides a Table (Visual Database Tools)

Za każdym razem, gdy piszesz kwerendy pobierania articulate które kolumny mają, wiersze, a którym procesor kwerend powinien poszukiwać oryginalnych danych.Zazwyczaj ten oryginalnych danych składa się z tabela lub kilku tabel połączonych ze sobą.Jednak oryginalne dane mogą pochodzić ze źródeł innych niż tabele.W rzeczywistości mogą pochodzić z widoków, kwerendy, synonimy lub funkcje zdefiniowane przez użytkownika, która zwraca tabela.

Przy użyciu widoku zamiast tabela

Istnieje możliwość wybrania wierszy z widoku.Na przykład załóżmy, że baza danych zawiera widok o nazwie „ ExpensiveBooks", w którym każdy wiersz opisuje tytuł, w których cena przekracza 19,99.Definicja widoku może wyglądać w następujący sposób:

SELECT *
FROM titles
WHERE price > 19.99

Można wybrać drogie psychologia książek jedynie wybierając książek psychologia z widoku ExpensiveBooks.Wynikowa instrukcja SQL może mieć następującą postać:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'

Podobnie widok może uczestniczyć w operacji łączyć.Na przykład można znaleźć sprzedaży drogich książek jedynie Sprzęgając tabela sprzedaży do widoku ExpensiveBooks.Wynikowa instrukcja SQL może mieć następującą postać:

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

Aby uzyskać więcej informacji na temat dodawania widoku do kwerendy Zobacz How to: Add Tables to Queries (Visual Database Tools).

Przy użyciu kwerendy zamiast tabela

Istnieje możliwość wybrania wierszy z kwerendy.Na przykład, załóżmy, że zostały już zapisane kwerendy, tytuły i identyfikatory ksiąg coauthored — księgi z więcej niż jednego autora.SQL może wyglądać w następujący sposób:

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

Następnie można napisać inną kwerendę, która opiera się na ten wynik.Na przykład można napisać kwerendę, która pobiera coauthored psychologia ksiąg.Aby napisać taką nową kwerendę, można użyć istniejącej kwerendy jako urządzenie źródłowe danych nowej kwerendy.Wynikowa instrukcja SQL może mieć następującą postać:

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
    ) 
    co_authored_books
WHERE     type = 'psychology'

Uwydatnione tekst zawiera istniejącą kwerendę, zastosowaną jako urządzenie źródłowe danych nowej kwerendy.Należy zauważyć, że nowej kwerendy użyto alias ("co_authored_books") istniejącej kwerendy.Aby uzyskać więcej informacji na temat aliasów zobacz How to: Create Table Aliases (Visual Database Tools) i How to: Create Column Aliases (Visual Database Tools).

Podobnie kwerenda może uczestniczyć w operacji łączyć.Na przykład można znaleźć sprzedaży drogich książek coauthored jedynie sprzęgając widok ExpensiveBooks do pobierania książki coauthored kwerendy.Wynikowa instrukcja SQL może mieć następującą postać:

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
        )

Aby uzyskać więcej informacji na temat dodawania kwerendy do kwerendy Zobacz How to: Add Tables to Queries (Visual Database Tools).

Za pomocą funkcja zdefiniowane przez użytkownika zamiast tabela

W programie SQL Server 2000 lub wyższym można utworzyć funkcja zdefiniowaną przez użytkownika, która zwraca tabela.Takie funkcje, są użyteczne przy wykonywaniu złożonych lub proceduralnych logikę.

Na przykład załóżmy, że tabela pracownik zawiera dodatkową kolumna, employee.manager_emp_id i że istnieje klucz obcy z manager_emp_id do employee.emp_id.W tabela pracowników każdy wiersz kolumna manager_emp_id wskazuje szefa pracownika.Bardziej precyzyjnie wskazuje pracownika firmy przełożonemu.Można utworzyć funkcja zdefiniowanej przez użytkownika, która zwraca tabela zawierającą jeden wiersz dla każdego pracownika, pracujące w określonym wysokiego poziom menedżera w hierarchii organizacyjnej.Może wywołać funkcja fn_GetWholeTeam i zaprojektować go tak, aby wykonać zmienną wprowadzania — wartość menedżera zespołu, w której chcesz pobrać.

Można napisać kwerendę, która korzysta z funkcja fn_GetWholeTeam jako urządzenie źródłowe danych.Wynikowa instrukcja SQL może mieć następującą postać:

SELECT * 
FROM 
     fn_GetWholeTeam ('VPA30890F')

"VPA30890F" jest wartość kierownika organizacji, której chcesz pobrać.Aby uzyskać więcej informacji na temat dodawania do kwerendy funkcja zdefiniowanej przez użytkownika Zobacz How to: Add Tables to Queries (Visual Database Tools). Aby zapoznać się z pełnym opisem funkcji zdefiniowanych przez użytkownika Zobacz User-Defined Functions (Database Engine).