Prostoy xleb



Yüklə 2,88 Mb.
səhifə28/66
tarix29.11.2023
ölçüsü2,88 Mb.
#140628
1   ...   24   25   26   27   28   29   30   31   ...   66
Qo\'llanma 11.10.2023

id_st

Surname




id_ex

Subject

Date

1

Xasanov

1

Matem

10.05.2009

2

Karimov

2

Fizika

15.05.2009

3

Jabborov

3

Informatika

25.05.2009

mark_st

id_ex

id_st

mark

2

2

3

3

1

2

1

1

4

3

2

5

2

1

3

1

2

2

2

3

4

1

3

5

3

3

3



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, u holda ro‘yxat familiya bo‘yicha tartiblanadi. Jimlikka ko‘ra tartiblash o‘sish bo‘yicha bajariladi. Agar kamayish bo‘yicha tartiblash kerak bo‘lsa, u holda 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 olish.


WHERE 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:
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‘chirilmasligi 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 R1


WHERE 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]:

Yüklə 2,88 Mb.

Dostları ilə paylaş:
1   ...   24   25   26   27   28   29   30   31   ...   66




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə