Utangulizi wa lugha ya swali iliyopangwa SQL. SQL - Encyclopedia of Programming Languages

Leo tutageuka kwenye mada ya kompyuta, hivyo makala hii itakuwa ya riba hasa, kwanza kabisa, kwa watengeneza programu. Sisi, msomaji mpendwa, tutazungumza juu ya lugha ya maswali yaliyopangwa, ambayo kwa Kiingereza imesimbwa kama SQL (Lugha ya Maswali Iliyoundwa). Kwa hiyo, tufike kwenye uhakika. Hivi sasa hebu tuzungumze juu ya SQL ni nini na inahitajika kwa nini.

Lugha ya Maswali Iliyoundwa ni lugha ya ulimwengu wote ya kuunda, kurekebisha, na kudhibiti habari ambayo ni sehemu ya hifadhidata za uhusiano. Hapo awali, SQL ilikuwa njia kuu ya kufanya kazi na data. Kwa kuitumia, mtumiaji anaweza kufanya vitendo vifuatavyo:

  • kuunda jedwali mpya katika hifadhidata (DB);
  • kuongeza rekodi mpya kwenye meza zilizopo;
  • rekodi za uhariri;
  • ufutaji kamili wa kumbukumbu;
  • kuchagua rekodi kutoka kwa meza tofauti kwa mujibu wa masharti maalum;
  • kubadilisha muonekano na miundo ya meza moja au zaidi.

Ilivyokua, SQL ilibadilika sana na ikaboreshwa na kazi mpya muhimu, kama matokeo ambayo ilianza kuonekana zaidi na zaidi kama lugha halisi ya programu. Leo, SQL ndiyo utaratibu pekee unaoweza kuunganisha programu ya programu na hifadhidata. Hiyo ndivyo SQL ilivyo.

SQL ina aina kadhaa za maswali. Inafaa kumbuka kuwa swala lolote la SQL linamaanisha ombi la data kutoka kwa hifadhidata inayohitajika, au ufikiaji wa hifadhidata na mabadiliko ya lazima ya data ndani yake. Katika suala hili, ni kawaida kutofautisha aina zifuatazo za maombi:

  • kuunda au kubadilisha vitu vipya au vilivyopo kwenye hifadhidata;
  • kupokea data;
  • kuongeza data mpya kwenye meza;
  • kufuta data;
  • upatikanaji wa mfumo wa usimamizi wa hifadhidata (DBMS).

Kidogo kuhusu faida na hasara za mfumo huu wa usindikaji wa data.

Faida za SQL

  • Kujitegemea kutoka kwa DBMS iliyopo katika mfumo uliopewa. Maandishi ya SQL ni ya ulimwengu kwa DBMS nyingi. Hata hivyo, sheria hii inatumika kwa kazi rahisi zinazohusiana na usindikaji data katika meza.
  • Uwepo wa viwango vya SQL husaidia "kuimarisha" lugha.
  • Kutangaza. Faida hii ni kwamba wakati wa kufanya kazi na data, programu huchagua tu habari ambayo inahitaji kubadilishwa au kurekebishwa. Jinsi hii itafanywa ni kuamua moja kwa moja katika ngazi ya programu ya DBMS yenyewe.

Hasara za SQL

  • SQL haifuati mfano wa data ya uhusiano. Katika suala hili, SQL inachukua nafasi ya lugha ya Mafunzo ya D, ambayo ina uhusiano wa kweli.
  • Ugumu wa SQL huamua kusudi lake. Lugha ni ngumu sana hivi kwamba ni programu tu anayeweza kuitumia. Ingawa awali ilibuniwa kama zana ya kudhibiti ambayo mtumiaji wastani angefanya nayo kazi.
  • Baadhi ya kutofautiana kwa viwango. Makampuni mengi yanayotengeneza DBMS huongeza vipengele vyao wenyewe kwa lahaja ya lugha ya SQL, ambayo huathiri kwa kiasi kikubwa umoja wa lugha.

Jambo la mwisho: SQL Server ni nini? Huu ni mfumo wa usimamizi wa hifadhidata ambao ulitengenezwa ndani ya kuta za kampuni maarufu ya Microsoft. Mfumo huu unafanya kazi kwa mafanikio na hifadhidata za kompyuta za kibinafsi za nyumbani na hifadhidata kubwa za biashara kubwa. Katika sehemu hii ya soko, Seva ya SQL ni zaidi ya ushindani.

Kweli, wacha tukumbuke MySQL kwa kifupi. Programu hii kwa kawaida hutumiwa kama seva inayopokea maombi kutoka kwa wateja wa karibu au wa mbali. MySQL pia inaweza kujumuishwa katika programu za kujitegemea. Ikumbukwe kwamba programu tumizi hii ni mojawapo ya mifumo inayoweza kunyumbulika zaidi ya usimamizi wa data, kwani inajumuisha aina nyingi tofauti za majedwali.

Leo, kozi za SQL "kwa dummies" zinazidi kuwa maarufu. Hii inaweza kuelezewa kwa urahisi sana, kwa sababu katika ulimwengu wa kisasa unaweza kupata huduma zinazoitwa "nguvu" za wavuti. Wanatofautishwa na ganda linaloweza kunyumbulika na ni msingi wa waandaaji programu wote wanaoanza ambao wanaamua kuweka wakfu tovuti, kwanza kabisa kujiandikisha katika kozi za SQL "kwa dummies".

Kwa nini ujifunze lugha hii?

Kwanza kabisa, SQL inafundishwa ili kuunda zaidi aina mbalimbali za matumizi kwa mojawapo ya injini maarufu za blogu leo ​​- WordPress. Baada ya kumaliza masomo machache rahisi, utaweza kuunda maswali ya utata wowote, ambayo inathibitisha tu unyenyekevu wa lugha hii.

SQL ni nini?

Au lugha ya uulizaji iliyoundwa, iliundwa kwa kusudi moja: kuamua, kutoa ufikiaji na kuchakata kwa muda mfupi sana. Ikiwa unajua maana ya SQL, basi utaelewa kuwa seva hii imeainishwa kama lugha inayoitwa "isiyo ya kitaratibu". Hiyo ni, uwezo wake unajumuisha tu maelezo ya vipengele au matokeo yoyote ambayo ungependa kuona katika siku zijazo kwenye tovuti. Lakini ni lini haionyeshi ni matokeo gani hasa yatapatikana. Kila ombi jipya katika lugha hii ni kama "muundo mkuu" wa ziada. Ni kwa mpangilio ambao yameingizwa kwenye hifadhidata ambapo maswali yatatekelezwa.

