Ugnežđavanje upita u drugi upit ili u izraz pomoću podupita

Rezultate upita ponekad možete koristiti kao polje u drugom upitu ili kao kriterijum za polje upita. Na primer, pretpostavimo da želite da vidite interval između porudžbina za svaki od svojih proizvoda. Da biste kreirali upit koji prikazuje ovaj interval, treba da uporedite svaki datum porudžbine sa drugim datumima porudžbine za taj proizvod. Poređenje ovih datuma porudžbine takođe zahteva upit. Ovaj upit možete ugnezditi u glavni upit pomoću podupit.

Podupit možete upisati u izraz ili u Structured Query Language (SQL) izjavu u prikaz „SQL“.

U ovom članku

Korišćenje rezultata upita kao polja u drugom upitu

Korišćenje podupita kao kriterijuma za polje upita

Uobičajene SQL ključne reči koje se mogu koristiti sa podupitom

Korišćenje rezultata upita kao polja u drugom upitu

Podupit možete koristiti kao pseudonim (SQL) polja. Koristite podupit kao pseudonim polja kada želite da koristite rezultate podupita kao polje u glavnom upitu.

Napomena : Podupit koji koristite kao pseudonim polja ne može da vrati više polja.

Pseudonim polja podupita možete koristiti za prikaz vrednosti koje zavise od drugih vrednosti u trenutnom redu, što nije moguće bez korišćenja podupita.

Na primer, vratimo se na primer gde želite da vidite interval između porudžbina za svaki od svojih proizvoda. Da biste odredili ovaj interval, treba da uporedite svaki datum porudžbine sa drugim datumima porudžbine za taj proizvod. Upit koji prikazuje ove informacije možete kreirati pomoću predloška baze podataka Northwind.

Prikaz načina podešavanja baze podataka Northwind

  1. Na kartici Datoteka kliknite na dugme Novo.

  2. U okviru Dostupni predlošci izaberite stavku Uzorci predložaka.

  3. Izaberite stavku Northwind i kliknite na dugme Kreiraj.

  4. Sledite uputstva na stranici Northwind Traders (na kartici objekta Polazni ekran) da biste otvorili bazu podataka, a zatim zatvorite prozor „Dijalog za prijavljivanje“.

  1. Na kartici Kreiranje, u grupi Upiti izaberite stavku Dizajn upita.

  2. U dijalogu Prikazivanje tabele izaberite karticu Upiti, a zatim kliknite dvaput na stavku Porudžbine proizvoda.

  3. Zatvorite dijalog Prikazivanje tabele.

  4. Kliknite dvaput na polja ID proizvoda i Datum porudžbine da biste ih dodali u koordinatnu mrežu dizajna upita.

  5. U redu Sortiranje kolone ID proizvoda koordinatne mreže izaberite stavku Rastući redosled.

  6. U redu Sortiranje kolone Datum porudžbine koordinatne mreže izaberite stavku Opadajući redosled.

  7. U trećoj koloni koordinatne mreže kliknite desnim tasterom miša na red Polje, a zatim u priručnom meniju izaberite stavku Zumiranje.

  8. U dijalogu Zumiranje otkucajte ili nalepite sledeći izraz:

    Prethodni datum: (SELECT MAX([Datum porudžbine]) 
    FROM [Porudžbine proizvoda] AS [Stare porudžbine]
    WHERE [Stare porudžbine].[Datum porudžbine] < [Porudžbine proizvoda].[Datum porudžbine]
    AND [Stare porudžbine].[ID proizvoda] = [Porudžbine proizvoda].[ID proizvoda])

Ova izraz predstavlja podupit. Za svaki red podupit bira najnoviji datum porudžbine koji je noviji od datuma porudžbine koji je već povezan sa redom. Obratite pažnju na to kako ključnu reč AS koristite za kreiranje pseudonima tabele kako biste mogli da uporedite vrednosti u podupitu sa vrednostima u trenutnom redu glavnog upita.

  1. U četvrtoj koloni koordinatne mreže, u redu Polje otkucajte sledeći izraz:

    Interval: [Datum porudžbine]-[Prethodni datum]

