Stvaranje sql upita u access imenjacima. Implementacija SQL-a u ACCESS-u Usporedba Microsoft Access-a

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 Studenti.StudentCode
OD Studenti;
sastoji se od klauzule "SELECT Students.StudentCode" i klauzule "FROM Students".

Klauzula SELECT 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 baze podataka Access 2003 prema kriteriju uspješnosti 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 izvršenje povjereno DBMS-u, budući da SQL jezik nema vlastita sredstva za kontrolu izvršavanja programa.

Usporedba Microsoft Access SQL i ANSI SQL z. Microsoft Access SQL primarno je usklađen sa standardom ANSI-89 (Razina 1). Neke značajke ANSI SQL ne koriste se u Microsoft Access SQL z. Microsoft Access SQL koristi rezervirane riječi i značajke koje ANSI SQL ne podržava

Proširena z sintaksa. Access 2000 (MS Jet 4.0) uključuje proširenja koja jezik približavaju standardu ANSI SQL-92 - način je dostupan samo kada se koristi MS OLE DB Provider za Jet

Za konstrukciju Između vrijede drugačija pravila. . . I, koji ima sljedeću sintaksu: izraz 1 Između vrijednosti 1 i vrijednosti 2 U Microsoft Access SQL-u vrijednost 1 može biti veća od vrijednosti 2; u ANSI SQL, vrijednost 1 mora biti manja ili jednaka vrijednosti 2.

zamjenski znakovi z Microsoft Access SQL podržava i ANSI SQL zamjenske znakove i zamjenske znakove kada se koristi operator Like. Ovi se znakovi koriste u upitima i izrazima za uključivanje svih zapisa, naziva datoteka ili drugih elemenata koji sadrže određene znakove ili odgovaraju određenom uzorku.) koji se odnose na. Microsoftov pristup. Ne možete koristiti ANSI zamjenske znakove i Microsoft Access u isto vrijeme. Može se koristiti samo jedan skup znakova i ne mogu se miješati.

Značajke jezika ANSI SQL nisu podržane u Microsoft Access SQL z. Izjava TRANSFORM pruža podršku za crossover upite z (Crossover upit. Upit koji izračunava zbroj, prosjek, broj vrijednosti ili druge statističke izračune, a zatim grupira rezultate u tablicu u dva skupa podataka, od kojih jedan definira stupac naslovi, a drugi redovi naslova.).

Značajke jezika ANSI SQL nisu podržane u Microsoft Access SQL z. Koristite klauzulu LIMIT TO nn ROWS da ograničite broj redaka koje vraća upit. z. Dostupne su dodatne SQL statističke funkcije, kao što je St. Dev i Var. P

Značajke jezika ANSI SQL nisu podržane u Microsoft Access SQL z. Za definiranje parametara upita (Upit s parametrima. Upit u kojem korisnik interaktivno unosi jednu ili više vrijednosti koje definiraju uvjete odabira. Upit s parametrima nije zasebna vrsta upita; to je funkcionalno proširenje odabirnih upita.) koristi se deklaracija PARAMETERS.

Sintaksa naredbe SELECT [predikat] ( * | tablica. * | [tablica. ]polje_1 [, [tablica. ]polje_2 [, . . ]]) IZ izraza [, . . . ]

SELECT naredba Argumenti Predikat Jedan od sljedećih predikata odabira: ALL, DISTINCTROW ili TOP. Predikati se koriste za ograničavanje broja vraćenih zapisa. Ako nedostaju, zadani predikat je SVE.

Predikati ALL, DISTINCTROW, TOP z. SELECT ]] FROM tablice z. SVE - odabire sve zapise koji odgovaraju uvjetima navedenim u SQL izjavi.

DISTINCT predikat - isključuje zapise koji sadrže duplicirane vrijednosti u odabranim poljima. Rezultirajući skup podataka nije moguće ažurirati

Predikat 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.

DISTINTROW z. ODABERITE DISTINTROW zaposlenika. ime, raspored. šifra_ artikla z. FROM zaposlenika INNER JOIN raspored z. ON zaposlenik. šifra_zaposlenika = raspored. kod_zaposlenika;

