Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Gjuha SQL. Formimi i pyetjeve në bazën e të dhënave

Karakteristikat e funksionit COUNT.

Emri i parametrit Kuptimi
Tema e artikullit: Karakteristikat e funksionit COUNT.
Kategoria (kategoria tematike) Tregtisë

Funksionet agregate.

Përmbledhje e kërkesave të leximit

Kërkesat për lexim përmbledhës ofrojnë nëntotale ose nëntotale (informacione statistikore) për vlerat në bazën e të dhënave. Është jashtëzakonisht e rëndësishme të përdoren pyetje përmbledhëse kur informacioni i kërkuar nuk është në mënyrë eksplicite në bazën e të dhënave, dhe është jashtëzakonisht e rëndësishme ta llogaritni atë.

Për të përmbledhur informacionin e përfshirë në bazën e të dhënave, SQL ofron funksione agregate (statistikore).

Agregatet janë grupe rreshtash, prandaj, funksionet agregate janë funksione, argumentet e të cilëve janë grupe rreshtash.

Agregatet mund të përfaqësojnë të gjitha rreshtat e një tabele ose grupet e rreshtave të krijuar nga klauzola GROUP BY (diskutuar në seksionin 13.7.2).

Funksioni agregat merr si argument një shprehje që përmban, nga të paktën, një kolonë të tabelës dhe kthen një vlerë si rezultat. Tᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, funksionet agregate ju lejojnë të kryeni operacione mbi vlerat e një kolone të tërë të një tabele ose disa tabelave njëherësh.

Ekzistojnë pesë funksione standarde agregate në SQL: SUM, AVG, MIN, MAX, COUNT.

SUM (<выражение>) llogarit shumën e të gjitha vlerave në një shprehje;

AVG (<выражение>) llogarit mesataren e të gjitha vlerave në shprehje;

MIN (<выражение>) gjen më të voglin nga të gjitha vlerat në shprehje;

MAX (<выражение>) gjen më të madhin ndër të gjitha vlerat në shprehje;

COUNT (<выражение>) numëron numrin e vlerave në shprehje.

Shprehja më e zakonshme është emri i një kolone tabele.

Funksioni COUNT (*) numëron numrin e rreshtave (ᴛ.ᴇ. gjithashtu numëron NULL).

NUMËROJ (DISTINCT<выражение>) numëron numrin e vlerave të dallueshme në një shprehje.

Shënim 1. Në Microsoft Access, konstrukti NUMËROJ (DISTINCT<выражение>) nuk punon!!! Ky problem zgjidhet duke përdorur një nënpyetje në klauzolën FROM.

Kufizimet për të përdorur funksionet agregate:

Funksionet agregate nuk mund të përdoren në një klauzolë WHERE (funksionon për një rresht të vetëm, jo ​​për një agregat);

Funksionet agregate nuk mund të vendosen brenda njëri-tjetrit (nëse janë jashtëzakonisht të rëndësishme, mund të përdorni pyetje të ndërlidhura);

Funksionet e grumbulluara dhe emrat e kolonave të rregullta nuk mund të përdoren njëkohësisht në klauzolën SELECT (përveç nëse GROUP BY është specifikuar në këto kolona)

Shënim 2. Rekomandohet që të ktheni alias kolona që përdorin funksione të përmbledhura në klauzolën SELECT.

Shembulli 29... Llogaritni koston totale të të gjitha thirrjeve.

ZGJIDH SHUMEN (STOIM)

NGA VYZOVY

Shembulli 30... Llogaritni moshën mesatare për kontaktet.

ZGJIDH AVG (VOZRAST)

NGA KONTAKTY

Shembulli 31... Llogaritni kohëzgjatjen minimale dhe maksimale të thirrjeve dalëse.

ZGJIDH MINI (DLIT), MAX (DLIT)

NGA VYZOVY V, TIPY_VYZ T

KU (V.TIP_ID = T.ID) DHE (T.NAZV = "Dalje")

Shembulli 32... Shfaq datën dhe orën e telefonatës së parë.

ZGJIDH MIN (VREMYA)

NGA VYZOVY

Shembulli 33... Llogaritni numrin e kontakteve mbi 30 vjeç.

ZGJIDH NUMRIN (ID)

NGA KONTAKTY

KU VOZRAST> 30

ZGJIDH COUNT (*)

NGA KONTAKTY

KU VOZRAST> 30

Shembulli 34... Llogaritni numrin e zileve të caktuara tashmë për një kontakt.

Nuk funksionon në ACCESS:

ZGJIDH COUNT (MEL_ID TË NDRYSHME)

NGA KONTAKTY

Punon në ACCESS:

SELECT COUNT (MEL_ID)

NGA (ZGJIDHNI MEL_ID TË NDRYSHME

NGA KONTAKTY)

Karakteristikat e funksionit COUNT. - koncepti dhe llojet. Klasifikimi dhe veçoritë e kategorisë "Veçoritë e funksionit COUNT." 2017, 2018.

  • - Shtatë miliardë dhe duke numëruar fletën e punës A

    Leximi i mëtejshëm Referencat DeGolyer E., Vance H., Bibliography of the Petroleum Industry, Bull. 83, A. dhe. M. College of Texas, College Station, Texas, 725 f., 1944. Dunbar C. R., Dunbar L., A Selected of Periodicals, Serials, and Books Dealing with Petroleum and Aleed Subjects, Department of Conservation, New Orleans, Luiziana, 218, f., 1939. Kompania e Botimit të Gjeologjisë Ekonomike, Urbana, Illinois, ...


  • - Sistemi i Edukimit të Naftës në vendin tonë

    Vendi ynë i ka kushtuar gjithmonë vëmendje të madhe edukimit të inxhinierëve të naftës. Menjëherë pas Revolucionit të Tetorit në shtator 1918, qeveria Sovjetike publikoi Dekretin për organizimin e Akademisë së Minierave të Moskës. Më vonë në vitin 1930 një institut i veçantë i naftës u veçua nga kjo Akademi dhe ne e quajmë këtë institut Universiteti Shtetëror Rus Gubkin i Naftës dhe Gazit. Që nga ajo kohë, niveli i edukimit të naftës është rritur shumë herë. Aktualisht sistemi e naftës ....


  • - ARSIMI NAFTËROR NË VENDIN TONË

    UNIVERSITETI TEKNIK “Departamenti gjuhë të huaja Teksti shkollor përbëhet nga 16 mësime. Çdo mësim përfshin fjalor aktiv, fjalor, gramatikë, ....


  • - Në vendin tonë

    Historia e arsimit të inxhinierisë së naftës në vendin tonë është e pandashme nga historia e themelimit dhe zhvillimit të industrisë së saj të naftës dhe gazit. Në Rusinë cariste industria e naftës ishte e përqendruar pothuajse ekskluzivisht në Kaukaz. Më 2 korrik 1918, kreu i qeverisë nënshkroi dekretin për shtetëzimin e industrisë së naftës (ata nuk prodhonin lëndë të para të gazta në Rusi dhe nuk kishte asnjë industri gazi atje para revolucionit). Por në kohët e vështira të Civilit ....


  • - Kontabiliteti i menaxhimit

    1. Model. 2. Kërkesat për informacion. 3. Mbledhja e informacionit. 4. Aktivizimi i modelit dhe interpretimi i rezultateve. 5. Prezantimi i rezultateve të modelit. G = D-W Gpr = D (V) pr - Zpr - fitim ushqimor MD - të ardhura marxhinale. MD = B - Variablat, (B - të ardhurat, Z-kostot) Modeli ....


  • - Ushtrimi 2. Imagjinoni sikur punoni si kontabilist në një ndërmarrje të madhe. Pergjigju pyetjeve ne vazhdim.

    1. A i plotësoni llogaritë në fund të vitit fiskal? 2. Cilat janë aktivitetet tuaja të zakonshme në fund të vitit fiskal? 3. Kur përgatitni një pasqyrë financiare? 4. Pse duhet të keni më shumë aktive sesa detyrime? 5. A punon departamenti i kontabilitetit për taksat? 6. Çfarë është dallimi ndërmjet paga juaj bruto dhe paga neto? 7. A është i madh ndryshimi midis pagës bruto dhe pagës neto në këtë vend? Nga çfarë varet ky dallim? Ushtrimi 3. Make up the ....


  • - COUNT funksion

    Përmbledhja e të dhënave të pyetjeve Në këtë mësim, ne do të shikojmë disa nga funksionet SQL që përmbledhin. Me ndihmën e tyre, ju mund të kryeni mjaft gamë të gjerë veprime matematikore me të dhëna. Ato kryesore në këtë mësim do të jenë sa vijon ....


  • - Counter Geiger

    Kostoja: 300 Eshte i vogel pajisje e dobishme jo vetëm që tregon sasinë e radit në një person, por gjithashtu mat rrezatimin e sfondit të mjedisit. Mund të jetë e dobishme kur ju duhet të zbuloni nëse krateri i madh i ndezur përpara është i rrezikshëm. Pesha: 5 lb ...


  • - Numërimi mbrapsht

    Sapo të formohet grupi i instalimit, fillon procesi i numërimit. Numërimi mbrapsht shfaq raportin ndërmjet çmimit të mbylljes dhe atij të lartë ose çmimi minimal dy dita e tregtimit më parë, në varësi të cilës grup instalimi është aktiv - vendoseni në ....


  • Nënseksionet e mëposhtme përshkruajnë klauzola të tjera SELECT që mund të përdoren në pyetje, si dhe funksione të përgjithshme dhe grupe deklaratash. Më lejoni t'ju kujtoj ky moment ne kemi mbuluar përdorimin e klauzolës WHERE dhe në këtë artikull do të shikojmë klauzolat GROUP BY, ORDER BY dhe HAVING dhe do të japim disa shembuj se si këto klauzola mund të përdoren në lidhje me funksionet e përgjithshme që mbështeten në Transact. -SQL.

    GRUPI PËR klauzolë

    Fjali GRUP NGA grupon grupin e rreshtave të zgjedhur për të marrë një grup rreshtash përmbledhës bazuar në vlerat e një ose më shumë kolonave ose shprehjeve. Një rast i thjeshtë përdorimi për klauzolën GROUP BY tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; ZGJIDH PUNËN NGA Punimet_Në GRUPI SIPAS Punës;

    Në këtë shembull, pozicionet e punonjësve janë kampionuar dhe grupuar.

    Në shembullin e mësipërm, klauzola GROUP BY krijon një grup të veçantë për të gjitha vlerat e mundshme (përfshirë NULL) të kolonës Job.

    Përdorimi i kolonave në klauzolën GROUP BY duhet të plotësojë disa kushte. Në veçanti, çdo kolonë në listën e përzgjedhur të pyetjes duhet të shfaqet gjithashtu në klauzolën GROUP BY. Kjo kërkesë nuk zbatohet për konstantat dhe kolonat që janë pjesë e një funksioni agregat. (Funksionet agregate diskutohen në nënseksionin tjetër.) Kjo ka kuptim sepse vetëm kolonave në klauzolën GROUP BY u garantohet një vlerë për grup.

    Një tabelë mund të grupohet sipas çdo kombinimi të kolonave të saj. Shembulli i mëposhtëm tregon grupimin e rreshtave në tabelën Works_on nga dy kolona:

    PËRDORIMI SampleDb; SELECT Numri i Projektit, Puna NGA Punimet_Në GRUPI SIPAS Numri i projektit, Punë;

    Rezultati i kësaj pyetjeje:

    Bazuar në rezultatet e pyetjes, mund të shihni se ka nëntë grupe me kombinime të ndryshme të numrit dhe titullit të projektit. Sekuenca e emrave të kolonave në klauzolën GROUP BY nuk duhet të jetë e njëjtë si në listën e kolonave SELECT.

    Funksionet agregate

    Funksionet agregate përdoren për të marrë vlerat e shumës. Të gjitha funksionet e përgjithshme mund të ndahen në kategoritë e mëposhtme:

      funksionet e zakonshme të agregatit;

      funksionet e agregatit statistikor;

      funksionet e përgjithshme të përcaktuara nga përdoruesi;

      funksionet e agregatit analitik.

    Këtu do të shikojmë tre llojet e para të funksioneve agregate.

    Funksionet e rregullta agregate

    Transact-SQL mbështet gjashtë funksionet e mëposhtme agregate: MIN, MAX, SHUMË, AVG, COUNT, COUNT_BIG.

    Të gjithë funksionet agregate kryejnë llogaritjet në një argument të vetëm, i cili mund të jetë ose një kolonë ose një shprehje. (Përjashtimi i vetëm është forma e dytë e dy funksioneve, COUNT dhe COUNT_BIG, përkatësisht COUNT (*) dhe COUNT_BIG (*), përkatësisht.) Çdo funksion agregat vlerësohet në një vlerë konstante që shfaqet në një kolonë të veçantë rezultati.

    Funksionet e përmbledhura janë të specifikuara në listën e kolonave të një deklarate SELECT, e cila mund të përmbajë gjithashtu një klauzolë GROUP BY. Nëse deklarata SELECT nuk përfshin një klauzolë GROUP BY, dhe lista e kolonave të përzgjedhjes përmban të paktën një funksion agregat, atëherë ajo nuk duhet të përmbajë kolona të thjeshta (përveç kolonave të përdorura si argumente për funksionin agregat). Prandaj, kodi në shembullin e mëposhtëm është i pasaktë:

    PËRDORIMI SampleDb; SELECT Mbiemri, MIN (Id) FROM Punonjës;

    Këtu, kolona LastName e tabelës Employee nuk duhet të jetë në listën e kolonave të përzgjedhura sepse nuk është një argument për funksionin agregat. Nga ana tjetër, një listë e përzgjedhur e kolonave mund të përmbajë emra kolonash që nuk janë argumente për funksionin agregat nëse ato kolona përdoren si argumente për klauzolën GROUP BY.

    Një argument i funksionit agregat mund të paraprihet nga një nga dy fjalë kyçe të mundshme:

    TE GJITHA

    Tregon që llogaritjet kryhen në të gjitha vlerat në kolonë. Ky është standardi.

    TË DAKTUAR

    Tregon se vetëm vlerat unike kolonë.

    Funksionet agregate MIN dhe MAX

    Funksionet agregate MIN dhe MAX llogaritin respektivisht vlerat më të vogla dhe më të mëdha në një kolonë. Nëse pyetja përmban një klauzolë WHERE, funksionet MIN dhe MAX kthejnë vlerat më të vogla dhe më të mëdha të rreshtit që përputhen me kushtet e specifikuara. Shembulli i mëposhtëm tregon përdorimin e funksionit të agregatit MIN:

    PËRDORIMI SampleDb; - Kthen 2581 SELECT MIN (Id) AS "Minimum Id value" FROM Employee;

    Rezultati i dhënë në shembullin e mësipërm nuk është shumë informues. Për shembull, mbiemri i punonjësit që zotëron këtë numër nuk dihet. Por ju nuk mund ta merrni këtë mbiemër në mënyrën e zakonshme, sepse, siç u përmend më herët, nuk mund të specifikoni në mënyrë eksplicite kolonën Mbiemri. Për të marrë mbiemrin e këtij punonjësi së bashku me numrin më të ulët të personelit të punonjësit, përdoret një nënpyetje. Shembulli i mëposhtëm tregon përdorimin e një nënpyetjeje të tillë, ku nënpyetja përmban deklaratën SELECT nga shembulli i mëparshëm:

    Rezultati i ekzekutimit të pyetjes:

    Përdorimi i funksionit të agregatit MAX tregohet në shembullin e mëposhtëm:

    Funksionet MIN dhe MAX gjithashtu mund të pranojnë vargje dhe data si argumente. Në rastin e një argumenti të vargut, vlerat krahasohen duke përdorur rendin aktual të renditjes. Për të gjitha argumentet e të dhënave të përkohshme të tipit të datës, vlera më e ulët e kolonës është data më e hershme dhe vlera më e lartë është më e fundit.

    Me funksionet MIN dhe MAX, mund të përdorni fjalë kyçe TË DAKTUAR. Të gjitha vlerat NULL hiqen nga kolonat e tyre të argumenteve përpara se të përdorni funksionet e përgjithshme MIN dhe MAX.

    Funksioni agregat SUM

    Agregat Funksioni SUM llogarit shumën totale të vlerave të kolonës. Argumenti për këtë funksion agregat duhet të jetë gjithmonë i një lloji të të dhënave numerike. Përdorimi i funksionit agregat SUM tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; SELECT SUM (Buxhet) "Buxheti total" NGA Projekti;

    Ky shembull llogarit buxhetet totale për të gjitha projektet. Rezultati i ekzekutimit të pyetjes:

    Në këtë shembull, funksioni i përgjithshëm grupon të gjitha vlerat e buxhetit të projektit dhe përcakton totalin e tyre. Për këtë arsye, pyetja përmban një funksion grupimi të nënkuptuar (si të gjitha pyetjet e ngjashme). Funksioni i grupimit të nënkuptuar nga shembulli i mësipërm mund të specifikohet në mënyrë eksplicite, siç tregohet në shembullin më poshtë:

    PËRDORIMI SampleDb; ZGJIDH SHUMËN (Buxhet) "Buxheti total" NGA GRUP E PROJEKTIT NGA ();

    Përdorimi i parametrit DISTINCT heq çdo vlerë të kopjuar në kolonë përpara se të aplikoni funksionin SUM. Po kështu, hiqni të gjitha vlerat NULL përpara se të aplikoni këtë funksion agregat.

    Funksioni agregat AVG

    Agregat Funksioni AVG kthen mesataren aritmetike të të gjitha vlerave në një kolonë. Argumenti për këtë funksion agregat duhet të jetë gjithmonë i një lloji të të dhënave numerike. Të gjitha vlerat NULL hiqen nga argumenti përpara se të zbatohet funksioni AVG.

    Përdorimi i funksionit të agregatit AVG tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; - Kthen 133833 SELECT AVG (Buxhet) "Buxheti mesatar për një projekt" FROM Project;

    Këtu llogaritet mesatarja aritmetike e buxhetit për të gjitha buxhetet.

    Përmbledh funksionet COUNT dhe COUNT_BIG

    Agregat COUNT funksion ka dy forma të ndryshme:

    COUNT (col_name) COUNT (*)

    Forma e parë e funksionit numëron numrin e vlerave në kolonën col_name. Nëse pyetja përdor fjalën kyçe DISTINCT, të gjitha vlerat e dyfishta të kolonës hiqen përpara se të përdoret funksioni COUNT. Kjo formë e funksionit COUNT nuk merr parasysh vlerat NULL kur numëron numrin e vlerave të kolonës.

    Përdorimi i formës së parë të funksionit agregat COUNT tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; ZGJIDH numrin e projektit, COUNT (Punë e dallueshme) "Punë në projekt" NGA Works_on GROUP BY Project Number;

    Këtu llogaritet numri i pozicioneve të ndryshme për çdo projekt. Rezultati i kësaj pyetjeje:

    Siç mund ta shihni nga pyetja në shembull, vlerat NULL nuk u morën parasysh nga funksioni COUNT. (Shuma e të gjitha vlerave në kolonën e punës është 7, jo 11 siç duhet të jetë.)

    Forma e dytë e funksionit COUNT, d.m.th. funksioni COUNT (*) numëron numrin e rreshtave në një tabelë. Dhe nëse deklarata SELECT e një pyetjeje me funksionin COUNT (*) përmban një klauzolë WHERE me një kusht, funksioni kthen numrin e rreshtave të kënaqshëm kushtin e specifikuar... Ndryshe nga versioni i parë i funksionit COUNT, forma e dytë nuk i injoron vlerat NULL sepse ky funksion funksionon në vargje, jo në kolona. Shembulli i mëposhtëm tregon përdorimin e funksionit COUNT (*):

    PËRDORIMI SampleDb; SELECT Job AS "Lloji i punës", COUNT (*) "Nevojitet punëtorë" FROM Works_on GROUP BY Job;

    Këtu llogaritet numri i postimeve në të gjitha projektet. Rezultati i ekzekutimit të pyetjes:

    COUNT_BIG funksion i njëjti funksion si COUNT. Dallimi i vetëm midis të dyjave është në llojin e rezultatit që ata japin: COUNT_BIG kthen gjithmonë vlera BIGINT, ndërsa COUNT kthen vlera të dhënash INTEGER.

    Funksionet e agregatit statistikor

    Funksionet e mëposhtme përbëjnë grupin e funksioneve agregate statistikore:

    VAR

    Llogarit variancën statistikore të të gjitha vlerave në një kolonë ose shprehje.

    VARP

    Llogarit variancën statistikore të popullatës së të gjitha vlerave në një kolonë ose shprehje.

    STDEV

    Llogarit devijimin standard (i cili llogaritet si Rrenja katrore nga varianca përkatëse) e të gjitha vlerave të kolonës ose shprehjes.

    STDEVP

    Llogarit devijimin standard të mbledhjes së të gjitha vlerave në një kolonë ose shprehje.

    Funksionet e përgjithshme të përcaktuara nga përdoruesi

    Motori i bazës së të dhënave gjithashtu mbështet zbatimin e funksioneve të përcaktuara nga përdoruesi. Kjo aftësi i lejon përdoruesit të plotësojnë funksionet e përgjithshme të sistemit me funksione që ata mund t'i zbatojnë dhe instalojnë vetë. Këto funksione përfaqësojnë një klasë të veçantë funksionesh të përcaktuara nga përdoruesi dhe do të diskutohen në detaje më vonë.

    Klauzola e PASJES

    Në një fjali DUKE përcakton një kusht që zbatohet në një grup rreshtash. Kështu, kjo klauzolë ka të njëjtin kuptim për grupet e rreshtave si fjalia WHERE për përmbajtjen e tabelës përkatëse. Sintaksë DUKE oferta tjetër:

    DUKE gjendje

    Këtu parametri i kushtit paraqet një kusht dhe përmban funksione ose konstante agregate.

    Përdorimi i klauzolës HAVING në lidhje me funksionin agregat COUNT (*) tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; - Kthen "p3" ZGJIDH numrin e projektit NGA Works_on GROUP BY ProjectNumber HAVING COUNT (*)

    Në këtë shembull, sistemi përdor klauzolën GROUP BY për të grupuar të gjitha rreshtat sipas vlerave në kolonën Numri i projektit. Më pas numërohet numri i rreshtave në secilin grup dhe zgjidhen grupet që përmbajnë më pak se katër rreshta (tre ose më pak).

    Klauzola HAVING mund të përdoret gjithashtu pa funksione agregate, siç tregohet në shembullin më poshtë:

    PËRDORIMI SampleDb; - Do të kthejë "Konsulent" ZGJIDH Punë NGA Works_on GRUPI BY Job HAVING Job LIKE "К%";

    Ky shembull grupon rreshtat e tabelës Works_on sipas titullit të punës dhe eliminon punët që nuk fillojnë me shkronjën "K".

    Klauzola HAVING mund të përdoret gjithashtu pa klauzolën GROUP BY, megjithëse kjo nuk është praktikë e zakonshme. Në këtë rast, të gjitha rreshtat e tabelës kthehen në të njëjtin grup.

    RENDI SIPAS klauzolës

    Fjali URDHËR NGA përcakton rendin e renditjes së rreshtave në grupin e rezultateve të kthyera nga pyetja. Kjo klauzolë ka sintaksën e mëposhtme:

    Rendi i renditjes është specifikuar në parametrin col_name. Col_number është një tregues alternativ i renditjes që identifikon kolonat në rendin në të cilin shfaqen në listën e përzgjedhjes së deklaratës SELECT (1 është kolona e parë, 2 është kolona e dytë, e kështu me radhë). Parametri ASC përcakton një rend rritës, dhe Parametri DESC- në rrjedhën e poshtme. Parazgjedhja është ASC.

    Emrat e kolonave në klauzolën ORDER BY nuk duhet të jenë në listën e kolonave të zgjedhura. Por kjo nuk vlen për pyetjet si SELECT DISTINCT, pasi në pyetje të tilla, emrat e kolonave të specifikuara në klauzolën ORDER BY duhet të shfaqen gjithashtu në listën e kolonave të zgjedhura. Përveç kësaj, kjo klauzolë nuk mund të përmbajë emra kolonash nga tabelat që nuk janë të specifikuara në klauzolën FROM.

    Siç mund ta shihni nga sintaksa e klauzolës ORDER BY, renditja e grupit të rezultateve mund të bëhet në kolona të shumta. Ky renditje tregohet në shembullin e mëposhtëm:

    Ky shembull zgjedh numrat e departamenteve dhe mbiemrat dhe emrat e punonjësve për punonjësit, numri i personelit të të cilëve është më pak se 20,000, si dhe renditet sipas mbiemrit dhe emrit. Rezultati i kësaj pyetjeje:

    Kolonat në klauzolën ORDER BY mund të specifikohen jo me emrat e tyre, por sipas renditjes në listën e përzgjedhjes. Prandaj, fjalia në shembullin e mësipërm mund të rishkruhet si më poshtë:

    Kjo mënyrë alternative e specifikimit të kolonave sipas pozicionit të tyre në vend të emrave përdoret nëse kriteri i renditjes përmban një funksion agregat. (Një mënyrë tjetër është përdorimi i emrave të kolonave, të cilët më pas shfaqen në klauzolën RENDI SIPAS.) Megjithatë, në klauzolën ORDER BY, rekomandohet që të specifikoni kolonat me emrat e tyre dhe jo me numra për ta bërë më të lehtë përditësimin e pyetjes nëse keni nevojë të shtoni ose hiqni kolona në listën e përzgjedhur. Specifikimi i kolonave në klauzolën ORDER BY me numrat e tyre tregohet në shembullin më poshtë:

    PËRDORIMI SampleDb; ZGJIDH numrin e projektit, COUNT (*) "Numri i punonjësve" NGA Works_on GRUPI SIPAS Numri i projektit RENDOSJE NGA 2 DESC;

    Këtu, për çdo projekt, zgjidhet numri i projektit dhe numri i punonjësve pjesëmarrës në të, duke renditur rezultatin në rend zbritës me numrin e punonjësve.

    Transact-SQL vendos vlerat NULL në krye të listës kur renditen në rend rritës dhe vlerat NULL në fund të listës kur renditen në rend zbritës.

    Përdorimi ORDER BY Klauzole për të faqezuar rezultatet

    Shfaqja e rezultateve të pyetjeve në faqen aktuale mund të zbatohet ose në një aplikacion të personalizuar, ose mund ta udhëzoni serverin e bazës së të dhënave ta bëjë këtë. Në rastin e parë, të gjitha rreshtat e bazës së të dhënave dërgohen në aplikacion, detyra e të cilit është të zgjedhë rreshtat e kërkuar dhe t'i shfaqë ato. Në rastin e dytë, nga ana e serverit, vetëm rreshtat e kërkuara për Faqja aktuale... Siç mund ta prisni, krijimi i faqeve në anën e serverit zakonisht ofron performancën më të mirë sepse klientit i dërgohen vetëm linjat e nevojshme për shfaqje.

    Për të mbështetur krijimin e faqeve nga ana e serverit, SQL Server 2012 prezanton dy klauzola të reja SELECT: OFFSET dhe FETCH. Zbatimi i këtyre dy fjalive tregohet në shembullin e mëposhtëm. Këtu, nga baza e të dhënave AdventureWorks2012 (të cilën mund ta gjeni në burim), nxjerr ID-në e biznesit, titullin e punës dhe ditëlindjen e të gjitha punonjëseve femra, të renditura sipas titullit të punës në rend rritës. Grupi i rreshtave që rezulton ndahet në faqe me 10 rreshta dhe shfaqet një faqe e tretë:

    Në një fjali OFFSET specifikon numrin e rreshtave të rezultateve që duhet të kapërcehen në rezultatin e shfaqur. Kjo shumë llogaritet pasi rreshtat janë renditur me klauzolën RENDI SIPAS. Në një fjali MERR TJETËR specifikon numrin e WHERE dhe rreshtave të renditura për t'u kthyer. Parametri i kësaj klauzole mund të jetë një konstante, një shprehje ose rezultat i një pyetjeje tjetër. Klauzola FETCH NEXT është e ngjashme me klauzolën MERRNI SË PARË.

    Qëllimi kryesor kur krijohen faqe në anën e serverit është që të jemi në gjendje të implementojmë forma të zakonshme të faqeve duke përdorur variabla. Kjo detyrë mund të realizohet me Paketa SQL Serveri.

    SELECT Deklarata dhe prona IDENTITET

    prona IDENTITET ju lejon të përcaktoni vlerat për një kolonë specifike të tabelës në formën e një numëruesi automatik në rritje. Kolonat e një lloji të të dhënave numerike si TINYINT, SMALLINT, INT dhe BIGINT mund ta kenë këtë veti. Për një kolonë të tillë tabele, motori i bazës së të dhënave gjeneron automatikisht vlera sekuenciale duke filluar me vlerën fillestare të specifikuar. Kështu, vetia IDENTITY mund të përdoret për të krijuar të paqarta vlerat numerike për kolonën e zgjedhur.

    Një tabelë mund të përmbajë vetëm një kolonë me vetinë IDENTITY. Pronari i tabelës ka aftësinë të specifikojë vlerën fillestare dhe rritjen, siç tregohet në shembullin më poshtë:

    PËRDORIMI SampleDb; KRIJO TABELA Produkti (ID INT IDENTITET (10000, 1) JO NULL, Emri NVARCHAR (30) JO NULL, PARA ÇMIMI) INSERT NË PRODHIM (Emri, Çmimi) VLERAT ("Produkti1", 10), ("Produkti2", 15) , ("Produkti3", 8), ("Produkti4", 15), ("Produkti5", 40); - Do të kthejë 10004 SELECT IDENTITYCOL FROM Product WHERE Emri = "Product5"; - Analoge me deklaratën e mëparshme ZGJIDHni identitetin e $ FROM Produkti WHERE Emri = "Produkt5";

    Ky shembull fillimisht krijon një tabelë Produkti që përmban një kolonë ID me një veçori IDENTITY. Vlerat në kolonën Id krijohen automatikisht nga sistemi, duke filluar nga 10,000 dhe duke u rritur me një hap për çdo vlerë pasuese: 10,000, 10,001, 10,002, etj.

    Disa funksione dhe variabla të sistemit shoqërohen me veçorinë IDENTITY. Për shembull, përdoret shembulli i kodit ndryshorja e sistemit $ identitet... Siç mund ta shihni nga rezultatet e ekzekutimit të këtij kodi, kjo variabël i referohet automatikisht veçorisë IDENTITY. Në vend të kësaj, mund të përdorni gjithashtu funksionin e sistemit IDENTITETI.

    Vlera fillestare dhe rritja e kolonës me vetinë IDENTITY mund të gjenden duke përdorur funksionet IDENT_SEED dhe IDENT_INCR përkatësisht. Këto funksione zbatohen si më poshtë:

    PËRDORIMI SampleDb; SELECT IDENT_SEED ("Produkt"), IDENT_INCR ("Produkt")

    Siç u përmend, vlerat e IDENTITY vendosen automatikisht nga sistemi. Por përdoruesi mund të specifikojë në mënyrë eksplicite vlerat e tyre për vargje të caktuara duke i caktuar parametrit IDENTITY_INSERT vlera ON para futjes së vlerës eksplicite:

    SET IDENTITY INSERT emrin e tabelës ON

    Për shkak se parametri IDENTITY_INSERT mund të përdoret për të vendosur çdo vlerë, duke përfshirë vlerat e dyfishta, në një kolonë me veçorinë IDENTITY, vetia IDENTITY zakonisht nuk zbaton veçantinë e vlerave të kolonës. Prandaj, kufizimet UNIQUE ose PRIMARY KEY duhet të zbatohen për të zbatuar veçantinë e vlerave të kolonës.

    Kur futni vlera në një tabelë pasi keni vendosur IDENTITY_INSERT në aktiv, sistemi krijon vlerën tjetër në kolonën IDENTITY, duke rritur vlerën më të lartë aktuale në atë kolonë.

    Deklarata CREATE SEQUENCE

    Përdorimi i vetive IDENTITY ka disa të meta të rëndësishme, më të rëndësishmet prej të cilave janë:

      prona është e kufizuar në tabelën e specifikuar;

      vlera e re e kolonës nuk mund të merret në asnjë mënyrë tjetër, përveçse duke e aplikuar atë;

      vetia IDENTITY mund të specifikohet vetëm kur krijohet një kolonë.

    Për këto arsye, SQL Server 2012 prezanton sekuenca që kanë të njëjtën semantikë si vetia IDENTITY, por pa disavantazhet e listuara më parë. Në këtë kontekst, një sekuencë i referohet funksionalitetit të një baze të dhënash që ju lejon të specifikoni vlerat e kundërta për objekte të ndryshme të bazës së të dhënave, të tilla si kolonat dhe variablat.

    Sekuencat krijohen duke përdorur udhëzimin KRIJO SEKUENCE... Deklarata CREATE SEQUENCE përcaktohet në standardin SQL dhe mbështetet nga sisteme të tjera të bazës së të dhënave relacionale si IBM DB2 dhe Oracle.

    Shembulli më poshtë tregon se si të krijoni një sekuencë në SQL Server:

    PËRDORIMI SampleDb; KRIJO SEKUENCE dbo.Sekuenca 1 SI NË FILLIM ME 1 RRITJE ME 5 MINVLERË 1 MAXVLERË 256 CIKLE;

    Në shembullin e mësipërm, vlerat e Sekuencës 1 gjenerohen automatikisht nga sistemi, duke filluar me një vlerë prej 1 dhe në rritje prej 5 për çdo vlerë të njëpasnjëshme. Kështu, në klauzolën FILLIM tregohet vlera fillestare dhe në Oferta RRITJE- hap. (Hapi mund të jetë pozitiv ose negativ.)

    Në dy fjalitë e ardhshme fakultative MINVALUES dhe MAXVLERA specifikon vlerën minimale dhe maksimale të objektit të sekuencës. (Vini re se MINVALUE duhet të jetë më e vogël ose e barabartë me vlerën fillestare dhe MAXVALUE nuk mund të jetë më e madhe se kufiri i sipërm i llojit të të dhënave të specifikuar për sekuencën.) Në një fjali CIKLI tregon se sekuenca përsëritet nga fillimi kur tejkalohet vlera maksimale (ose minimale për një sekuencë me hap negativ). Si parazgjedhje, kjo klauzolë është vendosur në NO CYCLE, që do të thotë se tejkalimi i vlerës maksimale ose minimale të sekuencës krijon një përjashtim.

    Tipari kryesor i sekuencave është pavarësia e tyre nga tabelat, d.m.th. ato mund të përdoren me çdo objekt të bazës së të dhënave siç janë kolonat e tabelës ose variablat. (Kjo veti ka një efekt pozitiv në ruajtjen dhe, për rrjedhojë, në performancën. Një sekuencë specifike nuk ka nevojë të ruhet; ruhet vetëm vlera e fundit e saj.)

    Vlerat e reja të sekuencës krijohen me VLERA E TJETËR PËR shprehjet, aplikimi i të cilit tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; - Kthen 1 ZGJIDH VLERËN TJETËR PËR dbo.sequence1; - Kthen 6 (hapi tjetër) ZGJIDH VLERËN E TJETËR PËR dbo.sequence1;

    Ju mund të përdorni shprehjen NEXT VALUE FOR për të caktuar rezultatin e një sekuence në një variabël ose qelizë kolone. Shembulli i mëposhtëm ilustron përdorimin e kësaj shprehjeje për të caktuar rezultatet në një kolonë:

    PËRDORIMI SampleDb; KRIJO TABELA Produkti (Id INT NOT NULL, Emri NVARCHAR (30) JO NULL, PARA Çmimi) FUT NE VLERAT E PRODUKTIT (VLERA TJETËR PËR dbo.sequence1, "Product1", 10); INSERT NË VLERAT E PRODUKTIT (VLERA E TJETËR PËR dbo.sequence1, "Product2", 15); -...

    Shembulli i mësipërm fillimisht krijon një tabelë të quajtur Produkt me katër kolona. Më pas, dy deklarata INSERT futin dy rreshta në këtë tabelë. Dy qelizat e para të kolonës së parë do të jenë 11 dhe 16.

    Shembulli i mëposhtëm tregon përdorimin e pamjes së katalogut sys.sekuenca për të parë vlerën aktuale të një sekuence pa e përdorur atë:

    Në mënyrë tipike, shprehja NEXT VALUE FOR përdoret në një deklaratë INSERT për të udhëzuar sistemin të futë vlerat e krijuara. Kjo shprehje mund të përdoret gjithashtu si pjesë e një pyetjeje me shumë rreshta duke përdorur klauzolën OVER.

    Për të ndryshuar një veti të një sekuence ekzistuese, aplikoni Deklarata ALTER SEQUENCE... Një nga përdorimet më të rëndësishme për këtë deklaratë është me opsionin RISTART WITH, i cili rivendos sekuencën e specifikuar. Shembulli i mëposhtëm tregon përdorimin e deklaratës ALTER SEQUENCE për të rivendosur pothuajse të gjitha vetitë e Sekuencës1:

    PËRDORIMI SampleDb; SEKUENCA NDRYSHIME dbo.sekuenca1 RIFIKONI ME 100 RRITJE ME 50 MINVLERË 50 MAXVLERË 200 PA CIKLI;

    Sekuenca fshihet duke përdorur udhëzimin SEKUENCA E RËZIMIT.

    Vendosni operatorët

    Përveç operatorëve të diskutuar më parë, Transact-SQL mbështet tre operatorë të tjerë të grupeve: UNION, INTERSECT dhe EXCEPT.

    Operatori UNION

    Operatori UNION kombinon rezultatet e dy ose më shumë pyetjeve në një grup të vetëm rezultatesh që përfshin të gjitha rreshtat që u përkasin të gjitha pyetjeve në bashkim. Rrjedhimisht, rezultati i bashkimit të dy tabelave është një tabelë e re që përmban të gjitha rreshtat në njërën ose të dyja tabelat origjinale.

    Forma e përgjithshme e operatorit UNION duket si kjo:

    select_1 UNION zgjidhni_2 (select_3]) ...

    Opsionet select_1, select_2, ... janë deklarata SELECT që krijojnë bashkimin. Nëse përdoret parametri ALL, shfaqen të gjitha rreshtat, duke përfshirë dublikatat. Në deklaratën UNION, parametri ALL ka të njëjtin kuptim si në SELECT, por me një ndryshim: ky është parazgjedhja për një SELECT, por duhet të specifikohet në mënyrë eksplicite për UNION.

    Në formën e tij origjinale, SampleDb nuk është i përshtatshëm për të demonstruar përdorimin e operatorit UNION. Prandaj në këtë seksion krijohet një tabelë e re EmployeeEnh e cila është identike tabela ekzistuese Punonjës, por ka një kolonë shtesë të qytetit. Kjo kolonë tregon vendbanimin e punonjësve.

    Krijimi i tabelës EmployeeEnh na ofron një mundësi për të demonstruar përdorimin e klauzolës. në deklaratën SELECT. Deklarata SELECT INTO kryen dy operacione. Së pari, krijohet një tabelë e re me kolonat e listuara në listën SELECT. Pastaj rreshtat nga tabela origjinale futen në tabelën e re. Emri i tabelës së re është specifikuar në klauzolën INTO, dhe emri i tabelës burimore është specifikuar në klauzolën FROM.

    Shembulli më poshtë tregon krijimin e tabelës EmployeeEnh nga tabela Employee:

    PËRDORIMI SampleDb; SELECT * INTO EmployeeEnh FROM Employee; ALTER TABLE PunonjësEnh SHTO Qyteti NCHAR (40) NULL;

    Në këtë shembull, deklarata SELECT INTO krijon tabelën EmployeeEnh, fut të gjitha rreshtat nga tabela e burimit Employee në të dhe më pas deklarata ALTER TABLE shton kolonën City në tabelën e re. Por kolona e shtuar Qyteti nuk përmban asnjë vlerë. Vlerat mund të futen në këtë kolonë nga Mjedisi i menaxhimit Studio ose me kodin e mëposhtëm:

    PËRDORIMI SampleDb; PËRDITËZIM EmployeeEnh SET City = "Kazan" WHERE Id = 2581; PËRDITËSOJE EmployeeEnh SET City = "Moscow" WHERE Id = 9031; PËRDITËSOJE EmployeeEnh SET Qyteti = "Yekaterinburg" WHERE Id = 10102; UPDATE EmployeeEnh SET City = "Shën Petersburg" WHERE Id = 18316; UPDATE EmployeeEnh SET City = "Krasnodar" WHERE Id = 25348; PËRDITËSIM EmployeeEnh SET Qyteti = "Kazan" WHERE Id = 28559; UPDATE EmployeeEnh SET City = "Perm" WHERE Id = 29346;

    Tani jemi gati të demonstrojmë përdorimin e deklaratës UNION. Shembulli më poshtë tregon një pyetje për të krijuar një bashkim midis tabelave EmployeeEnh dhe Department duke përdorur këtë deklaratë:

    PËRDORIMI SampleDb; ZGJIDH Qyteti AS "Qytet" NGA PunonjësitEnh UNION ZGJEDH vendndodhjen NGA Departamenti;

    Rezultati i kësaj pyetjeje:

    Vetëm tabelat e përputhshme mund të bashkohen duke përdorur deklaratën UNION. Me tabela të pajtueshme, nënkuptojmë që të dyja listat e kolonave në përzgjedhje duhet të përmbajnë të njëjtin numër kolonash dhe kolonat përkatëse duhet të kenë lloje të dhënash të përputhshme. (Për sa i përket përputhshmërisë, llojet e të dhënave INT dhe SMALLINT nuk janë të përputhshme.)

    Rezultati i lidhjes mund të porositet vetëm duke përdorur klauzolën ORDER BY në udhëzimi i fundit SELECT siç tregohet në shembullin e mëposhtëm. Klauzolat GROUP BY dhe HAVING mund të përdoren me deklarata individuale SELECT, por jo brenda vetë bashkimit.

    Pyetja në këtë shembull zgjedh punonjësit që ose punojnë në departamentin d1 ose që kanë filluar të punojnë në një projekt përpara 1 janarit 2008.

    Operatori UNION mbështet opsionin ALL. Ky opsion nuk heq dublikatat nga grupi i rezultateve. Një operator OR mund të përdoret në vend të operatorit UNION nëse të gjitha deklaratat SELECT të bashkuara nga një ose më shumë operatorë UNION i referohen të njëjtës tabelë. Në këtë rast, grupi i deklaratave SELECT zëvendësohet nga një deklaratë e vetme SELECT me një grup deklaratash OR.

    Operatorët INTERSECT dhe EXCEPT

    Dy operatorë të tjerë për të punuar me grupe, KRYQËZOHET dhe PËRVEÇ, përcaktoni përkatësisht kryqëzimin dhe ndryshimin. Nën kryqëzimin, në këtë kontekst, ka një grup rreshtash që u përkasin të dy tabelave. Dhe ndryshimi midis dy tabelave përcaktohet si të gjitha vlerat që i përkasin tabelës së parë dhe nuk janë të pranishme në të dytën. Shembulli i mëposhtëm tregon përdorimin e operatorit INTERSECT:

    Transact-SQL nuk e mbështet përdorimin e parametrit ALL as me operatorët INTERSECT ose EXCEPT. Përdorimi i operatorit EXCEPT tregohet në shembullin e mëposhtëm:

    Duhet mbajtur mend se këta tre operatorë grupesh kanë përparësi të ndryshme ekzekutimi: operatori INTERSECT ka përparësinë më të lartë, i ndjekur nga PËRVEÇ deklaratës dhe operatori UNION ka precedencën më të ulët. Dështimi për t'i kushtuar vëmendje përparësisë së ekzekutimit kur përdorni disa operatorë të ndryshëm grupesh mund të çojë në rezultate të papritura.

    Shprehjet RAST

    Në fushën e programimit të aplikacionit të bazës së të dhënave, ndonjëherë është e nevojshme të modifikohet prezantimi i të dhënave. Për shembull, njerëzit mund të ndahen sipas klasës së tyre shoqërore, duke përdorur vlerat 1, 2 dhe 3, që tregojnë përkatësisht burra, gra dhe fëmijë. Kjo teknikë programimi mund të zvogëlojë kohën e nevojshme për zbatimin e programit. Shprehje RASTE Transact-SQL ju lejon të zbatoni me lehtësi këtë lloj kodimi.

    Ndryshe nga shumica e gjuhëve programuese, CASE nuk është një deklaratë, por një shprehje. Prandaj, një shprehje CASE mund të përdoret pothuajse kudo ku Transact-SQL lejon përdorimin e shprehjeve. Shprehja CASE ka dy forma:

      shprehje e thjeshtë RAST;

      shprehja e kërkimit RAST.

    Sintaksa për një shprehje të thjeshtë CASE është si më poshtë:

    Një deklaratë me një shprehje të thjeshtë CASE fillimisht kërkon listën e të gjitha shprehjeve në klauzola KUR shprehja e parë që përputhet me shprehjen_1 dhe më pas ekzekuton atë përkatëse PASTAJ klauzolë... Nëse nuk ka asnjë shprehje që përputhet në listën WHEN, atëherë klauzolë TJETËR.

    Sintaksa për një shprehje kërkimi CASE është si më poshtë:

    V në këtë rast kërkohet kushti i parë i përputhjes dhe më pas ekzekutohet klauzola e përputhjes THEN. Nëse asnjë nga kushtet nuk i plotëson kërkesat, klauzola ELSE ekzekutohet. Përdorimi i shprehjes së kërkimit CASE tregohet në shembullin e mëposhtëm:

    PËRDORIMI SampleDb; ZGJIDH emrin e projektit, RASTIN KUR Buxheti> 0 DHE Buxheti 100000 DHE Buxheti 150000 DHE Buxheti

    Rezultati i kësaj pyetjeje:

    Ky shembull peshon buxhetet e të gjitha projekteve dhe shfaq peshat e llogaritura së bashku me emrat përkatës të projekteve.

    Shembulli më poshtë tregon një mënyrë tjetër për të përdorur një shprehje CASE ku klauzola WHEN përmban nënpyetje që janë pjesë e shprehjes:

    PËRDORIMI SampleDb; SELECT Emri i Projektit, RASTI KUR p1.Buxheti (SELECT AVG (p2.Budget) FROM Project p2) PAS "mbi mesataren" FUND "Kategoria e buxhetit" FROM Projekti p1;

    Rezultati i kësaj pyetjeje është si më poshtë:

    Qëllimi i punës: të mësoni se si të formoni pyetjet më të thjeshta në bazën e të dhënave në gjuhën SQL, të përdorni shprehje në pyetje që përfshijnë veprime aritmetike, funksione për të punuar me vargje dhe data dhe funksione të përmbledhura.

    Kërkoni për të zgjedhur të gjithë tabelën. Në punën laboratorike nr. 10, një kërkesë e tillë tashmë është krijuar duke përdorur Access. Ju mund të thjeshtoni llojin e kërkesës nëse në vend të një kërkese

    SELECT Porositë * FROM Orders;

    shkruani një kërkesë

    SELECT * NGA Porositë

    Gjuha SQL ju lejon të hiqni emrin e tabelës përpara emrit të fushës në rastet kur pyetja përdor një tabelë, ose emri i fushës nuk përsëritet në disa tabela në një pyetje me shumë tabela.

    Ndërtimi i pyetjeve SQL në Access fillon duke thirrur Query Designer. Për ta bërë këtë, në dritaren e bazës së të dhënave, zgjidhni objektin "Queries", artikullin e menysë "Krijo" dhe në dritaren "Kërkesë e re", artikullin "Ndërtues". Më pas, zgjidhni tabelën "Orders" dhe kaloni në modalitetin SQL. Kalo në modalitetin SQL: menyja Qasja ViewModaliteti Sql.

    Përfundoni formimin e kërkesës dhe ekzekutoni atë.

    Shfaqja e fushave të zgjedhura, zëvendësimi i emrave të fushave me pseudonime, renditja e të dhënave. Fushat në tabelë shfaqen sipas radhës në të cilën janë renditur në pyetje. Emrat e fushave shpesh nuk janë të lexueshëm kur shfaqen rezultatet e pyetjeve. Ato mund të zëvendësohen në pyetje me pseudonime, siç tregohet në shembullin:

    ZGJIDHni Kodin e Porosisë AS Porosi, Emri i Përfituesit AS Përfituesi, Adresa e Përfituesit AS Adresa, Data e Ekzekutimit SI DATE NGA Porositë RENDOSJA NGA Emri i Përfituesit ASC;

    Në shembullin Kodi i porosisë, Emri i Marrësit, Adresa e Marrësit dhe Data e Ekzekutimit- emrat e fushave në tabelën "Urdhërat". Kur rezultatet e pyetjes shfaqen në ekranin e ekranit, emrat e fushave do të zëvendësohen me pseudonimet përkatëse të specifikuara pas fjalës AS.

    Fjali

    RENDIT SIPAS Emrit të Marrësit ASC

    shërben për të renditur të dhënat e zgjedhura në rend rritës (d.m.th. alfabetik) të vlerës së fushës Emri i marrësit. Nëse duhet të renditni në rend zbritës , atëherë në vend të ASC duhet të përdorë DESC (shkurt për zbritje).

    Formoni dhe ekzekutoni këtë kërkesë.

    Dalja e të dhënave pa dyfishim. Formoni dhe ekzekutoni kërkesën e mëposhtme

    ZGJIDHni Emrin e Përfituesit SI Përfitues NGA Porositë RENDOSJA SIPAS Emrit të Përfituesit DESC.

    Emrat e marrësve përsëriten shumë herë sepse janë zgjedhur të gjitha regjistrimet në tabelë. Për të shmangur regjistrimet e dyfishta, shtoni fjalën DISTINCT pas SELECT në pyetjen tuaj. Ndonjëherë modaliteti DISTINCT vendoset si parazgjedhje në DBMS. Për tërheqje nga të gjitha regjistron në këtë rast, fjala ALL futet pas fjalës SELECT.

    Përdorimi i shprehjeve në një pyetje. Në listën e daljes, mund të specifikoni jo vetëm emrat e fushave dhe pseudonimet e tyre, por edhe shprehjet që përfshijnë operacione dhe funksione aritmetike.

    Shumëzimi. Formoni një kërkesë për të tërhequr nga tabela "Porosit" kodin e produktit, çmimin, sasinë dhe koston totale të produktit të porositur. Kërkesa duket si kjo:

    ZGJIDHni kodin e produktit, çmimin, sasinë, Çmimi * Sasia SI Kostoja NGA porosia;

    Më vete plotësoni kërkesën tuaj me një çmim të zbritur.

    Përdorimi i funksioneve. Funksioni STR () synohet të konvertohet në lloj teksti. Pyetja e mëposhtme përdoret për të shfaqur koston e një produkti në mijëra rubla me një tregues të njësisë së matjes në ekranin e ekranit:

    ZGJIDH kodin e produktit, rr(Çmimi * Sasia / 1000) + "mijë rubla" SI Kostoja NGA porositja;

    Në mënyrë që numri dhe teksti të shtypen në kolonën "Kosto", duhet ta konvertoni numrin në një lloj teksti dhe ta kombinoni atë me tekstin "mijë rubla". Për të transformuar, përdorni funksionin rr (<выражение числового типа>) dhe operacioni i bashkimit "+" (lidhja).

    Krijoni një pyetës në të cilin zgjidhen 5 fusha nga tabela "Orders" dhe rezultati shfaqet në dy kolona. Në kolonën e parë shfaqet fusha "Kodi i porosisë" dhe në kolonën me pseudonimin "Adresa e klientit" kombinohen këto fusha: Indeksi i Marrësit, Vendi i Marrësit, Qyteti i Marrësit, Emri i Marrësit.

    Mos harroni të vendosni një presje me një hapësirë ​​midis fushave që do të kombinohen. Rezultati i pyetjes (tregohen dy rreshtat e parë) duhet të duket kështu:

    Funksioni DATEPART () për të theksuar një pjesë të një date. Shikoni Ndihmën e Access për një përshkrim të këtij funksioni (Përmbajtja, Referenca e gjuhës Visual Basic, Funksionet, shkronja D).

    Përcaktoni me anë të një pyetjeje në tabelën "Porositë" për cilat vite janë dorëzuar mallrat.

    Funksionet agregate.(Ato quhen statistikore në Access.) Le të numërojmë numrin total të regjistrimeve në tabelën "Orders" dhe numrin e regjistrimeve që përmbajnë të dhëna në fushën "RecipientScope", domethënë numrin e regjistrimeve me një fushë "RecipientScope" jo bosh. Për ta bërë këtë, ekzekutoni pyetjen e mëposhtme:

    SELECT numërimin (*), numërimin (ReceiverScope) FROM Orders;

    Kërkesa përdor një funksion agregat COUNT (). Duke përdorur funksionet e përgjithshme MAX (), MIN () dhe AVG (), krijoni një pyetje për të llogaritur çmimin maksimal minimal dhe mesatar të një produkti në tabelën Produktet.

    Duke përdorur funksionin agregat SUM (), krijoni një pyetje për të llogaritur koston totale të transportit për të gjithë artikujt e porositur në tabelën e porosive.

    Ruani të gjitha kërkesat që keni krijuar dhe tregojini mësuesit.

    Sot do të flasim për "Operacionet me shumicë në pyetjet e Access". Operacionet me shumicë në pyetjet e Access ju lejojnë të zgjidhni grupe të dhënash me të njëjtat vlera në fushat e specifikuara dhe të llogaritni totalet për secilin prej grupeve nga fushat e tjera duke përdorur një nga funksionet e përgjithshme. Funksionet statistikore janë kryesisht të zbatueshme për llojet e të dhënave numerike, valutore, datë/kohë.
    V Qasja ka nëntë funksione statistikore:

    • Shuma - shuma e vlerave të një fushe të caktuar për grupin;
    • Mesatarja - mesatarja e të gjitha vlerave të fushave në grup;
    • Max, Min - vlera maksimale, minimale e fushës në grup;
    • Numërimi - numri i vlerave të fushave në grup, duke përjashtuar vlerat boshe;
    • StDev - devijimi standard nga vlera mesatare e fushës në grup;
    • Var është varianca e vlerave të fushës në grup;
    • I pari dhe i fundit - vlera e fushës nga rekordi i parë ose i fundit në grup.

    Rezultati duke përdorur operacionet e grupit përmban një rekord për secilin grup. Pyetja, para së gjithash, përfshin, me të cilat kryhet grupimi dhe fushat për të cilat funksionet statistikore... Përveç këtyre fushave, pyetja mund të përfshijë fusha me të cilat vendosen kushtet e përzgjedhjes.
    Le të shqyrtojmë ndërtimin e një pyetjeje me një tabelë me një operacion grupi duke përdorur tabelën DELIVERY_PLAN si shembull.

    Pyetja për shumën

    Detyrë. Përcaktoni shumën totale të secilit prej mallrave që do t'u furnizohen blerësve sipas kontratave. Të gjitha të dhënat për sasinë e mallrave të planifikuar për dorëzim tregohen në tabelën DELIVERY_PLAN.

    1. Në modalitetin e projektimit, krijoni një pyetje të zgjedhur nga tabela DELIVERY_PLAN.
    2. Nga lista e tabelës, tërhiqni fushën CODE_TO - kodi i produktit në formularin e kërkesës. Kjo fushë do të përdoret për të grupuar të dhënat e tabelës.
    3. Zvarritni dhe lëshoni fushën QUANTITY_POST në formularin e kërkesës, sipas të cilit do të llogaritet sasia totale e secilit prej mallrave të porositura në të gjitha kontratat.
    4. Ekzekutoni komandën Totals nga grupi Show / Hide. Formulari i kërkesës do të shfaqet linjë e re Operacioni i grupit (Total) me vlerën Group By në të dyja fushat e pyetjes.
    5. Në kolonën QUANT_POST, zëvendësoni fjalën Group By me funksionin Sum. Për ta bërë këtë, telefononi listën dhe zgjidhni këtë funksion. Formulari i kërkesës do të marrë formën e treguar në Fig. 4.11.
    6. Për të shfaqur rezultatin e pyetjes (Figura 4.12), klikoni butonin Run në grupin Results.
    7. Zëvendësoni titullin e fushës Sum-QTY_POST me Artikujt e porositur. Për ta bërë këtë, shkoni në modalitetin e projektimit, në formën e kërkesës, vendosni kursorin e miut në fushën QTY_POST dhe shtypni butonin e djathtë. V menyja e kontekstit zgjidhni Properties. Në dritaren Field Properties, futni Caption - Items ordered. Për të hapur fletën e vetive, mund të ekzekutohet komanda Property Sheet në grupin Show/Hide.


    1. Ruani nën emrin Mallra të porositura.
    2. Për të numëruar numrin e mallrave të porositura në çdo muaj, gruponi sipas dy fushave: CODE_TO dhe TIME_POST, e cila ruan muajin e dorëzimit (Fig. 4.13).
    3. Për të llogaritur numrin e mallrave të porositura në një muaj të caktuar, plotësoni kërkesën e mëparshme duke futur një parametër të kërkesës në kushtin e përzgjedhjes (Fig. 4.14).



    Pyetje me funksionin Count

    Detyrë. Përcaktoni sa herë janë dërguar mallrat për secilën nga kontratat. Fakti i dërgesës regjistrohet në tabelën TË ARDHURAT.

    1. Krijoni një pyetje të zgjedhur bazuar në tabelën OVERLAY.
    2. Nga lista e fushave në tabelën BILLBOARD, tërhiqni fushën NOM_DOG në formularin e pyetjes. Kjo fushë duhet të përdoret për grupim.
    3. Në fakt, kuptimi i problemit zbret në numërimin e numrit të rreshtave në tabelë me të njëjtin numër kontrate, kështu që nuk ka rëndësi se në cilën fushë do të llogaritet funksioni Count. Tërhiqni çdo fushë në formularin e kërkesës, për shembull, përsëri NOM_DOG.
    4. Ekzekutoni komandën Totals nga grupi Show / Hide. Zëvendësoni fjalën Group By në njërën nga kolonat me emrin NOM_DOG me funksionin Count. Formulari i kërkesës do të marrë formën e treguar në Fig. 4.15.

    sipas vlerës së kolonës Disiplina. Do të marrim 4 grupe, për të cilat mund të llogarisim disa vlera grupi, për shembull, numrin e tupave në një grup, vlerën maksimale ose minimale të kolonës Score. Tabela 5.7. Funksionet agregate
    Funksioni Rezultati
    COUNT Numri i rreshtave ose vlerave të fushës jo të zbrazët që pyeti ka zgjedhur
    SHUMË Shuma e të gjitha vlerave të zgjedhura për këtë fushë
    AVG Mesatarja aritmetike e të gjitha vlerave të zgjedhura në këtë fushë
    MIN Më e vogla nga të gjitha vlerat e zgjedhura për këtë fushë
    MAX Më e madhja nga të gjitha vlerat e zgjedhura për këtë fushë
    R1
    Emri i plotë Disipline Gradë
    Grupi 1 Petrov F.I. Baza e të dhënave 5
    K. A. Sidorov Baza e të dhënave 4
    Mironov A.V. Baza e të dhënave 2
    Stepanova K.E. Baza e të dhënave 2
    Krylova T.S. Baza e të dhënave 5
    Vladimirov V.A. Baza e të dhënave 5
    Grupi 2 K. A. Sidorov Teoria e informacionit 4
    Stepanova K.E. Teoria e informacionit 2
    Krylova T.S. Teoria e informacionit 5
    Mironov A.V. Teoria e informacionit I pavlefshëm
    Grupi 3 Trofimov P.A. Rrjetet dhe telekomunikacioni 4
    Ivanova E.A. Rrjetet dhe telekomunikacioni 5
    N. V. Utkina Rrjetet dhe telekomunikacioni 5
    Grupi 4 Vladimirov V.A. gjuhe angleze 4
    Trofimov P.A. gjuhe angleze 5
    Ivanova E.A. gjuhe angleze 3
    Petrov F.I. gjuhe angleze 5

    Funksionet agregate përdoren si emrat e fushave në SELECT deklaratë por me një përjashtim: e marrin emrin e fushës si argument. Vetëm SUM dhe AVG mund të përdoren me fusha numerike... Fushat numerike dhe ato të karaktereve mund të përdoren me funksionet COUNT, MAX dhe MIN. Kur përdoren me fushat e karaktereve, MAX dhe MIN do t'i përkthejnë ato në ekuivalentin ASCII dhe do t'i përpunojnë sipas alfabetit. Disa DBMS lejojnë përdorimin e agregateve të mbivendosur, por ky është një devijim nga standardi ANSI me të gjitha pasojat që pasojnë.

    Për shembull, mund të llogarisni numrin e studentëve që kanë kaluar provimet në secilën disiplinë. Për ta bërë këtë, duhet të ekzekutoni një pyetje të grupuar sipas fushës "Disiplina" dhe si rezultat të shfaqni emrin e disiplinës dhe numrin e rreshtave në grup për këtë disiplinë. Përdorimi i karakterit * si argument për funksionin COUNT do të thotë që të gjitha rreshtat në grup janë të numëruara.

    ZGJIDH disiplinën R1, COUNT (*) NGA GRUPI R1 NGA Disiplina R1

    Rezultati:

    Nëse duam të numërojmë numrin e atyre që kanë kaluar provimin në ndonjë disiplinë, atëherë duhet të përjashtojmë vlerat e papërcaktuara nga raporti fillestar përpara grupimit. Në këtë rast, kërkesa do të duket si kjo:

    Ne marrim rezultatin:

    Në këtë rast, linja me studentin

    Mironov A.V. Teoria e informacionit I pavlefshëm

    nuk do të bjerë në grupin e tupleve përpara grupimit, kështu që numri i tupleve në grup për disiplinën " Teoria e informacionit“Do të jetë 1 më pak.

    Mund të aplikohet funksionet agregate edhe pa funksionimin e grupimit paraprak, në këtë rast e gjithë relacioni konsiderohet si një grup dhe për këtë grup mund të llogaritet një vlerë për grup.

    Duke iu referuar sërish bazës së të dhënave të Sesionit (tabelat R1, R2, R3), do të gjejmë numrin e provimeve të mbartura me sukses:

    Kjo, natyrisht, është e ndryshme nga zgjedhja e një fushe, pasi një vlerë e vetme kthehet gjithmonë, pavarësisht se sa rreshta janë në tabelë. Argumenti funksionet agregate mund të ketë kolona të veçanta tabelash. Por për të llogaritur, për shembull, numrin e vlerave të dallueshme të një kolone të caktuar në një grup, është e nevojshme të përdorni fjalën kyçe DISTINCT së bashku me emrin e kolonës. Le të llogarisim numrin e notave të ndryshme të marra për secilën disiplinë:

    Rezultati:

    Rezultati mund të përfshijë vlerën e fushës së grupimit dhe disa funksionet agregate, dhe fusha të shumta mund të përdoren në kushtet e grupimit. Në këtë rast, grupet formohen nga një grup fushash grupimi të specifikuara. Operacionet agregate mund të aplikohen në lidhjen e tabelave të shumëfishta burimesh. Për shembull, le të parashtrojmë pyetjen: përcaktoni për çdo grup dhe çdo disiplinë numrin e atyre që e kaluan me sukses provimin dhe rezultatin mesatar për disiplinën.

    Rezultati:

    Nuk mund të përdorim funksionet agregate në fjalinë WHERE sepse kallëzuesit vlerësohen në terma të një rreshti të vetëm, dhe funksionet agregate- përsa i përket grupeve të linjave.

    Klauzola GROUP BY ju lejon të përcaktoni një nëngrup vlerash në një fushë të caktuar në terma të një fushe tjetër dhe të aplikoni një funksion agregat në nëngrup. Kjo bën të mundur kombinimin e fushave dhe funksionet agregate në një klauzolë të vetme SELECT. Funksionet agregate mund të përdoret si në shprehjen e prodhimit të rezultateve ZGJIDHni rreshtat, dhe në shprehjen e gjendjes së përpunimit të grupeve të formuara DUKE. Në këtë rast, çdo funksion agregat llogaritet për çdo grup të përzgjedhur. Vlerat e llogaritura funksionet agregate, mund të përdoret për të shfaqur rezultatet përkatëse ose për kushtet e përzgjedhjes së grupit.

    Le të ndërtojmë një pyetje që shfaq grupet në të cilat janë marrë më shumë se një deuce në një disiplinë në provime:

    Në vijim, si shembull, nuk do të punojmë me bazën e të dhënave "Session", por me bazën e të dhënave "Banka", e cila përbëhet nga një tabelë e vetme F, e cila ruan relacionin F që përmban informacione rreth llogarive në degët e një të caktuar. banka:

    F = (N, emri i plotë, Dega, Data e Hapjes, Data e Mbylljes, Bilanci); Q = (Dega, Qyteti);

    sepse mbi këtë bazë mund ta ilustroni më mirë punën me funksionet agregate dhe grupimin.

    Për shembull, supozojmë se duam të gjejmë gjendjen totale të llogarisë në degë. Ju mund të bëni një pyetje të veçantë për secilën prej tyre duke zgjedhur SUM (Remaining) nga tabela për secilën degë. Megjithatë, GROUP BY do t'ju lejojë t'i vendosni të gjitha në një komandë:

    SELECT Degë, SHUMË (Balanca) FROM F GROUP BY Dege;

    Zbatohet GROUP BY funksionet agregate në mënyrë të pavarur për çdo grup, të identifikuar nga vlera e fushës Dega. Grupi përbëhet nga linja me të njëjtën vlerë Fushat e degëve, dhe

    Artikujt kryesorë të lidhur