SQL upitni jezik. Upoznavanje sa SQL uputama; stvaranje jednostavnih SQL upita u Accessu korištenjem naredbe SELECT korištenjem operatora IN, BETWEEN, LIKE Primjeri access i sql baza podataka


Microsoftova usporedba Pristup SQL-u i ANSI SQL Microsoft Access SQL je prvenstveno ANSI-89 (Razina 1) neke značajke ANSI SQL ne koriste se u Microsoft Access SQL Microsoft Access SQL koristi rezervirane riječi i značajke koje ANSI SQL ne podržava Access 2000 (MS Jet 4.0) uključuje proširenja koja približavaju jezik ANSI SQL-92 standard - način rada dostupan samo kada se koristi MS OLE DB Provider za Jet


SELECT Sintaksa naredbe (Microsoft Access) SELECT [ predikat ] ( * | tablica.* | [ tablica.] polje_1 [, [ tablica.] polje_2 [,...]]) FROM izraz [,...] klauzula FROM SELECT popis Polja FROM izraz Izraz je izraz koji definira jednu ili više tablica iz kojih se podaci dohvaćaju. Ovaj izraz može biti naziv jedne tablice, naziv spremljenog upita ili rezultat operacije INNER JOIN, LEFT JOIN ili RIGHT JOIN. UNUTARNJI SPOJ, LIJEVI SPOJ DESNI SPOJ.


Argumenti naredbe SELECT Predikat (ALL, DISTINCT, DISTINCTROW ili TOP) jedan je od uvjeta odabira. Predikati se koriste za ograničavanje broja vraćenih zapisa. Ako nedostaju, zadani predikat je ALL (odabire sve zapise koji odgovaraju uvjetima navedenim u SQL naredbi) SQL DISTINCT naredbe - isključuje zapise koji sadrže duplicirane vrijednosti u odabranim poljima. DISTINCTROW - Izostavlja podatke temeljene na cijelim dvostrukim zapisima, a ne na pojedinačnim dupliciranim poljima. Predikat DISTINCTROW se zanemaruje ako upit sadrži samo jednu tablicu ili sva polja svih tablica. TOP n - Vraća navedeni broj zapisa koji su na početku ili kraju raspona opisanog pomoću klauzule ORDER BY. SELECT ]] FROM tablica 5 najbrojnijih odjela: SELECT TOP 5 zaposlenika.[šifra odjela], Count(zaposlenik.puno ime) AS broj_zaposlenika FROM zaposlenik GROUP BY zaposlenik.[šifra odjela] ORDER BY Count(zaposlenik.puno ime) DESC;


Argumenti naredbe SELECT Table - naziv tablice iz koje treba birati zapise. S OPCIJAMA VLASNIŠTVA - koristi se u višekorisničkom okruženju sa sigurnim radna skupina, da korisniku koji radi sa zahtjevom dodijeli dopuštenja koja odgovaraju onima vlasnika zahtjeva. polje_1, polje_2 - nazivi polja iz kojih se biraju podaci. Ako uključite više polja, ona će biti dohvaćena navedenim redoslijedom. Alias_1, Alias_2 - imena koja će postati zaglavlja stupaca umjesto izvornih naziva stupaca u tablici. Izraz - nazivi jedne ili više tablica koje sadrže podatke koji se biraju Vanjska baza podataka - naziv baze podataka koja sadrži tablice navedene argumentom izraza, ako nisu u trenutnoj bazi podataka. SELECT zaposlenik.puno ime, [plaća]*0,5 AS Bonus OD zaposlenika; SELECT Prosj.(zaposlenik.plaća) AS Prosječna_plaća FROM zaposlenika;


Zajednička obrada više tablica SELECT zaposlenik.Ime, subjekt.[kratki naziv subjekta] FROM zaposlenika INNER JOIN (subjekt INNER JOIN [vlasništvo nad objektima] ON subjekt.[šifra subjekta] = [vlasništvo nad objektima].[šifra discipline] ) ON zaposlenik.Kod = [vlasništvo artikla].[šifra zaposlenika];




Između...I izraza 1 IZMEĐU izraza 2 I izraza 3 (u Microsoft Access SQL izraz 2 može biti veći od izraza 3, ali ne i u ANSI SQL). SELECT zaposlenik.puno ime, zaposlenik.plaća FROM zaposlenik WHERE (((zaposlenik.plaća) Između 1000 i 2000)); Upit: SELECT zaposlenik.puno ime, zaposlenik.plaća FROM zaposlenik WHERE (((zaposlenik.plaća) Između 2000 i 1000)); ne generira grešku i daje isti odgovor SELECT zaposlenik.puno ime, zaposlenik.plaća FROM zaposlenik WHERE (((zaposlenik.plaća) 15000)); SELECT zaposlenik.puno ime, zaposlenik.plaća FROM zaposlenik WHERE (((zaposlenik.plaća) Not Between 1000 And 2000));


Znakovi uzorka Različiti znakovi uzorka koriste se s predikatom Like. MS Access SQL ANSI SQL uzorak znak jedan znak? _ (podvlaka) grupa znakova * % jedan znak, uključen u character_list [character_list] nedostaje jedan znak nije uključen u character_list [! character_list] nedostaje Posljednje dvije opcije su samo za Access Access 2000 u ANSI SQL-92 načinu rada dopušta korištenje ANSI zamjenskih znakova. Ne možete miješati znakove u jednom zahtjevu SELECT zaposlenik.puno ime FROM zaposlenik WHERE (((zaposlenik.puno ime) Kao "D*"));


Klauzula GROUP BY SELECT popis polja FROM tablice WHERE Uvjet odabira gdje su grupirana Polja su nazivi polja (do 10) koja se koriste za grupiranje zapisa. Redoslijed naziva polja u argumentu Grupirana polja određuje razinu grupiranja za svako od tih polja. Upotrijebite klauzulu WHERE za izuzimanje zapisa iz grupiranja, a klauzulu HAVING za primjenu filtra na zapise nakon grupiranja. HAVING Kada koristite klauzulu GROUP BY, sva polja u popisu polja naredbe SELECT moraju biti uključena u klauzulu GROUP BY ili se moraju koristiti kao argumenti agregata SQL funkcije. Odjeli s više od 5 zaposlenika: SELECT co-workers[šifra odjela], Count(puno ime suradnika) AS [Broj zaposlenika] FROM co-workers GROUP BY co-workers[šifra odjela] HAVING (((Count( puno ime suradnika))>5 )); 5));">




Ugniježđeni upit. Predikat postoji. SELECT tvrtka zaposlenika, Count(zaposlenik zaposlenik) AS broj_certifikata_zaposlenik FROM zaposlenik WHERE (((Postoji (SELECT DISTINCT tvrtka zaposlenik, zaposlenik zaposlenik FROM zaposlenik INNER JOIN instanca ON zaposlenik zaposlenik = zaposlenik zaposlenik))False)) GROUP BY co-working tvrtka; False)) GROUP BY tvrtka u suvlasništvu;"> False)) GROUP BY tvrtka u suvlasništvu;"> False)) GROUP BY tvrtka u suvlasništvu;" title="Ugniježđeni upit. Predikat postoji. SELECT co tvrtka u vlasništvu, Count(collaborator) AS broj_certifikata_suradnika FROM suradnika WHERE (((Postoji (SELECT DISTINCT suradnik, suradnik FROM suradnik INNER JOIN instanca ON suradnik = instanca suradnik))False)) GROUP BY suradnik tvrtka;"> title="Ugniježđeni upit. Predikat postoji. SELECT tvrtka zaposlenika, Count(zaposlenik zaposlenik) AS broj_certifikata_zaposlenik FROM zaposlenik WHERE (((Postoji (SELECT DISTINCT tvrtka zaposlenik, zaposlenik zaposlenik FROM zaposlenik INNER JOIN instanca ON zaposlenik zaposlenik = zaposlenik zaposlenik))False)) GROUP BY co-working tvrtka;"> !}








