Udostępnij za pośrednictwem


Jak: tworzenie kwerend za pomocą czegoś oprócz tabeli

W każdym przypadku, gdy piszesz kwerendy wyszukiwania, można wytłumaczyć kolumn jakie chcesz, wiersze, w jaki chcesz, i którym procesor kwerend powinien poszukiwać oryginalnych danych.Zazwyczaj ten oryginalnych danych składa się z tabeli lub kilku sprzężonych tabel.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óre zwracają tabeli.

Przy użyciu widoku zamiast tabeli

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ć następująco:

SELECT *
FROM titles
WHERE price > 19.99

Można wybrać drogie psychologii jedynie przez wybranie książki z dziedziny psychologii z widoku ExpensiveBooks (DrogieKsiążki).Wynikowa instrukcja SQL może mieć następującą postać:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'

Podobnie widok może także uczestniczyć w operacji JOIN.Na przykład można znaleźć sprzedaży drogich książek jedynie Sprzęgając tabelę sprzedaży do widoku ExpensiveBooks (DrogieKsiążki).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 Jak: Dodawanie tabel do kwerendy.

Za pomocą kwerendy zamiast z tabeli

Możliwość wybrania wierszy z kwerendy.Załóżmy, że napisano już kwerendę, tytuły i identyfikatory książek napisanych — książki z więcej niż jednego autora.SQL może wyglądać następująco:

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ę, bazującą na tym wyniku.Na przykład można napisać kwerendę pobierającą psychologii.Aby napisać taką nową kwerendę, można użyć istniejącej kwerendy jako źródła 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'

Pokazuje, w tekście wyróżniono istniejącą kwerendę, zastosowaną jako źródło danych nowej kwerendy.Należy zauważyć, że w nowej kwerendzie użyto aliasu ("co_authored_books") istniejącej kwerendy.Aby uzyskać więcej informacji na temat aliasów, zobacz Jak: Tworzenie aliasów tabel i Jak: Tworzenie aliasów kolumn.

Podobnie kwerenda może uczestniczyć w operacji JOIN.Na przykład można znaleźć sprzedaży drogich książek napisanych jedynie sprzęgając widok ExpensiveBooks (DrogieKsiążki) kwerendą pobierającą książki.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 na kwerendę zobacz Jak: Dodawanie tabel do kwerendy.

Za pomocą funkcji zdefiniowanej przez użytkownika zamiast tabeli

W programie SQL Server 2000 lub wyższym można utworzyć funkcję zdefiniowaną przez użytkownika, która zwraca tabelę.Funkcje takie są przydatne przy przeprowadzaniu logiki złożonych lub proceduralnych.

Na przykład załóżmy, że tabela pracownik zawiera dodatkową kolumnę, employee.manager_emp_id i że istnieje klucz obcy z między polami manager_emp_id (id_pracownika).W każdym wierszu tabeli employee w kolumnie manager_emp_id określa przełożonego danego pracownika.Bardziej precyzyjnie wskazuje pracownika przełożonemu pracownika.Można utworzyć funkcję zdefiniowaną przez użytkownika, która zwraca tabelę zawierającą po jednym wierszu dla każdego z pracowników zatrudnionych w ramach hierarchii podlegającej określonemu kierownikowi organizacyjnych.Może wywołać fn_GetWholeTeam (fn_GetWholeTeam) funkcja i jej zmienną wejściową projektowania — identyfikator emp_id kierownika, którego zespół ma być pobrany.

Można napisać kwerendę, w której funkcja fn_GetWholeTeam (fn_GetWholeTeam) jako źródła danych.Wynikowa instrukcja SQL może mieć następującą postać:

SELECT * 
FROM 
     fn_GetWholeTeam ('VPA30890F')

"VPA30890F" to identyfikator emp_id kierownika organizacji, w której chcesz pobrać.Aby uzyskać więcej informacji na temat dodawania funkcji zdefiniowanej przez użytkownika do kwerendy, zobacz Jak: obejmują funkcje zdefiniowane przez użytkownika w kwerendach i Jak: Dodawanie tabel do kwerendy.Pełny opis funkcji zdefiniowanej przez użytkownika można znaleYć w dokumentacji programu SQL Server.

Zobacz też

Inne zasoby

Praca z procedury przechowywane i funkcje zdefiniowane przez użytkownika