Vgnezditev poizvedbe v drugo poizvedbo ali izraz s podpoizvedbo

Morda želite rezultate poizvedbe uporabiti kot polje v drugi poizvedbi ali kot pogoj za polje poizvedbe. Recimo, da na primer želite prikazati časovni interval med naročili za vsak izdelek. Za poizvedbo, ki prikaže ta interval, morate primerjati vsak datum naročila z drugimi datumi naročila določenega izdelka. Tudi za primerjavo datumov potrebujete poizvedbo. To poizvedbo lahko vgnezdite znotraj glavne poizvedbe, in sicer s <token>TE000126768</token>.

Podpoizvedbo lahko zapišete v <token>TE000127167</token> ali v izjavi s standardom SQL (Structured Query Language) v <token>TE000126761</token>.

V tem članku

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Uporabite rezultate poizvedbe kot polje v drugi poizvedbi</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Uporabite podpoizvedbo kot pogoj za polje poizvedbe</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Pogoste ključne besede SQL, ki jih lahko uporabite s podpoizvedbo</link>

Uporabite rezultate poizvedbe kot polje v drugi poizvedbi

Podpoizvedbo lahko uporabite kot vzdevek polja. To naredite takrat, ko želite rezultate podpoizvedbe uporabiti kot polje v glavni poizvedbi.

Opomba: Podpoizvedba, ki jo uporabite kot vzdevek polja, ne more vrniti več kot enega polja.

Vzdevek polja s podpoizvedbo uporabite, ko želite prikazati vrednosti, ki so odvisne od drugih vrednosti v trenutni vrstici, to pa ni mogoče brez uporabe podpoizvedbe.

Vrnimo se k primeru, kjer želite prikazati interval med naročili posameznega izdelka. Ta interval določite tako, da primerjate datum vsakega naročila z drugimi datumi naročil za ta izdelek. Poizvedbo s temi podatki lahko ustvarite s predlogo zbirke podatkov Northwind.

  1. Na zavihku <ui>Datoteka</ui> kliknite <ui>Novo</ui>.

  2. V razdelku <ui>Predloge, ki so na voljo</ui> kliknite <ui>Vzorci predlog</ui>.

  3. Kliknite <ui>Northwind</ui> in nato <ui>Ustvari</ui>.

  4. Sledite navodilom na strani <ui>Northwind Traders</ui> (na zavihku predmeta <ui>Zagonski zaslon</ui>), da odprete zbirko podatkov, nato pa zaprite pogovorno okno za prijavo.

  5. Na zavihku <ui>Ustvari</ui> v skupini <ui>Poizvedbe</ui> kliknite <ui>Načrt poizvedbe</ui>.

  6. V pogovornem oknu <ui>Pokaži tabelo</ui> kliknite zavihek <ui>Poizvedbe</ui> in dvokliknite <ui>Naročila izdelkov</ui>.

  7. Zaprite pogovorno okno <ui>Pokaži tabelo</ui>.

  8. Dvokliknite polje <ui>ID izdelka</ui> in polje <ui>Datum naročila</ui>, da ju dodate v mrežo načrta poizvedbe.

  9. Na mreži v stolpcu <ui>ID izdelka</ui> v vrstici <ui>Razvrsti</ui> izberite <ui>Naraščajoče</ui>.

  10. Na mreži v stolpcu <ui>Datum naročila</ui> v vrstici <ui>Razvrsti</ui> izberite <ui>Padajoče</ui>.

  11. V tretjem stolpcu mreže z desno tipko kliknite vrstico <ui>Polje</ui> in nato v priročnem meniju kliknite <ui>Povečava</ui>.

  12. V pogovornem oknu <ui>Povečava</ui> vnesite ali prilepite ta izraz:

    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])

    Ta izraz je podpoizvedba. Za vsako vrstico podpoizvedba izbere najpoznejši datum naročila, ki je zgodnejši od datuma naročila, ki je že povezan z vrstico. Oglejte si, kako s ključno besedo AS ustvarite vzdevek tabele, da lahko primerjate vrednosti v podpoizvedbi z vrednostmi trenutne vrstice v glavni poizvedbi.

  13. V četrtem stolpcu mreže v vrstico <ui>Polje</ui> vnesite ta izraz:

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

    Izraz izračuna interval med vsakim datumom naročila in prejšnjim datumom naročila izbranega izdalka, uporabi pa vrednost za prejšnji datum, ki smo jo določili s podpoizvedbo.<br />

  14. Na zavihku <ui>Design</ui> v skupini <ui>Rezultati</ui> kliknite <ui>Zaženi</ui>.

    1. Poizvedba se izvede in prikaže seznam imen izdelkov, datumov naročila, prejšnjih datumov naročila in intervalov med datumi naročil. Rezultati so najprej razvrščeni po ID-ju izdelka (v naraščajočem vrstnem redu) in nato po datumu naročila (v padajočem vrstnem redu).

    2. Opomba: Ker je ID izdelka polje za iskanje, Access privzeto prikaže vrednosti za iskanje (v tem primeru ime izdelka), in ne dejanskih ID-jev izdelka. Čeprav se s tem spremenijo prikazane vrednosti, se ne spremeni vrstni red razvrstitve.

  15. Zaprite zbirko podatkov Northwind.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Na vrh strani</link>

Uporabite podpoizvedbo kot pogoj za polje poizvedbe

Podpoizvedbo lahko uporabite kot pogoj za polje. Uporabite podpoizvedbo kot pogoj za polje, ko želite z rezultati podpoizvedbe omejiti vrednosti, prikazane v polju.

Recimo, da na primer želite prikazati seznam naročil, ki so jih obdelali zaposleni, ki <legacyItalic>niso</legacyItalic> prodajni zastopniki. Če želite ustvariti ta seznam, morate primerjati ID zaposlenega v vsakem naročilu s seznamom ID-jev zaposlenih, ki niso prodajni zastopniki. Spodaj je prikazano, kako z uporabo podpoizvedbe ustvarite seznam in ga uporabite kot pogoj v polju:

  1. Odprite zbirko podatkov Northwind in omogočite njeno vsebino.

  2. Zaprite obrazec za prijavo.

  3. Na zavihku <ui>Ustvari</ui> v skupini <ui>Drugo</ui> kliknite <ui>Načrt poizvedbe</ui>.

  4. V pogovornem oknu <ui>Pokaži tabelo</ui> na zavihku <ui>Tabele</ui> dvokliknite <ui>Naročila</ui> in <ui>Zaposleni</ui>.

  5. Zaprite pogovorno okno <ui>Pokaži tabelo</ui>.

  6. V tabeli naročil dvokliknite polja <ui>ID zaposlenega</ui>, <ui>ID naročila</ui> in <ui>Datum naročila</ui>, da jih dodate v mrežo načrta poizvedbe. V tabeli zaposlenih dvokliknite polje <ui>Naziv</ui>, da ga dodate v mrežo načrta.

  7. Z desno tipko miške kliknite vrstico <ui>Pogoji</ui> v stolpcu »ID zaposlenega«, nato pa v priročnem meniju kliknite <ui>Povečava</ui>.

  8. V polje <ui>Povečava</ui> vnesite ali prilepite ta izraz:

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

    To je podpoizvedba. Izbere vse ID-je zaposlenih, katerih naziv ni »prodajni zastopnik«, in nabor rezultatov vnese v glavno poizvedbo. Nato glavna poizvedba preveri, ali so ID-ji zaposlenih iz tabele naročil prisotni v naboru rezultatov.

  9. Na zavihku <ui>Načrt</ui> v skupini <ui>Rezultati</ui> kliknite <ui>Zaženi</ui>.

    Poizvedba se izvede in rezultati so prikazani na seznamu naročil, ki so jih obdelali zaposleni, ki niso prodajni zastopniki.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Na vrh strani</link>

