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