Lekérdezés másik lekérdezésbe vagy kifejezésbe ágyazása segédlekérdezéssel

Bizonyos esetekben szükség lehet egy adott lekérdezés eredményét mezőként használni egy másik lekérdezésben, vagy lekérdezésmező feltételeként alkalmazni. Tegyük fel például, hogy a termékekre vonatkozó rendelések közötti időtartamot kell meghatározni: az időtartamot megjelenítő lekérdezés létrehozásához össze kell hasonlítani a rendelési dátumokat a kérdéses termék egyéb rendelési dátumaival. E dátumok összehasonlításához ugyancsak lekérdezésre van szükség. Ezt a lekérdezést egy segédlekérdezés ágyazhatja be a főlekérdezésbe.

Segédlekérdezést kifejezés vagy SQL nézet SQL-utasításban is létrehozhat.

Tartalom

Lekérdezés eredményének használata mezőként egy másik lekérdezésben

Segédlekérdezés használata lekérdezésmező feltételeként

Segédlekérdezésekben használható gyakori SQL-kulcsszavak

Lekérdezés eredményének használata mezőként egy másik lekérdezésben

A segédlekérdezések mezők alias (SQL) is használhatók. Erre akkor lehet szükség, ha a segédlekérdezés eredményét mezőként szeretné használni a főlekérdezésben.

Megjegyzés : A mezőaliasként használt segédlekérdezések csak egy mezőt adhatnak eredményül.

A segédlekérdezések mezőaliasaival megjeleníthetők az aktuális sor más értékeitől függő értékek. Segédlekérdezés használata nélkül ez nem lehetséges.

Térjünk vissza például ahhoz a példához, amelyben a termékekre vonatkozó rendelések közötti időtartamot kell meghatározni. Ehhez össze kell hasonlítani az egyes rendelési dátumokat a termékhez tartozó egyéb dátumokkal. A Northwind adatbázissablonnal létrehozható egy olyan lekérdezés, amely ezt az információt jeleníti meg.

A Northwind adatbázis beállítása

  1. Kattintson a Fájl fülre, majd az Új parancsra.

  2. A Használható sablonok csoportban kattintson a Mintasablonok gombra.

  3. Kattintson a Northwind sablonra, majd a Létrehozás gombra.

  4. A Northwind Traders oldal utasításait (a nyitóképernyő objektumlapján) követve nyissa meg az adatbázist, majd zárja be a bejelentkezési párbeszédpanelt.

  1. Kattintson a Létrehozás lap Lekérdezések csoportjának Lekérdezéstervező gombjára.

  2. A Tábla megjelenítése párbeszédpanelen kattintson a Lekérdezések fülre, majd duplán a Termékrendelések listaelemre.

  3. Zárja be a Tábla megjelenítése párbeszédpanelt.

  4. Duplán a Termékszám és a Rendelve mezőre kattintva vegye fel azokat a lekérdezéstervező táblázatba.

  5. A táblázat Termékszám oszlopának Rendezés sorában válassza a legördülő lista Növekvő elemét.

  6. A táblázat Rendelve oszlopának Rendezés sorában válassza a legördülő lista Csökkenő elemét.

  7. A táblázat harmadik oszlopában kattintson a jobb gombbal a Mező sorra, és válassza a helyi menü Nagyítás parancsát.

  8. A Nagyítás párbeszédpanelen írja be vagy illessze be a következő kifejezést:

    Korábbi dátum: (SELECT MAX([Rendelve]) 
    FROM [Termékrendelések] AS [Régi rendelések]
    WHERE [Régi rendelések].[Rendelve] < [Termékrendelések].[Rendelve]
    AND [Régi rendelések].[Termékszám] = [Termékrendelések].[Termékszám])

Ez a kifejezés alkotja a segédlekérdezést, amely minden sorban kiválasztja azt a legutóbbi rendelési dátumot, amely kevésbé régebbi, mint a sorhoz már hozzárendelt rendelési dátum. Figyelje meg, hogy miként hozható létre táblaalias az AS kulcsszóval annak érdekében, hogy össze lehessen hasonlítani a segédlekérdezésben lévő értékeket a főlekérdezés aktuális sorában lévőkkel.

  1. A táblázat negyedik oszlopának Mező sorában írja be az alábbi kifejezést:

    Időköz: [Rendelve]-[Korábbi dátum]

Ez a kifejezés a művelethez a segédlekérdezésben definiált korábbi dátumértéket használva kiszámítja az egyes rendelési dátumok közötti időtartamot és a termékhez tartozó korábbi rendelési dátumot.

  1. A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.

    1. A program futtatja a lekérdezést, majd megjelenít egy listát, amely a termékneveket, a rendelési dátumokat, a korábbi rendelési dátumokat és a rendelési dátumok közötti időtartamot tartalmazza. Az eredmény szűrése először termékszám szerint növekvő sorrendben, majd a rendelés dátuma szerint csökkenő sorrendben történik.

    2. Megjegyzés : Mivel a Termékszám mező egy keresőmező, az Access alapértelmezés szerint a keresési értékeket jeleníti meg (ebben az esetben a termék nevét), nem pedig a tényleges termékszámokat. Noha ez a módszer megváltoztatja a megjelenő értékeket, a rendezési sorrendre nincsen hatással.

  2. Zárja be a Northwind adatbázist.

Vissza a lap tetejére

Segédlekérdezés használata lekérdezésmező feltételeként

A segédlekérdezések mezők feltételek is alkalmazhatók. Akkor célszerű mezőfeltételként használni egy segédlekérdezést, ha az utóbbi eredményeivel korlátozni szeretné a mező által megjelenített értékek körét.

Tegyük fel például, hogy át kell tekintenie a nem üzletkötőként dolgozó alkalmazottak által feldolgozott rendelések listáját. A lista létrehozásához össze kell vetni az egyes rendelésekhez tartozó alkalmazottkódot a nem üzletkötőként dolgozó alkalmazottak alkalmazottkódjait tartalmazó listával. A lista segédlekérdezést használva hozható létre és alkalmazható mezőfeltételként. Ezt mutatja be a következő eljárás.

  1. Nyissa meg a Northwind 2007.accdb nevű adatbázist, és engedélyezze annak tartalmát.

  2. Zárja be a bejelentkezési párbeszédpanelt.

  3. A Létrehozás lap Egyebek csoportjában kattintson a Lekérdezéstervezés elemre.

  4. A Tábla megjelenítése párbeszédpanel Táblák lapján kattintson duplán a Rendelések és az Alkalmazottak listaelemre.

  5. Zárja be a Tábla megjelenítése párbeszédpanelt.

  6. A Rendelések táblában duplán az Alkalmazottkód, a Rendeléskód és a Rendelve mezőre kattintva vegye fel ezt a három mezőt a lekérdezéstervező táblázatba. Az Alkalmazottak táblában a Beosztás mezőre duplán kattintva tegye ugyanezt.

  7. Kattintson a jobb gombbal az Alkalmazottkód oszlop Feltétel sorára, és válassza a helyi menü Nagyítás parancsát.

  8. A Nagyítás párbeszédpanelen írja be vagy illessze be a következő kifejezést:

    IN (SELECT [Azonosító] FROM [Alkalmazottak] 
    WHERE [Beosztás]<>'Üzletkötő')

    Ez a kifejezés alkotja a segédlekérdezést: minden olyan alkalmazottkódot kijelöl, amely jelzi, hogy az alkalmazott beosztása nem üzletkötő, majd átadja ezt az eredményhalmazt a főlekérdezésnek. Ezt követően a főlekérdezés ellenőrzi, hogy szerepelnek-e a Rendelések táblából származó alkalmazottkódok az eredményhalmazban.

  9. A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.

    A program futtatja a lekérdezést, annak eredményei pedig felsorolják a nem üzletkötőként dolgozó alkalmazottak által feldolgozott rendeléseket.

Vissza a lap tetejére

Segédlekérdezésekben használható gyakori SQL-kulcsszavak

A segédlekérdezésekben számos SQL-kulcsszó használható.

Megjegyzés : Ez a felsorolás közel sem teljes. Adatdefiniáló kulcsszavak kivételével bármely érvényes SQL-kulcsszó használható a segédlekérdezésekben.

  • ALL:    A WHERE záradékban használt ALL kulcsszóval a segédlekérdezés által visszaadott sorokkal történő összehasonlításkor beolvashatók a feltételnek megfelelő sorok.

Tegyük fel például, hogy főiskolai hallgatók adatait kell elemezni. A hallgatók kötelesek teljesíteni az előírt tanulmányi átlagot, amely szakonként más és más. A szakokat és a hozzájuk tartozó előírt tanulmányi átlagot egy Szakok nevű tábla tárolja, a kapcsolódó hallgatói adatokat pedig egy Hallgatói_rekordok nevű tábla tartalmazza.

Az alábbi lekérdezéssel megjeleníthető azoknak a szakoknak (és előírt tanulmányi átlaguknak) a listája, amelyeknek tanulmányi átlagát a kérdéses szakra járó összes hallgató eléri:

SELECT [Szak], [Előírt_tanulmányi_átlag] 
FROM [Szakok]
WHERE [Előírt_tanulmányi_átlag] < ALL
(SELECT [Tanulmányi_átlag] FROM [Hallgatói_rekordok]
WHERE [Hallgatói_rekordok].[Szak]=[Szakok].[Szak]);
  • ANY:    A WHERE záradékban használt ANY kulcsszóval a segédlekérdezés által visszaadott sorok közül legalább eggyel történő összehasonlításkor beolvashatók a feltételnek megfelelő sorok.

    Tegyük fel például, hogy főiskolai hallgatók adatait kell elemezni. A hallgatók kötelesek teljesíteni az előírt tanulmányi átlagot, amely szakonként más és más. A szakokat és a hozzájuk tartozó előírt tanulmányi átlagot egy Szakok nevű tábla tárolja, a kapcsolódó hallgatói adatokat pedig egy Hallgatói_rekordok nevű tábla tartalmazza.

    Az alábbi lekérdezéssel megjeleníthető azoknak a szakoknak (és előírt tanulmányi átlaguknak) a listája, amelyeknek tanulmányi átlagát a kérdéses szakra járó valamely hallgató nem éri el:

    SELECT [Szak], [Előírt_tanulmányi_átlag] 
    FROM [Szakok]
    WHERE [Előírt_tanulmányi_átlag] > ANY
    (SELECT [Tanulmányi_átlag] FROM [Hallgatói_rekordok]
    WHERE [Hallgatói_rekordok].[Szak]=[Szakok].[Szak]);

    Megjegyzés : A SOME kulcsszó ugyanerre a célra használható, mert az ANY kulcsszó szinonimája.

  • EXISTS:    A WHERE záradékban használt EXISTS kulcsszó azt jelzi, hogy a szóban forgó segédlekérdezésnek legalább egy sort vissza kell adnia. Az EXISTS kulcsszó előtt a NOT kulcsszó is állhat, így jelezve, hogy a segédlekérdezésnek egy sort sem szabad visszaadnia.

    Az alábbi lekérdezés például azoknak a termékeknek a listáját adja eredményül, amelyek legalább egy meglévő rendelésben szerepelnek:

    SELECT *
    FROM [Termékek]
    WHERE EXISTS
    (SELECT * FROM [Rendelés részletei]
    WHERE [Rendelés részletei].[Termékszám]=[Termékek].[Azonosító]);

    A NOT EXISTS kifejezést megadva a lekérdezés azokat a termékeket adja eredményül, amelyek egy meglévő rendelésnek sem részei:

    SELECT *
    FROM [Termékek]
    WHERE NOT EXISTS
    (SELECT * FROM [Rendelés részletei]
    WHERE [Rendelés részletei].[Termékszám]=[Termékek].[Azonosító]);
  • IN:    A WHERE záradékban használt IN kulcsszóval azt ellenőrizheti, hogy a főlekérdezés aktuális sorában lévő adott érték része-e a segédlekérdezés által visszaadott eredményhalmaznak. Az IN kulcsszót is megelőzheti a NOT előtag, jelezve, hogy a főlekérdezés aktuális sorának adott értéke nem része a segédlekérdezés által visszaadott eredményhalmaznak.

    A következő lekérdezés például a nem üzletkötőként dolgozó alkalmazottak által feldolgozott rendelések listáját jeleníti meg a rendelési dátumokkal együtt:

    SELECT [Rendeléskód], [Rendelve]
    FROM [Rendelések]
    WHERE [Alkalmazottkód] IN
    (SELECT [Azonosító] FROM [Alkalmazottak]
    WHERE [Beosztás]<>'Üzletkötő');

    A NOT IN kulcsszópárral ugyanez a lekérdezés így néz ki:

    SELECT [Rendeléskód], [Rendelve]
    FROM [Rendelések]
    WHERE [Alkalmazottkód] NOT IN
    (SELECT [Azonosító] FROM [Alkalmazottak]
    WHERE [Beosztás]='Üzletkötő');

Vissza a lap tetejére

Ismeretek bővítése
Oktatóanyagok megismerése
Új szolgáltatások listájának lekérése
Részvétel az Office Insider programban

Hasznos volt az információ?

Köszönjük a visszajelzését!

Köszönjük visszajelzését. Jobbnak látjuk, ha az Office egyik támogatási szakemberéhez irányítjuk.

×