Lugha ya SQL. Uundaji wa maswali kwenye hifadhidata. Vitendaji vya jumla vya SQL. Lugha ya Maswali ya SQL

Kiwango cha ISO kinafafanua tano zifuatazo kazi za kujumlisha:

COUNT- inarudisha idadi ya maadili kwenye safu maalum;

SUM- inarudisha jumla ya maadili kwenye safu maalum;

AVG- inarudi thamani ya wastani katika safu maalum;

MIN- inarudi thamani ya chini katika safu maalum;

MAX- inarudi thamani ya juu katika safu maalum.

Vipengele hivi vyote hufanya kazi kwa thamani katika safu wima moja ya jedwali na kurudisha thamani moja. Chaguo za kukokotoa COUNT, MIN, na MAX hutumika kwa uga za nambari na zisizo za nambari, huku chaguo za kukokotoa za SUM na AVG zinaweza kutumika kwa sehemu za nambari pekee. Isipokuwa COUNT (*), wakati wa kutathmini matokeo ya kazi yoyote, maadili yote yasiyofaa huondolewa kwanza, na kisha operesheni inayohitajika inatumika tu kwa maadili yaliyobaki yasiyo tupu kwenye safu. Chaguo COUNT(*) ni hali maalum ya utumiaji ya chaguo za kukokotoa COUNT—madhumuni yake ni kuhesabu safu mlalo zote katika jedwali, bila kujali ikiwa ina nulls, nakala, au thamani nyingine yoyote. Iwapo ungependa kuwatenga thamani zilizorudiwa kabla ya kutumia chaguo za kukokotoa za kujumlisha, lazima utangulie jina la safu wima katika ufafanuzi wa chaguo la kukokotoa kwa neno kuu la DISTINCT. Kiwango cha ISO kinaruhusu utumizi wa neno kuu ZOTE kuashiria kwa uwazi kuwa kutojumuisha thamani rudufu hakuhitajiki, ingawa neno kuu hili linadokezwa kwa chaguo-msingi ikiwa hakuna kihitimu kingine kilichobainishwa. Neno kuu la DISTINCT halina maana yoyote kwa vitendaji vya MIN na MAX. Hata hivyo, matumizi yake yanaweza kuathiri matokeo ya kazi za SUM na AVG, kwa hiyo unapaswa kuzingatia mapema ikiwa inapaswa kuwepo katika kila kesi fulani. Kwa kuongeza, neno kuu la DISTINCT linaweza kubainishwa mara moja tu katika kila ombi.

Ikumbukwe kwamba vipengele vya kujumlisha vinaweza kutumika tu katika orodha CHAGUA na katika kifungu cha HAVING (angalia Sehemu ya 5.3.4). Katika matukio mengine yote, matumizi ya kazi hizi haikubaliki. Iwapo orodha ya SELECT ina utendaji wa ujumlishaji, na kipengele cha hoja hakina kifungu cha GROUP BY ili kuruhusu data kupangwa, basi hakuna kipengele chochote cha orodha cha SELECT kinachoweza kujumuisha marejeleo yoyote ya safu wima isipokuwa safu wima itumike kama kigezo cha chaguo la kukokotoa. Kwa mfano, swali lifuatalo si sahihi:

CHAGUAwafanyakaziHapana,COUNT (mshahara)

KUTOKAWafanyakazi;

Kosa ni kwamba hakuna muundo katika ombi hili KUNDI KWA, na safu wima ya staffNo katika orodha CHAGUA inafikiwa bila kutumia kitendakazi cha kujumlisha.

Mfano 13: Kwa kutumia kitendakazi COUNT(*).Amua ni nyumba ngapi za kukodisha ambazo zina kodi ya zaidi ya £350 kwa mwezi,

CHAGUA COUNT(*) hesabu ya AS

KUTOKAPropertyForRent

WAPIkodi> 350;

Kizuizi cha kuhesabu tu mali za kukodisha ambazo kodi yake ni zaidi ya £350 kwa mwezi kinatekelezwa kupitia matumizi ya kifungu cha WHERE. Jumla ya idadi ya mali za kukodisha zinazotimiza masharti maalum inaweza kubainishwa kwa kutumia chaguo la kukokotoa COUNT. Matokeo ya swali yanawasilishwa kwenye jedwali. 23.

Jedwali 23

hesabu

Mfano 14. Kwa kutumia chaguo za kukokotoa COUNT(DISTINCT).Bainisha ni mali ngapi tofauti za kukodisha zilizotazamwa na wateja mnamo Mei 2001.

CHAGUA COUNT(DISTINCTmaliNo) hesabu ya AS

KUTOKAKuangalia

Tena, kuweka kikomo matokeo ya hoja kwa zile tu mali za kukodisha ambazo zilikaguliwa Mei 2001 kunaafikiwa kwa kutumia kifungu cha WHERE. Jumla ya idadi ya vitu vilivyochunguzwa vinavyokidhi hali iliyobainishwa inaweza kubainishwa kwa kutumia chaguo la kukokotoa COUNT. Walakini, kwa kuwa kitu kimoja kinaweza kutazamwa mara kadhaa na wateja tofauti, inahitajika kutaja neno kuu la DISTINCT katika ufafanuzi wa kazi - hii itaruhusu maadili ya nakala kutengwa kutoka kwa hesabu. Matokeo ya swali yanawasilishwa kwenye jedwali. 24.

Jedwali 24

Mfano 16. Kutumia kazi za MIN, MAXnAVG.Kuhesabu kiwango cha chini, kiwango cha juu na wastani wa mshahara.

CHAGUA MIN(mshahara) AS dakika, MAX(mshahara) AS max, AVG(mshahara) AS wastani

KUTOKAWafanyakazi;

Katika mfano huu, unahitaji kuchakata taarifa kuhusu wafanyakazi wote wa kampuni, kwa hivyo huhitaji kutumia kifungu cha WHERE. Thamani zinazohitajika zinaweza kuhesabiwa kwa kutumia kazi za MIN, MAX na AVG zinazotumika kwenye safu ya mishahara ya jedwali la Wafanyakazi. Matokeo ya swali yanawasilishwa kwenye jedwali. 26.

Jedwali 26.

Matokeo ya ombi

min max wastani
9000.00 30000.00 17000.00

Matokeo ya vikundi (GROUP BY construct). Mifano ya data ya muhtasari hapo juu ni sawa na mistari ya muhtasari ambayo hupatikana mwishoni mwa ripoti. Kwa hivyo, data yote ya kina ya ripoti inabanwa katika mstari mmoja wa muhtasari. Walakini, mara nyingi sana inahitajika kutoa jumla ndogo katika ripoti. KUNDI KWA kifungu kinaweza kubainishwa katika taarifa CHAGUA kwa madhumuni haya. Hoja ambayo ina kifungu cha GROUP BY inaitwa ombi la kupanga kikundi, kwa sababu inaweka pamoja data inayotokana na operesheni SELECT na kisha kuunda safu mlalo moja kwa kila kikundi. Safu wima zilizoorodheshwa katika kifungu cha GROUP BY zinaitwa safu wima zilizopangwa. Kiwango cha ISO kinahitaji kwamba vifungu vya SELECT na GROUP BY vihusishwe kwa karibu. Unapotumia kifungu cha GROUP BY katika kauli CHAGUA, kila kipengele cha orodha katika orodha CHAGUA lazima kiwe nacho maana pekee kwa kundi zima. Kwa kuongezea, kifungu cha SELECT kinaweza tu kujumuisha aina zifuatazo za vitu:

Majina ya safuwima;

kazi za ujumuishaji;

Mara kwa mara;

Semi zinazojumuisha michanganyiko ya vipengele vilivyoorodheshwa hapo juu.

Majina yote ya safu wima ambayo yanaonekana katika orodha CHAGUA lazima pia yaonekane katika kifungu cha KUNDI KWA KIFUNGU, isipokuwa jina la safu wima linatumiwa tu katika kitendakazi cha kujumlisha. Kinyume chake sio kweli kila wakati - kifungu cha GROUP BY kinaweza kuwa na majina ya safuwima ambayo hayamo kwenye orodha CHAGUA. Iwapo kifungu cha WHERE kinatumika pamoja na kifungu cha GROUP BY, kinachakatwa kwanza, na ni safu mlalo zinazokidhi hali ya utafutaji pekee ndizo zinazopangwa. Kiwango cha ISO kinabainisha kuwa wakati wa kuweka kambi, maadili yote yanayokosekana huchukuliwa kuwa sawa. Iwapo safu mlalo mbili za jedwali katika safu wima moja ya kambi zina thamani NULL na thamani zinazofanana katika safu wima zingine zote zisizo batili za kambi, huwekwa katika kundi moja.

Mfano 17: Kutumia KUNDI KWA kuunda.Amua idadi ya wafanyikazi wanaofanya kazi katika kila idara ya kampuni, pamoja na mishahara yao yote.

CHAGUAtawi Hapana, COUNT(Nambari ya wafanyikazi) AS hesabu, SUM(mshahara) AS jumla

KUTOKAWafanyakazi

KUNDI KWAtawiNa

AGIZA KWAtawiNo;

Hakuna haja ya kujumuisha majina ya safuwima ya wafanyakaziNa na safuwima za mishahara katika orodha ya vipengele vya KUNDI KWA KWA sababu yanaonekana tu katika orodha CHAGUA yenye vitendaji vya kujumlisha. Wakati huo huo, safuwima ya tawi katika orodha ya kifungu cha SELECT haihusiani na kazi yoyote ya kujumlisha na kwa sababu hii lazima ibainishwe katika kifungu cha GROUP BY. Matokeo ya swali yanawasilishwa kwenye jedwali. 27.

Jedwali 27

Matokeo ya ombi

tawiNa Hesabu Jumla
B003 54000.00
B005 39000.00
B007 9000.00

Kwa kweli, wakati wa kushughulikia ombi hili, vitendo vifuatavyo hufanywa:

1. Safu za Jedwali la Wafanyikazi hugawanywa katika vikundi kulingana na maadili kwenye safu ya nambari ya idara ya kampuni. Ndani ya kila kikundi kuna data kuhusu wafanyakazi wote wa idara moja ya kampuni. Katika mfano wetu, vikundi vitatu vitaundwa, kama inavyoonyeshwa kwenye Mtini. 1.

2. Kwa kila kikundi, jumla ya idadi ya safu huhesabiwa, sawa na idadi ya wafanyikazi katika idara, na jumla ya maadili kwenye safu ya mishahara, ambayo ni jumla ya mishahara ya wafanyikazi wote. idara inayotuvutia. Kisha safu mlalo moja ya muhtasari hutolewa kwa kundi zima la safu mlalo chanzo.

3. Safu-mlalo zinazotokana za jedwali linalotokana hupangwa kwa mpangilio wa kupanda wa nambari ya tawi iliyotajwa kwenye safuwima ya tawi.

tawiNa wafanyakaziNa Mshahara
В00З SG37 12000.00
В00З SG14 18000.00
В00З SG5 24000.00
B005 SL21 30000.00
B005 SL41 9000.00
B007 SA9 9000.00
COUNT(Nambari ya wafanyakazi) SUM (mshahara)
54000.00
39000.00
9000.00

Mchele. 1. Vikundi vitatu vya rekodi vilivyoundwa wakati hoja inatekelezwa

Kiwango cha SQL kinaruhusu maswali yaliyowekwa kwenye orodha ya CHAGUA. Kwa hivyo swali hapo juu pia linaweza kuwakilishwa kama ifuatavyo:

CHAGUAtawiNo, (CHAGUA COUNT(wafanyakaziNa)AS hesabu

KUTOKAWafanyakazi s

WAPIs.branchNo = b.branchNo),

(CHAGUA SUM(mshahara) KAMA jumla

KUTOKAWafanyakazi s

WAPIs.branchNo = b.branchNo)

KUTOKATawi b

AGIZA KWAtawiNo;

Hata hivyo, toleo hili la hoja huunda matokeo mawili ya utendakazi wa ujumlisho kwa kila tawi la kampuni iliyofafanuliwa kwenye jedwali la Tawi, kwa hivyo katika baadhi ya matukio inawezekana kuona safu mlalo zilizo na maadili batili.

Vizuizi vya utekelezaji wa vikundi (HAVING construct). Kifungu cha KUWA NA KIFUNGU CHA KUWA NA KIFUNGU kinakusudiwa kutumika pamoja na kifungu cha KUNDI KWA KIKUNDI kuweka vizuizi vilivyoainishwa kwa madhumuni ya kuchagua hizo. vikundi, ambayo itawekwa kwenye jedwali la swala linalotokana. Ingawa vifungu vya HAVING na WHERE vina sintaksia sawa, madhumuni yake ni tofauti. Kifungu cha WHERE kinatumika kuteua safu mlalo mahususi ili kujaza jedwali la swali linalotokana, na kifungu cha HAVING kinatumika kuchagua. vikundi, kuwekwa kwenye jedwali la swala linalotokana. Kiwango cha ISO kinahitaji kwamba majina ya safu wima yanayotumika katika kifungu cha HAVING lazima yaonekane katika orodha ya vipengee KUNDI KWA KUNDI au yatumike katika utendaji wa kujumlisha. Kiutendaji, maneno ya utafutaji katika kifungu cha HAVING daima yanajumuisha angalau kipengele kimoja cha kukokotoa; vinginevyo, maneno haya ya utafutaji lazima yawekwe katika kifungu cha WHERE na yatumike kuchagua safu mlalo mahususi. (Kumbuka kwamba vipengele vya kujumlisha haviwezi kutumika katika kifungu cha WHERE.) Kifungu cha HAVING si sehemu ya lazima ya lugha ya SQL—swala lolote linaloandikwa kwa kutumia kifungu cha HAVING linaweza kuandikwa kwa namna nyingine bila kukitumia.

Mfano 18. Kwa kutumia HAVING construct.Kwa kila tawi la kampuni yenye wafanyakazi zaidi ya mmoja, tambua idadi ya wafanyakazi na kiasi cha mishahara yao.

CHAGUAtawi Hapana, COUN T(Nambari ya wafanyakazi) AS hesabu, SUM(mshahara) AS jumla

KUTOKAWafanyakazi

KUNDI KWAtawiNa

KUWA NA HESABU(Nambari ya wafanyikazi) > 1

AGIZA KWAtawiNo;

Mfano huu ni sawa na ule uliopita, lakini unatumia vizuizi vya ziada vinavyoonyesha kwamba tunavutiwa tu na habari kuhusu idara hizo za kampuni zinazoajiri zaidi ya mtu mmoja. Sharti kama hilo linatumika kwa vikundi, kwa hivyo swala inapaswa kutumia muundo wa HAVING. Matokeo ya swali yanawasilishwa kwenye jedwali. 28.

Jedwali 28

tawiHakuna hesabu jumla
В00З 3 54000.00
В005 2 39000.00

Maswali. Katika sehemu hii, tutajadili matumizi ya kauli kamili CHAGUA iliyopachikwa ndani ya mwili wa taarifa nyingine CHAGUA. Ya nje Taarifa (ya pili) SELECT hutumia matokeo ya utekelezaji ndani(kwanza) mwendeshaji kuamua maudhui ya matokeo ya mwisho ya operesheni nzima. Maswali ya ndani yanaweza kupatikana katika WHERE na KUWA NA vifungu vya taarifa ya nje CHAGUA - kwa hali hii yanaitwa hoja, au maswali yaliyoulizwa. Zaidi ya hayo, taarifa za ndani CHAGUA zinaweza kutumika katika taarifa za INSERT, UPDATE, na DELETE . Kuna aina tatu za subqueries.

Utafutaji mdogo wa scalar inarudisha thamani iliyochaguliwa kutoka kwa makutano ya safu moja na safu moja, i.e. maana pekee. Kimsingi, hoja ndogo ya scalar inaweza kutumika popote thamani moja inahitajika. Lahaja za hoja ndogo za scalar zimetolewa katika mifano 13 na 14.

Kuuliza kwa kamba inarudisha maadili ya safu wima nyingi za jedwali, lakini kama safu mlalo moja. Kuuliza kwa kamba kunaweza kutumika mahali popote ambapo kijenzi cha thamani cha kamba kinatumika, kwa kawaida huashirio. Lahaja ya hoja ndogo ya mfuatano inaonyeshwa katika mfano wa 15.

Maswali madogo ya jedwali hurejesha thamani za safu wima moja au zaidi za jedwali kwa zaidi ya safu mlalo moja. Uulizaji mdogo wa jedwali unaweza kutumika popote ambapo jedwali linaweza kubainishwa, kwa mfano kama operesheni ya kihusishi cha IN.

Mfano 19: Kutumia hoja ndogo iliyo na jaribio la usawa. Tunga orodha ya wafanyikazi wanaofanya kazi katika tawi la kampuni lililoko 463 Main St1.

CHAGUA

KUTOKAWafanyakazi

