Deklaratat e aksesit Sql. Njohja me deklaratat SQL; krijimi i pyetjeve më të thjeshta SQL në Access duke përdorur komandën SELECT duke përdorur deklaratat IN, BASHKU, LIKE

Gjuha SQL nuk ka funksionet e një gjuhe zhvillimi të plotë, por është e përqendruar në aksesin e të dhënave, prandaj përfshihet në mjetet e zhvillimit të programit. Në këtë rast, quhet SQL e ngulitur. Standardi i gjuhës SQL mbështetet nga zbatimet moderne të gjuhëve të mëposhtme të programimit: PL / 1, Ada, C, COBOL, Fortran, MUMPS dhe Pascal.

Në sistemet e specializuara për zhvillimin e aplikacioneve të tipit klient-server, mjedisi i programimit, përveç kësaj, zakonisht plotësohet mjete komunikimi(krijimi dhe shkëputja e lidhjeve me serverët e bazës së të dhënave, zbulimi dhe përpunimi i gabimeve që ndodhin në rrjet, etj.), mjetet e zhvillimit të ndërfaqes së përdoruesit, mjetet e projektimit dhe të korrigjimit.

Ekzistojnë dy metoda kryesore të përdorimit të SQL të ngulitur: statike dhe dinamike.

statike përdorimi i gjuhës (SQL statike) teksti i programit përmban thirrje drejt funksioneve të gjuhës SQL, të cilat janë të koduara në modulin e ekzekutueshëm pas përpilimit. Ndryshimet në funksionet e thirrura mund të jenë në nivel parametrat individualë thirrjet duke përdorur variablat e gjuhës programuese.

dinamike përdorimi i gjuhës (SQL dinamike) supozohet ndërtimi dinamik i thirrjeve drejt funksioneve SQL dhe interpretimi i këtyre thirrjeve, për shembull, qasja në të dhëna nga një bazë të dhënash në distancë, gjatë ekzekutimit të programit. Metoda dinamike përdoret zakonisht në rastet kur aplikacioni nuk e njeh paraprakisht llojin e thirrjes SQL dhe është ndërtuar në një dialog me përdoruesin.

Qëllimi kryesor i gjuhës SQL (si dhe gjuhëve të tjera për të punuar me bazat e të dhënave) është të përgatisë dhe ekzekutojë pyetje. Si rezultat i marrjes së të dhënave nga një ose më shumë tabela, mund të merren shumë regjistrime, të quajtura përfaqësim.

Performancaështë në thelb një tabelë që gjenerohet si rezultat i ekzekutimit të një pyetjeje. Mund të themi se është një lloj kërkese e ruajtur. Pamje të shumta mund të ndërtohen nga të njëjtat tabela. Vetë pamja përshkruhet duke specifikuar identifikuesin e pamjes dhe kërkesën që duhet bërë për ta marrë atë.



Për lehtësinë e punës me pamje, koncepti i një kursori është futur në gjuhën SQL. Kursorinështë një lloj treguesi i përdorur për të lundruar nëpër regjistrues gjatë përpunimit të tyre.

Përshkrimi dhe përdorimi i kursorit në gjuhën SQL është si më poshtë. Në pjesën narrative të programit, ju lidhni një ndryshore CURSOR në një deklaratë SQL (zakonisht një deklaratë SELECT). Në pjesën e programit që po ekzekutohet, kursori hapet (HAPUR<имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>...) e ndjekur nga trajtimi i duhur, dhe në fund mbyllja e kursorit (MBYLL<имя курсора>).

Në DBMS -të relacionale, për të kryer operacione mbi marrëdhëniet, përdoren dy grupe gjuhësh, të cilat kanë si bazë matematikore gjuhët teorike të pyetjeve të propozuara nga E. Codd:

Algjebër relacionale;

Llogaritja relacionale.

Në algjebrën relacionale operandet dhe rezultatet e të gjitha veprimeve janë marrëdhënie. Gjuhët algjebër relacionale janë procedurale në atë që një lidhje që rezulton nga një pyetje kundër një baze të dhënash relacionale llogaritet duke ekzekutuar një sekuencë të operatorëve relacional të aplikuar në lidhje. Operatorët përbëhen nga operandë relacionalë dhe operacione relacionale.

Veprimet e algjebrës relacionale të Codd mund të ndahen në dy grupe: baza set-teorike dhe relacionale speciale... Grupi i parë i operacioneve përfshin operacionet klasike të teorisë së bashkësive: bashkimi, ndryshimi, kryqëzimi dhe produkti. Grupi i dytë përfaqëson zhvillimin e operacioneve konvencionale të teorisë së vendosur drejt problemeve reale të manipulimit të të dhënave, ai përfshin operacionet: projeksionin, përzgjedhjen, ndarjen dhe lidhjen.

Gjuhët llogaritëse janë jo-procedurale (përshkruese ose deklarative) dhe ju lejojnë të shprehni pyetje duke përdorur një kallëzues të rendit të parë (deklarata e funksionit) që duhet të plotësojnë çiftet ose domenet relacionale. Një pyetje e bazës së të dhënave e ekzekutuar duke përdorur një gjuhë të ngjashme përmban vetëm informacion në lidhje me rezultatin e dëshiruar. Këto gjuhë kanë një sërë rregullash për të shkruar pyetje. Në veçanti, SQL i përket gjuhëve të këtij grupi.

Karakteristikat e aplikimit Pyetjet SQL

Një pyetje SQL është një pyetje që krijohet duke përdorur një deklaratë SQL. Shembuj të pyetjeve SQL janë pyetjet e bashkimit, pyetjet e serverit, pyetjet e kontrollit dhe pyetjet vartëse.

Një pyetje e bashkimit është një pyetje që kombinon fushat (kolonat) nga një ose më shumë tabela ose pyetje në një fushë ose kolonë të vetme në grupin e regjistrimeve që rezultojnë. Për shembull, gjashtë shitës i paraqesin listat e artikujve në dispozicion menaxhmentit çdo muaj. Pasi të krijoni një kërkesë për bashkim, mund t'i kombinoni këto inventarë në regjistrimin e rezultateve dhe më pas të hartoni një pyetje për krijimin e tabelës bazuar në pyetjen e bashkimit.

Pyetja e serverit transmeton komandat SQL përmes ODBC në server, për shembull Microsoft SQL Server... Pyetjet e serverit ju lejojnë të punoni drejtpërdrejt me tabelat në server në vend që t'i bashkoni ato. Rezultati i ekzekutimit të një pyetjeje në server mund të jetë ngarkimi i regjistrimeve ose ndryshimi i të dhënave.

Një pyetje kontrolli krijon ose modifikon objekte të bazës së të dhënave siç janë tabelat e Accessit ose tabelat e SQL Server.

Nënpyetja përbëhet nga një deklaratë SQL SELECT brenda një pyetjeje tjetër përzgjedhjeje ose ndryshimi. Këto udhëzime futen në rreshtin Fusha të formularit të kërkesës për të përcaktuar një fushë të re, ose në rreshtin Kriteret për të përcaktuar një kusht të përzgjedhjes së fushës. Pyetjet e skllevërve përdoren për të bërë sa më poshtë:

Kontrollimi i ekzistencës së disa rezultateve në një nënpyetje duke përdorur fjalët e rezervuara EXISTS ose NO EXISTS;

Kërkoni pyetjen kryesore për çdo vlerë që është e barabartë, më e madhe ose më e vogël se vlerat e kthyera në nënpyetje (duke përdorur fjalët e rezervuara ANY, IN, ose ALL);

Krijimi i pyetjeve vartëse brenda pyetjeve vartëse (pyetjeve vartëse të vendosura).

Gjuha SQL në Access mund të përdoret në zhvillimin e ekraneve, raporteve, si dhe në krijimin e makrove dhe programeve VBA.

Marrëdhënia midis QBE dhe SQL

Qasja ka një marrëdhënie të ngushtë midis gjuhëve QBE dhe SQL. Tabelat e pyetjeve (format, format) në gjuhën QBE, të plotësuara nga përdoruesi, konvertohen në shprehje SQL para ekzekutimit të drejtpërdrejtë. Kjo do të thotë, gjuha SQL është standardi i brendshëm për ekzekutimin e pyetjeve. Ky mekanizëm ka përparësinë që lejon Access -in të unifikojë përgatitjen e pyetjeve për ekzekutim në kompjuterët lokalë dhe të largët brenda sistemit Access. Në rastin e fundit, mesazhi SQL në të vërtetë transmetohet në kompjuter - serveri i pyetjeve.

Në Access, një pyetje mund të jetë në një nga tre mënyrat (gjendjet): Design, SQL dhe Table. Mënyra e projektimit përdoret për të hartuar një pyetje të re nga e para (pa përdorur magjistarë ose mjete të tjera) ose për të ndryshuar paraqitjen e një pyetjeje ekzistuese. Mënyra SQL përdoret për të futur ose parë deklaratat SQL. Mënyra e tabelës përdoret për të punuar me rezultatet e një pyetjeje.

SQL në Format dhe Raportet

Burimet kryesore të regjistrimeve në ekranet dhe raportet janë tabelat dhe pyetjet. Në rastin e dytë, një pyetje mund të jetë një pyetje e gatshme për bazën e të dhënave ose e krijuar gjatë zhvillimit të një formulari ose raporti.

SQL në makro

Makrot janë pjesë e makrove që përdoren për të automatizuar ekzekutimin e veprimeve të përsëritura shpesh në punën me një bazë të dhënash. Një makro është një ose më shumë makro me argumente.

Makrot thirren nga dritarja e bazës së të dhënave ose automatikisht kur ndodhin ngjarje të caktuara. Ngjarja me të cilën quhet makro mund të jetë, për shembull, shtypja e një butoni në zonën e formularit ose hapja e një dritareje të bazës së të dhënave. Së bashku me kryerjen e disa veprimeve në objektet e bazës së të dhënave, makrot mund të thërrasin makro të tjera, programe Visual Basic dhe aplikacione të jashtme.

Nga shumë makro, dy makro lidhen drejtpërdrejt me SQL: Drejtoni SQL dhe OpenQuery

Makro Run Pyetja SQL ekzekuton një pyetje për ndryshimin ose kontrollin e Accessit duke përdorur deklaratën e duhur SQL. Ky makro bën të mundur kryerjen e veprimeve në një makro pa i ruajtur pyetjet e para. Pyetjet e ruajtura gjithashtu mund të ekzekutohen duke përdorur një makro.

Ndryshoni kërkesat janë deklarata SQL që zbatojnë funksionet e mëposhtme: shtoni (INSERT INTO), fshini (DELETE), krijoni një tabelë (SELECT ... INTO) dhe përditësoni (UPDATE)

Pyetjet e kontrollit janë deklarata SQL që kryejnë funksionet e mëposhtme: krijoni një tabelë (CREATE TABLE), modifikoni një tabelë (ALTER TABLE), hidhni një tabelë (DROP TABLE), krijoni një indeks (CREATE INDEX) dhe lëshoni një indeks (DROP INDEX)

Argumenti i vetëm dhe i kërkuar për makron Drejtimi i një pyetjeje SQLështë një deklaratë SQL. Argumenti i komandës makro në formën e tekstit SQL - deklaratat futen manualisht në dritaren e hyrjes makro ose kopjohen nga dritarja SQL, e cila shpesh është më e përshtatshme.

Makro Hapni Kërkesën ju lejon të hapni një pyetje të zgjedhur ose të kryqëzuar (në mënyrat e tabelës, projektimit dhe shikimit paraprak), të ekzekutoni një pyetje për modifikim ose futje të të dhënave.

Makro merr tre argumente: emrin e kërkesës, modalitetin dhe modalitetin e të dhënave. Argumenti i parë është emri i kërkesës për tu hapur dhe kërkohet. Argumenti i dytë vendos mënyrën e hapjes së pyetjes (Tabela, Dizajni dhe Pamja). Argumenti i tretë përshkruan mënyrën e futjes së të dhënave në kërkesë ("Shto", "Ndrysho" dhe "Vetëm Lexo")

SQL në Programet VBA

VBA, si makro, është krijuar për të automatizuar operacionet e përsëritura në objektet e bazës së të dhënave Access.

Qasja siguron mënyrat e mëposhtme për të nisur programet VBA:

Përfshirja e programit në procedurën e trajtimit të ngjarjeve;

Thirrja e një funksioni në një shprehje;

Thirrja e një procedure nën në një procedurë tjetër ose në një dritare të korrigjimit;

Ekzekutimi i makros RunCode në një makro.

Funksionet përdoren në shprehje që përcaktojnë fushat e llogaritura në forma, raporte ose pyetje. Shprehjet përdoren për të specifikuar kushtet në pyetjet dhe filtrat, si dhe në makro, deklarata dhe metoda VBA, dhe deklarata SQL. Një nën -procedurë mund të përfshijë rutinat publike VBA që thirren nga procedura të tjera.

Le të shikojmë se si të ekzekutojmë një pyetje të bazës së të dhënave duke përdorur deklaratat SQL në një program Visual Basic për Aplikime.

Pyetja zgjedh regjistrimet në bazën e të dhënave që plotësojnë kushte të caktuara (një pyetje për përzgjedhje), ose lëshohet një udhëzim për të kryer veprimet e specifikuara me regjistrime që plotësojnë kushte të caktuara (një pyetje ndryshimi).

Ka mënyrat e mëposhtme për të bërë pyetje:

Thirrja e metodës Execute (për të ekzekutuar kërkesat për ndryshim SQL);

Krijimi dhe ekzekutimi i një objekti të veçantë QueryDef;

Përdorimi i një deklarate SQL si argument për metodën OpenRecordset;

Ekzekutimi i metodës OpenRecordset në një objekt ekzistues QueryDef;

Thirrja e metodave RunSQL dhe OpenQuery.

Ekzekutoni metodën përdoret nëse kërkohet të bëhet një ndryshim i tillë në bazën e të dhënave në të cilën regjistrimet nuk kthehen. Për shembull, operacionet për të futur ose fshirë regjistrimet.

Objekti QueryDefështë një përkufizim i pyetjes së ruajtur në bazën e të dhënave. Mund të mendohet si një deklaratë e përpiluar SQL.

Metoda OpenRecordset përdoret për të hapur një objekt të tipit Recordset për kryerjen e operacioneve të mëvonshme në të.

Metoda RunSQL ekzekuton një makro Drejtimi i një pyetjeje SQL në një program VBA

Metoda e OpenQuery ekzekuton makron OpenQuery në një program VBA. Mund të përdoret për të hapur një pyetje në modalitetin Table, Design ose View. Kjo përcakton një nga mënyrat e mëposhtme të punës me të dhëna: shtoni, ndryshoni ose vetëm për lexim.

Zgjedhja e opsionit të ekzekutimit të pyetjes përcaktohet nga programuesi, duke marrë parasysh veçoritë e problemit që zgjidhet.