Ovaj izraz izračunava interval između svakog datuma porudžbine i prethodnog datuma porudžbine za taj proizvod pomoću vrednosti za prethodni datum koje smo definisali pomoću podupita.

  1. Na kartici Dizajn, u grupi Rezultati izaberite stavku Pokreni.

    1. Upit se pokreće i prikazuje listu imena proizvoda, datuma porudžbine, prethodnih datuma porudžbine i intervala između datuma porudžbine. Rezultati su prvo sortirani po ID-u proizvoda (rastućim redosledom), a zatim po datumu porudžbine (opadajućim redosledom).

    2. Napomena : Pošto je „ID proizvoda“ polje za pronalaženje, Access podrazumevano prikazuje vrednosti za pronalaženje (u ovom slučaju, ime proizvoda), a ne stvarne ID-ove proizvoda. Iako ovo menja vrednosti koje se pojavljuju, redosled sortiranja se ne menja.

  2. Zatvorite bazu podataka Northwind.

Vrh stranice

Korišćenje podupita kao kriterijuma za polje upita

Podupit možete koristiti kao kriterijum polja. Koristite podupit kao kriterijum polja kada želite da koristite rezultate podupita za ograničavanje vrednosti koje polje prikazuje.

Na primer, pretpostavimo da želite da pregledate listu porudžbina koje su obradili zaposleni koji nisu predstavnici prodaje. Da biste generisali ovu listu, treba da uporedite ID zaposlenog za svaku porudžbinu sa listom ID-ova zaposlenih za zaposlene koji nisu predstavnici prodaje. Da biste kreirali ovu listu i koristili je kao kriterijum polja, koristite podupit kao što je prikazano u sledećoj proceduri:

  1. Otvorite bazu podataka Northwind 2007.accdb i omogućite njen sadržaj.

  2. Zatvorite obrazac za prijavljivanje.

  3. Na kartici Kreiranje, u grupi Ostalo izaberite stavku Dizajn upita.

  4. U dijalogu Prikazivanje tabele, na kartici Tabele kliknite dvaput na stavke Porudžbine i Zaposleni.

  5. Zatvorite dijalog Prikazivanje tabele.

  6. U tabeli „Porudžbine“ kliknite dvaput na polja ID zaposlenog, ID porudžbine i Datum porudžbine da biste ih dodali u koordinatnu mrežu dizajna upita. U tabeli „Zaposleni“ kliknite dvaput na polje Radno mesto da biste ga dodali u koordinatnu mrežu dizajna.

  7. Kliknite desnim tasterom miša na red Kriterijum kolone „ID zaposlenog“, a zatim u priručnom meniju izaberite stavku Zumiranje.

  8. U polju Zumiranje otkucajte ili nalepite sledeći izraz:

    IN (SELECT [ID] FROM [Zaposleni]
    WHERE [Radno mesto]<>'Predstavnik prodaje')

    Ovo je podupit. On bira sve ID-ove zaposlenih gde zaposleni nemaju radno mesto predstavnika prodaje i obezbeđuje taj skup rezultata glavnom upitu. Glavni upit zatim proverava da li se ID-ovi zaposlenih iz tabele „Porudžbine“ nalaze u skupu rezultata.

  9. Na kartici Dizajn, u grupi Rezultati izaberite stavku Pokreni.

    Upit se pokreće i rezultati upita prikazuju listu porudžbina koje su obradili zaposleni koji nisu predstavnici prodaje.

Vrh stranice

Uobičajene SQL ključne reči koje se mogu koristiti sa podupitom

Postoji nekoliko SQL ključnih reči koje možete koristiti sa podupitom:

Napomena : Ova lista nije detaljna. U podupitu možete koristiti svaku važeću SQL ključnu reč osim ključnih reči za definisanje podataka.

  • ALL    Koristite ALL u odredbi WHERE da biste preuzeli redove koji zadovoljavaju uslov kada se uporede sa svakim redom kojeg je vratio podupit.

Na primer, pretpostavimo da analizirate podatke o studentima na fakultetu. Studenti moraju da održavaju minimalnu prosečnu ocenu, koja se razlikuje od glavnog predmeta do glavnog predmeta. Glavni predmeti i njihove minimalne ocene uskladišteni su u tabeli pod imenom „Glavni predmeti“, a važne informacije o studentima uskladištene su u tabeli pod imenom „Zapisi_o_studentima“.