Stvaranje podupita pomoću QBE Query Buildera Ako koristite podupit za definiranje uvjeta za polje, unesite naredbu SELECT u ćeliju retka Uvjet odabira u stupcu tog polja. Naredba SELECT mora biti u zagradama.








Brisanje unosa. SQL upit (generiran) DELETE DISTINCTROW student.puno ime FROM student WHERE (((student.puno ime)="Burlak G. N."));


Naredba DELETE Zahtjev za brisanje briše cijele zapise, a ne samo sadržaj navedenih polja. Da biste izbrisali podatke za određeno polje, izradite upit za ažuriranje zapisa koji zamjenjuje postojeće vrijednosti Null vrijednostima. Zahtjev za brisanje bez navedenih uvjeta pretraživanja izbrisat će sve zapise iz tablice. Za razliku od naredbe DROP, struktura tablice i sva svojstva su sačuvani


Brisanje unosa. SQL upit Upit: DELETE * FROM student WHERE student.Puno ime="Burlak G. N."; daje sličan rezultat.



















35





41



Aplikacija MS Access DBMS je punopravni pomoćnik za stvaranje i održavanje baza podataka zatvorenih u tablicama i nizovima. Ako je baza podataka prevelika, vrlo je teško brzo pronaći potrebne vrijednosti.

Zbog toga Access ima značajku koja se zove upiti. Pogledajmo što je to, kako radi i koje značajke ima.

Stvaranje upita u Microsoft Accessu

Da biste shvatili kako stvoriti upite u Accessu, morate znati osnove rada sa DBMS-om.

Postoje dva načina za izvođenje ovog postupka:

  • Graditelj upita.
  • Čarobnjak za upite.

Prva metoda omogućuje stvaranje bilo kojeg od svih dostupnih upita ručni mod, ali uz malu napomenu da korisnik ima iskustva s Access aplikacijom. Također mora razumjeti barem njegove osnovne zadaće. Što se tiče druge metode, treba je detaljnije razmotriti.

Jednostavan način za početnike

Upućena osoba s nekoliko klikova mišem odabire one komponente koje će korisniku trebati za ispunjenje zahtjeva, a potom brzo kreira registar sukladno prikupljenim vrijednostima ključeva. Ako je ovo prvo upoznavanje s DBMS-om, a korisnik nema pojma kako stvoriti upite u Accessu, tada je odabran program Wizard.

U ovom načinu rada možete se upoznati i razumjeti sljedeće vrste zahtjevi:

  • Jednostavan.
  • Križ.
  • Evidencija bez podređenih.
  • Dvostruki unosi.

Ovaj izbor je napravljen već u prvoj fazi rada s Učiteljem. A u budućnosti, slijedeći jasne upute, čak i korisnik početnik može lako stvoriti zahtjev. Upoznajmo se s njegovim sortama.

Jednostavan zahtjev

Ovaj alat za proračunske tablice prikuplja potrebne podatke iz korisnički navedenih polja. Samo ime govori da je ovo najpopularnija vrsta zahtjeva za početnike. Njegova pogodnost leži u činjenici da se ovaj postupak otvara u novoj kartici. Stoga odgovor na pitanje kako stvoriti upit u programu Access 2010 postaje očit nakon otvaranja prvog izbornika čarobnjaka.

Križni zahtjev

Ova vrsta uzorkovanja je složenija. Da biste shvatili kako stvoriti unakrsni upit u Accessu pomoću "Čarobnjaka" u ovom načinu rada, morate kliknuti ovu funkciju u prvom prozoru.

Na ekranu će se pojaviti tablica u kojoj možete odabrati do tri stupca koji se nalaze u originalu.

Jedno od preostalih neodabranih polja može se koristiti kao zaglavlja tablice upita. U trećoj fazi postupka (presjecište) odabire se druga vrijednost s funkcijom varijabilnosti (prosječna vrijednost, zbroj, prva, zadnja).

Fotografija pokazuje da je unakrsni zahtjev kreiran i da su poduzete potrebne radnje prema navedenim parametrima.

Dvostruki unosi

Kao što naziv govori, glavna svrha ovog zahtjeva– izbor svih identičnih redaka u tablici prema navedenim parametrima. Ovako izgleda:

Osim toga, možete odabrati dodatna polja za podudaranje nekoliko redaka odjednom.

Da biste odabrali duplicirane zapise, morate proširiti popis upita i stvoriti tamo nova mapa. Zatim u prozoru "Novi upit" odaberite redak "Traži duplicirane zapise". Zatim morate slijediti upute Učitelja.

Evidencija bez podređenih

Ovo je posljednja vrsta upita dostupna u načinu Master - Zapisi bez podređenih.

U ovom slučaju odabrane su samo one vrijednosti koje nisu uključene u bilo koje polje tablica i upita, ali koje su već stvorene.

Ova vrsta je relevantna samo u slučajevima kada postoji nekoliko baza podataka.

Sve četiri ove vrste upita pružaju osnovnu početnu točku za rad sa složenim elementima, ali olakšavaju razumijevanje kako stvoriti upit u bazi podataka programa Access.

Funkcije upita u MS Accessu

Razmotrimo zašto morate izvršiti gore opisane korake. Svrha svih jednostavnih i složenih upita u Access DBMS-u je sljedeća:

  • Prikupljanje potrebnih podataka u tablice, zatim pregled, uređivanje, dodavanje novih vrijednosti.
  • Izvrstan izvorni materijal za pripremu svih vrsta obrazaca za izvješćivanje.
  • Provođenje matematičkih i statističkih postupaka brojanja na cijelim nizovima podataka s prikazom rezultata na ekranu (prosječna vrijednost, zbroj, odstupanje, zbrojevi).

Uzorak zahtjeva

Ova vrsta rada baze podataka je složena jer zahtijeva sudjelovanje više tablica.

Potrebno je da sve tablice imaju zajednička ključna polja. U suprotnom, operacija neće biti moguća.

Pogledajmo kako stvoriti upit za odabir u Accessu. Najprije morate izraditi jednostavan upit s odabirom potrebnih polja. Ovdje možete urediti podatke kako biste ih doveli u željeni oblik. Usput, napravljene promjeneće se prenijeti u izvorne tablice, pa se ova točka mora uzeti u obzir.

U prozoru dizajnera koji se otvori popunjava se prozor “Dodaj tablice”. Ovdje trebate dodati one tablice ili upite iz kojih trebate izdvojiti izvorne vrijednosti.

Nakon dodavanja, možete početi ispunjavati uvjete zahtjeva. Za ovo nam je potreban niz "Field". U njemu morate odabrati one vrijednosti iz tablica koje će biti prikazane tijekom zahtjeva.

Da biste dovršili operaciju, morate kliknuti gumb "Pokreni".

Zahtjev s parametrima

Ovo je još jedna vrsta složenog postupka koji od korisnika zahtijeva određene vještine rada s bazom podataka. Jedno od glavnih područja ove akcije je priprema za izradu izvješća s velikim podacima, kao i dobivanje sažetih rezultata. Kako stvoriti upite u programu Access 2007 pomoću dizajnera bit će objašnjeno u nastavku.