Artikujt e mëparshëm kanë mbuluar çështjet. Merret parasysh teknologjia e krijimit të strukturës së tabelave të bazës së të dhënave "sql_training_st.mdb" bazuar në pyetjet SQL. Përveç kësaj, duke përdorur pyetjet SQL, tabelat e bazës së të dhënave ACCESS "sql_training_st.mdb" u mbushën.

Dihet që në bazat e të dhënave relacionale, gjuha SQL ka për qëllim manipulimin e të dhënave, përcaktimin e strukturës së bazave të të dhënave dhe përbërësve të saj, kontrollin e aksesit të përdoruesit në bazën e të dhënave dhe menaxhimin e transaksioneve ose menaxhimin e ndryshimeve në bazën e të dhënave.

Gjuha SQL përbëhet nga katër grupe:

  • gjuha e manipulimit të të dhënave DML;
  • gjuha e definimit të të dhënave DDL;
  • gjuha e menaxhimit të të dhënave DCL;
  • gjuha e menaxhimit të transaksioneve TCL.

Grupi DML përfshin katër lloje kryesore të pyetjeve SQL:

  • INSERT - i krijuar për të shtuar një ose më shumë regjistrime në fund të tabelës;
  • UPDATE - i krijuar për të ndryshuar regjistrimet ekzistuese në kolonat e tabelës ose për të modifikuar të dhënat në një tabelë;
  • FSHIJ - i krijuar për të fshirë regjistrimet nga tabela;
  • SELECT - i krijuar për të zgjedhur të dhënat nga tabelat.

Tre llojet e para të pyetjeve SQL (INSERT, UPDATE, DELETE), të cilat lidhen me pyetjet korrigjuese në bazën e të dhënave, u diskutuan në faqe

Në këtë artikull, ne do të shqyrtojmë pyetjet për marrjen e të dhënave nga tabelat e bazës së të dhënave Access.

Për të tërhequr informacionin e ruajtur në një bazë të dhënash të Access 2003 ose 2007, mund të përdorni një pyetje SELECT për të zgjedhur të dhënat nga tabelat.

Le të kompozojmë pyetjen e mëposhtme SQL (deklarata SQL) për një përzgjedhje, për këtë ne zgjedhim mënyrën SQL duke ekzekutuar komandën View / SQL Mode. Futni deklaratën e mëposhtme SQL nga tastiera:

SELECT *
NGA Nxënësit;

Kjo deklaratë përbëhet nga dy klauzola "SELECT *" dhe "NGA Studentët". Klauzola e parë përmban një deklaratë SELECT dhe një identifikues * ("identifikues *" do të thotë të shfaqësh të gjitha kolonat në tabelë). Klauzola e dytë përmban klauzolën FROM dhe identifikuesin "Studentët".

NGA - përcakton tabelën "Studentët" që përmban fushat e specifikuara në klauzolën SELECT. Duhet të theksohet se ka gjithmonë dy deklarata në një pyetje të zgjedhur: SELECT dhe FROM. Operatorët e tjerë mund të jenë të pranishëm në kërkesën e përzgjedhjes, në varësi të kushteve të përzgjedhjes. Figura 1 tregon një pamje të ekranit të një kërkese për marrjen e të dhënave.


Oriz. 1. Zgjedhni pyetjen për përzgjedhjen e të dhënave

Në këtë shembull, një mostër e të dhënave është formuar nga të gjitha kolonat e tabelës Studentët.

Ne e ruajmë pyetjen me emrin "Studentët-Pyetja1". Si rezultat i ekzekutimit të komandës "Ruaj", një objekt do të shfaqet në "Paneli i navigimit" - "Pyetje: Studentët -Pyetja1".

Pasi të ruani pyetjen tuaj të zgjedhur, duhet ta ekzekutoni pyetjen duke klikuar ikonën Run. Rezultatet e komandës "Run" janë treguar në Fig. 2



Oriz. 2. Marrja e të dhënave nga të gjitha kolonat e tabelës Studentët


Krahasimi i Microsoft Access SQL dhe ANSI SQL Microsoft Access SQL përputhet kryesisht me ANSI-89 (Niveli 1) disa veçori ANSI SQL nuk përdoren në Microsoft Access SQL Microsoft Access SQL përdor fjalë dhe veçori të rezervuara që nuk mbështeten nga ANSI SQL In Access 2000 (MS Jet 4.0) shtesa të shtuara që e afrojnë gjuhën me standardin ANSI SQL -92 - mënyra është e disponueshme vetëm kur përdorni MS OLE DB Provider për Jet


SELECT sintaksa e komandës SELECT (Microsoft Access) SELECT [predikat] ( * | tabela. * | [Table.] Field_1 [, [table.] Field_2 [, ...]]) NGA shprehja [, ...] NGA klauzola SELECT lista NGA fushat shprehja Shprehja është një shprehje që identifikon një ose më shumë tabela nga të cilat mund të merren të dhënat. Kjo shprehje mund të jetë emri i një tabele individuale, emri i një kërkese të ruajtur, ose rezultati i një operacioni të brendshëm, të majtë, ose të bashkimit të drejtë. BASHKIMI I BRENDSHM, LINI JOIN PRFUNDIMIN E DREJT.


ZGJIDH Argumentet e Deklaratës Një kallëzues (GJITHA, DISTINCT, DISTINCTROW, ose TOP) është një nga kriteret e përzgjedhjes. Predikatet përdoren për të kufizuar numrin e regjistrimeve të kthyera. Nëse ato mungojnë, kallëzuesi ALL përdoret si parazgjedhje (zgjedh të gjitha regjistrimet që përputhen me kushtet e specifikuara në deklaratën SQL). SQL DISTINCT - përjashton regjistrimet që përmbajnë vlera të kopjuara në fushat e zgjedhura. DISTINCTROW - Hedh të dhëna të bazuara në regjistrime krejtësisht të përsëritura sesa në fusha individuale përsëritëse. Kallëzuesi DISTINCTROW injorohet nëse pyetja përmban vetëm një tabelë ose të gjitha fushat e të gjitha tabelave. TOP n - Kthen një numër të caktuar të regjistrimeve në fillim ose në fund të diapazonit të përshkruar duke përdorur klauzolën ORDER BY. SELECT]] NGA tabela e 5 departamenteve më të shumta: SELECT TOP 5. punonjës. [Kodi i departamentit], Numri (emri i punonjësve) SI numri_ i_punonjësve NGA punonjës GRUPI NGA punonjës.


SELECT Deklarata e Argumenteve Tabela është emri i tabelës nga e cila do të zgjidhen regjistrimet. ME OPSIONIN E PRONWSIS - Përdoret në një mjedis të sigurt të grupit të punës me shumë përdorues për t'i dhënë përdoruesit që punon me lejet e kërkesës që përputhen me ato të pronarit të kërkesës. fushë_1, fushë_2 - emrat e fushave nga të cilat duhet të zgjidhen të dhënat. Nëse përfshini fusha të shumta, ato do të merren sipas rendit të treguar. Alias_1, Alias_2 janë emra që do të bëhen titujt e kolonave në vend të emrave të kolonave origjinale në tabelë. Shprehje - emrat e një ose më shumë tabelave që përmbajnë të dhënat e zgjedhura Baza e të dhënave të jashtme - emri i bazës së të dhënave që përmban tabelat e specifikuara duke përdorur argumentin e shprehjes, nëse ato nuk janë në bazën e të dhënave aktuale. SELECT punonjës, emri i plotë, [paga] * 0.5 AS Bonus NGA punonjësi; SELECT Mesatar (punonjës.report) AS Average_port FROM punonjës;