Je, ni taratibu gani zinaweza kufanywa kwa kutumia lugha hii?

Licha ya unyenyekevu wake, hifadhidata ya SQL hukuruhusu kuunda maswali anuwai. Kwa hivyo unaweza kufanya nini ikiwa utajifunza lugha hii muhimu ya programu?

  • kuunda aina mbalimbali za meza;
  • kupokea, kuhifadhi na kurekebisha data iliyopokelewa;
  • badilisha miundo ya meza kwa hiari yako;
  • changanya habari iliyopokelewa katika vitalu moja;
  • kuhesabu data iliyopokelewa;
  • kuhakikisha ulinzi kamili wa habari.

Ni amri gani zinazojulikana zaidi katika lugha hii?

Ikiwa unaamua kuchukua SQL kwa kozi ya Dummies, basi utapokea maelezo ya kina kuhusu amri zinazotumiwa katika kuunda maswali kwa kutumia. Ya kawaida zaidi leo ni:

  1. DDL ni amri inayofafanua data. Inatumika kuunda, kurekebisha na kufuta anuwai ya vitu kwenye hifadhidata.
  2. DCL ni amri inayodhibiti data. Inatumika kuwapa watumiaji tofauti ufikiaji wa habari katika hifadhidata, na pia kutumia majedwali au maoni.
  3. TCL ni timu inayosimamia miamala mbalimbali. Kusudi lake kuu ni kuamua maendeleo ya shughuli.
  4. DML - inasimamia data iliyopokelewa. Kazi yake ni kuruhusu mtumiaji kuhamisha taarifa mbalimbali kutoka kwa hifadhidata au kuziingiza hapo.

Aina za marupurupu zilizopo katika seva hii

Haki hurejelea vitendo ambavyo mtumiaji fulani anaweza kufanya kwa mujibu wa hali yake. Kidogo zaidi, bila shaka, ni kuingia mara kwa mara. Bila shaka, marupurupu yanaweza kubadilika baada ya muda. Za zamani zitafutwa na mpya zitaongezwa. Leo, wale wote wanaochukua kozi za SQL Server "kwa dummies" wanajua kuwa kuna aina kadhaa za vitendo vinavyoruhusiwa:

  1. Aina ya kitu - mtumiaji anaruhusiwa kutekeleza amri yoyote tu kuhusiana na kitu maalum ambacho kiko kwenye hifadhidata. Wakati huo huo, marupurupu yanatofautiana kwa vitu tofauti. Pia wamefungwa sio tu kwa mtumiaji fulani, bali pia kwa meza. Ikiwa mtu, kwa kutumia uwezo wake, aliunda meza, basi anachukuliwa kuwa mmiliki wake. Kwa hiyo, ana haki ya kuwapa fursa mpya kwa watumiaji wengine kuhusiana na habari ndani yake.
  2. Aina ya mfumo ni ile inayoitwa hakimiliki ya data. Watumiaji ambao wamepokea marupurupu kama haya wanaweza kuunda vitu anuwai kwenye hifadhidata.

Historia ya SQL

Lugha hii iliundwa na Maabara ya Utafiti ya IBM mnamo 1970. Wakati huo, jina lake lilikuwa tofauti kidogo (SEQUEL), lakini baada ya miaka michache ya matumizi ilibadilishwa, kufupisha kidogo. Licha ya hili, hata leo wataalam wengi wa programu maarufu duniani bado hutamka jina kwa njia ya zamani. SQL iliundwa kwa lengo moja - kuvumbua lugha ambayo ingekuwa rahisi sana kwamba hata watumiaji wa kawaida wa Mtandao wangeweza kujifunza bila matatizo yoyote. Ukweli wa kuvutia ni kwamba wakati huo SQL haikuwa lugha hiyo pekee. Huko California, kikundi kingine cha wataalam kilitengeneza Ingres kama hiyo, lakini haikuenea kamwe. Kabla ya 1980, kulikuwa na tofauti kadhaa za SQL ambazo zilikuwa tofauti kidogo kutoka kwa kila mmoja. Ili kuzuia kuchanganyikiwa, toleo la kawaida liliundwa mwaka wa 1983, ambalo bado linajulikana leo. Kozi za SQL "kwa dummies" hukuruhusu kujifunza mengi zaidi juu ya huduma na kuisoma kikamilifu katika wiki chache.

SQL LANGUAGE: DATA MANIPULATION

KATIKA MUHADHARA HUU...

· Madhumuni ya Lugha ya Maswali ya Muundo (SQL) na jukumu lake maalum wakati wa kufanya kazi na hifadhidata.

· Historia ya kuibuka na ukuzaji wa lugha ya SQL.

· Kuandika taarifa za SQL.

· Kurejesha habari kutoka kwa hifadhidata kwa kutumia taarifa CHAGUA.

· ujenzi wa taarifa za SQL zenye sifa zifuatazo:

· kutumia WAPI kujenga ili kuchagua safu zinazokidhi hali mbalimbali;

· kupanga matokeo ya hoja kwa kutumia ORDER BY construct;

· matumizi ya vitendaji vya SQL;

· kupanga data zilizochaguliwa katika vikundi kwa kutumia GROUP BY construct;

· matumizi ya subqueries;

· kutumia viungo vya meza;

· Utumiaji wa shughuli na seti (MUUNGANO, INTERSECT, ISIPOKUWA).

· Kufanya mabadiliko kwenye hifadhidata kwa kutumia INGIZA, SASISHA na KUFUTA taarifa.

Mojawapo ya lugha ambayo iliibuka kama matokeo ya ukuzaji wa muundo wa data ya uhusiano ni SQL, ambayo sasa imeenea sana na imekuwa lugha ya kawaida ya hifadhidata za uhusiano. Kiwango cha lugha ya SQL kilitolewa na Taasisi ya Viwango ya Kitaifa ya Marekani (ANSI) mwaka wa 1986, na mwaka wa 1987 Shirika la Kimataifa la Kuweka Viwango (ISO) lilipitisha kiwango hiki kama kiwango cha kimataifa. Kwa sasa, lugha ya SQL inaungwa mkono na mamia ya aina tofauti za DBMS, zilizotengenezwa kwa aina mbalimbali za majukwaa ya kompyuta, kuanzia kompyuta za kibinafsi hadi fremu kuu.

Muhadhara huu unatumia ufafanuzi wa ISO wa SQL.

Utangulizi wa Lugha ya SQL

Katika sehemu hii, tutaangalia madhumuni ya lugha ya SQL, kufahamiana na historia yake, na kuchambua sababu kwa nini sasa imekuwa muhimu sana kwa matumizi ya hifadhidata.

Kusudi la lugha ya SQL

Lugha yoyote iliyoundwa kufanya kazi na hifadhidata lazima impe mtumiaji uwezo ufuatao:

· kuunda hifadhidata na majedwali yenye maelezo kamili ya muundo wao;



· Kufanya shughuli za msingi za upotoshaji wa data, kama vile kuingiza, kurekebisha na kufuta data kutoka kwa majedwali;

· Fanya maswali rahisi na changamano.

Kwa kuongezea, lugha ya hifadhidata lazima isuluhishe shida zote hapo juu kwa bidii kidogo kutoka kwa mtumiaji, na muundo na syntax ya amri zake lazima iwe rahisi na rahisi kujifunza.

Na hatimaye, lugha lazima iwe ya ulimwengu wote, i.e. kufikia kiwango fulani kinachotambuliwa, ambacho kitaruhusu matumizi ya sintaksia sawa na muundo wa amri wakati wa kusonga kutoka DBMS moja hadi nyingine. Kiwango cha kisasa cha lugha ya SQL kinakidhi takriban mahitaji haya yote.

SQL ni mfano wa lugha ya kubadilisha data, au lugha iliyoundwa kufanya kazi na majedwali ili kubadilisha data ya ingizo kuwa fomu inayotakiwa ya kutoa. Lugha ya SQL, ambayo inafafanuliwa na kiwango cha ISO, ina sehemu kuu mbili:

· Lugha ya Ufafanuzi wa Data (DDL), iliyoundwa ili kufafanua miundo ya hifadhidata na kudhibiti ufikiaji wa data;

· Lugha ya Kubadilisha Data (DML), iliyoundwa kwa ajili ya kurejesha na kusasisha data.

Kabla ya ujio wa kiwango cha SQL3, SQL ilijumuisha tu amri za kufafanua na kudhibiti data; ilikosa amri zozote za kudhibiti maendeleo ya hesabu. Kwa maneno mengine, lugha hii haikuwa na IF ... BASI ... ELSE, NENDA, FANYA ... HUKU na amri zingine zozote zilizoundwa kudhibiti maendeleo ya mchakato wa kukokotoa. Kazi kama hizo zililazimika kutatuliwa kwa utaratibu, kwa kutumia lugha za udhibiti wa programu au kazi, au kwa maingiliano, kama matokeo ya vitendo vilivyofanywa na mtumiaji mwenyewe. Kwa sababu ya kutokamilika huku, kwa mtazamo wa kupanga mchakato wa kompyuta, lugha ya SQL inaweza kutumika kwa njia mbili. Ya kwanza ilihusisha kazi ya mwingiliano, inayojumuisha mtumiaji kuingiza taarifa za SQL kutoka kwa terminal. Ya pili ilikuwa kupachika taarifa za SQL katika programu za lugha za kitaratibu.

Manufaa ya lugha ya SQL3, ufafanuzi rasmi ambao ulipitishwa mnamo 1999:

· Lugha ya SQL ni rahisi kujifunza.

· Ni lugha isiyo ya kiutaratibu, kwa hivyo inahitaji kubainisha ni taarifa gani zinapaswa kupatikana, na sio jinsi zinavyoweza kupatikana. Kwa maneno mengine, lugha ya SQL haihitaji kubainisha mbinu za kufikia data.

· Kama lugha nyingi za kisasa, SQL inaauni umbizo lisilolipishwa la kuandika taarifa. Hii ina maana kwamba vipengele vya waendeshaji mahususi havihusishwi na nafasi zisizobadilika kwenye skrini unapoandika.

· Muundo wa amri umebainishwa na seti ya maneno muhimu, ambayo ni maneno ya kawaida ya Kiingereza, kama vile CREATE TABLE - Unda jedwali, WEKA - Ingiza, CHAGUA - Chagua.

Kwa mfano:

UNDA JEDWALI [Mauzo] (S), [Jina la kitu] VARCHAR(15), [Gharama] DECIMAL(7,2));

WEKA NDANI YA [Kitu] THAMANI ("SG16", "Brown", 8300);

CHAGUA , [Jina la kitu], [Gharama];

KUTOKA [Mauzo]

WAPI [Gharama] > 10000;

· Lugha ya SQL inaweza kutumiwa na watumiaji mbalimbali, ikiwa ni pamoja na wasimamizi wa hifadhidata (DBAs), wafanyakazi wa usimamizi wa kampuni, watayarishaji programu, na watumiaji wengine wengi wa mwisho wa kategoria mbalimbali.

Hivi sasa, kuna viwango vya kimataifa vya lugha ya SQL ambavyo vinaifafanua rasmi kama lugha ya kawaida ya kuunda na kuendesha hifadhidata za uhusiano, ambayo ni kweli.

Historia ya lugha ya SQL

Historia ya modeli ya data ya uhusiano, na kwa njia isiyo ya moja kwa moja lugha ya SQL, ilianza mnamo 1970 kwa kuchapishwa kwa nakala ya mwisho na E. F. Codd, ambaye wakati huo alifanya kazi katika maabara ya utafiti ya IBM huko San Jose. Mnamo 1974, D. Chamberlain, ambaye alifanya kazi katika maabara hiyo hiyo, alichapisha ufafanuzi wa lugha inayoitwa "Lugha ya Kuuliza Kiingereza Iliyoundwa", au SEQUEL. Toleo lililosahihishwa la lugha hii, SEQUEL/2, lilitolewa mwaka wa 1976; baadaye ilibidi jina lake libadilishwe na kuwa SQL kwa sababu za kisheria - kifupi cha SEQUEL kilikuwa tayari kinatumiwa na wanafilolojia. Lakini hadi leo, watu wengi bado hutamka kifupi cha SQL kama "sequel", ingawa inapendekezwa rasmi kuisoma kama "es-qu-el".

Mnamo 1976, IBM ilitoa mfano wa DBMS kulingana na lugha ya SEQUEL/2, inayoitwa "System R". Madhumuni ya jaribio hili lilikuwa kupima uwezekano wa kutekeleza modeli ya uhusiano. Miongoni mwa mambo mengine chanya, matokeo muhimu zaidi ya mradi huu yanaweza kuzingatiwa ukuzaji wa lugha yenyewe ya SQL.Hata hivyo, mizizi ya lugha hii inarejea katika lugha ya SQUARE (Specifying Queries as Rational Expressions), ambayo ndiyo ilikuwa mtangulizi wa lugha ya SQUARE. Mradi wa System R. Lugha ya SQUARE iliundwa kama zana ya utafiti ya kutekeleza aljebra ya uhusiano kupitia vifungu vilivyotungwa kwa Kiingereza.

Mwishoni mwa miaka ya 1970, kampuni ambayo sasa imekuwa Oracle Corporation ilitoa Oracle DBMS. Labda huu ni utekelezaji wa kwanza wa kibiashara wa DBMS ya uhusiano iliyojengwa kwa kutumia lugha ya SQL.

Baadaye kidogo, INGRES DBMS ilionekana, kwa kutumia lugha ya swala ya QUEL.

Lugha hii iliundwa zaidi kuliko SQL, lakini semantiki zake hazikuwa karibu na Kiingereza cha kawaida. Baadaye, SQL ilipopitishwa kama lugha ya kawaida ya hifadhidata za uhusiano, INGRES DBMS ilibadilishwa kabisa kuitumia. Mnamo 1981, IBM ilitoa DBMS yake ya kwanza ya uhusiano wa kibiashara, inayoitwa SQL/DS (kwa mazingira ya DOS/VSE). Mnamo 1982, toleo la mfumo huu lilitolewa kwa mazingira ya VM/CMS, na mwaka wa 1983 - kwa mazingira ya MVS, lakini tayari chini ya jina DB2.

Mnamo 1982, Taasisi ya Viwango vya Kitaifa ya Amerika (ANSI) ilianza kufanya kazi kwenye Lugha ya Hifadhidata ya Uhusiano (RDL), ikiongozwa na hati za dhana zilizopokelewa kutoka kwa IBM Corporation. Mnamo 1983, Shirika la Kimataifa la Viwango (ISO) lilihusika katika kazi hii. Juhudi za pamoja za mashirika yote mawili zilifikia kilele kwa kutolewa kwa kiwango cha lugha cha SQL. Jina RDL liliachwa mwaka wa 1984, na lugha ya rasimu ilisanifiwa upya ili kuwa karibu na utekelezaji uliopo wa lugha ya SQL.

Toleo la asili la kiwango, ambalo lilitolewa na ISO mnamo 1987, lilivutia wimbi la ukosoaji. Hasa, Tarehe, mtafiti mashuhuri katika eneo hili, alidokeza kuwa kiwango kiliacha kazi muhimu, ikiwa ni pamoja na udhibiti wa uadilifu wa marejeleo, na baadhi ya waendeshaji uhusiano.

Kwa kuongeza, alibainisha upungufu mkubwa wa lugha - ombi sawa linaweza kuandikwa katika matoleo kadhaa tofauti. Ukosoaji mwingi ulitambuliwa kuwa wa haki, na marekebisho muhimu yalifanywa kwa kiwango kabla ya kuchapishwa kwake. Walakini, iliamuliwa kuwa ilikuwa muhimu zaidi kutoa kiwango haraka iwezekanavyo ili iweze kutumika kama msingi wa kawaida ambao lugha yenyewe na utekelezaji wake ungeweza kuendelezwa zaidi, badala ya kungoja hadi sifa zote tofauti. wataalam waliochukuliwa kuwa wa lazima walifafanuliwa na kuafikiwa kwa lugha inayofanana.

Mnamo 1989, ISO ilichapisha marekebisho kwa kiwango ambacho kilifafanua utendaji wa uadilifu wa data. Mnamo 1992, toleo la kwanza la kiwango cha ISO lililosahihishwa kwa kiasi kikubwa, ambalo wakati mwingine huitwa SQL2 au SQL-92, lilitolewa. Ingawa baadhi ya kazi zilifafanuliwa kwa mara ya kwanza katika kiwango hiki, nyingi kati ya hizo tayari zimetekelezwa kwa ujumla au kwa sehemu katika utekelezaji mmoja au zaidi wa kibiashara wa lugha ya SQL.

Na toleo linalofuata la kiwango, ambalo huitwa SQL3, lilitolewa tu mnamo 1999. Toleo hili linatoa usaidizi wa ziada kwa vipengele vya usimamizi wa data vinavyolengwa na kitu.

Kazi ambazo huongezwa kwa kiwango cha lugha na wasanidi wa utekelezaji wa kibiashara huitwa viendelezi. Kwa mfano, kiwango cha lugha ya SQL kinafafanua aina sita tofauti za data zinazoweza kuhifadhiwa kwenye hifadhidata. Katika utekelezaji mwingi, orodha hii inaongezewa na upanuzi mbalimbali. Kila utekelezaji wa lugha huitwa lahaja. Hakuna lahaja mbili zinazofanana kabisa, na kwa sasa hakuna lahaja inayotii kikamilifu kiwango cha ISO.

Zaidi ya hayo, watengenezaji hifadhidata wanapoongeza utendakazi mpya kwenye mifumo yao, wao huendelea kupanua lahaja zao za SQL, na kusababisha lahaja za mtu binafsi kuwa tofauti zaidi na nyingine. Hata hivyo, msingi mkuu wa lugha ya SQL unasalia kuwa sanifu zaidi au chini katika utekelezaji wote.

Ingawa dhana asilia za lugha ya SQL zilitengenezwa na IBM, umuhimu wake hivi karibuni uliwachochea watengenezaji wengine kuunda utekelezaji wao wenyewe. Hivi sasa, kuna mamia ya bidhaa zinazopatikana kwenye soko zilizojengwa kwa kutumia lugha ya SQL, na tunasikia kila mara kuhusu kutolewa kwa matoleo mapya zaidi na zaidi,

Utendaji wa lugha ya SQL

Utendaji kuu wa lugha ya SQL umepewa hapa chini.

Ufafanuzi wa data. Kazi hii ya SQL ni maelezo ya muundo wa data inayoungwa mkono na shirika la uhusiano wa uhusiano (meza). Waendeshaji wa kuunda hifadhidata, kuunda majedwali, na kupata data wamekusudiwa kuitekeleza.

Uundaji wa hifadhidata. Ili kuunda hifadhidata mpya, tumia taarifa ya CREATE DATABASE. Muundo wa taarifa unabainisha jina la hifadhidata itakayoundwa.

Kujenga meza. Jedwali la msingi linaundwa kwa kutumia taarifa ya CREATE TABLE. Taarifa hii inabainisha majina ya sehemu, aina za data kwao, na urefu (kwa baadhi ya aina za data). SQL hutumia aina zifuatazo za data:

INTEGER - nambari kamili;

CHAR - thamani ya tabia;

VARCHAR - thamani ya tabia, herufi zisizo tupu tu zimehifadhiwa;

DECIMAL - nambari ya desimali;

FLOAT - nambari ya hatua inayoelea;

USAHIHI DOUBLE - sehemu ya kuelea ya usahihi mara mbili;