Pogoste ključne besede SQL, ki jih lahko uporabite s podpoizvedbo

Na voljo je nekaj ključnih besed SQL, ki jih lahko uporabite s podpoizvedbo.

Opomba: Ta seznam ni popoln. V podpoizvedbi lahko uporabite poljubno veljavno ključno besedo SQL, razen ključnih besed za definicijo podatkov.

  • <embeddedLabel>ALL</embeddedLabel> Ključno besedo ALL uporabite v stavku WHERE, če želite pridobiti vrstice, ki ustrezajo pogoju v primerjavi z vsako vrstico, ki jo vrne podpoizvedba.

    Recimo, da na primer analizirate podatke o študentih na fakulteti. Študenti morajo imeti minimalno povprečno oceno (PO), ki se razlikuje od predmeta do predmeta. Predmeti in minimalne povprečne ocene so shranjene v tabeli »Predmeti«, podatki o študentih pa so shranjeni v tabeli »Podatki_študentov«.

    Če želite prikazati seznam predmetov (in njihovih minimalnih povprečnih ocen), v katerem imajo vsi študenti s tem predmetom višjo povprečno oceno od minimalne, uporabite to poizvedbo:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • <embeddedLabel>ANY</embeddedLabel> Ključno besedo ANY uporabite v stavku WHERE, ko želite prikazati vrstice, ki ustrezajo pogoju, ko jih primerjate vsaj z eno vrstico, ki jo vrne podpoizvedba.

    Recimo, da na primer analizirate podatke o študentih na fakulteti. Študenti morajo imeti minimalno povprečno oceno (PO), ki se razlikuje od predmeta do predmeta. Predmeti in minimalne povprečne ocene so shranjene v tabeli »Predmeti«, podatki o študentih pa so shranjeni v tabeli »Podatki_študentov«.

    Če želite prikazati seznam predmetov (in njihovih minimalnih povprečnih ocen), v katerem ima poljuben študent s tem predmetom nižjo povprečno oceno od minimalne, uporabite to poizvedbo:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Opomba: Na enak način uporabite ključno besedo SOME, ki ima enak pomen kot ANY.

  • <embeddedLabel>EXISTS</embeddedLabel> Ključno besedo EXISTS uporabite v stavku WHERE, ko želite, da podpoizvedba vrne vsaj eno vrstico. Pred ključno besedo EXISTS lahko vnesete tudi NOT, kar pomeni, da podpoizvedba ne sme vrniti nobene vrstice.

    Spodnja poizvedba na primer vrne seznam izdelkov, ki so prisotni v vsaj enem naročilu:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Če uporabite NOT EXISTS, poizvedba vrne seznam izdelkov, ki niso najdeni vsaj v enem obstoječem naročilu:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • <embeddedLabel>IN</embeddedLabel> Ključno besedo IN uporabite v stavku WHERE, ko se želite prepričati, da je vrednost v trenutni vrstici glavne poizvedbe del nabora, ki ga vrne podpoizvedba. Pred ključno besedo IN lahko vnesete tudi NOT, da se prepričate, da vrednost v trenutni vrstici glavne poizvedbe ni del nabora, ki ga vrne podpoizvedba.

    Spodnja poizvedba na primer vrne seznam naročil (z datumi), ki so jih obravnavali zaposleni, ki niso prodajni zastopniki:

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

    Če uporabite NOT IN, lahko isto poizvedbo zapišete tako:

    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">Na vrh strani</link>

Razširite poznavanje Officea
Oglejte si izobraževanje
Prvi dobite nove funkcije
Pridružite se programu Office Insider

Vam je bila informacija v pomoč?

Zahvaljujemo se vam za povratne informacije.

Zahvaljujemo se vam za povratne informacije. Videti je, da bi vam prišla prav pomoč enega od naših Officeovih agentov za podporo.

×