Ugnježđivanje upita u drugom upitu ili izrazu pomoću podupita

Možda ponekad poželite koristiti rezultate upita kao polje u drugom upitu ili kao kriterij za polje upita. Na primjer, pretpostavimo da želite vidjeti interval između narudžbi za svaki proizvod. Da biste stvorili upit koji prikazuje taj interval, morate usporediti datum svake narudžbe s drugim datumima narudžbi za taj proizvod. Za uspoređivanje tih datuma narudžbi potreban je upit. Taj upit možete ugnijezditi unutar glavnog upita pomoću podupit.

Podupit možete napisati u izraz ili u SQL naredbi u SQL prikaz.

Sadržaj članka

Korištenje rezultata upita kao polja u drugom upitu

Korištenje podupita kao kriterija za polje upita

Najčešće SQL ključne riječi koje možete koristiti s podupitom

Korištenje rezultata upita kao polja u drugom upitu

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

Napomena : Podupit koji koristite kao pseudonim polja ne može vratiti više od jednog polja.

Pseudonim polja podupita možete koristiti radi prikaza vrijednosti koje ovise o drugim vrijednostima u trenutnom retku, što nije moguće bez korištenja podupita.

Na primjer, vratimo se na primjer u kojem želite vidjeti interval između narudžbi za svaki proizvod. Da biste odredili interval, morate usporediti datum svake narudžbe s datumima drugih narudžbi za taj proizvod. Upit koji prikazuje te informacije možete stvoriti pomoću predloška baze podataka tvrtke Northwind.

Postavljanje ogledne baze podataka Northwind

  1. Na kartici Datoteka kliknite Novo.

  2. U odjeljku Dostupni predlošci kliknite Ogledni predlošci.

  3. Kliknite Northwind, a zatim Stvori.

  4. Slijedite upute na stranici Northwind Traders (na kartici objekta Početni zaslon) da biste otvorili bazu podataka, a zatim zatvorite prozor dijaloškog okvira za prijavu.

  1. Na kartici Stvaranje u grupi Upiti kliknite Dizajn upita.

  2. U dijaloškom okviru Prikaz tablice kliknite karticu Upiti, a zatim dvokliknite Narudžbe proizvoda.

  3. Zatvorite dijaloški okvir Prikaz tablice.

  4. Dvokliknite polje ID proizvoda i polje Datum narudžbe da biste ih dodali u rešetku dizajna upita.

  5. U retku Sortiranje stupca rešetke ID proizvoda odaberite Uzlazno.

  6. U retku Sortiranje stupca rešetke Datum narudžbe odaberite Silazno.

  7. U trećem stupcu rešetke desnom tipkom miša kliknite redak Polje, a zatim na izborniku prečacu kliknite Zumiraj.

  8. U dijaloški okvir Zumiranje upišite ili zalijepite sljedeći izraz:

    Prethodni datum: (SELECT MAX([Datum narudžbe]) 
    FROM [Narudžbe proizvoda] AS [Stare narudžbe]
    WHERE [Stare narudžbe].[Datum narudžbe] < [Narudžbe proizvoda].[Datum narudžbe]
    AND [Stare narudžbe].[ID narudžbe] = [Narudžbe proizvoda].[ID narudžbe])

Taj izraz je podupit. Za svaki redak upit odabire najnoviji datum narudžbe koji je stariji od datuma narudžbe koji je već povezana s retkom. Obratite pažnju na to kako koristite ključnu riječ AS radi stvaranja pseudonima tablice, tako da možete usporediti vrijednosti u podupitu s vrijednostima u trenutnom retku glavnog upita.

  1. U četvrtom stupcu rešetke u retku Polje upišite sljedeći izraz:

    Interval: [Datum narudžbe]-[Prethodni datum]