DATETIME - tarehe na wakati;

BOOL - Thamani ya Boolean.

Taarifa ya uundaji wa jedwali inabainisha vizuizi kwa maadili ya safu na kwenye jedwali. Vizuizi vinavyowezekana vinaonyeshwa kwenye jedwali. 4.8

Jedwali 4.8 Mapungufu kwenye data iliyoainishwa

Kwa muundo wa data wa uhusiano, kubainisha ufunguo wa kigeni (FOREIGNKEY) ni muhimu. Wakati wa kutangaza funguo za kigeni, lazima uweke vikwazo vinavyofaa kwenye safu, kwa mfano, NOT NULL.

Katika taarifa ya SQL, CHECK inaashiria vikwazo vya kisemantiki vinavyohakikisha uadilifu wa data, kama vile kuweka kikomo cha thamani halali za safu mahususi.

Huwezi kutumia taarifa ya jedwali la kuunda zaidi ya mara moja kwenye jedwali moja. Ikiwa, baada ya uumbaji wake, usahihi hugunduliwa katika ufafanuzi wake, basi mabadiliko yanaweza kufanywa kwa kutumia taarifa ya ALTER TABLE. Taarifa hii imeundwa ili kubadilisha muundo wa jedwali lililopo: unaweza kuondoa au kuongeza uga kwenye jedwali lililopo.

Udanganyifu wa data. SQL huruhusu mtumiaji au programu ya programu kubadilisha maudhui ya hifadhidata kwa kuingiza data mpya, kufuta au kurekebisha data iliyopo.

Kuingiza data mpya ni utaratibu wa kuongeza safu mlalo kwenye hifadhidata na hufanywa kwa kutumia taarifa ya INSERT.

Marekebisho ya data inahusisha mabadiliko ya maadili katika safu wima moja au zaidi ya jedwali na hufanywa kwa kutumia taarifa ya UPDATE. Mfano:

WEKA kiasi=kiasi+1000.00

WAPI kiasi>0

Kuondoa safu kutoka kwa jedwali kwa kutumia taarifa ya DELETE. Sintaksia ya waendeshaji ni:

KUTOKA mezani

Kifungu cha WAPI ni cha hiari, lakini ikiwa hakijajumuishwa, maingizo yote kwenye jedwali yatafutwa. Ni muhimu kutumia kauli ya CHAGUA iliyo na sintaksia sawa na taarifa ya DELETE ili kuangalia mapema ni rekodi zipi zitafutwa.

Kuhakikisha uadilifu wa data. Lugha ya SQL hukuruhusu kufafanua vizuizi changamano vya uadilifu, kuridhika kwake kutaangaliwa kwa marekebisho yote ya hifadhidata. Ufuatiliaji wa matokeo ya shughuli, makosa ya usindikaji yanayotokea, na kuratibu kazi sambamba na hifadhidata ya programu au watumiaji kadhaa hutolewa na COMMIT (inarekodi kukamilika kwa mafanikio ya shughuli ya sasa na mwanzo wa mpya) na ROLLBACK (hitaji kwa urejeshaji - urejesho otomatiki wa hali ya hifadhidata hadi mwanzo wa shughuli) waendeshaji.

Sampuli za data ni mojawapo ya kazi muhimu zaidi za hifadhidata zinazolingana na taarifa ya CHAGUA. Mfano wa kutumia opereta ulijadiliwa katika sehemu iliyotangulia.

Katika SQL, unaweza kuunda mlolongo uliowekwa wa maswali (subqueries). Kuna aina fulani za maswali ambayo hutekelezwa vyema kwa kutumia maswali madogo. Hoja hizi ni pamoja na kinachojulikana kama ukaguzi wa uwepo. Hebu tuchukulie kuwa unataka kupata data kuhusu wanafunzi ambao hawana alama saba. Ikiwa seti tupu itarejeshwa, basi hii inamaanisha jambo moja tu - kila mwanafunzi ana angalau daraja moja kama hilo.

Kuunganisha meza. Taarifa za SQL hukuruhusu kupata data kutoka kwa zaidi ya jedwali moja. Njia moja ya kufanya hivyo ni kuunganisha meza kwa kutumia uwanja mmoja wa kawaida.

Taarifa ya SELECT lazima iwe na kizuizi cha kulinganisha maadili ya safu maalum (uwanja). Kisha ni safu mlalo zile tu ambazo thamani za safu wima iliyobainishwa zitapatikana kutoka kwa majedwali yanayohusiana. Jina la safu linaonyeshwa tu pamoja na jina la jedwali; la sivyo taarifa hiyo itakuwa na utata.

Unaweza kutumia aina zingine za uunganisho wa jedwali: opereta INTER JOIN (jiunge la ndani) huhakikisha kuwa seti inayotokana ya rekodi ina maadili yanayolingana katika sehemu zinazohusiana. Viungio vya nje (OUTER JOIN) hukuruhusu kujumuisha katika matokeo ya hoja safu mlalo zote kutoka kwa jedwali moja na safu mlalo zinazolingana kutoka kwa lingine.

Udhibiti wa ufikiaji. SQL inahakikisha usawazishaji wa usindikaji wa hifadhidata na programu mbalimbali za programu na ulinzi wa data kutoka kwa ufikiaji usioidhinishwa.

Ufikiaji wa data katika mazingira ya watumiaji wengi unadhibitiwa kwa kutumia taarifa za GRANT na BATILISHA. Katika kila taarifa ni muhimu kutaja mtumiaji, kitu (meza, mtazamo) kuhusiana na ambayo ruhusa zimewekwa, na ruhusa wenyewe. Kwa mfano, taarifa ya GRANT humpa mtumiaji X uwezo wa kurejesha data kutoka kwa jedwali la PRODUCT:

TOA UCHAGUZI KWENYE BIDHAA HADI X

Taarifa ya BATILISHA kubatilisha ruhusa zote zilizotolewa hapo awali.

Kupachika SQL katika Programu za Maombi. Maombi halisi kawaida huandikwa katika lugha zingine ambazo hutoa nambari ya SQL na kuipitisha kwa DBMS kama maandishi ya ASCII.

Kiwango cha IBM kwa bidhaa za SQL hudhibiti matumizi ya lugha ya SQL iliyojengewa ndani. Wakati wa kuandika programu ya maombi, maandishi yake ni mchanganyiko wa amri kutoka kwa lugha kuu ya programu (kwa mfano, C, Pascal, Cobol, Fortran, Assembler) na amri za SQL zilizo na kiambishi maalum, kwa mfano. ExecSQL. Muundo wa taarifa za SQL umepanuliwa ili kushughulikia vibadala vya lugha mwenyeji katika muundo wa SQL.



