Megosztás a következőn keresztül:


Lekérdezések létrehozása tábla mellett (Visual Database Tools)

A következőkre vonatkozik:SQL Server

Amikor lekéréses lekérdezést ír, meg kell fogalmaznia, hogy mely oszlopokat, milyen sorokat szeretne, és hol keresse meg a lekérdezésfeldolgozó az eredeti adatokat. Ezek az eredeti adatok általában egy táblából vagy több, egymáshoz csatlakoztatott táblából állnak. Az eredeti adatok azonban nem táblákból származhatnak. Valójában olyan nézetekből, lekérdezésekből, szinonimákból vagy felhasználó által definiált függvényekből származhat, amelyek egy táblát adnak vissza.

Nézet használata táblázat helyett

Nézet sorait kijelölheti. Tegyük fel például, hogy az adatbázis tartalmaz egy "ExpensiveBooks" nevű nézetet, amelyben minden sor egy olyan címet ír le, amelynek ára meghaladja a 19,99-et. A nézetdefiníció a következőképpen nézhet ki:

SELECT *
FROM titles
WHERE price > 19.99;

Kiválaszthatja a drága pszichológia könyveket csak úgy, ha kiválasztja a pszichológia könyveket a ExpensiveBooks nézetből. Az eredményként kapott SQL a következőképpen nézhet ki:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';

Hasonlóképpen, egy nézet is részt vehet egy JOIN műveletben. Például, a drága könyvek értékesítését úgy találja meg, hogy összekapcsolja az értékesítési táblát az ExpensiveBooks nézettel. Az eredményként kapott SQL a következőképpen nézhet ki:

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

A nézet lekérdezéshez való hozzáadásáról további információt a Táblák hozzáadása lekérdezésekhez (Visual Database Tools) című témakörben talál.

Lekérdezés használata tábla helyett

A lekérdezésekből sorokat választhat ki. Tegyük fel például, hogy már írt egy lekérdezést, amely lekérte a társszerző könyvek címét és azonosítóit – a több szerzőt tartalmazó könyveket. Az SQL a következőképpen nézhet ki:

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;

Ezután írhat egy másik lekérdezést, amely erre az eredményre épül. Írhat például egy lekérdezést, amely lekéri az társszerzők által írt pszichológiai könyveket. Az új lekérdezés írásához használhatja a meglévő lekérdezést az új lekérdezés adatainak forrásaként. Az eredményként kapott SQL a következőképpen nézhet ki:

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';

A kiemelt szöveg az új lekérdezés adatainak forrásaként használt meglévő lekérdezést jeleníti meg. Az új lekérdezés aliast ("co_authored_books") használ a meglévő lekérdezéshez. Az aliasokról további információt a tábla aliasainak létrehozása (Visual Database Tools) és az oszlop aliasainak létrehozása (Visual Database Tools) című témakörben talál.

Hasonlóképpen, a lekérdezések is részt vehetnek egy JOIN műveletben. A drága társszerző könyvek eladásait például úgy találhatja meg, ha az ExpensiveBooks nézetet összekapcsolja a társszerző könyvek lekérdezésével. Az eredményként kapott SQL a következőképpen nézhet ki:

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
        )

A lekérdezés lekérdezéshez való hozzáadásáról további információt a Táblák hozzáadása lekérdezésekhez (Visual Database Tools) című témakörben talál.

Felhasználó által definiált függvény használata tábla helyett

Létrehozhat egy felhasználó által definiált függvényt, amely egy táblát ad vissza. Ezek a függvények összetett vagy eljárási logika végrehajtásához hasznosak.

Tegyük fel például, hogy az alkalmazotti tábla tartalmaz egy további oszlopot, employee.manager_emp_idés hogy egy idegen kulcs létezik a manager_emp_id és a között employee.emp_id. Az alkalmazotti tábla minden sorában az manager_emp_id oszlop az alkalmazott főnökét jelöli. Pontosabban azt jelzi, hogy az alkalmazott főnöke emp_id. Létrehozhat egy felhasználó által definiált függvényt, amely egy egy sort tartalmazó táblát ad vissza minden alkalmazott számára, aki egy adott magas szintű vezető szervezeti hierarchiájában dolgozik. Hívhatja a fn_GetWholeTeam függvényt, és úgy tervezheti meg, hogy egy bemeneti változót vegyen fel – annak a vezetőnek a emp_id, akinek a csapatát le szeretné kérni.

Olyan lekérdezést írhat, amely a fn_GetWholeTeam függvényt használja adatforrásként. Az eredményként kapott SQL a következőképpen nézhet ki:

SELECT *
FROM fn_GetWholeTeam('VPA30890F');

VPA30890F az a emp_id vezető, akinek a szervezetét le szeretné kérni. A felhasználó által definiált függvény lekérdezéshez való hozzáadásáról további információt a Táblák hozzáadása lekérdezésekhez (Visual Database Tools) című témakörben talál. A felhasználó által definiált függvények teljes leírását a felhasználó által definiált függvények című témakörben talál.