DISTINCT SELECT DISTINCT DJELATNIK. Puno ime, raspored. item_code FROM EMPLOYEE INNER JOIN raspored NA EMPLOYEE. Employee_id = raspored. kod_zaposlenika;

Ako koristite tabularni jezik kao alat za sastavljanje upita u SQL-u, tada da biste uključili DISTINCT u upit, morate odabrati vrijednost "da" za svojstvo upita "jedinstvene vrijednosti", a da biste uključili DISTINCTROW u upit, morate odabrati " da” za svojstvo upita “jedinstveni zapisi”.

Predikat TOP z. TOP n - Vraća navedeni broj zapisa koji su na početku ili kraju raspona opisanog klauzulom ORDER BY.

Primjer. Odaberite 5 najbrojnijih odjela ODABERITE TOP 5 odjela. [Department_name_full], Count(employees. Employee_code) AS [Broj zaposlenika] FROM odjel INNER JOIN zaposlenici ON odjel. Šifra_odjela = zaposlenici. Odjel_code GROUP BY odjel. [Department_name_full] ORDER BY Count(employees. Employee_code) DESC;

S OPCIJAMA VLASNIČKOG PRISTUPA Koristi se u višekorisničkom okruženju sa sigurnom radnom grupom kako bi se korisniku koji pokreće zahtjev dodijelila dopuštenja koja odgovaraju onima vlasnika zahtjeva.

Argumenti naredbe SELECT polje_1, polje_2 su nazivi polja iz kojih treba odabrati podatke. Ako uključite više polja, ona će biti dohvaćena navedenim redoslijedom.

Argumenti naredbe SELECT Alias_1, Alias_2 su imena koja će postati zaglavlja stupaca umjesto originalnih naziva stupaca u tablici.

Primjeri korištenja pseudonima za određivanje naziva izračunatog polja Primjer 1 SELECT zaposlenika. Puno ime, [plaća]*0. 5 AS nagrada OD zaposlenika; Primjer 2 SELECT Prosj.(plaća zaposlenika) AS Prosječna_plaća FROM zaposlenika;

Argumenti naredbe SELECT Vanjski. Baza. Data je naziv baze podataka koja sadrži tablice navedene argumentom izraza, ako nisu u trenutnoj bazi podataka.

Klauzula FROM SELECT je lista. Polja IZ izraza z Izraz - izraz koji definira jednu ili više tablica iz kojih se dohvaćaju podaci. Ovaj izraz može biti naziv jedne tablice, naziv spremljenog upita ili rezultat operacije INNER JOIN, LEFT JOIN ili RIGHT JOIN.

Zajednička obrada više (3) tablica SELECT djelatnika. Puno ime, predmet. [kratki naziv subjekta] FROM zaposlenika INNER JOIN (subjekt INNER JOIN [posjedovanje predmeta] ON subjekt. [Subject code] = [posjedovanje predmeta]. [disciplinska šifra]) ON zaposlenik. Šifra = [posjed predmeta]. [šifra zaposlenika];

Između dizajna. . . I izraz 1 IZMEĐU izraza 2 I izraza 3 z. U Microsoft Access SQL izraz 2 može biti veći od izraza 3, ali u ANSI SQL ne može.

Simboli uzorka Sviđa mi se Razni simboli uzorka koriste se s predikatom Sviđa mi se. ANSI SQL znak uzorka MS Access SQL z Bilo koji znak? _ (podvlaka) z Bilo koja grupa bilo kojih znakova * % z Svaki pojedinačni znak uključen u character_list [character_list] nedostaje z Svaki pojedinačni znak koji nije uključen u character_list [!character_list] nedostaje

z. Zadnje dvije značajke samo su za Access 2000 z. U programu Access 2000, način rada ANSI SQL-92 dopušta korištenje zamjenskih znakova ANSI z. Ne možete miješati znakove u jednom zahtjevu

GROUP BY z klauzula. SELECT popis. Polja FROM tablice WHERE uvjet. Odabir z koji se može grupirati. Polja - nazivi polja (do 10) koji se koriste za grupiranje zapisa. Redoslijed naziva polja u argumentu može se grupirati. Polja određuju razinu grupiranja za svako od ovih polja.

