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 <token>TE000126768</token> ágyazhatja be a főlekérdezésbe.

Segédlekérdezést <token>TE000127167</token> vagy <token>TE000126761</token> SQL-utasításban is létrehozhat.

Tartalom

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Lekérdezés eredményeinek használata mezőként egy másik lekérdezésben</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Segédlekérdezés használata lekérdezésmező feltételeként</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Segédlekérdezésekben használható gyakori SQL-kulcsszavak</link>

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

Lehetőség van arra, hogy segédlekérdezést használjon mezőaliasként.A segédlekérdezések mezőként is használhatók akkor, ha a segédlekérdezés eredményeit 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.

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

  2. A <ui>Használható sablonok</ui> csoportban kattintson a <ui>Mintasablonok</ui> gombra.

  3. Kattintson a <ui>Northwind</ui> sablonra, majd a <ui>Létrehozás</ui> gombra.

  4. A <ui>Northwind Traders</ui> lapon (a <ui>Kezdőképernyő</ui> objektumlapon) látható utasításokat követve nyissa meg az adatbázist, majd zárja be a Bejelentkezési párbeszédpanelt.

  5. Kattintson a <ui>Létrehozás</ui> lap <ui>Lekérdezések</ui> csoportjának <ui>Lekérdezéstervező</ui> gombjára.

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

  7. Zárja be a <ui>Tábla megjelenítése</ui> párbeszédpanelt.

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

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

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

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

  12. A <ui>Nagyítás</ui> párbeszédpanelen írja be vagy illessze be a következő kifejezést:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    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.

  13. A táblázat negyedik oszlopának <ui>Mező</ui> sorában írja be az alábbi kifejezést:

    <codeInline>Interval: [Order Date]-[Prior Date]</codeInline>

    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.<br />

  14. A <ui>Tervezés</ui> lapon, az <ui>Eredmények</ui> csoportban kattintson a <ui>Futtatás</ui> 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.

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

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">A lap tetejére</link>

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

Segédlekérdezés mező feltételeként is használható.A segédlekérdezések mezőfeltételként is alkalmazhatók akkor, ha a segédlekérdezés 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 <legacyItalic>nem</legacyItalic> ü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.accsb nevű adatbázist, és engedélyezze a tartalmát.

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

  3. Kattintson a <ui>Létrehozás</ui> lap <ui>Egyéb</ui> csoportjában a <ui>Lekérdezéstervező</ui> gombra.

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

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

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

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

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

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    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 <ui>Tervezés</ui> lap <ui>Eredmények</ui> csoportjában kattintson a <ui>Futtatás</ui> 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.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">A lap tetejére</link>

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.

  • <embeddedLabel>ALL:</embeddedLabel> 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 [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • <embeddedLabel>ANY:</embeddedLabel> 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 [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

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

  • <embeddedLabel>EXISTS:</embeddedLabel> 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 [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    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 [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • <embeddedLabel>IN:</embeddedLabel> 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 [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

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

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">A lap tetejére</link>

Office-jártasság 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.

×