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.
Sozdayte zapros s imenem «Sam?y prostoy zapros», kotor?y v?chislyaet znachenie v?rajeniya «2+2» i v?daet teku?ee vremya, ne ispolzuya pri etom tablis? ili drugie zapros? baz? dann?x.
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 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:
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 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]:
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) );
|