Ugnježđivanje upita u drugom upitu ili izrazu koristeći se podupitom

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 <token>TE000126768</token>.

Podupit možete napisati u <token>TE000127167</token> ili u SQL naredbi u <token>TE000126761</token>.

U ovom članku

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Koristite rezultate upita kao polje u drugom upitu</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Koristite podupit kao kriterij za polje upita</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Učestale SQL ključne riječi koje možete koristiti s podupitom</link>

Koristite rezultate upita kao polje u drugom upitu

Podupit možete koristiti kao pseudonim 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.

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

  2. U odjeljku <ui>Dostupni predlošci</ui> kliknite <ui>Ogledni predlošci</ui>.

  3. Kliknite <ui>Northwind</ui>, a zatim <ui>Stvori</ui>.

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

  5. Na kartici <ui>Stvaranje</ui> u grupi <ui>Upiti</ui> kliknite <ui>Dizajn upita</ui>.

  6. U dijaloškom okviru <ui>Prikaz tablice</ui> kliknite karticu <ui>Upiti</ui>, a zatim dvokliknite <ui>Narudžbe proizvoda</ui>.

  7. Zatvorite dijaloški okvir <ui>Prikaz tablice</ui>.

  8. Dvokliknite polje <ui>ID proizvoda</ui> i polje <ui>Datum narudžbe</ui> da biste ih dodali u rešetku dizajna upita.

  9. U retku <ui>Sortiranje</ui> stupca rešetke <ui>ID proizvoda</ui> odaberite <ui>Uzlazno</ui>.

  10. U retku <ui>Sortiranje</ui> stupca rešetke <ui>Datum narudžbe</ui> odaberite <ui>Silazno</ui>.

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

  12. U dijaloški okvir <ui>Zumiranje</ui> upišite ili zalijepite sljedeći 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])

    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.

  13. U četvrtom stupcu rešetke u retku <ui>Polje</ui> upišite sljedeći izraz:

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

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

  14. Na kartici <ui>Dizajn</ui> u grupi <ui>Rezultati</ui> kliknite <ui>Pokreni</ui>.

    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 s vrijednostima, Access po zadanom prikazuje dohvaćene vrijednosti (u ovom slučaju, naziv proizvoda) umjesto pravog ID-a proizvoda. Iako to mijenja prikazane vrijednosti, ne mijenja redoslijed sortiranja.

  15. Zatvorite bazu podataka tvrtke Northwind.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Vrh stranice</link>

Korištenje podupita kao kriterija za polje upita

Podupit možete koristiti kao kriterij polja. Podupit koristite kao kriterij polja kada rezultatima podupita želite ograničiti vrijednosti koje polje prikazuje.

Na primjer, pretpostavimo da želite pregledati popis narudžbi koje su obradili zaposlenici koji <legacyItalic>nisu</legacyItalic> 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 bazu podataka Northwind 2007 i omogućite njezin sadržaj.

  2. Zatvorite obrazac za prijavu.

  3. Na kartici <ui>Stvaranje</ui> u grupi <ui>Ostalo</ui> pritisnite <ui>Dizajn upita</ui>.

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

  5. Zatvorite dijaloški okvir <ui>Prikaz tablice</ui>.

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

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

  8. U okvir <ui>Zumiranje</ui> upišite ili zalijepite sljedeći izraz:

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

    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 <ui>Dizajn</ui> u grupi <ui>Rezultati</ui> kliknite <ui>Pokreni</ui>.

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

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Vrh stranice</link>

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.

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

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

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

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

    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">Vrh stranice</link>

Proširite svoje vještine korištenja sustava Office
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.

×