Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Pokaždé, když napíšete dotaz na načtení, vyjadřujete, jaké sloupce chcete, jaké řádky chcete, a kde by procesor dotazů měl najít původní data. Tato původní data se obvykle skládají z tabulky nebo několika tabulek spojených dohromady. Původní data ale můžou pocházet z jiných zdrojů než tabulek. Ve skutečnosti může pocházet ze zobrazení, dotazů, synonym nebo uživatelem definovaných funkcí, které vracejí tabulku.
Použijte zobrazení místo tabulky
Můžete vybrat řádky ze zobrazení. Předpokládejme například, že databáze obsahuje zobrazení s názvem "ExpensiveBooks", ve kterém každý řádek popisuje název, jehož cena přesahuje 19,99. Definice zobrazení může vypadat takto:
SELECT *
FROM titles
WHERE price > 19.99;
Můžete vybrat drahé knihy z kategorie psychologie tím, že vyberete knihy z kategorie psychologie ze zobrazení drahých knih. Výsledný SQL může vypadat takto:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';
Podobně se může zobrazení účastnit operace JOIN. Například můžete najít prodej drahých knih pouhým připojením tabulky prodeje k zobrazení Drahé knihy. Výsledný SQL může vypadat takto:
SELECT *
FROM sales
INNER JOIN ExpensiveBooks
ON sales.title_id = ExpensiveBooks.title_id;
Další informace o přidání zobrazení do dotazu naleznete v tématu Přidání tabulek do dotazů (Visual Database Tools).
Použití dotazu místo tabulky
Můžete vybrat řádky z výsledku dotazu. Předpokládejme například, že jste už napsali dotaz, který načítá názvy a identifikátory spoluvytvářených knih – knih s více než jedním autorem. SQL může vypadat takto:
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;
Pak můžete napsat další dotaz, který vychází z tohoto výsledku. Můžete například napsat dotaz, který načte spoluautorské knihy o psychologii. Pokud chcete tento nový dotaz napsat, můžete použít existující dotaz jako zdroj dat nového dotazu. Výsledný SQL může vypadat takto:
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) AS co_authored_books
WHERE type = 'psychology';
Zvýrazněný text zobrazuje existující dotaz použitý jako zdroj dat nového dotazu. Nový dotaz používá alias ("co_authored_books") pro existující dotaz. Další informace o aliasech najdete v tématu Vytváření aliasů tabulek (Visual Database Tools) a Vytváření aliasů sloupců (Visual Database Tools).
Podobně se dotaz může účastnit JOIN operace. Například můžete najít prodeje drahých spoluautorských knih pouhým připojením zobrazení ExpensiveBooks k dotazu, který získává tyto knihy. Výsledný SQL může vypadat takto:
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
)
Další informace o přidání dotazu do dotazu naleznete v tématu Přidání tabulek do dotazů (Visual Database Tools).
Použití uživatelem definované funkce místo tabulky
Můžete vytvořit uživatelem definovanou funkci, která vrací tabulku. Tyto funkce jsou užitečné pro provádění komplexní nebo procedurální logiky.
Předpokládejme například, že tabulka zaměstnanců obsahuje další sloupec employee.manager_emp_ida že cizí klíč existuje z manager_emp_id do employee.emp_id. V každém řádku tabulky zaměstnanců sloupec manager_emp_id označuje šéfa zaměstnance. Přesněji řečeno, označuje to emp_id nadřízeného zaměstnance. Můžete vytvořit uživatelem definovanou funkci, která vrátí tabulku obsahující jeden řádek pro každého zaměstnance pracujícího v organizační hierarchii konkrétního manažera vysoké úrovně. Funkci můžete volat fn_GetWholeTeam a navrhnout ji tak, aby převzala vstupní proměnnou – emp_id manažera, jehož tým chcete načíst.
Můžete napsat dotaz, který používá funkci fn_GetWholeTeam jako zdroj dat. Výsledný SQL může vypadat takto:
SELECT *
FROM fn_GetWholeTeam('VPA30890F');
VPA30890F je emp_id manažera, jehož organizaci chcete načíst. Další informace o přidání uživatelem definované funkce do dotazu naleznete v tématu Přidání tabulek do dotazů (Visual Database Tools). Úplný popis uživatelem definovaných funkcí najdete v tématu Uživatelem definované funkce.