Udostępnij za pośrednictwem


Tworzenie zapytań przy użyciu elementu oprócz tabeli (Visual Database Tools)

Dotyczy:programu SQL Server

Za każdym razem, gdy piszesz zapytanie dotyczące pobierania, określasz żądane kolumny, wiersze i miejsce, w którym procesor zapytań powinien znaleźć oryginalne dane. Zazwyczaj te oryginalne dane składają się z tabeli lub kilku tabel połączonych ze sobą. Oryginalne dane mogą jednak pochodzić ze źródeł innych niż tabele. W rzeczywistości może pochodzić z widoków, zapytań, synonimów lub funkcji zdefiniowanych przez użytkownika, które zwracają tabelę.

Używanie widoku zamiast tabeli

Możesz wybrać wiersze z widoku. Załóżmy na przykład, że baza danych zawiera widok o nazwie "ExpensiveBooks", w którym każdy wiersz opisuje tytuł, którego cena przekracza 19,99. Definicja widoku może wyglądać następująco:

SELECT *  
FROM titles  
WHERE price > 19.99  

Możesz wybrać drogie książki psychologii tylko poprzez wybranie książek psychologii z widoku ExpensiveBooks. Wynikowy kod SQL może wyglądać następująco:

SELECT *  
FROM ExpensiveBooks  
WHERE type = 'psychology'  

Podobnie widok może uczestniczyć w operacji JOIN. Na przykład możesz znaleźć sprzedaż drogich książek tylko przez dołączenie tabeli sprzedaży do widoku ExpensiveBooks. Wynikowy kod SQL może wyglądać następująco:

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

Aby uzyskać więcej informacji na temat dodawania widoku do zapytania, zobacz Dodawanie tabel do zapytań (Visual Database Tools).

Używanie zapytania zamiast tabeli

Możesz wybrać wiersze z zapytania. Załóżmy na przykład, że masz już napisaną kwerendę, która pobiera tytuły i identyfikatory współautorów książek — książki z więcej niż jednym autorem. 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żesz napisać kolejne zapytanie, które opiera się na tym wyniku. Na przykład możesz napisać zapytanie, które pobiera książki psychologiczne współautorstwa. Aby napisać to nowe zapytanie, możesz użyć istniejącego zapytania jako źródła danych nowego zapytania. Wynikowy kod SQL może wyglądać następująco:

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'  

Podkreślony tekst przedstawia istniejące zapytanie używane jako źródło danych nowego zapytania. Należy pamiętać, że nowe zapytanie używa aliasu ("co_authored_books") dla istniejącego zapytania. Aby uzyskać więcej informacji na temat aliasów, zobacz Create Table Aliases (Visual Database Tools) i Create Column Aliases (Visual Database Tools).

Podobnie zapytanie może uczestniczyć w operacji JOIN. Na przykład możesz znaleźć sprzedaż drogich współtworzonych książek, po prostu dołączając widok ExpensiveBooks do zapytania pobierającego książki współtworzone. Wynikowy kod SQL może wyglądać następująco:

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 zapytania do zapytania, zobacz Dodawanie tabel do zapytań (Visual Database Tools).

Używanie funkcji User-Defined zamiast tabeli

W programie SQL Server 2000 lub nowszym można utworzyć funkcję zdefiniowaną przez użytkownika, która zwraca tabelę. Takie funkcje są przydatne do wykonywania złożonej lub proceduralnej logiki.

Załóżmy na przykład, że tabela pracowników zawiera dodatkową kolumnę, employee.manager_emp_id, i że klucz obcy łączy manager_emp_id z employee.emp_id. W każdym wierszu tabeli pracowników kolumna manager_emp_id wskazuje szefa pracownika. Dokładniej, wskazuje identyfikator (emp_id) szefa pracownika. Można utworzyć funkcję zdefiniowaną przez użytkownika, która zwraca tabelę zawierającą jeden wiersz dla każdego pracownika pracującego w hierarchii organizacyjnej określonego menedżera wysokiego poziomu. Możesz na przykład wywołać funkcję fn_GetWholeTeam i zaprojektować ją tak, aby przyjmowała zmienną wejściową — emp_id menedżera, czyjego zespół chcesz pobrać.

Możesz napisać zapytanie, które używa funkcji fn_GetWholeTeam jako źródła danych. Wynikowy kod SQL może wyglądać następująco:

SELECT *   
FROM   
     fn_GetWholeTeam ('VPA30890F')  

"VPA30890F" to emp_id menedżera, którego organizację chcesz uzyskać. Aby uzyskać więcej informacji na temat dodawania funkcji zdefiniowanej przez użytkownika do zapytania, zobacz Dodawanie tabel do zapytań (Visual Database Tools). Aby uzyskać pełny opis funkcji zdefiniowanych przez użytkownika, zobacz User-Defined Functions.