SQL (Structured Query Language) strukturalashgan sorov tili ma’nosini bildirib, u relyatsion malumotlar bazasi bilan ishlash imkonini yaratib beradigan tildir.
Ma’lumki, relyatsion modelning tarixi (va bilvosita SQL tarixi ham) 1970 yil Ye,F.Koddni (bu paytda u IBM korporatsiyasining San Xosedagi tadqiqot markazida ishlagan) maqolasi chiqqan davrdan boshlanadi. 1974 yil shu laboratoriyada ishlovchi D. Chemberlen "Structured English Query Language" yoki SEQUEL deb nomlangan tilni e’lon qiladi. 1976 yil bu tilning qayta ishlangan SEQUEL/2 versiyasi yaratildi va u rasmiy ravishda SQL deb atalgan. Xozirgi kunda SQL qisqartmasini ba’zilar "sikvel" deb talffuz etadi. Biroq rasmiy ravishda u "es-kyu-el" deb oqilishi kerak.
SQL tili relyatsion algebra paydo bolgandan keyin paydo boldi va uning birinchi prototipi IBM Research kompaniyasi tomonidan 70 yillar oxirida yaratilgan. Bu til birinchi IBM System R nomli MBBT tarkibiga kiritilgan. Keyinchalik bu til kopgina tijorat MBBT tarkibida qollanilgan va keng tarqalganligi sababli vaqt otishi bilan relyatsion MBBT larda malumotlar ustida amallar bajaruvchi tillarning norasmiy standarti bolib qoldi. SQL tilining birinchi ramiy standarti 1989 yil qabul qilingan. Kopgina MBBT lar ushbu standartni qollab – quvvatlaydi. Biroq malumotlar bazasi bilan bogliq axborot texnologiyalarining rivojlanishi va ba’zi talablarning paydo bolishi birinchi SQL standartini qayta ishlash va kengaytirishni taqoza etdi.
1992 yil oxirida SQL tilining yangi xalqaro standarti (SQL/92 yoki SQL2) qabul qilindi unda ham ba’zi kamchiliklar aniqlangan, biroq shunga qaramasdan SQL/89 ga nisbatan aniq va toliqroq xisoblanadi. Xozirgi paytda kopgina MBBT ishlab chiqaruvchilar oz maxsulotlarini SQL2 standartini qanoatlantiradigan qilib ozgartirdilar.
1999 yil SQL3 deb atalgan yangi standart paydo boldi. Agar SQL1 va SQL2 standartlari biri –biridan miqdor jixati bilan farq qilgan bolsa, SQL3 standarti sifat jixatlari bilan farqlanadi. SQL3 ga murakkab strukturaga ega malumotlar tipini ishlatish imkonini beradigan yangi malumotlar tipi kiritilgan. Bu tipni ob’ektga moljallanganlik darajasi yuqori xisoblanadi. SQL tilini tula qonli an’anaviy dasturlash tillari tarkibiga kiritib bolmaydi. Chunki unda dastur bajarilishini boshqaruvchi va boshqa kopgina an’anaviy operattorlar yoq. Unda faqat malumotlar bazasida saqlanayotgan malumotilarga murojaat qiluvchi operatorlar mavjud.
SQL tili foydalanuvchi relyatsion malumotlar bazasi bilan muloqat qilishi uchun moljallangan bolib, quyidagi 3 ta qismdan iborat:
• DDL (Data Definition Language) – malumotlarni aniqlash tili. Malumotlar bazasini (jadvallarini, indekslarini va x.k.) yaratish va uning sxemasini taxrirlash uchun moljallangan..
• DCL (Data Control Language) – malumotlarni boshqarish tili. Foydalanuvchilarning malumotlar bazasi ob’ektlariga murojatini chegaralash operatorlaridan iborat.
• DML (Data Manipulation Language) – malumotlarni qayta ishlash tili. Malumotlar bazasi jadvallariga ozgartirishlar kiritish uchun moljallangan.
Malumotlar bazasi bilan ishlovchi ixtiyoriy til foydalanuvchiga quyidagi imkoniyatlarni yaratishi lozim:
• strukturasini tola tavsiflagan xolda malumotlar bazasini va jadvallarini yaratish;
• malumotlar ustida manipulyatsiya amallarini bajarish, masalan, jadvallardan malumotlarni kiritish, taxrirlash, va ochirish;
• oddiy va murakkab sorovlarni bajarish.
Bundan tashqari, malumotlar bazasi bilan ishlovchi til yuqoridagi amallarni bajarish uchun foydalanuvchilardan kam urinishlarini talab qilishi, hamda komandalarining sintaksisi va tuzilishi ozganish uchun ososn va tushunarli bolishi kerak. Nixoyat bu til universal bolishi kerak. Bu bir MBBT dan boshqasiga otganda komandalarni bir xil strukturasi va sintaksisidan foydalanishni ta’xminlaydi. SQL tili bu talablarni barchasini qanoatlantiradi.
SQL tilida malumotlarning quyidagi asosiy turlari ishlatilib, ularning formatlari har xil MBBT lar uchun farq qilishi mumkin:
Jadvallarni yaratish. Jadvallar CREATE TABLE buyrugi bilan yaratiladi. Bu buyruq qatorlarsiz bosh jadval yaratadi. U jadval nomini, ma’lum tartibda korsatilgan ustunlar nomlari ketma – ketligi, malumotlar turlari va ustunlar olchovini aniqlaydi.
CREATE TABLE buyrugining umumiy yozilishi:
CREATE TABLE
(
Sotuvchilar (Salepeople):
SNum – xar bir sotuvchi unikal nomeri,
SName – sotuvchi nomi,
City – sotuvchi adresi ( shaxri ),
Comm – sotuvchilarning onli shakldagi komission foydasi.
Buyurtmachilar (Customers):
CNum – xar bir buyurtmachi unikal nomeri;
CName – buyurtmachi nomi;
City – buyurtmachi adresi (shaxri );
Rating – buyurtmachining boshqalardan ustunlik darajasini korsatuvchi kod;
SNum – shu buyurtmachiga tayinlangan sotuvchi nomeri.
Misol uchun sotuvchilar jadvalini yaratish:
CREATE TABLE Salepeople
( SNum integer, SName char(10), City char(10), Comm decimal );
Cheklovlarni kiritish. Jadvalni yaratayotganda (yoki uni ozgartirayotganda), maydonlarga kiritilayotgan qiymatlarga cheklovlar ornatish mumkin. Bu holda SQL cheklovlarga togri kelmaydigan hamma qiymatlarni rad etadi.
Maydonga bosh (NULL) qiymatlar kiritilishi oldini olish uchun CREATE TABLE buyrugida NOT NULL cheklovi ishlatiladi. Masalan, birlamchi kalitlar xech qachon bosh bolmasliklari kerak, shuning uchun Salepeople jadvalini quyidagicha yaratish mumkin:
CREATE TABLE Salepeople
( Snum integer NOT NULL,
Sname char(10), city char(10), comm decimal);
Kop hollarda ustunga kiritilgan qiymatlar bir biridan farq qilishi kerak boladi. Agar ustunga UNIQUE cheklovi ornatilsa, unda ustunga qiymat kiritishga urinish rad etiladi. Bu cheklov bosh bolmaydigan (NOT NULL) deb e’lon qilingan maydonlarga qollaniladi. Masalan:
CREATE TABLE Salepeople
( SNum integer NOT NULL UNIQUE,
Sname char(10), city char(10), comm decimal);
Jadval cheklovi UNIQUE maydonlar guruhiga ham ornatilishi mumkin. Bu bir necha maydonlar qiymatlari kombinatsiyasi unikalligini ta’minlaydi.
CHECK cheklovi jadvalga kiritilayotgan malumot qabul qilinishidan oldin mos kelishi lozim bolgan shart kiritishga imkon beradi. CHECK cheklovi CHECK kalit sozi korsatilgan maydondan foydalanuvchi shartli ifodadan iboratdir. Misol uchun Salepeople jadvali Comm ustuniga kiritilayotgan qiymat 1 dan kichik bolsin.
SELECT operatori MB jadvallaridan natijaviy toplam olish uchun moljallangandir. SELECT operatori yordamida MBga sorov beriladi va u foydalanuvchiga malumotlarning natijaviy toplamini qaytaradi. Bu malumotlar jadval shaklida qaytariladi. Bu jadval keyingi SELECT operatori tomonidan yana qayta ishlanishi ham mumkin.
Yuqorida ta’kidlab otilganidek SQL tili tarkibida xisoblash jarayonini boshqarish imkonini beruvchi IF ... THEN ...ELSE, GO TO, DO ... WHILE kabi buyruqlar mavjud emas. Bunday masalalar dasturiy yol bilan (dasturlash tili yoki masalalarni boshqarish tili) yoki interaktiv xolda (foydalanuvchining sorovlari asosida) amalga oshiriladi. Imkoniyati cheklanganligi sababli (xisoblash jarayonini boshqarish imkoniyati) SQL tili 2 ta usulda qollanilish mumkin. Birinchi usulda interaktiv ishlash nazarda tutiladi. Bunda foydalanuvchi SQL operatorlarini terminaldan beradi. Ikkinchi usulda protsedurali tildagi dasturga SQL tili operatorlari kiritiladi.
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10),
Comm decimal CHECK ( Comm < 1 ));
CHECK cheklovidan maydonga ma’lum qiymatlarini kiritishdan himoya qilib, xatolar oldini olish uchun foydalanish mumkin. Masalan, mahsulotni sotish shaxobchalariga ega bolgan shaharlar faqat London, Barselona, San Xose va Nyu York bolsin.
CREATE TABLE Salepeople
(SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10) CHECK (City IN ('London','New York','San Jose', 'Barselona')), Comm decimal CHECK ( Comm < 1 ));
CHECK jadval cheklovi sifatida kelishi mumkin. Bu shartga bir necha maydon kiritishga imkon beradi. Masalan:
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10),
Comm decimal,
CHECK (Somm < .15 OR City = 'Barcelona'));
Kozda tutilgan qiymatlarni ornatish
Biror bir maydon uchun qiymat korsatmagan holda jadvalga satr qoshilish kerak bolsa, SQL bunday maydonga kiritish uchun kozda tutilgan qiymatga ega bolishi kerak, aks holda buyruq rad etiladi. Eng umumiy kozda tutilgan qiymat NULL qiymatdir. CREATE TABLE buyrugida kozda tutilgan qiymat DEFAULT operatori orqali, ustun cheklovi sifatida korsatiladi. 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 ));
Maydonlar qiymatlarini kiritish, ochirish va ozgartirish
Jadvallarni ochirish. Faqat bosh jadvalni ochirish mumkin. Jadvalni ochirish buyrugi quyidagi korinishga ega:
DROP TABLE
Jadvalni yaratilgandan song ozgartirish. Jadvalni ozgartirish uchun ALTER TABLE buyrugidan foydalaniladi. Bu buyruqda jadvalga yangi ustunlar qoshish, ustunlarni ochirish, ustunlar kattaligini ozgartirish, hamda cheklovlarni qoshish va olib tashlash imkoniyatlariga ega.
Jadvalga ustun qoshish buyrugi:
ALTER TABLE
Masalan:
ALTER TABLE Salepeople ADD Phone CHAR(7);
Qiymatlarni kiritish. Hamma satrlar SQLda INSERT buyrugi yordamida kiritiladi. INSERT quyidagi formatga ega:
INSERT INTO [(column [,column] ...)]
VALUES (
Masalan, sotuvchilar jadvaliga yangi satr kiritish uchun quyidagi buyruqdan foydalanish mumkin:
INSERT INTO Salepeople VALUES (11, 'Peel', 'London', .12);
Ustun nomlarini korsatish ham mumkin, masalan:
INSERT INTO Salepeople (Sname, Comm, SNum)
VALUES ('Peel', .12, 11);
Bu yerda e’tibor berilsa City ustuni tashlab yuborilgan, chunki unga kozda tutilgan qiymat kiritiladi.
Satrlarni ochirish. Satrlarni jadvaldan DELETE buyrugi bilan ochirish mumkin. U alohida qiymatlarni emas faqat satrlarni ochiradi. DELETE quyidagi formatga ega:
DELETE FROM [WHERE search-condition];
Masalan, sotuvchilar jadvalidagi hamma satrlarni ochirish uchun, quyidagi shartni kiritish mumkin: DELETE FROM Salepeople;
Ma’lum satrlarni ochirish uchun shartlardan foydalaniladi. Masalan, jadvaldan Axelrod sotuvchini ochirish uchun uning nomerini shartda berish kerak:
DELETE FROM Salepeople WHERE SNum = 13;
Maydon qiymatlarini ozgartirish. Ozgartirish UPDATE buyrugi yordamida bajariladi. Bu buyruqda UPDATE ifodasidan song jadval nomi va SET ifodasidan song ma’lum ustun uchun ozgartirish korsatiladi. UPDATE ikki formatga ega. Ulardan birinchisi:
UPDATE
SET column = expression [, column = expression] ...
[WHERE search-condition]
bu yerda expression - bu ustun | ifoda | konstanta | ozgaruvchi.
Ikkinchi variant:
UPDATE
SET column = expression, ...
[ FROM table-list ]
[ WHERE search-condition ]
Masalan, hamma buyurtmachilar bahosini 200 ga ozgartirish mumkin:
UPDATE Customers SET Rating = 200;
Ma’lum satrlarni ozgartirish uchun DELETE dagi kabi shartlardan foydalanish kerak. Masalan, Peel (SNum=11) sotuvchining hamma buyurtmachilari uchun bir xil ozgartirish quyidagicha kiritiladi:
UPDATE Customers SET Rating = 200 WHERE SNum = 11;
SET vergul bilan ajratilgan ixtiyoriy sondagi ustunlarga qiymat tayinlashi mumkin. Masalan:
UPDATE Salepeople SET SName ='Gibson', City='Boston', Comm=.10
WHERE SNum = 14;
UPDATE buyrugining SET jumlasida ifodalarni ham ishlatish mumkin. Masalan: UPDATE Salepeople SET Comm = Comm * 2;
Oddiy SELECT sorovlar va mantiqiy operatorlar
SELECT operatori SQL quyidagi korinishga ega:
SELECT [ALL]
FROM jadval
WHERE izlash sharti
GROUP BY ustunlar
HAVING izlash sharti
ORDER BY tartiblash spesifikatori
Masalan, OFFICES jadvalidagi hamma yozuvlarni qaytaruvchi sodda sorov quyidagicha yoziladi. SELECT * FROM OFFICES
Misol: Hamma xizmatchilarning nomlari, ofislari va ishga olish sanalari royxatini hosil qilish.
SELECT NAME, REP_OFFICE, HIRE_DATE FROM SALESREPS
SELECT operatori WHERE sharti berilgan shart asosida kerakli malumotlarni qaytarish uchun xizmat qiladi. Masalan, sotuvlarda haqiqiy hajmi rejadan oshgan ofislarni korsatish kerak.
SELECT CITY, SALES, TARGET FROM OFFICES
WHERE SALES > TARGET
Nomeri 105 ga teng bolgan xizmatchi nomi, haqiqiy va rejadagi sotuvlar hajmini korsatish:
SELECT SALES, NAME, QUOTA FROM SALESREPS
WHERE EMPL_NUM = 105
Agar izlash sharti TRUE bolsa qator natijaviy toplamga qoshiladi, agar izlash sharti FALSE bolsa, qator natijaviy toplamga qoshilmaydi, agar NULL bolsa ham natijaviy toplamdan chiqariladi. Oz ma’nosiga kora WHARE, kerakli yozuvlarni qoldiruvchi filtr sifatida ishlatiladi.
Mantiqiy operatorlar
BETWEEN va IN operatorlari. BETWEEN operatori - bu qiymatlar diapazoniga tegishlilikni tekshirishdir. Misol: Narxi har xil diapazonga mos keluvchi buyurtmalarni topish.
SELECT ORDER_NUM, AMOUNT FROM ORDERS
WHERE AMOUNT BETWEEN 20.000 AND 29.999
NOT ifodasi shartni teskarisiga ogiradi, yani tegishli emas ma’nosini bildiradi. NOT ifodasi yordamida berilgan diapazonga tegishlilikni tekshirish mumkin, masalan: sotuvlar haqiqiy hajmlari rejaning 80 dan 120 protsentgacha bolgan oraliqqa tushmaydigan xizmatchilar royxatini chiqarish.
SELECT NAME, SALES, QUOTA FROM SALESREPS
WHERE SALES NOT BETWEEN (0.8 * QUOTA) AND (1.2 * QUOTA)
IN operatori toplamga tegishlilikni tekshiradi. Masalan, tortta aniq xizmatchilar tomonidan olingan hamma buyurtmalarni aniqlash.
SELECT ORDER_NUM, REP, AMOUNT FROM ORDERS
WHERE REP IN (107, 109, 101, 103)
NOT IN yordamida diapazonga "tegishli emaslikni " tekshirish mumkin.
LIKE operatori. Quyidagicha '%' shablonli LIKE operatorini qaraymiz:
SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS
WHERE COMPANY LIKE '%n'
Bu xolda LIKE '%n' operatori 'n' harfiga tugaydigan hamma yozuvlarni korsatadi, agar % shabloni birinchi kelsa:
SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS
WHERE COMPANY LIKE '%gan'
Agar faqat bitta simvol ixtiyoriy bolsa '_' shabloni qollaniladi. Masalan:
SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS
WHERE COMPANY LIKE 'Ap_lsin'
Yozuvlarni tartiblash, ORDER BY ifodasi. SELECT operatori tarkibida natijaviy yozuvlarni tartiblangan holda taqdim etish uchun ORDER BY ifodai kozda tutilgan. Masalan, agar oquvchilar royxatini alfavit tartibida yoki tovarlar narxini kamayish tartibida chiqarish zarur bolsa, u holda bu ifodadan foydalanish kerak boladi.
Quyidagi misolni koramiz: Har bir offis uchun sotuvlar haqiqiy hajmlarini regionlar nomlari, har bir regionda esa shaharlar nomlari boyicha alfavit tartibida chiqarish.
SELECT CITY, REGION, SALES FROM OFFICES
ORDER BY REGION, CITY
Masalan: Sotuvlari haqiqiy xajmlari kamayish tartibida bolgan offislar royxatini chiqarish.
SELECT CITY, REGION, SALES FROM OFFICES
ORDER BY SALES DESC
Sotuvlar hajmlarini DESC predikatini qollab kamayish tartibida chiqaramiz. Osish tartibida chiqarish uchun ASC predikati qollanadi.Bu predikat kozda tutilgan bolib, uni korsatish shart emas.
Bir necha jadvallar bilan ishlash
Jadvallarni jamlashtirish. Jamlashtirish relyatsion malumotlar bazasi operatsiyalaridan biri bolib, jadvallar orasidagi aloqani belgilaydi va ulardan malumotni bitta buyruq yordamida ajratishga imkon beradi. Jamlashda jadvallar FROM buyrugidan song royxat sifatida tasvirlanadi. Sorov predikati ixtiyoriy jadval ixtiyoriy ustuniga tegishli bolishi mumkin. Jamlashning eng soddasi bu dekart kopaytmasidir, uni quyidagicha bajarish mumkin:
SELECT Customers.*, Salepeople.* FROM Salepeople, Customers;
Lekin bu yerda hosil bolgan jadval keraksiz malumotlarga ega. Keraksiz satrlarni olib tashlash uchun WHERE jumlasidan foydalaniladi.
Masalan: berilgan shahardagi sotuvchilar va buyurtmachilar ixtiyoriy kombinatsiyasini korish uchun quyidagini kiritish lozim:
SELECT Customers.CName, Salepeople.SName, Salepeople.City
FROM Salepeople, Customers
WHERE Salepeople.City = Customers.City;
Jamlashda SQL bir necha jadval satrlari kombinatsiyasini predikatlar boyicha solishtirishdir. Misol: har bir sotuvchiga mos keluvchi buyurtmachilar royxatini chiqarish:
SELECT Customers.CName, Salepeople.SName
FROM Customers, Salepeople
WHERE Salepeople.SNum = Customers.SNum;
Sodda joylashtirilgan ostki sorovlar.
SQL yordamida sorovlarni bir birining ichiga joylashtirish ham mumkin. Odatda ichki sorov qiymat hosil qiladi va bu qiymat tashqi predikat tomonidan tekshirilib, togri yoki notogriligi 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 sorovda IN operatoridan foydalanilsa, ixtiyoriy sondagi satrlar hosil qilish mumkin. Misol: Londondagi sotuvchilar uchun hamma buyurtmalarni korsatish.
SELECT * FROM Orders WHERE SNum IN
( SELECT SNum FROM Salepeople WHERE City = 'London' );
Bu natijani jamlanma orqali ham hosil qilish mumkin. Lekin odatda ostki sorovli sorovlar tezroq bajariladi. Ostki sorovlarni HAVING izlash sharti ichida ishlatish ham mumkin. Bu ostki sorovlar agar kop 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 ortachadan yuqori bolgan buyurtmachilarni aniqlaydi.
UNION ifodasidan foydalanish. UNION ifodasi bir yoki bir necha sorovlar 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';
Sorovlarda funksiyalar
Agregat funksiyalar qollanishi.
Agregat (yoki STATIK) funksiyalar sonli yoki hisoblanuvchi ustunlar bilan ishlaydi. Agregat funksiya argumenti butun ustun bolib, bitta qiymat qaytaradi. Bu funksiyalarga quyidagilar kiradi:
• SUM() – ustundagi hamma qiymatlar summasini hisoblash.
• AVG() – ustundagi hamma qiymatlar ortachasi qiymatini hisoblash.
• MIN() – ustundagi hamma qiymatlar eng kichigini aniqlash.
• MAX() – ustundagi hamma qiymatlar eng kattasini aniqlash.
• COUNT() – ustundagi qiymati sonini aniqlash.
• COUNT(*) – sorov natijasi jadvalidagi satrlar sonini aniqlash.
Agregatlash argumenti bolib ustun nomidan tashqari ixtiyoriy matematik ifoda xizmat qilishi ham mumkin. Misol: Sotuv kompaniyada reja bajarilishining ortacha 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 koramiz. Masalan: "ACI" ishlab chiqaruvchi mollari ortacha narxini hisoblash.
SELECT AVG(PRICE) FROM PRODUCTS
WHERE MFR_ID = 'ACI'
Ekstremumlarni topishda MIN() va MAX() funksiyalari sonli ustunlar, sanalar va satrli ozgaruvchilar bilan ishlaydi. Eng sodda qollanish sonlar bilan ishlash. Masalan, eng kop va kam sotuvlar rejadagi hajmini chiqarish.
SELECT MIN (QUOTA), MAX (QUOTA) FROM SALESREPS
Masalan, buyurtmalardan eng oldin berilgan sorov sanasini topish.
SELECT MIN(ORDER_DATE) FROM ORDERS
MBdagi yozuvlar sonini sanash uchun COUNT() qollaniladi. 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 ortacha narxini chiqarish.
SELECT AVG(AMOUNT) FROM ORDERS
SQL turlari va strukturasi
Interaktiv rejimda malumotlar bazasi bilan ishlashda foydalanuvchi muloqat rejimida ishlaydi, ya’ni SQL tilidagi sorovni kiritadi va natijani oladi, yani sorovni kiritadi va natijag ega boladi va x.k.
Kiritilgan SQL rejimida boshqa dasturlash tillarida yaratigan dastur tarkibiga kiritiladi. Bu malumotlar bazasi bilan boshqa algoritmik tillarda yaratilgan amaliy dasturlar orqali ishlashni ta’minlaydi. Biroq bu yerda qoshimcha dasturiy vosita kerak boladi. U dasturlash tili bilan SQL operatorlari ortasidagi interfeysni ta’minlab beradi.
Atamalar
SQL til yordamida malumotlar bazasiga beriladigan sorov deganda joriy buyruq tavsiflagan va malumotlar bazasini boshqarish tizimi tomonidan bajarish uchun moljallangan malumotlar bazasi ustida bajariladigan buyruq tushuniladi.
Sorov SQL tili opreatorlari yordamida yaratiladi. Operatorlar sozlar deb ataluvchi aloxida ma’noli qismlardan tashkil topadi. Operatorlar sintaksisi SQL tilining standartida belgilab berilgan.
SQL tili relyatsion malumotlar bazasi bilan ishlashiga qaramasdan "munosabat" atamasi orniga "jadval" atamasi, "kortej" va "atribut" atamalari orniga "satr" va "ustun" atamalari ishlatiladi.
SQL strukturasi va operatorlari
SQL tili 1 jadvalda tasvirlangan bolimlardan iborat.
1 jadval. Malumotlarni aniqlash operatorlari DDL(Data Definition Language — malumotlarni aniqlash tili)
2 jadval. Malumotlarni manipulyatsiyalash operatorlari Data Manipulation Language (DMP)
3 jadval. Data Query Language (DQL) sorov tili
4 jadval. Tranzaksiyalarni boshqarish operatorlari
5. Jadval. Malumotlarni boshqarish operatorlari • DCL (Data Control Language) – malumotlarni boshqarish
Kopincha ustunlardagi qiymatlarning maksimal, minimal va ortacha qiymatlarini xisoblashga togri keladi. Masalan, ortacha ballni xioblash zarurati paydo boladi. Bunday xisoblashlarni bajarish uchun SQL tilida maxsus agregat funksiyalari mavjud:
MIN – ustundagi minimal qiymat;
MAX – ustundagi maksimal qiymat;
SUM – ustundagi qiymatlar yigindisi;
AVG – ustundagi qiymatlarning ortachasi;
COUNT – ustundagi NULL dan farqli bolgan qiymatlar miqdori.
Quyidagi sorov talabalar imtixonlarda olgan ballarining ortachasini aniqlaydi.
SELECT AVG(mark) FROM mark_st
SQL tili Oddiy sorovlari.
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 malumotlarni tanlash operatori
Malumotlarni tanlash SELECT operatori yordamida bajariladi. Bu SQL tilining eng kop qollaniladigan operatori xisoblanadi. SELECT operatorini sintaksisi quyidagicha:
SELECT [ALL/DISTINCT]
FROM
[WHERE
[ORDER BY < atributlar royxati >]
[GROUP BY < atributlar royxati >]
[HAVING
[UNION< SELECT operatorli ifoda>]
Kvadrat qavslrda operatorni yozishda qatnashishi shart bolmagan elementlar korsatilgan. ALL kalit sozi natijaga shartni qanoatlantiruvchi barcha satrlar , shuningdek takrorlanuvchi satrlar ham kirishini bildiradi. DISTINCT kalit sozi natijaga takrorlanuvchi satrlar kiritilmasligini bildiradi. Keyin bolangich jadvaldagi atributlar royxati korsatiladi. Bu atributlar natijaviy jadvalga kiritiladi. * simvoli natijaviy jadvalga boshlangich jadvalning barcha atributlari kiritilishini bildiradi.
Operatorda qatnashishi shart bolgan sozlardan FROM sozi xisoblanadi. Bu sozdan keyin tanlov bajariladigan jadvallar nomi korsatiladi.
Tanlash ifodasida WHERE kalit sozidan keyin jadval satrlarini tanlab olish sharti korsatiladi. Bunda natijaviy jadvalga WHERE ifodasidagi shart rost qiymat qabul qiladigan satrlar kiritiladi.
ORDER BY kalit sozi natijaviy jadval satrlarini korsatilgan ustunlar royxati boyicha tartiblash amalini bildiradi.
GROUP BY kalit sozidan keyin gruppalanadigan atributlar royxati korsatiladi.
HAVING ifodasida har bir gruppaga qoyiladigan shartlar korsatiladi. (GROUP BY va HAVING kalit sozlari keyinroq tushuntiriladi)
FROM, WHERE va ORDER BY kalit sozlari SQL tilining qolgan malumotlarni manipulyatsiyalash operatorlarida ham shu tarzda ishlatiladi.
Sorovlar yaratishni aniq misol uchun korib otamiz (1-rasm)
Barcha studentlar royxatini tanlash va tasvirlash.
SELECT *
FROM student
yoki
SELECT id_st, surname
FROM student
Agar ushbu sorovga ORDER BY surname ifodasi qoshilsa, uxolda royxat familiya boyicha tartiblanadi. Jimlikka kora tartiblash osish boyicha bajariladi. Agar kamayish boyicha tartiblash kerak bolsa, u xolda oxirgi ifodadagi atribut nomidan keyin DESC sozi qoshiladi..
«1» kodli student olgan baxolar royxatini 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 sozidan 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 qollaniladi. Bu operatorlar dasturlash tillarida mavjud emas. Bu operatolar:
IN – biror qiymatlar toplamiga tegishliligini tekshirish;
BETWEEN – biror qiymatlar diapozoniga tegishliligini tekshirish;
LIKE – namuna bilan mosligini tekshirish;
IS NULL – qiymat mavjudmasligini tekshirish.
IN operatori biror qiymatlar toplamiga tegishlilikni tekshirish uchun ishlatiladi.
Quyidagi sorov oxigi keltirilgan misoldagi sorov 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 royxatini tanlab olish
Bunday xolatda LIKE operatoridan foydalanish qulay xisoblanadi. LIKE operatori faqat simvolli maydonlar uchun qollaniladi va maydon qiymati operatorda korsatilgan 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%'
Kopincha ustunlardagi minimal, maksimal yoki ortacha qiymatlarni xisoblashga togri keladi. Masalan, keltiligan jadvallarda ortacha 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 ortachasi;
COUNT() – ustundagi NULL dan farqli qiymatlar miqdori.
Quyidagi sorov studentlar olgan baxolarning ortachasini xisoblaydi.
SELECT AVG(mark)
FROM mark_st
Albatta, agregat funksiyalarini WHERE sozi bilan birgalikda qollash mumkin. Quyidagi sorov 100 kodli studentning ekzamenlarda olgan baxolarining ortachasini xisoblaydi:
SELECT AVG(mark)
FROM mark_st
WHERE id_st = 100
Navbatdagi sorov 10 kodli studentning ortacha baxosini xisoblaydi:
SELECT AVG(mark)
FROM mark_st
WHERE id_ex = 10
SQL tili korib otilgan mexanizmiga qoshimcha ravishda agregat funksiyalarni tola jadval uchun emas, balki gruppalangan qiymatlar uchun qollash imkonini beruvchi vosita mavjud. Buning uchun SQL da maxsus GROUP BY konstruksiyasi mavjud bolib unda korsatilgan ustun qiymatlari boyicha gruppalash amalga oshiriladi. Masalan, har bir studentni ekzamenlarda olgan baxolarining ortachasini aniqlash mumkin. Buning uchun quyidagi sorov beriladi:
SELECT id_st, AVG(mark)
FROM mark_st
GROUP BY id_st
Bu imkoniyat ham odatdagidek WHERE sozi bilan birgalikda qollanilishi mumkin. Bu sorovni bajarishda MBBT avval jadvaldan WHERE ifodasidagi shartni qanoatlantiruvchi satrlarni tanlab oladi, keyin tanlangan satrlarni gruppalashva agregatlash amalini bajaradi.
Quyidagi sorov har bir studentning 100 kodli ekzamendan olgan baxolarining ortachasini aniqlaydi.
SELECT id_st, AVG(mark)
FROM mark_st
WHERE id_ex = 100
GROUP BY id_st
Korib turganimizdek gruppalash bittadan kop maydon boyicha bajarilishi mumkin. GROUP BY seksiyasiga ega bolgan sorovlar uchun quyidagi muxim cheklanish mavjud: bunday sorovlar natijasi tarkibiga gruppalash bajarilgan ustunlar va agregatlash natijasiga ega bolgan ustunlar kiradi.
Biror xulosaga kelishdan oldin SQL tilining barcha imkoniyatlarini korib chiqish kerak. Masalan, ixtiyoriy tekstni sorov tarkibiga kiritish mumkin. Bunga misol keltiramiz:
SELECT 'Ortacha ball =’, AVG(mark)
FROM mark_st
WHERE id_ex = 10
Ushbu sorov natijasida foydalanuvchi faqat oddiy sonlarni emas, balki tekstni ham koradi.
Bir necha jadvallardan malumotlarni tanlash uchun SQL ni qollash
Sh paytgacha faqat bitta jadvaldan malumotlarni tanlash miollari keltirildi. Relyatsion amallarga mos bolgan bir nechcha jadvallardan malumotlar tanlab olishni ham bajarish mumkin. Bir nechta jadvallardan malumotlarni tanlab olishga toliq misollar keltirish imkoni yoq. Bunga doir ba’zi misollarni korib otamiz.
Qoidaga kora, malumotlar tanlab olinadigan jadvallar u yoki bu shaklda bir biri bilan boglangan. Masalan, birga kop va x.k.
1 rasmdagi ER-diagrammaga qarang. Bu miolda boglangan jadvallar mavjud. student, mark_st va exam_st jadvallarini korib chiqamiz.
mark_st jadvali id_ex maydoni boyicha exam_st jadvali bilan boglangan.
mark_st jadvali id_st maydoni boyicha student jadvali bilan boglangan.
Masalan, studentlarni royxatini ular ekzamenlardan olgan baxolari bilan birgalikda tanlash zarur bolsin. Buning uchun quyidagi sorov beriladi:
SELECT student.surname, mark_st.id_ex, mark_st.mark
FROM student, mark_st
WHERE student.id_st = mark_st.id_st
Keltirilgan kop jadvalli sorov bir jadvalli sorovdan quyidagilar bilan farq qiladi.
1. FROM seksiyasida ikkita jadvl korsatilgan.
2. jadvallr soni bitta kop, shuning uchun korsatilgan maydonlar nomining bir qiymatliligi yoqoladi. Masalan, kop xollarda maydonni FROM da korsatilgan jadvallar royxatidagi qaysi jadvaldan olish noma’lum bolib qoladi. Maydon nomlarining kop qiymatliligini bataraf etish uchun maydon nomida perefiks - jadval nomi qoshimcha qilinadi. Jadval nomi maydon nomidan nuqta bilan ajratiladi.
3. WHERE ifodasida jadvallarni birlashtirish sharti korsatiladi.
Korinib turganidek jadval nomidan iborat prefiksdan foydalanish sorovni murakkablashtiradi. Bunday murakkablikni bartaraf etish uchun psevdonim ishlatiladi. Yuqoridagi sorovni 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 malumotlarni kiritish operatori:
INSERT INTO jadval_nomi [(
Bunday sintaksis jadvalga faqat bitta star kiritish imkonini beradi. Agar satrdagi barcha ustunlarga qiymat kiritilayotgan bolsa, sorovda barcha ustunlar nomini korsatish zarur emas.
Masalan, BOOKS jadvaliga yangi kitob malumotlari 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 royxatida COAUTOR ustuni ham korsatilgan. Shuning uchun VALUES bolimida bu ustunga mos qiymatni korsatish zarur. Misolda bu maydon uchun bosh satr ("") korsatilgan. Bu soavtor yoqligini bildiradi. Shuningdek bu yerda aniqlangmagan NULL qiymatini korsatish ham mukin edi.
Satrdagi barcha ustunlarga qiymat kiritishda ustunlar royxatini korsatish zarur emas. Bunda faqat qiymatlar royxatini korsatish yetarli boladi. Bunday xolda operator korinish quyidagicha shaklda boladi:
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 toliq miqdorda bolmagan qiymatlarni korsatish mumkin. Ya’ni iymatlar qatorida soavtorni korsatmaslik mumkin, chunki jeoriy kitobda soavtor yoq. Biroq bunda qiymat kiritiladigan ustun nomlarini quyidagicha shaklda korsatish kerak boladi:
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 qoyilgan bolsa, u xolda INSERT operatorida joriy ustunning har bir satriga kiritiladigan qiymatg korsatilishi kerak. Shuning uchun, agar jadvalning hamma ustuni majburiy qiymat li bolsa, u xolda har bir yangi kiitladigan satrda barcha ustun uchun qiymat mavjud bolishi kerak va bunda ustunlar royxatini korsatish shar emas. Aks xolda jadvalda kamida bitta maburiy qiymatli bolmagan ustun bolsa, u xolda albatta ustunlar royxatini korsatish shart boladi.
Qiymatlar royxatida maxsus funksiyalar va ifodalar korsatilish ham mumkin. Bunda ushbu funksiyalarning qiymatlari malumotlarni kiritish momentida xisoblangan bolishi zarur.
Malumotlarni kiritish operatori birdaniga bir necha satrlarni kiritish imkoniga ham ega. Bunda qiymatlar satri boshqa bir jadvaldan tanlab olinadi. Masalan studentlar xaqidagi jadval mavjud bolsin. Unda studentlarning familiyasi, adresi, uy telefoni va tugilgan sanasi korsatilgan bolsin. 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 ochirish operatori:
Malumotlarni ochirish operatori jadvaldan shartni qanoatlantiruvchi bir yoki bir neta satrlarni ochirishi mumkin.
DELETE FROM jadval _nomi [WHERE tanlash_sharti]
Agar satrlarni tanlash sharti korsatilmasa, u xolda jadvaldagi barcha satrlar ochiriladi. Natijada malumotlarga ega bolmagan bosh bolgan jadval xosil boladi.
Agar jadvaldan oldingi sessiya natijalarini ochirish kerak bolsa, u xolda R1 jadvalidagi barcha satrlar ochiriladi:
DELETE FROM R1
WHERE qismidagi shart ifodasi xuddi SELECT operatoridagi filtrlash shartiga oxshash boladi. Bu shart jadvaldan qaysi satrlar ochirilishi kerakligini aniqlaydi.
Masalan, student Mironova A.V. ochirilmaslii kerak bolsa, quyidagi sorov beriladi:
DELETE FROM R2 WHERE FIO = "Mironov A.V."
WHERE qismida biror sorov korsatilishi mumkin. Masalan, agar jadvaldan ozlashtirmagan studentlarni ochirish kerak bolsin. Oliy ta’lim qonuniga kora oxirgi sessiyada ikkita va undan ortiq fandan ikki baxo olgan student ozlashtirmagan xisoblanadi. U xolda tanlab olish sharti ikkita va undan kop ikki baxo olgan studentlarni va ikkita undan kop ekzamenlarni topshirmagan studentlarni aniqlashi kerak. Bunday studentlarni aniqlash uchun R1 jadvalidan 2 baxoli va baxo korsatilmagan satrlar tanlab olinishi, keyin olingan natija FIO ustuni boyicha gruppalanishi kerak. Keyin har bir gruppadagi satrlar soni aniqlanadi (bu har bir studentning olgan ikki baxolari bilan topshirmagan ekzamenlar sonini bildiradi) va ikkitadan kop satrga ega ustunlar tanlab olinadi. Endi ushbu murakkab bolgan konstruksiyani SQL tilida yozamiz va sodda korinishga ega bolishini koramiz.
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 sorovda satrlar ochiriladigan jadval korsatilmasligi kerak.
Malumotlarni manipulyatsiyalash operatsiyalarining barchasi malumotlar bazasining butunligi tushunchasi bilan boglangan. Manipulyatsiyalash amallari sintaktik jixatdan togri bolsada butunlik talablari tufayli bajarilmasligi mmkin.
UPDATE malumotlarni yangilash operatsiyasi
ozgarish yuz berganda va mos xolda bu ozgarishni malumotlar bazasida akslantirish uchun ishlatiladi.
UPDATE jadval _nomi SET ustun_nomi = yangi_qiymat [WHERE tanlash_sharti]
Bu yerda ham WHERE qismi DELETE operatoridagi kabi korsatilishi shart emas. U DELETE operatoridagi kabi bir xil vazifani bajaradi va ozgartirish amali bajariladigan satlarni tanlash imkonini beradi. Agar tanlash sharti (WHERE qismi) korsatilmagan bolsa, u xolda ozgartirish amali jadvlning barcha satrlari uchun bajariladi.
Masalan, student Stepanova K. Ye. malumotlar bazasi fanidan "2" baho oldi, keyin uni "3" bahoga qayta topshirgan bolsin. Bu xolatga mos xolda R1 jadvalini ozgartirish 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 ozgartirish zarurati paydo boladi? Bu kam uchaydigan masala emas. Masalan, agar guruxlar jadvalidagi guruxlarni kursini bittaga oshirish zarr bolsa quyidagi ozgartirish amali bajarishi mumkin. Guruxlar jadvali quyidagicha sxemaga ega bolsin:
R4 = < Gurux, Kurs>
UPDATE R4
SET R4.Kypc = R4.Kypc + 1
Malumotlarni turi. Malumotlar bazasini yaratish
MYSQL tilida jadvaldagi maydonlarni quyidagi tiplari mavjud [2]:
Malumotlarni aniqlash
SQL ning DDL (Data Definition Language) malumotlarni aniqlash tili malumotlar bazasining sxema, domenlar, jadvallar, tasvirlar va indekslar kabi ob’ektlarini yaratish va ochirish uchun ishlatiladi.
Quyida SQL da malumotlarni 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 ochirish 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 bosh jadval yaratadi. CREATE TABLE komandasi jadval nomini va jadvalning ozini korsatilgan tartibdagi ustunlar ketma – ketligi korinishida aniqlaydi. Unda har bir ustundagi malumotlarning tiplari va ustunlar olchovi korsatiladi. Har bir jadval juda bolmaganda bitta ustunga ega bolishi kerak.
CREATE TABLE komandasi sintaksisi:
CREATE TABLE
(
Argument qiymati kattaligi malumot turiga bogliqdir. Agar siz maxsus korsatmasangiz, tizim avtomatik qiymatni ornatadi.
Misol uchun sotuvchilar jadvalini yaratishni korib chiqamiz:
CREATE TABLE Salepeople
( SNum integer,
SName char (10),
City char (10),
Comm decimal );
Jadvallarni ochirish
Jadvalni ochirish imkoniga ega bolish uchun, jadval egasi (Ya’ni yaratuvchisi) bolishingiz kerak. Faqat bosh jadvalni ochirish mumkin. Qatorlarga ega bolgan, toldirilgan jadvalni ochirish mumkin emas, Ya’ni jadval ochirishdan oldin tozalangan bolishi kerak. Jadvalni ochirish komandasi quyidagi korinishga ega:
DROP TABLE < table name >;
Masalan: DROP TABLE Salepeople;
Jadvalni ozgartirish
Jadvalni ozgartirish uchun ALTER TABLE komandasidan foydalaniladi. Bu komanda jadvalga Yangi ustunlar qoshish, ustunlarni ochirish, ustunlar kattaligini ozgartirish,hamda cheklanishlarni qoshish va olib tashlash imkoniyatlariga ega. Bu komanda ANSI standarti qismi emas, shuning uchun har xil tizimlarda har xil imkoniyatlarga ega.
Jadvalga ustun qoshish uchun komandaning tipik sintaksisi:
ALTER TABLE ADD
Masalan:
ALTER TABLE Salepeople ADD Phone CHAR(7);
Jadvallar uchun cheklanishlar
Cheklanishlarni aniqlash.
Kop xollarda ustunga kiritilgan qiymatlar bir biridan farq qilishi kerak. Agar ustun uchun UNIQUE cheklanishi ornatilsa, bu ustungsha mavjud qiymatni kiritishga urinish rad etilapdi. Bu cheklanish bosh bolmaydigan (NOT NULL) debe’lon qilingan maydonlarga qollanishi 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 ornatilishi mumkin. Bu bir necha maydonlar qiymatlari kombinatsiyasi unikalligini ta’minlaydi. Bizning malumotlart bazamizda har bir buyurtmachi bitta sotuvchiga biriktirilgan. Ya’ni Buyurtmachilar jadvalida buyurtmachi nomeri (cnum) va sotuvchi nomeri (snum) kombinatsiyasi unikal bolishi 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 togridan togri 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 bolgan xoldan tashqari. Birlamchi kalitlar NULL qiymatga ega bolishi 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 malumot qabul qilinishidan oldin mos kelishi lozim bolgan shart kiritishga imkon beradi. CHECK cheklanishi CHECK kalit sozi korsatilgan maydondan foydalanuvchi predikat ifodalaridan iboratdir.
Misol: Salepeople jadvali Comm ustuniga kiritilayotgan qiymat 1 dan kichik bolish sharti.
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10),
Comm decimal CHECK ( Comm < 1 ));
Kozda tutilgan qiymatlarni (poumolchaniyu) ornatish
Biror bir maydon uchun qiymat korsatmagan xolda jadvalga satr qoshsangiz, SQL bunday maydonga kiritish uchun kozda tutilgan qiymatga ega bolishi kerak, aks xolda komanda rad etiladi. Eng umumiy kozda tutilgan qiymat NULL qiymatdir. CREATE TABLE komandasida kozda tutilgan qiymat DEFAULT operatori orqali, ustun cheklanishi sifatida korsatiladi. 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 ));
Malumotlar yaxlitligini ta’minlash
Jadval bir maydonidagi hamma qiymatlar boshqa jadval maydonida aks etsa, birinchi maydon ikkinchisiga ilova qiladi deyiladi. Bu ikki maydon orasidagi bogliqlikni korsatadi. Masalan, buyurtmachilar jadvalida har bir buyurtmachi, sotuvchilar jadvalida oziga 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 bolishi shart emas. Birlamchi kalit kabi, tashqi kalit bitta modul sifatida qayta ishlanuvchi bir necha maydonlarga ega bolishi musmkin. Maydon tashqi kalit bolsa ilova qitlayotgan jadval bilan ma’lum usulda bogliqdir. 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 korsatilmagan qiymatlarni tashqi kalit maydonlariga kiritmaslikdir. FOREIGN KEY cheklanishi sintaksisi:
FOREIGN KEY
Birinchi royxat komanda tomonidan ozgartiriluvchi ustunlar royxatidir. Pktable - bu ajdod kalitli jadval. Ikkinchi ustunlar royxati bu ajdod kalitni tashkil qiluvchi ustunlardir.
Misol uchun Sotuvchilar jadvaliga ilova qiluvchi tashqi kalit sifatida e’lon qilingan SNum maydoniga ega bolgan 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) );