Upoznavanje sa SQL uputama; stvaranje jednostavnih SQL upita u Accessu korištenjem naredbe SELECT korištenjem operatora IN, BETWEEN, LIKE. sql upit u ms pristupu

Umetanje, brisanje, ažuriranje zapisa u bazi podataka

Metoda ExecuteReader() dohvaća objekt čitača podataka koji vam omogućuje pregled rezultata naredbe SQL Select korištenjem toka informacija samo za čitanje naprijed. Međutim, ako trebate izvršiti SQL naredbe koje mijenjaju podatkovnu tablicu, tada trebate pozvati metodu IzvršiNonQuery() ovog naredbenog objekta. Ova jedinstvena metoda dizajnirana je za izvođenje umetanja, promjena i brisanja, ovisno o formatu teksta naredbe.

Koncept neupit znači SQL naredbu koja ne vraća skup rezultata. Stoga su izjave Select upiti, ali izjave Insert, Update i Delete nisu. Sukladno tome, metoda ExecuteNonQuery() vraća int koji sadrži broj redaka na koje utječu ove izjave, umjesto novog skupa zapisa.

Da biste pokazali kako izmijeniti sadržaj postojeće baze podataka koristeći samo upit ExecuteNonQuery(), sljedeći korak je stvaranje vaše vlastite biblioteke za pristup podacima koja enkapsulira proces baze podataka AutoLot.

U stvarnom proizvodnom okruženju, vaša ADO.NET logika će gotovo sigurno biti izolirana u .NET .dll sklopu iz jednog jednostavnog razloga - ponovne upotrebe koda! To nije učinjeno u prethodnim člancima kako vas ne bi odvratilo od zadataka koji su pred vama. Ali bio bi gubitak vremena razvijati istu logiku povezivanja, istu logiku čitanja podataka i istu logiku izvršavanja naredbi za svaku aplikaciju koja treba raditi s AutoLot bazom podataka.

Izoliranjem logike pristupa podacima u biblioteci .NET koda, različite aplikacije s bilo kojim korisničkim sučeljem (u stilu konzole, u stilu desktopa, u stilu weba itd.) mogu pristupiti postojećoj biblioteci, čak i bez obzira na jezik. A ako razvijete biblioteku za pristup podacima u C#, onda će drugi .NET programeri moći stvoriti svoja korisnička sučelja na bilo kojem jeziku (na primjer, VB ili C++/CLI).

Naša biblioteka za pristup podacima (AutoLotDAL.dll) sadržavat će jedan prostor naziva (AutoLotConnectedLayer) koji će komunicirati s bazom podataka AutoLot koristeći ADO.NET povezane tipove.

Započnite stvaranjem novog projekta C# Class Library pod nazivom AutoLotDAL (skraćenica za "AutoLot Data Access Layer"), a zatim promijenite izvorni naziv datoteke C# koda u AutoLotConnDAL.cs.

Zatim preimenujte opseg imenskog prostora u AutoLotConnectedLayer i promijenite naziv izvorne klase u InventoryDAL, jer ova će klasa definirati različite članove dizajnirane za interakciju s tablicom inventara baze podataka AutoLot. Na kraju, uvezite sljedeće .NET prostore imena:

Korištenje sustava; koristeći System.Collections.Generic; koristeći System.Text; koristeći System.Data; koristeći System.Data.SqlClient; prostor imena AutoLotConnectedLayer ( javna klasa InventoryDAL ( ) )

Dodavanje logike veze

Naš prvi zadatak je definirati metode koje dopuštaju pozivnom procesu da se poveže s izvorom podataka i odspoji s njega pomoću važećeg niza veze. Budući da će naš sklop AutoLotDAL.dll biti tvrdo kodiran za korištenje tipova klasa System.Data.SqlClient, definirajte privatnu varijablu SqlConnection koja će biti dodijeljena kada se stvori InventoryDAL objekt.

Dodatno, definirajte metodu OpenConnection(), a zatim drugu CloseConnection() koja će komunicirati s ovom varijablom:

Javna klasa InventoryDAL ( private SqlConnection connect = null; public void OpenConnection(string connectionString) (connect = new SqlConnection(connectionString); connect.Open(); ) public void CloseConnection() (connect.Close(); ) )

Ukratko radi, tip InventoryDAL neće provjeravati sve moguće iznimke i neće izbaciti prilagođene iznimke kada naiđe raznim situacijama(na primjer, kada je niz veze neispravan). Međutim, ako ste gradili biblioteku pristupa proizvodnim podacima, vjerojatno biste morali koristiti tehnike rukovanja strukturiranim iznimkama da biste uzeli u obzir bilo kakve anomalije koje bi se mogle pojaviti tijekom izvođenja.

Dodavanje logike umetanja

Umetnuti novi unos u tablicu Inventar svodi se na formatiranje SQL naredbe Umetnuti(ovisno o korisničkom unosu) i pozivanje metode ExecuteNonQuery() pomoću objekta naredbe. Da biste to učinili, dodajte javnu metodu InsertAuto() klasi InventoryDAL koja uzima četiri parametra koji odgovaraju četirima stupcima tablice Inventory (CarID, Color, Make i PetName). Na temelju ovih argumenata generirajte redak za dodavanje novog unosa. Na kraju, izvršite SQL naredbu pomoću objekta SqlConnection:

Public void InsertAuto(int id, string color, string make, string petName) ( // SQL izjava string sql = string.Format("Insert In Inventory" + "(CarID, Make, Color, PetName) Values(@CarId, @ Make, @Color, @PetName)"); koristeći (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( // Dodaj parametre cmd.Parameters.AddWithValue("@CarId", id); cmd.Parameters.AddWithValue ("@Make", make); cmd.Parameters.AddWithValue("@Color", color); cmd.Parameters.AddWithValue("@PetName", petName); cmd.ExecuteNonQuery(); ) )

Definiranje klasa koje predstavljaju zapise u relacijskoj bazi podataka uobičajen je način stvaranja knjižnice za pristup podacima. Zapravo, ADO.NET Entity Framework automatski generira strogo tipizirane klase koje vam omogućuju interakciju s podacima baze podataka. Usput, samostalni sloj ADO.NET-a generira strogo tipizirane DataSet objekte za predstavljanje podataka iz dane tablice u relacijskoj bazi podataka.

Stvaranje SQL naredbe pomoću ulančavanja nizova može biti sigurnosni rizik (mislite na napade umetanjem SQL-a). Bolje je kreirati tekst naredbe pomoću parametriziranog upita, koji će biti opisan malo kasnije.

Dodavanje brisanja logike

Brisanje postojećeg zapisa nije ništa teže od umetanja novog zapisa. Za razliku od koda InsertAuto(), bit će prikazano jedno važno područje pokušaja/hvatanja koje obrađuje moguću situaciju u kojoj se pokuša ukloniti automobil koji je netko već naručio iz tablice Kupci. Dodajte sljedeću metodu klasi InventoryDAL:

Public void DeleteCar(int id) ( string sql = string.Format("Delete from Inventory where CarID = "(0)"", id); using (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( try ( cmd.ExecuteNonQuery(); ) catch (SqlException ex) ( Exception error = new Exception("Oprostite, ovaj stroj je na zaostaloj narudžbi!", ex); throw error; ) ) )

Dodavanje logike promjene

Kada se radi o ažuriranju postojećeg zapisa u tablici inventara, odmah se postavlja očito pitanje: što se točno može dopustiti da proces pozivanja promijeni: boju automobila, prijateljski naziv, model ili sve troje? Jedna od metoda maksimalno povećanje fleksibilnost - definiranje metode koja uzima parametar tipa string, koji može sadržavati bilo koju SQL naredbu, ali to je u najmanju ruku riskantno.

U idealnom slučaju, bolje je imati skup metoda koje dopuštaju procesu pozivanja da mijenja zapise različiti putevi. Međutim, za našu jednostavnu biblioteku pristupa podacima, definirat ćemo jednu metodu koja omogućuje procesu pozivanja da promijeni prijateljski naziv navedenog automobila:

Public void UpdateCarPetName(int id, string newpetName) ( string sql = string.Format("Update Inventory Set PetName = "(0)" Where CarID = "(1)"", newpetName, id); using (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( cmd.ExecuteNonQuery(); ) )

Dodavanje logike uzorkovanja

Sada moramo dodati metodu za odabir zapisa. Kao što je ranije prikazano, objekt čitača podataka određenog davatelja podataka omogućuje odabir zapisa pomoću pokazivača samo za čitanje. Pozivanjem metode Read() možete obraditi svaki zapis jedan po jedan. Sve je ovo super, ali sada moramo smisliti kako vratiti te zapise sloju pozivajuće aplikacije.

Jedan bi pristup bio dohvaćanje podataka pomoću metode Read(), a zatim popunjavanje i vraćanje višedimenzionalnog polja (ili drugog objekta poput generičkog popisa ).

Drugi način je vratiti System.Data.DataTable objekt, koji zapravo pripada samostalnom sloju ADO.NET. DataTable je klasa koja predstavlja tablični blok podataka (poput papira ili proračunske tablice).

Klasa DataTable sadrži podatke kao skup redaka i stupaca. Ove se zbirke mogu popuniti programski, ali tip DataTable ima metodu Load() koja ih može automatski popuniti pomoću objekta čitača podataka! Evo primjera gdje se podaci iz tablice inventara vraćaju kao tablica podataka:

Public DataTable GetAllInventoryAsDataTable() ( DataTable inv = new DataTable(); string sql = "Select * From Inventory"; using (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( SqlDataReader dr = cmd.ExecuteReader(); inv .Load(dr); dr.Close(); ) return inv; )

Rad s parametriziranim naredbenim objektima

Do sada smo u logici umetanja, ažuriranja i brisanja za tip InventoryDAL koristili tvrdo kodirane string literale za svaki SQL upit. Vjerojatno ste svjesni postojanja parametriziranih upita, koji vam omogućuju da SQL parametre tretirate kao objekte, a ne samo kao dio teksta.

Rad sa SQL upitima na više objektno orijentiran način ne samo da pomaže u smanjenju pogrešaka pri upisu (sa strogo tipiziranim svojstvima), već su parametrizirani upiti obično puno brži od upita string literala jer se analiziraju samo jednom (a ne svaki put). kao što se događa kada svojstvo CommandText postavljeno je na SQL niz). Dodatno, parametrizirani upiti štite od napada SQL injekcijom (dobro poznati sigurnosni problem pristupa podacima).

Da bi podržali parametrizirane upite, objekti naredbi ADO.NET održavaju kolekciju pojedinačnih objekata parametara. Prema zadanim postavkama, ova zbirka je prazna, ali možete dodati bilo koji broj parametarskih objekata koji odgovaraju parametri rezerviranog mjesta u SQL upitu. Ako trebate pridružiti parametar SQL upita članu zbirke parametara nekog naredbenog objekta, ispred SQL parametra stavite simbol @ (barem kada radite s Microsoft SQL Serverom, iako svi DBMS-ovi ne podržavaju ovu notaciju).

Postavljanje parametara pomoću tipa DbParameter

Prije nego počnemo stvarati parametrizirane upite, upoznajmo se s tipom DbParameter (osnovna klasa za objekte parametara pružatelja). Ova klasa ima niz svojstava koja vam omogućuju da odredite naziv, veličinu i vrstu parametra, kao i druge karakteristike, kao što je smjer gledanja parametra. Neka važna svojstva tipa DbParameter navedena su u nastavku:

DbType

Dobiva ili postavlja tip podataka iz parametra, predstavljen kao CLR tip

Smjer

Vraća ili postavlja vrstu parametra: samo ulaz, samo izlaz, ulaz i izlaz ili parametar za vraćanje vrijednosti

Je Nullable

Vraća ili postavlja može li parametar prihvatiti prazne vrijednosti

Naziv parametra

Dobiva ili postavlja naziv DbParameter

Veličina

Vraća ili postavlja maksimalnu veličinu podataka za parametar (korisno samo za tekstualne podatke)

Vrijednost

Vraća ili postavlja vrijednost parametra

Da bismo demonstrirali kako popuniti kolekciju naredbenih objekata s DBParameter-kompatibilnim objektima, prepišimo metodu InsertAuto() tako da koristi objekte parametara (sve druge metode mogu se preinačiti na sličan način, ali ovaj primjer će nam biti dovoljan):

Public void InsertAuto(int id, string color, string make, string petName) ( // SQL izjava string sql = string.Format("Insert In Inventory" + "(CarID, Make, Color, PetName) Values("(0) ","(1)","(2)","(3)")", id, make, color, petName); // Parametrizirana naredba pomoću (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( SqlParameter param = new SqlParameter(); param.ParameterName = "@CarID"; param.Value = id; param.SqlDbType = SqlDbType.Int; cmd.Parameters.Add(param); param = new SqlParameter(); param. ParameterName = "@Make"; param.Value = make; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@Color "; param.Value = boja; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@PetName"; param.Value = petName; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); ) )

Imajte na umu da SQL upit ovdje također sadrži četiri znaka rezerviranog mjesta, ispred svakog znaka @. Koristeći svojstvo ParameterName na tipu SqlParameter, možete opisati svaki od ovih rezerviranih mjesta i specificirati različite informacije (vrijednost, tip podataka, veličinu, itd.) na strogo tipiziran način. Nakon što su svi objekti parametara pripremljeni, dodaju se u kolekciju objekata naredbi pomoću poziva Add().

Ovdje se koriste različita svojstva za projektiranje objekata parametara. Međutim, imajte na umu da objekti parametara podržavaju brojne preopterećene konstruktore koji vam omogućuju postavljanje vrijednosti različitih svojstava (što rezultira kompaktnijom bazom koda). Također imajte na umu da Visual Studio 2010 ima različite grafičke dizajnere koji će automatski generirati mnogo ovog zamornog koda za manipuliranje parametrima umjesto vas.

Stvaranje parametriziranog upita često rezultira s više koda, ali rezultat je praktičniji način za programsko podešavanje SQL naredbi, kao i bolje performanse. Ova se tehnika može koristiti za bilo koji SQL upit, iako su parametrizirani upiti najkorisniji ako trebate pokrenuti pohranjene procedure.

Naredba SELECT nalaže mehanizmu baze podataka Microsoft Accessa da vrati informacije iz baze podataka kao skup zapisa.

Sintaksa

IZABERI [ predikat] { * | stol.* | [stol.]polje1 [, [stol.]polje2 [, ...]]}
IZ tablični_izraz [, ...]




Naredba SELECT uključuje sljedeće elemente.

Element

Opis

predikat

Jedan od sljedećih predikata: ALL, DISTINCT, DISTINCTROW ili TOP. Predikati se koriste za ograničavanje broja vraćenih zapisa. Ako nije dan predikat, zadana vrijednost je SVE.

Označava da su sva polja odabrana iz navedene tablice ili tablica.

stol

Naziv tablice koja sadrži polja s odabranim zapisima.

polje1, polje2

Nazivi polja koja sadrže podatke koje treba dohvatiti. Ako je navedeno više polja, podaci će se dohvaćati redoslijedom kojim su njihova imena navedena.

nadimak1, nadimak2

Nazivi koji se koriste kao naslovi stupaca umjesto izvornih naziva stupaca u stol.

tablični_izraz

Jedan ili više naziva tablica koje sadrže podatke koje treba dohvatiti.

vanjska_baza_podataka

Naziv baze podataka koja sadrži tablice navedene u komponenti tablični_izraz, ako nisu u trenutnoj bazi podataka.

Bilješke

Da bi izvršio ovu operaciju, mehanizam baze podataka Microsoft Access traži navedenu tablicu ili tablice, dohvaća navedene stupce, odabire retke koji zadovoljavaju uvjet i sortira rezultirajuće retke navedenim redoslijedom.

SELECT naredbe ne mijenjaju podatke u bazi podataka.

SELECT je obično prva riječ u SQL naredbi. SELECT i SELECT...INTO su najčešći SQL iskazi.

Minimalna sintaksa za naredbu SELECT je sljedeća:

IZABERI polja IZ stol

Možete koristiti zvjezdicu (*) za odabir svih polja u tablici. Primjer u nastavku pokazuje da tablica Zaposlenici ima odabrana sva polja.

SELECT * FROM Zaposlenici;

Ako je naziv polja uključen u više tablica u klauzuli FROM, ispred njega stavite naziv tablice i izjavu . (točka). U sljedećem primjeru, polje "Odjel" pojavljuje se u dvije tablice odjednom: "Zaposlenici" i "Menadžeri". Možete koristiti SQL naredbu za odabir odjela iz tablice Zaposlenici i imena rukovoditelja iz tablice Rukovoditelji.

SELECT Employees.Department, Supervisors.SupvName FROM Employees INNER JOIN Supervisors WHERE Employees.Department = Supervisors.Department;

Kada se stvori objekt RecordSet, naziv polja tablice koristi Microsoft Access Database Engine kao naziv objekta "Field" u objektu Skup zapisa. Ako naziv polja treba promijeniti ili ga ne daje izraz koji generira polje, upotrijebite rezerviranu riječ AS. Sljedeći primjer pokazuje kako se zaglavlje BirthDate koristi za imenovanje vraćenog objekta Polje u primljenom objektu Skup zapisa.

ODABERITE Datum rođenja KAO Rođenje od zaposlenika;

Kada koristite agregatne funkcije ili upite koji vraćaju dvosmislena ili dvostruka imena objekata Polje, morate koristiti klauzulu AS za dodjelu objekta Polje drugo ime. U donjem primjeru, vraćeni objekt Polje u primljenom objektu Skup zapisa dodjeljuje se naziv "Broj_zaposlenih".

SELECT COUNT(EmployeeID) AS HeadCount FROM Employees;

Kada radite s naredbom SELECT, možete koristiti dodatne klauzule za dodatno ograničavanje i organiziranje dohvaćenih podataka. Za više informacija pogledajte temu pomoći za ponudu koju koristite.

Ova lekcija je posvećena SQL upiti u bazu podataka na VBA pristup. Pogledat ćemo kako se postavljaju upiti INSERT, UPDATE, DELETE prema bazi podataka u VBA, a također ćemo naučiti kako dobiti određenu vrijednost iz SELECT upita.

Oni koji programiraju u VBA pristup a tijekom rada s bazom podataka SQL poslužitelja vrlo često se susreću s tako jednostavnim i potrebnim zadatkom kao što je slanje SQL upita bazi podataka, bilo da se radi o INSERT, UPDATE ili jednostavnom SQL SELECT upitu. A budući da smo programeri početnici, trebali bismo i ovo moći, pa ćemo danas učiniti upravo to.

Već smo se dotakli teme dobivanja podataka sa SQL poslužitelja, gdje smo napisali kod u VBA za dobivanje tih podataka, na primjer, u članku o Prijenos podataka u tekstualnu datoteku iz MSSql 2008, ili smo se također dotakli toga malo u materijalu Prijenos podataka iz Accessa u Word i Excel predložak, ali na ovaj ili onaj način, ovo smo površno pogledali, a danas predlažem da o tome razgovaramo malo detaljnije.

Bilješka! Svi primjeri u nastavku razmatraju se korištenjem projekta Access 2003 ADP i baze podataka MSSql 2008. Ako ne znate što je ADP projekt, pogledali smo to u materijalu Kako stvoriti i konfigurirati Access ADP projekt

Izvorni podaci za primjere

Recimo da imamo tablicu test_table koja će sadržavati brojeve i nazive mjeseci u godini (upiti koji se izvode pomoću Management Studio)

STVARAJ TABLICU .( NOT NULL, (50) NULL) U KRENU

Kao što sam već rekao, koristit ćemo ADP projekt konfiguriran za rad s MS SQL 2008, u kojem sam napravio testni obrazac i dodao gumb za pokretanje s potpisom "Trčanje", koji će nam trebati za testiranje našeg koda, tj. Napisat ćemo sav kod u rukovatelju događajima " Pritisak gumba».

Upiti prema bazi INSERT, UPDATE, DELETE u VBA

Kako ne bismo dugo odgađali, počnimo odmah, recimo da trebamo dodati red u našu testnu tablicu ( kod komentirao)/

Private Sub start_Click() "Deklarirajte varijablu za pohranjivanje niza upita Dim sql_query As String "U nju upišite upit koji nam je potreban sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Izvrši it DoCmd.RunSQL sql_query End Sub

U u ovom slučaju zahtjev se izvršava pomoću trenutnih parametara veze s bazom podataka. Možemo provjeriti jesu li podaci dodani ili ne.

Kao što vidite, podaci su ubačeni.

Da bismo izbrisali jednu liniju, napišemo sljedeći kod.

Private Sub start_Click() "Deklarirajte varijablu za pohranjivanje niza upita Dim sql_query As String "Upišite upit za brisanje u nju sql_query = "DELETE test_table WHERE id = 6" "Pokrenite DoCmd.RunSQL sql_query End Sub

Ako provjerimo, vidjet ćemo da je željena linija izbrisana.

Za ažuriranje podataka, pišite u varijablu sql_query zahtjev za ažuriranje, nadam se da je značenje jasno.

SELECT upit prema bazi podataka u VBA

Ovdje su stvari malo zanimljivije nego s drugim SQL konstrukcijama.

Prvo, recimo, trebamo dobiti sve podatke iz tablice, i npr. mi ćemo ih obraditi i prikazati u poruci, a vi ih naravno možete koristiti u druge svrhe, za to pišemo sljedeće kodirati

Private Sub start_Click() "Declare varijable "Za skup zapisa iz baze podataka Dim RS As ADODB.Recordset "Query string Dim sql_query As String "String za prikaz sažetih podataka u poruci Dim str As String "Kreiraj novi objekt za zapise set RS = New ADODB .Recordset "Linija upita sql_query = "SELECT id, name_mon FROM test_table" "Pokreni upit korištenjem trenutnih postavki veze projekta RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Prolazi kroz zapise Dok ne ( RS.EOF) "Ispunite varijablu za prikaz poruke str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "idite na sljedeći zapis RS.MoveNext Wend " Ispišite poruku msgbox str End Sub

Ovdje već koristimo VBA Access petlje za ponavljanje kroz sve vrijednosti u našem skupu zapisa.

Ali vrlo često je potrebno dobiti ne sve vrijednosti iz skupa zapisa, već samo jednu, na primjer, naziv mjeseca prema njegovom kodu. A da bismo to učinili, skupo je koristiti petlju, tako da možemo jednostavno napisati upit koji će vratiti samo jednu vrijednost i pristupiti joj, na primjer, dobit ćemo ime mjeseca pomoću koda 5

Private Sub start_Click() "Deklaraj varijable" Za skup zapisa iz baze podataka Dim RS As ADODB.Recordset "String upita Dim sql_query As String "String za prikaz konačne vrijednosti Dim str As String "Kreiraj novi objekt za skup zapisa RS = Novi ADODB.Recordset "Redak upita sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Pokreni upit koristeći trenutne postavke veze projekta RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Dohvati našu vrijednost str = RS. Polja(0) msgbox str End Sub

Radi univerzalnosti, ovdje smo se već pozabavili ne imenom ćelije, već njenim indeksom, tj. 0, a ovo je prva vrijednost u Skup zapisa, na kraju smo dobili vrijednost "Svibanj".

Kao što vidite, sve je vrlo jednostavno. Ako često trebate dobiti određenu vrijednost iz baze podataka ( kao u posljednjem primjeru), tada preporučujem ispisivanje cijelog koda u zasebnu funkciju (Kako napisati funkciju u VBA Access 2003) s jednim ulaznim parametrom, na primjer, šifrom mjeseca ( ako uzmemo u obzir naš primjer) i jednostavno tamo gdje je potrebno prikazati tu vrijednost pozovemo funkciju koja nam treba sa traženim parametrom i to je to, time ćemo značajno smanjiti VBA kod i poboljšati percepciju našeg programa.

To je sve za danas. Sretno!

Primjeri SQL upita mogu se koristiti za učenje i vježbanje pisanja SQL upita u MS Accessu.

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:


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:

ODABERITE dt, ID_proizvoda, iznos, cijena, iznos*cijena KAO ishod_zbroj,
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čki prosjek, MAX - maksimalna vrijednost, MIN – minimalna vrijednost naziva se agregatne funkcije. Oni prihvaćaju mnoge vrijednosti i nakon obrade vraćaju jednu vrijednost. Primjer izračuna zbroja umnoška polja iznosa i cijene pomoću agregatne funkcije SUM.

Pravila: uglate zagrade označavaju [neobavezni dio] konstrukcije. Okomita traka označava izbor između opcija (var1|var2). Elipsa znači moguće ponavljanje nekoliko puta - 1 put, 2 puta [, …]

SELECT izjava

Daje upute jezgri baze podataka Microsoftovi podaci Access vraća informacije iz baze podataka kao skup zapisa.

Sintaksa

IZABERI [ predikat] { * | stol.* | [stol.]polje1

[, [stol.]polje2 [, ...]]}
IZ tablični_izraz [, ...]




Naredba SELECT uključuje sljedeće elemente.

Element

Opis

Predikat

Jedan od sljedećih predikata: ALL, DISTINCT, DISTINCTROW ili TOP. Predikati se koriste za ograničavanje broja vraćenih zapisa. Ako nije dan predikat, zadana vrijednost je SVE.

Označava da su sva polja odabrana iz navedene tablice ili tablica

Stol

Naziv tablice iz čijih polja se biraju zapisi

polje1, polje2

Nazivi polja koja sadrže podatke koje treba dohvatiti. Ako je navedeno više polja, podaci će se dohvaćati redoslijedom kojim su njihova imena navedena

nadimak1, nadimak2

Imena koja se koriste kao naslovi stupaca umjesto originalnih naziva stupaca stolovi

tablični_izraz

Jedan ili više naziva tablica koje sadrže podatke koje treba dohvatiti.

vanjska_baza_podataka

Naziv baze podataka koja sadrži tablice navedene u komponenti tablični_izraz ako ih nema u trenutnoj bazi podataka

Bilješke

Da bi izvršio ovu operaciju, mehanizam baze podataka Microsoft Access pretražuje navedene tablice (tablice), dohvaća željene stupce, odabire retke koji ispunjavaju navedene uvjete i razvrstava ili grupira rezultirajuće retke navedenim redoslijedom.

Izjave SELECT ne mijenjaju podatke baze podataka.

Naredba SELECT je obično prva riječ SQL naredbe (SQL naredba (string). Izraz koji definira SQL naredba, kao što su SELECT, UPDATE ili DELETE, uključujući odredbe kao što su WHERE ili ORDER BY. SQL naredbe/nizovi obično se koriste u upitima i statističkim funkcijama.) Većina SQL naredbi su ili SELECT naredbe ili SELECT...INTO naredbe.

Minimalna sintaksa za naredbu SELECT je sljedeća:

IZABERI polja IZ stol

Možete koristiti zvjezdicu (*) za odabir svih polja u tablici. Sljedeći primjer odabire sva polja u tablici Zaposlenici.

SELECT * FROM Zaposlenici;

Ako je naziv polja uključen u više tablica u klauzuli FROM, ispred njega stavite naziv tablice i izjavu «.» (točka). U sljedećem primjeru, polje "Odjel" prisutno je u tablicama "Zaposlenici" i "Nadređeni". SQL naredba odabire odjele iz tablice Zaposlenici i imena nadređenih iz tablice Nadređeni.

SELECT Zaposlenici. Odjel, voditelji. Izvršni naziv FROM Employees INNER JOIN Rukovoditelji WHERE Employees. Odjel = Upravitelji. Odjel;

Kada stvorite objekt RecordSet, pogon baze podataka Microsoft Access koristi naziv polja tablice kao naziv objekta "Field" u objektu RecordSet. Ako naziv polja treba promijeniti ili ga ne daje izraz koji generira polje, upotrijebite rezerviranu riječ (Rezervirana riječ. Riječ koja je element jezika, kao npr. Visual Basic. Rezervirane riječi uključuju nazive instrukcija, ugrađenih funkcija i tipova podataka, metoda, operatora i objekata.) AS. Sljedeći primjer pokazuje kako se zaglavlje "Dan" koristi za imenovanje vraćenog objekta Polje u primljenom objektu RecordSet.

ODABERITE rođendan KAO dan OD zaposlenika;

Kada radite s agregatnim funkcijama ili upitima koji vraćaju dvosmislena ili identična imena objekata Polje, trebali biste upotrijebiti klauzulu AS za stvaranje drugog naziva objekta Polje. U sljedećem primjeru, vraćeni objekt Polje u primljenom objektu RecordSet dobiva naziv "Popis stanovništva".

SELECT COUNT(EmployeeCode) AS Census FROM Employees;

Kada radite s naredbom SELECT, možete koristiti dodatne klauzule za dodatno ograničavanje i organiziranje dohvaćenih podataka. Za više informacija pogledajte temu pomoći za ponudu koju koristite.

FROM klauzula

Određuje tablice i upite koji sadrže polja navedena u naredbi SELECT.

Sintaksa

IZABERI lista_polja
IZ tablični_izraz

Izjava SELECT koja sadrži klauzulu FROM uključuje sljedeće elemente:

Element

Opis

lista_polja

tablični_izraz

Izraz koji definira jednu ili više tablica - izvora podataka. Izraz može biti naziv tablice, pohranjeni naziv upita ili izraz rezultata konstruiran pomoću operatora INNER JOIN, LEFT JOIN ili RIGHT JOIN

vanjska_baza_podataka

Puni put do vanjske baze podataka koja sadrži sve tablice navedene u tablični_izraz

Bilješke


Potrebna je prisutnost klauzule FROM nakon naredbe SELECT.

Redoslijed kojim su tablice navedene tablični_izraz nema veze.

Korištenje povezanih tablica (Povezana tablica. Tablica koja je spremljena u datoteku koja nije dio otvorene baze podataka, ali je dostupna iz Microsoft Accessa. Korisnik može dodavati, brisati i mijenjati zapise u povezanoj tablici, ali ne može mijenjati njenu strukturu .) umjesto klauzule IN, možete učiniti proces dohvaćanja podataka iz vanjske baze podataka lakšim i učinkovitijim.

Primjer u nastavku pokazuje kako dohvatiti podatke iz tablice Zaposlenici.

SELECT Prezime, Ime

OD Zaposlenika;

Označava odabrane zapise za SQL upite (SQL (Structured Query Language). Strukturirani upitni i programski jezik baze podataka koji se naširoko koristi za pristup, postavljanje upita, ažuriranje i manipuliranje podacima u relacijskim DBMS-ovima.)

Sintaksa

IZABERI ]]
IZ stol

Izjava SELECT koja sadrži ove predikate uključuje sljedeće komponente:

komponenta

Opis

Podrazumijeva se ako nisu uključeni predikati. Mašina baze podataka Microsoft Access odabire sve zapise koji odgovaraju uvjetima SQL naredbe (SQL naredbe (string). Izraz koji definira SQL naredbu, kao što je SELECT, UPDATE ili DELETE, i uključuje klauzule, kao što su WHERE ili ORDER BY SQL naredbe/nizovi obično se koriste u upitima i statističkim funkcijama). Sljedeća dva identična primjera pokazuju kako vratiti sve zapise iz tablice Zaposlenici.

OD Zaposlenika

ORDER BY EmployeeCode;

OD Zaposlenika

ORDER BY EmployeeCode;

Isključuje zapise koji sadrže duple podatke u odabranim poljima. Samo jedinstvene vrijednosti svakog od polja navedenih u izjavi SELECT uključene su u rezultate upita. Na primjer, neki zaposlenici navedeni u tablici Zaposlenici mogu imati isto prezime. Ako dva zapisa sadrže prezime "Ivanov" u polju Prezime, sljedeća SQL naredba vraća samo jedan zapis koji sadrži prezime "Ivanov".

SELECT DISTINCT Prezime

Ako je komponenta DISTINCT izostavljena, upit vraća oba zapisa s prezimenom "Ivanov".

Ako klauzula SELECT sadrži više polja, kombinacija svih vrijednosti polja uključena je u rezultate upita samo ako je jedinstvena za taj zapis.

Rezultati upita koji koristi komponentu DISTINCT ne ažuriraju se kako bi odražavali naknadne promjene koje su napravili drugi korisnici.

Isključuje podatke iz zapisa koji se ponavljaju u cijelosti umjesto da sadrže pojedinačna polja s istim podacima. Pretpostavimo da je kreiran upit koji povezuje tablice “Kupci” i “Narudžbe” pomoću polja “Šifra kupca”. Tablica Kupci ne sadrži dvostruka ID polja kupaca, ali ona postoje u tablici Narudžbe jer svaki kupac može imati više narudžbi. Sljedeća SQL izjava pokazuje kako koristiti komponentu DISTINCTROW za popis organizacija koje su napravile barem jednu narudžbu, bez spominjanja pojedinosti tih narudžbi.

SELECT DISTINTROW Naslov FROM Customers INNER JOIN Narudžbe

ON klijenti. CustomerId = Narudžbe. Kod klijenta

ORDER BY Naslov;

Ako je komponenta DISTINCTROW izostavljena, upit rezultira s više redaka za svaku organizaciju koja je naručivala više puta.

Komponenta DISTINCTROW stupa na snagu samo pri odabiru polja iz neke od tablica korištenih u upitu. Komponenta DISTINCTROW se zanemaruje ako upit uključuje samo jednu tablicu ili ako se polja dohvaćaju iz svih tablica.

VRH n

Vraća navedeni broj zapisa koji su među prvim ili posljednjim zapisima u rasponu određenom klauzulom ORDER BY. Recimo da želite prikazati imena 25 najboljih učenika iz razreda 1994.

Ime prezime

WHERE GraduationYear = 2003

ORDER BY GradePointAverage DESC;

Ako ne uključite klauzulu ORDER BY, upit će vratiti nasumični skup od 25 zapisa iz tablice Studenti koji zadovoljavaju klauzulu WHERE.

Predikat TOP ne uključuje izbor između jednakih vrijednosti. Kad bi 25. i 26. zapis u prethodnom primjeru imali isti GPA, upit bi vratio 26 zapisa.

Također možete koristiti PERCENT rezerviranu riječ za dohvaćanje određenog postotka prvih ili zadnjih zapisa u rasponu određenom klauzulom ORDER BY. Pretpostavimo da umjesto 25 najboljih, želite prikazati najnižih 10% učenika u maturalnom razredu.

ODABERITE TOP 10 POSTO

Ime prezime

WHERE GraduationYear = 2003

ORDER BY GradePointAverage ASC;

ASC predikat specificira izlaz vrijednosti iz donjeg dijela raspona. Vrijednost koja slijedi nakon TOP predikata mora biti vrijednost tipa Integer (Cjelobrojni tip podataka. Osnovni tip podataka koji se koristi za pohranu cjelobrojnih vrijednosti. Vrsta varijable Cijeli broj je pohranjen kao 64-bitni (8-bajtni) broj u rasponu od -32768 do 32767.) bez predznaka.

TOP predikat ne utječe na to može li se upit ažurirati.

stol

Naziv tablice iz koje se dohvaćaju zapisi.

vidi također

SELECT izjava

FROM klauzula

WHERE klauzula

Određuje koji se zapisi iz tablica navedenih u klauzuli FROM obrađuju naredbama SELECT, UPDATE ili DELETE.

Sintaksa

IZABERI lista_polja
IZ tablični_izraz
GDJE odabir_uvjeta

Izjava SELECT koja sadrži klauzulu WHERE uključuje sljedeće dijelove.

Dio

Opis

lista_polja

Naziv polja ili polja koja se dohvaćaju zajedno sa svim aliasima (Alias ​​(SQL). Alternativni naziv za tablicu ili polje u izrazu. Aliasi se obično koriste kao kraći nazivi tablica ili polja radi lakšeg naknadnog referiranja u programa, za sprječavanje dvosmislenih referenci i za dobivanje opisnijih imena prilikom prikaza rezultata upita.), predikate (ALL, DISTINCT, DISTINCTROW ili TOP) ili s bilo kojim drugim parametrom SELECT naredbe.

tablični_izraz

Naziv tablice ili tablica iz kojih se podaci dohvaćaju.

odabir_uvjeta

Izraz (Izraz. Kombinacija matematičkih i logičkih operatora, konstanti, funkcija, naziva polja, kontrola i svojstava koja rezultira jednom vrijednošću. Izraz može izvoditi izračune, obraditi tekst ili potvrditi podatke.) koji mora odgovarati uključenim zapisima u rezultatima upita.

Bilješke

Mašina baze podataka Microsoft Access odabire zapise koji ispunjavaju uvjete navedene u klauzuli WHERE. Ako klauzula WHERE nije navedena, upit vraća sve retke u tablici. Ako upit specificira više tablica, ali ne navodi klauzulu WHERE ili JOIN, upit proizvodi kartezijanski umnožak (kartezijanski umnožak. Rezultat je izvršavanja SQL naredbe SELECT koja ima FROM klauzulu koja upućuje na dvije ili više tablica, a nema WHERE ili JOIN klauzula koja specificira metodu spajanja.) tablice.

Odredba WHERE nije potrebna, ali ako se koristi, mora slijediti klauzulu FROM. Na primjer, možete odabrati sve zaposlenike iz odjela prodaje (WHERE Department = "Sales") ili sve klijente u dobi od 18 do 30 godina (WHERE Age Between 18 And 30).

Ako se klauzula JOIN ne koristi za SQL operaciju spajanja na više tablica, rezultirajući objekt Postavljen rekord bit će nemoguće ažurirati.

Klauzula WHERE slična je klauzuli HAVING i specificira odabrane zapise. Nakon što su zapisi grupirani klauzulom GROUP BY, klauzula HAVING također određuje zapis koji će se prikazati.

Klauzula WHERE koristi se za isključivanje zapisa koji se ne moraju grupirati pomoću klauzule GROUP BY.

Koristite različite izraze da odredite koje zapise vraća SQL naredba. Na primjer, sljedeća SQL izjava odabire sve zaposlenike čija plaća premašuje RUR.

SELECT Prezime, Plaća FROM Zaposlenici WHERE Plaća > 21000;

WHERE klauzula može sadržavati do 40 izraza povezanih logičkim operatorima (na primjer, I I ILI).

Ako unesete naziv polja koji sadrži razmake ili interpunkcijske znakove, morate ga staviti u uglate zagrade (). Na primjer, tablica s detaljima o kupcima može sadržavati podatke o određenim kupcima.

ODABIR [korisnikov omiljeni restoran]

Određivanje argumenta odabir_uvjeta, datumski literali (Datumski literal. Bilo koji niz znakova u važećem formatu, okružen znakovima brojeva (#). Važeći formati su format datuma naveden u postavkama jezika i standarda, i univerzalni format datumi.) trebaju biti predstavljeni u američkom formatu, čak i ako koristite neameričku verziju mehanizma baze podataka Microsoft Access. Na primjer, datum "10. svibnja 1996." zapisan je kao 10/5/96 u Velikoj Britaniji i kao 05/10/1996 u Rusiji. Ne zaboravite staviti literale datuma u znakove brojeva (#), kao što je prikazano u primjerima u nastavku.

Da biste pronašli zapise za 10. svibnja 1996. u bazi podataka Ujedinjenog Kraljevstva, koristite sljedeće upute SQL:

SELECT * FROM Orders WHERE Datum otpreme = #10.05.1996#;

Također možete koristiti funkciju DatumVrijednost, priznajući skup međunarodnih parametara Microsoft Windows®. Na primjer, za Rusiju koristite ovaj kod:

SELECT * FROM Orders WHERE Datum otpreme = DateValue("05/10/1996");

A sljedeći kod je za UK:

SELECT * FROM Orders WHERE Datum otpreme = DateValue("10/5/96");

Bilješka. Ako je stupac naveden u retku kriterija odabira tipa GUID (ID replike (GUID). 16-bajtno polje u Microsoft Access bazi podataka koje se koristi za jedinstvenu identifikaciju replikacije. GUID-ovi se koriste za identifikaciju replika, skupova replika, tablica, zapisa i drugi objekti. U Microsoft Access bazama podataka, GUID kodovi se nazivaju replika kodova.), uvjeti odabira koriste nešto drugačiju sintaksu.

WHERE ReplicaID = (GUID (AB-CDEF0ABCDEF))

Provjerite jesu li ugniježđene zagrade i crtice ispravno postavljene.

Izvorna stranica: http://office. /ru-ru/access/HA.aspx? pid=CH

GROUP BY klauzula

Kombinira zapise s istim vrijednostima koje se nalaze na navedenom popisu polja u jedan zapis. Vrijednost sažetka stvara se za svaki zapis ako je SQL funkcija agregacije uključena u naredbu SELECT, kao što je Iznos ili Računati.

Sintaksa

IZABERI lista_polja
IZ stol
GDJE uvjet_odabranja

Izjava SELECT koja sadrži klauzulu GROUP BY uključuje sljedeće elemente:

Element

Opis

lista_polja

Imena polja koja se dohvaćaju zajedno sa svim aliasima (Alias ​​(SQL). Alternativni naziv za tablicu ili polje u izrazu. Aliasi se obično koriste kao kraći nazivi tablica ili polja radi lakšeg naknadnog upućivanja u programima, kako bi se spriječile dvosmislene reference i kako bi se dobili informativniji nazivi prilikom prikaza rezultata upita.) i statistički SQL funkcije, predikate (ALL, DISTINCT, DISTINCTROW ili TOP) ili druge parametre naredbe SELECT

stol

odabir_uvjeta

Uvjet odabira. Ako izjava sadrži klauzulu WHERE, nakon što se primijeni na zapise, vrijednosti će biti grupirane pomoću mehanizma baze podataka Microsoft Access.

popis_polja_grupe

popis_polja_grupe

Bilješke

Klauzula GROUP BY nije obavezna.

Ako SQL statističke funkcije nisu uključene u naredbu SELECT, sažete vrijednosti se ne izračunavaju.

GROUP BY vrijednosti polja koje su Null (Null. Vrijednost koja se može unijeti u polje ili koristiti u izrazima i upitima za označavanje podataka koji nedostaju ili su nepoznati. U Visual Basicu ključna riječ Null navodi vrijednost Null. Neka polja, kao što su polja primarnog ključa, ne mogu sadržavati Null vrijednosti.) su grupirani i nisu izostavljeni. Međutim, vrijednosti Null ne procjenjuju niti jedna od SQL statističkih funkcija.

Odredba WHERE koristi se za izuzimanje redaka koji se ne moraju grupirati. Klauzula HAVING koristi se za filtriranje zapisa nakon grupiranja.

Polja s popisa polja GROUP BY koja ne sadrže tip podataka Memo (tip podataka MEMO polje. Vrsta podataka polja u bazi podataka Microsoft Access. MEMO polje može sadržavati do 65535 znakova.) ili OLE objekt (vrsta podataka OLE polje objekta ). Tip podataka polja koji se koristi za spremanje objekata iz drugih aplikacija povezanih ili ugrađenih u Microsoft Access bazu podataka.) može referencirati bilo koje polje u bilo kojoj tablici navedenoj u klauzuli FROM, čak i ako polje nije uključeno u naredbu SELECT. Za to je dovoljno imati barem jednu SQL statističku funkciju u naredbi SELECT. Motor baze podataka Microsoft Access ne dopušta grupiranje po poljima koja sadrže podatke MEMO polja ili OLE objekta.

Sva polja na popisu polja SELECT moraju biti sadržana u klauzuli GROUP BY ili biti argumenti SQL funkcije agregacije.

vidi također

SELECT izjava

SELECT...INTO izjava

Predikati SVE, DISTINCT, DISTINCTROW, TOP

FROM klauzula

IMAJU ponudu

ORDER BY klauzula

WHERE klauzula

SQL statističke funkcije

Izvorna stranica: http://office. /ru-ru/access/HA.aspx? pid=CH

IMAJU ponudu

Definira grupirane zapise koji bi se trebali pojaviti u naredbi SELECT s klauzulom GROUP BY. Nakon što su zapisi grupirani klauzulom GROUP BY, klauzula HAVING će prikazati one koji ispunjavaju uvjete.

Sintaksa

IZABERI lista_polja
IZ stol
GDJE odabir_uvjeta
GRUPIRAJ PO popis_polja_grupe

Izjava SELECT koja sadrži klauzulu HAVING uključuje sljedeće elemente:

Element

Opis

lista_polja

Imena polja koja se učitavaju zajedno sa svim aliasima (Alias ​​​​(SQL). Alternativni naziv za tablicu ili polje u izrazu. Aliasi se obično koriste kao kraći nazivi tablica ili polja radi lakšeg naknadnog upućivanja u programima, kako bi se spriječile dvosmislene reference i kako bi se dobila informativnija imena pri prikazivanju rezultata upita.) i SQL statističke funkcije, predikati (ALL, DISTINCT, DISTINCTROW ili TOP) ili s drugim parametrima naredbe SELECT.

stol

Naziv tablice iz koje se učitavaju zapisi

uvjet_odabranja

Uvjet odabira. Ako naredba sadrži klauzulu WHERE, mehanizam baze podataka Microsoft Access grupirat će vrijednosti nakon što se primijeni na zapise.

popis_polja_grupe

Imena polja (do 10) koja se koriste za grupiranje zapisa. Redoslijed imena u popis_polja_grupe određuje razinu grupiranja – od najviše prema najnižoj

uvjet_grupe

Izraz koji navodi zapise koji će se prikazati

Bilješke

Klauzula HAVING nije obavezna.

Klauzula HAVING slična je klauzuli WHERE koja određuje odabir zapisa. Nakon grupiranja zapisa s klauzulom GROUP BY, klauzula HAVING određuje zapise koji će se prikazati.

SELECT TypeCode,

Iznos (na zalihama)

OD proizvoda

GROUP BY TypeCode

HAVING Sum(InStock) > 100 i kao "TEL*";

Klauzula HAVING može sadržavati do 40 izraza povezanih logičkim operatorima kao što su I I Ili.

Izvorna stranica: http://office. /ru-ru/access/HA.aspx? pid=CH

ORDER BY klauzula

Razvrstava zapise koje vraća upit uzlaznim ili silaznim redoslijedom vrijednosti navedenih polja.

Sintaksa

IZABERI lista_polja
IZ stol
GDJE uvjet_odabranja
[, polje2 ][, ...]]]

Izjava SELECT koja sadrži klauzulu ORDER BY uključuje sljedeće elemente.

Element

Opis

lista_polja

Imena polja koja se dohvaćaju zajedno sa svim aliasima (Alias ​​(SQL). Alternativni naziv za tablicu ili polje u izrazu. Aliasi se obično koriste kao kraći nazivi tablica ili polja radi lakšeg naknadnog upućivanja u programima, kako bi se spriječile dvosmislene reference i kako bi se dobila informativnija imena pri prikazivanju rezultata upita.) i SQL statističke funkcije, predikati (ALL, DISTINCT, DISTINCTROW ili TOP) ili s drugim parametrima naredbe SELECT.

stol

Naziv tablice iz koje se dohvaćaju zapisi

odabir_uvjeta

Uvjeti odabira. Ako naredba sadrži klauzulu WHERE, nakon što se primijeni na zapise, motor baze podataka Microsoft Accessa će odrediti vrijednosti zapisa

polje1, polje2

Nazivi polja po kojima su zapisi sortirani.

Bilješke

Klauzula ORDER BY nije obavezna. Trebalo bi ga koristiti kada trebate prikazati podatke u sortiranom obliku.

Zadani redoslijed sortiranja je (Redoslijed sortiranja. Način raspoređivanja podataka na temelju njihovih vrijednosti i vrste. Podaci se mogu sortirati po abecedi, numeričkim vrijednostima ili po datumu. Redoslijed sortiranja može biti uzlazni (0 do 100, A do Z) ili silazno (od 100 do 0, od Z do A).) uzlazno (od A do Z, od 0 do 9). Donji primjeri pokazuju sortiranje imena zaposlenika po prezimenu.

SELECT Prezime, Ime

OD Zaposlenika

ORDER BY Prezime;

SELECT Prezime, Ime

OD Zaposlenika

ORDER BY Prezime ASC;

Za sortiranje polja silaznim redoslijedom (Z do A, 9 do 0), dodajte rezerviranu riječ DESC nazivu svakog polja. Sljedeći primjer pokazuje sortiranje silaznim redoslijedom na temelju plaća zaposlenika.

SELECT Prezime, Plaća

OD Zaposlenika

ORDER BY Plaća DESC, Prezime;

Ako navedete polja u klauzuli ORDER BY koja sadrže podatke tipa MEMO Field (Memo Field tip podataka. Vrsta podataka polja u Microsoft Access bazi podataka. MEMO polje može sadržavati do 65.535 znakova.) ili OLE Object Field (OLE Object Vrsta podataka polja "Vrsta podataka polja koja se koristi za spremanje objekata iz drugih aplikacija povezanih ili ugrađenih u Microsoft Access bazu podataka.), to će generirati pogrešku. Sustav baze podataka Microsoft Access ne može sortirati ove vrste polja.

Klauzula ORDER BY obično je posljednja klauzula u SQL izjavi (SQL izjava (string). Izraz koji definira SQL naredbu, kao što je SELECT, UPDATE ili DELETE, i uključuje klauzule, kao što su WHERE ili ORDER BY. SQL izjave /nizovi se obično koriste u upitima i statističkim funkcijama.).

Možete uključiti dodatna polja u klauzulu ORDER BY. Zapisi se najprije sortiraju prema polju koje je prvo navedeno u klauzuli ORDER BY. Zapisi s istim vrijednostima u prvom polju zatim se sortiraju prema polju navedenom u drugom i tako dalje.
vidi također

SELECT izjava

SELECT...INTO izjava

Predikati SVE, DISTINCT, DISTINCTROW, TOP

FROM klauzula

GROUP BY klauzula

IMAJU ponudu

WHERE klauzula

SQL statističke funkcije

Izvorna stranica: http://office. /ru-ru/access/HA.aspx? pid=CH

INNER JOIN operacija

Spaja zapise iz dvije tablice ako povezujuća polja tih tablica sadrže iste vrijednosti.

Sintaksa

IZ stol 1 UNUTARNJI SPOJ tablica 2 NA stol 1.polje1 tablica operatora_usporedbe2.polje2

Operacija INNER JOIN sastoji se od sljedećih elemenata:

Element

Opis

stol 1, tablica 2

Nazivi tablica koje sadrže zapise koji se spajaju

polje1, polje2

Nazivi polja koja se povezuju. Nenumerička polja moraju biti iste vrste podataka (Vrsta podataka. Karakteristika polja koja definira vrstu podataka koje polje može sadržavati. Postoje sljedeće vrste podaci: Boolean, Integer, Long, Currency, Single, Double, Date, String i Variant (zadano).) i sadrže podatke iste vrste. Međutim, nazivi tih polja mogu biti različiti

operator_usporedbe

Bilo koji operator usporedbe: (=,<, >, <=, >= ili<>)