WAPIbranchNo = (CHAGUA tawiNa

KUTOKATawi

WAPImtaa = "163 Main St" ) ;

Taarifa ya ndani CHAGUA (CHAGUA tawiNo FROM Tawi ...) imekusudiwa kuamua nambari ya tawi la kampuni iliyoko kwenye anwani "163 Main St". (Kuna tawi moja tu kama hilo la kampuni, kwa hivyo mfano huu ni mfano wa uchunguzi mdogo wa scalar.) Baada ya kupata nambari ya tawi linalohitajika, hoja ndogo ya nje inatekelezwa ili kupata maelezo ya kina kuhusu wafanyakazi wa tawi hilo. Kwa maneno mengine, taarifa ya ndani ya SELECT inarudisha jedwali linalojumuisha thamani moja "BOOV." Hii inawakilisha nambari ya tawi la kampuni iliyoko kwenye anwani "163 Main St1. Kama matokeo, taarifa ya nje ya SELECT inachukua fomu ifuatayo:

CHAGUAstaffNo, fName, IName, position

KUTOKAWafanyakazi

WAPIbranchNo = "B0031;

Matokeo ya swali hili yanawasilishwa kwenye jedwali. 29.

Jedwali 29

Matokeo ya ombi

wafanyakaziNa fJina IName nafasi
SG37 Ann Beech Msaidizi
SG14 Daudi Ford Msimamizi
SG5 Susan Chapa Meneja

Subquery ni chombo cha kuunda jedwali la muda ambalo maudhui yake yanarejeshwa na kuchakatwa na opereta wa nje. Subquery inaweza kubainishwa moja kwa moja baada ya waendeshaji kulinganisha (yaani waendeshaji =,<, >, <=, >=, <>) katika kifungu cha WAPI au KUWA NA. Maandishi ya hoja ndogo lazima yaambatanishwe kwenye mabano.

Mfano 20. Kwa kutumia maswali madogo yenye vipengele vya kukokotoa. Tengeneza orodha ya wafanyikazi wote ambao wana mishahara juu ya wastani, ikionyesha ni kiasi gani cha mshahara wao unazidi wastani wa mshahara wa biashara.

CHAGUAstaffNo, fName, IName, nafasi, mshahara - ( CHAGUA AVG(mshahara) KUTOKA Wafanyakazi) AS salDiff

KUTOKAWafanyakazi

WAPImshahara > ( CHAGUA AVG(mshahara) KUTOKA S t a f) ;

Ikumbukwe kwamba huwezi moja kwa moja ni pamoja na katika usemi wa swali"WAPI mshahara > AVG (mshahara)", tangu kutumia aggregating kazi katika kifungu cha WAPI ni marufuku. Ili kufikia matokeo unayotaka, unapaswa kuunda subquery ambayo huhesabu wastani wa mshahara wa kila mwaka, na kisha uitumie katika taarifa ya nje ya SELECT ambayo hupata taarifa kuhusu wafanyakazi hao katika kampuni ambao mshahara wao unazidi wastani huu. Kwa maneno mengine, hoja ndogo hurejesha wastani wa mshahara wa kila mwaka wa kampuni wa £17,000.

Matokeo ya uchunguzi huu mdogo hutumiwa katika taarifa ya nje CHAGUA zote kukokotoa mkengeuko wa mishahara kutoka kiwango cha wastani na kuchagua taarifa kuhusu wafanyakazi. Kwa hivyo, taarifa ya nje ya SELECT inachukua fomu ifuatayo:

CHAGUAstaffNo, fName, IName, nafasi, mshahara - 17000 Kama salDiff

KUTOKAWafanyakazi

WAPImshahara> 17000;

Matokeo ya swali yanawasilishwa kwenye jedwali. thelathini.

Jedwali 30.

Matokeo ya ombi

wafanyakaziNa fJina IName nafasi salDiff
SL21 Yohana Nyeupe Meneja 13000.00
SG14 Daudi Ford Msimamizi 1000.00
SG5 Susan Chapa Meneja 7000.00

Inatumika kwa hoja ndogo sheria zifuatazo na vikwazo.

1. Maswali madogo hayafai kutumia ORDER BY clause, ingawa inaweza kuwa katika taarifa ya nje CHAGUA.

2. Orodha SELECT ya hoja ndogo lazima iwe na majina ya safu wima mahususi au misemo inayoundwa nazo, isipokuwa wakati neno kuu la EXISTS linatumiwa katika hoja ndogo.

3. Kwa chaguo-msingi, majina ya safu wima katika hoja ndogo hurejelea jedwali ambalo jina lake limebainishwa katika kifungu cha FROM cha hoja ndogo. Hata hivyo, inawezekana pia kurejelea safu wima za jedwali lililobainishwa katika kifungu cha FROM cha hoja ya nje kwa kutumia majina ya safu wima yaliyohitimu (kama ilivyofafanuliwa hapa chini).

4. Ikiwa subquery ni mojawapo ya operesheni mbili zinazohusika katika operesheni ya kulinganisha, basi subquery lazima ibainishwe upande wa kulia wa operesheni hii. Kwa mfano, nukuu ya swali ifuatayo kutoka kwa mfano uliopita si sahihi kwa sababu hoja ndogo imewekwa kwenye upande wa kushoto wa operesheni ya kulinganisha dhidi ya thamani ya safu wima ya mishahara.

CHAGUA

KUTOKAWafanyakazi

WAPI(CHAGUA AVG(mshahara) KUTOKA KWA Wafanyakazi)< salary;

Mfano 21. Hoji ndogo zilizoorodheshwa na matumizi ya kihusishi cha IN. Tengeneza orodha ya mali za kukodisha ambazo wafanyikazi wa tawi la kampuni iliyoko 163 Main st1 wanawajibika.

CHAGUAmaliHapana, mtaa, jiji, msimbo wa posta, aina, vyumba, kodi

KUTOKAPropertyForRent

Sura ya 5. Lugha ya SQL: upotoshaji wa data 189

WAPIwafanyakaziHAKUNA NDANI (CHAGUA wafanyakaziNa

KUTOKAWafanyakazi

WAPIbrancliNo = (CHAGUA tawiNa

KUTOKATawi

WAPImitaani = "163 Kuu S t "));

Hoja ya kwanza, ya ndani zaidi, inakusudiwa kuamua idadi ya tawi la kampuni iliyoko 463 Main St. Hoja ya pili, ya kati, hupata habari kuhusu wafanyikazi wanaofanya kazi katika tawi hili. Katika kesi hii, zaidi ya safu moja ya data ni iliyochaguliwa na kwa hivyo katika swali la nje huwezi kutumia opereta wa kulinganisha = Badala yake, lazima utumie neno kuu la IN. Hoja ya nje hupata taarifa kuhusu vitu vya kukodisha ambavyo wafanyakazi hao wa kampuni wanawajibika, data kuihusu. kutekeleza swala la kati Matokeo ya swali yamewasilishwa kwenye jedwali 31.

Jedwali 31

Matokeo ya ombi

maliNa mtaani mji msimbo wa posta aina vyumba kodisha
PG16 5 Novemba Dkt Glasgow G129AX Gorofa
PG36 2 Barabara ya Manor Glasgow G324QX Gorofa
PG21 18 Dale Rd Glasgow G12 Nyumba

Maneno muhimu YOYOTE na YOTE. Maneno muhimu YOYOTE na YOTE yanaweza kutumika pamoja na hoja ndogo zinazorudisha safu wima moja ya nambari. Ikiwa hoja ndogo inatanguliwa na neno muhimu YOTE, hali ya ulinganisho inatimizwa ikiwa tu ni kweli kwa thamani zote katika safu wima ya matokeo ya hoja ndogo. Ikiwa maandishi ya hoja ndogo yanatanguliwa na neno kuu ANY, basi hali ya ulinganisho itazingatiwa kuwa imeridhika ikiwa itaridhika kwa angalau thamani moja (au zaidi) katika safu wima inayotokana ya hoja ndogo. Ikiwa matokeo ya kutekeleza hoja ndogo yatasababisha thamani tupu, basi kwa nenomsingi YOTE hali ya ulinganisho itazingatiwa kuwa imeridhika, na kwa nenomsingi LOLOTE litachukuliwa kuwa halijatimizwa. Kulingana na kiwango cha ISO, unaweza kuongeza neno kuu la BAADHI, ambalo ni kisawe cha neno muhimu LOLOTE.

Mfano 22. Kwa kutumia maneno YOYOTE na BAADHI. Tafuta wafanyikazi wote ambao mishahara yao inazidi mshahara angalau moja mfanyakazi wa tawi la kampuni chini ya nambari "booz".

CHAGUAstaffNo, fName, IName, nafasi, mshahara

KUTOKAWafanyakazi

WAPImshahara > BAADHI(CHAGUA mshahara

KUTOKAWafanyakazi

WAPIbranchNo = "B003");

Ingawa hoja hii inaweza kuandikwa kwa kutumia hoja ndogo inayobainisha kima cha chini cha mshahara kwa wafanyakazi wa idara wenye nambari "BOHO", baada ya hapo hoja ndogo ya nje inaweza kuchagua habari kuhusu wafanyakazi wote wa kampuni ambao mishahara yao inazidi thamani hii (angalia mfano 20), mbinu nyingine inawezekana. ambayo inajumuisha kutumia maneno muhimu BAADHI/YOYOTE. Katika kesi hii, subquery ya ndani huunda seti ya maadili (12000, 18000, 24000), na swala la nje huchagua habari kuhusu wafanyikazi ambao mshahara wao ni mkubwa kuliko maadili yoyote katika hii.

kuweka (kwa kweli zaidi ya thamani ya chini - 12000). Njia hii mbadala inaweza kuchukuliwa kuwa ya asili zaidi kuliko kufafanua kima cha chini cha mshahara katika hoja ndogo. Lakini katika hali zote mbili, matokeo ya swala sawa yanatolewa, ambayo yanawasilishwa kwenye meza. 32 .

Jedwali 32

Matokeo ya ombi

wafanyakaziNa fJina IName nafasi mshahara
SL21 Yohana Nyeupe Meneja 30000.00
SG14 Daudi Ford Msimamizi 18000.00
SG5 Susan Chapa Meneja 24000.00

Mfano 23. Kwa kutumia neno kuu la YOTE. Tafuta wafanyikazi wote ambao mishahara yao ni kubwa kuliko mshahara wa mfanyakazi yeyote katika nambari ya tawi la kampuni "booz".

CHAGUAstaffNo, fName, INarae, nafasi, mshahara

KUTOKAWafanyakazi

WAPImshahara > YOTE(CHAGUA mshahara

KUTOKAWafanyakazi

WAPIbranchNo = "BOG3");

Kwa ujumla, ombi hili ni sawa na la awali. Na katika kesi hii, itawezekana kutumia subquery ambayo huamua dhamana ya juu ya mshahara wa wafanyikazi wa idara chini ya nambari "BOZ", na kisha, kwa kutumia swala la nje, chagua habari kuhusu wafanyikazi wote wa kampuni ambao mshahara wao unazidi. thamani hii. Walakini, katika mfano huu, mbinu ya neno kuu YOTE imechaguliwa. Matokeo ya swali yanawasilishwa kwenye jedwali. 33 .

Jedwali 33

Matokeo ya ombi

wafanyakaziNa IName fJina nafasi mshahara
SL21 Nyeupe Yohana Meneja 30000,00

Maswali ya meza nyingi. Mifano zote zilizojadiliwa hapo juu zina upungufu muhimu sawa: nguzo zilizowekwa kwenye jedwali linalosababishwa daima huchaguliwa kutoka kwa meza moja. Walakini, katika hali nyingi hii haitoshi. Ili kuchanganya nguzo kutoka kwa meza kadhaa za chanzo kwenye jedwali linalosababisha, lazima ufanye operesheni miunganisho. Katika SQL, operesheni ya kuunganisha hutumiwa kuchanganya habari kutoka kwa jedwali mbili kwa kuunda jozi za safu mlalo zinazohusiana zilizochaguliwa kutoka kwa kila jedwali. Jozi za safu zilizowekwa kwenye jedwali la pamoja zimeundwa kulingana na usawa wa maadili ya safu wima zilizojumuishwa ndani yao.

Ikiwa unahitaji kupata habari kutoka kwa meza kadhaa, unaweza kutumia subquery au kujiunga na meza. Ikiwa jedwali la swala linalotokana lazima liwe na nguzo kutoka kwa jedwali tofauti za chanzo, basi ni vyema kutumia utaratibu wa kuunganisha meza. Ili kufanya unganisho, inatosha kutaja majina ya jedwali mbili au zaidi katika kifungu cha KUTOKA, kuzitenganisha na koma, na kisha kujumuisha katika swali kifungu cha WHERE kinachofafanua nguzo zinazotumiwa kuunganisha majedwali maalum. Kwa kuongeza, badala ya majina ya meza, unaweza kutumia majina bandia, wamepewa katika kifungu cha FROM. Katika kesi hii, majina ya meza na lakabu zilizopewa lazima zitenganishwe na nafasi. Majina ya utani yanaweza kutumika kufafanua majina ya safu wima wakati wowote kunaweza kuwa na utata kuhusu jedwali ambalo safu wima ni ya. Zaidi ya hayo, lakabu zinaweza kutumika kufupisha majina ya jedwali. Ikiwa lakabu imefafanuliwa kwa jedwali, inaweza kutumika mahali popote ambapo inahitaji jina la jedwali hilo kubainishwa.

Mfano 24. Uunganisho rahisi. Tengeneza orodha ya majina ya wateja wote ambao tayari wamekagua angalau mali moja ya kukodisha na kutoa maoni yao juu ya suala hilo.

CHAGUAc.clientNo, fName, IName, propertyNo, toa maoni

KUTOKAMteja c, Kuangalia v

WAPIc.clientNo = v.clientNo;

Ripoti hii inahitaji maelezo kutoka kwa jedwali la Mteja na jedwali la Kutazama, kwa hivyo tutatumia utaratibu wa kuunganisha jedwali ili kuunda hoja. Kifungu cha SELECT kinaorodhesha safu wima zote ambazo zinapaswa kuwekwa kwenye jedwali la hoja. Kumbuka kwamba safu wima ya mtejaHaihitaji sifa kwa sababu safu wima inaweza pia kuwa katika jedwali lingine linaloshiriki katika kujiunga. Kwa hivyo, inahitajika kuonyesha wazi ni maadili gani ya meza tunayopendezwa nayo. (Katika mfano huu, unaweza kuwa umechagua kwa urahisi mtejaHakuna maadili ya safu kutoka kwa jedwali la Kuangalia.) Jina limebainishwa kwa kubainisha jina la jedwali linalolingana (au lakabu yake) kama kiambishi awali kabla ya jina la safu wima. Mfano wetu hutumia thamani "c" iliyobainishwa kama lakabu kwa jedwali la Mteja. Ili kutengeneza safu mlalo zinazotokana, safu mlalo hizo za jedwali la chanzo ambazo zina thamani sawa katika safu wima ya mtejaUnatumika. Hali hii inabainishwa kwa kubainisha hali ya utafutaji na.clientNo=v.clientNo. Nguzo zinazofanana za jedwali la chanzo zinaitwa safuwima zinazolingana. Operesheni iliyoelezwa ni sawa na operesheni miunganisho ya usawa algebra ya uhusiano. Matokeo ya swali yanawasilishwa kwenye jedwali. 34.

Jedwali 34

Matokeo ya ombi

mtejaNa fJina IName maliNa maoni
CR56 Alini Stewart PG36
CR56 Alini Stewart PA14 ndogo mno
CR56 Alini Stewart PG4
CR62 Mariamu Tregea PA14 hakuna chumba cha kulia
CR76 Yohana Kay PG4 mbali sana

Mara nyingi, maswali ya meza nyingi hufanywa kwenye jedwali mbili zilizounganishwa na uhusiano wa moja hadi nyingi (1:*) au uhusiano wa mzazi na mtoto. Katika mfano hapo juu, ambao unahusisha kupata meza za Mteja na Kuangalia, mwisho huunganishwa na uhusiano huo tu. Kila safu ya jedwali la Kutazama (mtoto) linahusishwa na safu mlalo moja tu ya jedwali la Mteja (mzazi), ilhali safu mlalo sawa ya jedwali la Mteja (mzazi) linaweza kuhusishwa.

yenye safu mlalo nyingi za jedwali la Kutazama (mtoto). Jozi za safu mlalo zinazozalishwa wakati hoja inapotekelezwa ni matokeo ya michanganyiko yote halali ya safu mlalo katika jedwali la mtoto na la wazazi. Sehemu ya 3.2.5 ilieleza kwa kina jinsi, katika hifadhidata ya uhusiano, funguo za msingi na za kigeni za jedwali huunda uhusiano wa mzazi na mtoto. Jedwali lililo na ufunguo wa kigeni kwa kawaida ni mtoto, wakati jedwali lililo na ufunguo msingi litakuwa mzazi kila wakati. Ili kutumia uhusiano wa mzazi na mtoto katika hoja ya SQL, lazima ubainishe hali ya utafutaji ambayo inalinganisha ufunguo wa kigeni na ufunguo msingi. Mfano wa 24 unalinganisha ufunguo msingi wa jedwali la Mteja (v. clientNo) na ufunguo wa kigeni wa jedwali la Kutazama (v. clientNo).

Kiwango cha SQL pia hutoa njia zifuatazo za kufafanua muunganisho huu:

KUTOKAMteja na JIUNGE Kuangalia v WASHA c.clientNo = v.clientNo

KUTOKAMteja J OIN Kuangalia KUTUMIA mtejaNa

KUTOKAMteja JIUNGE ASILI Kuangalia

Katika kila kisa, kifungu cha FROM kinachukua nafasi ya FROM asili na WHERE. Walakini, chaguo la kwanza huunda jedwali na safu wima mbili zinazofanana za mteja, wakati katika visa vingine viwili jedwali linalotokana litakuwa na safu wima moja tu ya mteja.

Mfano 25. Kupanga matokeo ya kuunganisha meza. Kwa kila tawi la kampuni, orodhesha nambari za wafanyikazi na majina ya wafanyikazi wanaohusika na mali yoyote ya kukodisha, na pia onyesha vifaa ambavyo

ambayo wanajibu.

CHAGUAs.branchNo, s.staffNo, fName, IName, propertyNo

KUTOKAWafanyakazi s, PropertyForRent p

WAPIs.staffNo = p.staffNo

AGIZA KWAs.branchNo, s.staffNo, propertyNo;

Ili kurahisisha kusoma matokeo, matokeo hupangwa kwa kutumia nambari ya idara kama funguo kuu ya kupanga na nambari ya wafanyikazi na nambari ya mali kama funguo ndogo. Matokeo ya swali yanawasilishwa kwenye jedwali. 35.

Jedwali 35

Matokeo ya ombi

tawiNa WafanyakaziNa fJina IName maliNa
WHO SG14 Daudi Ford PG16
WHO SG37 Ann Beech PG21
WHO SG37 Ann Beech PG36
BOO5 SL41 Mariamu Lee PL94
SBI7 SA9 Julie Vipi PA14

Mfano 26. Kuunganisha meza tatu. Kwa kila tawi la kampuni, orodhesha nambari za wafanyikazi na majina ya wafanyikazi wanaohusika na mali yoyote ya kukodisha, ikionyesha jiji ambalo tawi la kampuni iko na nambari za vifaa ambavyo kila mfanyakazi anawajibika.

CHAGUA b.tawiNo, b.city, s.staffNo, fName, IName, propertyNo

KUTOKA Tawi b, Wafanyakazi s, PropertyForRent p

WAPI b.branchNo = s.branchNo AND s.staffNo = p.staffNo

AGIZA KWA b.tawiNo, s.staffNo, propertyNo;

Jedwali linalotokana lazima liwe na safu wima kutoka kwa jedwali tatu za chanzo—Tawi, Wafanyakazi, na PropertyForRent—kwa hivyo swali lazima liunganishe na jedwali hizi. Majedwali ya Tawi na Wafanyakazi yanaweza kuunganishwa kwa kutumia hali b.branchNo=*s .branchNo, na kusababisha matawi ya kampuni kuhusishwa na wafanyakazi wanaofanya kazi humo. Majedwali ya Wafanyakazi na PropertyForRent yanaweza kuunganishwa kwa kutumia sharti s.staffNo=p.staffNo. Matokeo yake, kila mfanyakazi atahusishwa na mali ya kukodisha ambayo anawajibika. Matokeo ya swali yanawasilishwa kwenye jedwali. 36.

Jedwali 36

Matokeo ya hoja

tawiNa mji wafanyakaziMo fJina IName maliNa
B003 Glasgow SG14 Daudi Ford PG16
B003 Glasgow SG37 Ann Beech PG21
B003 Glasgow SG37 Ann Beech PG36
B005 London SL41 Julie Lee PL94
B007 Aberdeen SA9 Mariamu Vipi PA14

Kumbuka kuwa kiwango cha SQL kinaruhusu matumizi ya uundaji mbadala wa FROM na WHERE huunda:

KUTOKA(Tawi b JIUNGE NA WATUMISHI KWA KUTUMIA tawiNa) AS bs

JIUNGEPropertyForRent p KUTUMIA wafanyakaziNa

Mfano 27. Kupanga kwa safu wima nyingi. Amua idadi ya mali ya kukodisha ambayo kila mfanyakazi wa kampuni anawajibika.

CHAGUAs.branchNo, S.staffNo, COUNT(*) AS hesabu

KUTOKA KWA Wafanyakazi, PropertyForRent p

WAPI S.staffNo = p.staffNo

KUNDI KWAs.tawiNo, s.staffNo

AGIZA KWAs.tawiNo, s.staffNo;

Ili kuandaa ripoti inayohitajika, kwanza unahitaji kujua ni nani kati ya wafanyikazi wa kampuni anayehusika na mali ya kukodisha. Tatizo hili linaweza kutatuliwa kwa kujiunga na jedwali la Wafanyakazi na PropertyForRent kwa kutumia safu wima ya staffNo katika vifungu vya KUTOKA/WAPI. Kisha ni muhimu kuunda vikundi vinavyojumuisha nambari ya idara na nambari za wafanyakazi wa wafanyakazi wake, ambayo GROUP BY ujenzi inapaswa kutumika. Hatimaye, jedwali linalotokana lazima lipangwa kwa kutumia ORDER BY clause. Matokeo ya swali yanawasilishwa kwenye jedwali. 37.

Jedwali 37

Matokeo ya ombi

tawiNa wafanyakaziNa hesabu
В00З SG14
В00З SG37
B005 SL41
B007 SA9

Kufanya miunganisho. Kujiunga ni sehemu ndogo ya mchanganyiko wa jumla zaidi wa data kutoka kwa jedwali mbili zinazoitwa Cartesian. Bidhaa ya Cartesian ya jedwali mbili ni jedwali lingine linalojumuisha jozi zote zinazowezekana za safu ambazo ni sehemu ya jedwali zote mbili. Seti ya safu wima katika jedwali linalotokana ni safu wima zote za jedwali la kwanza zikifuatiwa na safu wima zote za jedwali la pili. Ukiingiza swali dhidi ya majedwali mawili bila kutaja kifungu cha WHERE, matokeo ya hoja katika mazingira ya SQL yatakuwa bidhaa ya Cartesian ya majedwali haya. Kwa kuongezea, kiwango cha ISO hutoa muundo maalum wa taarifa ya SELECT ambayo hukuruhusu kuhesabu bidhaa ya Cartesian ya meza mbili:

CHAGUA(*j safuOrodha]

KUTOKA kwa tableNamel CROSS JOINCaYeUlte2

Hebu tuangalie tena mfano ambao uunganisho wa mteja na Majedwali ya Kuangalia hufanywa kwa kutumia safu ya mteja ya kawaida. Wakati wa kufanya kazi na meza, yaliyomo ambayo yanatolewa kwenye jedwali. 3.6 na 3.8, bidhaa ya Cartesian ya majedwali haya itakuwa na safu 20 (safu 4 za jedwali la Mteja x safu 5 za jedwali la kutazama = safu 20). Hii ni sawa na kutoa hoja iliyotumika katika Mfano 5.24, lakini bila kutumia kifungu cha WHERE. Utaratibu wa kutengeneza jedwali lenye matokeo ya kuunganisha jedwali mbili kwa kutumia kauli ya CHAGUA ni kama ifuatavyo.

1. Bidhaa ya Cartesian ya jedwali zilizoainishwa katika muundo wa FROM huundwa.

2. Ikiwa swali lina kifungu cha WHERE, kwa kutumia masharti ya utafutaji kwa kila safu mlalo ya jedwali la bidhaa za Cartesian na kuhifadhi katika jedwali safu zile tu zinazokidhi masharti yaliyobainishwa. Kwa upande wa algebra ya uhusiano, operesheni hii inaitwa kizuizi Bidhaa ya Cartesian.

3. Kwa kila safu iliyobaki, thamani ya kila kipengele kilichotajwa katika orodha ya SELECT imedhamiriwa, na kusababisha safu tofauti ya meza inayosababisha.

4. Ikiwa swali asili lina muundo wa SELECT DISTINCT, safu mlalo zote rudufu huondolewa kwenye jedwali linalotokana.

5. Ikiwa swali unalotekeleza lina kifungu cha ORDER BY,


©2015-2019 tovuti
Haki zote ni za waandishi wao. Tovuti hii haidai uandishi, lakini hutoa matumizi bila malipo.
Tarehe ya kuundwa kwa ukurasa: 2016-08-07

KUNDI KWA kifungu(CHAGUA kauli) hukuruhusu kupanga data (safu) kulingana na thamani ya safu wima au safu wima kadhaa au vielezi. Matokeo yake yatakuwa seti ya safu za muhtasari.

Kila safu katika orodha iliyochaguliwa lazima ionekane katika kifungu cha GROUP BY, isipokuwa viunga na safu wima za utendakazi wa jumla.

Unaweza kupanga meza kwa mchanganyiko wowote wa safu wima zake.

Kujumlisha vipengele hutumika kupata thamani moja ya jumla kutoka kwa kundi la safu mlalo. Utendakazi wote wa jumla hufanya hesabu kwa hoja moja, ambayo inaweza kuwa safu wima au kielezi. Matokeo ya hesabu yoyote ya jumla ya chaguo za kukokotoa ni thamani isiyobadilika inayoonyeshwa katika safu wima tofauti ya matokeo.

Utendakazi wa jumla umebainishwa katika orodha ya safu wima ya kauli SELECT, ambayo inaweza pia kuwa na kifungu cha GROUP BY. Ikiwa hakuna kifungu cha GROUP BY katika kauli SELECT, na orodha ya safu wima zilizochaguliwa ina angalau kitendakazi kimoja cha jumla, basi lazima isiwe na safu wima rahisi. Kwa upande mwingine, orodha iliyochaguliwa inaweza kuwa na majina ya safu wima ambayo si hoja za chaguo la kukokotoa la jumla ikiwa safu wima hizo ni hoja za kifungu cha GROUP BY.

Ikiwa swali lina kifungu cha WHERE, basi kazi za jumla zinakokotoa thamani ya matokeo ya uteuzi.

Jumlisha utendakazi MIN na MAX hesabu thamani ndogo na kubwa zaidi ya safu mtawalia. Mabishano yanaweza kuwa nambari, masharti, na tarehe. Thamani zote za NULL huondolewa kabla ya hesabu (yaani, hazizingatiwi).

Jumla ya chaguo za kukokotoa SUM hukokotoa jumla ya thamani za safu wima. Hoja zinaweza tu kuwa nambari. Kutumia kigezo cha DISTINCT huondoa thamani zote mbili kwenye safu kabla ya kutumia chaguo la kukokotoa la SUM. Vile vile, thamani zote NULL huondolewa kabla ya kutumia chaguo hili la kukokotoa la jumla.

Chaguo za kukokotoa za AVG hurejesha wastani wa thamani zote kwenye safu. Hoja pia zinaweza kuwa nambari tu, na maadili yote NULL huondolewa kabla ya tathmini.

Jukumu la kukokotoa COUNT ina aina mbili tofauti:

  • COUNT(col_name) - huhesabu idadi ya maadili katika safu wima ya jina, maadili NULL hayazingatiwi.
  • COUNT (*) - huhesabu idadi ya safu kwenye jedwali, maadili NULL pia huzingatiwa.

Ikiwa swali linatumia neno kuu la DISTINCT, thamani zote rudufu kwenye safu huondolewa kabla ya kutumia chaguo la kukokotoa COUNT.

Chaguo COUNT_BIG sawa na chaguo za kukokotoa COUNT. Tofauti pekee kati yao ni aina ya matokeo wanayorejesha: chaguo la kukokotoa COUNT_BIG daima hurejesha thamani za aina ya BIGINT, huku chaguo la kukokotoa COUNT likirudisha thamani za data za aina INTEGER.

KATIKA KUWA na ofa inafafanua hali ambayo inatumika kwa kikundi cha safu. Ina maana sawa kwa vikundi vya safu kama vile kifungu cha WHERE kwa yaliyomo kwenye jedwali linalolingana (WHERE inatumika kabla ya kupanga, HAVING after).

Hebu tujifunze kufupisha. Hapana, haya sio matokeo ya kusoma SQL, lakini matokeo ya maadili ya safu wima za jedwali la hifadhidata. Vitendaji vya jumla vya SQL hufanya kazi kwa thamani za safu ili kutoa thamani moja inayotokana. Vitendaji vya jumla vya SQL vinavyotumika sana ni SUM, MIN, MAX, AVG, na COUNT. Ni muhimu kutofautisha kati ya kesi mbili za kutumia kazi za jumla. Kwanza, vipengele vya kukokotoa vya jumla vinatumika vyenyewe na kurudisha thamani moja inayotokana. Pili, kazi za jumla hutumiwa na kifungu cha SQL GROUP BY, ambayo ni, kuweka vikundi kwa sehemu (safu) kupata maadili yanayotokana katika kila kikundi. Hebu kwanza tuzingatie kesi za kutumia vipengele vya kukokotoa bila kupanga vikundi.

Kazi ya SQL SUM

Chaguo za kukokotoa za SQL SUM hurejesha jumla ya thamani katika safu wima ya jedwali la hifadhidata. Inaweza tu kutumika kwa safu wima ambazo thamani zake ni nambari. Maswali ya SQL kupata jumla inayosababisha kuanza kama hii:

CHAGUA JUMLA(COLUMN_NAME) ...

Usemi huu unafuatwa na FROM (TABLE_NAME), na kisha sharti linaweza kubainishwa kwa kutumia kifungu cha WHERE. Zaidi ya hayo, jina la safu wima linaweza kutanguliwa na DISTINCT, ambayo ina maana kwamba ni thamani za kipekee pekee ndizo zitakazohesabiwa. Kwa msingi, maadili yote yanazingatiwa (kwa hili unaweza kutaja haswa sio DISTINCT, lakini YOTE, lakini neno ZOTE halihitajiki).

Mfano 1. Kuna hifadhidata ya kampuni iliyo na data kuhusu mgawanyiko wake na wafanyikazi. Mbali na kila kitu kingine, meza ya Wafanyakazi ina safu na data juu ya mishahara ya wafanyakazi. Uteuzi kutoka kwa jedwali unaonekana kama hii (ili kupanua picha, bonyeza juu yake na kitufe cha kushoto cha panya):

Ili kupata jumla ya mishahara yote, tumia swali lifuatalo:

CHAGUA JUMUIYA(Mshahara) KUTOKA KWA Wafanyakazi

Hoja hii itarudisha thamani 287664.63.

Na sasa . Katika mazoezi tayari tunaanza kufanya kazi ngumu, kuwaleta karibu na wale waliokutana nao katika mazoezi.

Kitendaji cha SQL MIN

Chaguo za kukokotoa za SQL MIN pia hufanya kazi kwenye safu wima ambazo thamani zake ni nambari na hurejesha kima cha chini kabisa cha thamani zote kwenye safu wima. Chaguo hili la kukokotoa lina sintaksia sawa na ile ya chaguo za kukokotoa za SUM.

Mfano 3. Hifadhidata na jedwali ni sawa na katika mfano 1.

Tunahitaji kujua mshahara wa chini kwa wafanyikazi wa nambari ya idara 42. Ili kufanya hivyo, andika ombi lifuatalo:

Hoja itarudisha thamani 10505.90.

Na tena zoezi la kujipatia ufumbuzi. Katika mazoezi haya na mengine, hautahitaji tu meza ya Wafanyikazi, lakini pia meza ya Org, iliyo na data kuhusu mgawanyiko wa kampuni:


Mfano 4. Jedwali la Org linaongezwa kwenye jedwali la Wafanyakazi, lililo na data kuhusu idara za kampuni. Chapisha idadi ya chini kabisa ya miaka iliyofanya kazi na mfanyakazi mmoja katika idara iliyoko Boston.

Kitendaji cha SQL MAX

Kazi ya SQL MAX inafanya kazi sawa na ina syntax sawa, ambayo hutumiwa wakati unahitaji kuamua thamani ya juu kati ya maadili yote kwenye safu.

Mfano 5.

Unahitaji kujua mshahara wa juu wa wafanyikazi wa nambari ya idara 42. Ili kufanya hivyo, andika ombi lifuatalo:

Hoja itarudisha thamani 18352.80

Ni wakati mazoezi kwa ajili ya ufumbuzi wa kujitegemea.

Mfano 6. Tunafanya kazi tena na meza mbili - Wafanyakazi na Org. Onyesha jina la idara na dhamana ya juu ya tume iliyopokelewa na mfanyakazi mmoja katika idara ya kikundi cha idara (Kitengo) cha Mashariki. Tumia JIUNGE (jedwali za kujiunga) .

Kazi ya SQL AVG

Kinachosemwa kuhusu sintaksia ya kazi za awali zilizoelezwa pia ni kweli kwa kazi ya SQL AVG. Chaguo hili la kukokotoa hurejesha wastani wa thamani zote katika safu wima.

Mfano 7. Hifadhidata na jedwali ni sawa na katika mifano iliyopita.

Tuseme unataka kujua urefu wa wastani wa huduma ya wafanyikazi wa nambari ya idara 42. Ili kufanya hivyo, andika swali lifuatalo:

Matokeo yatakuwa 6.33

Mfano 8. Tunafanya kazi na meza moja - Wafanyakazi. Onyesha wastani wa mshahara wa wafanyikazi walio na uzoefu wa miaka 4 hadi 6.

Chaguo za kukokotoa za SQL COUNT

Chaguo za kukokotoa za SQL COUNT hurejesha idadi ya rekodi katika jedwali la hifadhidata. Ukibainisha SELECT COUNT(COLUMN_NAME) ... katika hoja, matokeo yatakuwa idadi ya rekodi bila kuzingatia rekodi hizo ambazo thamani ya safu wima ni NULL (haijafafanuliwa). Ukitumia kinyota kama hoja na uanzishe hoja SELECT COUNT(*) ..., matokeo yatakuwa idadi ya rekodi zote (safu) za jedwali.

Mfano 9. Hifadhidata na jedwali ni sawa na katika mifano iliyopita.

Unataka kujua idadi ya wafanyakazi wote wanaopokea tume. Idadi ya wafanyikazi ambao maadili ya safu wima ya Comm si NULL itarejeshwa kwa hoja ifuatayo:

CHAGUA COUNT(Comm) KUTOKA KWA Wafanyakazi

Matokeo yatakuwa 11.

Mfano 10. Hifadhidata na jedwali ni sawa na katika mifano iliyopita.

Ikiwa unataka kujua jumla ya idadi ya rekodi kwenye jedwali, basi tumia hoja iliyo na kinyota kama hoja ya chaguo la kukokotoa COUNT:

CHAGUA COUNT(*) KUTOKA KWA Wafanyakazi

Matokeo yatakuwa 17.

Katika ijayo zoezi kwa ufumbuzi wa kujitegemea utahitaji kutumia subquery.

Mfano 11. Tunafanya kazi na meza moja - Wafanyakazi. Onyesha idadi ya wafanyikazi katika idara ya mipango (Plains).

Jumuisha Kazi na SQL GROUP BY

Sasa hebu tuangalie kutumia kazi za jumla pamoja na taarifa ya SQL GROUP BY. Taarifa ya SQL GROUP BY inatumika kupanga maadili ya matokeo kulingana na safu wima kwenye jedwali la hifadhidata.

Mfano 12. Kuna hifadhidata ya tovuti ya matangazo. Ina jedwali la Matangazo iliyo na data kuhusu matangazo yaliyowasilishwa kwa wiki. Safu ya Kitengo ina data kuhusu kategoria kubwa za matangazo (kwa mfano, Mali Halisi), na safu wima ya Sehemu ina data kuhusu sehemu ndogo zilizojumuishwa katika kategoria (kwa mfano, sehemu za Ghorofa na Nyumba za Majira ya joto ni sehemu za aina ya Mali isiyohamishika). Safu ya Vitengo ina data kuhusu idadi ya matangazo yaliyowasilishwa, na safu wima ya Pesa ina data kuhusu kiasi cha pesa kilichopokelewa kwa kuwasilisha matangazo.

KategoriaSehemuVitengoPesa
UsafiriMagari110 17600
Mali isiyohamishikaVyumba89 18690
Mali isiyohamishikaDachas57 11970
UsafiriPikipiki131 20960
Nyenzo za ujenziBodi68 7140
Uhandisi wa umemeTV127 8255
Uhandisi wa umemeFriji137 8905
Nyenzo za ujenziRegips112 11760
BurudaniVitabu96 6240
Mali isiyohamishikaNyumbani47 9870
BurudaniMuziki117 7605
BurudaniMichezo41 2665

Kwa kutumia taarifa ya SQL GROUP BY, pata kiasi cha pesa kilichopatikana kwa kuchapisha matangazo katika kila aina. Tunaandika ombi lifuatalo.

Kwa muhtasari wa maelezo yaliyomo kwenye hifadhidata, SQL hutoa utendaji wa jumla. Jukumu la kukokotoa la kukokotoa huchukua safu nzima ya data kama hoja na kurejesha thamani moja ambayo ni muhtasari wa safu wima hiyo kwa njia mahususi.

Kwa mfano, AVG() jumla ya chaguo za kukokotoa huchukua safu wima ya nambari kama hoja na kukokotoa wastani wao.

Ili kuhesabu wastani wa mapato ya kila mtu wa mkazi wa Zelenograd, unahitaji swali lifuatalo:

CHAGUA ‘WASTANI KWA KIPATO KWA CAPITA=’, AVG(SUMD)

SQL ina utendakazi sita wa jumla ambao hutoa aina tofauti za maelezo ya muhtasari (Mchoro 1):

- SUM () huhesabu jumla ya maadili yote yaliyomo kwenye safu;

- AVG () huhesabu wastani wa maadili yaliyomo kwenye safu;

- MIN () hupata maadili madogo zaidi yaliyomo kwenye safu;

- MAX () hupata kubwa zaidi kati ya maadili yote yaliyomo kwenye safu;

- COUNT () huhesabu idadi ya maadili yaliyomo kwenye safu;

- COUNT(*) huhesabu idadi ya safu mlalo kwenye jedwali la matokeo ya hoja.

Hoja ya kukokotoa kwa jumla inaweza kuwa jina la safu wima rahisi, kama ilivyo katika mfano uliopita, au usemi, kama katika swali lifuatalo, ambalo linabainisha hesabu ya wastani wa kodi kwa kila mwananchi:

CHAGUA AVG(SUMD*0.13)

Hoja hii huunda safu wima ya muda iliyo na thamani (SUMD*0.13) kwa kila safu mlalo ya jedwali la PERSON, na kisha kukokotoa wastani wa safu wima ya muda.

Kiasi cha mapato kwa wakaazi wote wa Zelenograd kinaweza kuhesabiwa kwa kutumia kazi ya jumla ya SUM:

CHAGUA JUMLA(SUMD) KUTOKA KWA MTU

Chaguo za kukokotoa za jumla pia zinaweza kutumika kukokotoa jumla kutoka kwa jedwali la matokeo lililopatikana kwa kuunganisha majedwali kadhaa ya vyanzo. Kwa mfano, unaweza kukokotoa jumla ya mapato ambayo wakazi walipokea kutoka kwa chanzo kiitwacho "Scholarship":

CHAGUA MALI(PESA)

KUTOKA KWA FAIDA, HAVE_D

WAPI PROFIT.ID=HAVE_D.ID

NA FAIDA.CHANZO=’Scholarship’

Kazi za jumla MIN() na MAX() hukuruhusu kupata thamani ndogo na kubwa zaidi kwenye jedwali, mtawalia. Safu inaweza kuwa na thamani za nambari au mfuatano, au thamani za tarehe au saa.

Kwa mfano, unaweza kufafanua:

(a) mapato ya chini kabisa yaliyopokelewa na wakazi na kodi ya juu zaidi inayolipwa:

CHAGUA MIN(SUMD), MAX(SUMD*0.13)

(b) tarehe za kuzaliwa kwa mkazi mkubwa na mdogo zaidi:

CHAGUA MIN(RDATE), MAX(RDATE)

(c) majina ya mwisho, majina ya kwanza na patronymics ya wakaazi wa kwanza na wa mwisho katika orodha, iliyopangwa kwa alfabeti:

CHAGUA MIN(FIO), MAX(FIO)

Wakati wa kutumia kazi hizi za jumla, unahitaji kukumbuka kuwa data ya nambari inalinganishwa kwa kutumia sheria za hesabu, tarehe hulinganishwa kwa mlolongo (thamani za tarehe za mapema huchukuliwa kuwa ndogo kuliko za baadaye), na vipindi vya wakati vinalinganishwa kulingana na muda wao.

Wakati wa kutumia kazi za MIN () na MAX () na data ya kamba, matokeo ya kulinganisha kamba mbili inategemea meza ya encoding ya tabia inayotumiwa.

COUNT() jumla ya chaguo za kukokotoa huhesabu idadi ya thamani katika safu wima ya aina yoyote:

(a) kuna vyumba vingapi katika wilaya ndogo ya 1?

CHAGUA COUNT(ADR) KUTOKA FLAT AMBAPO ADR KAMA "%, 1_ _-%"

(b) ni wakazi wangapi wana vyanzo vya mapato?

CHAGUA COUNT(DISTINCT NOM) KUTOKA HAVE_D

(c) ni vyanzo vingapi vya mapato vinatumiwa na wakazi?

CHAGUA COUNT(KITAMBULISHO DISTINCT) KUTOKA HAVE_D (Neno kuu la DISTINCT linabainisha kuwa thamani zisizo nakala katika safu huhesabiwa).

Chaguo maalum la kukokotoa COUNT(*) huhesabu safu mlalo katika jedwali la matokeo, si thamani za data:

(a) kuna vyumba vingapi katika wilaya ndogo ya 2?

CHAGUA COUNT(*) KUTOKA FLAT AMBAPO ADR KAMA "%, 2__-%"

(b) Ivan Ivanovich Ivanov ana vyanzo vingapi vya mapato?

CHAGUA COUNT(*) KUTOKA KWA MTU, HAVE_D WAPI FIO="Ivanov Ivan Ivanovich" NA PERSON.NOM=HAVE_D.NOM

(c) ni wakaaji wangapi wanaoishi katika ghorofa kwenye anwani fulani?

CHAGUA HESABU(*) KUTOKA KWA MTU AMBAPO ADR="Zelenograd, 1001-45"

Njia moja ya kuelewa jinsi hoja za muhtasari zilizo na utendakazi wa jumla hutekelezwa ni kufikiria utekelezaji wa hoja kama umegawanywa katika sehemu mbili. Kwanza, tunabainisha jinsi hoja ingefanya kazi bila kukokotoa kwa jumla, na kurudisha safu mlalo nyingi za matokeo. Kisha utendakazi wa jumla hutumika kwa matokeo ya hoja, na kurejesha safu mlalo moja inayotokana.

Kwa mfano, zingatia swali tata lifuatalo: pata wastani wa mapato ya jumla ya kila mtu, jumla ya mapato ya wakazi, na wastani wa mavuno ya chanzo kama asilimia ya jumla ya mapato ya mkazi. Opereta anatoa jibu

CHAGUA AVG(SUMD), SUM(SUMD), (100*AVG(MONEY/SUMD)) KUTOKA KWA MTU, FAIDA, KUWA_D AMBAPO PERSON.NOM=HAVE_D.NOM NA HAVE_D.ID=PROFIT.ID

Bila utendakazi wa jumla, hoja ingeonekana kama hii:

CHAGUA SUMD, SUMD, MONEY/SUMD KUTOKA KWA MTU, FAIDA, KUWA_D AMBAPO PERSON.NOM=HAVE_D.NOM NA HAVE_D.ID=PROFIT.ID

na ingerudisha safu mlalo moja ya matokeo kwa kila mkazi na chanzo mahususi cha mapato. Jukumu la kukokotoa hutumia safu wima za jedwali la matokeo ya hoja ili kutoa jedwali la safu mlalo moja na matokeo ya muhtasari.

Unaweza kubainisha kazi ya kukokotoa katika safu mlalo iliyorejeshwa badala ya jina lolote la safu wima. Kwa mfano, inaweza kuwa sehemu ya usemi unaoongeza au kupunguza thamani za kazi mbili za jumla:

CHAGUA MAX(SUMD)-MIN(SUMD) KUTOKA KWA MTU

Hata hivyo, chaguo la kukokotoa la kukokotoa haliwezi kuwa hoja kwa jumlisha nyingine ya kukokotoa, i.e. Vitendo vya kukokotoa vilivyojumuishwa vimepigwa marufuku.

Pia, orodha ya safu wima zilizorejeshwa haziwezi kutumia kazi za jumla na majina ya safu wima kwa wakati mmoja, kwani hii haina maana, kwa mfano:

CHAGUA FIO, SUM(SUMD) KUTOKA KWA MTU

Hapa, kipengele cha kwanza cha orodha kinaagiza DBMS kuunda meza ambayo itakuwa na safu kadhaa na ina safu moja kwa kila mkazi. Kipengele cha pili cha orodha kinauliza DBMS kupata thamani moja ya matokeo, ambayo ni jumla ya maadili kwenye safu ya SUMD. Maagizo haya mawili yanapingana, na kusababisha makosa.

Yaliyo hapo juu hayatumiki kwa kesi za usindikaji wa maswali na hoja zilizo na vikundi.

Kutumia Majukumu ya Jumla

SQL inafafanua kazi nyingi zilizojengwa za aina mbalimbali, kati ya hizo mahali maalum huchukuliwa na kazi za jumla, ambazo hufanya kazi kwa maadili ya safu za safu nyingi na kurudisha thamani moja. Hoja za kujumlisha vipengele vinaweza kuwa safu wima za jedwali na matokeo ya misemo juu yao. Utendakazi wa jumla wenyewe unaweza kujumuishwa katika usemi mwingine wa hesabu. Jedwali lifuatalo linaonyesha vitendaji vya kawaida vya jumla vinavyotumika.


Muundo wa jumla wa chaguo za kukokotoa zisizo za kawaida ni kama ifuatavyo:

function_name([ALL | DISTINCT] usemi)

ambapo DISTINCT inabainisha kuwa chaguo la kukokotoa linapaswa kuzingatia tu thamani tofauti za hoja, na ZOTE hubainisha thamani zote, ikiwa ni pamoja na nakala (hii ndiyo chaguomsingi). Kwa mfano, kazi ya AVG iliyo na neno kuu la DISTINCT la safu wima zilizo na maadili 1, 1, 1 na 3 itarudisha 2, na ikiwa neno kuu la YOTE lipo, litarudi 1.5.

Vipengele vya kukokotoa vya jumla vinatumika katika vifungu vya SELECT na HAVING. Hapa tutaangalia matumizi yao katika kifungu CHAGUA. Katika kesi hii, usemi katika hoja ya chaguo za kukokotoa hutumika kwa safu mlalo zote katika jedwali la ingizo la kifungu cha SELECT. Zaidi ya hayo, huwezi kutumia vipengele vyote viwili vya kukokotoa na safu wima za jedwali (au misemo pamoja nazo) katika kifungu cha CHAGUA isipokuwa uwe na kifungu cha GROUP BY, ambacho tutakiangalia katika sehemu inayofuata.

Chaguo COUNT za kukokotoa zina umbizo mbili. Katika kesi ya kwanza, idadi ya safu kwenye jedwali la pembejeo inarudishwa; katika kesi ya pili, idadi ya maadili ya hoja kwenye jedwali la pembejeo inarudishwa:

  • COUNT(*)
  • COUNT(maneno)

Njia rahisi zaidi ya kutumia kazi hii ni kuhesabu idadi ya safu kwenye jedwali (zote au zile zinazokidhi hali maalum). Kwa hili, chaguo la kwanza la syntax hutumiwa.

Hoja: Idadi ya aina za bidhaa ambazo taarifa yake inapatikana katika hifadhidata.

CHAGUA COUNT(*) AS "Idadi ya aina za bidhaa"

KUTOKA kwa Bidhaa

Toleo la pili la sintaksia ya kukokotoa COUNT inaweza kuchukua jina la safu wima moja kama hoja. Katika kesi hii, nambari ya maadili yote kwenye safu wima ya jedwali la ingizo huhesabiwa, au tu zisizorudiwa (kwa kutumia neno kuu la DISTINCT).

Hoja: Idadi ya majina tofauti yaliyo kwenye jedwali la Wateja.

CHAGUA COUNT (DISTINCT FNAME)

KUTOKA KWA Mteja

Utumiaji wa vitendakazi vilivyosalia vya jumla visivyo vya kawaida ni sawa na COUNT, isipokuwa kwa vitendakazi MIN na MAX, matumizi ya DISTINCT na manenomsingi YOTE hayana maana. Pamoja na kazi COUNT, MAX na MIN, pamoja na sehemu za nambari, sehemu za herufi pia zinaweza kutumika. Ikiwa hoja ya kukokotoa kwa jumla haina thamani, chaguo za kukokotoa COUNT hurejesha 0 na vingine vyote vinarejesha NULL.

CHAGUA MAX (OrdDate)

KUTOKA

WAPI OrdDate"1.09.2010"

Mgawo wa kazi huru: Unda maswali katika SQL ili kupata data ifuatayo:

  • Jumla ya gharama ya maagizo yote;
  • Idadi ya miji tofauti iliyo kwenye jedwali la Wateja.