Përpunimi i përbashkët i disa tabelave SELECT punonjësi.emri, subjekti. [Emri i subjektit të shkurtër] NGA punonjësi BASHKIMI I BRENDSHM (subjekti BASHKIMI I Brendshëm [zotërimi i subjekteve] N subject subjekt. [Kodi i lëndës] = [posedimi i subjekteve]. [Kodi i disiplinës]) ON punonjësi.kodi = [posedimi i artikujve]. [kodi i punonjësve];




Midis ... Dhe shprehjes 1 NDRMJET shprehjes 2 DHE shprehjes 3 (në Microsoft Access SQL, shprehja 2 mund të jetë më e madhe se shprehja 3, por në ANSI SQL nuk është). SELECT punonjës.emër, punonjës.report NGA punonjësi KU ((((punonjës.report) Mes 1000 dhe 2000)); Pyetje: SELECT punonjës.emër, punonjës.report NGA punonjësi KU ((((punonjës.report) Midis 2000 Dhe 1000)); nuk jep një gabim dhe jep të njëjtën përgjigje SELECT punonjës.emër, punonjës.reportoni NGA punonjësi KU ((((punonjësi.reporti) 15000)); ZGJIDHni punonjësin.


Karakteret e modelit Karaktere të ndryshme të modelit përdoren me kallëzuesin Like. MS Access SQL ANSI SQL model karakter një karakter? _ (nënvizoni) grupin e karaktereve *% personazh i vetëm në char-list [char-list] personazh i vetëm që mungon jo në char-list [! char_list] mungon Dy veçoritë e fundit janë Access vetëm Në Access 2000, modaliteti ANSI SQL-92 mund të përdorë karaktere wildcard ANSI. Ju nuk mund të përzieni karaktere në një pyetje SELECT punonjës. NGA punonjësi WHERE (((punonjës. Emri i plotë) Si "D *"));


GROUP BY SELECT lista e klauzolave ​​të Fushave NGA Tabela KU KUSHT Gjendja e përzgjedhjes ku Fushat e grupuara janë emrat e fushave (deri në 10) që përdoren për të grupuar regjistrimet. Rendi i emrave të fushave në argumentin Groupable Fields përcakton nivelin e grupimit për secilën nga këto fusha. Përdorni klauzolën WHERE për të përjashtuar regjistrimet nga grupimi dhe klauzolën HAVING për të aplikuar një filtër në regjistrat pas grupimit. Duke pasur kur përdorni klauzolën GROUP BY, të gjitha fushat në listën e fushave të deklaratës SELECT duhet ose të përfshihen në klauzolën GROUP BY ose të përdoren si argumente për një funksion të përgjithshëm SQL. Departamentet me më shumë se 5 punonjës: SELECT Punonjës [Kodi i Departamentit], Numërimi (Emri i Punonjësit i Plotë) AS [Numri_Punë] NGA GRUPI I Punonjësve NGA Punonjësi [Kodi i Departamentit] HAVING (((Numri (Emri i plotë i punonjësit))> 5)); 5));">




Kërkesë e vendosur. Ekziston kallëzues. SELECT Punonjësi, Numërimi (Punonjësi) SI Numri_Certifikata_PUNA NGA Punonjësi KU KU (((Ekziston (ZGJIDH punonjësin e dalluar nga punonjësi INNER JOIN Ex ON Employee = Kopjoni Punonjësin)) Fals)) GRUPI NGA kompania e punonjësve; E rreme)) GROUP NGA kompania e punonjësve; "> E gabuar)) GROUP NGA kompania e punonjësve;"> E gabuar)) GROUP NGA kompania e punonjësve; "title =" (! LANG: Nënpyetje. Parafjalë Ekziston. ZGJIDH kompaninë e punonjësve, Numëroni (Punonjësi i Punonjësit) AS Number_Cattest_ Punonjës NGA Punonjësi KU (((Ekziston (SELECT DISTINCT Employee Company, Employee Employee NROM Employee INNER JOIN Kopjo ON Punonjësi = Kopjo Punonjës))) Fals)) GRUPI NGA Kompania e Punonjësve;"> title="Kërkesë e vendosur. Ekziston kallëzues. SELECT Punonjësi, Numërimi (Punonjësi) SI Numri_Certifikata_PUNA NGA Punonjësi KU KU (((Ekziston (ZGJIDH punonjësin e Dalluar, Punonjës NGA Punonjësi INNER JOIN Ex ON Punonjësi = Kopjo Punonjës)) Fals)) GRUPI NGA kompania e punonjësve;"> !}








Krijimi i një nënpyetjeje duke përdorur QBE Query Builder Nëse jeni duke përdorur një nënpyetje për të përcaktuar kushtet për një fushë, futni një deklaratë SELECT në një qelizë në rreshtin e Kritereve në kolonën e asaj fushe. Deklarata SELECT duhet të jetë e mbyllur në kllapa.








Fshirja e shënimeve. Pyetja SQL (e krijuar) FSHIJ studentin DISTINCTROW. EMRI I PLOT NGA NX studentNSI KU KU (((student.FULLNAME) = "Burlak GN"));


DELETE statement Një kërkesë fshirje fshin të gjithë regjistrimin, jo vetëm përmbajtjen e fushave të specifikuara. Për të fshirë të dhënat për një fushë të caktuar, krijoni një kërkesë për azhurnimin e rekordeve që zëvendëson vlerat ekzistuese me vlerat Null Fshini pyetjen pa kushtet e dhëna lookup do të fshijë të gjitha regjistrimet nga tabela. Ndryshe nga komanda DROP, struktura e tabelës dhe të gjitha vetitë ruhen.


Fshirja e shënimeve. Pyetje SQL Pyetje: FSHIH * NGA NX studentNSI KU KU student. Emri i plotë = "Burlak GN"; jep një rezultat të ngjashëm.



















35





41



Krijimi i një Tabele të Projektimit të Fuqisë me DDL

Çdo gjë që mund të bëni për të përcaktuar një bazë të dhënash duke përdorur një mjet RAD si Access mund të bëhet gjithashtu duke përdorur SQL. Në këtë rast, në vend që të klikoni në artikujt e menysë, futni komanda duke përdorur tastierën. Ata që preferojnë të manipulojnë grafikë zbulojnë se mjetet RAD janë të lehta dhe të natyrshme për tu kuptuar dhe mësuar. Të tjerët, të cilët preferojnë të vënë fjalë në fjali që kanë një logjikë të caktuar, mendojnë se komandat SQL janë më të lehta dhe më të natyrshme. Meqenëse disa gjëra janë të lehta për tu paraqitur duke përdorur paradigmën e objektit dhe të tjerat janë të lehta për tu trajtuar duke përdorur SQL, është e dobishme të njiheni me të dyja metodat.

Në seksionet e mëposhtme, do të përdorni SQL për të kryer të njëjtat hapa për të krijuar, modifikuar dhe lëshuar një tabelë që keni përdorur mjetin RAD në seksionin e mëparshëm.

Përdorimi i SQL me Microsoft Access

Qasja u krijua si një mjet i zhvillimit të shpejtë të aplikacioneve (RAD) që nuk kërkon kodim. Megjithëse mund të shkruani dhe ekzekutoni komandat SQL direkt në Access, gjithashtu mund të hyni nga dera e pasme për ta bërë këtë. Për të hapur redaktorin kryesor të përdorur për të futur kodin SQL, ndiqni këto hapa.

  1. Hapni bazën e të dhënave dhe më pas zgjidhni opsionin Queries nga lista e Objekteve.
  2. Në panelin e detyrave në anën e djathtë të dritares, zgjidhni opsionin Krijo pyetje në modalitetin e projektimit. Shfaqet kutia e dialogut Shto Tabela.
  3. Zgjidhni ndonjë nga tabelat, klikoni butonat Shto dhe Mbyll. Injoroni kursorin që pulson në dritaren e Kërkimit të krijuar rishtas.
  4. Në menunë kryesore Access, zgjidhni Shikoni modalitetin SQL. Një dritare e redaktuesit shfaqet me një deklaratë start SQL SELECT.
  5. Hiqeni deklaratën SELECT dhe më pas futni deklaratën e kërkuar SQL.
  6. Kur të përfundoni, klikoni në ikonën Ruaj. Qasja ju bën të futni një emër për të sapokrijuarin të kësaj kërkese.
  7. Vendosni një emër për pyetjen dhe klikoni butonin OK.

Komanda që sapo krijuat do të ruhet dhe ekzekutohet më vonë si kërkesë. Fatkeqësisht, Access nuk ekzekuton gamën e plotë të komandave SQL. Për shembull, nuk ekzekuton komandën CREATE TABLE. Sidoqoftë, pasi të krijohet tabela, mund të kryeni pothuajse çdo transformim të dëshiruar në të dhënat në të.

Krijimi i një tryeze

Kur punoni me një DBMS me funksion të plotë si Microsoft SQL Server, Oracle 9i ose IBM DB2, duhet të futni të njëjtin informacion kur krijoni një tabelë duke përdorur SQL siç do të bënit kur krijoni një tabelë duke përdorur një mjet RAD. Dallimi këtu është se mjeti RAD ju ndihmon ta bëni këtë duke ju siguruar një dialog të krijimit të tabelës (ose ndonjë strukturë të ngjashme) dhe duke mos ju lejuar të hyni emra të gabuar fushat, llojet ose madhësitë. SQL nuk do t'ju japë aq shumë vëmendje. Kur punoni me SQL, duhet të dini saktësisht se çfarë të bëni që në fillim. Ju duhet të futni një deklaratë të tërë CREATE TABLE para se SQL t'i kushtojë vëmendje asaj, e lëre më t'ju tregojë nëse ka ndonjë gabim në deklaratë.

Komanda e mëposhtme krijon një tabelë identike me atë të krijuar më parë:

KRIJONI TABEL PowerSQL
PropozimiNumri INT I VOGL
Emri CHAR (15),
Mbiemri CHAR (20),
Adresë CHAR (30),
Qyteti CHAR (25),
Provinca e Shtetit CHAR (2),
Kodi Postar CHAR (10),
Vend CHAR (30),
Telefon CHAR (14),
Si dihet CHAR (30),
Propozim CHAR (50),
BusinOrCharity CHAR (1);

Siç mund ta shihni, informacioni është në thelb i njëjtë me atë kur krijoni një tabelë duke përdorur mjetet RAD (siç përshkruhet më herët në këtë kapitull). Mund të preferohet çdo metodë e krijimit të tabelave. Sidoqoftë, ajo që është e mirë për SQL është shkathtësia e saj. E njëjta sintaksë standarde do të funksionojë në çdo sistem të menaxhimit të bazës së të dhënave.

Mbani mend:
Çdo përpjekje e bërë të mësuarit SQL, do të justifikohet për një kohë të gjatë, sepse kjo gjuhë nuk do të largohet shpejt nga skena. Dhe përpjekja e investuar për t'u bërë ekspert në mjedisin e zhvillimit ka të ngjarë të sjellë më pak kthime. Dhe sado i mrekullueshëm të jetë mjeti i fundit RAD, të jeni të sigurt se do të zëvendësohet me teknologji më të përparuar brenda dy deri në tre vjet. Greatshtë mirë nëse gjatë kësaj kohe ju mund të rimbursoni përpjekjet që bëni për të mësuar ky instrument! Përdoreni nëse mundeni. Dhe nëse nuk mundeni, atëherë do të ishte më e mençur t'i përmbaheni ilaçit të vjetër dhe të provuar. Njohja e SQL do të paguajë dividentë për shumë më gjatë
.

Një pyetje SQL mund të futet brenda një tjetre. Një nënpyetje nuk është asgjë më shumë se një pyetje brenda një pyetjeje. Në mënyrë tipike, një nënpyetje përdoret në një klauzolë WHERE. Por ka mënyra të tjera për të përdorur nën -pyetje gjithashtu.

Kërkesa Q011. Informacioni në lidhje me produktet nga tabela m_produkt shfaqet, kodet e të cilave janë gjithashtu në tabelën m_income:

SELECT *
NGA produkti m_
KU ID N IN (SELECT product_id FROM m_income);

Kërkesa Q012. Shfaqet lista e produkteve nga tabela m_product, kodet e të cilave nuk janë në tabelën m_outcome:

SELECT *
NGA produkti m_
KU ID JO N IN (SELECT product_id FROM m_outcome);

Kërkesa Q013. Kjo pyetje SQL shfaq një listë unike të kodeve të produkteve dhe emrave që kanë kode në tabelën m_income por jo në tabelën m_outcome:

SELECT DISTINCT product_id, titulli
NGA m_të ardhura BASHKIMI i brendshëm m_produkt
ON m_income.product_id = m_product.id
KU produkti_NUK INSHT IN (SELECT product_id FROM m_comecome);

Kërkesa Q014. Një listë unike e kategorive shfaqet nga tabela m_kategori, emrat e të cilave fillojnë me shkronjën M:

ZGJIDH titullin DISTINCT
NGA produkti m_
KU titulli LIKE "М *";

Kërkesa Q015. Një shembull i kryerjes së operacioneve aritmetike në fushat në një kërkesë dhe riemërtimi i fushave në një kërkesë (alias). Ky shembull llogarit shumën e shpenzimit = sasinë * çmimin dhe marzhin e fitimit për secilin regjistrim të shpenzimeve të artikujve, duke supozuar se fitimi është 7 përqind e shumës së shitjeve:

Çmimi, shuma * çmimi si rezultat_sumë,
shuma * çmimi / 100 * 7 AS fitim
NGA m_ardhja;

Kërkesa Q016. Duke analizuar dhe thjeshtuar operacionet aritmetike, mund të rrisni shpejtësinë e ekzekutimit të pyetjes:


rezultati_sum * 0.07 AS fitim
NGA m_ardhja;

Kërkesa Q017. Duke përdorur deklaratën INNER JOIN, mund të bashkoni të dhëna nga tabela të shumta. Në shembullin e mëposhtëm, në varësi të vlerës së ctgry_id, çdo rekord i tabelës m_income përputhet me emrin e kategorisë nga tabela m_kategori të cilës i përket produkti:

SELECT c.title, b.title, dt, shuma, çmimi, shuma * çmimi SI të ardhurat_sum
NGA (m_të ardhura SI PORBASHKIM i brendshëm m_produkti AS b në a.product_id = b.id)
BASHKIMI I BRENDSHM m_kategori AS c ON ON b.ctgry_id = c.id
URDHR PYR c.titull, b.titull;

Kërkesa Q018. Funksionet si SUM - shuma, COUNT - sasia, AVG - mesatarja aritmetike, MAX - vlera maksimale, MIN - vlera minimale quhen funksione agregate. Ata marrin vlera të shumta dhe, pasi përpunohen, kthejnë një vlerë të vetme. Një shembull i llogaritjes së shumës së produktit të fushave të shumës dhe çmimit duke përdorur funksionin e përgjithshëm SUM:

SELECT SUM (shuma * çmimi) AS Total_Sum
NGA m_të ardhurat;

