Sdílet prostřednictvím


Vytváření dotazů pomocí tabulky (Visual Database Tools)

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.