Ovaj postupak uzorkovanja podataka morate započeti stvaranjem jednostavnog upita za odabir potrebnih polja. Zatim, kroz mod Dizajner, morate ispuniti polje “Uvjet odabira” i na temelju unesene vrijednosti izvršit će se odabir.

Dakle, na pitanje kako kreirati upit s parametrom u Accessu, odgovor je jednostavan - unesite početne parametre za odabir. Za rad s dizajnerom morate koristiti čarobnjak za upite. Tu se stvaraju primarni podaci za filtriranje koji služe kao osnova za daljnji rad.

Napredni unakrsni upit

Nastavljamo komplicirati situaciju. Još je teže razumjeti informacije o tome kako stvoriti upite u Accessu ako postoji više tablica s podacima. Unakrsni zahtjev već je razmatran gore kao jedna od opcija za rad s Masterom. Međutim, možete izraditi sličan zahtjev u načinu rada Dizajn.

Da biste to učinili, kliknite "Query Builder" - "Cross".

Otvara se izbornik za dodavanje izvornih tablica, kao i mogućnost popunjavanja odabranih polja. Jedine stvari na koje biste trebali obratiti pozornost su stavke "grupna operacija" i "unakrsna tablica". Moraju biti ispravno ispunjeni, inače postupak neće biti ispravno dovršen.

Unakrsni upiti najlakši su način pretraživanja i dohvaćanja informacija iz višestrukih izvora podataka, uz mogućnost generiranja dijagrama i grafikona.

Štoviše, pri korištenju ove procedure pretraživanje se brže završava, čak i uz nekoliko razvojnih opcija.

Naravno, postoje i zamke koje vas mogu ometati u radu. Na primjer, prilikom kreiranja upita za sortiranje baze podataka prema vrijednostima stupca, sustav generira pogrešku. Odnosno, dostupno je samo sortiranje po standardnim stavkama - "uzlazno i ​​silazno".

Ukratko, mora se reći da korisnik mora odlučiti kako će kreirati upite u Accessu - pomoću čarobnjaka ili dizajnera. Iako je za većinu ljudi koji koriste MS Access DBMS prva opcija prikladnija. Uostalom, čarobnjak će sam obaviti sav posao, ostavljajući korisniku samo nekoliko klikova mišem za odabir uvjeta zahtjeva.

Za korištenje naprednih postavki očito je potrebno iskustvo u bazi podataka na profesionalnoj razini. Ako su u rad uključene velike baze podataka, najbolje je kontaktirati stručnjake kako bi se izbjegao poremećaj DBMS-a i mogući gubitak podataka.

Postoji jedna točka koja je dostupna samo programerima. Budući da je glavni jezik DBMS-a SQL, traženi upit se može napisati u obrascu programski kod. Da biste radili u ovom načinu rada, samo kliknite na liniju već stvorenog zahtjeva iu otvorenom kontekstni izbornik odaberite "SQL način".

U najjednostavnijem slučaju, upit implementira izbor iz jedne tablice potrebnih polja, zapisa koji zadovoljavaju zadane uvjete odabira i pregled rezultata upita.

Konstruiranje selekcijskih upita s uvjetima selekcije

Pogledajmo upite za odabir u Accessu na primjeru dohvaćanja informacija iz tablice PRODUCT baze podataka Opskrba robom.

Problem 1. Pretpostavimo da trebate odabrati nekoliko karakteristika proizvoda prema njegovom nazivu.

  1. Za izradu upita u prozoru baze podataka odaberite karticu vrpce - Stvaranje(Stvori) i u grupi Zahtjevi(Upiti) kliknite gumb Query Builder(Dizajn upita). Otvorit će se prazan prozor zahtjeva za odabir u modu dizajna - ZahtjevN(QueryN) i dijaloški okvir Dodavanje tablice(Prikaži tablicu) (Sl. 4.2).
  2. U prozoru Dodavanje tablice(Prikaži tablicu) odaberite tablicu PROIZVOD i kliknite gumb Dodati(Dodati). Odabrana tablica bit će prikazana u području sheme podataka upita. Zatvori prozor Dodavanje tablice(Prikaži tablicu) pritiskom na tipku Zatvoriti(Zatvoriti).

Kao rezultat radnji izvedenih u prozoru dizajnera upita (Slika 4.1), shema podataka upita pojavit će se na gornjoj ploči, koja uključuje tablice odabrane za ovaj upit. U u ovom slučaju jedan stol PROIZVOD. Tablica je predstavljena popisom polja. Prvi red u popisu polja tablice, označen zvjezdicom (*), označava cijeli skup polja tablice. Donja ploča je obrazac zahtjeva koji se mora ispuniti.

Osim toga, pojavljuje se na vrpci i automatski se aktivira novi umetak(Alati za upite | Dizajn) (Slika 4.3 prikazuje dio ove kartice), na kojem je bojom istaknut tip kreiranog upita - Uzorak(Izaberi). Stoga se prema zadanim postavkama uvijek stvara upit za odabir. Naredbe na ovoj kartici pružaju alate za izvođenje potrebnih radnji prilikom kreiranja zahtjeva. Ova se kartica otvara kada stvorite novi upit ili uredite postojeći u prikazu dizajna.

  1. Za uklanjanje bilo koje tablice iz sheme podataka upita, postavite kursor miša na nju i pritisnite tipku. Za dodavanje - kliknite na gumb Prikaži tablicu(Pokaži tablicu) u grupi Postavljanje upita(Postavljanje upita). Rad sa zahtjevima | Konstruktor(Alati za upite | Dizajn) ili pokrenite naredbu Dodaj tablicu(Prikaži tablicu) u kontekstnom izborniku koji se poziva na dijagram podataka zahtjeva.
  2. U prozoru dizajnera (Sl. 4.4), uzastopno povucite polja NAME_IT, PRICE, AVAILABILITY_IT s popisa polja tablice PRODUCT u stupce obrasca zahtjeva u redak Polje(Polje).
  3. Za uključivanje željenih polja iz tablice u odgovarajuće stupce upita, možete koristiti sljedeće tehnike:
    • u prvom redu obrasca zahtjeva Polje(Polje) kliknite mišem da se pojavi gumb s popisom i odaberite željeno polje s popisa. Popis sadrži polja tablica predstavljenih u shemi podataka upita;
    • dvokliknite naziv polja tablice u shemi podataka upita;
    • Da biste uključili sva polja tablice, možete povući ili dvaput kliknuti simbol * (zvjezdica) na popisu polja tablice u shemi podataka upita.
  4. Ako ste slučajno povukli nepotrebno polje na obrazac zahtjeva, izbrišite ga. Da biste to učinili, pomaknite kursor na područje oznake stupca na vrhu, gdje će se pojaviti kao crna strelica usmjerena prema dolje, i kliknite tipku miša. Stupac će biti označen. Pritisnite tipku ili pokrenite naredbu Ukloni stupce(Brisanje stupaca) u grupi Postavljanje upita(Postavljanje upita).
  5. U redu Izlaz na zaslonu(Prikaži) provjerite polja, inače neće biti uključena u tablicu upita.
  6. Napiši na crtu Uvjeti odabira(Kriterij) naziv proizvoda, kao što je prikazano u obrascu zahtjeva na sl. 4.4. Budući da izraz u uvjetu odabira ne sadrži operator, prema zadanim postavkama koristi se operator =. Tekstualna vrijednost koja se koristi u izrazu unosi se u dvostruke navodnike koji se dodaju automatski.
  7. Pokrenite upit klikom na gumb Pokreni ili gumb Pogled u grupi Rezultati. Na ekranu će se pojaviti prozor upita u tabličnom načinu rada s unosom iz tablice PROIZVOD koji zadovoljava navedene uvjete odabira.