Kichakataji cha SQL hurekebisha aina ya programu kulingana na mahitaji ya mkusanyaji wa lugha kuu ya programu. Kazi ya mkusanyaji ni kutafsiri (kutafsiri) programu kutoka kwa lugha ya programu ya chanzo hadi lugha iliyo karibu na lugha ya mashine. Baada ya mkusanyiko, programu ya maombi (maombi) ni moduli ya kujitegemea.

Lahaja za SQL

DBMS za kisasa za uhusiano hutumia lahaja za lugha ya SQL kuelezea na kudhibiti data. Sehemu ndogo ya lugha ya SQL inayokuruhusu kuunda na kuelezea hifadhidata inaitwa DDL (Lugha ya Ufafanuzi wa Data).

Hapo awali, lugha ya SQL iliitwa SEQUEL (Lugha ya Maswali ya Kiingereza Iliyoundwa), kisha SEQUEL/2, na kisha SQL kwa urahisi. Leo, SQL ndio kiwango halisi cha DBMS za uhusiano.

Kiwango cha lugha ya kwanza kilionekana mnamo 1989 - SQL-89 na kiliungwa mkono na karibu DBMS zote za uhusiano wa kibiashara. Ilikuwa ya jumla katika asili na chini ya tafsiri pana. Faida za SQL-89 zinaweza kuzingatiwa kusawazisha sintaksia na semantiki za waendeshaji kwa sampuli na udanganyifu wa data, na vile vile urekebishaji wa njia za kupunguza uadilifu wa hifadhidata. Hata hivyo, ilikuwa inakosa sehemu muhimu kama vile uchakachuaji wa schema ya hifadhidata. Kutokamilika kwa kiwango cha SQL-89 kulisababisha kuonekana mnamo 1992. toleo linalofuata la lugha ya SQL.

SQL2 (au SQL-92) inashughulikia takriban masuala yote muhimu: upotoshaji wa schema ya hifadhidata, shughuli na usimamizi wa kikao, usaidizi wa usanifu wa seva ya mteja au zana za ukuzaji wa programu.

Hatua inayofuata katika ukuzaji wa lugha ni toleo la SQL 3. Toleo hili la lugha linakamilishwa na utaratibu wa kichochezi, ufafanuzi wa aina ya data ya kiholela, na kiendelezi cha kitu.

Hivi sasa kuna viwango vitatu vya lugha: mwanzilishi, wa kati na kamili. Watengenezaji wengi wa DBMS zao hutumia utekelezaji wao wa SQL, kulingana na angalau kiwango cha awali cha kiwango kinacholingana cha ANSI, na iliyo na viendelezi fulani maalum kwa DBMS fulani. Katika meza 4.9 hutoa mifano ya lahaja za SQL.

Jedwali 4.9 lahaja za SQL

DBMS Lugha ya kuuliza
Mfumo wa R DBMS SQL
DB2 SQL
Ufikiaji SQL
SYBASE SQL Popote Watcom-SQL
Seva ya SYBASE SQL Transact_SQL
SQL yangu SQL
Oracle PL/SQL

Hifadhidata zenye mwelekeo wa kitu hutumia lugha ya swali la kitu OQL (Lugha ya Maswali ya Kitu). Lugha ya OQL ilitokana na amri ya SELECT ya lugha ya SQL2 na iliongeza uwezo wa kuelekeza swali kwa kitu au mkusanyiko wa vitu, pamoja na uwezo wa kupiga simu ndani ya hoja moja.

Utangamano wa lahaja nyingi za SQL zilizotumika huamua utangamano wa DBMS. Kwa hivyo, SYBASE SQL Anywhere DBMS inaoana iwezekanavyo kwa DBMS ya darasa hili na SYBASE SQL Server DBMS. Moja ya vipengele vya utangamano huu ni usaidizi katika SYBASE SQL Popote wa lahaja ya lugha ya SQL kama Transact-SQL. Lahaja hii inatumika katika Seva ya SYBASE SQL na inaweza kutumika katika SYBASE SQL Popote pamoja na lahaja asili ya SQL - Watcom-SQL.

Maswali ya kudhibiti

1. Je, DBMS inaweza kuainishwaje?

2. Ni mifano gani ya hifadhidata iliyopo?

3. Ni mambo gani kuu ya mifano ya habari?

4. Ni aina gani za mahusiano kati ya vyombo vilivyopo?

5. Michoro ya ER ni nini na inatumika kwa nini?

6. Je, utaratibu wa kuhalalisha meza unakuwezesha kufanya nini?

7. Lugha na zana za programu za DBMS ni zipi?

8. Ni aina gani ya MS Access DBMS ni?

9. Je, ni vitu gani kuu vya MS Access DBMS?

10. Waendeshaji wakuu wa SQL hutumiwa kwa nini?

Lugha ya programu

SQL (Lugha ya Maswali Iliyoundwa) ni lugha ya usimamizi wa hifadhidata kwa hifadhidata za uhusiano. SQL yenyewe si lugha ya programu ya Turing-kamili, lakini kiwango chake kinaruhusu kuundwa kwa upanuzi wa utaratibu ambao unapanua utendaji wake katika lugha kamili ya programu.

Lugha iliundwa katika miaka ya 1970 chini ya jina la "SEQUEL" kwa mfumo wa usimamizi wa hifadhidata wa Mfumo R (DBMS). Baadaye iliitwa "SQL" ili kuepusha migongano ya alama za biashara. Mnamo 1979, SQL ilichapishwa kwa mara ya kwanza kama bidhaa ya kibiashara, Oracle V2.

Kiwango cha kwanza cha lugha rasmi kilipitishwa na ANSI mwaka wa 1986 na ISO mwaka wa 1987. Tangu wakati huo, matoleo kadhaa zaidi ya kiwango yameundwa, baadhi yao yakirudia yale yaliyotangulia na tofauti ndogo, wengine wakichukua vipengele vipya muhimu.

Licha ya kuwepo kwa viwango, utekelezwaji wa kawaida wa SQL hutofautiana kiasi kwamba msimbo hauwezi kutumwa kutoka kwa mfumo mmoja wa usimamizi wa hifadhidata hadi mwingine bila kufanya mabadiliko makubwa. Hii ni kutokana na urefu na utata wa kiwango, pamoja na ukosefu wake wa vipimo katika baadhi ya maeneo muhimu ya utekelezaji.

