if n == 0 then [] else
[first] ++ fibonacci_aux (n - 1) second (first + second)
fibonacci = \n-> fibonacci_aux n 0 1
AMALIY ISH № 9
Mavzu. SQL so’rov ichidagi so’rov.
Ishning maqsadi: Talabalarga SQL so’rov ichidagi so’rovlarni tahlil etishni o’rgatishdan iborat.
Masalaning qo`yilishi: SQL tilida dasturlar ustida ko’plab ishlarni amalga oshirsa bo’ladi, ammo qanday qilib degan savolga javob toppish masalasini echishni o’rgatishdan iborat
Topshiriqlar:
1. Jadvaldagi ma’lumotlarni o’zgartirish uchun qanday operatorlarni qaysi vaqtda qo’llash mumkin.
2. Tutashtirish amallari qanday ishlarni bajaradi.
SQL (Structured Query Language) - bu relyatsion ma’lumotlar bazalari uchun tuzilgan so’rovlar tili. Ushbu tilda siz kerakli ma’lumotlarni chiqarib tashlaydigan iboralarni (so’rovlarni) shakllantirishingiz, ularni o’zgartirishingiz, jadvallar tuzishingiz va ularning tuzilishini o’zgartirishingiz, ma’lumotlarga kirish huquqini aniqlab olishingiz va boshqalar.
So’rovlar ma’lumotlar bazasini boshqarish tizimi (DBMS) tomonidan amalga oshiriladi. Agar siz ma’lumotlar bazalarini yaratish va boshqarish bo’yicha mutaxassis bo’lmasangiz, unda siz mavjud jadvallardagi ma’lumotlarni ko’radigan yoki o’zgartiradigan ularning foydalanuvchisi bo’lishingiz mumkin. Ko’pgina hollarda, ushbu va boshqa ma’lumotlar bazasi operatsiyalari foydalanuvchiga qulay interfeysni ta’minlaydigan maxsus dasturlar yordamida amalga oshiriladi. Odatda, dasturlar maxsus dasturlash tillarida (C, Paskal, Visual Basic va boshqalar) yoziladi va ko’pincha rivojlangan muhitlar yordamida yaratiladi, masalan, Delphi, C ++ Builder va boshqalar. Ammo ularsiz ma’lumotlar bazasiga kirishingiz mumkin faqat SQL yordamida. Shuni ham ta’kidlash kerakki, ixtisoslashtirilgan dasturlar odatda ma’lumotlar bazasiga kirishda SQL kod parchalarini ishlatadilar.
Shunday qilib, SQL - relyatsion ma’lumotlar bazalari bilan ishlashda keng qo’llaniladigan standart til. Ushbu tilning sintaksisi nafaqat dasturchilarni, balki oddiy foydalanuvchilarning ham foydalanishi uchun sodda. Hozirgi vaqtda oddiy kompyuter foydalanuvchisi hech bo’lmaganda matn muharriri (masalan, Microsoft Word) va elektron jadvallarga (masalan, Microsoft Excel) ega bo’lishi kerak. Agar u ma’lumotlar bazasidan qanday foydalanishni bilsa, yomon emas. Ko’p turli xil ma’lumotlar bazalari mavjud, ammo ma’lumotlar bazalari bilan ishlashning bitta universal vositasi - SQL mavjud, SQL, hech bo’lmaganda uning asoslarini bilish va undan ma’lumotlarni qidirish va tahlil qilishda foydalanish qobiliyati hatto oddiy foydalanuvchilar uchun ham kompyuter savodxonligining muhim qismidir.
SQL relyatsion ma’lumotlar bazasi uchun tabiiy (aniqrog’i ingliz tiliga) yaqin bo’lgan so’rovlar tili sifatida yaratilgan. Tabiiy tilga yaqinligi SQL-ni nafaqat dasturchilar, balki oddiy ma’lumotlar bazasi foydalanuvchilari uchun keng foydalanishi uchun vosita qiladi, deb taxmin qilingan. Dastlab SQL oddiy dasturlash tillariga xos bo’lgan boshqarish tuzilmalarini o’z ichiga olmadi. Sintaksisi juda oddiy bo’lgan so’rovlar to’g’ridan-to’g’ri konsoldan ketma-ket kiritilib, bir xil ketma-ketlikda bajarildi. Biroq, SQL bank xodimlari, avia va poezd chiptalarini sotuvchilar, iqtisodchilar va boshqa kompaniyalarning ma’lumotlar bazalarida saqlanadigan ma’lumotlardan foydalanadigan vositaga aylanmadi. Ular uchun oddiy SQL savollarning tabiiy tiliga yaqin bo’lishiga qaramay juda murakkab va noqulay bo’lib chiqdi.
Amalda ma’lumotlar bazasi odatda dasturchilar tomonidan protsessual tillarda yozilgan dasturlar orqali ishlaydi, masalan, C, Visual Basic, Paskal, Java va boshqalar. Ko’pincha dasturlar Delphi, Microsoft Access, Visual dBase va boshqalar kabi vizual rivojlanish uchun maxsus muhitlarda yaratiladi. Shu bilan birga, dastur ishlab chiqaruvchisi deyarli dastur kodlarini yozishi shart emas, chunki uni ishlab chiquvchi tizim uning uchun qiladi. Qanday bo’lmasin, dastur kodi bilan ishlash minimaldir. Ushbu dasturlar foydalanuvchilarni SQL so’rovlarini to’g’ridan-to’g’ri kiritishga majbur qilmaydigan foydalanuvchilarga qulay grafik interfeysga ega. Buning o’rniga, u dasturni qiladi. Shu bilan birga, dastur ma’lumotlar bazasiga kirish uchun SQL-dan foydalanishi yoki foydalanmasligi mumkin. SQL ma’lumot olish, qo’shish va o’zgartirishning juda samarali vositasi bo’lsa ham, yagona emas va agar uni dasturda ishlatish mumkin bo’lsa, buni qilish kerak.
Ratsional ma’lumotlar bazalari foydalanuvchi interfeysini ta’minlaydigan dasturlardan qat’i nazar, mavjud va mavjud bo’lishi mumkin. Agar biron sababga ko’ra bunday interfeys mavjud bo’lmasa, u holda siz SQL-dan foydalanib, ma’lumotlar bazasiga ulanishingiz mumkin bo’lgan konsol yoki ba’zi dasturlardan foydalanib, SQL so’rovini kiritishingiz va yuborishingiz mumkin (masalan, Borland SQL Explorer). )
SQL tili dasturlar yozilgan tillardan farqli o’laroq deklarativ (tavsiflovchi) til hisoblanadi. Bu shuni anglatadiki, SQL iboralari nima qilish kerakligini emas, balki nima qilish kerakligini tasvirlaydi.
Masalan, 102-bo’lim xodimlarining ismlari va lavozimi to’g’risidagi ma’lumotlarni jadvaldan tanlash uchun quyidagi so’rovni bajarish kifoya:
Jadvaldan so’rovda ko’rsatilgan ma’lumotlarni tanlab olish uchun MBBT bajarishi kerak bo’lgan harakatlarni batafsil tavsiflashingiz shart emas. Siz shunchaki olishni xohlagan narsani tasvirlab berasiz. So’rov natijasi o’laroq, ma’lumotlar bazasi ma’lumotlar bazasi siz so’ragan ma’lumotlarni o’z ichiga olgan jadvalni qaytaradi.
SQL qanday ishlaydi?
SQL - bu relyatsion ma’lumotlar bazalariga (RDB) qaratilgan maxsus til. Agar universal dasturlash tilidan foydalansangiz, masalan, S-ni juda yaxshi ish qiladi, C-da RDB yaratish uchun siz noldan boshlashingiz kerak bo’ladi. Siz jadval deb nomlangan ob’ektni belgilashingiz kerak, u har qanday qatorga ega bo’lishi mumkin va keyin asta-sekin qiymatlarni kiritish va olish tartibini yaratishingiz kerak.
Agar siz aniq bir qatorlarni topmoqchi bo’lsangiz, quyidagi kabi protsedurada amallarni bajarishingiz kerak bo’ladi:
Jadval qatorini ko’rib chiqing.
Ushbu chiziq kerakli chiziqlardan biri yoki yo’qligini tekshiring.
Agar shunday bo’lsa, uni butun stol tekshirilgunga qadar bir joyda saqlang.
Jadvalda boshqa qatorlar borligini tekshiring.
Agar mavjud bo’lsa, 1-bosqichga qayting.
Agar boshqa chiziqlar bo’lmasa, 3-bosqichda saqlangan barcha qiymatlarni chop eting.
(Albatta, bu C-buyruqlarning haqiqiy to’plami emas, faqat haqiqiy dasturga kiritilishi kerak bo’lgan qadamlar mantig’i.) SQL buni siz uchun bajarmoqda. SQL-dagi buyruqlar barcha jadval jadvallari bilan bitta ob’ekt sifatida ishlashi va ulardan olingan yoki olingan har qanday ma’lumotlarni yagona modul sifatida qayta ishlashi mumkin.
ANSI nima qiladi?
Kirish qismida aytib o’tganimizdek, SQL standarti ANSI (Amerika milliy standartlari instituti) kodi yordamida aniqlanadi. SQL ANSI tomonidan ixtiro qilinmagan. Bu aslida IBM ixtirosi. Ammo boshqa kompaniyalar darhol SQL-ni oldilar. Kamida bitta kompaniya (Oracle) IBMga SQL-mahsulotlarini sotish huquqini qo’lga kiritdi.
Bir qator raqobatdosh SQL dasturlari bozorda paydo bo’lgandan so’ng, ANSI ular olib keladigan standartni aniqladi. (Bunday standartlarning ta’rifi ANSI funktsiyasidir). Biroq, shundan keyin ba’zi muammolar paydo bo’ldi. Ular ANSI-ni ba’zi cheklashlar ko’rinishida standartlashtirish natijasida paydo bo’ldi. ANSI har doim eng foydali nima ekanligini aniqlamaganligi sababli, dasturlar ularni ANSI standartiga mos kelishga harakat qilishadi va bu ularni haddan tashqari cheklashga imkon bermaydi. Bu, o’z navbatida, tasodifiy nomuvofiqliklarga olib keladi. Ma’lumotlar bazasi dasturlari odatda ANSI SQL qo’shimcha funktsiyalarni beradi va ko’pincha ko’plab cheklovlarni engillashtiradi. Shu sababli, ANSI ning umumiy o’zgarishlari ham ko’rib chiqiladi. Garchi biz har bir istisno yoki o’zgarishni ko’rib chiqa olmasak-da, yaxshi g’oyalar ANSI standarti bilan belgilanmagan taqdirda ham, turli dasturlarda tatbiq etiladi va qo’llaniladi. ANSI - bu minimal standartlarning o’ziga xos turi bo’lib, u imkon qadar ko’proq narsani qilishingiz mumkin, garchi siz aniqlagan vazifalarni bajarishda uning ko’rsatmalariga amal qilishingiz kerak.
Interfaol va joylashtirilgan SQL
Ikkita SQL mavjud: Interfaol va Nested. Ko’pincha ikkala shakl ham bir xil ishlaydi, ammo boshqacha qo’llaniladi. Interfaol SQL to’g’ridan-to’g’ri ma’lumotlar bazasida mijoz tomonidan foydalanish uchun mahsulot ishlab chiqarish uchun ishlaydi. Ushbu SQL-da, buyruqni kiritganingizda, u darhol bajariladi va natijani darhol ko’rishingiz mumkin (agar u umuman ishlamasa).
Ichki SQL odatda boshqa tilda yozilgan (COBOL yoki PASCAL kabi) dasturlarga joylashtirilgan SQL buyruqlaridan iborat. Bu bunday dasturlarni yanada kuchliroq va samaraliroq qiladi.
Ammo, agar siz ushbu tillarni hisobga olsak, SQL tuzilishi va ma’lumotlarni boshqarish uslubi bilan shug’ullanishingiz kerak, bu interfaol SQL uchun ba’zi kengaytmalarni talab qiladi. SQL buyruqlarini joylashtirilgan SQL-ga o’tkazish, ular o’rnatilgan dastur tomonidan ishlatiladigan parametrlar yoki parametrlar uchun "uzatildi".
Ushbu kitobda biz SQL-ni interfaol usulda taqdim etamiz. Bu bizga boshqa tillar bilan interfeys yordamida qanday ulanganliklari haqida qayg’urmasdan buyruqlar va ularning harakatlarini muhokama qilish imkoniyatini beradi. Interfaol SQL - bu dastur bo’lmaganlar uchun eng foydali shakl. Interfaol SQL haqida siz bilgan hamma narsa, asosan, o’rnatilgan shakllarga tegishli. Ushbu kichik shakldan foydalanish uchun zarur bo’lgan o’zgarishlar ushbu kitobning so’nggi bobida muhokama qilinadi.
SQL pastki qismlari
Ikkala interfaol va ichki SQL shakllari ko’p qismlarga yoki kichik bo’limlarga ega. SQL-ni o’qiyotganda ushbu terminologiyaga duch kelishingiz mumkinligi sababli, biz ba’zi tushuntirishlarni beramiz. Afsuski, ushbu atamalar barcha qo’llanmalarda keng qo’llanilmaydi. Ular ANSI tomonidan belgilanadi va kontseptual darajada foydalidir, ammo SQL dasturlarining aksariyati deyarli SQL buyruqlarining funktsional toifalariga aylanishi uchun ularni alohida-alohida qayta ishlamaydi.
DDL (Data Definition Language) - ANSI sxemasini tavsiflash tili deb ataladigan ma’lumotlar bazasida ob’ektlarni (jadvallar, indekslar, ko’rinishlar va boshqalar) yaratadigan buyruqlardan iborat.
DML (Data Manipulation Language) - bu istalgan vaqtda jadvallarda qaysi qiymatlar berilganligini aniqlaydigan buyruqlar to’plami.
DCD (Data Management Language) foydalanuvchiga muayyan harakatlarni bajarishga ruxsat berish yoki qilmaslikni aniqlaydigan vositalardan iborat. Ular ANSI-da DDL ning ajralmas qismlari.
Bu ismlarni unutmang. Bu har xil til emas, lekin funktsiyalari bo’yicha guruhlangan SQL buyruqlarining bo’limlari.
Har xil ma’lumotlar turlari
Jadval maydonlaridagi qiymatlarning hammasi ham mantiqan bir xil emas. Eng aniq farq bu raqamlar va matn o’rtasidagi farqdir. Siz raqamlarni alifbo tartibida joylashtira olmaysiz yoki bir ismni boshqasidan ajrata olmaysiz.
RDB bilan tizimlar ma’lumotlar bo’laklari o’rtasidagi munosabatlarga asoslanganligi sababli, tegishli turdagi jarayonlar va taqqoslashlarni amalga oshirish uchun turli xil ma’lumotlar bir-biridan farq qilishi kerak. SQL-da, bu har bir maydonga ushbu maydon o’z ichiga olishi mumkin bo’lgan qiymat turini ko’rsatadigan ma’lumotlar turini tayinlash orqali amalga oshiriladi. Ushbu sohadagi barcha qiymatlar bir xil bo’lishi kerak. Masalan, Mijozlar jadvalida cname va city baholash uchun matn satrlarini, snum va cnum esa raqamlarni o’z ichiga oladi. Shuning uchun, siz raqamli ma’lumot turiga ega bo’lgan reyting maydoniga Eng yuqori yoki None qiymatini kirita olmaysiz. Ushbu cheklash muvaffaqiyatli amalga oshirildi, chunki u sizning ma’lumotlaringizga ba’zi tarkibiy qismlarni yuklaydi. Siz tez-tez ma’lum bir maydondagi ba’zi qiymatlarni yoki barchasini taqqoslaysiz, shunda siz hamma narsani emas, balki faqat aniq satrlarda harakatlarni bajarishingiz mumkin. Agar maydon qiymatlari aralash ma’lumotlar turiga ega bo’lsa, buni amalga oshira olmaysiz.
Afsuski, ushbu ma’lumotlar turlarini aniqlash ko’pgina tijorat ma’lumotlar bazasi dasturlari va rasmiy SQL standarti har doim ham mos kelmaydigan asosiy yo’nalishdir. ANSI SQL standarti faqat matn va raqamni taniydi, aksariyat tijorat dasturlari boshqa maxsus turlardan foydalanadi. DATA (DATE) va TIME (TIME) kabi - aslida deyarli standart turlari (aniq formatlari farqli bo’lsa-da). Ba’zi paketlar, masalan, PUL (PUL) va BINARY (BINARY) kabi turlarni ham qo’llab-quvvatlaydi. (PUL - bu kompyuterlar tomonidan ishlatiladigan maxsus "valyuta" hisoblash tizimi.)
Kompyuterdagi barcha ma’lumotlar ikkilik raqamlarda uzatiladi va keyin ularni osonlikcha ishlatishimiz va tushunishimiz uchun boshqa tizimlarga aylantiriladi.
ANSI bir nechta son turlarini belgilaydi, ularning orasidagi farq juda nozik va ba’zan chalkash. Ruxsat berilgan ANSI turlari B ilovada keltirilgan. ANSI raqamli turlarining murakkabligi, hech bo’lmaganda, o’rnatilgan SQL-ni boshqa bir qator tillarga moslashtirishga harakat qilish bilan izohlanishi mumkin. ANSI raqamlarining ikki turi - INTEGER (DECIMAL) va DECIMAL (mos ravishda INT va DEC deb qisqartirilishi mumkin) bizning maqsadlarimizga, shuningdek, amaliy amaliy dasturlarning maqsadlariga mos keladi. Tabiiyki, WHOLE turini o’nlik kasrning o’ng tomonidagi raqamlardan iborat bo’lmagan DECIMAL raqam sifatida ko’rsatish mumkin.
Matn turi CHAR (yoki SYMBOL) bo’lib, matn qatoriga ishora qiladi. CHAR turidagi maydon uzunlikka ega bo’lib, ushbu maydonga kiritilishi mumkin bo’lgan belgilar maksimal soniga qarab belgilanadi. Aksariyat dasturlarda, shuningdek, VARCHAR (naushniklarning turli xil raqamlari) deb nomlangan nostandart turi mavjud bo’lib, u matnli satr bo’lib, amalga oshirishda belgilangan maksimal uzunlikka ega bo’lishi mumkin (odatda 254 belgi). CHARACTER va VARCHAR qiymatlari bitta qo’shtirnoq ichida "matn" deb yozilgan. CHAR va VARCHAR o’rtasidagi farq shundan iboratki, CHAR chiziqning maksimal uzunligi uchun etarli xotirani saqlashi kerak va VARCHAR kerak bo’lganda xotirani ajratadi.
Belgilar turlari barcha bosma belgilar, shu jumladan raqamlardan iborat. Biroq, 1 raqami "1" belgisi bilan bir xil emas. "1" belgisi - bu tizim tomonidan raqamli qiymat sifatida aniqlanmagan matnning faqat bir qismi. Masalan, 1 + 1 \u003d 2, lekin "1" + "1" "2" ga teng emas. Belgilar qiymatlari kompyuterda ikkilik qiymatlar sifatida saqlanadi, ammo foydalanuvchiga bosma matn sifatida ko’rsatiladi.
O’zgartirish siz foydalanadigan tizim tomonidan belgilangan format bo’yicha amalga oshiriladi. Ushbu konvertatsiya formati kompyuter tizimlarida ishlatiladigan ikkita standart turdan biri bo’ladi (ehtimol kengaytmalar bilan): ASCII kodi (barcha shaxsiy va kichik kompyuterlarda ishlatiladi) va EBCDIC kodi (Kengaytirilgan Ikkilik Axborot almashish kodi) (keng ishlatiladi kompyuterlar). Alfavitni kiritish qiymatlari kabi ba’zi operatsiyalar format bilan o’zgaradi.
DATE turini ishlatishda biz ANSI emas, balki bozorni kuzatib borishimiz kerak. (DATE turini tanimaydigan tizimda, siz, albatta, sanani belgi yoki raqam maydoni sifatida e’lon qilishingiz mumkin, ammo bu ko’pgina operatsiyalarni ko’proq vaqt talab etadi.)
Siz aniq ma’lumot turlarini qo’llab-quvvatlash uchun foydalanadigan dasturiy ta’minot to’plamining hujjatlariga qarashingiz kerak.
SQL Mos kelmaslik.
Oldingi munozaradan SQL dunyosi mahsulotlari o’rtasida mustaqil tafovutlar mavjudligini tushunishingiz mumkin. SQL ma’lumotlar bazasining tijorat dunyosidan vosita sifatida paydo bo’ldi va keyinchalik ANSI standartiga aylantirildi. Afsuski, ANSI har doim ham eng foydaliini aniqlay olmaydi, shuning uchun dasturlar ularni ANSI standartiga mos kelishga harakat qilishadi, bu ularni haddan tashqari cheklashga imkon bermaydi. ANSI - bu minimal standartning o’ziga xos turi - u imkoni boricha ko’proq narsani qilishingiz mumkin, ammo xuddi shu vazifani bajarayotganda bir xil natijalarga erishishingiz kerak.
AMALIY ISH № 10
Mavzu. SQL serverda ma’lumotlar bazalarini yaratish.
Do'stlaringiz bilan baham: |