Kërkesa Q019. Një shembull i përdorimit të funksioneve të shumta agregate:


SELECT Shuma (shuma) AS Shuma_Sum, AVG (shuma) AS Shuma_AVG,
MAX (shuma) AS Shuma_Maks, Min (sasi) AS Shuma_Min,
Numëroni (*) AS Total_Numer
NGA m_të ardhurat;

Kërko Q020. Ky shembull llogarit shumën e të gjithë artikujve me kodin 1 të kapitalizuar në qershor 2011:

ZGJIDH
NGA m_të ardhurat
KU produkti_id = 1 DHE dt Midis # 6/1/2011 # DHE # 6/30/2011 #;.

Kërkesa Q021. Pyetja e mëposhtme SQL llogarit sasinë e shitur për artikujt me kodin 4 ose 6:

ZGJIDH
NGA m_ ardhja
KU produkt_id = 4 OSE produkt_id = 6;

Kërkesa Q022. Isshtë llogaritur për atë sasi të shitur më 12 qershor 2011 të mallrave me kod 4 ose 6:

SELECT Shuma (shuma * çmimi) SI rezultati_sumë
NGA m_ ardhja
KU (produkt_id = 4 OSE produkt_id = 6) DHE dt = # 6/12/2011 #;

Kërkesa Q023. Detyra është si më poshtë. Llogaritni shumën totale të mallrave në kategorinë "Furrë buke" që u kapitalizuan.

Për të zgjidhur këtë problem, duhet të veproni me tre tabela: m_income, m_product dhe m_category, sepse:
- sasia dhe çmimi i mallrave të kapitalizuar ruhen në tabelën e të ardhurave m_;
- kodi i kategorisë së secilit produkt ruhet në tabelën m_produkt;
- emri i titullit të kategorisë ruhet në tabelën m_kategori.

Për të zgjidhur këtë problem, ne do të përdorim algoritmin e mëposhtëm:
- përcaktimi i kodit të kategorisë "Produkte furre" nga tabela m_kategori duke përdorur një nën -pyetje;
- bashkimi i tabelave m_income dhe m_produkt për të përcaktuar kategorinë e secilit produkt të kapitalizuar;
- llogaritja e shumës së faturës (= sasia * çmimi) për mallrat, kodi i kategorisë i të cilit është i barabartë me kodin e përcaktuar nga nënpyetja e mësipërme.


NGA m_produkti SI PORBASHKIM i brendshëm m_ardhje AS b në a.id = b.product_id
KU ctgry_id = (SELECT id FROM m_category WHERE title = "(! LANG: Bakery"); !}

Kërkesa Q024. Ne do të zgjidhim problemin e llogaritjes së sasisë totale të mallrave të kapitalizuar në kategorinë "Produkte furre" duke përdorur algoritmin e mëposhtëm:
- për secilën regjistrim të tabelës m_in ardhura, në varësi të vlerës së produktit të saj, nga tabela m_kategori, përputhet me emrin e kategorisë;
- zgjidhni të dhënat për të cilat kategoria është e barabartë me "Produktet e furrës";
- llogarit sasinë e faturës = sasia * çmimi.

SELECT Shuma (shuma * çmimi) SI të ardhura_sumë
NGA (m_produkti SI PORBASHKIM i brendshëm m_ardhje AS b në a.id = b.product_id)
KU c.title = "(! GJUH:: Furrë buke"; !}

Kërkesa Q025. Ky shembull llogarit sa artikuj janë konsumuar:

SELECT COUNT (product_id) AS product_cnt
NGA (SELECT DISTINCT product_id FROM m_comecome) AS t;

Kërkesa Q026. Klauzola GROUP BY përdoret për të grupuar regjistrimet. Në mënyrë tipike, regjistrimet grupohen sipas vlerës së një ose më shumë fushave, dhe një lloj operacioni i përgjithshëm zbatohet për secilin grup. Për shembull, pyetja e mëposhtme gjeneron një raport mbi shitjen e mallrave. Kjo do të thotë, krijohet një tabelë që përmban emrat e mallrave dhe shumën për të cilën ato janë shitur:

ZGJIDH titullin, SUM (shuma * çmimi) SI rezultati_sum
NGA m_produkti SI BASHKIMI I BRENDSHM m_ardhja AS b
ON a.id = b.product_id
GRUPI NGA titulli;

Kërkesa Q027. Raporti i shitjeve sipas kategorisë. Kjo do të thotë, krijohet një tabelë që përmban emrat e kategorive të produkteve, shumën totale për të cilën janë shitur produktet e këtyre kategorive dhe shumën mesatare të shitjeve. Funksioni ROUND përdoret për të rrumbullakuar vlerën mesatare në një të qindtën (shifra e dytë pas ndarësit dhjetor):

SELECT c.title, SUM (shuma * çmimi) AS result_sum,
ROUND (AVG (shuma * çmimi), 2) AS result_sum_avg
NGA (m_produkti SI BASHKIM i brendshëm m_ardhja AS b ON a.id = b.product_id)
BASHKIMI I BRENDSHM m_kategori AS c ON a.ctgry_id = c.id
GRUPI NGA c.titulli;

Kërkesa Q028. Numri i përgjithshëm dhe mesatar i faturave për secilin produkt llogaritet dhe shfaq informacion në lidhje me produktet, numri i përgjithshëm i faturave të të cilave nuk është më pak se 500:

SELECT product_id, SUM (shuma) AS Shuma_sum,
Rrumbullak (Mesatarja (shuma), 2) AS sasia_avg
NGA m_të ardhurat
GRUPI NGA product_id
KA Shuma (shuma)> = 500;

Kërkesa Q029. Ky pyetësor llogarit për secilin artikull shumën dhe mesataren e arkëtimeve të tij në tremujorin e dytë të 2011. Nëse sasia e përgjithshme e mallrave të marrë nuk është më pak se 1000, atëherë informacioni në lidhje me këtë produkt shfaqet:

ZGJIDH titullin, SUM (shuma * çmimi) SI të ardhura_sumë
NGA m_të ardhura nga një produkt i_BASHKMBRIN i brendshëm b ON a.product_id = b.id
KU DT Midis # 4/1/2011 # DHE # 6/30/2011 #
GRUPI NGA titulli
KA SHUMUM (shuma * çmimi)> = 1000;

Kërkesa Q030. Në disa raste, ju duhet të hartoni çdo regjistrim të një tabele të caktuar në secilin regjistrim të një tabele tjetër; ajo që quhet produkt Kartezian. Tabela që rezulton nga një lidhje e tillë quhet tabela e Dekartit. Për shembull, nëse një tabelë A ka 100 regjistrime dhe tabela B ka 15 regjistrime, atëherë tabela e tyre e Dekartit do të përbëhet nga 100 * 15 = 150 regjistrime. Pyetja e mëposhtme bashkon çdo rekord në tabelën m_income me çdo rekord në tabelën m_outcome:

SELECT * NGA m_të ardhurat, m_ ardhurat;

Kërkesa Q031. Një shembull i grupimit të regjistrimeve sipas dy fushave. Pyetja e mëposhtme SQL llogarit për secilin furnizues sasinë dhe sasinë e mallrave të marra prej tij:


SUM (shuma * çmimi) SI të ardhura_sumë

Kërko Q032. Një shembull i grupimit të regjistrimeve sipas dy fushave. Pyetja e mëposhtme llogarit, për secilin furnizues, sasinë dhe sasinë e produkteve të tyre të shitura nga ne:

SELECT supplier_id, product_id, SUM (shuma) AS Shuma_sum,
SUM (shuma * çmimi) SI rezultati_sum
GRUPI NGA furnizuesi_id, produkti_id;

Kërkesa Q033. Në këtë shembull, dy pyetjet e mësipërme (q031 dhe q032) përdoren si nënpyetje. Rezultatet e këtyre pyetjeve duke përdorur metodën LEFT JOIN kombinohen në një raport. Pyetjet e mëposhtme raportojnë për sasinë dhe sasinë e produkteve të marra dhe shitura për secilin furnizues. Ju lutemi vini re se nëse një produkt ka mbërritur tashmë, por ende nuk është shitur, atëherë qeliza result_sum për këtë rekord do të jetë bosh. Duhet gjithashtu të theksohet se kjo kërkesë është vetëm një shembull i përdorimit në lidhje pyetje komplekse si një nënpyetje. Performanca e kësaj Pyetje SQL me një sasi të madhe të të dhënave, është e dyshimtë:

SELECT *
NGA
SUM (shuma * çmimi) SI të ardhura_sumë
ON a.product_id = b.id GRUPI NGA furnizuesi_id, product_id) AS a
LINI BASHKIM
(SELECT supplier_id, product_id, SUM (shuma) AS Shuma_sum,
SUM (shuma * çmimi) SI rezultati_sum
NGA m_ardhja SI PORBASHKIM i brendshëm m_produkti AS b
ON a.product_id = b.id GRUPI NGA furnizuesi_id, product_id) AS b
ON (a.product_id = b.product_id) AND (a.supplier_id = b.supplier_id);

Kërkesa Q034. Në këtë shembull, dy pyetjet e mësipërme (q031 dhe q032) përdoren si nënpyetje. Rezultatet e këtyre pyetjeve duke përdorur metodën RIGTH JOIN kombinohen në një raport. Pyetja tjetër shfaq një raport mbi sasinë e pagesave nga secili klient për sistemet e pagesave që kanë përdorur dhe sasinë e investimeve që kanë bërë. Pyetjet e mëposhtme raportojnë për sasinë dhe sasinë e produkteve të marra dhe shitura për secilin furnizues. Duhet të theksohet se nëse një produkt tashmë është shitur, por ende nuk ka mbërritur, atëherë qeliza e të ardhurave_sum për këtë rekord do të jetë bosh. Prania e qelizave të tilla boshe është një tregues i një gabimi në kontabilitetin e shitjeve, pasi para shitjes, së pari është e nevojshme që produkti përkatës të arrijë:

SELECT *
NGA
(SELECT supplier_id, product_id, SUM (shuma) AS Shuma_sum,
SUM (shuma * çmimi) SI të ardhura_sumë
NGA m_të ardhura SI BASHKIMI i brendshëm m_produkti AS b ON a.product_id = b.id
GRUPI NGA furnizuesi_id, produkti_id) SI a
BASHKIMI I DREJT
(SELECT supplier_id, product_id, SUM (shuma) AS Shuma_sum,
SUM (shuma * çmimi) SI rezultati_sum
NGA m_ ardhja SI BASHKIMI I brendshëm m_produkti AS b ON a.product_id = b.id
GRUPI NGA furnizuesi_id, produkti_id) AS b
ON (a.supplier_id = b.supplier_id) AND (a.product_id = b.product_id);

Kërkesa Q035. Shfaq një raport mbi sasinë e të ardhurave dhe shpenzimeve sipas produktit. Për ta bërë këtë, krijohet një listë e produkteve sipas tabelave m_income dhe m_outcome, pastaj për secilin produkt nga kjo listë, llogariten shuma e arkëtimeve të tij sipas tabelës m_in ardhura dhe shuma e shpenzimeve të tij sipas tabelës m_outcome:

SELECT product_id, SUM (in_amount) AS Sasia e të ardhurave,
SUM (jashtë_sasës) SI sasi rezultati
NGA
(SELECT produkti_id, shuma AS në_shumë, 0 AS jashtë_shumë
NGA m_të ardhurat
BASHKIM GJITH
SELECT product_id, 0 AS in_amount, shuma AS out_amount
NGA m_ ardhja) SI t
GRUPI NGA produkti_id;

Kërkesa Q036. EXISTS kthen TRUE nëse grupi i kaluar në të përmban elemente. Funksioni EXISTS kthen FALSE nëse grupi që i është kaluar është bosh, domethënë nuk përmban asnjë element. Pyetja e mëposhtme shfaq kodet e produktit që përmbahen në tabelat m_income dhe m_outcome:

SELECT DISTINCT product_id
NGA m_të ardhurat AS a
KU EKZISTON (ZGJIDH produktin_ID NGA m_ dalja AS b

Kërkesa Q037. Kodet e produktit shfaqen, të cilat përmbahen si në tabelën m_income ashtu edhe në tabelën m_outcome:

SELECT DISTINCT product_id
NGA m_të ardhurat AS a
KU produkti_idhe (SELECT product_id FROM m_comecome)

Kërkesa Q038. Kodet e produktit shfaqen, të cilat përmbahen si në tabelën m_income, por nuk përmbahen në tabelën m_outcome:

SELECT DISTINCT product_id
NGA m_të ardhurat AS a
KU NUK Ekziston (SELECT product_id FROM m_outcome AS b
KU b.product_id = a.product_id);

Kërkesa Q039. Shfaqet një listë e produkteve me shitjet maksimale. Algoritmi është si më poshtë. Për secilin produkt, llogaritet sasia e shitjeve të tij. Pastaj, përcaktohet maksimumi i këtyre shumave. Pastaj, për secilin produkt, totali i shitjeve të tij llogaritet përsëri, dhe shfaqet kodi dhe sasia e shitjeve të produkteve, totali i të cilave është i barabartë me maksimumin:

SELECT product_id, SUM (shuma * çmimi) AS Shuma_sum
NGA m_ ardhja
GRUPI NGA product_id
KA SHUMUM (shuma * çmimi) = (ZGJIDH MAX (s_shumë)
NGA (SELECT SUM (shuma * çmimi) SI sasia NGA m_outcome GROUP BY product_id));

Kërkesa Q040. Fjala e rezervuar IIF ( operatori me kusht) përdoret për të vlerësuar shprehje logjike dhe kryerjen e një ose një veprimi tjetër në varësi të rezultatit (E VUERTET or ose E FALSE). Në shembullin e mëposhtëm, furnizimi i një artikulli konsiderohet "i vogël" nëse sasia është më e vogël se 500. Përndryshe, domethënë, sasia e marrjes është më e madhe ose e barabartë me 500, furnizimi konsiderohet "i madh":

SELECT dt, product_id, shuma,
IIF (shuma<500,"малая","большая") AS mark
NGA m_të ardhurat;

Pyetja SQL Q041. Në rastin kur operatori IIF përdoret disa herë, është më i përshtatshëm ta zëvendësoni atë me operatorin SWITCH. Operatori SWITCH (operatori me zgjedhje të shumëfishtë) përdoret për të vlerësuar një shprehje Boolean dhe për të kryer një veprim bazuar në rezultatin. Në shembullin e mëposhtëm, loja e dorëzuar konsiderohet "e vogël" nëse sasia e mallrave në lot është më pak se 500. Përndryshe, domethënë, nëse sasia e mallrave është më e madhe ose e barabartë me 500, loti konsiderohet "i madh ":

SELECT dt, product_id, shuma,
KALO (shuma<500,"малая",amount>= 500, "e madhe") Shenja AS
NGA m_të ardhurat;

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

SELECT dt, product_id, shuma,
IIF (shuma<300,"малая",
IIF (shuma<1000,"средняя","большая")) AS mark
NGA m_të ardhurat;

Pyetja SQL Q043. Në kërkesën tjetër, nëse sasia e mallrave në serinë e marrë është më pak se 300, atëherë grupi konsiderohet "i vogël". Përndryshe, kjo është, nëse shuma kusht<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, shuma,
KALO (shuma<300,"малая",
shuma<1000,"средняя",
shuma> = 1000, "e madhe") Shenja AS
NGA m_të ardhurat;

Pyetja SQL Q044. Në pyetjen tjetër, shitjet ndahen në tre grupe: të vogla (deri në 150), të mesme (nga 150 në 300), të mëdha (300 ose më shumë). Për më tepër, për secilin grup, totali llogaritet:

SELECT Category, SUM (result_sum) AS Ctgry_Total
NGA (ZGJIDH shumën * çmimin si rezultat_sumë,
IIf (shuma * çmimi<150,"малая",
IIf (shuma * çmimi<300,"средняя","большая")) AS Category
NGA m_ ardhja) SI t
GRUPI NGA Kategoria;

Pyetja SQL Q045. Funksioni DateAdd përdoret për të shtuar ditë, muaj ose vite në një datë të caktuar dhe për të marrë një datë të re. Pyetja tjetër:
1) shton 30 ditë në datën nga fusha dt dhe shfaq datën e re në fushën dt_plus_30d;
2) shton 1 muaj në datën nga fusha dt dhe shfaq datën e re në fushën dt_plus_1m:

SELECT dt, dateadd ("d", 30, dt) AS dt_plus_30d, dateadd ("m", 1, dt) AS dt_plus_1m
NGA m_të ardhurat;

Pyetja SQL Q046. Funksioni DateDiff është krijuar për të llogaritur ndryshimin midis dy datave në njësi të ndryshme (ditë, muaj ose vite). Pyetja e mëposhtme llogarit ndryshimin midis datës në fushën dt dhe datës aktuale në ditë, muaj dhe vite:

SELECT dt, DateDiff ("d", dt, Date ()) AS dita e fundit,
DateDiff ("m", dt, Data ()) AS_ muajt e fundit,
DataDiff ("yyyy", dt, Data ()) AS vitet e fundit_
NGA m_të ardhurat;

Pyetja SQL Q047. Numri i ditëve nga data e marrjes së mallrave (tabela m_in ardhura) deri në datën aktuale llogaritet duke përdorur funksionin DateDiff dhe krahasohet data e skadimit (tabela m_produkt):


DateDiff ("d", dt, Data ()) AS ditët e fundit
NGA m_ardhja SI PORBASHKIM i brendshëm m_produkti AS b
ON a.product_id = b.id;

Pyetja SQL Q048. Numri i ditëve nga data e marrjes së mallrave deri në datën aktuale llogaritet, atëherë kontrollohet nëse ky numër tejkalon datën e skadimit:

SELECT a.id, product_id, dt, lifedays,
DateDiff ("d", dt, Data ()) AS ditët e fundit, IIf (ditët e fundit> jetëgjatësi, "Po", "Jo") AS date_expire
NGA m_të ardhura nga produkti i_BASHKIMI I Brendshëm b
ON a.product_id = b.id;

Pyetja SQL Q049. Numri i muajve nga data e marrjes së mallrave deri në datën aktuale llogaritet. Kolona month_last1 llogarit numrin absolut të muajve, kolona month_last2 llogarit numrin e muajve të plotë:

SELECT dt, DateDiff ("m", dt, Date ()) AS month_last1,
DataDiff ("m", dt, Data ()) - iif (ditë (dt)> ditë (datë ()), 1,0) AS month_last2
NGA m_të ardhurat;

Pyetja SQL Q050. Paraqitet një raport tremujor mbi sasinë dhe sasinë e mallrave të kapitalizuar për vitin 2011:

SELECT kvartal, SUM (result_sum) AS Total
NGA (ZGJIDH shumën * çmimin AS rezultati_sum, muaji (dt) AS m,
KALO (m<4,1,m<7,2,m<10,3,m>= 10.4) AS kvartal
NGA m_të ardhurat KU viti (dt) = 2011) AS t
GRUPI NGA kvartal;

Kërkesa Q051. Pyetja e mëposhtme ndihmon për të zbuluar nëse përdoruesit ishin në gjendje të fusnin informacion në sistem për konsumin e një artikulli në një sasi më të madhe se shuma e marrjes së artikullit:

SELECT product_id, SUM (in_sum) AS درآمد_sum, SUM (out_sum) AS result_sum
NGA (ZGJIDH ID_ të produktit, shuma * çmimi si në_sum, 0 si shuma jashtë_
nga m_të ardhurat
BASHKIM GJITH
SELECT product_id, 0 si in_sum, shuma * çmimi si out_sum
nga m_ ardhja) SI t
GRUPI NGA product_id
KA SHUMUM (në_përmbledhje)

Kërkesa Q052. Numërimi i rreshtave të kthyer nga një pyetje zbatohet në mënyra të ndryshme. Për shembull, ju mund të rinumëroni rreshtat e një raporti të përgatitur në MS Access me anë të vetë MS Access. Ju gjithashtu mund të rinovoni duke përdorur gjuhë programimi të tilla si VBA ose PHP. Sidoqoftë, ndonjëherë kjo duhet të bëhet në vetë pyetjen SQL. Pra, pyetja e mëposhtme do të numërojë rreshtat e tabelës m_income sipas rendit rritës të vlerave të fushës ID:

SELECT COUNT (*) si N, b.id, b.product_id, b.amount, b.çmimi
NGA m_të ardhura një HYRJE E Brendshme m_të ardhura b ON a.id<= b.id
GRUPI NGA b.id, b.produkt_id, b.amount, b.çmimi;

Kërkesa Q053. Pesë të parët në mesin e produkteve shfaqen nga sasia e shitjeve. Pesë regjistrimet e para shfaqen duke përdorur deklaratën TOP:

SELECT TOP 5, product_id, shuma (shuma * çmimi) AS summa
NGA m_ ardhja
GRUPI NGA product_id
POROSIT NGA shuma (shuma * çmim) DESC;

Kërkesa Q054. Pesë udhëheqësit midis produkteve sipas sasisë së shitjeve shfaqen, dhe linjat numërohen si rezultat:

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

NGA m_outcome GRUPI NGA produkti_id) AS a
BASHKIMI I BRENDSHM
(SELECT product_id, shuma (shuma * çmimi) AS summa,
shuma * 10000000 + ID_ e produktit AS
NGA m_ dalja GRUPI NGA produkti_id) AS b
ON a.id> = b.id
GRUPI NGA b.produkti, b.summa
KA PASUR (*)<=5
POROSIT PUNTR NJUNT NUMUNTR (*);

Kërkesa Q055. Pyetja e mëposhtme SQL tregon përdorimin e funksioneve matematikore COS, SIN, TAN, SQRT, ^ dhe ABS në MS Access SQL:

SELECT (zgjidhni numërimin (*) nga m_in ardhura) si N, 3.1415926 si pi, k,
2 * pi * (k-1) / N si x, COS (x) si COS_, SIN (x) si SIN_, TAN (x) si TAN_,
SQR (x) si SQRT_, x ^ 3 si "x ^ 3", ABS (x) si ABS_
NGA (SELECT COUNT (*) AS k
NGA m_të ardhura SI PORFSHIRJE E BRENDSHME m_të ardhura AS b ON a.id<=b.id
GRUPI NGA b.id) t;



Artikujt e lidhur: