Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.