GROUP BY klauzula z Koristite WHERE klauzulu za izuzimanje zapisa iz grupiranja i HAVING klauzulu za primjenu filtra na zapise nakon grupiranja. z Kada koristite klauzulu GROUP BY, sva polja u popisu polja SELECT izraza moraju biti uključena u klauzulu GROUP BY ili se koriste kao argumenti za SQL funkciju agregacije.

Primjer. Odjeli s više od 5 zaposlenih. ODABIR djelatnika. [Šifra odjela], Broj (zaposlenik. Puno ime) AS [Broj zaposlenika] FROM zaposlenik GROUP BY zaposlenik. [Šifra odjela] HAVING (((Broj(zaposlenik. Puno ime))>5));

Zadatak Postoje tablice “firme”, “zaposlenici” i “certifikati”. Potrebno je utvrditi koliko svaka tvrtka ima certificiranih zaposlenika (jedan zaposlenik može biti certificiran prema više PP).

SELECT izjava. . . INTO Sintaksa z. Stvara upit za izradu tablice. SELECT polje_1[, polje_2[, . . . ]] U novo. Tablica IZ izvora

Union Query (Primjer 1) SELECT Naslov, Grad FROM Dobavljači UNION SELECT Naslov, Grad FROM Kupci ORDER BY Grad;

Zahtjev sindikata (Primjer 2) SELECT Naslov, Grad FROM Dobavljači UNION ALL SELECT Naslov, Grad FROM Kupci; - UNION ALL osigurava vraćanje svih zapisa, uključujući duplikate

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.

Izjava DELETE z Zahtjev za brisanje briše cijele zapise, a ne samo sadržaj navedenih polja. Da biste izbrisali podatke za određeno polje, stvorite upit za ažuriranje zapisa koji zamjenjuje postojeće vrijednosti Null vrijednostima z 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

z. Ako je navedeno "kaskadno brisanje", tada će svi povezani z zapisi biti izbrisani. Izbrisane unose nije moguće vratiti

Izrada tablice. Sintaksa naredbe CREATE TABLE tablice (polje 1 tip [(veličina)] [index1] [, polje 2 tip [(veličina)] [index2] [, . . ]] [, CONSTRAINT index_multiple_fields [, . . ]])

Izrada tablice. Sintaksa naredbe u Accessu značajno se razlikuje od standardne: nisu implementirane sve značajke standarda SQL-92 z uključene su nove konstrukcije z sintaksa je drugačija

PRIVREMENA PRIVREMENA tablica dostupna je samo u sesiji u kojoj je tablica stvorena. Na kraju ove sesije automatski se briše. Privremene tablice može dijeliti više korisnika.

S KOMPRESIJOM z. Atribut WITH COMPRESSION dopušten je samo za tipove podataka CHARACTER i MEMO. z. Kompenzira utjecaj prijelaza na format znakova Unicode

Podešavanje strukture tablice ALTER TABLE tablica (ADD (COLUMN vrsta polja[(veličina)] | ALTER COLUMN vrsta polja[(veličina)] | CONSTRAINT field_set_index) | DROP (COLUMN polje I CONSTRAINT index_name) )

z Veličina polja u znakovima postavlja se samo za polja s tipovima podataka TEXT i BINARY z ADD COLUMN - za dodavanje novog polja u tablicu z ALTER COLUMN - za promjenu tipa podataka postojećeg polja z DROP COLUMN - za brisanje polja . z ADD CONSTRAINT - za dodavanje indeksa z DROP CONSTRAINT - za uklanjanje indeksa z Nije moguće dodati ili ukloniti više polja ili indeksa u isto vrijeme

Stvaranje indeksa prilikom kreiranja tablice CREATE TABLE tablice (polje 1 tip [(veličina)] [, polje 2 tip [(veličina)] [, …]] [, CONSTRAINT multifieldindex [, …]])

Izrada indeksa. Sintaksa naredbe CREATE [ UNIQUE ] INDEX indeks NA tablici (polje [, polje , . . . ])

Izrada indeksa. Sintaksa naredbe CREATE [ UNIQUE ] INDEX indeks NA tablici (polje [, polje , . . . ])

