Bir necha jadvallar bilan ishlash




Download 154,15 Kb.
bet3/3
Sana30.12.2023
Hajmi154,15 Kb.
#129106
1   2   3
Bog'liq
sql tili va operatorlari
Amaliy ishi 2 malumotlar tuzilmasi.HABIBULLO, AMALIY MASHGULOT 1, MALUMOTLAR BAZASI DARSLIK, 6-amaliy ish, Ma\'lumotlar bazasi (Sh.Nazirov, A.Ne\'matov, R.Qobulov, N.Mardonova) 5, 2-amaliy ish
Bir necha jadvallar bilan ishlash
Jadvallarni jamlashtirish. Jamlashtirish relyatsion ma‘lumotlar bazasi operatsiyalaridan biri bo‘lib, jadvallar orasidagi aloqani belgilaydi va ulardan ma‘lumotni bitta buyruq yordamida ajratishga imkon beradi. Jamlashda jadvallar FROM buyrug‘idan so‘ng ro‘yxat sifatida tasvirlanadi. So‘rov predikati ixtiyoriy jadval ixtiyoriy ustuniga tegishli bo‘lishi mumkin. Jamlashning eng soddasi bu dekart ko‘paytmasidir
Keraksiz satrlarni olib tashlash uchun WHERE jumlasidan foydalaniladi.
Jamlashda SQL bir necha jadval satrlari kombinatsiyasini predikatlar bo‘yicha solishtirishdir.
Sodda joylashtirilgan ostki so‘rovlar.
SQL yordamida so‘rovlarni bir birining ichiga joylashtirish ham mumkin. Odatda ichki so‘rov qiymat hosil qiladi va bu qiymat tashqi predikat tomonidan tekshirilib, to‘g‘ri yoki noto‘g‘riligi tekshiriladi.
Misol: bizga sotuvchi nomi ma’lum: Motika, lekin biz SNUM maydoni qiymatini bilmaymiz va buyurtmachilar jadvalidan hamma buyurtmalarni ajratib olmoqchimiz. Buni quyidagicha amalga oshirish mumkin:
SELECT * FROM Orders WHERE SNum =
( SELECT SNum FROM Salepeople
WHERE SName = 'Motika’ );
Agar ostki so‘rovda IN operatoridan foydalanilsa, ixtiyoriy sondagi satrlar hosil qilish mumkin. Misol: Londondagi sotuvchilar uchun hamma buyurtmalarni ko‘rsatish.
SELECT * FROM Orders WHERE SNum IN
( SELECT SNum FROM Salepeople WHERE City = 'London' );
Bu natijani jamlanma orqali ham hosil qilish mumkin. Lekin odatda ostki so‘rovli so‘rovlar tezroq bajariladi. Ostki so‘rovlarni HAVING izlash sharti ichida ishlatish ham mumkin. Bu ostki so‘rovlar agar ko‘p qiymatlar qaytarmasa agregat funksiyalaridan yoki GROUP BY yoki HAVING operatorlaridan foydalanishi mumkin. Misol:
SELECT Rating, COUNT (DISTINCT CNum) FROM Customers
GROUP BY Rating
HAVING Rating >( SELECT AVG (Rating) FROM Customers
WHERE City = 'San Jose' );
Bu buyruq San Jose dagi baholari o‘rtachadan yuqori bo‘lgan buyurtmachilarni aniqlaydi.
UNION ifodasidan foydalanish. UNION ifodasi bir yoki bir necha so‘rovlar natijasini birlashtirishga imkon beradi.
Misol: Londonda joylashgan hamma sotuvchilar va buyurtmachilarni bitta jadvalda chiqarish.
SELECT SNum, SName FROM Salepeople WHERE City = 'London'
UNION
SELECT CNum, CName FROM Customers WHERE City = 'London';
So‘rovlarda funksiyalar
Agregat funksiyalar qo‘llanishi.
Agregat (yoki STATIK) funksiyalar sonli yoki hisoblanuvchi ustunlar bilan ishlaydi. Agregat funksiya argumenti butun ustun bo‘lib, bitta qiymat qaytaradi. Bu funksiyalarga quyidagilar kiradi:
• SUM() – ustundagi hamma qiymatlar summasini hisoblash.
• AVG() – ustundagi hamma qiymatlar o‘rtachasi qiymatini hisoblash.
• MIN() – ustundagi hamma qiymatlar eng kichigini aniqlash.
• MAX() – ustundagi hamma qiymatlar eng kattasini aniqlash.
• COUNT() – ustundagi qiymati sonini aniqlash.
• COUNT(*) – so‘rov natijasi jadvalidagi satrlar sonini aniqlash.
Agregatlash argumenti bo‘lib ustun nomidan tashqari ixtiyoriy matematik ifoda xizmat qilishi ham mumkin. Misol: Sotuv kompaniyada reja bajarilishining o‘rtacha protsentini aniqlash.
SELECT AVG(100 * (SALES/QUOTA)) FROM SALESREPS
Masalan, sotuv kompaniyasida sotuvlar xajmini chiqarish.
SELECT SUM(QUOTA), SUM(SALES) FROM SALESREPS
AVG() agregatlash funksiyasiga yana bir sodda misolni ko‘ramiz. Masalan: "ACI" ishlab
chiqaruvchi mollari o‘rtacha narxini hisoblash.
SELECT AVG(PRICE) FROM PRODUCTS
WHERE MFR_ID = 'ACI'
Ekstremumlarni topishda MIN() va MAX() funksiyalari sonli ustunlar, sanalar va satrli o‘zgaruvchilar bilan ishlaydi. Eng sodda qo‘llanish sonlar bilan ishlash. Masalan, eng ko‘p va kam sotuvlar rejadagi hajmini chiqarish.
SELECT MIN (QUOTA), MAX (QUOTA) FROM SALESREPS
Masalan, buyurtmalardan eng oldin berilgan so‘rov sanasini topish.
SELECT MIN(ORDER_DATE) FROM ORDERS
MBdagi yozuvlar sonini sanash uchun COUNT() qo‘llaniladi. Bu funksiya son qiymat qaytaradi. Masalan: kompaniya mijozlari sonini chiqarish.
SELECT COUNT(CUST_NUM) FROM CUSTOMERS
COUNT(*) funksiyasi satrlar sonini hisoblaydi. Misol
SELECT COUNT(*) FROM ORDERS
Agregat funksiyalar jadval uchun natijaviy satr hosil ham qiladi. Masalan: Buyurtma o‘rtacha narxini chiqarish.
SELECT AVG(AMOUNT) FROM ORDERS
SQL turlari va strukturasi
Yuqorida ta’kidlab o‘tilganidek SQL tili tarkibida xisoblash jarayonini boshqarish imkonini beruvchi IF ... THEN ...ELSE, GO TO, DO ... WHILE kabi buyruqlar mavjud emas. Bunday masalalar dasturiy yo‘l bilan (dasturlash tili yoki masalalarni boshqarish tili) yoki interaktiv xolda (foydalanuvchining so‘rovlari asosida) amalga oshiriladi. Imkoniyati cheklanganligi sababli (xisoblash jarayonini boshqarish imkoniyati) SQL tili 2 ta usulda qo‘llanilish mumkin. Birinchi usulda interaktiv ishlash nazarda tutiladi. Bunda foydalanuvchi SQL operatorlarini terminaldan beradi. Ikkinchi usulda protsedurali tildagi dasturga SQL tili operatorlari kiritiladi.
Interaktiv rejimda ma‘lumotlar bazasi bilan ishlashda foydalanuvchi muloqat rejimida ishlaydi, ya’ni SQL tilidagi so‘rovni kiritadi va natijani oladi, yani so‘rovni kiritadi va natijag ega bo‘ladi va x.k
Kiritilgan SQL rejimida boshqa dasturlash tillarida yaratigan dastur tarkibiga kiritiladi. Bu ma‘lumotlar bazasi bilan boshqa algoritmik tillarda yaratilgan amaliy dasturlar orqali ishlashni ta’minlaydi. Biroq bu yerda qo‘shimcha dasturiy vosita kerak bo‘ladi. U dasturlash tili bilan SQL operatorlari o‘rtasidagi interfeysni ta’minlab beradi.
Atamalar
SQL til yordamida ma‘lumotlar bazasiga beriladigan so‘rov deganda joriy buyruq tavsiflagan va ma‘lumotlar bazasini boshqarish tizimi tomonidan bajarish uchun mo‘ljallangan ma‘lumotlar bazasi ustida bajariladigan buyruq tushuniladi.
So‘rov SQL tili opreatorlari yordamida yaratiladi. Operatorlar so‘zlar deb ataluvchi aloxida ma’noli qismlardan tashkil topadi. Operatorlar sintaksisi SQL tilining standartida belgilab berilgan.
SQL tili relyatsion ma‘lumotlar bazasi bilan ishlashiga qaramasdan "munosabat" atamasi o‘rniga "jadval" atamasi, "kortej" va "atribut" atamalari o‘rniga "satr" va "ustun" atamalari ishlatiladi.
SQL strukturasi va operatorlari
SQL tili 1 jadvalda tasvirlangan bo‘limlardan iborat.
1 jadval. Ma‘lumotlarni aniqlash operatorlari DDL(Data Definition Language
ma‘lumotlarni aniqlash tili)
2 jadval. Ma‘lumotlarni manipulyatsiyalash operatorlari Data Manipulation Language (DMP)
3 jadval. Data Query Language (DQL) so‘rov tili
4 jadval. Tranzaksiyalarni boshqarish operatorlari
5. Jadval. Ma‘lumotlarni boshqarish operatorlari • DCL (Data Control Language) – ma‘lumotlarni boshqarish
Ko‘pincha ustunlardagi qiymatlarning maksimal, minimal va o‘rtacha qiymatlarini xisoblashga to‘g‘ri keladi. Masalan, o‘rtacha ballni xioblash zarurati paydo bo‘ladi. Bunday xisoblashlarni bajarish uchun SQL tilida maxsus agregat funksiyalari mavjud:
MIN – ustundagi minimal qiymat;
MAX – ustundagi maksimal qiymat;
SUM – ustundagi qiymatlar yig‘indisi;
AVG – ustundagi qiymatlarning o‘rtachasi;
COUNT – ustundagi NULL dan farqli bo‘lgan qiymatlar miqdori.
Quyidagi so‘rov talabalar imtixonlarda olgan ballarining o‘rtachasini aniqlaydi.
SELECT AVG(mark) FROM mark_st
SQL tili Oddiy so‘rovlari.
SELECT 2+2;
SELECT ma‘lumotlarni tanlash operatori
Ma‘lumotlarni tanlash SELECT operatori yordamida bajariladi. Bu SQL tilining eng ko‘p qo‘llaniladigan operatori xisoblanadi. SELECT operatorini sintaksisi quyidagicha:
SELECT [ALL/DISTINCT] /*
FROM[WHERE ][ORDER BY < atributlar ro‘yxati >]
[GROUP BY < atributlar ro‘yxati >]
[HAVING ] [UNION< SELECT operatorli ifoda>]
Kvadrat qavslrda operatorni yozishda qatnashishi shart bo‘lmagan elementlar ko‘rsatilgan. ALL kalit so‘zi natijaga shartni qanoatlantiruvchi barcha satrlar, shuningdek takrorlanuvchi satrlar ham kirishini bildiradi. DISTINCT kalit so‘zi natijaga takrorlanuvchi satrlar kiritilmasligini bildiradi. Keyin bolang‘ich jadvaldagi atributlar ro‘yxati ko‘rsatiladi. Bu atributlar natijaviy jadvalga kiritiladi. * simvoli natijaviy jadvalga boshlang‘ich jadvalning barcha atributlari kiritilishini bildiradi.
Operatorda qatnashishi shart bo‘lgan so‘zlardan FROM so‘zi xisoblanadi. Bu so‘zdan keyin tanlov bajariladigan jadvallar nomi ko‘rsatiladi.
Tanlash ifodasida WHERE kalit so‘zidan keyin jadval satrlarini tanlab olish sharti ko‘rsatiladi. Bunda natijaviy jadvalga WHERE ifodasidagi shart rost qiymat qabul qiladigan satrlar kiritiladi.
ORDER BY kalit so‘zi natijaviy jadval satrlarini ko‘rsatilgan ustunlar ro‘yxati bo‘yicha tartiblash amalini bildiradi.
GROUP BY kalit so‘zidan keyin gruppalanadigan atributlar ro‘yxati ko‘rsatiladi.
HAVING ifodasida har bir gruppaga qo‘yiladigan shartlar ko‘rsatiladi. (GROUP BY va HAVING kalit so‘zlari keyinroq tushuntiriladi)
FROM, WHERE va ORDER BY kalit so‘zlari SQL tilining qolgan ma‘lumotlarni manipulyatsiyalash operatorlarida ham shu tarzda ishlatiladi.
So‘rovlar yaratishni aniq misol uchun ko‘rib o‘tamiz (1-rasm)
Barcha studentlar ro‘yxatini tanlash va tasvirlash.
SELECT *FROM student
yoki SELECT id_st, surname FROM student
Agar ushbu so‘rovga ORDER BY surname ifodasi qo‘shilsa, uxolda ro‘yxat familiya bo‘yicha tartiblanadi. Jimlikka ko‘ra tartiblash o‘sish bo‘yicha bajariladi. Agar kamayish bo‘yicha tartiblash kerak bo‘lsa, u xolda oxirgi ifodadagi atribut nomidan keyin DESC so‘zi qo‘shiladi.
«1» kodli student olgan baxolar ro‘yxatini tanlab olish va tasvirlash
SELECT id_st, mark FROM mark_st Where id_st = 1
Ekzamenlarda kamida bitta 2 yoki 3 baxo olgan studentlar kodini tanlab olishWHERE so‘zidan keyin solishtirish amallarini (<, >, =, <> va x.k.) va mantiqiy operatorlar qatnashgan ifodalarni joylashtirish mumkin.
SELECT id_st, mark FROM mark_st WHERE ( MARK >= 2 ) AND ( MARK <= 3 )
SQL tilida shart ifodalarini tuzish uchun solishtirish va mantiqiy operatorlardan tashqari yana bir qator maxsus operatorlar qo‘llaniladi. Bu operatorlar dasturlash tillarida mavjud emas. Bu operatolar:
IN – biror qiymatlar to‘plamiga tegishliligini tekshirish;
BETWEEN – biror qiymatlar diapozoniga tegishliligini tekshirish;
LIKE – namuna bilan mosligini tekshirish;
IS NULL – qiymat mavjudmasligini tekshirish.
IN operatori biror qiymatlar to‘plamiga tegishlilikni tekshirish uchun ishlatiladi.
Quyidagi so‘rov oxigi keltirilgan misoldagi so‘rov natijalarini beradi (ekzamenlarda kamida bitta 2 yoki 3 baho olgan studentlarni identifikatorini tanlab oladi)
SELECT id_st, mark FROM mark_st WHERE mark IN (2,3)
Xuddi natijani BETWEEN operatoridan foydalanib olish mumkin:
SELECT id_st, mark FROM mark_st WHERE mark BETWEEN 2 AND 3
Familiyalari A xarfi bilan boshlanuvchi studentlar ro‘yxatini tanlab olish
Bunday xolatda LIKE operatoridan foydalanish qulay xisoblanadi. LIKE operatori faqat simvolli maydonlar uchun qo‘llaniladi va maydon qiymati operatorda ko‘rsatilgan namunaga mosligini tekshirish imkonini yaratadi. Namuna quyidagi maxsus simvollardan tashkil topadi:
(tagiga chizish belgisi) – bitta ixtiyoriy simvolni bildiradi;
% (foiz belgisi) – ixtiyoriy miqdordagi simvollar ketma – ketligini bildiradi.
SELECT id_st, surname FROM student WHERE surname LIKE 'A%'
Ko‘pincha ustunlardagi minimal, maksimal yoki o‘rtacha qiymatlarni xisoblashga to‘g‘ri keladi. Masalan, keltiligan jadvallarda o‘rtacha baxoni xisoblash mumkin. Bunday xisoblashni bajarish uchun SQL tilida maxsus agregat funksiyalari mavjud:
MIN() – ustundagi minimal qiymat;
MAX() – ustundagi maksimalqiymat;
SUM() – ustundagi qiymatlar summasi;
AVG() – ustundagi qiymatlarni o‘rtachasi;
COUNT() – ustundagi NULL dan farqli qiymatlar miqdori.
Quyidagi so‘rov studentlar olgan baxolarning o‘rtachasini xisoblaydi.
SELECT AVG(mark) FROM mark_st
Albatta, agregat funksiyalarini WHERE so‘zi bilan birgalikda qo‘llash mumkin. Quyidagi so‘rov 100 kodli studentning ekzamenlarda olgan baxolarining o‘rtachasini xisoblaydi:
SELECT AVG(mark) FROM mark_st WHERE id_st = 100
Navbatdagi so‘rov 10 kodli studentning o‘rtacha baxosini xisoblaydi:
SELECT AVG(mark) FROM mark_st WHERE id_ex = 10
SQL tili ko‘rib o‘tilgan mexanizmiga qo‘shimcha ravishda agregat funksiyalarni to‘la jadval uchun emas, balki gruppalangan qiymatlar uchun qo‘llash imkonini beruvchi vosita mavjud. Buning uchun SQL da maxsus GROUP BY konstruksiyasi mavjud bo‘lib unda ko‘rsatilgan ustun qiymatlari bo‘yicha gruppalash amalga oshiriladi. Masalan, har bir studentni ekzamenlarda olgan baxolarining o‘rtachasini aniqlash mumkin. Buning uchun quyidagi so‘rov beriladi:
SELECT id_st, AVG(mark) FROM mark_st GROUP BY id_st
Bu imkoniyat ham odatdagidek WHERE so‘zi bilan birgalikda qo‘llanilishi mumkin. Bu so‘rovni bajarishda MBBT avval jadvaldan WHERE ifodasidagi shartni qanoatlantiruvchi satrlarni tanlab oladi, keyin tanlangan satrlarni gruppalashva agregatlash amalini bajaradi.
Quyidagi so‘rov har bir studentning 100 kodli ekzamendan olgan baxolarining o‘rtachasini aniqlaydi.
SELECT id_st, AVG(mark) FROM mark_st WHERE id_ex = 100 GROUP BY id_st
Ko‘rib turganimizdek gruppalash bittadan ko‘p maydon bo‘yicha bajarilishi mumkin. GROUP BY seksiyasiga ega bo‘lgan so‘rovlar uchun quyidagi muxim cheklanish mavjud: bunday so‘rovlar natijasi tarkibiga gruppalash bajarilgan ustunlar va agregatlash natijasiga ega bo‘lgan ustunlar kiradi. Biror xulosaga kelishdan oldin SQL tilining barcha imkoniyatlarini ko‘rib chiqish kerak. Masalan, ixtiyoriy tekstni so‘rov tarkibiga kiritish mumkin. Bunga misol keltiramiz:
SELECT 'O‘rtacha ball =’, AVG(mark) FROM mark_st WHERE id_ex = 10
Ushbu so‘rov natijasida foydalanuvchi faqat oddiy sonlarni emas, balki tekstni ham ko‘radi.
Bir necha jadvallardan ma‘lumotlarni tanlash uchun SQL ni qo‘llash
Sh paytgacha faqat bitta jadvaldan ma‘lumotlarni tanlash miollari keltirildi. Relyatsion amallarga mos bo‘lgan bir nechcha jadvallardan ma‘lumotlar tanlab olishni ham bajarish mumkin. Bir nechta jadvallardan ma‘lumotlarni tanlab olishga to‘liq misollar keltirish imkoni yo‘q. Bunga doir ba’zi misollarni ko‘rib o‘tamiz.
Qoidaga ko‘ra, ma‘lumotlar tanlab olinadigan jadvallar u yoki bu shaklda bir biri bilan bog‘langan. Masalan, birga ko‘p va x.k.
1 rasmdagi ER-diagrammaga qarang. Bu miolda bog‘langan jadvallar mavjud. student, mark_st va exam_st jadvallarini ko‘rib chiqamiz.
mark_st jadvali id_ex maydoni bo‘yicha exam_st jadvali bilan bog‘langan.
mark_st jadvali id_st maydoni bo‘yicha student jadvali bilan bog‘langan.
Masalan, studentlarni ro‘yxatini ular ekzamenlardan olgan baxolari bilan birgalikda
tanlash zarur bo‘lsin. Buning uchun quyidagi so‘rov beriladi:
SELECT student.surname, mark_st.id_ex, mark_st.mark
FROM student, mark_st
WHERE student.id_st = mark_st.id_st
Keltirilgan ko‘p jadvalli so‘rov bir jadvalli so‘rovdan quyidagilar bilan farq qiladi.
1. FROM seksiyasida ikkita jadvl ko‘rsatilgan.
2. jadvallr soni bitta ko‘p, shuning uchun ko‘rsatilgan maydonlar nomining bir
qiymatliligi yo‘qoladi. Masalan, ko‘p xollarda maydonni FROM da ko‘rsatilgan jadvallar
ro‘yxatidagi qaysi jadvaldan olish noma’lum bo‘lib qoladi. Maydon nomlarining ko‘p qiymatliligini bataraf etish uchun maydon nomida perefiks - jadval nomi qo‘shimcha qilinadi. Jadval nomi maydon nomidan nuqta bilan ajratiladi.
3. WHERE ifodasida jadvallarni birlashtirish sharti ko‘rsatiladi.
Ko‘rinib turganidek jadval nomidan iborat prefiksdan foydalanish so‘rovni murakkablashtiradi. Bunday murakkablikni bartaraf etish uchun psevdonim ishlatiladi. Yuqoridagi so‘rovni quyidagicha yozish mumkin:
SELECT E.surname, M.id_ex, M.mark FROM student E, mark_st M WHERE E.id_st = M. id_st
INSERT ma‘lumotlarni kiritish operatori:
INSERT INTO jadval_nomi [() ] VALUES ()
Bunday sintaksis jadvalga faqat bitta star kiritish imkonini beradi. Agar satrdagi barcha ustunlarga qiymat kiritilayotgan bo‘lsa, so‘rovda barcha ustunlar nomini ko‘rsatish zarur emas.
Masalan, BOOKS jadvaliga yangi kitob ma‘lumotlari kiritiladi
INSERT INTO BOOKS ( ISBN, TITL, AUTOR, COAUTOR, YEARIZD, PAGES)
VALUES ("5-88782-290-2","Apparatn?e sredstva IBM PC.Ensiklopediya",
"Guk M. ", "",2000, 816)
Bu kitob avtori faqat bitta va soavtor (hammuallif) mavjud emas, biroq ustunlar ro‘yxatida COAUTOR ustuni ham ko‘rsatilgan. Shuning uchun VALUES bo‘limida bu ustunga mos qiymatni ko‘rsatish zarur. Misolda bu maydon uchun bo‘sh satr ("") ko‘rsatilgan. Bu soavtor yo‘qligini bildiradi. Shuningdek bu yerda aniqlangmagan NULL qiymatini ko‘rsatish ham mukin edi.
Satrdagi barcha ustunlarga qiymat kiritishda ustunlar ro‘yxatini ko‘rsatish zarur emas. Bunda faqat qiymatlar ro‘yxatini ko‘rsatish yetarli bo‘ladi. Bunday xolda operator ko‘rinish quyidagicha shaklda bo‘ladi:
INSERT INTO BOOKS VALUES ("5-88782-290-2",
"Apparatn?e sredstva IBM PC. Ensiklopediya"."Guk M.","".2000.816)
Misolda keltirilgan ikkiala operator ham bir xil amalni bajaradi.
Shuningdek to‘liq miqdorda bo‘lmagan qiymatlarni ko‘rsatish mumkin. Ya’ni iymatlar qatorida soavtorni ko‘rsatmaslik mumkin, chunki jeoriy kitobda soavtor yo‘q. Biroq bunda qiymat kiritiladigan ustun nomlarini quyidagicha shaklda ko‘rsatish kerak bo‘ladi:
INSERT INTO BOOKS ( ISBN, TITL, AUTOR, YEARIZD,PAGES)
VALUES ("5-88782-290-2"."Apparatn?e sredstva IBM PC.
Ensiklopediya". Guk M.".2000,816) Bu xolda COAUTOR ustuniga NULL qiymati yoziladi.
Agar jadvalni yaratishda ustun yoki atributga majburiy qiymat (NOT NULL) belgisi qo‘yilgan bo‘lsa, u xolda INSERT operatorida joriy ustunning har bir satriga kiritiladigan qiymatg ko‘rsatilishi kerak. Shuning uchun, agar jadvalning hamma ustuni majburiy qiymat li bo‘lsa, u xolda har bir yangi kiitladigan satrda barcha ustun uchun qiymat mavjud bo‘lishi kerak va bunda ustunlar ro‘yxatini ko‘rsatish shar emas. Aks xolda jadvalda kamida bitta maburiy qiymatli bo‘lmagan ustun bo‘lsa, u xolda albatta ustunlar ro‘yxatini ko‘rsatish shart bo‘ladi.
Qiymatlar ro‘yxatida maxsus funksiyalar va ifodalar ko‘rsatilish ham mumkin. Bunda ushbu funksiyalarning qiymatlari ma‘lumotlarni kiritish momentida xisoblangan bo‘lishi zarur.
Ma‘lumotlarni kiritish operatori birdaniga bir necha satrlarni kiritish imkoniga ham ega. Bunda qiymatlar satri boshqa bir jadvaldan tanlab olinadi. Masalan studentlar xaqidagi jadval mavjud bo‘lsin. Unda studentlarning familiyasi, adresi, uy telefoni va tug‘ilgan sanasi ko‘rsatilgan bo‘lsin. U xolda bitta operator yordamida ularni bibliotekaning kitobxonlariga aylantirish mumkin:
INSERT INTO READER (FIO_studenta, Adres, Telefon, Data_rojd) SELECT (FIO_studenta, Adres, Telefon, Den_rojd) FROM STUDENT
DELETE o‘chirish operatori:
Ma‘lumotlarni o‘chirish operatori jadvaldan shartni qanoatlantiruvchi bir yoki bir neta satrlarni o‘chirishi mumkin.
DELETE FROM jadval _nomi [WHERE tanlash_sharti]
Agar satrlarni tanlash sharti ko‘rsatilmasa, u xolda jadvaldagi barcha satrlar o‘chiriladi.
Natijada ma‘lumotlarga ega bo‘lmagan bo‘sh bo‘lgan jadval xosil bo‘ladi.
Agar jadvaldan oldingi sessiya natijalarini o‘chirish kerak bo‘lsa, u xolda R1 jadvalidagi barcha satrlar o‘chiriladi:
DELETE FROM R1
WHERE qismidagi shart ifodasi xuddi SELECT operatoridagi filtrlash shartiga o‘xshash bo‘ladi. Bu shart jadvaldan qaysi satrlar o‘chirilishi kerakligini aniqlaydi.
Masalan, student Mironova A.V. o‘chirilmaslii kerak bo‘lsa, quyidagi so‘rov beriladi:
DELETE FROM R2 WHERE FIO = "Mironov A.V."
WHERE qismida biror so‘rov ko‘rsatilishi mumkin. Masalan, agar jadvaldan o‘zlashtirmagan studentlarni o‘chirish kerak bo‘lsin. Oliy ta’lim qonuniga ko‘ra oxirgi sessiyada ikkita va undan ortiq fandan ikki baxo olgan student o‘zlashtirmagan xisoblanadi. U xolda tanlab olish sharti ikkita va undan ko‘p ikki baxo olgan studentlarni va ikkita undan ko‘p ekzamenlarni topshirmagan studentlarni aniqlashi kerak. Bunday studentlarni aniqlash uchun R1 jadvalidan 2 baxoli va baxo ko‘rsatilmagan satrlar tanlab olinishi, keyin olingan natija FIO ustuni bo‘yicha gruppalanishi kerak. Keyin har bir gruppadagi satrlar soni aniqlanadi (bu har bir studentning olgan ikki baxolari bilan topshirmagan ekzamenlar sonini bildiradi) va ikkitadan ko‘p satrga ega ustunlar tanlab olinadi. Endi ushbu murakkab bo‘lgan konstruksiyani SQL tilida yozamiz va sodda ko‘rinishga ega bo‘lishini ko‘ramiz.
DELETE FROM R2 WHERE R2.FIO IN (SELECT R1.FIO FROM R1WHERE Otsenka = 2 OR Otsenka IS NULL GROOP BY R1.FIO HAVING COUNT(*)>= 2
DELETE operatsiyasini bajarishda unda qatnashgan qism so‘rovda satrlar o‘chiriladigan jadval ko‘rsatilmasligi kerak.
Ma‘lumotlarni manipulyatsiyalash operatsiyalarining barchasi ma‘lumotlar bazasining butunligi tushunchasi bilan bog‘langan. Manipulyatsiyalash amallari sintaktik jixatdan to‘g‘ri bo‘lsada butunlik talablari tufayli bajarilmasligi mmkin.
UPDATE ma‘lumotlarni yangilash operatsiyasi o‘zgarish yuz berganda va mos xolda bu o‘zgarishni ma‘lumotlar bazasida akslantirish
uchun ishlatiladi.
UPDATE jadval _nomi SET ustun_nomi = yangi_qiymat [WHERE tanlash_sharti]
Bu yerda ham WHERE qismi DELETE operatoridagi kabi ko‘rsatilishi shart emas. U DELETE operatoridagi kabi bir xil vazifani bajaradi va o‘zgartirish amali bajariladigan satlarni tanlash imkonini beradi. Agar tanlash sharti (WHERE qismi) ko‘rsatilmagan bo‘lsa, u xolda o‘zgartirish amali jadvlning barcha satrlari uchun bajariladi.
Masalan, student Stepanova K. Ye. ma‘lumotlar bazasi fanidan "2" baho oldi, keyin uni "3" bahoga qayta topshirgan bo‘lsin. Bu xolatga mos xolda R1 jadvalini o‘zgartirish amali quyidagi operator bilan amalga oshiriladi:
UPDATE R1
SET R1.Otsenka = 3
WHERE R1.FIO = "Stepanova K.Ye." AND R1.Dissiplina = "Baz? dann?x"
Qanday xolatlarda bir nechta satrlarni o‘zgartirish zarurati paydo bo‘ladi? Bu kam uchaydigan masala emas. Masalan, agar guruxlar jadvalidagi guruxlarni kursini bittaga oshirish zarr bo‘lsa quyidagi o‘zgartirish amali bajarishi mumkin. Guruxlar jadvali quyidagicha sxemaga ega bo‘lsin:
R4 = < Gurux, Kurs>UPDATE R4 SET R4.Kypc = R4.Kypc + 1
Ma‘lumotlarni turi. Ma‘lumotlar bazasini yaratish
MYSQL tilida jadvaldagi maydonlarni quyidagi tiplari mavjud [2]:
Ma‘lumotlarni aniqlash
SQL ning DDL (Data Definition Language) ma‘lumotlarni aniqlash tili ma‘lumotlar bazasining sxema, domenlar, jadvallar, tasvirlar va indekslar kabi ob’ektlarini yaratish va o‘chirish uchun ishlatiladi.
Quyida SQL da ma‘lumotlarni aniqlash tilining asosiy operatorlari nomi keltirilgan.
CREATE SCHEMA DROP SCHEMA CREATE DOMAIN ALTER DOMAIN DROP DOMAIN CREATE TABLE ALTER TABLE DROP TABLE CREATE VIEW DROP VIEW
Bu operatorlar konseptual sxemaning tarkibiga kiruvchi strukturalarni yaratish, taxrirlash
va o‘chirish uchun ishlatiladi. Ba’zi MBBT larda quyidagi 2 ta operator xam mavjud:
CREATE INDEX DROP INDEX
Jadvallarni yaratish
Jadvallar CREATE TABLE komandasi bilan yaratiladi. Bu komanda qatorlarsiz bo‘sh jadval yaratadi. CREATE TABLE komandasi jadval nomini va jadvalning o‘zini ko‘rsatilgan tartibdagi ustunlar ketma – ketligi ko‘rinishida aniqlaydi. Unda har bir ustundagi ma‘lumotlarning tiplari va ustunlar o‘lchovi ko‘rsatiladi. Har bir jadval juda bo‘lmaganda bitta ustunga ega bo‘lishi kerak.
CREATE TABLE komandasi sintaksisi:
CREATE TABLE( [()],[()], ... );
Argument qiymati kattaligi ma‘lumot turiga bog‘liqdir. Agar siz maxsus ko‘rsatmasangiz, tizim avtomatik qiymatni o‘rnatadi.
Misol uchun sotuvchilar jadvalini yaratishni ko‘rib chiqamiz:
CREATE TABLE Salepeople( SNum integer,SName char (10),City char (10),Comm decimal );
Jadvallarni o‘chirish
Jadvalni o‘chirish imkoniga ega bo‘lish uchun, jadval egasi (Ya’ni yaratuvchisi) bo‘lishingiz kerak. Faqat bo‘sh jadvalni o‘chirish mumkin. Qatorlarga ega bo‘lgan, to‘ldirilgan jadvalni o‘chirish mumkin emas, Ya’ni jadval o‘chirishdan oldin tozalangan bo‘lishi kerak. Jadvalni o‘chirish komandasi quyidagi ko‘rinishga ega:
DROP TABLE < table name >;
Masalan: DROP TABLE Salepeople;
Jadvalni o‘zgartirish
Jadvalni o‘zgartirish uchun ALTER TABLE komandasidan foydalaniladi. Bu komanda jadvalga Yangi ustunlar qo‘shish, ustunlarni o‘chirish, ustunlar kattaligini o‘zgartirish,hamda cheklanishlarni qo‘shish va olib tashlash imkoniyatlariga ega. Bu komanda ANSI standarti qismi emas, shuning uchun har xil tizimlarda har xil imkoniyatlarga ega.
Jadvalga ustun qo‘shish uchun komandaning tipik sintaksisi:
ALTER TABLE ADD;




Masalan: ALTER TABLE Salepeople ADD Phone CHAR(7);
Jadvallar uchun cheklanishlar
Cheklanishlarni aniqlash.
Ko‘p xollarda ustunga kiritilgan qiymatlar bir biridan farq qilishi kerak. Agar ustun uchun UNIQUE cheklanishi o‘rnatilsa, bu ustungsha mavjud qiymatni kiritishga urinish rad etilapdi. Bu cheklanish bo‘sh bo‘lmaydigan (NOT NULL) debe’lon qilingan maydonlarga qo‘llanishi mumkin.
Masalan:
CREATE TABLE Salepeople( SNum integer NOT NULL UNIQUE,SName char (10),City char (10),Comm decimal);
Unikalligi talab qilinadigan maydonlar(birlamchi kalitlardan tashqari) kandidat kalitlar yoki unikal kalitlar deyiladi.
Jadval cheklanishi UNIQUE maydonlar guruxiga o‘rnatilishi mumkin. Bu bir necha maydonlar qiymatlari kombinatsiyasi unikalligini ta’minlaydi. Bizning ma‘lumotlart bazamizda har bir buyurtmachi bitta sotuvchiga biriktirilgan. Ya’ni Buyurtmachilar jadvalida buyurtmachi nomeri (cnum) va sotuvchi nomeri (snum) kombinatsiyasi unikal bo‘lishi kerak. Bu cheklanishni UNIQUE (cnum, snum) yordamida, Customers jadvalini yaratishda kiritish mumkin. Bu ustunlar uchun NOT NULL cheklanishini kiritish zarurdir.
Birlamchi kalitlar cheklanishlari.
SQL birlamchi kalitlarni to‘g‘ridan to‘g‘ri birlamchi kalit (PRIMARY KEY) cheklanishi orqali ta’riflaydi. PRIMARY KEY jadvalni yoki ustunlarni cheklashi mumkin. Bu cheklanish UNIQUE cheklanishi kabi ishlaydi, jadval uchun faqat bitta birlamchi kalit (ixtiyoriy sondagi ustunlar uchun ) aniqlanishi mumkin bo‘lgan xoldan tashqari. Birlamchi kalitlar NULL qiymatga ega bo‘lishi mumkin emas.
Misol:
CREATE TABLE Salepeople( SNum integer NOT NULL PRIMARY KEY,SName char (10),City char (10),Comm decimal);
Maydon qiymatlarini tekshirish (CHECK cheklanishi). CHECK cheklanishi jadvalga kiritilayotgan ma‘lumot qabul qilinishidan oldin mos kelishi lozim bo‘lgan shart kiritishga imkon beradi. CHECK cheklanishi CHECK kalit so‘zi ko‘rsatilgan maydondan foydalanuvchi predikat ifodalaridan iboratdir.
Misol: Salepeople jadvali Comm ustuniga kiritilayotgan qiymat 1 dan kichik bo‘lish sharti.
CREATE TABLE Salepeople( SNum integer NOT NULL PRIMARY KEY,SName char(10) NOT NULL UNIQUE,City char(10)Comm decimal CHECK ( Comm < 1 ));
Ko‘zda tutilgan qiymatlarni (poumolchaniyu) o‘rnatish
Biror bir maydon uchun qiymat ko‘rsatmagan xolda jadvalga satr qo‘shsangiz, SQL bunday maydonga kiritish uchun ko‘zda tutilgan qiymatga ega bo‘lishi kerak, aks xolda komanda rad etiladi. Eng umumiy ko‘zda tutilgan qiymat NULL qiymatdir. CREATE TABLE komandasida ko‘zda tutilgan qiymat DEFAULT operatori orqali, ustun cheklanishi sifatida ko‘rsatiladi. Masalan:
CREATE TABLE Salepeople( SNum integer NOT NULL PRIMARY KEY,SName char(10) NOT NULL UNIQUE,City char(10) DEFAULT 'New York',Comm decimal CHECK ( Comm < 1 ));
Ma‘lumotlar yaxlitligini ta’minlash
Jadval bir maydonidagi hamma qiymatlar boshqa jadval maydonida aks etsa, birinchi maydon ikkinchisiga ilova qiladi deyiladi. Bu ikki maydon orasidagi bog‘liqlikni ko‘rsatadi. Masalan, buyurtmachilar jadvalida har bir buyurtmachi, sotuvchilar jadvalida o‘ziga biriktirilgan sotuvchiga ilova qiluvchi SNum maydoniga ega. Bir maydon ikkinchisiga ilova qilsa tashqi kalit, u ilova qilayotgan maydon ajdod kalit deyiladi. Buyurtmachilar jadvalidagi SNum maydoni tashqi kalit, sotuvchilar jadvalidagi SNum - ajdod kalitdir.
Tashqi kalit bitta maydondan iborat bo‘lishi shart emas. Birlamchi kalit kabi, tashqi kalit bitta modul sifatida qayta ishlanuvchi bir necha maydonlarga ega bo‘lishi musmkin. Maydon tashqi kalit bo‘lsa ilova qitlayotgan jadval bilan ma’lum usulda bog‘liqdir. Tashqi kalit har bir qiymati (satri), ajdod kalitning bitta va faqat bitta qiymatiga( satriga) ilova qilishi kerak. Bu xolda tizim ilovali yaxlit xolatda deyiladi
Shu bilan birga ajdod kalit qiymati tashqi kalit bir necha qiymatlariga ilova qilishi mumkin.
Cheklanish FOREIGN KEY.
SQL ilovali yaxlitlikni FOREIGN KEY yordamida ta’minlaydi. Tashqi kalit vazifasi ajdod kalitda ko‘rsatilmagan qiymatlarni tashqi kalit maydonlariga kiritmaslikdir. FOREIGN KEY cheklanishi sintaksisi:
FOREIGN KEY REFERENCES
[]
Birinchi ro‘yxat komanda tomonidan o‘zgartiriluvchi ustunlar ro‘yxatidir. Pktable - bu ajdod kalitli jadval. Ikkinchi ustunlar ro‘yxati bu ajdod kalitni tashkil qiluvchi ustunlardir.
Misol uchun Sotuvchilar jadvaliga ilova qiluvchi tashqi kalit sifatida e’lon qilingan SNum maydoniga ega bo‘lgan Buyurtmachilar jadvalini yaratamiz:
CREATE TABLE Customers ( CNum integer NOT NULL PRIMARY KEY,CName char(10),City char(10),SNum integer,FOREIGN KEY (SNum) REFERENCES Salepeople (SNum) );
SQL(Structured Query Language) – Bu so'rov tili ko'p operatorlardan tashkil topgan bo'lib, bu operatorlar orqali foydalanuvchilar va dasturlar Oracle(MBBT) dagi ma'lumotlar bazasiga murojaatni amalga oshirishi mumkin. Oracle utililari yoki har xil dasturlar SQL operatorlarisiz bazaga murojaatni amalga oshirishi mumkin, lekin so'rovlarni amalga oshirishda bu so'rov tilidan foydalanmaslikning iloji yo'q.
1970 yil iyun oyida E. F. KODD o'zining E.F. Codd, "A Relational Model of Data for Large Shared Data Banks" maqolasini ommaga taqdim etdi.
Bu maqola "Communications of the ACM" jurnalida chop etildi. Hozirgi kunda Koddning bu modeli "relyastion ma'lumotlar bazasini boshqarish tizimi(RMBBT)" ning yakuniy modeli deb qabul qilindi. Kodd ning modelni yo'lga qo'yish maqsadida IBM firmasi SEQUEL(Structured English Query Language) tilini ishlab chiqdi. Keyinchalik bu til SQL tiliga o'zgartirildi, lekin haligacha "sikvel" deb ham yuritilmoqda. 1979 yil Relational Software(hozirgi vaqtdagi Oracle) korporatsiyasi SQL ning birinchi tijoriy ishlanmasini ommaga taqdim etdi. Hozirgi kunda SQL tili RMBBTning standart tili hisoblanadi.
SQL tili so'rov-natija ko'rinishida ishlaydi. So'rovlar har bir element uchun emas, butun bir guruh uchun beriladi va natija olinadi. SQL uchun ma'lumotlar bazasidagi ma'lumotlar qay shaklda, qay tartibda joylashganini umuman ahamiyati yo'q, foydalanuvchilar ham bu ma'lumotlarni bilishi shart emas. Faqatgina operatorlarni to'g'ri yozish orqali istalgan ma'lumotlarni chiqarish mumkin bo'ladi.
SQL tili barcha ma'lumotlar bazasini boshqarish tizimlari uchun umumiy standart til hisoblanadi. Bundan kelib chiqadiki, agar siz bu tilni bir marotaba o'rganib olsangiz, istalgan MBBT lari bilan ishlay olasiz. Bitta MBBT da yaratilgan biror sql operatorlar yig'indisi(kichik so'rov dasturi)ni, istalgan MBBT ga ko'chirish mumkin bo'ladi.
SQL operatorlari orqali quyidagi vazifalarni bajarish mumkin:
Ma'lumotlarni so'rov orqali olish.
Jadvalning qatorlariga ma'lumot qo'shish, qatorlarini o'chirish va yangilash.
Ob'ektlarni yaratish, o'zgartirish va o'chirish.
Ma'lumotlar bazasi va ob'ektlarga ruxsatlarni o'rnatish.
Ma'lumotlar bazasi foydalanuvchilarini hosil qilish va baza xafsizligini ta'minlash.
2 hil turdagi SQL mavjud: interaktiv va o'rnatilgan(встроенный). SQL ning bu 2 turi ishlashi bir hil, lekin har xil joyda ishlatiladi.
Interaktiv SQL deganda — ma'lumotlar bazasiga so'rov orqali murojaat qilib, shu zahoti natijani olish tushuniladi. Ya'ni bunda ketma-ketlik asosida jarayon sodir bo'ladi. So'rov-natija rejimda ishlaydi.
O'rnatilgan SQL deganda – so'rovlar yig'indisi biror dasturlash tilida ishlatilishi tushuniladi. Pascal, Delphi, Java tillarida bazaga murojaat qilib, natijani biror o'zgaruvchiga yuklab qo'yamiz va kerakli joyda bu natijani ishlatamiz. Ya'ni bunda so'rov berib, darhol natijani ololmaymiz. Natija faqat dasturning davom etishi uchun olinadi va talab etilgan joyda ishlatiladi.
SQl operatorlari bir necha guruhlarga bo'lingan. Bu bo'linish operatorlarning bajarilish vazifasi asosida bo'lingan. Ular quyidagilar:
DDL(Data Definition Language) , ANSI bu guruh SDL(Schema Definition Language) deb ataladi. Bu guruhga ma'lumotlar bazasida ob'ektlar(jadvallar, indekslar)ni hosil qiluvchi operatorlar kiradi.
DML(Data Manipulation Language) – ma'lumotlarni manipulyatsiya qiluvchi operatorlar yig'indisi guruhi. Istalgan vaqtda jadval ichida qanday ma'lumotlar saqlanayotganini aniqlovchi operatorlar.
DCL(Data Control Language) – ma'lumotlarni boshqaruvchi operatorlar.
ANSI ning ruxsati bilan, DCL DDL ning bir qismi sifatida qaraladi. Bu guruhlarni aralashtirmaslik zarur. Bular alohida tillar emas, balki SQL operatorlarining guruhlaridir.
Download 154,15 Kb.
1   2   3




Download 154,15 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Bir necha jadvallar bilan ishlash

Download 154,15 Kb.