Taj izraz izračunava interval između svakog datuma narudžbe i prethodnog datuma narudžbe za taj proizvod pomoću vrijednosti za prethodni datum koji ste definirali pomoću podupita.

  1. Na kartici Dizajn u grupi Rezultati kliknite Izvedi.

    1. Upit se pokreće i prikazuje popis naziva proizvoda, datume narudžbi, prethodne datume narudžbi te interval između datuma narudžbi. Rezultati se sortiraju najprije po ID-u proizvoda (uzlaznim redoslijedom), a zatim po datumu narudžbe (silaznim redoslijedom).

    2. Napomena : Budući da je ID proizvoda polje pretraživanja, Access po zadanom prikazuje vrijednosti pretraživanja (u ovom slučaju, naziv proizvoda) umjesto pravog ID-a proizvoda. Iako to mijenja prikazane vrijednosti, ne mijenja redoslijed sortiranja.

  2. Zatvorite bazu podataka tvrtke Northwind.

Vrh stranice

Korištenje podupita kao kriterija za polje upita

Podupit možete koristiti kao kriteriji polja. Podupit koristite kao kriterij polja kada rezultate podupita želite koristiti radi ograničenja vrijednosti koje polje prikazuje.

Na primjer, pretpostavimo da želite pregledati popis narudžbi koje su obradili zaposlenici koji nisu prodajni predstavnici. Da biste generirali taj popis, morate usporediti ID zaposlenika za svaku narudžbu s popisom ID-ova zaposlenika koji nisu prodajni predstavnici. Da biste stvorili taj popis i koristili ga kao kriterij polja, koristite podupit, kao što je prikazano u sljedećem postupku:

  1. Otvorite datoteku Northwind 2007.accdb i omogućite njezin sadržaj.

  2. Zatvorite obrazac za prijavu.

  3. Na kartici Stvaranje u grupi Ostalo kliknite Dizajn upita.

  4. U dijaloškom okviru Prikaz tablice na kartici Tablice dvokliknite Narudžbe i Zaposlenici.

  5. Zatvorite dijaloški okvir Prikaz tablice.

  6. U tablici Narudžbe dvokliknite polje ID zaposlenika, polje ID narudžbe i polje Datum narudžbe da biste ih dodali u rešetku dizajna upita. U tablici Zaposlenici dvokliknite polje Naziv radnog mjesta.

  7. Desnom tipkom miša kliknite redak Kriteriji u stupcu ID zaposlenika, a zatim na izborničkom prečacu kliknite Zumiraj.

  8. U okvir Zumiranje upišite ili zalijepite sljedeći izraz:

    IN (SELECT [ID] FROM [Zaposlenici] 
    WHERE [Naziv radnog mjesta]<>'Prodajni predstavnik')

    To je podupit. Odabire sve ID-ove zaposlenika čiji naziv radnog mjesta nije Prodajni predstavnik i taj skup rezultata šalje glavnom upitu. Glavni upit zatim provjerava nalaze li se ID-ovi zaposlenika iz tablice Narudžbe u skupu rezultata.

  9. Na kartici Dizajn u grupi Rezultati kliknite Izvedi.

    Upit se pokreće, a rezultati upita prikazuju popis narudžbi koje su obradili zaposlenici koji nisu prodajni predstavnici.

Vrh stranice

Najčešće SQL ključne riječi koje možete koristiti s podupitom

Nekoliko je SQL ključnih riječi koje možete koristiti u podupitu:

Napomena : Ovaj popis nije opsežan. Bilo koju SQL ključnu riječ možete koristiti kao podupit, osim ključnih riječi definicije podataka.

  • ALL    Koristite ALL u uvjetu WHERE radi dohvaćanja redaka koji ispunjavaju uvjet pri usporedbi sa svakim retkom koji je vratio podupit.

Na primjer, pretpostavimo da analizirate podatke o studentima na fakultetu. Studenti moraju održavati minimalni prosjek ocjena, koji se razlikuje od smjera do smjera. Smjerovi i njihov minimalni prosjek ocjena pohranjeni su u tablici Smjerovi, a relevantni podaci o studentima pohranjeni su u tablici Zapisi_o_studentima.

Da biste vidjeli popis smjerova (i njihov minimalni prosjek ocjena) za koje svaki student s tog smjera premašuje minimalni prosjek, koristite sljedeći upit:

SELECT [Smjer], [Min_Prosjek] 
FROM [Smjerovi]
WHERE [Min_Prosjek] < ALL
(SELECT [GPA] FROM [Zapisi_o_studentima]
WHERE [Zapisi_o_studentima].[Smjer]=[Smjerovi].[Smjer]);
  • ANY    ANY u uvjetu WHERE koristite radi dohvaćanja stupaca koji ispunjavaju uvjet pri usporedbi s barem jednim retkom koji je vratio podupit.

    Na primjer, pretpostavimo da analizirate podatke o studentima na fakultetu. Studenti moraju održavati minimalni prosjek ocjena, koji se razlikuje od smjera do smjera. Smjerovi i njihov minimalni prosjek ocjena pohranjeni su u tablici Smjerovi, a relevantni podaci o studentima pohranjeni su u tablici Zapisi_o_studentima.

    Da biste vidjeli popis smjerova (i njihov minimalni prosjek ocjena) za koje barem jedan student s tog smjera nije dostigao minimalni prosjek, koristite sljedeći upit:

    SELECT [Smjer], [Min_Prosjek] 
    FROM [Smjerovi]
    WHERE [Min_Prosjek] < ALL
    (SELECT [GPA] FROM [Zapisi_o_studentima]
    WHERE [Zapisi_o_studentima].[Smjer]=[Smjerovi].[Smjer]);

    Napomena : Ključnu riječ SOME možete koristiti u istu svrhu; ključna riječ SOME sinonim je za ANY.

  • EXISTS    EXISTS u uvjetu WHERE koristite da biste naznačili da podupit mora vratiti barem jedan redak. Ispred EXISTS možete staviti NOT da biste naznačili da podupit ne smije vratiti nijedan redak.

    Na primjer, sljedeći upit vraća popis proizvoda koji su pronađeni u barem jednoj postojećoj narudžbi.

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

    Pomoću ključnih riječi NOT EXISTS upit vraća popis proizvoda koji nisu pronađeni ni u jednoj postojećoj narudžbi:

    SELECT *
    FROM [Proizvodi]
    WHERE NOT EXISTS
    (SELECT * FROM [Detalji narudžbe]
    WHERE [Detalji narudžbe].[ID proizvoda]=[Proizvodi].[ID]);
  • IN    IN koristite u uvjetu WHERE da biste provjerili je li vrijednost u trenutnom retku glavnog upita dio skupa koji je vratio podupit. Ispred NOT možete staviti IN da biste potvrdili da vrijednost trenutnog retka glavnog upita nije dio skupa koji je vratio podupit.

    Na primjer, sljedeći upit vraća popis narudžbi (s datumima narudžbi) koje su obradili zaposlenici koji nisu prodajni predstavnici.

    SELECT [ID narudžbe], [Datum narudžbe]
    FROM [Narudžbe]
    WHERE [ID zaposlenika] IN
    (SELECT [ID] FROM [Zaposlenici]
    WHERE [Naziv radnog mjesta]<>'Prodajni predstavnik')

    Pomoću ključnih riječi NOT IN možete isti upit napisati na ovaj način:

    SELECT [ID narudžbe], [Datum narudžbe]
    FROM [Narudžbe]
    WHERE [ID zaposlenika] NOT IN
    (SELECT [ID] FROM [Zaposlenici]
    WHERE [Naziv radnog mjesta]='Prodajni predstavnici');

Vrh stranice

Proširite svoje vještine
Istražite osposobljavanje

Jesu li vam ove informacije bile korisne?

Hvala vam na povratnim informacijama!

Hvala vam na povratnim informacijama! Čini se da bi vam pomoglo kad bismo vas povezali s nekim od naših agenata podrške za Office.

×