Izrada z indeksa. DISALLOW NULL - onemogućuje prisutnost Null vrijednosti u indeksiranim poljima novih z zapisa. IGNORE NULL sprječava unose koji imaju Null vrijednosti u indeksiranim z poljima da budu uključeni u indeks. PRIMARY - dodijelite indeksirana polja ključu

Primjeri izrade indeksa Primjer1. KREIRAJ INDEKS Novo. Index ON Zaposlenici (Kuć. Telefon, Lokalni); Primjer 2. STVARANJE JEDINSTVENOG INDEKSA Kup. ID ON Customers (Customer. ID) WITH DISALLOW NULL;

Korištenje ALTER TABLE za stvaranje indeksne ALTER TABLE tablice (ADD (COLUMN polje tip[(size)] | ALTER COLUMN polje tip[(size)] | CONSTRAINT field_set_index) | DROP (COLUMN polje I CONSTRAINT index_name) )

Stvaranje pogleda. Sintaksa naredbe je CREATE VIEW view [(field_1[, field_2[, . . . ]])] AS instrukcija. Izaberi

Promjena strukture tablice ALTER TABLE tablica (ADD (COLUMN tip polja[(veličina)] | ALTER COLUMN tip polja[(veličina)] | CONSTRAINT kompozit. Indeks) | DROP (COLUMN polje I CONSTRAINT naziv indeksa) )

Uklanjanje DROP objekata (tablica TABLE | tablica INDEX ON | procedura PROCEDURE | pogled VIEW)

ALTER USER ili DATABASE z. ALTER DATABASE PASSWORD nova lozinka stara lozinka z. PROMIJENI KORISNIČKU LOZINKU korisnika nova lozinka stara lozinka

Sintaksa GRANT (privilege[, privilege, …]) ON (TABLE tablica | OBJECT objekt| CONTAINER spremnik ) TO (autorizationname[, authorizationname, …])

Privilege z SELECT z DELETE z INSERT z UPDATE z DROP z SELECTSECURITY z UPDATESECURITY z DBPASSWORD z UPDATEIDENTITY z CREATE z SELECTSCHEMA z UPDATEOWNER

z. Objekt – može se odnositi na bilo koji objekt koji nije tablica, kao što je upit, z pogled. Authorizationname – ime korisnika ili grupe

DODAJ KORISNIKA korisnik[, korisnik, …] U grupu Dodaje postojećeg(e) korisnika u postojeću grupu. Korisnici će imati sva prava dodijeljena grupi

DROP USER ili GROUP z. DROP USER korisnik[, korisnik, …] DROP USER uklanja korisnika iz grupe, ali ne briše korisnika z. DROP GROUP group[, group, …] DROP GROUP briše grupu, ali ne utječe na korisnike grupe; jednostavno prestaju biti članovi grupe

REVOKE – poništavanje navedenih ograničenja REVOKE (privilege[, privilege, ...]) ON (TABLE tablica | OBJECT object| CONTAINTER kontejner) FROM (authorizationname[, authorizationname, ...])

Dodatne značajke MS Access SQL z. TRANSFORM izjava, dizajnirana za stvaranje unakrsnih upita z Dodatne grupne funkcije, na primjer, St. Dev i Var. P z Opis PARAMETERS, namijenjen kreiranju upita s parametrima

SELECT izjava. . . INTO SELECT polje 1[, polje 2[, . . . ]] U novu_tablicu IZ izvora


