Maombi ya Skl. Mifano ya maswali ya SQL kwenye hifadhidata ya MySQL. Swali la SQL: rekodi za vikundi

SQL - SELECT Taarifa

Jina SQL (Lugha ya Maswali Iliyoundwa) maswali yenye muundo) inaonyesha ukweli kwamba maswali ndio kipengele kinachotumika sana cha SQL. Hoja ni taarifa inayotuma amri kwa Mfumo wa Usimamizi wa Hifadhidata (DBMS) ili kudhibiti au kuonyesha habari fulani. Hoja zote za kuchagua data katika SQL zinaundwa kwa kutumia taarifa ya SELECT. Inakuruhusu kufanya ukaguzi ngumu kabisa na usindikaji wa data.

Hoja inaweza kurudisha data kutoka kwa safu mahususi au kutoka safu wima zote za jedwali. Ili kuunda swala rahisi CHAGUA, unahitaji kutaja jina la safu na jina la jedwali.

CHAGUA Sintaksia ya Taarifa

CHAGUA safu_orodha KUTOKA jedwali_name

CHAGUA Neno kuu ambalo huambia hifadhidata kuwa taarifa hiyo ni swali. Hoja zote huanza na neno hili, na kufuatiwa na nafasi.

Safu_orodha Orodha ya safu wima za jedwali ambazo huchaguliwa na hoja. Safu wima ambazo hazijabainishwa katika taarifa hazitajumuishwa kwenye matokeo. Ikiwa unahitaji kuonyesha data kutoka kwa safu wima zote, unaweza kutumia nukuu ya mkato. Nyota (*) inamaanisha orodha kamili nguzo.

KUTOKA kwa jina_la_meza Neno muhimu ambalo lazima liwepo katika kila ombi. Baada yake, ikitenganishwa na nafasi, jina la jedwali ambalo ni chanzo cha data linaonyeshwa.

Msimbo katika mabano ni ya hiari katika taarifa SELECT. Inahitajika kwa zaidi ufafanuzi sahihi ombi.

Inahitajika pia kusema kuwa nambari ya SQL haina hisia. Hii ina maana kwamba rekodi CHAGUA inaweza kuandikwa kama kuchagua. DBMS haitatofautisha kati ya rekodi hizi mbili, lakini kila mtu anashauri Taarifa za SQL andika kwa herufi kubwa ili iweze kutofautishwa kwa urahisi na nambari zingine.

Wacha tuangalie jedwali la Wauzaji kutoka kwa kitabu cha maandishi cha SQL cha Martin Graber kwa mifano.
Hapa kuna nambari ya MySQL kuunda jedwali la majaribio:

TUNZA JEDWALI `wauzaji` (`snum` INTEGER(11) SIYO NULL_AUTO_INCREMENT, `jina` VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, `city` VARCHAR(20) COLLATE cp1251_ DO 1251_general (5FAULT_DENULL), `FAULT_DENULL(1251_jumla) UFUNGUO CHAGUO BATILI, UFUNGUO WA MSINGI (`snum`))ENGINE=InnoDB TABIA SET "cp1251" COLLATE "cp1251_general_ci" MAONI="InnoDB bila malipo: 5120 kB"; INGIA NDANI YA `wauzaji` (`snum`, `sname`, `city`, `comm`) THAMANI (1001,"Peel","London",0.120), (1002,"Serres", San Jose",0.130 ), (1003,"Axelrod","New York",0.100), (1004,"Motika","London",0.110), (1007,"Rifkin","Barcelona",0.150); JITOE;

Jedwali linaonekana kama hii:

Mfano wa kutumia kauli CHAGUA

1. Ni muhimu kuonyesha orodha ya wauzaji na kuonyesha majina yao (jina)

CHAGUA jina KUTOKA kwa Wauzaji

Matokeo:

Hapa, baada ya taarifa ya SELECT, safu ambazo zinahitajika kuonyeshwa zimeorodheshwa. Majina ya safu wima yametenganishwa kwa koma.

3. Unahitaji kuonyesha meza nzima

Ili kufanya hivyo, unaweza kutumia syntax tofauti kwa kuandika maswali. Tunaorodhesha kila safu baada ya kauli SELECT:

CHAGUA snum , sname , jiji , comm KUTOKA kwa Wauzaji

Au unaweza kufikia matokeo sawa kwa kutumia nukuu ya shorthand:

CHAGUA *KUTOKA kwa Matokeo ya Wauzaji:

snumjinamjicomm
1001 PeelLondon0,12
1002 SerresSan Jose0,13
1003 AxelrodNew York0,1
1004 MotikaLondon0,11
1007 RifkinBarcelona0,15
Pia ningependa kutoa ushauri kidogo. Ili kurahisisha utatuzi wa maswali, baadhi ya watu huandika orodha ya safu wima zinazohitaji kuonyeshwa kwenye mstari tofauti. Hii hurahisisha kutoa maoni kwa msimbo. Ili kutoa maoni katika SQL, sintaksia ifuatayo inatumika - /* msimbo wa maoni */ .Mfano: SELECT snum , sname , city , comm FROM Salespeople

Hii itaonyesha safu wima 4, lakini kwa ingizo hili unaweza kutoa maoni kwa urahisi safu isiyo ya lazima. Kwa mfano kama hii:

CHAGUA /* snum , */ sname , jiji , comm KUTOKA kwa Wauzaji

Sasa safu wima ya snum haitachapishwa kwa sababu imetolewa maoni. Haraka sana na rahisi. Jinsi ya kuandika nambari ya SQL bila shaka ni juu yako, lakini kujua vitu kama hivyo wakati mwingine ni muhimu.

Kutumia Vielezi katika Taarifa CHAGUA

DBMS nyingi hutoa uwezo maalum kwa usindikaji matokeo ya hoja. Seti ya zana kama hizo katika DBMS tofauti ni tofauti, lakini kuna zingine vipengele vya kawaida, kama vile misemo. Kwa mfano, unaweza kuhitaji kufanya rahisi shughuli za hisabati juu ya data ili kuiwasilisha kwa njia inayofaa zaidi, au kuingiza maandishi ya ziada kwenye matokeo ya swali. SQL hukuruhusu kuweka misemo na viunga kati ya safu wima zilizochaguliwa, ambazo zinaweza kukamilisha au kuchukua nafasi ya safu wima katika vifungu SELECT. Hebu tuangalie mfano.

4. Inahitajika kuonyesha tume (comm) za wauzaji kama asilimia, sio nambari za desimali

CHAGUA snum, sname, jiji, comm * 100 KUTOKA KWA Wauzaji

Matokeo:

snumjinamjicomm
1001 PeelLondon12
1002 SerresSan Jose13
1003 AxelrodNew York10
1004 MotikaLondon11
1007 RifkinBarcelona15
Katika safu wima ya mwisho, data yote iliyopokelewa inazidishwa na 100 na kuonyeshwa kama asilimia.

Safu hii haina jina kwa sababu haina data iliyobadilishwa na kwa hivyo inaitwa kwa hiari ya DBMS (kwa mfano, MySQL inataja safu wima comm * 100, katika mifano ya M. Grabber safu inaitwa 4, yaani nambari yake).

Katika hali kama hizo ni rahisi kutumia kutaja safu. Kwa mfano, unaweza kuita asilimia ya safu wima ya mwisho. Ili kufanya hivyo, baada ya jina la safu lazima ueleze neno kuu AS na kisha jina la safu wima kwenye ukurasa unaotokana.

CHAGUA snum, sname, jiji, comm * 100 AS "asilimia" KUTOKA KWA Matokeo ya Wauzaji:

snumjinamjiasilimia
1001 PeelLondon12
1002 SerresSan Jose13
1003 AxelrodNew York10
1004 MotikaLondon11
1007 RifkinBarcelona15

Matokeo ya swali hutaja safu wima ya mwisho kama safu mlalo ya "asilimia", na kuifanya iwe rahisi kuelewa.

Kwa kuwa nambari inaonyeshwa kama asilimia, itakuwa nzuri kuonyesha hii katika matokeo. Uwezo wa SQL unakuja kuwaokoa ongeza maandishi kwa matokeo. Inaonekana kama hii:

CHAGUA snum, sname, jiji, comm * 100 AS asilimia , "%" KUTOKA KWA Matokeo ya Wauzaji:

snumjinamjiasilimia%
1001 PeelLondon12 %
1002 SerresSan Jose13 %
1003 AxelrodNew York10 %
1004 MotikaLondon11 %
1007 RifkinBarcelona15 %

Inaweza kuonekana kuwa baada ya kutoa laini kutoka kwa hifadhidata, safu mpya, iliyojaa ishara ya asilimia (%).

Ikiwa haujaridhika na matokeo ya data na maandishi ya ziada safu tofauti, basi unaweza kutumia kazi maalum DBMS yako, ili kuunganishwa katika safu wima moja.

MySQL hutumia kitendakazi kwa hili CONCAT . Hapa kuna ufafanuzi wake kutoka kwa kitabu cha kumbukumbu:

CONCAT(str1,str2,...)
Hurejesha mfuatano ambao ni matokeo ya muunganisho wa hoja. Ikiwa angalau moja ya hoja ni NULL, NULL itarejeshwa. Inaweza kuchukua zaidi ya hoja 2. Hoja ya nambari inabadilishwa kuwa muundo wake sawa wa mfuatano.

Mfano: CHAGUA snum, sname, city , CONCAT(comm * 100, "%") AS "perent" KUTOKA kwa wauzaji Matokeo:

snumjinamjikuendelea
1001 PeelLondon12.000%
1002 SerresSan Jose13.000%
1003 AxelrodNew York10.000%
1004 MotikaLondon11.000%
1007 RifkinBarcelona15.000%

KATIKA ombi hili, kipengele cha kukokotoa cha CONCAT kinachukua hoja 2, hizi ni comm * 100 na ishara ya asilimia ("%"). Baada ya hapo, tunataja safu kwa kutumia AS.

Ni muhimu kujua kwamba kutumia vipengele huharibu utendaji. Hii sio hasara pekee, lakini ni muhimu sana. Kwa hivyo, ikiwa unaweza kupata kanuni ya kawaida SQL, ni bora kutotumia vitendaji. Wanapaswa kukumbukwa tu katika hali mbaya.

Kuondoa data isiyohitajika

Mara nyingi ni muhimu kuwatenga thamani rudufu kutoka kwa matokeo ya hoja. Ili kufanya hivyo, tumia neno kuu la DISTINCT. Kutumia neno ZOTE, ambalo ni chaguo-msingi (yaani, halihitaji kubainishwa), kuna athari tofauti.

5. Ni muhimu kuonyesha miji ambapo kuna wauzaji

Omba bila ubaguzi:

CHAGUA jiji KUTOKA kwa Matokeo ya wauzaji:

Nakala za maadili za London hazijajumuishwa kwenye matokeo, kama inavyohitajika.

Panga matokeo kwa maadili kulingana na safu wima

Taarifa ya SELECT inaonyesha data kwa mpangilio wowote. Ili kupanga matokeo kwa safu mahususi, SQL hutumia ORDER BY operator (yaani, kuagiza kwa...). Opereta huyu hukuruhusu kubadilisha mpangilio wa pato la data. AGIZA KWA kuagiza matokeo ya hoja kulingana na maadili ya safu wima moja au zaidi zilizochaguliwa ndani CHAGUA kifungu. Katika kesi hii, kwa kila safu unaweza kuweka kupanga katika kupanda (ASC) (parameter hii inatumiwa kwa chaguo-msingi) au kwa utaratibu wa kushuka (DESC).

Wacha tupange matokeo kwa safu ya jina. Baada ya ORDER BY operator, tunaonyesha ni safu gani ya kupanga, basi unahitaji kutaja njia ya kupanga

Mfano - kupanga kwa mpangilio wa kupanda:

CHAGUA * KUTOKA KWA Wauzaji AGIZA KWA jina la ASC

Matokeo:


Mfano - kupanga kwa safu wima nyingi:

CHAGUA snum, sname, jiji KUTOKA kwa Wauzaji AGIZA KWA jina la DESC, Matokeo ya DESC ya jiji:

snumjinamji
1002 SerresSan Jose
1007 RifkinBarcelona
1001 PeelLondon
1004 MotikaLondon
1003 AxelrodNew York

Baadhi maoni muhimu:
- safu ambayo upangaji hufanyika lazima ibainishwe kwenye CHAGUA (unaweza kutumia *)
- ORDER BY statement imeandikwa kila mara mwishoni mwa hoja

Je, wewe ni mgeni katika upangaji programu au umeepuka tu kujifunza SQL hapo awali? Kisha umepata kwa anwani sahihi, kwani msanidi programu yeyote hatimaye anakabiliwa na hitaji la kujua lugha hii ya hoja. Labda usiwe mbuni mkuu wa hifadhidata, lakini karibu haiwezekani kuzuia kufanya kazi nao. Natumaini hili mapitio mafupi syntax ya maswali ya msingi ya SQL itasaidia msanidi programu na mtu yeyote anayehitaji.

Msingi ni nini Data ya SQL?

Lugha iliyopangwa maswali (Lugha ya Maswali Iliyoundwa) ni kiwango cha mawasiliano cha hifadhidata ambacho kinaungwa mkono na ANSI. wengi zaidi toleo la hivi punde- SQL-99 ingawa kiwango kipya SQL-200n tayari iko katika maendeleo. Hifadhidata nyingi hufuata kwa uthabiti kiwango cha ANSI-92. Kumekuwa na mijadala mingi kuhusu kutambulisha zaidi viwango vya kisasa, lakini wachuuzi wa hifadhidata ya kibiashara wanahama kutoka kwa hii na dhana mpya za kuhifadhi data iliyohifadhiwa. Takriban kila hifadhidata moja hutumia baadhi seti ya kipekee syntax, ingawa inafanana sana na kiwango cha ANSI. Katika hali nyingi, sintaksia hii ni kiendelezi cha kiwango cha msingi, ingawa kuna hali ambapo sintaksia hii hutoa matokeo tofauti kwa hifadhidata tofauti. Daima ni wazo nzuri kukagua hati za hifadhidata, haswa ikiwa unapata matokeo yasiyotarajiwa.

Ikiwa wewe ni mgeni kwa SQL, kuna baadhi ya dhana za kimsingi ambazo unahitaji kuelewa.

Kwa ujumla, "database ya SQL" ni jina la kawaida Kwa mfumo wa uhusiano usimamizi wa hifadhidata (RDBMS). Kwa mifumo mingine, "database" pia inarejelea kundi la majedwali, data, maelezo ya usanidi ambayo ni asili. sehemu tofauti kutoka kwa miundo mingine inayofanana. Katika kesi hii, kila ufungaji Hifadhidata ya SQL data inaweza kuwa na hifadhidata kadhaa. Katika mifumo mingine, huitwa meza.

Jedwali ni muundo wa hifadhidata ambao una safu wima zilizo na safu mlalo za data. Kwa kawaida majedwali huundwa ili kuwa na habari zinazohusiana. Jedwali nyingi zinaweza kuundwa ndani ya hifadhidata moja.

Kila safu inawakilisha sifa au seti ya sifa za vitu, kama vile nambari za utambulisho wa mfanyakazi, urefu, rangi ya gari, nk. Mara nyingi neno uga hutumiwa kurejelea safu, ikifuatiwa na jina, kama vile "katika sehemu ya Jina." Uga wa kamba ni kipengele kidogo meza. Kila safu katika jedwali ina jina maalum, aina ya data na saizi. Majina ya safu wima lazima yawe ya kipekee ndani ya jedwali.

Kila mstari (au rekodi) inawakilisha mkusanyiko wa sifa za kitu maalum, kwa mfano, mstari unaweza kuwa na nambari ya kitambulisho mfanyakazi, kiasi cha mshahara wake, mwaka wa kuzaliwa kwake, nk. Safu za jedwali hazina majina. Ili kufikia safu mlalo mahususi, ni lazima mtumiaji abainishe baadhi ya sifa (au seti ya sifa) ambazo huitambulisha kwa njia ya kipekee.

Moja ya shughuli muhimu, ambayo hufanywa wakati wa kufanya kazi na data, ni uteuzi wa habari iliyohifadhiwa kwenye hifadhidata. Ili kufanya hivyo, mtumiaji lazima atekeleze swala.

Sasa hebu tuangalie aina kuu za maswali ya hifadhidata ambayo yanazingatia kudhibiti data ndani ya hifadhidata. Kwa madhumuni yetu, mifano yote imetolewa katika SQL ya kawaida ili kukidhi mazingira yoyote.

Aina za Maswali ya Data

Kuna aina nne kuu za hoja za data katika SQL, ambazo ziko chini ya ile inayoitwa Lugha ya Kudanganya Data (DML):
CHAGUA - chagua safu kutoka kwa meza;
INGIZA - ongeza safu kwenye meza;
UPDATE - badilisha safu kwenye jedwali;
FUTA - futa safu kwenye meza;

Kila moja ya maswali haya ina waendeshaji mbalimbali na vipengele vinavyotumika kutekeleza baadhi ya vitendo na data. Hoja ya SELECT ina mengi zaidi idadi kubwa ya chaguzi. Wapo pia aina za ziada hoja zinazotumika pamoja na SELECT, kama vile JOIN na UNION. Lakini kwa sasa, tutazingatia tu maswali ya msingi.

Kwa kutumia swali CHAGUA ili kuchagua data unayotaka

Ili kupata habari iliyohifadhiwa kwenye hifadhidata hutumiwa CHAGUA swali. Hatua ya Msingi Hoja hii ni ya jedwali moja tu, ingawa kuna miundo inayoruhusu sampuli kutoka kwa jedwali nyingi kwa wakati mmoja. Ili kupata safu mlalo zote za data kwa safu wima maalum, swali kama hili linatumika:
CHAGUA safu wima1, safu wima2 KUTOKA jedwali_name;

Pia, unaweza kupata safu wima zote kutoka kwa jedwali ukitumia kadi ya mwitu «*»:
CHAGUA * KUTOKA jedwali_name;

Hii inaweza kuwa muhimu ikiwa utachagua data na fulani WAPI hali. Hoja ifuatayo itarudisha safu wima zote kutoka safu mlalo zote ambapo "safu wima1" ina thamani "3":
CHAGUA * KUTOKA jedwali_name WAPI safuwima1=3;

Kwa kuongeza "=" (sawa), kuna waendeshaji wa masharti yafuatayo:

Taarifa za masharti:
= Sawa
<>Sio sawa
> Zaidi
< Меньше
>= Kubwa kuliko au sawa na
<= Меньше или равно

Zaidi ya hayo, unaweza kutumia masharti ya BITWEEN na LIKE kulinganisha na hali ya WHERE, pamoja na michanganyiko ya waendeshaji AND na AU.
CHAGUA * KUTOKA jedwali_name WAPI ((Umri >= 18) NA (Jina la Mwisho KATI YA 'Ivanov' NA 'Sidorov')) AU Kampuni KAMA '%Motorola%';

Nini katika tafsiri ya Kirusi inamaanisha: chagua safu wima zote kutoka kwa jedwali_jina la jedwali, ambapo thamani ya safu ya umri ni kubwa kuliko au sawa na 18, na thamani ya safu ya Jina la Mwisho iko katika safu ya alfabeti kutoka kwa Ivanov hadi Sidorov ikiwa ni pamoja na, au thamani. ya safu ya Kampuni ni Motorola.

Kwa kutumia swali INSERT kuingiza data mpya

Hoja ya INSERT inatumika kuunda mstari mpya data. Ili kusasisha data iliyopo au sehemu za safu mlalo tupu, lazima utumie swali la UPDATE.

Mfano INGIZA sintaksia ya hoja:
INGIZA NDANI ya jina_la_jedwali (safuwima1, safu wima2, safu wima3) THAMANI ('data1', 'data2', 'data3');

Ikiwa utaingiza maadili yote kwa mpangilio ambao safu wima za jedwali zinaonekana, unaweza kuacha majina ya safu, ingawa hii ni bora kwa usomaji. Pia, ukiorodhesha safu wima, sio lazima uziorodheshe kwa mpangilio zinavyoonekana kwenye hifadhidata, mradi tu maadili uliyoweka yalingane na mpangilio huo. Haupaswi kuorodhesha safu wima ambazo hazina habari.

Tayari kubadilika taarifa zilizopo katika hifadhidata kwa njia inayofanana sana.

SASISHA Swali na Hali ya WAPI

UPDATE hutumika kubadilisha thamani zilizopo au kukomboa shamba mfululizo, kwa hivyo maadili mapya lazima yalingane. aina iliyopo data na kutoa maadili yanayokubalika. Ikiwa hutaki kubadilisha maadili katika safu zote, basi unahitaji kutumia kifungu cha WHERE.
SASISHA table_name SET column1 = 'data1', column2 = 'data2' WHERE column3 = 'data3';

Unaweza kutumia WAPI kwenye safu wima yoyote, pamoja na ile unayotaka kubadilisha. Hii inatumika wakati ni muhimu kuchukua nafasi ya thamani moja maalum na nyingine.
SASISHA table_name WEKA FirstName = 'Vasily' WHERE FirstName = 'Vasily' NA LastName = 'Pupkin';

Kuwa mwangalifu! DELETE swala hufuta safu mlalo zote

Hoja ya KUFUTA hufuta kabisa safu mlalo kutoka kwa hifadhidata. Ikiwa unataka kufuta sehemu moja, basi unahitaji kutumia ombi la KUSASISHA na kuweka sehemu hii kwa thamani ambayo itakuwa sawa na NULL katika programu yako. Kuwa mwangalifu kuweka kikomo hoja yako ya KUFUTA kwa kifungu cha WHERE, vinginevyo unaweza kupoteza maudhui yote ya jedwali.
FUTA KUTOKA kwa table_name WAPI column1 = 'data1';

Mara tu safu imefutwa kutoka kwa hifadhidata yako, haiwezi kurejeshwa, kwa hivyo inashauriwa kuwa na safu inayoitwa "IsActive", au kitu kama hicho, ambacho unaweza kubadilisha kuwa null, ambayo itaonyesha kuwa mtazamo wa data kutoka. safu hiyo imefungwa.

Sasa unajua Msingi wa SQL maombi

SQL ni lugha ya hifadhidata, na tumeshughulikia muhimu zaidi na amri za msingi, kutumika katika maswali ya data. Kuna dhana nyingi za msingi ambazo hazijashughulikiwa (SUM na COUNT, kwa mfano), lakini amri chache tulizoweza kuorodhesha hapo juu zinapaswa kukuhimiza kufanya kazi na kuchimba zaidi katika lugha ya ajabu ya swali iitwayo SQL.

Opereta Lugha ya SQL SELECT imekusudiwa kwa hoja za kuchagua data kutoka kwa hifadhidata. Inaweza kutumika ama bila masharti (kuchagua safu mlalo zote katika safu wima zote au safu mlalo zote kwenye safu wima fulani) au kwa hali nyingi (kuchagua). mistari fulani), ambazo zimebainishwa katika kifungu cha WAPI. Hebu tufahamiane kwa kutumia SQL, ambayo inaweza kutumika kuweka masharti haya ya kuchagua data, na pia tutajifunza jinsi ya kutumia SELECT operator katika subqueries.

CHAGUA ili kuchagua safu wima za jedwali

Hoja iliyo na kauli SELECT ili kuchagua safu wima zote za jedwali ina syntax ifuatayo:

CHAGUA * KUTOKA TABLE_NAME

Hiyo ni, kuchagua nguzo zote za meza, unahitaji kuweka nyota baada ya neno SELECT.

Mfano 1. Kuna hifadhidata ya kampuni - Kampuni. Ina Jedwali Org (Muundo wa Kampuni) na Wafanyakazi (Wafanyikazi). Unahitaji kuchagua safu wima zote kutoka kwa jedwali. Hoja inayolingana ya kuchagua safu wima zote kutoka kwa jedwali la Org ni kama ifuatavyo.

CHAGUA * KUTOKA ORG

Hoja hii itarudisha yafuatayo (ili kupanua picha, bonyeza-kushoto juu yake):

Hoja ya kuchagua safu wima zote kutoka kwa jedwali la Wafanyakazi inaonekana kama hii:

CHAGUA * KUTOKA KWA WAFANYAKAZI

Swali hili litarudisha yafuatayo:


Ili kuchagua safu wima mahususi za jedwali, badala ya kinyota, tunahitaji kuorodhesha majina ya safu wima zote zinazohitaji kuchaguliwa, zikitenganishwa na koma:

CHAGUA SELECTABLE_COLUMNS KUTOKA TABLE_NAME

Mfano 2. Tuseme unataka kuchagua safu wima za Depnumb na Deptname kutoka kwa jedwali la Org, ambalo lina data juu ya nambari za idara za kampuni na majina yao, mtawalia. Swali la kupata sampuli kama hii litakuwa kama ifuatavyo:

CHAGUA DEPNUMB, DEPTNAME KUTOKA ORG

Na kutoka kwa Jedwali la Wafanyikazi unahitaji kuchagua nguzo DEPT, NAME, JOB, ambayo kwa mtiririko huo ina data kuhusu idadi ya idara ambayo mfanyakazi anafanya kazi, jina lake na msimamo wake:

CHAGUA na ORDER BY - kupanga (kuagiza) safu

Bado imevunjwa Maswali ya SQL SELECT safu mlalo zilizorejeshwa ambazo zinaweza kuwa katika mpangilio wowote. Hata hivyo, mara nyingi unahitaji kupanga safu kwa mpangilio wa nambari, alfabeti na vigezo vingine. Hii inafanywa kwa kutumia neno kuu la ORDER BY. Maombi kama haya yana syntax ifuatayo:

Mfano 15. Wacha hitaji liwe kuchagua kutoka kwa jedwali la wafanyikazi wanaofanya kazi katika nambari ya idara 84 na kupanga (kuagiza) rekodi kwa idadi ya miaka iliyofanya kazi kwa mpangilio wa kupanda:

Neno ASC linaonyesha kuwa mpangilio wa kupanga unapanda. Neno hili ni la hiari kwa sababu mpangilio wa mpangilio wa kupanda ndio chaguomsingi. Matokeo ya ombi:


Mfano 16. Wacha hitaji liwe kuchagua data sawa na katika mfano uliopita, lakini panga (panga) rekodi kwa idadi ya miaka iliyofanya kazi kwa mpangilio wa kushuka.

Maswali yameandikwa bila nukuu za kutoroka, kwani MySQL, MS SQL Na PostGree wao ni tofauti.

Swali la SQL: kupata sehemu maalum (muhimu) kutoka kwa jedwali

CHAGUA kitambulisho, jina_la_nchi, hesabu_watu KUTOKA kwa jina_la_jedwali

Tunapata orodha ya rekodi: Nchi ZOTE na idadi yao. Majina ya sehemu zinazohitajika huonyeshwa zikitenganishwa na koma.

CHAGUA * KUTOKA jedwali_name

* inaashiria nyanja zote. Hiyo ni, kutakuwa na maonyesho KILA KITU nyanja za data.

Hoja ya SQL: kutoa rekodi kutoka kwa jedwali bila kujumuisha nakala

CHAGUA DISTINCT nchi_kichwa KUTOKA jedwali_name

Tunapata orodha ya rekodi: nchi ambapo watumiaji wetu wanapatikana. Kunaweza kuwa na watumiaji wengi kutoka nchi moja. Katika kesi hii ni ombi lako.

Hoja ya SQL: kuonyesha rekodi kutoka kwa jedwali kulingana na hali fulani

CHAGUA kitambulisho, kichwa_cha_kichwa, jina_la_jiji KUTOKA jedwali_jina WHERE count_people>100000000

Tunapata orodha ya rekodi: nchi ambazo idadi ya watu ni zaidi ya 100,000,000.

Hoja ya SQL: kuonyesha rekodi kutoka kwa jedwali na kuagiza

CHAGUA kitambulisho, jina_la_jina FROM jedwali_name ORDER BY city_title

Tunapata orodha ya rekodi: miji ndani mpangilio wa alfabeti. Mwanzoni A, mwishoni Z.

CHAGUA kitambulisho, jina_la_jina FROM jedwali_name ORDER BY city_title DESC

Tunapata orodha ya rekodi: miji kinyume ( DESC) sawa. Hapo mwanzo mimi, mwishoni A.

Swali la SQL: kuhesabu idadi ya rekodi

CHAGUA COUNT(*) KUTOKA kwa jedwali_name

Tunapata nambari (idadi) ya rekodi kwenye jedwali. KATIKA kwa kesi hii HAKUNA orodha ya maingizo.

Hoja ya SQL: kutoa rekodi mbalimbali zinazohitajika

CHAGUA *KUTOKA kwa jedwali_name LIMIT 2, 3

Tunapata rekodi 2 (pili) na 3 (tatu) kutoka kwa meza. Hoja ni muhimu wakati wa kuunda urambazaji kwenye kurasa za WEB.

Maswali ya SQL na masharti

Inaonyesha rekodi kutoka kwa jedwali kulingana na hali fulani kwa kutumia waendeshaji wenye mantiki.

Swali la SQL: NA ujenzi

CHAGUA kitambulisho, jina_la_jina KUTOKA jedwali_name WAPI nchi="Urusi" NA mafuta=1

Tunapata orodha ya rekodi: miji kutoka Urusi NA kupata mafuta. Wakati wa kutumia operator NA, basi hali zote mbili lazima zifanane.

Swali la SQL: AU tengeneza

CHAGUA kitambulisho, jina_la_jina KUTOKA jedwali_name WAPI nchi="Urusi" AU nchi="USA"

Tunapata orodha ya rekodi: miji yote kutoka Urusi AU MAREKANI. Wakati wa kutumia operator AU, basi ANGALAU sharti moja lazima lilingane.

Swali la SQL: NA SIO ujenzi

CHAGUA kitambulisho, mtumiaji_ingia KUTOKA jedwali_name WAPI nchi="Urusi" NA SIO hesabu_maoni<7

Tunapata orodha ya rekodi: watumiaji wote kutoka Urusi NA aliyefanya SIO KIDOGO 7 maoni.

Swali la SQL: IN ujenzi (B)

CHAGUA kitambulisho, mtumiaji_ingia KUTOKA kwa jina_la_jedwali WAPI nchi ILIPO ("Urusi", "Bulgaria", "China")

Tunapata orodha ya rekodi: watumiaji wote wanaoishi katika ( KATIKA) (Urusi, au Bulgaria, au Uchina)

Swali la SQL: HAIKO kwenye ujenzi

CHAGUA kitambulisho, ingia_mtumiaji KUTOKA kwa jina_la_jedwali AMBAPO nchi HAKUNA ("Urusi","Uchina")

Tunapata orodha ya rekodi: watumiaji wote ambao hawaishi ndani ( HAKUNA) (Urusi au Uchina).

Swali la SQL: NI NULL kujenga (tupu au SIO maadili tupu)

CHAGUA kitambulisho, mtumiaji_ingia KUTOKA kwa jina_la_jedwali AMBAPO hali INA BATILI

Tunapata orodha ya rekodi: watumiaji wote ambapo hali haijafafanuliwa. NULL ni suala tofauti na kwa hivyo huangaliwa kando.

CHAGUA kitambulisho, mtumiaji_ingia KUTOKA kwa jina_la_jedwali AMBAPO hali SIYO BATILI

Tunapata orodha ya rekodi: watumiaji wote ambapo hali imefafanuliwa (SI NULL).

Swali la SQL: LIKE ujenzi

CHAGUA kitambulisho, mtumiaji_ingia KUTOKA jedwali_name WAPI jina la ukoo KAMA "Ivan%"

Tunapata orodha ya rekodi: watumiaji ambao jina la mwisho huanza na mchanganyiko "Ivan". Alama ya % inamaanisha nambari YOYOTE ya herufi ZOZOTE. Ili kupata % ishara unahitaji kutumia "Ivan\%" kutoroka.

Swali la SQL: KATI ya ujenzi

CHAGUA kitambulisho, mtumiaji_ingia KUTOKA jedwali_name WAPI mshahara KATI YA 25000 NA 50000

Tunapata orodha ya rekodi: watumiaji wanaopokea mshahara kutoka 25,000 hadi 50,000 pamoja.

KUNA WENGI wa waendeshaji kimantiki, kwa hivyo soma hati za seva ya SQL kwa undani.

Maswali magumu ya SQL

Swali la SQL: kuchanganya maswali mengi

(CHAGUA kitambulisho, kuingia_kuingia KUTOKA kwa jedwali_name1) MUUNGANO (CHAGUA kitambulisho, kuingia_kuingia KUTOKA jedwali_name2)

Tunapata orodha ya maingizo: watumiaji ambao wamesajiliwa katika mfumo, pamoja na wale watumiaji ambao wamesajiliwa tofauti kwenye jukwaa. Opereta wa UNION anaweza kuchanganya hoja nyingi. UNION hufanya kama SELECT DISTINCT, yaani, inatupa thamani rudufu. Ili kupata rekodi zote, unahitaji kutumia opereta wa UNION ALL.

Hoja ya SQL: kuhesabu thamani za sehemu MAX, MIN, SUM, AVG, COUNT

Inaonyesha thamani moja, ya juu zaidi ya kaunta kwenye jedwali:

CHAGUA MAX(kaunta) KUTOKA kwa jina_la_jedwali

Pato la moja, thamani ya chini kabisa ya kaunta kwenye jedwali:

CHAGUA MIN(kaunta) KUTOKA jedwali_name

Inaonyesha jumla ya thamani zote za kaunta kwenye jedwali:

CHAGUA SUM(kaunta) KUTOKA jedwali_name

Inaonyesha thamani ya wastani ya kaunta kwenye jedwali:

CHAGUA AVG(counter) KUTOKA jedwali_name

Inaonyesha idadi ya vihesabio kwenye jedwali:

CHAGUA COUNT(kaunta) KUTOKA kwa jedwali_name

Inaonyesha idadi ya mita katika warsha Na. 1 kwenye jedwali:

CHAGUA COUNT(kaunta) KUTOKA jedwali_name WHERE office="Workshop No. 1"

Hizi ndizo timu maarufu zaidi. Inapendekezwa, inapowezekana, kutumia maswali ya SQL ya aina hii kwa mahesabu, kwani hakuna mazingira ya programu yanaweza kulinganisha kasi ya usindikaji wa data kuliko seva ya SQL yenyewe wakati wa kuchakata data yake yenyewe.

Swali la SQL: rekodi za vikundi

CHAGUA bara, SUM(eneo_la_nchi) KUTOKA nchi KUNDI KWA bara

Tunapata orodha ya rekodi: na jina la bara na jumla ya maeneo ya nchi zao zote. Hiyo ni, ikiwa kuna orodha ya nchi ambapo kila nchi ina eneo lake lililorekodi, basi kwa kutumia GROUP BY kujenga unaweza kujua ukubwa wa kila bara (kulingana na kambi na mabara).

Swali la SQL: kutumia jedwali nyingi kupitia lakabu

CHAGUA o.agizo_hapana, o.kiasi_kilicholipwa, c.kampuni KUTOKA kwa maagizo AS o, mteja AS mwenye WAPI o.custno=c.custno NA c.city="Tyumen"

Tunapokea orodha ya rekodi: maagizo kutoka kwa wateja wanaoishi Tyumen pekee.

Kwa kweli, kwa hifadhidata iliyoundwa vizuri ya aina hii, ombi ni la mara kwa mara, kwa hivyo opereta maalum ilianzishwa kwenye MySQL ambayo inafanya kazi mara nyingi haraka kuliko nambari iliyoandikwa hapo juu.

CHAGUA o.agizo_hapana, o.kiasi_kilicholipwa, z.kampuni KUTOKA kwa maagizo AS o KUSHOTO JIUNGE NA mteja AS z ON (z.custno=o.custno)

Maswali Yanayoorodheshwa

CHAGUA * KUTOKA jedwali_name WAPI mshahara=(CHAGUA MAX(mshahara) KUTOKA KWA mfanyakazi)

Tunapata rekodi moja: habari kuhusu mtumiaji na mshahara wa juu.

Makini! Maswali madogo yaliyowekwa ni mojawapo ya vikwazo vikubwa katika seva za SQL. Pamoja na kubadilika kwao na nguvu, pia huongeza mzigo kwenye seva. Ambayo inasababisha kushuka kwa janga kwa watumiaji wengine. Kesi za simu za kujirudia katika hoja zilizowekwa ni za kawaida sana. Kwa hivyo, ninapendekeza sana USITUMIE maswali yaliyowekwa kiota, lakini kuyavunja kuwa madogo. Au tumia mchanganyiko wa LEFT JOIN uliofafanuliwa hapo juu. Kwa kuongeza, aina hii ya ombi ni chanzo cha kuongezeka kwa ukiukaji wa usalama. Ikiwa unaamua kutumia subqueries zilizowekwa, basi unahitaji kuziunda kwa uangalifu sana na kufanya uendeshaji wa awali kwenye nakala za hifadhidata (database za majaribio).

Maswali ya SQL kubadilisha data

Swali la SQL: INSERT

Maagizo INGIZA hukuruhusu kuingiza rekodi kwenye jedwali. Kwa maneno rahisi, tengeneza safu na data kwenye jedwali.

Chaguo #1. Maagizo ambayo hutumiwa mara nyingi ni:

INGIZA NDANI ya jina_la_jedwali (kitambulisho, kuingia_kwa mtumiaji) THAMANI (1, "ivanov"), (2, "petrov")

Kwa meza" jedwali_jina"Watumiaji 2 (wawili) wataingizwa mara moja.

Chaguo #2. Ni rahisi zaidi kutumia mtindo:

WEKA jedwali_jina SET id=1, user_login="ivanov"; WEKA jedwali_jina SET id=2, user_login="petrov";

Hii ina faida na hasara zake.

Hasara kuu:

  • Hoja nyingi ndogo za SQL zitatekeleza polepole zaidi kuliko swali moja kubwa la SQL, lakini hoja zingine zitapanga foleni kwa huduma. Hiyo ni, ikiwa swali kubwa la SQL linachukua dakika 30 kutekeleza, basi wakati huu wote maswali yaliyobaki yatavuta mianzi na kusubiri zamu yao.
  • Ombi linageuka kuwa kubwa zaidi kuliko toleo la awali.

Faida kuu:

  • Wakati wa maswali madogo ya SQL, maswali mengine ya SQL hayajazuiwa.
  • Urahisi wa kusoma.
  • Kubadilika. Katika chaguo hili, huna kufuata muundo, lakini ongeza data muhimu tu.
  • Wakati wa kuunda kumbukumbu kwa njia hii, unaweza kunakili mstari mmoja kwa urahisi na kuiendesha kupitia mstari wa amri (console), na hivyo usirejeshe ARCHIVE nzima.
  • Mtindo wa kuandika ni sawa na taarifa ya UPDATE, na kuifanya iwe rahisi kukumbuka.

Swali la SQL: UPDATE

SASISHA jedwali_name SET user_login="ivanov", user_surname="Ivanov" WAPI id=1

Katika meza" jedwali_jina"katika rekodi iliyo na nambari id=1, thamani za sehemu za jina la mtumiaji_login na jina la ukoo zitabadilishwa kwa maadili maalum.

Swali la SQL: DELETE

FUTA KUTOKA kwa jedwali_name WAPI id=3

Katika jedwali_name rekodi iliyo na nambari ya kitambulisho 3 itafutwa.

  1. Inapendekezwa kuandika majina yote ya uwanja kwa herufi ndogo na, ikiwa ni lazima, yatenganishe na nafasi ya kulazimishwa "_" kwa utangamano na lugha tofauti za programu, kama vile Delphi, Perl, Python na Ruby.
  2. Andika amri za SQL kwa herufi KUU ili ziweze kusomeka. Kumbuka kila wakati kuwa watu wengine wanaweza kusoma msimbo baada yako, na kuna uwezekano mkubwa wewe mwenyewe baada ya N kiasi cha muda.
  3. Taja nyuga kwanza kwa nomino na kisha kwa kitendo. Kwa mfano: hali_ya_mji, kuingia_kwa_mtumiaji, jina_la_mtumiaji.
  4. Jaribu kuzuia maneno ya akiba katika lugha tofauti ambayo yanaweza kusababisha shida katika SQL, PHP au Perl, kama vile (jina, hesabu, kiunga). Kwa mfano: kiungo kinaweza kutumika katika MS SQL, lakini kimehifadhiwa katika MySQL.

Nyenzo hii ni marejeleo mafupi ya kazi ya kila siku na haijifanyi kuwa chanzo chenye mamlaka kubwa zaidi, ambacho ndicho chanzo asili cha hoja za SQL za hifadhidata fulani.

Kwa hiyo, katika database yetu ya jukwaa kuna meza tatu: watumiaji (watumiaji), mada (mada) na machapisho (ujumbe). Na tunataka kuona ni data gani inayo. Kuna mwendeshaji wa hii katika SQL CHAGUA. Syntax ya kuitumia ni kama ifuatavyo:

CHAGUA_chagua KUTOKA wapi_chagua;


Badala ya "what_select" lazima tubainishe ama jina la safu wima ambayo maadili yake tunataka kuona, au majina ya safu wima kadhaa zilizotenganishwa na koma, au ishara ya nyota (*), ikimaanisha uteuzi wa safu wima zote za jedwali. . Badala ya "kutoka_kuchagua" unapaswa kutaja jina la jedwali.

Wacha tuangalie kwanza safu wima zote kutoka kwa jedwali la watumiaji:

CHAGUA * KUTOKA kwa watumiaji;

Hiyo ndiyo data yetu yote tuliyoingiza kwenye jedwali hili. Lakini hebu tuchukulie kwamba tunataka kuangalia safu wima ya id_user pekee (kwa mfano, katika somo la mwisho, ili kujaza jedwali la mada, tulihitaji kujua ni watumiaji gani wa id_wako kwenye jedwali la watumiaji). Ili kufanya hivyo, tutataja jina la safu hii katika ombi:

CHAGUA id_user KUTOKA kwa watumiaji;

Kweli, ikiwa tunataka kuona, kwa mfano, majina na barua pepe za watumiaji wetu, basi tutaorodhesha safu wima za kupendeza zilizotenganishwa na koma:

CHAGUA jina, barua pepe KUTOKA kwa watumiaji;

Vile vile, unaweza kuona ni data gani majedwali yetu mengine yana. Wacha tuone ni mada gani tunayo:

CHAGUA * KUTOKA mada;

Sasa tuna mada 4 tu, lakini vipi ikiwa kuna 100 kati yao? Ningependa zionyeshwe, kwa mfano, kwa mpangilio wa alfabeti. Kuna neno kuu la hii katika SQL AGIZA KWA ikifuatiwa na jina la safu wima ambayo upangaji utafanyika. Sintaksia ni kama ifuatavyo:

CHAGUA jina_la_safu KUTOKA kwa jina_la_jedwali ORDER BY sort_column_name;



Kwa chaguo-msingi upangaji uko katika mpangilio wa kupanda, lakini hii inaweza kubadilishwa kwa kuongeza neno kuu DESC

Sasa data yetu imepangwa kwa utaratibu wa kushuka.

Kupanga kunaweza kufanywa na safu wima kadhaa mara moja. Kwa mfano, hoja ifuatayo itapanga data kulingana na safu_jina la mada, na ikiwa kuna safu mlalo nyingi zinazofanana katika safu wima hii, basi safu wima ya id_author itapangwa kwa utaratibu wa kushuka:

Linganisha matokeo na matokeo ya hoja iliyotangulia.

Mara nyingi sana hatuhitaji habari zote kutoka kwa meza. Kwa mfano, tunataka kujua ni mada gani ziliundwa na mtumiaji sveta (id=4). Kuna neno kuu la hii katika SQL WAPI, syntax ya ombi kama hilo ni kama ifuatavyo:

Kwa mfano wetu, hali ni kitambulisho cha mtumiaji, i.e. Tunahitaji tu safu mlalo ambazo safu wima ya id_author ina 4 (sveta ya kitambulisho cha mtumiaji):

Au tunataka kujua ni nani aliyeunda mada ya "baiskeli":

Bila shaka, itakuwa rahisi zaidi ikiwa badala ya kitambulisho cha mwandishi, jina lake lilionyeshwa, lakini majina yanahifadhiwa kwenye meza nyingine. Katika masomo yanayofuata, tutajifunza jinsi ya kuchagua data kutoka kwa meza nyingi. Wakati huo huo, hebu tujue ni hali gani zinaweza kuwekwa kwa kutumia neno kuu la WHERE.

Opereta Maelezo
= (sawa) Maadili sawa na thamani maalum huchaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada WAPI id_author=4;

Matokeo:

> (zaidi) Thamani kubwa kuliko ilivyoainishwa huchaguliwa

Mfano:

CHAGUA *KUTOKA kwa mada WAPI id_author>2;

Matokeo:

< (меньше) Thamani zilizo chini ya zilizobainishwa zimechaguliwa

Mfano:

CHAGUA * KUTOKA mada WAPI id_author
Matokeo:

>= (kubwa kuliko au sawa na) Thamani kubwa kuliko na sawa na thamani maalum huchaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada WAPI id_author>=2;

Matokeo:

<= (меньше или равно) Thamani chini ya na sawa na thamani maalum huchaguliwa

Mfano:

CHAGUA * KUTOKA mada WAPI id_author
Matokeo:

!= (si sawa) Thamani zisizo sawa na thamani maalum huchaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada WAPI id_author!=1;

Matokeo:

SI UTUPU Huchagua safu mlalo ambazo zina thamani katika sehemu iliyobainishwa

Mfano:

CHAGUA * KUTOKA kwa mada AMBAPO id_author SIYO BATILI;

Matokeo:

NI NULL Huchagua safu mlalo ambazo hazina thamani katika sehemu iliyobainishwa

Mfano:

CHAGUA * KUTOKA kwa mada AMBAPO id_author HAINA BATILI;

Matokeo:

Seti tupu - hakuna mistari kama hiyo.

KATI (kati) Thamani kati ya maadili maalum huchaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada AMBAPO id_author KATI YA 1 NA 3;

Matokeo:

IN (thamani ipo) Maadili yanayolingana na maadili maalum huchaguliwa

Mfano:

CHAGUA * KUTOKA mada WAPI id_author NDANI (1, 4);

Matokeo:

HAKUNA (thamani haimo) Thamani zingine isipokuwa zile zilizoainishwa zimechaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada AMBAPO id_author HAYUPO (1, 4);

Matokeo:

LIKE (mechi) Thamani zinazolingana na muundo zimechaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada WAPI topic_name KAMA "led%";

Matokeo:

Vielelezo vinavyowezekana vya mwendeshaji wa LIKE vitajadiliwa hapa chini.

SI KUPENDA (hailingani) Thamani ambazo hazilingani na muundo zimechaguliwa

Mfano:

CHAGUA * KUTOKA kwa mada AMBAPO topic_name SI KUPENDA "led%";

Matokeo:

KAMA vielelezo vya waendeshaji

Utafutaji kwa kutumia metcharacter unaweza tu kufanywa katika sehemu za maandishi.

Metacharacter ya kawaida ni % . Inamaanisha ishara yoyote. Kwa mfano, tukitaka kupata maneno yanayoanza na herufi "vel", basi tutaandika LIKE "vel%", na tukitaka kupata maneno yenye herufi "club", basi tutaandika LIKE "% klabu%". Kwa mfano:

Metacharacter nyingine inayotumika sana ni _ . Tofauti na %, ambayo huashiria herufi chache au kutokuwepo kabisa, chini inaashiria herufi moja haswa. Kwa mfano:

Zingatia nafasi kati ya metacharacter na "samaki"; ikiwa utairuka, ombi halitafanya kazi, kwa sababu. metacharacter _ inasimama kwa herufi moja haswa, na nafasi pia ni mhusika.

Inatosha kwa leo. Katika somo linalofuata tutajifunza jinsi ya kuandika maswali dhidi ya majedwali mawili au zaidi. Wakati huo huo, jaribu kuunda maswali dhidi ya jedwali la machapisho mwenyewe.