SQL iliundwa kama njia rahisi, sanifu ya kurejesha na kuendesha data iliyo katika hifadhidata ya uhusiano. Baadaye ikawa ngumu zaidi kuliko ilivyokusudiwa na ikawa zana ya msanidi badala ya zana ya mtumiaji wa mwisho. Hivi sasa, SQL (zaidi kama inavyotekelezwa na Oracle) inasalia kuwa lugha maarufu zaidi ya usimamizi wa hifadhidata, ingawa kuna njia mbadala.

SQL ina sehemu nne tofauti:

  1. Lugha ya Ufafanuzi wa Data (DDL) hutumiwa kufafanua miundo ya data iliyohifadhiwa katika hifadhidata. Taarifa za DDL hukuruhusu kuunda, kurekebisha, na kufuta vipengee vya kibinafsi kwenye hifadhidata. Aina halali za vipengee hutegemea DBMS inayotumiwa na kwa kawaida hujumuisha hifadhidata, watumiaji, majedwali, na idadi ya vitu vidogo vinavyosaidia kama vile majukumu na faharasa.
  2. Lugha ya ghiliba ya data (DML) hutumiwa kupata na kurekebisha data katika hifadhidata. Taarifa za DML hukuruhusu kupata, kuingiza, kurekebisha na kufuta data katika majedwali. Wakati mwingine kauli zilizochaguliwa za urejeshaji data hazizingatiwi kuwa sehemu ya DML kwa sababu hazibadilishi hali ya data. Taarifa zote za DML ni za kutangaza.
  3. Lugha ya ufafanuzi wa ufikiaji wa data (DCL) hutumiwa kudhibiti ufikiaji wa data katika hifadhidata. Taarifa za DCL zinatumika kwa upendeleo na kukuruhusu kutoa na kubatilisha haki za kutumia baadhi ya taarifa za DDL na DML kwa vitu fulani vya hifadhidata.
  4. Lugha ya Kudhibiti Muamala (TCL) hutumika kudhibiti uchakataji wa miamala katika hifadhidata. Kwa kawaida taarifa za TCL ni pamoja na kujitolea kufanya mabadiliko yaliyofanywa wakati wa muamala, kurejesha nyuma ili kuyarejesha, na kuokoa ili kuvunja muamala katika sehemu kadhaa ndogo.

Ikumbukwe kwamba SQL inatekeleza dhana ya programu ya kutangaza: kila taarifa inaelezea tu hatua inayohitajika, na DBMS hufanya uamuzi juu ya jinsi ya kuifanya, i.e. hupanga shughuli za kimsingi zinazohitajika kufanya kitendo na kuzitekeleza. Hata hivyo, ili kutumia vyema uwezo wa SQL, msanidi lazima aelewe jinsi DBMS inavyochanganua kila taarifa na kuunda mpango wake wa utekelezaji.

Mifano:

Salamu, Dunia!:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfuatano 'Hujambo, Ulimwengu!' umechaguliwa kutoka kwa jedwali lililojengewa ndani, ambalo hutumika kwa maswali ambayo hayahitaji ufikiaji wa majedwali halisi.

chagua "Habari, Ulimwengu!" kutoka mbili;

Kiwanda:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

SQL haitumii vitanzi, urejeshaji, au vitendakazi vilivyobainishwa na mtumiaji. Mfano huu unaonyesha suluhisho linalowezekana kwa kutumia:

  • kiwango cha safu wima-pseudo ili kuunda majedwali bandia T1 na T2 yenye nambari kutoka 1 hadi 16,
  • aggregate function sum , ambayo hukuruhusu kujumlisha vitu vya seti bila kutumia kitanzi,
  • na kazi za hesabu za ln na exp, ambazo hukuruhusu kubadilisha bidhaa (inayohitajika kukokotoa sababu) na jumla (zinazotolewa na SQL).

Mstari "0! = 1" haitajumuishwa katika seti inayosababisha ya safu, kwa sababu kujaribu kutathmini ln(0) husababisha ubaguzi.

Nambari za Fibonacci:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

SQL haitumii vitanzi au urejeshaji, na uga zinazoambatanisha kutoka safu mlalo tofauti kwenye jedwali au hoja si chaguo la kukokotoa la kawaida. Mfano huu hutumia:

  • Fomula ya Binet na kazi za hisabati RUND, POWER na SQRT kwa kukokotoa nambari ya nth ya Fibonacci;
  • ngazi ya safu-pseudo ili kuunda t1 ya pseudo-meza yenye nambari kutoka 1 hadi 16;
  • chaguo za kukokotoa zilizojumuishwa SYS_CONNECT_BY_PATH kwa muunganisho uliopangwa wa nambari zilizopokelewa.

CHAGUA KUBADILISHA (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || "..." fiblist KUTOKA ( CHAGUA n , fib , ROW_NUMBER () JUU ( ORDER BY n ) r KUTOKA ( chagua n , pande zote ((nguvu ((1 + sqrt (5 ))) * 0 . 5 , n ) - nguvu ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib kutoka (chagua kiwango n kutoka kuunganisha pande mbili kwa kiwango<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Salamu, Dunia!:

Mfano kwa matoleo ya Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

chagua "Habari, Ulimwengu!" ;

Kiwanda:

Mfano kwa matoleo ya Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Ufafanuzi wa kujirudia wa factorial hutumiwa, kutekelezwa kwa njia ya swala la kujirudia. Kila mstari wa swali una sehemu mbili za nambari, n na n!, na kila mstari unaofuata huhesabiwa kwa kutumia data kutoka kwa uliopita.

Unaweza tu kuhesabu nambari kamili hadi 20!. Wakati wa kujaribu kuhesabu 21! Hitilafu "Hitilafu ya kufurika kwa hesabu" hutokea, i.e. gridi kidogo inafurika.

Kwa nambari halisi, factorial ni 100! (Ili kufanya hivyo, kwa mfano unahitaji kubadilisha bigint na kuelea kwenye mstari wa 3)

Nambari za Fibonacci:

Mfano kwa matoleo ya Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Uamuzi wa kurudia wa nambari za Fibonacci hutumiwa, hutekelezwa kupitia swali la kujirudia. Kila mstari wa swali una nambari mbili za karibu katika mlolongo, na mstari unaofuata unahesabiwa kama (nambari ya mwisho, jumla ya nambari) ya mstari uliopita. Kwa hivyo, nambari zote isipokuwa za kwanza na za mwisho zinaonekana mara mbili, kwa hivyo matokeo ni pamoja na nambari za kwanza za kila mstari.

Kiwanda:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfano huu unaonyesha matumizi ya opereta modeli, inayopatikana katika Oracle 10g, ambayo inaruhusu mifuatano ya hoja kuchukuliwa kama vipengele vya safu. Kila mstari una sehemu mbili - nambari ya mstari n na msingi wake f.

chagua n || "! =" || f factorial kutoka kwa muundo wa aina mbili hurejesha vipimo vya safu mlalo zote kwa ( 0 d) vipimo ( 0 f , 1 n ) kanuni iterate ( 17 ) ( f [ iteration_number ] = kusimbua ( iteration_number , 0 , 1 , f [ iteration_number - 1 ] * iteration_number ) , n [ iteration_number ] = iteration_number );

Nambari za Fibonacci:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfano huu unaonyesha matumizi ya opereta modeli, inayopatikana katika Oracle 10g, ambayo inaruhusu mifuatano ya hoja kuchukuliwa kama vipengele vya safu. Kila mstari una sehemu mbili - nambari ya Fibonacci yenyewe na muunganisho wa nambari zote chini ya au sawa nayo. Kuunganisha nambari mara kwa mara katika hoja sawa inayozizalisha ni rahisi na haraka kuliko kujumlisha kama operesheni tofauti.

chagua upeo || ", ..." kutoka (chagua s kutoka kwa muundo wa aina mbili rudisha vipimo vya safu mlalo zote kwa ( 0 d ) vipimo ( kutupwa ( " " as varchar2 (200 )) s , 0 f ) sheria iterate ( 16 ) ( f [ iteration_number ] = simbua (nambari_ya_kurudia , 0 , 1 , 1 , 1 , f [ iteration_number - 1 ] + f [ iteration_number - 2 ]), s [ iteration_number ] = simbua ( iteration_number , 0 , to_char (f [ iteration_number - ]), 1 ] || ", " || to_char (f [ iteration_number ])) ) ));

Kiwanda:

Mfano wa matoleo 5 ya MySQL

chagua concat (kutupwa (t2 . n as char ), "!= " , tuma (exp (jumla (jumla (t1 . n )))) kama char)) kutoka ( chagua @ i : = @ i + 1 AS n kutoka TABLE , (chagua @ i : = 0 ) kama sel1 kikomo 16 ) t1 , ( chagua @ j : = @ j + 1 AS n kutoka TABLE , ( chagua @ j : = 0 ) kama sel1 kikomo 16 ) t2 ambapo t1 . n<= t2 . n group by t2 . n

Nambari za Fibonacci:

Mfano wa matoleo 5 ya MySQL

Badilisha TABLE na jedwali lolote unaloweza kufikia, kama vile mysql.help_topic .

chagua concat (group_concat (f kitenganishi ", " ), ", ..." ) kutoka ( chagua @ f : = @ i + @ j as f , @ i : = @ j , @ j : = @ f kutoka TABLE , (chagua @ i : = 1 , @ j : = 0 ) sel1 kikomo 16 ) t

Salamu, Dunia!:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfano huu hutumia kizuizi cha PL/SQL kisichojulikana ambacho huchapisha ujumbe kwa pato la kawaida kwa kutumia kifurushi cha dbms_output.

anza dbms_output . put_line("Habari, Ulimwengu!"); mwisho;

Kiwanda:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfano huu unaonyesha ukokotoaji unaorudiwa wa kipengele kwa kutumia PL/SQL.

tangaza n nambari := 0 ; f nambari := 1 ; kuanza wakati (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Nambari za Fibonacci:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfano huu hutumia uamuzi wa kurudia wa nambari za Fibonacci. Nambari zilizohesabiwa tayari zimehifadhiwa katika muundo wa data wa varray - analog ya safu.

tangaza aina ya vector ni varray (16) ya nambari; fib vekta := vekta(); mimi nambari; s varchar2(100); anza fib. kupanua (16); nyuzi (1) := 1; nyuzi (2) := 1; s : = fib (1 ) || "," || fib(2) | "," ; kwa i katika 3 .. 16 kitanzi fib (i): = fib (i - 1) + fib (i - 2); s := s | fib(i) || "," ; kitanzi cha mwisho; dbms_matokeo. put_line (s || "..." ); mwisho;

Mlinganyo wa Quadratic:

Mfano kwa matoleo ya Oracle 10g SQL, Oracle 11g SQL

Mfano huu ulijaribiwa katika SQL*Plus, TOAD na PL/SQL Developer.

SQL Safi hukuruhusu kuanzisha vigeuzo wakati wa utekelezaji wa hoja kwa namna ya vigeu vinavyoweza kubadilishwa. Ili kufafanua utofauti kama huu, jina lake (katika kesi hii, A, B, na C) lazima litumike pamoja na ampersand & mbele yake wakati wowote utofauti unahitaji kurejelewa. Hoja inapotekelezwa, mtumiaji anaombwa kuweka thamani za vigeu vyote vinavyotumika kwenye hoja. Mara tu maadili yanapoingizwa, kila kumbukumbu ya kutofautisha kama hiyo inabadilishwa na thamani yake, na ombi linalosababishwa linatekelezwa.

Kuna njia kadhaa za kuingiza maadili kwa vibadilishaji vya uingizwaji. Katika mfano huu, rejeleo la kwanza la kila utaftaji hutanguliwa na ampersand mara mbili && badala ya ampersand moja. Kwa njia hii, thamani ya kila kigezo huingizwa mara moja tu, na marejeleo yote yanayofuata yake yatabadilishwa na thamani sawa (wakati wa kutumia ampersand moja katika SQL*Plus, thamani ya kila rejeleo la kutofautisha sawa lazima iingizwe kando. ) Katika PL/SQL Developer, marejeleo yote tofauti lazima yatanguliwa na herufi moja, vinginevyo kosa la ORA-01008 "Sio vigeu vyote vilivyofungwa" litatokea.

Mstari wa kwanza wa mfano unabainisha mhusika kwa kitenganishi cha desimali, ambacho hutumiwa wakati wa kubadilisha nambari za mizizi kuwa nyuzi.

Ombi lenyewe lina maombi manne tofauti. Kila swali hurejesha mfuatano ulio na matokeo ya hesabu katika mojawapo ya visa (A=0, D=0, D>0 na D.<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

badilisha seti ya kipindi NLS_NUMERIC_CHARACTERS = "." ; chagua "Si mlinganyo wa quadratic." ans kutoka mbili ambapo && A = 0 union chagua "x = " || to_char (-&& B / 2 /& A ) kutoka kwa pande mbili ambapo & A != 0 na & B *& B - 4 *& A *&& C = 0 muungano chagua "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 =" || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A kutoka mbili ambapo & A != 0 na & B *& B - 4 *& A *& C > 0 muungano chagua "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" kutoka mbili ambapo & A != 0 na & B *& B - 4 *& A *& C< 0 ;