Usporedba Microsoft Access SQL-a i ANSI SQL-a Microsoft Access SQL je prvenstveno ANSI-89 (Razina 1) neke značajke ANSI SQL-a ne koriste se u Microsoft Access SQL-u Microsoft Access SQL koristi rezervirane riječi i značajke koje ANSI SQL ne podržava u Accessu 2000 (MS Jet 4.0) uvedena su proširenja koja jezik približavaju standardu ANSI SQL-92 - način je 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 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 sigurnom radnom grupom, da se korisniku koji radi sa zahtjevom dodijele dopuštenja koja odgovaraju dopuštenjima 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 originalnih naziva stupaca u tablici. Izraz - imena jedne ili više tablica koje sadrže podatke koji se biraju - naziv baze podataka koja sadrži tablice navedene argumentom izraza, ako se ne nalaze 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 stavkama] ON subjekt.[Šifra subjekta] = [vlasništvo nad stavkama].[š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 koji nije uključen u character_list [! character_list] nedostaje Zadnje dvije opcije su Access 2000 samo u ANSI SQL-92 modu dopuštaju 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 i 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 za SQL funkciju agregacije. Odjeli s više od 5 zaposlenika: SELECT co-workers[šifra odjela], Broj (puno ime suradnika) AS [Broj zaposlenika] FROM co-workers GROUP BY co-workers[šifra odjela] HAVING (((Broj( 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, stvorite 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



Za dohvaćanje podataka iz baze podataka koristi se SQL jezik. SQL je programski jezik koji je vrlo sličan engleskom, ali je namijenjen programima za upravljanje bazom podataka. SQL se koristi u svakom upitu u Accessu.

Razumijevanje načina na koji SQL radi pomaže vam u stvaranju preciznijih upita i olakšava ispravljanje upita koji vraćaju netočne rezultate.

Ovo je članak iz serije članaka o SQL jeziku za Access. Opisuje osnove korištenja SQL-a za dohvaćanje podataka i daje primjere SQL sintakse.

U ovom članku

Što je SQL?

SQL je programski jezik dizajniran za rad sa skupovima činjenica i odnosima između njih. Programi za upravljanje relacijskim bazama podataka kao što je Microsoft Office Access koriste SQL za manipuliranje podacima. Za razliku od mnogih programskih jezika, SQL je čitljiv i razumljiv čak i početnicima. Poput mnogih programskih jezika, SQL je međunarodni standard priznat od strane odbora za standarde kao što su ISO i ANSI.

Skupovi podataka opisani su u SQL-u kako bi pomogli odgovoriti na pitanja. Kada koristite SQL, morate koristiti ispravnu sintaksu. Sintaksa je skup pravila koja omogućuju ispravno kombiniranje elemenata jezika. SQL sintaksa temelji se na engleskoj sintaksi i dijeli mnoge elemente sa sintaksom Visual Basica za aplikacije (VBA).

Na primjer, jednostavna SQL naredba koja dohvaća popis prezimena za kontakte s imenom Mary može izgledati ovako:

SELECT Prezime
IZ Kontakti
WHERE Ime = "Marija";

Bilješka: SQL jezik se koristi ne samo za izvođenje operacija nad podacima, već i za stvaranje i promjenu strukture objekata baze podataka, kao što su tablice. Dio SQL-a koji se koristi za stvaranje i modificiranje objekata baze podataka naziva se DDL. DDL nije obuhvaćen ovim člankom. Za više informacija pogledajte Stvaranje ili izmjena tablica ili indeksa pomoću upita za definiciju podataka.

SELECT izjave

Naredba SELECT koristi se za opisivanje skupa podataka u SQL-u. Sadrži potpuni opis skupa podataka koje je potrebno dohvatiti iz baze podataka, uključujući sljedeće:

    tablice koje sadrže podatke;

    veze između podataka iz različitih izvora;

    polja ili izračuni na temelju kojih se biraju podaci;

    uvjete odabira koje moraju zadovoljiti podaci uključeni u rezultat upita;

    nužnost i način razvrstavanja.

SQL izjave

SQL naredba sastoji se od nekoliko dijelova koji se nazivaju klauzulama. Svaka klauzula u SQL izjavi ima svrhu. Potrebne su neke ponude. Donja tablica prikazuje najčešće korištene SQL naredbe.

SQL izjava

Opis

Obavezno

Definira polja koja sadrže potrebne podatke.

Definira tablice koje sadrže polja navedena u klauzuli SELECT.

Definira uvjete odabira polja koje moraju zadovoljiti svi zapisi uključeni u rezultate.

Određuje redoslijed sortiranja rezultata.

U SQL izrazu koji sadrži funkcije združivanja, specificira polja za koja vrijednost sažetka nije izračunata u klauzuli SELECT.

Samo ako su takva polja prisutna

SQL izraz koji sadrži funkcije združivanja definira uvjete koji se primjenjuju na polja za koja se izračunava vrijednost sažetka u klauzuli SELECT.

SQL pojmovi

Svaka SQL rečenica sastoji se od pojmova koji se mogu usporediti s dijelovima govora. Donja tablica prikazuje vrste SQL izraza.

SQL izraz

Usporedni dio govora

Definicija

Primjer

identifikator

imenica

Naziv koji se koristi za identifikaciju objekta baze podataka, kao što je naziv polja.

Klijenti [Broj telefona]

operater

glagol ili prilog

Ključna riječ koja predstavlja ili modificira radnju.

konstantno

imenica

Vrijednost koja se ne mijenja, kao što je broj ili NULL.

izraz

pridjev

Kombinacija identifikatora, operatora, konstanti i funkcija dizajniranih za izračunavanje jedne vrijednosti.

>= Proizvodi.[Cijena]

Osnovne SQL klauzule: SELECT, FROM i WHERE

Opći format SQL naredbi je:

SELECT field_1
IZ tablice_1
WHERE kriterij_1
;

Bilješke:

    Access ne poštuje prijelome redaka u SQL izjavama. Unatoč tome, preporuča se započeti svaku rečenicu u novom retku kako bi SQL naredba bila lako čitljiva i za osobu koja ju je napisala i za sve ostale.

    Svaka SELECT naredba završava točkom i zarezom (;). Točka-zarez se može pojaviti na kraju posljednje rečenice ili u zasebnom retku na kraju SQL naredbe.

Primjer u Accessu

Primjer u nastavku pokazuje kako bi SQL izjava za jednostavan upit za odabir mogla izgledati u Accessu.

1. SELECT klauzula

2. OD odredbe

3. WHERE klauzula

Pogledajmo primjer rečenicu po rečenicu da bismo razumjeli kako funkcionira SQL sintaksa.

SELECT klauzula

SELECT, tvrtka

Ovo je SELECT klauzula. Sadrži naredbu (SELECT) iza koje slijede dva identifikatora ("[Adresa e-pošte]" i "Tvrtka").

Ako identifikator sadrži razmake ili posebne znakove (na primjer, "Adresa e-pošte"), mora biti u pravokutnim zagradama.

Klauzula SELECT ne zahtijeva da navedete tablice koje sadrže polja i ne možete navesti uvjete odabira koje moraju ispuniti podaci uključeni u rezultate.

U SELECT naredbi, SELECT klauzula uvijek dolazi prije FROM klauzule.

FROM klauzula

IZ Kontakti

Ovo je FROM klauzula. Sadrži izjavu (FROM) nakon koje slijedi identifikator (Kontakti).

Klauzula FROM ne specificira polja za odabir.

WHERE klauzula

WHERE Grad="Seattle"

Ovo je klauzula WHERE. Sadrži izjavu (WHERE) iza koje slijedi izraz (City="Rostov").

Postoje mnoge stvari koje možete učiniti s klauzulama SELECT, FROM i WHERE. Za više informacija o korištenju ovih ponuda pogledajte sljedeće članke:

Razvrstavanje rezultata: ORDER BY

Kao i Microsoft Excel, rezultate upita možete razvrstati u tablicu u Accessu. Korištenjem klauzule ORDER BY, također možete odrediti kako se rezultati sortiraju kada se upit izvrši. Ako se koristi klauzula ORDER BY, mora se pojaviti na kraju SQL naredbe.

Klauzula ORDER BY sadrži popis polja za sortiranje, istim redoslijedom kojim će se sortiranje primijeniti.

Na primjer, pretpostavimo da najprije želite poredati rezultate prema polju Tvrtka silaznim redoslijedom, a zatim, ako postoje zapisi s istom vrijednošću polja Tvrtka, sortirati ih prema polju Adresa e-pošte uzlaznim redoslijedom. Klauzula ORDER BY bi izgledala ovako:

ORDER BY Company DESC,

Bilješka: Prema zadanim postavkama, Access razvrstava vrijednosti uzlaznim redoslijedom (A do Z, od najmanje do najveće). Da biste umjesto toga sortirali vrijednosti silaznim redoslijedom, morate navesti ključnu riječ DESC.

Za više informacija o klauzuli ORDER BY, pogledajte klauzulu ORDER BY.

Rad sa sažetim podacima: klauzule GROUP BY i HAVING

Ponekad postoji potreba za radom sa sažetim podacima, kao što je ukupna prodaja za mjesec ili najskuplji artikli na zalihama. Da biste to učinili, klauzula SELECT primjenjuje agregatnu funkciju na polje. Na primjer, ako biste pokrenuli upit da biste dobili broj adresa e-pošte za svaku tvrtku, klauzula SELECT mogla bi izgledati ovako:

Mogućnost korištenja određene agregatne funkcije ovisi o vrsti podataka u polju i željenom izrazu. Za više informacija o dostupnim agregatnim funkcijama pogledajte SQL Statističke funkcije.

Određivanje polja koja se ne koriste u agregatnoj funkciji: klauzula GROUP BY

Kada koristite agregatne funkcije, obično morate stvoriti klauzulu GROUP BY. Klauzula GROUP BY navodi sva polja na koja se ne primjenjuje agregatna funkcija. Ako se agregatne funkcije primjenjuju na sva polja u upitu, ne morate stvoriti klauzulu GROUP BY.

Klauzula GROUP BY mora odmah slijediti klauzulu WHERE ili FROM ako ne postoji klauzula WHERE. Klauzula GROUP BY navodi polja istim redoslijedom kao klauzula SELECT.

Nastavimo prethodni primjer. U klauzuli SELECT, ako se agregatna funkcija primjenjuje samo na polje [Adresa e-pošte], klauzula GROUP BY bi izgledala ovako:

GRUPIRAJ PO Tvrtki

Za više informacija o klauzuli GROUP BY pogledajte članak o klauzuli GROUP BY.

Ograničavanje agregiranih vrijednosti korištenjem uvjeta grupiranja: klauzula HAVING

Ako trebate navesti uvjete za ograničavanje rezultata, ali se polje na koje ih želite primijeniti koristi u agregatnoj funkciji, ne možete koristiti klauzulu WHERE. Umjesto toga treba koristiti klauzulu HAVING. Klauzula HAVING radi isto kao i klauzula WHERE, ali se koristi za agregirane podatke.

Na primjer, pretpostavimo da je funkcija AVG (koja izračunava prosjek) primijenjena na prvo polje u klauzuli SELECT:

SELECT COUNT(), Tvrtka

Ako želite ograničiti rezultate upita na temelju vrijednosti funkcije COUNT, ne možete primijeniti uvjet odabira na ovo polje u klauzuli WHERE. Umjesto toga, uvjet treba staviti u klauzulu HAVING. Na primjer, ako želite da vaš upit vrati retke samo ako tvrtka ima više adresa e-pošte, možete koristiti sljedeću klauzulu HAVING:

IMAJUĆI BROJ()>1

Bilješka: Upit može uključivati ​​i klauzulu WHERE i klauzulu HAVING, s uvjetima odabira za polja koja se ne koriste u statističkim funkcijama navedenim u klauzuli WHERE i uvjetima za polja koja se koriste u statističkim funkcijama u klauzuli HAVING.

Za više informacija o klauzuli HAVING pogledajte članak o klauzuli HAVING.

Kombiniranje rezultata upita: operator UNION

Operator UNION koristi se za simultani prikaz svih podataka koje vraća više sličnih upita odabira kao kombiniranog skupa.

Operator UNION omogućuje vam kombiniranje dvije SELECT naredbe u jednu. Izjave SELECT koje se spajaju moraju imati isti broj i redoslijed izlaznih polja s istim ili kompatibilnim tipovima podataka. Kada se upit izvrši, podaci iz svakog skupa podudarnih polja kombiniraju se u jedno izlazno polje, tako da izlaz upita ima onoliko polja koliko i svaka pojedinačna izjava SELECT.

Bilješka: U upitima za spajanje, numerički i tekstualni tipovi podataka su kompatibilni.

Pomoću operatora UNION možete odrediti trebaju li duplikati redaka, ako ih ima, biti uključeni u rezultate upita. Da biste to učinili, upotrijebite ključnu riječ SVE.

Upit za kombiniranje dvije SELECT izjave ima sljedeću osnovnu sintaksu:

SELECT field_1
IZ tablice_1
UNIJA
SELECT polje_a
IZ tablice_a
;

Na primjer, pretpostavimo da imate dvije tablice pod nazivom "Proizvodi" i "Usluge". Obje tablice sadrže polja s nazivom proizvoda ili usluge, podacima o cijeni i jamstvu, kao i polje koje označava ekskluzivnost ponuđenog proizvoda ili usluge. Iako tablice proizvoda i usluga pružaju različite vrste jamstava, osnovne informacije su iste (jesu li pojedinačni proizvodi ili usluge pod jamstvom). Možete koristiti sljedeći upit za spajanje za spajanje četiri polja iz dvije tablice:

ODABERITE ime, cijenu, jamstvo_dostupno, ekskluzivna_ponuda
OD proizvoda
UNIJA SVE
ODABERITE ime, cijenu, jamstvo_dostupno, ekskluzivna_ponuda
FROM usluge
;

Za više informacija o kombiniranju naredbi SELECT pomoću operatora UNION pogledajte

Prethodni članci raspravljali su o tim problemima. Razmatra se tehnologija za kreiranje strukture tablica baze podataka “sql_training_st.mdb” na temelju SQL upita. Osim toga, pomoću SQL upita popunjene su ACCESS DBMS tablice "sql_training_st.mdb".

Poznato je da je u relacijskim bazama podataka SQL jezik dizajniran za manipuliranje podacima, definiranje strukture baze podataka i njezinih komponenti, kontrolu korisničkog pristupa bazi podataka te upravljanje transakcijama ili upravljanje promjenama u bazi podataka.

SQL jezik se sastoji od četiri grupe:

  • jezik za manipulaciju podacima DML;
  • DDL Data Definition Language;
  • jezik za upravljanje podacima DCL;
  • TCL jezik kontrole transakcija.

Grupa DML uključuje četiri glavne vrste SQL upita:

  • INSERT - dizajniran za dodavanje jednog ili više zapisa na kraj tablice;
  • AŽURIRANJE - dizajnirano za promjenu postojećih zapisa u stupcima tablice ili izmjenu podataka u tablici;
  • DELETE - dizajniran za brisanje zapisa iz tablice;
  • SELECT - dizajniran za odabir podataka iz tablica.

O prva tri tipa SQL upita (INSERT, UPDATE, DELETE), koji se odnose na korektivne upite prema bazi, govorilo se na stranici

U ovom ćemo članku pogledati upite za dohvaćanje podataka iz tablica baze podataka programa Access.

Da biste dohvatili informacije pohranjene u bazi podataka programa Access 2003 ili 2007, možete upotrijebiti upit SELECT za odabir podataka iz tablica.

Sastavimo sljedeći SQL upit (SQL naredbu) za uzorkovanje; da to učinimo, odaberite SQL način izvršavanjem naredbe View/SQL Mode. Unesite sljedeću SQL naredbu s tipkovnice:

IZABERI *
OD Studenti;

Ova se izjava sastoji od dvije klauzule "SELECT *" i "FROM Students". Prva klauzula sadrži naredbu SELECT i identifikator * ("identifikator *" znači popis svih stupaca tablice). Druga klauzula sadrži naredbu FROM i identifikator "Studenti".

FROM - Definira tablicu Studenti koja sadrži polja navedena u klauzuli SELECT. Treba imati na umu da izborni upit uvijek sadrži dvije naredbe: SELECT i FROM. Ovisno o uvjetima odabira, drugi operateri mogu biti prisutni u zahtjevu za odabir. Slika 1 prikazuje snimku zaslona zahtjeva za dohvaćanje podataka.


Riža. 1. SQL SELECT upit za odabir podataka

U ovom primjeru, uzorak podataka generiran je iz svih stupaca tablice Studenti.

Spremite zahtjev pod nazivom "Studenti-upit1". Kao rezultat izvršavanja naredbe "Spremi", objekt će se pojaviti u "Navigacijskom području" - "Zahtjevi: Studenti-request1".

Nakon spremanja zahtjeva za odabir, morate ga izvršiti klikom na ikonu "Pokreni". Rezultati naredbe "Pokreni" prikazani su na sl. 2.



Riža. 2. Odabir podataka iz svih stupaca tablice Učenici