KOMENTAR
Prozor upita u prikazu tablice sličan je prozoru prikaza tablice baze podataka. Preko nekih tablica upita mogu se izvršiti promjene u podacima u osnovnoj tablici koja je podloga upitu. Upit koji se gleda u prikazu podatkovne tablice, za razliku od tablice baze podataka programa Access 2010, nema stupac Kliknite za dodavanje(Kliknite za dodavanje), dizajniran za promjenu strukture tablice. U ovom načinu rada na kartici vrpce Dom(Početna) dostupni su isti gumbi kao kod otvaranja tablice baze podataka.

  1. Ako ste pogriješili prilikom unosa složenog naziva proizvoda, proizvod se neće naći u tablici. Upotreba zamjenskih operatora - zvjezdica (*) i upitnik (?) (ANSI-89 standard, koristi se za zadane upite) ili znak postotka (%) i podvlaka (_) (ANSI-92, preporučeno kao standard za SQL Server) , pojednostavljuje traženje potrebnih nizova i izbjegava mnoge pogreške. Unesite Corpus* ili Corpus% umjesto punog naziva proizvoda. Ispunite zahtjev. Ako u polju za naziv proizvoda jedna vrijednost počinje riječju "Slučaj", rezultat zahtjeva bit će isti kao u prethodnom slučaju. Nakon izvršenja zahtjeva, uneseni izraz će biti dovršen operator Like"Okvir*". Ovaj operator omogućuje korištenje zamjenskih znakova prilikom pretraživanja u tekstualnim poljima.
  2. Ako trebate pronaći više proizvoda, koristite operator In. Omogućuje vam provjeru jednakosti s bilo kojom vrijednošću s popisa, koja je navedena u zagradama. Upišite u redak uvjeta odabira (“MiniTower case”; “HDD Maxtor 20GB”; “FDD 3.5″). Tablica upita prikazat će tri retka. Naredba In ne dopušta zamjenske znakove.
  3. Spremite svoj zahtjev klikom na karticu Datoteka(Datoteka) i pokretanje naredbe Uštedjeti(Uštedjeti). U prozoru Očuvanje(Spremi kao) unesite naziv zahtjeva Primjer1. Imajte na umu da se naziv upita ne smije podudarati ne samo s nazivima postojećih upita, već ni s nazivima tablica u bazi podataka.
  4. Zatvorite trenutni zahtjev pomoću naredbe kontekstnog izbornika Zatvoriti(Zatvori) ili klikom na gumb prozora upita Zatvoriti(Zatvoriti).
  5. Izvršite spremljeni upit označavanjem upita u navigacijskom oknu i odabirom naredbe iz kontekstnog izbornika Otvoren(Otvoren).
  6. Za uređivanje zahtjeva odaberite ga u navigacijskom području i izvršite naredbu u kontekstnom izborniku Konstruktor(Pogled dizajna).

Zadatak 2. Pretpostavimo da trebate odabrati robu čija cijena nije veća od 1000 rubalja, a PDV nije veći od 10%, a također odaberite robu čija je cijena veća od 2500 rubalja. Rezultat mora sadržavati naziv proizvoda (NAIM_TOV), njegovu cijenu (PRICE) i PDV (RATE_VAT).

  1. Napravite novi upit u modu dizajna, dodajte tablicu PROIZVOD. U prozoru dizajnera (Sl. 4.5) uzastopno povucite polja NAME_IT, PRICE, RATE_VAT s popisa polja tablice PROIZVOD u obrazac zahtjeva.
  2. Zapisati Uvjeti odabira(Kriterij), kao što je prikazano u obrascu zahtjeva na sl. 4.5. Između uvjeta napisanih u istom retku izvodi se logička operacija I. Između uvjeta napisanih u različitim redovima izvodi se logička operacija ILI.
  3. Ispunite zahtjev, kliknite gumb Izvršiti(Trči) u grupi rezultate(Rezultati). Na ekranu će se pojaviti prozor upita u tabličnom načinu sa zapisima iz tablice PROIZVOD koji zadovoljavaju navedene uvjete odabira.
  4. Spremite zahtjev izvršavanjem odgovarajuće naredbe u kontekstualnom izborniku zahtjeva, koji se poziva kada postavite pokazivač na zaglavlje zahtjeva. Daj mu ime Primjer2.

Problem 3. Pretpostavimo da trebamo odabrati sve fakture za određeno razdoblje. Rezultat mora sadržavati broj fakture (NOM_NAK), šifru skladišta (CODE_SC), datum otpreme (DATE_SHIP) i ukupnu cijenu otpremljene robe (SUMMA_INKL).

  1. Napravite novi upit u prikazu dizajna, dodajte tablicu RAČUN. U prozoru dizajnera redom povucite sva potrebna polja s popisa polja tablice RAČUN u obrazac zahtjeva.
  2. Za polje DATE_OTGR u retku Uvjeti odabira(Kriterij) pišite između #01/11/2008# i #03/31/2008#. Operator Between određuje datumski interval (ANSI-92 koristi jednostruke navodnike ' umjesto znaka #). Osim toga, ovaj vam operator omogućuje određivanje intervala za numeričku vrijednost.

Da biste to potvrdili, pogledajte video vodič:

U MS Accessu možete kreirati baze podataka, tablice, obrasce i druga izvješća. Ovaj će članak pomoći korisniku da pokrene SQL upite u MS Accessu. Možete pokrenuti iste upite koji se koriste u SQL-u za dohvaćanje podataka iz baze podataka. Ovaj je članak namijenjen korisnicima koji su tek počeli učiti MS Access i žele pokretati SQL upite u MS Accessu. Jedini uvjet koji je neophodan prije nego što počnete je da imate pristup bazi podataka koja se koristi u organizaciji.

Koraci


Ono što će vam trebati

  • Korisnik mora imati pristup bazi podataka organizacije
  • Korisnik može kontaktirati tehnološku podršku prije pokretanja upita putem MS Accessa

Informacije o članku

Ova je stranica pogledana 4443 puta.

Je li ovaj članak bio koristan?

Pristup DBMS-u

Microsoft Access je DBMS relacijskog tipa, u kojem su svi alati i mogućnosti tipični za moderni sustavi upravljanje bazom podataka. Relacijska baza podataka olakšava pronalaženje, analizu, održavanje i zaštitu podataka jer su pohranjeni na jednom mjestu. Access preveden s engleskog znači "pristup". MS Access je jedan od najmoćnijih, najfleksibilnijih i najjednostavnijih DBMS-ova. U njemu možete izraditi većinu aplikacija bez da napišete ijednu liniju programa, ali ako trebate stvoriti nešto vrlo složeno, MS Access nudi moćan programski jezik - Visual Basic Primjena.

Popularnost Microsoft Access DBMS-a je posljedica sljedećih razloga:

Pristupačnost i jasnoća omogućuju Accessu da bude jedan od najbolji sustavi brzo kreirati aplikacije za upravljanje bazom podataka;

Mogućnost korištenja OLE tehnologije;

Integracija sa Microsoft paket Ured;

Puna podrška za web tehnologije;

Vizualna tehnologija omogućuje vam da stalno vidite rezultate svojih radnji i ispravljate ih;

Dostupnost velikog skupa "majstora" za razvijanje objekata.

Glavne vrste objekata s kojima program radi su: tablica, upit, obrazac, izvješće, stranica, makro, modul.