Da biste videli listu glavnih predmeta (i njihove minimalne prosečne ocene) za koje svaki student sa tim glavnim predmetom premašuje minimalnu prosečnu ocenu, možete koristiti sledeći upit:

SELECT [Glavni predmet], [Min_prosečna ocena] 
FROM [Glavni predmeti]
WHERE [Min_prosečna ocena] < ALL
(SELECT [prosečna ocena] FROM [Zapisi_o_studentima]
WHERE [Zapisi_o_studentima].[Glavni predmet]=[Glavni predmeti].[Glavni predmet]);
  • ANY    Koristite ANY u odredbi WHERE da biste preuzeli redove koji zadovoljavaju uslov kada se uporede sa makar jednim od redova koje je vratio podupit.

    Na primer, pretpostavimo da analizirate podatke o studentima na fakultetu. Studenti moraju da održavaju minimalnu prosečnu ocenu, koja se razlikuje od glavnog predmeta do glavnog predmeta. Glavni predmeti i njihove minimalne ocene uskladišteni su u tabeli pod imenom „Glavni predmeti“, a važne informacije o studentima uskladištene su u tabeli pod imenom „Zapisi_o_studentima“.

    Da biste videli listu glavnih predmeta (i njihove minimalne prosečne ocene) za koje neki student sa tim glavnim predmetom ne ispunjava minimalnu prosečnu ocenu, možete koristiti sledeći upit:

    SELECT [Glavni predmet], [Min_prosečna ocena] 
    FROM [Glavni predmeti]
    WHERE [Min_prosečna ocena] > ANY
    (SELECT [prosečna ocena] FROM [Zapisi_o_studentima]
    WHERE [Zapisi_o_studentima].[Glavni predmet]=[Glavni predmeti].[Glavni predmet]);

    Napomena : Ključnu reč SOME takođe možete koristiti za istu svrhu; ključna reč SOME je sinonim ključne reči ANY.

  • EXISTS    Koristite EXISTS u odredbi WHERE da biste ukazali na to da podupit treba da vrati makar jedan red. Ispred ključne reči EXISTS možete staviti i ključnu reč NOT da biste ukazali na to da podupit ne treba da vrati nijedan red.

    Na primer, sledeći upit vraća listu proizvoda koji su pronađeni makar u jednoj postojećoj porudžbini:

    SELECT *
    FROM [Proizvodi]
    WHERE EXISTS
    (SELECT * FROM [Detalji porudžbine]
    WHERE [Detalji porudžbine].[ID proizvoda]=[Proizvodi].[ID]);

    Upotrebom ključnih reči NOT EXISTS upit vraća listu proizvoda koji nisu pronađeni ni u jednoj postojećoj porudžbini:

    SELECT *
    FROM [Proizvodi]
    WHERE NOT EXISTS
    (SELECT * FROM [Detalji porudžbine]
    WHERE [Detalji porudžbine].[ID proizvoda]=[Proizvodi].[ID]);
  • IN    Koristite IN u odredbi WHERE da biste potvrdili da je vrednost u trenutnom redu glavnog upita deo skupa koji podupit vraća. Ispred ključne reči IN možete staviti ključnu reč NOT da biste potvrdili da vrednost u trenutnom redu glavnog upita nije deo skupa koji podupit vraća.

    Na primer, sledeći upit vraća listu porudžbina (sa datumima porudžbine) koje su obradili zaposleni koji nisu predstavnici prodaje:

    SELECT [ID porudžbine], [Datum porudžbine]
    FROM [Porudžbine]
    WHERE [ID zaposlenog] IN
    (SELECT [ID] FROM [Zaposleni]
    WHERE [Radno mesto]<>'Predstavnik prodaje')

    Korišćenjem ključnih reči NOT IN isti upit možete napisati na ovaj način:

    SELECT [ID porudžbine], [Datum porudžbine]
    FROM [Porudžbine]
    WHERE [ID zaposlenog] NOT IN
    (SELECT [ID] FROM [Zaposleni]
    WHERE [Radno mesto]='Predstavnik prodaje');

Vrh stranice

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Office Insider korisnicima

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

Hvala za povratne informacije! Zvuči da će biti od pomoći ako vas povežemo sa našim agentima Office podrške.

×