Tablica je objekt koji se koristi za pohranu podataka. Svaka tablica sadrži podatke o objektu određene vrste. Tablica sadrži polja (stupce) koja pohranjuju različite vrste podataka, te zapise (redove). Svaka tablica mora imati definiran primarni ključ (jedno polje koje ima jedinstvenu vrijednost za svaki zapis ili više polja čija je kombinirana vrijednost jedinstvena za svaki zapis), koji je jedinstveni identifikator za svaki zapis u tablici.

Za povećanje brzine pristupa podacima, pojedinačna polja tablice (ili skup njih) mogu se proglasiti indeksima. Indeks je alat koji ubrzava pretraživanje i sortiranje u tablici korištenjem ključnih vrijednosti kako bi se osigurala jedinstvenost redaka tablice. Primarni ključ tablice automatski se indeksira. Nije dopušteno kreirati indekse na poljima s nekim tipovima podataka.

Upit je objekt koji korisniku omogućuje dohvaćanje željenih podataka iz jedne ili više tablica. Upiti također mogu stvoriti nove tablice koristeći podatke iz jedne ili više tablica koje već postoje. Najčešća vrsta upita je upit za dohvaćanje. Upit odabira odabire podatke iz jedne ili više tablica na temelju navedenih uvjeta, a zatim ih prikazuje željenim redoslijedom.

Obrazac je objekt dizajniran prvenstveno za unos podataka, njihov prikaz na ekranu ili kontrolu rada aplikacije.

Izvješće je objekt dizajniran za stvaranje dokumenta koji se naknadno može ispisati ili uključiti u dokument u drugoj aplikaciji.

baza za programiranje vizualnog razvoja

Stranica - Koristi se za pristup podacima u trenutnoj Access bazi podataka.

Makro je objekt koji je strukturirani opis jedne ili više radnji koje bi Access trebao izvesti kao odgovor na određeni događaj.

Modul je objekt koji sadrži Microsoft Visual Basic programe koji vam omogućuju rastavljanje procesa na manje akcije i otkrivanje pogrešaka koje se ne mogu pronaći pomoću makronaredbi.

DBMS se pokreće iz Start - Programi - Microsoft Access. Izvršite naredbu File - New.

Unificirano je sučelje za rad s objektima baze podataka. Za svaki od njih osigurani su standardni načini rada: Stvori (stvaranje strukture objekta); Konstruktor (mijenjanje strukture objekata); Otvori (View, Run - dizajniran za rad s objektima baze podataka).

SQL upitni jezik

SQL (Structured Query Language) od 1986. je standardni jezik relacijske baze podataka. Konkretno, koristi se u aplikacijama Access i Excel.

SQL je informacijsko-logički jezik dizajniran za opisivanje pohranjenih podataka, dohvaćanje pohranjenih podataka i modificiranje podataka. U početku je SQL bio glavni način na koji je korisnik radio s bazom podataka i bio je mali skup naredbi (operatora) koji su omogućavali stvaranje tablica, dodavanje novih zapisa u tablice, dohvaćanje zapisa iz tablica, brisanje zapisa i promjenu strukture tablice. Kako je SQL postajao složeniji, postao je više programski jezik orijentiran na aplikacije, a korisnici sada mogu koristiti alate za izradu vizualnih upita.

SQL jezik je zbirka operatora:

Operatori jezika za definiranje podataka (DDL);

operatori za manipulaciju podacima (Data Manipulation Language, DML);

operatori definicije pristupa podacima (Data Control Language, DCL);

Transaction Control Language (TCL) operatori.

Upiti u MS Accessu spremaju se i implementiraju korištenjem SQL jezika. Iako se većina upita može kreirati grafički (upiti uzorci), oni se pohranjuju kao SQL naredbe. U nekim slučajevima (na primjer, u podupitima), možete koristiti samo SQL.

SQL je neproceduralni jezik. Jednostavno deklarira što treba učiniti, a izvršenje je prepušteno DBMS-u (sustav za upravljanje bazom podataka).

SQL koristi trovrijednu logiku. Zajedno s tradicionalnim Booleovim vrijednostima TRUE i FALSE, koristi se NULL (UNKNOWN ili NO DATA).

Operacije se izvode na cijelim skupovima podataka, a ne na pojedinačnim elementima, kao u drugim programskim jezicima.

SQL upit sastoji se od izjava. Svaka uputa može sadržavati nekoliko rečenica.

Jedan SQL upit može biti ugniježđen unutar drugog. Podupit nije ništa više od upita unutar upita. Tipično, podupit se koristi u WHERE klauzuli. Ali postoje i drugi načini korištenja podupita.

Upit Q011. Prikazuju se podaci o proizvodima iz tablice m_product čije se šifre također nalaze u tablici m_income:

IZABERI *
IZ m_proizvoda
WHERE id IN (SELECT product_id FROM m_income);

Upit Q012. Prikazuje se popis proizvoda iz tablice m_product čiji se kodovi ne nalaze u tablici m_outcome:

IZABERI *
IZ m_proizvoda
WHERE id NOT IN (SELECT product_id FROM m_outcome);

Zahtjev Q013. Ovaj SQL upit prikazuje jedinstveni popis kodova i naziva proizvoda koji se nalaze u tablici m_income, ali ne i u tablici m_outcome:

SELECT DISTINCT product_id, title
FROM m_income INNER JOIN m_product
NA m_income.product_id=m_product.id
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);

Upit Q014. Iz tablice m_category prikazuje se jedinstveni popis kategorija čija imena počinju slovom M:

ODABERITE DISTINCT naslov
IZ m_proizvoda
WHERE naslov KAO "M*";

Upit Q015. Primjer izvođenja aritmetičkih operacija nad poljima u upitu i preimenovanja polja u upitu (alias). Ovaj primjer izračunava trošak = količina*cijena i dobit za svaki unos troška stavke, uz pretpostavku da je dobit 7 posto prodaje:

Cijena, iznos*cijena KAO ishod_zbroj,
iznos*cijena/100*7 AS profit
OD m_ishod;

Upit Q016. Nakon što sam analizirao i pojednostavio aritmetičke operacije, možete povećati brzinu izvršavanja upita:


outcome_sum*0,07 AS profit
OD m_ishod;

Zahtjev Q017. Možete koristiti naredbu INNER JOIN za spajanje podataka iz više tablica. U sljedećem primjeru, ovisno o vrijednosti ctgry_id, svaki unos u tablici m_income podudara se s nazivom kategorije iz tablice m_category kojoj proizvod pripada:

SELECT c.title, b.title, dt, iznos, cijena, iznos*cijena KAO suma_prihoda
FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
ORDER BY c.naslov, b.naslov;

Zahtjev Q018. Funkcije kao što su SUM - zbroj, COUNT - količina, AVG - aritmetička prosječna vrijednost, MAX - maksimalna vrijednost, MIN - minimalna vrijednost nazivaju se agregatnim funkcijama. Oni prihvaćaju mnoge vrijednosti i nakon obrade vraćaju jednu vrijednost. Primjer izračuna zbroja umnoška polja iznosa i cijene korištenjem funkcija agregata IZNOS:

SELECT SUM(iznos*cijena) AS Total_Sum
OD m_prihoda;

Upit Q019. Primjer korištenja nekoliko agregatnih funkcija:


SELECT Suma(iznos) AS Amount_Sum, ASOR(amount) AS Amount_AVG,
MAX(iznos) AS Amount_Max, Min(iznos) AS Amount_Min,
Broj(*) KAO Ukupan_Broj
OD m_prihoda;

Zahtjev Q020. U ovom primjeru izračunava se iznos svih dobara s šifrom 1, kapitaliziranih u lipnju 2011.:

IZABERI
OD m_prihoda
WHERE product_id=1 AND dt BETWEEN #6/1/2011# AND #6/30/2011#;.

Upit Q021. Sljedeći SQL upit izračunava količinu prodaje artikala s kodom 4 ili 6:

IZABERI
OD m_ishod
WHERE product_id=4 OR product_id=6;

Upit Q022. Izračunava se koliko je robe sa šifrom 4 ili 6 prodano na dan 12.06.2011.

SELECT Zbroj(iznos*cijena) KAO zbroj_ishoda
OD m_ishod
WHERE (product_id=4 ILI product_id=6) AND dt=#6/12/2011#;

Upit Q023. Zadatak je ovaj. Izračunajte ukupnu količinu robe u kategoriji “Pekarski proizvodi” koja je kapitalizirana.

Da biste riješili ovaj problem, morate raditi s tri tablice: m_income, m_product i m_category, jer:
- količina i cijena kapitaliziranih dobara pohranjene su u tablici m_income;
- šifra kategorije svakog proizvoda pohranjena je u tablici m_product;
- naziv kategorije naslova pohranjuje se u tablici m_category.

Za rješavanje ovog problema koristit ćemo sljedeći algoritam:
- određivanje šifre kategorije "Pekarski proizvodi" iz tablice m_category pomoću podupita;
- povezivanjem tablica m_income i m_product za određivanje kategorije svakog kupljenog proizvoda;
- izračun iznosa primitka (= količina*cijena) za robu čija je šifra kategorije jednaka šifri definiranoj gornjim podupitom.


FROM m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title="Pekarski proizvodi"); !}

Upit Q024. Problem izračuna ukupnog iznosa kapitaliziranih dobara u kategoriji “Pekarski proizvodi” riješit ćemo pomoću sljedećeg algoritma:
- spojite svaki unos u tablici m_income, ovisno o vrijednosti njegovog product_id-a, iz tablice m_category, s nazivom kategorije;
- odabrati zapise za koje je kategorija “Pekarski proizvodi”;
- izračunati iznos primitka = količina*cijena.

SELECT Suma(iznos*cijena) KAO suma_prihoda
FROM (m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id)
WHERE c.title="Pekarski proizvodi"; !}

Upit Q025. Ovaj primjer izračunava koliko je artikala robe potrošeno:

SELECT COUNT(product_id) AS product_cnt
FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

Upit Q026. Naredba GROUP BY koristi se za grupiranje zapisa. Tipično, zapisi su grupirani prema vrijednosti jednog ili više polja, a na svaku skupinu primjenjuje se neka skupna operacija. Na primjer, sljedeći upit generira izvješće o prodaji robe. Odnosno, generira se tablica koja sadrži nazive robe i iznos za koji je prodana:

SELECT title, SUM(iznos*cijena) AS ishod_zbroj
FROM m_product AS a INNER JOIN m_outcome AS b
NA a.id=b.product_id
GRUPIRAJ PO naslovu;

Upit Q027. Izvješće o prodaji po kategorijama. Odnosno, generira se tablica koja sadrži nazive kategorija proizvoda, ukupan iznos za koji su prodani proizvodi tih kategorija te prosječni iznos prodaje. Funkcija ROUND koristi se za zaokruživanje prosječne vrijednosti na najbližu stotinku (druga znamenka nakon decimalnog razdjelnika):

SELECT c.title, SUM(iznos*cijena) AS outcome_sum,
ROUND(PROSJEC(iznos*cijena),2) AS ishod_zbroj_prosj
FROM (m_product AS a INNER JOIN m_outcome AS b ON a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
GROUP BY c.title;

Upit Q028. Ukupan i prosječan broj njegovih računa izračunava se za svaki proizvod i prikazuje podatke o proizvodima čiji je ukupan broj računa najmanje 500:

SELECT product_id, SUM(iznos) AS suma_iznosa,
Zaokruži(prosj.(iznos),2) KAO iznos_prosj
OD m_prihoda
GROUP BY product_id
HAVING Zbroj(iznos)>=500;

Upit Q029. Ovaj upit izračunava za svaki proizvod iznos i prosjek njegovih primitaka ostvarenih u drugom kvartalu 2011. Ako je ukupni iznos računa proizvoda najmanje 1000, tada se prikazuju informacije o ovom proizvodu:

SELECT title, SUM(iznos*cijena) AS prihod_sum
FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
GDJE dt IZMEĐU #4/1/2011# I #6/30/2011#
GRUPIRAJ PO naslovu
HAVING SUM(iznos*cijena)>=1000;

Upit Q030. U nekim slučajevima morate uskladiti svaki zapis neke tablice sa svakim zapisom druge tablice; koji se naziva kartezijevim produktom. Tablica koja proizlazi iz takve veze naziva se Descartesovom tablicom. Na primjer, ako neka tablica A ima 100 zapisa, a tablica B ima 15 zapisa, tada će se njihova Descartesova tablica sastojati od 100*15=150 zapisa. Sljedeći upit spaja svaki zapis u tablici m_income sa svakim zapisom u tablici m_outcome:

SELECT *FROM m_prihod, m_ishod;

Upit Q031. Primjer grupiranja zapisa po dva polja. Sljedeći SQL upit izračunava za svakog dobavljača iznos i količinu robe primljene od njega:


SUM(iznos*cijena) KAO zbroj_prihoda

Upit Q032. Primjer grupiranja zapisa po dva polja. Sljedeći upit za svakog dobavljača izračunava količinu i količinu njihovih proizvoda koje mi prodajemo:

ODABERITE id_dobavljača, id_proizvoda, SUM(iznos) KAO iznos_zbroja,
SUM(iznos*cijena) AS zbroj_ishoda
GROUP BY dobavljač_id, product_id;

Upit Q033. U ovom primjeru, dva gornja upita (q031 i q032) koriste se kao podupiti. Rezultati ovih upita korištenjem metode LEFT JOIN kombiniraju se u jedno izvješće. Sljedeći upit prikazuje izvješće o količini i količini primljenih i prodanih proizvoda za svakog dobavljača. Imajte na umu da ako je neki proizvod već primljen, ali još nije prodan, tada će ćelija outcome_sum za ovaj unos biti prazna. Također treba napomenuti da je ovaj upit samo primjer korištenja relativno složenih upita kao podupita. Izvedba ovog SQL upita s velikom količinom podataka je upitna:

IZABERI *
IZ
SUM(iznos*cijena) KAO zbroj_prihoda
ON a.product_id=b.id GROUP BY supplier_id, product_id) AS a
LIJEVO PRIDRUŽI
(SELECT dobavljač_id, product_id, SUM(iznos) KAO iznos_sum,
SUM(iznos*cijena) AS zbroj_ishoda
FROM m_outcome AS a INNER JOIN m_product AS b
ON a.product_id=b.id GROUP BY supplier_id, product_id) AS b
ON (a.product_id=b.product_id) AND (a.supplier_id=b.supplier_id);

Upit Q034. U ovom primjeru, dva gornja upita (q031 i q032) koriste se kao podupiti. Rezultati ovih upita korištenjem metode RIGTH JOIN kombiniraju se u jedno izvješće. Sljedeći upit prikazuje izvješće o visini uplata svakog klijenta prema sustavima plaćanja koje je koristio i iznosu ulaganja koje je napravio. Sljedeći upit prikazuje izvješće o količini i količini primljenih i prodanih proizvoda za svakog dobavljača. Imajte na umu da ako je neki proizvod već prodan, ali još nije stigao, tada će ćelija prihod_zbroj za ovaj unos biti prazna. Prisutnost takvih praznih polja pokazatelj je greške u knjigovodstvu prodaje, jer je prije prodaje potrebno da odgovarajući proizvod stigne:

IZABERI *
IZ
(SELECT dobavljač_id, product_id, SUM(iznos) KAO iznos_sum,
SUM(iznos*cijena) KAO zbroj_prihoda
FROM m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id
GRUPIRAJ PO dobavljač_id, product_id) KAO a
PRAVO SE PRIDRUŽI
(SELECT dobavljač_id, product_id, SUM(iznos) KAO iznos_sum,
SUM(iznos*cijena) AS zbroj_ishoda
FROM m_outcome AS a INNER JOIN m_product AS b ON a.product_id=b.id
GRUPIRAJ PO dobavljač_id, product_id) AS b
ON (a.supplier_id=b.supplier_id) AND (a.product_id=b.product_id);

Upit Q035. Prikazuje se izvješće s prikazom iznosa prihoda i rashoda po proizvodima. Da biste to učinili, kreira se popis proizvoda prema tablicama m_income i m_outcome, zatim se za svaki proizvod s tog popisa izračunava zbroj njegovih prihoda prema tablici m_income, a iznos njegovih rashoda prema tablici m_outcome:

SELECT product_id, SUM(u_iznosu) KAO prihod_iznos,
SUM(out_amount) KAO ishod_iznos
IZ
(SELECT product_id, iznos AS in_amount, 0 AS out_amount
OD m_prihoda
UNIJA SVE
SELECT product_id, 0 AS in_amount, iznos AS out_amount
IZ m_ishod) KAO t
GROUP BY product_id;

Upit Q036. Funkcija EXISTS vraća vrijednost TRUE, ako skup koji mu je proslijeđen sadrži elemente. Funkcija EXISTS vraća FALSE ako je skup koji joj je proslijeđen prazan, odnosno ne sadrži elemente. Sljedeći upit prikazuje kodove proizvoda koji su sadržani u tablicama m_income i m_outcome:

ODABERITE DISTINCT product_id
OD m_dohodak KAO a
WHERE EXISTS(SELECT product_id FROM m_outcome AS b

Upit Q037. Prikazuju se šifre proizvoda koje se nalaze u tablicama m_income i m_outcome:

ODABERITE DISTINCT product_id
OD m_dohodak KAO a
WHERE product_id IN (SELECT product_id FROM m_outcome)

Upit Q038. Prikazuju se šifre proizvoda koje se nalaze u tablici m_income, ali nisu sadržane u tablici m_outcome:

ODABERITE DISTINCT product_id
OD m_dohodak KAO a
WHERE NOT EXISTS(SELECT product_id FROM m_outcome AS b
WHERE b.product_id=a.product_id);

Upit Q039. Prikazuje se popis proizvoda s maksimalnim iznosom prodaje. Algoritam je sljedeći. Za svaki proizvod izračunava se iznos njegove prodaje. Zatim se određuje najveći od tih iznosa. Zatim se za svaki proizvod ponovno izračunava zbroj njegove prodaje te se ispisuje šifra i zbroj prodaje robe čiji je zbroj prodaje jednak maksimalnom:

SELECT product_id, SUM(iznos*cijena) KAO iznos_zbroj
OD m_ishod
GROUP BY product_id
HAVING SUM(iznos*cijena) = (SELECT MAX(s_iznos)
FROM (SELECT SUM(iznos*cijena) AS s_iznos FROM m_outcome GROUP BY product_id));

Upit Q040. Rezervirana riječ IIF (uvjetni operator) koristi se za procjenu logičkog izraza i izvođenje radnje ovisno o rezultatu (TRUE ili FALSE). U sljedećem primjeru, isporuka artikla smatra se "malom" ako je količina manja od 500. U suprotnom, to jest, količina primitka je veća ili jednaka 500, isporuka se smatra "velikom":

SELECT dt, product_id, iznos,
IIF(iznos<500,"малая","большая") AS mark
OD m_prihoda;

SQL upit Q041. U slučaju da se IIF operator koristi nekoliko puta, praktičnije ga je zamijeniti s SWITCH operatorom. Operator SWITCH (operator višestrukog odabira) koristi se za procjenu logičkog izraza i izvođenje radnje ovisno o rezultatu. U sljedećem primjeru, isporučena partija se smatra "malom" ako je količina robe u seriji manja od 500. U suprotnom, to jest, ako je količina robe veća ili jednaka 500, partija se smatra "velikom ":

SELECT dt, product_id, iznos,
SWITCH(iznos<500,"малая",amount>=500,"veliki") AS oznaka
OD m_prihoda;

Upit Q042. <300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, iznos,
IIF(iznos<300,"малая",
IIF(iznos<1000,"средняя","большая")) AS mark
OD m_prihoda;

SQL upit Q043. U sljedećem zahtjevu, ako je količina robe u primljenoj seriji manja od 300, tada se serija smatra "malom". Inače, to jest, ako je iznos uvjet<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, iznos,
SWITCH(iznos<300,"малая",
iznos<1000,"средняя",
iznos>=1000,"veliki") AS oznaka
OD m_prihoda;

SQL upit Q044. U sljedećem upitu prodaja je podijeljena u tri skupine: mala (do 150), srednja (od 150 do 300), velika (300 ili više). Zatim se izračunava ukupan iznos za svaku grupu:

SELECT Kategorija, SUM(zbroj_ishoda) AS Ctgry_Total
FROM (SELECT iznos*cijena KAO ishod_zbroj,
IIf(iznos*cijena<150,"малая",
IIf(iznos*cijena<300,"средняя","большая")) AS Category
IZ m_ishod) KAO t
GRUPIRAJ PO kategoriji;

SQL upit Q045. Funkcija DateAdd koristi se za dodavanje dana, mjeseci ili godina određenom datumu i dobivanje novog datuma. Sljedeći zahtjev:
1) dodaje 30 dana datumu iz polja dt i prikazuje novi datum u polju dt_plus_30d;
2) dodaje 1 mjesec datumu iz polja dt i prikazuje novi datum u polju dt_plus_1m:

SELECT dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m
OD m_prihoda;

SQL upit Q046. Funkcija DateDiff dizajnirana je za izračunavanje razlike između dva datuma u različitim jedinicama (dani, mjeseci ili godine). Sljedeći upit izračunava razliku između datuma u polju dt i trenutnog datuma u danima, mjesecima i godinama:

SELECT dt, DateDiff("d",dt,Date()) AS last_day,
DateDiff("m",dt,Date()) KAO zadnji_mjeseci,
DateDiff("yyyy",dt,Date()) AS last_years
OD m_prihoda;

SQL upit Q047. Broj dana od datuma primitka robe (tablica m_income) do tekućeg datuma izračunava se pomoću funkcije DateDiff i uspoređuje se rok trajanja (tablica m_product):


DateDiff("d",dt,Date()) KAO zadnji_dani
OD m_dohodak KAO UNUTARNJI SPOJ m_proizvod KAO b
NA a.product_id=b.id;

SQL upit Q048. Izračunava se broj dana od datuma prijema robe do tekućeg datuma, zatim se provjerava da li ta količina prelazi rok trajanja:

ODABERITE a.id, product_id, dt, lifedays,
DateDiff("d",dt,Date()) AS last_days, IIf(last_days>lifedays,"Yes","No") AS date_expire
FROM m_prihod a INNER JOIN m_proizvod b
NA a.product_id=b.id;

SQL upit Q049. Izračunava se broj mjeseci od datuma prijema robe do tekućeg datuma. Stupac month_last1 izračunava apsolutni broj mjeseci, stupac month_last2 izračunava broj punih mjeseci:

SELECT dt, DateDiff("m",dt,Date()) AS month_last1,
DateDiff("m",dt,Date())-iif(dan(dt)>dan(datum()),1,0) AS month_last2
OD m_prihoda;

SQL upit Q050. Iskazuje se tromjesečno izvješće o količini i količini kupljene robe za 2011. godinu:

SELECT kvartal, SUM(outcome_sum) AS Ukupno
FROM (ODABERITE iznos*cijenu KAO ishod_zbroj, mjesec(dt) KAO m,
PREKIDAČ (m<4,1,m<7,2,m<10,3,m>=10.4) AS kvartal
FROM m_dohodak WHERE godina(dt)=2011) AS t
GROUP BY kvartal;

Upit Q051. Sljedeći upit pomaže saznati jesu li korisnici mogli unijeti u sustav podatke o potrošnji robe u iznosu većem od količine primljene robe:

SELECT product_id, SUM(in_sum) KAO prihod_sum, SUM(out_sum) AS outcome_sum
FROM (SELECT product_id, iznos*cijena kao in_sum, 0 kao out_sum
od m_prihoda
UNIJA SVE
SELECT product_id, 0 kao in_sum, iznos*cijena kao out_sum
od m_ishod) KAO t
GROUP BY product_id
IMA SUM(u_zbroju)

Upit Q052. Numeriranje redaka koje vraća upit implementirano je na različite načine. Na primjer, možete prenumerirati retke izvješća pripremljenog u MS Accessu koristeći sam MS Access. Također možete promijeniti broj pomoću programskih jezika, na primjer, VBA ili PHP. Međutim, ponekad to treba učiniti u samom SQL upitu. Dakle, sljedeći će upit numerirati retke tablice m_income prema uzlaznom redoslijedu vrijednosti ID polja:

SELECT COUNT(*) kao N, b.id, b.product_id, b.amount, b.price
OD m_prihoda a UNUTARNJI SPOJ m_prihoda b NA a.id<= b.id
GROUP BY b.id, b.product_id, b.amount, b.price;

Upit Q053. Prikazuje se prvih pet proizvoda među proizvodima prema količini prodaje. Prvih pet zapisa ispisuje se pomoću TOP upute:

SELECT TOP 5, product_id, sum(amount*price) AS summa
OD m_ishod
GROUP BY product_id
ORDER BY suma(iznos*cijena) DESC;

Upit Q054. Prikazuje se prvih pet proizvoda među proizvodima prema iznosu prodaje, a reci su numerirani kao rezultat:

SELECT COUNT(*) AS N, b.product_id, b.summa
IZ

FROM m_outcome GROUP BY product_id) KAO a
UNUTARNJI SPOJ
(SELECT product_id, sum(amount*price) AS summa,
zbroj*10000000+product_id AS id
FROM m_outcome GROUP BY product_id) AS b
NA a.id>=b.id
GROUP BY b.product_id, b.summa
BROJIM(*)<=5
REDOSLIJED PO BROJU(*);

Upit Q055. Sljedeći SQL upit prikazuje korištenje matematičkih funkcija COS, SIN, TAN, SQRT, ^ i ABS u MS Access SQL-u:

SELECT (odaberite broj(*) iz m_income) kao N, 3,1415926 kao pi, k,
2*pi*(k-1)/N kao x, COS(x) kao COS_, SIN(x) kao SIN_, TAN(x) kao TAN_,
SQR(x) kao SQRT_, x^3 kao "x^3", ABS(x) kao ABS_
OD (SELECT COUNT(*) AS k
FROM m_income AS a INNER JOIN m_income AS b ON a.id<=b.id
GRUPIRAJ PO b.id) t;

Access DBMS koristi dvije vrste upita: QBE – upit po uzorku i SQL(Structured Query Language) - strukturirani upitni jezik. Uzorak zahtjeva generira se ispunjavanjem posebnog obrasca zahtjeva u prozoru "Query Builder". SQL – upite kreiraju programeri iz niza SQL-a – upute. SQL generiraju, u pravilu, programeri na obrascu upita koji se otvara naredbom “Query Builder” na kartici “Creation” i odabirom “SQL Mode” iz izbornika View. SQL jezik je dizajniran za rad s podacima, tj. za kreiranje, modificiranje i upravljanje podacima u relacijskim bazama podataka.

Treba napomenuti da postoji nekoliko načina SQL upita (ANSI-89 SQL i ANSI-92 SQL upiti načina) koji su u skladu sa standardima ANSI-89 SQL i ANSI-92 SQL.

Upute sadrže opis skupa podataka u SQL-u. SQL izjave sastoje se od rečenica (SELECT, FROM, WHERE, itd.). Ponude u SQL jeziku sastoje se od pojmova (operatora ili naredbi, identifikatora, konstanti itd.). Naredba počinje naredbom (jednom od naredbi SELECT, CREATE, INSERT, UPDATE, DELETE itd.) i završava točkom i zarezom. Osnovne SQL naredbe: SELECT, FROM i WHERE.

Na primjer, SQL izjava:
SELECT Students.StudentCode
OD Studenti;
sastoji se od klauzule "SELECT Students.StudentCode" i klauzule "FROM Students".

SELECT klauzula sadrži operater SELECT i identifikator"Studenti. Kod studenta". Ovdje punom nazivu polja "StudentCode" prethodi naziv tablice "Students" baze podataka. SELECT - određuje polje koje sadrži potrebne podatke. Klauzula FROM sastoji se od klauzule FROM i identifikatora "Studenti". FROM - definira tablicu koja sadrži polja navedena u klauzuli SELECT.

Treba napomenuti da prilikom izrade upita u SQL-u morate uzeti u obzir njegovu sintaksu. Unatoč činjenici da se sintaksa SQL jezika temelji na sintaksi engleskog jezika, sintaksa verzija SQL jezika može se razlikovati za različite DBMS-ove.

Postoji nekoliko vrsta upita: odabir, ažuriranje, dodavanje i brisanje zapisa, unakrsni upit, kreiranje i brisanje tablica, spajanje tablica itd. Najčešći je zahtjev za uzorkom. Upiti za odabir koriste se za odabir informacija sadržanih u tablicama koje su korisniku potrebne. Izrađuju se samo za povezane tablice.

Za pregled SQL upita u Access 2003 ili 2007 DBMS-u, trebate izvršiti naredbu SQL View/Mode u aktivnom prozoru za dizajniranje uzorka upita (slika 1).


Riža. 1.

Uzmimo SQL naredbu (SELECT) za uzorkovanje podataka iz Access 2003 baze podataka prema kriteriju uspjeha učenika "Ocjena=5" (slika 2).



Riža. 2.

Kao što slijedi iz naredbe SELECT (slika 1), ona opisuje skup podataka u SQL jeziku: SELECT - definira nazive polja kojima prethode nazivi tablica koje sadrže podatke; FROM - definira tablice i njihove odnose kroz ključna polja tablica (za to se koristi konstrukcija INNER JOIN ... ON), na temelju kojih se biraju podaci; WHREME - definira uvjete za odabir polja; ORDER BY - određuje kako sortirati uzlaznim redoslijedom (prema zadanim postavkama izvodi se uzlazni redoslijed) vrijednosti polja "Prezime" tablice "Studenti".

Kako proizlazi iz uputa za dohvaćanje podataka iz baze, SQL jezik opisuje što je potrebno dobiti iz baze, dok je izvođenje povjereno DBMS-u, budući da SQL jezik nema vlastita sredstva za kontrolu izvršavanja programa.