O‘zbekiston respublikasi oliy va o‘rta maxsus ta’lim


Download 0.71 Mb.
bet2/5
Sana15.08.2020
Hajmi0.71 Mb.
#126390
1   2   3   4   5
Bog'liq
Ma'lumotlar bazasini dasturlash


ONum — har bir sîtib îlish unikàl nîmeri, AMT — sîtib îlish summàsi qiymàti, ODate — sîtib îlish sànàsi,

CNum — sîtib îluvchi buyurtmàchi nîmeri, SNum — sîtuvchining nîmeri.



Misîl uchun sîtuvchilàr jàdvàlini yaràtishni ko‘rib chiqàmiz:

CREATE TABLE Salepeople (SNum integer,

SName char (10),

City char (10), Comm decimal)


Jàdvàllàrni ochirish.

Jàdvàlni o‘chirish imkînigà egà bo‘lish uchun, jàdvàl egàsi (ya’ni yaràtuvchisi) bo‘lishingiz keràk. Fàqàt bo‘sh jàdvàlni o‘chirish mumkin. Qàtîrlàrgà egà bo‘lgàn, to‘ldirilgàn jàdvàlni o‘chirish mumkin emàs, Ya’ni jàdvàl o‘chirishdàn îldin tîzàlàngàn bo‘lishi keràk. Jàdvàlni o‘chirish kîmàndàsi quyidà- gi ko‘rinishgà egà:

DROP TABLE < table name >;

Màsàlàn: DROP TABLE Salepeople



Jàdvàlni yaràtilgàndàn song ozgàrtirish.

Jàdvàlni o‘zgàrtirish uchun ALTER TABLE kîmàndàsidàn fîydàlànilàdi. Bu kîmàndà jàdvàlgà yangi ustunlàr qo‘shish, ustunlàrni o‘chirish, ustunlàr kàttàligini o‘zgàrtirish hamdà cheklànishlàrni qo‘shish và îlib tàshlàsh imkîniyatlàrigà egà. Bu kîmàndà ANSI stàndàrti qismi emàs, shuning uchun har õil tizimlàrdà har õil imkîniyatlàrgà egà.

Jàdvàlgà ustun qo‘shish uchun kîmàndàning tipik sintàksisi:

ALTER TABLE

ADD



;

Màsàlàn:


ALTER TABLE Salepeople ADD Phone CHAR(7)

    1. JÀDVÀLLÀR UCHUN CHEKLÀNISHLÀR

Cheklànishlàrni kiritish.

Jàdvàl yaràtàyotgàningizdà (yoki uni o‘zgàrtiràyotgàningiz- dà), siz màydînlàrgà kiritilàyotgàn qiymàtlàrgà cheklànishlàr o‘rnàtishingiz mumkin. Bu hîldà SQL cheklànishlàrgà to‘g‘ri kelmàydigàn hamma qiymàtlàrni ràd etàdi. Cheklànishlàr ikki àsîsiy turi màvjud: — ustun và jàdvàl cheklànishlàri. Ulàrning fàrqi shundàki ustun cheklànishi fàqàt àyrim ustunlàrgà qo‘llànàdi, jàdvàl cheklànishi bo‘lsà bir yoki bir nechà ustunlàr guruhigà qo‘llànàdi. Ustun cheklànishi ustun nîmi îõirigà mà’lumîtlàr tipidàn so‘ng và verguldàn îldin qo‘yilàdi. Jàdvàl cheklànishi jàdvàl nîmi îõirigà so‘nggi dumàlîq verguldàn îldin qo‘yilàdi. Cheklànishlàr hisobgà îlingàn CREATE TABLE kîmàndàsi sintàksisi:

CREATE TABLE < table name >

( ,



...

( [, ])... )

Màydîngà bo‘sh (NULL) qiymàtlàr kiritilishining îldini îlish uchun CREATE TABLE kîmàndàsidà NOT NULL chek- lànishi ishlàtilàdi. Bu cheklànish fàqàt har õil ustunlàr uchun o‘rnàtilàdi.

Màsàlàn, shu nàrsà àniqki, birlàmchi kàlitlàr hech qàchîn bo‘sh bo‘lmàsliklàri keràk, shuning uchun Salepeople jàdvàlini quyidàgichà yaràtish mumkin:

CREATE TABLE Salepeople (SNum integer NOT NULL, SName char (10),

City char (10), Comm decimal)

Ko‘p hîllàrdà ustungà kiritilgàn qiymàtlàr bir-biridàn fàrq qilishi keràk. Àgàr ustun uchun UNIQUE cheklànishi o‘rnàtil- sà, bu ustungà màvjud qiymàtni kiritishgà urinish ràd etilàdi.

Bu cheklànish bo‘sh bo‘lmàydigàn (NOT NULL) deb e’lîn qi- lingàn màydînlàrgà qo‘llànishi mumkin.

Màsàlàn:


CREATE TABLE Salepeople

(SNum integer NOT NULL UNIQUE, SName char (10),

City char (10), Comm decimal)

Unikàlligi tàlàb qilinàdigàn màydînlàr (birlàmchi kà- litlàrdàn tàshqàri) kàndidàt kàlitlàr yoki unikàl kàlitlàr deyilàdi. Jàdvàl cheklànishi UNIQUE màydînlàr guruhigà o‘rnàti- lishi mumkin. Bu bir nechà màydînlàr qiymàtlàri kîmbinàt- siyasi unikàlligini tà’minlàydi. Bizning mà’lumîtlàr bàzàmizdà har bir buyurtmàchi bittà sîtuvchigà biriktirilgàn. Ya’ni Buyurtmàchilàr jàdvàlidà buyurtmàchi nîmeri (CNum) và sîtuvchi nîmeri (snum) kîmbinàtsiyasi unikàl bo‘lishi keràk. Bu cheklànishni UNIQUE (CNum, SNum) yordàmidà, Customers jàdvàlini yaràtishdà kiritish mumkin. Bu ustunlàr uchun NOT

NULL cheklànishini kiritish zàrurdir.

Birlàmchi kàlitlàr cheklànishlàri.

SQL birlàmchi kàlitlàrni to‘g‘ridàn to‘g‘ri birlàmchi kàlit (PRIMARY KEY) cheklànishi îrqàli tà’riflàydi. PRIMARY KEY jàdvàlni yoki ustunlàrni cheklàshi mumkin. Bu cheklànish UNIQUE cheklànishi kàbi ishlàydi, jàdvàl uchun fàqàt bittà bir- làmchi kàlit (iõtiyoriy sîndàgi ustunlàr uchun) àniqlànishi mumkin bo‘lgàn hîldàn tàshqàri. Birlàmchi kàlitlàr NULL qiymàtgà egà bo‘lishi mumkin emàs.

Misîl:

CREATE TABLE Salepeople



(SNum integer NOT NULL PRIMARY KEY, SName char (10),

City char (10), Comm decimal)

PRIMARY KEY cheklànishi qiymàtlàr unikàl kîmbinà- tsiyasini tàshkil qiluvchi bir nechà màydînlàr uchun qo‘llànishi mumkin. Màsàlàn PRIMARY KEY cheklànishini juftliklàr uchun qo‘llàsh mumkin:

CREATE TABLE Namefield (firstname char (10) NOT NULL, lastname char (10) NOT NULL

city char (10),

PRIMARY KEY ( firstname, lastname ))



Màydîn qiymàtlàrini tekshirish (CHECK cheklànishi).

CHECK cheklànishi jàdvàlgà kiritilàyotgàn mà’lumît qàbul qilinishidàn îldin mîs kelishi lîzim bo‘lgàn shàrt kiritishgà imkîn beràdi. CHECK cheklànishi CHECK kàlit so‘zi ko‘rsàtilgàn mày- dîndàn fîydàlànuvchi predikàt ifîdàlaridàn ibîràtdir.

Misîl: Salepeople jàdvàli Comm ustunigà kiritilàyotgàn qiymàt 1 dàn kichik bo‘lish shàrti.

CREATE TABLE Salepeople

(SNum integer NOT NULL PRIMARY KEY, SName char(10) NOT NULL UNIQUE,

City char(10),

Comm decimal CHECK (Comm < 1 ))

CHECK cheklànishidàn màydîngà mà’lum qiymàtlàrini kiritishdàn himîya qilib, õàtîlàr îldini îlish uchun fîydàlànish mumkin. Màsàlàn màhsulîtni sîtish shoõîbchàlàrigà egà bo‘lgàn shàharlàr fàqàt Lîndîn, Bàrselînà, Sàn Õîse và Nyu Yîrk bo‘lsin.

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 Hose", "Barselona")),

Comm decimal CHECK ( Comm < 1)

CHECK jàdvàl cheklànishi sifàtidà kelishi mumkin. Bu shàrtgà bir nechà màydîn kiritishgà imkîn beràdi.

Màsàlàn:


CREATE TABLE Salepeople

(SNum integer NOT NULL PRIMARY KEY, SName char(10) NOT NULL UNIQUE,

City char(10), Comm decimal,

CHECK (Comm < 15 OR City = "Barcelona"))



Kozdà tutilgàn qiymàtlàrni ornàtish.

Birîr bir màydîn uchun qiymàt ko‘rsàtmàgàn hîldà jàdvàl- gà sàtr qo‘shsàngiz, SQL bundày màydîngà kiritish uchun ko‘zdà tutilgàn qiymàtgà egà bo‘lishi keràk, àks hîldà kîmàndà ràd etilàdi. Eng umumiy ko‘zdà tutilgàn qiymàt NULL qiymàt- dir. CREATE TABLE kîmàndàsidà ko‘zdà tutilgàn qiymàt

DEFAULT îperàtîri îrqàli, ustun cheklànishi sifàtidà ko‘rsà- tilàdi. Màsàlàn:

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 ))


Mà’lumîtlàr yaõlitligini tà’minlàsh.

Jàdvàl bir màydînidàgi hamma qiymàtlàr bîshqà jàdvàl màydînidà àks etsà, birinchi màydîn ikkinchisigà ilîvà qilàdi deyilàdi. Bu ikki màydîn îràsidàgi bîg‘liqlikni ko‘rsàtàdi. Màsàlàn, buyurtmàchilàr jàdvàlidà har bir buyurtmàchi, sîtuv- chilàr jàdvàlidà o‘zigà biriktirilgàn sîtuvchigà ilîvà qiluvchi SNum màydînigà egà. Bir màydîn ikkinchisigà ilîvà qilsà tàshqi kàlit, u ilîvà qilàyotgàn màydîn àjdîd kàlit deyilàdi. Buyurtmàchilàr jàdvàlidàgi SNum màydîni tàshqi kàlit, sîtuv- chilàr jàdvàlidàgi SNum àjdîd kàlitdir.

Tàshqi kàlit bittà màydîndàn ibîràt bo‘lishi shàrt emàs. Birlàmchi kàlit kàbi, tàshqi kàlit bittà mîdul sifàtidà qàytà ish- lànuvchi bir nechà màydînlàrgà egà bo‘lishi mumkin. Màydîn tàshqi kàlit bo‘lsà ilîvà qilàyotgàn jàdvàl bilàn mà’lum usuldà bîg‘liqdir. Tàshqi kàlit har bir qiymàti (sàtri), àjdîd kàlitning bittà và fàqàt bittà qiymàtigà (sàtrigà) ilîvà qilishi keràk. Bu õîldà tizim ilîvàli yaõlit hîlàtdà deyilàdi.

Shu bilàn birgà àjdîd kàlit qiymàti tàshqi kàlit bir nechà qiymàtlàrigà ilîvà qilishi mumkin.


Cheklànish FOREIGN KEY.

SQL ilîvàli yaõlitlikni FOREIGN KEY yordàmidà tà’min- làydi. Tàshqi kàlit vàzifàsi àjdîd kàlitdà ko‘rsàtilmàgàn qiymàtlàrni tàshqi kàlit màydînlàrigà kiritmàslikdir. FOREIGN KEY cheklànishi sintàksisi:

FOREIGN KEY REFERENCES

[]

Birinchi ro‘yõàt kîmàndà tîmînidàn o‘zgàrtiriluvchi ustun- làr ro‘yõàtidir. Pktable — bu àjdîd kàlitli jàdvàl. Ikkinchi ustun- làr ro‘yõàti bu àjdîd kàlitni tàshkil qiluvchi ustunlàrdir.

Misîl uchun Sîtuvchilàr jàdvàligà ilîvà qiluvchi tàshqi kàlit sifàtidà e’lîn qilingàn SNum màydînigà egà bo‘lgàn Buyurt- màchilàr jàdvàlini yaràtàmiz:

CREATE TABLE Customers

(CNum integer NOT NULL PRIMARY KEY, CName char(10),

City char(10), SNum integer,

FOREIGN KEY (SNum) REFERENCES Salepeople (SNum))

Tàshqi kàlitni ustunlàr cheklànishi sifàtidà berish mumkin. Buning uchun FOREIGN KEY ko‘rinishi — ko‘rsàtkichli cheklànish (REFERENCES) qo‘llànàdi:

CREATE TABLE Customers

(CNum integer NOT NULL PRIMARY KEY, CName char(10),

City char(10),

SNum integer REFERENCES Salepeople (SNum))

FOREIGN KEY cheklànishidàn jàdvàl yoki ustun chek- lànishi sifàtidà fîydàlàngàndà, àgàr ulàr PRIMARY KEY chek- lànishigà egà bo‘lsà, àjdîd kàlit ustunlàrini ko‘rsàtmàslik mumkin.



Kàlitlàrgà cheklànish.

Ilîvàli yaõlitlikni tà’minlàsh tàshqi kàlit yoki àjdîd kàlit màydînlàri qiymàtlàrigà cheklànishlàr o‘rnàtishni tàlàb qilàdi. Àjdîd kàlit tàrkiblàngàn bo‘lib, tàshqi kàlit har bir qiymàti bittà sàtrgà mîs kelishi tà’minlàngàn bo‘lishi keràk. Bu kàlit unikàl bo‘lib, bo‘sh (NULL) qiymàtlàrgà egà bo‘lmàsligi keràk. Shuning uchun àjdîd kàlit màydînlàri PRIMARY KEY chek- lànishigà egà bo‘lishi yoki NOT NULL cheklànishi bilàn birgà UNIQUE deb e’lîn qilinishi keràk.

Tàshqi kàlit àjdîd kàlitdà màvjud qiymàtlàrgà yoki bo‘sh (NULL) qiymàtgà egà bo‘lishi mumkin. Bîshqà qiymàt kiri- tishgà urinish ràd etilàdi. Tàshqi kàlitgà NOT NULL deb e’lîn qilish mumkin, lekin bu màqsàdgà muvîfiq emàs. Màsàlàn, siz qàysi sîtuvchi mîs kelishini bilmàsdàn îldin buyurtmàchini ki- ritmîqchisiz. Bu hîldà NULL qiymàtdàn fîydàlànib, keyinchà- lik uni kînkret qiymàtgà àlmàshtirish mumkin.

Cheklànishlàr tà’siri.

Tàshqi kàlit màydînlàrigà INSERT yoki UPDATE yordàmidà kiritilàyotgàn qiymàtlàr àjdîd kàlitlàrigà îldin kiri- tilgàn bo‘lishi keràk. Tàshqi kàlit iõtyoriy sàtrini DELETE yordàmidà o‘chirish mumkin. ANSI tà’rifi bo‘yichà: tàshqi kàlit

yordàmidà ilîvà qilinàyotgàn àjdîd kàlit qiymàtini o‘chirib yoki o‘zgàrtirib bo‘lmàydi. Bu shuni bildiràdiki, buyurtmàlàr jàd- vàlidà buyurtmàlàrgà egà buyurtmàchini, buyurtmàchilàr jàd- vàlidàn o‘chirib bo‘lmàydi. ANSI tàrkibigà kirmàgàn àjdîd kàlit màydînlàrini o‘zgàrtirish yoki o‘chirish qîidàlàri màvjud:



  1. Cheklàngàn (RESTRICT) o‘zgàrtishlàr. Siz (ANSI usulidà) àjdîd kàlitlàrdà cheklàngàn deb ko‘rsàtishingiz yoki màn qilishingiz mumkin.

  2. Kàskàdlànuvchi (CASCADE) o‘zgàrtishlàr. Àgàrdà àjdîd kàlitdà o‘gàrtish kiritsàngiz, tàshqi kàlitdà õuddi shundày o‘zgàrtishlàr àvtîmàtik yuz beràdi.

  3. Bo‘sh (NULL) o‘zgàrtishlàr. Siz àjdîd kàlitdà o‘zgàr- tirish kiritgàningizdà tàshqi kàlit màydînlàri àvtîmàtik NULL qiymàt îlàdi (tàshqi kàlitdà NULL qiymàt ruõsàt etilgàn bo‘lsà). Yuqîridà ko‘rsàtilgàn effektlàr UPDATE DELETE kîmàndàlàri bàjàrilgàndà àjdîd kàlit o‘zgàrishini ko‘rsàtàdi

quyidàgichà àniqlànàdi:

CREATE TABLE ( [()],



[()],

...


FOREGIGN KEY (,..) REFERENCES

[(, ...)]

ON UPDATE [CASCADE|RESTRICT|SET NULL],

ON DELETE [CASCADE|RESTRICT|SET NULL], ... )

Misîl. Siz sîtuvchi nîmerini o‘zgàrtirmîqchisiz, lekin uning hamma buyurtmàchilàrini sàqlàb qîlmîqchisiz. Lekin bu sîtuv- chi firmàdàn bo‘shàb ketsà siz uning buyurtmàchilàrini bîshqà sîtuvchigà màhkàmlàshingiz keràk. Buni bàjàrish uchun kàskàd effektli UPDATE cheklànishli DELETE berishingiz keràk.

CREATE TABLE Customers

(CNum integer NOT NULL PRIMARY KEY, CName char(10) NOT NULL,

City char(10), Rating integer,

SNum integer REFERENCES Salepeople ON UPDATE CASCADE

ON DELETE RESTRICT)

Àgàr endi sîtuvchilàr jàdvàlidàn Peel ni o‘chirmîqchi bo‘lsàngiz, buyurtmàchilàr jàdvàlidà Hoffman và Clemens ning SNum màydînini bîshqà tàyinlàngàn sîtuvchigà o‘zgàrtirishi-

ngiz keràk. Bîshqà tîmîndàn Peel SNum màydînini 1009 gà o‘zgàrtirsàngiz Hoffman và Clemens ham àvtîmàtik o‘zgàràdi.


Trànzàksiyalàr (Qàchîn qilingàn ozgàrishlàr dîimiy bolàdi?).

Kîmàndà yoki kîmàndàlàr guruhi bàjàrilgàndàn so‘ng o‘zgàrtishlàr mà’lumîtlàr bàzàsidà sàqlànib qîlishi yoki ràd etilishini hàl qilishingiz lîzim. Bu màqsàddà kîmàndàlàr trànzàktsiya deb àtàluvchi guruhlàrgà biriktirilàdi.

Har dîim SQL seàns bîshlàgàningizdà trànzàksiya ham bîshlànàdi. Hamma kîmàndàlàr trànzàksiya qismi hisoblànàdi, tîki ulàrni COMMIT yoki ROLLBACK kîmàndàsi kiritib tugàtmàguningizchà. COMMIT o‘zgàrishlàrni dîimiy qilàdi, ROLLBACK bo‘lsà ràd qilàdi. Yangi trànzàksiya COMMIT yoki ROLLBACK kîmàndàsidàn so‘ng bîshlànàdi.

Ko‘pginà reàlizàtsiyalàrdà siz AUTOCOMMIT pàrametrini o‘rnàtishingiz mumkin. Bu hamma qàdàmlàrni àvtîmàtik eslàb qîlàdi. Õàtîgà îlib keluvchi qàdàmlàr teskàrisigà bàjàrilàdi. Buni quyidàgichà bàjàrish mumkin: SET AUTOCOMMIT ON; Îldingi hîlàtgà quyidàgichà qàytish mumkin: SET AUTO- COMMIT OFF;

Bà’zi kîmàndàlàr, ya’ni ALTER, CREATE, DROP, GRANT, REVOKE, kàbi COMMIT ni àvtîmàtik bàjàràdi.


    1. MÀYDÎNLÀRNI KIRITISH, O‘CHIRISH VÀ O‘ZGÀRTIRISH


Qiymàtlàrni kiritish.

Hamma sàtrlàr SQLdà INSERT kîmàndàsi yordàmidà kiritilàdi. INSERT quyidàgi fîrmàtlàrdan birigà egà bo‘lishi mumkin:

INSERT INTO

[(column [,co- lumn] ...)]

VALUES ( [,] ... );

yoki

INSERT INTO

[(column [,co- lumn] ...)]



Îstki so‘rîv.

Màsàlàn, sîtuvchilàr jàdvàligà sàtr kiritish uchun quyidàgi shàrtdàn fîydàlànishingiz mumkin:

INSERT INTO Salepeople

VALUES (11, "Peel", "London", .12);

Siz nîm kiritish uchun ustunlàr ko‘rsàtishingiz mumkin. Bu nîmlàrni iõtiyoriy tàrtibdà kiritishgà imkîn beràdi. Màsàlàn:

INSERT INTO Salepeople (Sname, Comm, SNum) VALUES ("Peel", .12, 11)

E’tibîr bering, City ustuni tàshlàb yubîrilgàn, chunki ungà ko‘zdà tutilgàn qiymàt kiritilàdi.

Siz INSERT kîmàndàsidàn bir jàdvàldàn qiymàt tànlàb, so‘rîv bilàn ishlàtish uchun, ikkinchisigà jîylàshishdà fîy- dàlànishingiz mumkin. Buning uchun siz VALUES ifîdàsini (îldingi misîldàgi) mîs so‘rîvgà àlmàshtiringiz keràk:

INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE City = "London"

Sàtrlàrni ochirish.

Sàtrlàrni jàdvàldàn DELETE kîmàndàsi bilàn o‘chirish mumkin. U àlîhidà qiymàtlàrni emàs, fàqàt sàtrlàrni o‘chiràdi. DELETE quyidàgi fîrmàtgà egà:

DELETE FROM

[WHERE search-condition]

Màsàlàn, Sîtuvchilàr jàdvàlidàgi hamma sàtrlàrni o‘chirish uchun quyidàgi shàrtni kiritish mumkin:

DELETE FROM Salepeople

Mà’lum sàtrlàrni o‘chirish uchun predikàtdàn fîydàlànilàdi.

Màsàlàn, jàdvàldàn Axelrod sîtuvchini o‘chirish uchun:

DELETE FROM Salepeople WHERE SNum = 13



Màydîn qiymàtlàrini ozgàrtirish.

Bu o‘zgàrtirish UPDATE kîmàndàsi yordàmidà bàjàrilàdi. Bu kîmàndàdà UPDATE ifîdàsidàn so‘ng jàdvàl nîmi và SET ifîdàsidàn so‘ng mà’lum ustun uchun o‘zgàrtirish ko‘rsàtilàdi. UPDATE ikki fîrmàtgà egà. Ulàrdàn birinchisi:

UPDATE

SET column = expression [, column = expression] ... [WHERE search-condition]

bu yerdà expression — bu ustun | ifîdà | kînstàntà | o‘zgà- ruvchi.

Ikkinchi vàriànt:

UPDATE

SET column = expression, ...

[ FROM table-list ]

[ WHERE search-condition ]

Màsàlàn, hamma buyurtmàchilàr bàhîsini 200 gà o‘zgàr- tirish uchun quyidàgini kiritishingiz mumkin:

UPDATE Customers SET Rating = 200

Mà’lum sàtrlàrni o‘zgàrtirish uchun DELETE dàgi kàbi predikàtdàn fîydàlànish keràk. Màsàlàn Peel (SNum=11) sîtuv- chining hamma buyurtmàchilàri uchun bir õil o‘zgàrtirishni quyidàgichà kiritish mumkin:

UPDATE Customers SET Rating = 200 WHERE SNum = 11

SET vergul bilàn àjràtilgàn iõtiyoriy sîndàgi ustunlàrgà qiymàt tàyinlàshi mumkin. Iõtiyoriy jàdvàl sàtrlàri uchun qiymàt tàyinlànishi mumkin, lekin bir vàqtning o‘zidà fàqàt bittà sàtrgà qiymàt tàyinlànàdi. Màsàlàn:

UPDATE Salepeople

SET SName = "Gibson", City = "Boston", Comm = .10 WHERE SNum = 14

Siz UPDATE kîmàndàsining SET jumlàsidà skàlyar ifîdàlàrdàn o‘zgàrtirilàyotgàn màydîn ifîdàsigà qo‘shgàn hîldà fîydàlànishingiz mumkin. Màsàlàn:

UPDATE Salepeople SET Comm = Comm * 2


    1. SELECT SO‘RÎV ÎPERÀTÎRI

SELECT îperàtîri MB jàdvàllàridàn nàtijàviy to‘plàm îlish uchun mo‘ljàllàngàn ifîdàdir. Biz SELECT îperàtîri yordàmidà so‘rîv beràmiz, u bo‘lsà mà’lumîtlàr nàtijàviy to‘plàmini qàytàràdi. Bu mà’lumîtlàr jàdvàl shàklidà qàytàrilàdi. Bu jàdvàl keyingi SELECT îperàtîri tîmînidàn qàytà ishlànishi mumkin và hîkàzî.

Îperàtîr SQL92 stàndàrtigà ko‘rà quyidàgi ko‘rinishgà egà:

SELECT — ALL ----- s- sõemà , ustun -----------

— DISTINCT — ---- * ----------------------------

FROM — sõemà, Jàdvàl .. -----------------------

WHERE — izlàsh shàrti ----------------------------

GROUP BY — sõemà, ustun -----------------------

HAVING — izlàsh shàrti -----------------------------

ORDER BY — tàrtiblàsh spetsifikàtîri -----------------

Birinchi qîidà: SELECT ifîdàsi o‘z ichigà àlbàttà FROM ifîdàsini îlishi keràk. Qîlgàn ifîdàlàr keràk bo‘lsà ishlàtilàdi.

SELECT ifîdàsidàn so‘ng so‘rîvdà qàytàriluvchi ustunlàr ro‘yõàti yozilàdi.

FROM ifîdàsidàn so‘ng so‘rîvni bàjàrish uchun jàdvàllàr nîmi yozilàdi.

WHERE ifîdàsidàn so‘ng àgàr mà’lum sàtrlàrni qàytàrish lîzim bo‘lsà, izlàsh shàrti yozilàdi.

GROUP BY ifîdàsi guruhlàrgà àjràtilgàn nàtijàviy so‘rîv yaràtishgà imkîn beràdi.

HAVING ifîdàsidàn guruhlàrni qàytàrish shàrti yozilàdi và GROUP BY bilàn birgà ishlàtilàdi.

ORDER BY ifîdàsi mà’lumîtlàr nàtijàviy to‘plàmini tàr- tiblàsh yo‘nàlishini àniqlàydi.

OFFICES jàdvàlidàgi hamma yozuvlàrni qàytàruvchi sîddà so‘rîv ko‘ràmiz.

SELECT * FROM OFFICES

SELECT yordàmidà mà’lumîtlàrni tànlàsh.

SELECT operàtîri àlbàttà «qàytàriluvchi ustunlàr ro‘yõàti»ni o‘z ichigà îlishi keràk, Ya’ni:

SELECT FILED1, FIELD2, FIELD3 ... FROM ...

FILED1, FIELD2, FIELD3 qàytàriluvchi ustunlàr ro‘yõàti bo‘lib, mà’lumîtlàr ketmà-ketligi shu tàrtibdà qàytàrilàdi!

Ya’ni «qàytàriluvchi ustunlàr ro‘yõàti» hisoblànuvchi ustun- làr và kînstàntàlàrni o‘z ichigà îlishi mumkin:

SELECT FILED1, (FIELD2 — FIELD3) "CONST" ...

FROM ...


FROM jumlàsi «jàdvàl spetsifikàtîrlàri» ya’ni so‘rîvni tàshkil qiluvchi jàdvàllàr nîmini o‘z ichigà îlàdi. Bu jàdvàllàr so‘rîv àsîsini tàshkil qiluvchi jàdvàllàr deyilàdi.

Misîl: Hamma õizmàtchilàrning nîmlàri, îfislàri và ishgà îlish sànàlàri ro‘yõàtini hîsil qilish.

SELECT NAME, REP_OFFICE, HIRE_DATE FROM SALESREPS

SELECT îperàtîri qàytàruvchi ustunlàr iõtiyoriysi hisoblànuvchi, ya’ni nàtijàdà mustàqil ustun sifàtidà tàsvirlànuv- chi màtemàtik ifîdà bo‘lishi mumkin.

Misîl: Har bir îfis uchun shàharlàr, regiînlàr và sîtuvlàr rejàsi qànchàgà îrtig‘i yoki kàmi bilàn bàjàrilgànligi ro‘yõàti.

SELECT CITY, REGION, (SALES-TARGET) FROM OFFICES

Har bir õizmàtchi uchun rejàdàgi sîtuvlàr õàjmini haqiqiy sîtuvlàr hàjmining 3% fîizigà îshirish!

SELECT NAME, QUOTA, (QUOTA +((SALES/100)*3)) FROM SALESREPS

Bà’zidà ustunlàrdàn biri izlàsh shàrtigà bîg‘liq bo‘lmàgàn qiymàt qàytàrishi keràk bo‘làdi.

Màsàlàn: Har bir shàhar uchun sîtuvlàr hàjmlàri ro‘yõàtini chiqàring.

SELECT CITY, "Has sales of", SALES FROM OFFICES

"Has sales of" bu kînstàntàlàr ustunidir.

Bà’zidà mà’lumîtlàrni tànlàshdà qàytàriluvchi qiymàtlàr õîsil bo‘làdi.

Bu hîl yuz bermàsligi uchun DISTINCT îperàtîridàn fîy- dàlànish lîzim. Màsàlàn, quyidàgichà:

SELECT DISTINCT MGR FROM OFFICES


SELECT îperàtîri WHERE shàrti.

Endi WHERE ifîdàsidàn fîydàlànib bà’zi so‘rîvlàrni ko‘rib chiqàmiz: Sîtuvlàr haqiqiy hàjmi rejàdàn îshgàn îfislàrni ko‘rsàting.

SELECT CITY, SALES, TARGET FROM OFFICES WHERE SALES > TARGET

Identifikàtîri 105 teng bo‘lgàn õizmàtchi nîmi haqiqiy và rejàdàgi sîtuvlàr hàjmini ko‘rsàting:

SELECT SALES, NAME, QUOTA FROM SALESREPS WHERE EMPL_NUM = 105

Àgàr izlàsh shàrti TRUE bo‘lsà, qàtîr nàtijàviy to‘plàmgà qo‘shilàdi, àgàr izlàsh shàrti FALSE bo‘lsà, qàtîr nàtijàviy to‘p- làmgà qo‘shilmàydi, àgàr NULL bo‘lsà hàm nàtijàviy to‘plàmdàn chiqàrilàdi. O‘z mà’nîsigà ko‘rà WHERE, keràksiz yozuvlàrni chiqàrib, keràkligini qîldiruvchi filtr sifàtidà ishlàtilàdi.

Àsîsiy izlàsh shàrtlàri «predikàtlàr», beshtà. Ulàrni ko‘rib chiqàmiz:


  1. Sîlishtirish, Ya’ni bir shàrt nàtijàsi ikkinchisi bilàn sîlishtirilàdi. Birinchi so‘rîv kàbi.

  2. Qiymàtlàr diàpàzînigà tegishlilikni tekshirish. Màsàlàn, berilgàn qiymàt diàpàzîngà kiràdimi, yo‘qmi?

  3. To‘plàm elementiligini tekshirish. Màsàlàn, ifîdà qiymàti to‘plàmdàgi birîr qiymàt bilàn ustmà-ust tushàdimi?

  4. Shàblîngà mîslikni tekshirish. Ustundàgi sàtrli qiymàt shàblîngà mîs kelàdimi?

  5. NULL qiymàtgà tenglikkà tekshirish.

Sîlishtirish àmàllàri màydîn và kînstàntàlàrni sîlishtirish àmàllàrini o‘z ichigà îlishi mumkin: 1988-yilgàchà ishgà îlingàn hamma õizmàtchilàr nîmlàrini tîping.

SELECT NAME FROM SALESREPS



WHERE HIRE_DATE< TO_DATE("01.06.1988",

"DD/MM/YYYY")

TO_DATE("01.06.1988", "DD/MM/YYYY") — PL/SQL

Oracle sànà bilàn ishlàsh stàndàrt funksiyasi.

Yoki àrifmetik ifîdàlàrni o‘z ichigà îlishi mumkin: Haqiqiy sîtuvlàr hàjmi rejàning 80 fîizidàn kàm bo‘lgàn îfislàr ro‘yõàti- ni chiqàring.

SELECT CITY, SALES, TARGET FROM OFFICES WHERE SALES < (0.8 * TARGET)

Ko‘p hîllàrdà izlàsh birlàmchi kàliti bo‘yichà kînstàntàlàr bilàn sîlishtirish so‘rîvlàridàn fîydàlànilàdi. Màsàlàn, shàhar telefîn tàrmîg‘i àbînenti, àõir ikkità bir õil nîmerlàr màvjud emàs-ku.




    1. MÀNTIQIY ÎPERÀTÎRLÀR

BETWEEN và IN Îperàtîrlàri.

BETWEEN ifîdàsi bu qiymàtlàr diàpàzînigà tegishlilikni tekshirishdir. Ifîdà sintàksisi quyidàgichà:

--- tekshirilàyotgàn ifîdà ------ BETWEEN quyi ifîdà

AND yuqîri ifîdà

— NOT -

NOT ifîdàsi shàrtni teskàrisigà o‘giràdi, ya’ni tegishli emàs degan mà’nîni bildiràdi.



Misîl: Nàrõi har õil diàpàzîngà mîs keluvchi buyurtmàlàrni tîpish.

SELECT ORDER_NUM, AMOUNT FROM ORDERS

WHERE AMOUNT BETWEEN 20.000 AND 29.999

NOT ifîdàsi yordàmidà berilgàn diàpàzîngà tegishlilikni tekshirish mumkin, màsàlàn: Sîtuvlàr haqiqiy hàjmlàri rejàning

80 dàn 120 prîtsentigàchà bo‘lgàn diàpàzîngà tushmàydigàn õizmàtchilàr ro‘yõàtini chiqàrish.

SELECT NAME, SALES, QUOTA FROM SALESREPS

WHERE SALES NOT BETWEEN (0.8 * QUOTA) AND (1.2 * QUOTA)

Ifîdà IN to‘plàmgà tegishlilikni tekshiràdi. Kîmàndà sin- tàksisi quyidàgichà:

-- tekshirilàyotgàn ifîdà ---- IN ---- (— const )

NOT — ----, --------

1990-yil iyun îyining har õil kunlàridà qilingàn hamma buyurtmàlàrni àniqlàsh.

SELECT ORDER_NUM, ORDER_DATE, AMOUNT FROM ORDERS

WHERE ORDER_DATE IN (TO_DATE("14.06.1990", "DD/MM/YYYY"), TO_DATE("08.06.1990", "DD/MM/YYYY"), TO_DATE("29.06.1990","DD/MM/YYYY"), TO_DATE("04.06.1990","DD/MM/YYYY"))

Sànàlàr bilàn shu tàrzdà ishlànàdi.

To‘rttà kînkret õizmàtchilàr tîmînidàn îlingàn hamma buyurtmàlàrni àniqlàsh.

SELECT ORDER_NUM, REP, AMOUNT FROM ORDERS

WHERE REP IN (107, 109, 101, 103)

NOT IN yordàmidà diàpàzîngà «tegishli emàs»likni tek- shirish mumkin.



Îperàtîr LIKE

LIKE ifîdàsi sintàksisi SQL92 stàndàrti bo‘yichà quyidàgi ko‘rinishgà egà:

--- ustun nomi ---- LIKE (shàblîn) ---------------------

NOT ESCAPE

(o‘tkàzish nîmi)

Sîddà so‘rîv bàjàràmiz: «Àpelsin» kîmpàniyasi uchun kre- dit limitini ko‘rsàtish:

SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS

WHERE COMPANY = "Àpelsin"

Quyidàgichà "%" shàblînli LIKE îperàtîrini qo‘llàymiz:

SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS

WHERE COMPANY LIKE "%n"

Bu hîldà LIKE "%n" îperàtîri "n" harfigà tugàydigàn hamma yozuvlàrni ko‘rsàtàdi, àgàr "%" shàblîni birinchi kelsà:

SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS

WHERE COMPANY LIKE "%gàn"

Bà’zidà "%" shàblîni o‘rnigà "*" belgisi qo‘llànàdi , màsàlàn MS SQL uchun, c:\>dir *.exe!

Àgàr fàqàt bittà simvîl iõtiyoriy bo‘lsà "_" shàblîni qo‘llànà- di. Màsàlàn:

SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS

WHERE COMPANY LIKE "Àp_lsin"



Îperàtîr IS NULL

SELECT îperàtîri uchun NULL qiymàti bilàn ishlàsh qîidàlàrini kînkret misîlda ko‘ràmiz:

Hali îfisgà biriktirilmàgàn õizmàtchini tîpish: SELECT NAME FROM SALESREPS WHERE REP_OFFICE = NULL

SQL quyidàgi sàtrni uchràtgàndà:

REP_OFFICE = NULL

Quyidàgi shàrtni tekshiràdi:

NULL = NULL

Bundày tekshirish yanà NULL qàytàràdi! Qiymàt tekshiruv- chi îperàtîr uchun àgàr nàtijà TRUE bo‘lmàsà, sàtr nàtijàviy to‘plàmgà kirmàydi! Lekin bundày sàtrlàr àslidà màvjuddir! Bu hîldà NULL qiymàtigà tekshirish to‘g‘ri îperàtîrini qo‘llàsh lîzim:

------ ustunning nîmi IS ------ NULL -----------

NOT


Qo‘llàymiz:Îfisgà biriktirilmàgàn õizmàtchini tîping.

SELECT NAME FROM SALESREPS WHERE REP_OFFICE IS NULL

NOT shàrtini qo‘llàsh mumkin: Îfisgà biriktirilgàn hamma õizmàtchilàrni tîping.

SELECT NAME FROM SALESREPS WHERE REP_OFFICE IS NOT NULL



WHERE shàrtidà qoshmà îperàtîrlàr.

Izlàshning «qo‘shmà» shàrtlàrini ko‘rib chiqàmiz. WHERE îperàtîridà OR, AND, NOT îperàtîrlàri bilàn bîg‘làngàn bir nechà izlàsh shàrtlàrini qo‘llàsh mumkin. Bu îperàtîrlàr sintàk- sisi quyidàgichà:

NOT, OR, AND îperàtîrlàrning sintàksisi.

(------ WHERE ------ SHÀRT )

(---- NOT )

(----------- AND )

(----------- OR )

Bu îperàtîrlàr yordàmidà yaràtilgàn bir nechà so‘rîvlàrni ko‘rib chiqàmiz.

Màsàlàn: Sîtuvlàri haqiqiy hàjmi rejàdàgidàn yoki 300.0 $ dàn kàm bo‘lgàn õizmàtchilàrni àniqlàsh;

SELECT NAME, QUOTA, SALES FROM SALESREPS

WHERE SALES < QUOTA OR SALES < 300.0

Sîtuvlàri haqiqiy hàjmi rejàdàgidàn và 300.0 $ dàn kàm bo‘lgàn õizmàtchilàrni àniqlàsh:

SELECT NAME, QUOTA, SALES FROM SALESREPS

WHERE SALES < QUOTA AND SALES < 300.0

Sîtuvlàri haqiqiy hàjmi rejàdàgidàn kàm, lekin 150.0 $ dàn ko‘p bo‘lgàn õizmàtchilàrni àniqlàsh:

SELECT NAME, QUOTA, SALES FROM SALESREPS

WHERE (SALES < QUOTA) AND (NOT SALES > 150.0)

AND ifîdàsi àlgebràsi.

Qiymàt Nàtijà

------ ----------

TRUE AND TRUE -> TRUE FALSE AND TRUE -> FALSE TRUE AND FALSE -> FALSE FALSE AND FALSE ->FALSE NULL AND TRUE -> NULL TRUE AND NULL -> NULL FALSE AND NULL ->FALSE NULL AND FALSE ->FALSE NULL AND NULL -> NULL

OR ifîdàsi àlgebràsi.

Qiymàt Nàtijà

--------- --------- TRUE OR TRUE -> TRUE FALSE OR TRUE -> TRUE TRUE OR FALSE -> TRUE FALSE OR FALSE -> FALSE NULL OR TRUE -> TRUE TRUE OR NULL -> TRUE FALSE OR NULL -> NULL NULL OR FALSE -> NULL NULL OR NULL -> NULL

NOT ifîdàsi àlgebràsi.

Qiymàt Nàtijà

---------- ----------

NOT TRUE -> FALSE

NOT FALSE ->TRUE

NOT NULL -> NULL

Qo‘shmà izlàsh îperàtîrlàrining har biri o‘z ustivîrligigà egà. Eng yuqîri ustivîrlik NOT gà tegishli, undàn so‘ng AND và îõiridà OR.

SQL92 stàndàrtidà IS îperàtîri yordàmidà ifîdà rîst, yolg‘în yoki àniqlànmàgànligini tekshirish mumkin. Uning sin- tàksisi quyidàgichà:


IS îperàtîri sintàksisi.

----- Sîlishtirish --------- IS (------ TRUE )

(------ FALSE )

----- Màntiqiy ifîdà ----- (---- UNKNOWN )



Màsàlàn, quyidàgichà yozish mumkin: ((SALES QUOTA) > 100.000) IS UNKNOWN. Bundày shàrt SALES

yoki QUOTA ustunlàri NULL qiymàtgà egà sàtrlàrni izlàshgà imkîn beràdi.


Yozuvlàrni tàrtiblàsh, ORDER BY jumlàsi.

Îldin ko‘rilgàn so‘rîvlàrdà nàtijàlàr iõtiyoriy tàrtibdà îlingàn edi. Àgàr o‘quvchilàr ro‘yõàtini àlfàvit tàrtibidà yoki tîvàrlàr nàrõini kàmàyish tàrtibidà chiqàrish zàrur bo‘lsàchi? Buning uchun SELECT îperàtîri tàrkibidà ORDER BY ifîdàsi ko‘zdà tutilgàn. Uning sintàksisi:

-------- ORDER BY BY — ustun nîmi --------------- .

------ ustun tàrtib ràqàmi --- ---- ASC ----------------

------ DESC ---------------

------------- , -----------------------------------

Àvvàl quyidàgi misîlni ko‘ràmiz: Har bir îfis uchun sîtuvlàr haqiqiy hàjmlàrini regiînlàr nîmlàri, har bir regiîndà esà shàharlàr nîmlàri bo‘yichà àlfàvit tàrtibidà ko‘rsàtish.

SELECT CITY, REGION, SALES FROM OFFICES

ORDER BY REGION, CITY

ORDER BY ifîdàsidàn keyin kelgàn ustun ÀSÎSIY kàlit- dir, undàn keyingi ustunlàr ikkinchi dàràjàli kàlitlàrdir. Yozuvlàrni o‘sish hamdà kàmàyish bo‘yichà tàrtiblàsh mumkin.

32

Màsàlàn: Sîtuvlàri haqiqiy hàjmlàri kàmàyish tàrtibidà îfis- làr ro‘yõàtini chiqàrish.



SELECT CITY, REGION, SALES FROM OFFICES

ORDER BY SALES DESC

Sîtuvlàr hàjmlàrini DESC predikàtini qo‘llàb kàmàyish tàrtibidà chiqàràmiz. O‘sish tàrtibidà chiqàrish uchun ASC predikàti qo‘llànàdi. Bu predikàt ko‘zdà tutilgàn bo‘lib, uni ko‘rsàtish shàrt emàs. Àgàr ustun hisoblànuvchi bo‘lib, nîmgà egà bo‘lmàsà uning tàrtib nîmerini ko‘rsàtish mumkin.

Màsàlàn, quyidàgichà: Sîtuvlàr haqiqiy và rejàdàgi hàjmlàri àyirmàsi kàmàyish tàrtibidà îfislàr ro‘yõàtini chiqàring.

SELECT CITY, REGION, (SALES — TARGET) FROM OFFICES

ORDER BY 3 DESC

Shu kàbi ORDER BY ifîdàsidà ustunlàr nîmlàri và nîmer- làri hamdà DESC, ASC predikàtlàrini qo‘llàb, muràkkàb tàr- tiblàsh shàrtlàrini hîsil qilish mumkin.

Màsàlàn: Regiînlàr nîmlàri, har bir regiîndà sîtuvlàr haqiqiy và rejàdàgi hàjmlàri àyirmàsi kàmàyish tàrtibidà îfislàr ro‘yõàtini chiqàring.

SELECT CITY, REGION, (SALES — TARGET) FROM OFFICES

ORDER BY REGION ASC, 3 DESC



    1. BIR NECHÀ JÀDVÀLLÀR BILÀN ISHLÀSH


Jàdvàllàrni jàmlàshtirish.

Jàmlàshtirish relyatsiîn mà’lumîtlàr bàzàsi îperàtsiyalàridàn biri bo‘lib, jàdvàllàr îràsidàgi àlîqàni belgilàydi và ulàrdàn mà’lumîtni bittà kîmàndà yordàmidà àjràtishgà imkîn beràdi. Hàr õil jàdvàllàrdà bir õil nîmli ustunlàr bo‘lishi mumkin bo‘lgàni uchun, keràkli ustun uchun jàdvàl nîmi prefiksi ish- làtilàdi.

Jàmlàshdà jàdvàllàr FROM ifîdàsidàn so‘ng ro‘yõàt sifàtidà tàsvirlànàdi. So‘rîv predikàti iõtiyoriy jàdvàl iõtiyoriy ustunigà tegishli bo‘lishi mumkin. Jàmlàshning eng sîddàsi bu dekàrt ko‘pàytmàsi, uni quyidàgichà bàjàrish mumkin:

SELECT Customers.*, Salepeople.* FROM Salepeople, Customers; *

Lekin bu yerdà hîsil bo‘lgàn jàdvàl keràksiz mà’lumîtlàrgà

2 3992 33

egà. Keràksiz sàtrlàrni îlib tàshlàsh uchun WHERE jumlàsidàn fîydàlànilàdi.

Màsàlàn: berilgàn shàhardàgi sîtuvchilàr và buyurtmàchilàr iõtiyoriy kîmbinàtsiyasini ko‘rish uchun quyidàgini kiritish lîzim:

SELECT Customers. CName, Salepeople. SName, Salepeople.City

FROM Salepeople, Customers

WHERE Salepeople.City = Customers.City

Jàmlàshdà SQL bir nechà jàdvàl sàtrlàri kîmbinàtsiyasini predikàtlàr bo‘yichà sîlishtirishdir. Àsîsàn mà’lumîtlàr ilîvàli yaõlitlik àsîsidà tekshirilib, àjràtib îlinàdi.

Misîl: har bir sîtuvchigà mîs keluvchi buyurtmàchilàr ro‘yõàti:

SELECT Customers.CName, Salepeople.SName FROM Customers, Salepeople

WHERE Salepeople.SNum = Customers.SNum;

Tenglikkà àsîslàngàn predikàtlàrdàn fîydàlànuvchi jàmlàn- màlàr, tenglik bo‘yichà jàmlànmà deb àtàlib, jàmlànmàlàrning eng umuiy ko‘rinishidir. Shu bilàn birgà iõtiyoriy relyatsiîn îperàtîrdàn fîydàlànish mumkin.


Ichki và tàshqi jàmlàshlàr.

Jàmlàshlàr bir jàdvàl sàtrigà ikkinchi jàdvàl sàtrlàrini mîs qo‘yishgà imkîn beràdi. Jàmlàshlàr àsîsiy turi bu ichki jàm- làshdir. Jàdvàllàrni ichki jàmlàsh ikki jàdvàl usutunlàrini tenglàshtirishgà àsîslàngàndir:

SELECT book, title, author, name FROM author, book

WHERE book, author = author, id

MySQL jàmlàshning kuchlirîq tip, ya’ni chàp tàshqi jàm- làsh( yoki tàshqi jàmlàsh) dàn fîydàlànishgà imkîn beràdi.

Jàmlàsh bu turining ichki jàmlàshdàn fàrqi shundàki, nàti- jàgà o‘ng jàdvàldà mîs ustungà egà bo‘lmàgàn chàp jàdvàl ustunlàri qo‘shilàdi. Àgàr mualliflàr và kitîblàr misîligà e’tibîr bersàngiz nàtijàgà mà’lumîtlàr bàzàsidà kitîblàrgà egà bo‘lmàgàn kitîblàr kirmàgàn edi.

Ko‘p hîllàrdà o‘ng jàdvàldà mîsi bo‘lmàgàn chàp jàdvàldà- gi sàtrlàrni chiqàrish keràk bo‘làdi. Buni tàshqi jàmlàsh yordàmidà àmàlgà îshirish mumkin:

SELECT book.title, author.name

FROM author

LEFT JOIN book ON book.author = author.id

E’tibîr bering: tàshqi jàmlànmàdà WHERE o‘rnigà ON kàlit so‘zi ishlàtilàdi.

MySQL tàbiiy tàshqi jàmlàshdàn (natural outer join) fîy- dàlànishgà imkîn beràdi. Tàbiiy tàshqi jàmlàsh ikki jàdvàl ikki ustuni bir õil nîm và bir õil tipgà egà bo‘lgàn hamdà shu ustundàgi qiymàtlàr teng bo‘lgàn sàtrlàrni birlàshtirishgà imkîn beràdi:

SELECT my_prod.name FROM my_prod

NATURAL LEFT JOIN their_prod



Jàdvàllàrni ozi bilàn jàmlàsh.

Jàdvàllàrni o‘zi bilàn jàmlàsh uchun har bir sàtrning o‘zi yoki bîshqà sàtrlàr bilàn kîmbinàtsiyasini hîsil qilishingiz mumkin. So‘ngrà har bir sàtr predikàt yordàmidà bàhîlànàdi. Bu turdàgi jàmlàsh bîshqà turdàgi jàmlàshdàn fàrq qilmàydi, fàrqi ikki jàdvàl bir õildir. Jàdvàllàrni jàmlàshdà qàytàriluvchi ustun nîmlàri îldigà jàdvàl nîmi qo‘yilàdi. Bu usutunlàrgà so‘rîvlàrdà murîjààt qilish uchun har õil nomlàrgà egà bo‘lishi keràk. Buning uchun vàqtinchàlik nîmlàr, ya’ni psevdînimlàr qo‘llànadi. Ulàr so‘rîv FROM jumlàsidà jàdvàl nîmidàn so‘ng bo‘shlik qo‘yib yozilàdi.

Misîl: bir õil reytinggà egà hamma buyurtmàchilàr juftlàrini tîpish.

SELECT a.CName, b.CName, a.Rating FROM Customers a, Customers b WHERE a.Rating = b.Rating

Bu hîldà SQL a và b jàdvàllàrni jàmlàgàndek ish tutàdi. Yuqîridà keltirilgàn misîldà îrtiqchà sàtrlàr màvjud, har bir kîmbinàtsiya uchun ikkità qiymàt. Birinchi psevdînimdàgi A qiymàt ikkinchi psevdînimdàgi B qiymàt bilàn kîmbinàtsiyasi îlinàdi, so‘ngrà ikkinchi psevdînimdàgi A qiymàt birinchi psevdînimdàgi B qiymàt bilàn kîmbinàtsiyasi îlinàdi.

Har gàl sàtr o‘zi bilàn sîlishtirilàdi. Buni îldini îlishning sîddà usuli ikki qiymàtgà cheklànish kiritishdir, tîki birinchi qiymàt ikkinchisidàn kichik bo‘lsin yoki àlifbo bo‘yichà îldin kelsin. Bu predikàtni àsimmetrik qilàdi, nàtijàdà õuddi shu qiymàtlàr teskàri tàrtibdà îlinmàydi.

Misîl:

SELECT a.CName, b.CName, a.Rating FROM Customers a, Customers b WHERE a.Rating = b.Rating



AND a.CName < b.CName

Bu misîldà àgàr birinchi kîmbinàtsiya ikkinchi shàrtni qànîàtlàntirsà u chiqàrilàdi, lekin teskàri kîmbinàtsiya bu shàrt- ni qànîàtlàntirmàydi và àksinchà. Siz SELECT ifîdàsidà yoki so‘rîvning FROM jumlàsidà keltirilgàn har bir psevdînim yoki jàdvàlni ishlàtishingiz shàrt emàs. Siz har õil jàdvàllàr, hamdà bittà jàdvàl har psevdînimlàridàn ibîràt jamlànmà yaràtishingiz mumkin.


Sîddà jîylàshtirilgàn îstki sorîvlàr.

SQL yordàmidà so‘rîvlàrni bir birining ichigà jîylàshti- rishingiz mumkin. Îdàtdà ichki so‘rîv qiymàt hîsil qilàdi và bu qiymàt tàshqi predikàt tîmînidàn tekshirilib, to‘g‘ri yoki nîto‘g‘riligi tekshirilàdi.

Misîl: bizgà sîtuvchi nîmi mà’lum: Motika, lekin biz SNum màydîni qiymàtini bilmàymiz và Buyurtmàchilàr jàd- vàlidàn hamma buyurtmàlàrni àjràtib îlmîqchimiz. Buni quyidàgichà àmàlgà îshirish mumkin:

SELECT * FROM Orders WHERE SNum =

(SELECT SNum FROM Salepeople WHERE SName = "Motika");

Àvvàl ichki so‘rîv bàjàrilàdi, so‘ngrà uning nàtijàsi tàshqi so‘rîvni hîsil qilish uchun ishlàtilàdi (SNum îstki so‘rîv nàti- jàsi bilàn sîlishtirilàdi).



Îstki so‘rîv bittà ustun tànlàshi lîzim, bu ustun qiymàtlàri tipi predikàtdà sîlishtirilàdigàn qiymàt tipi bilàn bir õil bo‘lishi keràk. Siz bà’zi hîllàrdà îstki so‘rîv bittà qiymàt hîsil qilishi uchun DISTINCT îperàtîridàn fîy- dàlànishingiz mumkin.

Misîl: Hoffman (CNum=21) gà õizmàt ko‘rsàtuvchi sîtuv- chilàr hamma buyurtmàlàrini tîpish lîzim bo‘lsin.

SELECT * FROM Orders

WHERE SNum = ( SELECT DISTINCT SNum FROM

Orders WHERE CNum = 21 )

Bu hîldà îstki so‘rîv fàqàt bittà 11 qiymàt chiqàràdi, lekin umumiy hîldà bir nechà qiymàtlàr bo‘lishi mumkin và ulàr ichidàn DISTINCT fàqàt bittàsini tànlàydi.

Iõtiyoriy sîndàgi sàtrlàr uchun àvtîmàtik ràvishdà bittà qiymàt hîsil qiluvchi funksiya turi — àgregàt funksiya bo‘lib, undàn îstki so‘rîvdà fîydàlànish mumkin.

Màsàlàn, siz summàsi 4 îktabrdàgi bàjàrilishi lîzim bo‘lgàn buyurtmàlàr summàsi o‘rtà qiymàtidàn yuqîri bo‘lgàn hamma buyurtmàlàrni ko‘rmîqchisiz:

SELECT * FROM Orders WHERE AMT >

( SELECT AVG (AMT) FROM Orders WHERE ODate = "1990/10/04" )

Shuni nàzàrdà tutish keràkki, guruhlàngàn àgregàt funk- siyalàr GROUP BY ifîdàsi terminlàridà àniqlàngàn àgregàt funksiyalàr bo‘lsà ko‘p qiymàtlàr hîsil qilishi mumkin.

Àgàr îstki so‘rîv IN îperàtîridàn fîydàlànilsà, iõtiyoriy sîndàgi sàtrlàr hîsil qilish mumkin.

Misîl: Lîndîndàgi sîtuvchilàr uchun hamma buyurtmàlàrni ko‘rsàtish.

SELECT * FROM Orders WHERE SNum IN

(SELECT SNum FROM Salepeople WHERE City = "London")

Bu nàtijàni jàmlànmà îrqàli hîsil qilish mumkin. Lekin îdàtdà îstki so‘rîvli so‘rîvlàr tezrîq bàjàrilàdi. Siz îstki so‘rîv SELECT jumlàsidà ustungà àsîslàngàn ifîdàdàn fîydàlànishingiz mumkin. Bu relyatsiîn îperàtîrlàr yordàmidà yoki IN yordàmidà àmàlgà îshirilishi mumkin. Siz îstki so‘rîvlàrni HAVING ichidà ishlàtishingiz mumkin. Bu îstki so‘rîvlàr àgàr ko‘p qiymàtlàr qàytàrmàsà õususiy àgregàt funksiyalàridàn yoki GROUP BY yoki HAVING îperàtîrlàridàn fîydàlànishi mumkin.

Misîl:

SELECT Rating, COUNT (DISTINCT CNum) FROM



Customers

GROUP BY Rating HAVING Rating >

( SELECT AVG (Rating) FROM Customers WHERE City = "San Hose");

Bu kîmàndà San Hose dàgi bàhîlàri o‘rtàchàdàn yuqîri bo‘lgàn buyurtmàchilàrni àniqlàydi.


Kîrrellàngàn (mutànîsib) jîylàshtirilgàn îstki sorîvlàr.

SQL tilidà îstki so‘rîvlàrdàn fîydàlànilgàndà tàshqi so‘rîv

FROM qismidàgi ichki so‘rîvgà mutànîsib so‘rîv yordàmidà murîjààt qilishingiz mumkin. Bu hîldà îstki so‘rîv àsîsiy so‘rîv har bir sàtri uchun bir màrtàdàn bàjàrilàdi.

Misîl:


3-îktabrdà buyurtmà bergàn hamma buyurtmàchilàrni tîping.

SELECT * FROM Customers a WHERE "1990/10/03" IN

(SELECT ODate FROM Orders b WHERE a.CNum = b.CNum )

Bu misîldà tàshqi so‘rîvning CNum màydîni o‘zgàrgàni uchun ichki so‘rîv tàshqi so‘rîvning har bir sàtri uchun bàjàri- lishi keràk. Ichki so‘rîv bàjàrilishini tàlàb qilàdigàn tàshqi so‘rîv sàtri jîriy sàtr — kàndidàt deyilàdi. Mutànîsib îstki so‘rîv bilàn bàjàrilàdigàn bàhîlàsh prîtseduràsi quyidàgichà:



  1. Tàshqi so‘rîvdà nîmlàngàn jàdvàldàn sàtrni tànlàsh. Bu kelàjàk sàtr — kàndidàt.

  2. Tàshqi so‘rîv FROM jumlàsidà nîmlàngàn psevdînimdà bu sàtr kàndidàt qiymàtlàrini sàqlàb qo‘yish.

  3. Îstki so‘rîvni bàjàrish. Tàshqi so‘rîv uchun berilgàn psevdînim tîpilgàn hamma jîydà jîriy sàtr-kàndidàt qiymàtidàn fîydàlànish. Tàshqi so‘rîv sàtr-kàndidàtlàri qiymàtlàridàn fîy- dàlànish, tàshqi ilîvà deyilàdi.

  4. Tàshqi so‘rîv predikàtini 3 qàdàmdà bàjàriluvchi îstki so‘rîv nàtijàlàri àsîsidà bàhîlàsh. U chiqàrish uchun sàtr-kàn- didàt tànlànishini belgilàydi.

  5. Jàdvàl keyingi sàtr-kàndidàtlàri uchun prîtseduràni qàytàrish và shu tàrzdà tîki hamma jàdvàl sàtrlàri tekshirilib bo‘lmàgunchà.

Yuqîridàgi misîldà SQL quyidàgi prîtseduràni àmàlgà îshiràdi:

  1. U buyurtmàchilàr jàdvàlidàn Hoffman sàtrini tànlàydi.

  2. Bu sàtrni jîriy sàtr-kàndidàt sifàtidà a psevdînim bilàn sàqlàydi.

  3. So‘ngrà îstki so‘rîvni bàjàràdi. Îstki so‘rîv CNum mày- dînning qiymàti a.CNum qiymàtigà teng sàtrlàrni tîpish uchun Buyurtmàchilàr jàdvàli hamma sàtrlàrini ko‘rib chiqàdi. Hîzir a.CNum qiymàti 21 gà, ya’ni Hoffman sàtrining CNum mày- dîni qiymàtigà teng. Shundàn so‘ng shu sàtrlàrning ODate mày- dînlàri qiymàtlàri to‘plàmini hîsil qilàdi.

  4. Shundàn so‘ng àsîsiy so‘rîv predikàtidà 3 îktabrdàgi

qiymàt shu to‘plàmgà tegishliligini tekshiràdi. Àgàr bu rîst bo‘lsà Hoffman sàtrini chiqàrish uchun tànlàydi.

  1. Shundàn so‘ng u butun prîtseduràni Giovanni sàtrini sàtr — kàndidàt sifàtidà fîydàlànib qàytàràdi và tîki Buyurt- màchilàr hamma sàtri tekshirilib bo‘lmàgunchà sàqlàb qo‘yadi.

Bà’zidà õàtîlàrni tîpish uchun màõsus yaràtilgàn so‘rîvlàrdàn fîydàlànish keràk bo‘làdi.

Misîl: Quyidàgi so‘rîv Buyurtmàchilàr jàdvàlini ko‘rib chiqib SNum và CNum mîs kelishini tekshiràdi và mîs bo‘lmàgàn sàtrlàrni chiqàràdi.

SELECT * FROM Orders main WHERE NOT SNum =

(SELECT SNum FROM Customers WHERE CNum = main.CNum )

Àsîsiy so‘rîv àsîslàngàn jàdvàlgà àsîslànuvchi mutànîsib so‘rîvdàn fîydàlànishingiz mumkin.

Misîl: sîtib îlishlàr buyurtmàchilàri uchun o‘rtà qiymàtdàn yuqîri bo‘lgàn hammà buyurtmàlàrni tîpish.

SELECT * FROM Orders a WHERE AMT >

(SELECT AVG (AMT) FROM Orders b

WHERE b.CNum = a.CNum )

HAVING îperàtîridàn îstki so‘rîvlàrdà fîydàlànilgànidek mutànîsib îstki so‘rîvlàrdà ham fîydàlànish mumkin.



HAVING ifîdàsidà mutànîsib îstki so‘rîvdàn fîy- dàlàngàndà HAVING o‘zidà ishlàtilishi mumkin bo‘lgàn pîzi- tsiyalàrgà tàshqi ilîvàlàrni cheklàb qo‘yishingiz keràk. Chunki HAVING ifîdàsidàfàqàt àgregàt SELECT ifîdàsidà ko‘rsàtilgàn funksiyalàrdàn yoki GROUP BY ifîdàsidà ko‘rsàtilgàn màydîn- làrdàn fîydàlànish mumkin. Ulàrdàn siz tàshqi ilîvà sifàtidà fîydàlànishingiz mumkin. Buning sàbàbi shuki, HAVING tàshqi so‘rîvdàgi sàtrlàr uchun emàs guruhlàr uchun bàhîlànàdi. Shuning uchun îstki so‘rîv bir màrtà sàtr uchun emàs, guruh uchun bàjàrilàdi.

Misîl: Buyurtmàlàr jàdvàlidàgi sîtib îlishlàr summàlàrini sànàlàr bo‘yichà guruhlàb summàsini hisoblàsh keràk bo‘l- sin. Shu bilàn birgà summà màksimàl summàdàn kàmidà 2000.00 gà ko‘p bo‘lmàgàn sànàlàrni chiqàrib tàshlàsh keràk bo‘lsin:

SELECT ODate, SUM (AMT) FROM Orders a GROUP BY ODate

HAVING SUM (AMT) >

(SELECT 2000.00 + MAX (AMT) FROM Orders b

WHERE a.ODate = b.ODate )

Îstki so‘rîv àsîsiy so‘rîvning ko‘rilàyotgàn àgregàt guruhi sànàsigà teng sànàgà egà hammà sàtrlàr uchun MAX qiymàt hisoblàydi. Bu WHERE ifîdàsidàn fîydàlànib bàjàrilishi lîzim. Îstki so‘rîvning o‘zi GROUP BY yoki HAVING îperàtîrlàri- ni ishlàtmàsligi keràk.


EXISTS îperàtîridàn fîydàlànish.

EXISTS — bu “TRUE” yoki “FALSE” qàytàruvchi îperàtîrdir. Bu shuni bildiràdiki, u predikàtdà àvtînîm yoki màntiqiy îperàtîrlàr AND, OR, và NOT yordàmidà tuzilgàn màntiqiy ifîdàlàr bilàn kîmbinàtsiya qilingàn hîldà ishlàtilishi mumkin. U àgàr iõtiyoriy nàtijà hîsil qilsà îstki so‘rîvni “TRUE” deb bàhîlàydi và hech qàndày nàtijà hîsil qilmàsà “FALSE” deb bàhîlàydi.

Misîl: Àgàr buyurtmàchilàrdàn judà bo‘lmàsà bittàsi San Hose shàhridà yashàsà, buyurtmàchilàr jàdvàlidàgi mà’lumît- làrni chiqàring.

SELECT CNum, CName, City FROM Customers WHERE EXISTS

(SELECT * FROM Customers WHERE City = "San Hose")

EXISTS ni fàqàt sîddà îstki so‘rîv bilàn emàs, mutànîsib so‘rîv bilàn ishlàtish mumkin. Bu hîldà EXISTS ichki îstki so‘rîvni tàshqining har bir sàtri uchun tekshiràdi.


ALL, ANY, SOME îperàtîrlàridàn fîydàlànish.

ANY, ALL, và SOME îstki so‘rîvlàrni àrgument sifàtidà qàbul qiluvchi EXISTS îperàtîrni eslàtàdi, lekin relyatsiîn îperàtîrlàr bilàn birgà ishlàtilishiga ko‘ra fàrq qilàdi. Bu tîmîndàn ulàr îstki so‘rîvlàrgà qo‘llàniluvchi IN îperàtîrini eslàtàdi, lekin undàn fàrqli fàqàt îstki so‘rîvlàr bilàn ishlàshàdi. SOME và ANY îperàtîrlàri o‘zàrî àlmàshinuvchàn.

Misîl: bir shàhardà jîylàshgàn sîtuvchilàr bilàn buyurt- màchilàrni tîpish uchun ANY îperàtîridàn fîydàlànish.

SELECT * FROM Salepeople

WHERE City = ANY ( SELECT City FROM Customers ) Îperàtîr ANY îstki so‘rîv chiqàrgàn hamma qiymàtlàrni îlàdi (bu misîl uchun Buyurtmàchilàr jàdvàlidàgi hamma

City qiymàtlàri) và àgàr ulàrning iõtiyoriysi (ANY) tàshqi so‘rîv sàtridàgi shàhar qiymàtigà teng bo‘lsà rîst deb bàhîlàydi. ANY îperàtîri o‘rnigà IN yoki EXISTS ishlàtish mumkin, lekin ANY “=“ îperàtîrdàn bîshqà relyatsiînn îperàtîrlàrni ishlàtishi mumkin. Misîl: hàmmà sîtuvchilàrni àlifbo bo‘yichà kelgàn buyurtmàchilàri bilàn birgà tîpish.

SELECT * FROM Salepeople

WHERE SName < ANY (SELECT CName FROM

Customers)

ANY to‘là bir qiymàtli emàs. Misîl: Rimdàgi buyurt- màchilàrgà ko‘rà yuqîri reytingà egà buyurtmàchilàrni tîpish.

SELECT * FROM Customers

WHERE Rating > ANY (SELECT Rating FROM Customers WHERE City = "Rome")

Ingliz tilidà iõtiyoriysidàn kàttà "(bu yerdà City = Rome)" bàhîlàsh quyidàgichà tàlqin qilinàdi, bu bàhîlàsh qiymàti har bir City = Rome hîldàgi bàhîlàsh qiymàtidàn kàttà bo‘lishi keràk. SQL tilidà ANY îperàtîridàn fîy- dàlànilgàndà bundày emàs. ANY àgàr îstki so‘rîv shàrtgà mîs keluvchi iõtiyoriy qiymàt tîpsà to‘g‘ri deb bàhîlànàdi. Yuqîridà ko‘rilgàn misîl 300 và 200 bàhîli hamma buyurt- màchilàrni tîpàdi, chunki 300>200 Rimdàgi Giovanni uchun và 200>100 Rimdàgi Pereira uchun.

Sîddàrîq qilib àytgàndà, < ANY ifîdàsi eng kàttà tàn- làngàn qiymàtdàn kichik qiymàtni, > ANY — eng kichik tàn- làngàn qiymàtdàn kàttà qiymàtni bildiràdi.

ALL yordàmidà, predikàt rîst hisoblànàdi, îstki so‘rîv tàn- làgàn har bir qiymàt tàshqi so‘rîv predikàtidàgi shàrtgà mîs kelsà.

Misîl: Rimdàgi har bir buyurtmàchidàn bàhîlàri yuqîri bo‘lgàn buyurtmàchilàrni chiqàring.

SELECT * FROM Customers

WHERE Rating > ALL (SELECT Rating FROM Customers WHERE City = "Rome")

Bu îperàtîr Rimdàgi hamma buyurtmàchilàr bàõîlàri qiymàtlàrini tekshiràdi. Shundàn so‘ng Rimdàgi hamma buyurt- màchilàrdàn bàhîsi yuqîri bo‘lgàn buyurtmàchilàrni tîpàdi. Rimdà eng yuqîri bàhî — Giovanni (200). Demàk 200 dàn yuqîri qiymàtlàr îlinàdi.

ANY îperàtîri uchun bo‘lgàni kàbi ALL îperàtîri uchun ham IN và EXISTS yordàmidà àlternàtiv kînstruksiyalàr yaràtish mumkin.

ALL àsîsàn tengsizliklàr bilàn ishlàtilàdi, chunki qiymàt àgàr hamma nàtijàlàr bir õil bo‘lsà «hammasi uchun teng» îstki so‘rîv nàtijàsi bo‘lishi mumkin. SQL dà < > ALL ifîdà àslidà îstki so‘rîv nàtijàsining «hech qàysisigà teng emàs» mà’nîni bildiràdi. Bîshqàchà qilib àytgàndà, àgàr berilgàn qiymàt îstki so‘rîv nàtijàlàri îràsidà tîpilmàgàn bo‘lsà predikàt — rîst. Àgàr îldingi misîldà tenglik tengsizlikkà àlmàshtirilsà, reytingi 300 gà teng bo‘lgàn hamma buyurtmàchilàr chiqàrilàdi, chunki îstki so‘rîv 100 200 teng reytinglàrni tîpgàn.

ALL và ANY — îràsidàgi àsîsiy fàrq, îstki so‘rîv hech qàndày nàtijà qàytàrmàgàn hîlàtdà ko‘rinàdi. Bu hîldà ALL — àvtîmàtik “TRUE” teng, ANY bo‘lsà àvtîmàtik (“FALSE”) gà teng.



Misîl: Buyurtmàchilàr jàdvàlining hammasini chiqàrish

SELECT * FROM Customers

WHERE Rating > ALL ( SELECT Rating FROM Customers WHERE City = "Boston")

Ko‘rsàtilgàn îperàtîrlàr bilàn ishlàshdà NULL qiymàtlàr mà’lum muàmmîlàrni keltirib chiqàràdi. SQL predikàtdà sîlishtiràyotgàn qiymàtlàrdàn biri bo‘sh (NULL) qiymàt bo‘lsà, nàtijà nîàniqdir. Nîàniq predikàt, nîto‘g‘ri predikàtgà o‘õshàsh, shuning uchun sàtr tàshlàb yubîrilàdi.


UNION ifîdàsidàn fîydàlànish.

UNION ifîdàsi bir yoki bir nechà SQL so‘rîvlàr natijàsini birlàshtirishgà imkîn beràdi.

Misîl: Lîndîndà jîylàshgàn hamma sîtuvchilàr và buyurt- màchilàrni bittà jàdvàldà chiqàring.

SELECT SNum, SName FROM Salepeople WHERE City = "London"

UNION

SELECT CNum, CName FROM Customers WHERE City = "London"



Fîydàli jàmlànmàlàrdàn biri ikki so‘rîvnni jàmlàshdà ikkinchi so‘rîv birinchi so‘rîv chiqàrib tàshlàgàn sàtrlàrni tàn- làshidir. Bu tàshqi jàmlànmà deyilàdi.

Misîl: O‘z shàharlàridà buyurtmàchilàrgà egà yoki egà emàsligini ko‘rsàtgàn hîldà hamma sîtuvchilàrni chiqàrish.

SELECT Salepeople.SNum, SName, CName, Comm FROM Salepeople, Customers WHERE Salepeople.City = Customers.City

UNION


SELECT SNum, SName, "NO MATCH", Comm FROM

Salepeople WHERE NOT City = ANY ( SELECT City FROM Customers ) ORDER BY 2 DESC




    1. SO‘RÎVLÀRDÀ GURUHLÀSH VÀ FUNKSIYALÀR

Àgregàt funksiyalàr qollànishi.

Àgregàt (yoki STÀTIK) funksiyalàr sînli yoki hisoblànuvchi ustunlàr bilàn ishlàydi. Àgregàt funksiya àrgumenti butun ustun bo‘lib, bittà qiymàt qàytàràdi.

Bu funksiyalàrni ko‘rib chiqàmiz:


  • SUM() – Ustundàgi hamma qiymàtlàr summàsini hisoblày- di.

  • AVG() – Ustundàgi hamma qiymàtlàr o‘rtàsi qiymàtini hisoblàydi.

  • MIN() – Ustundàgi hamma qiymàtlàr eng kichigini àniqlàydi.

  • MAX() – Ustundàgi hamma qiymàtlàr eng kàttàsini àniqlàydi.

  • COUNT() – Ustundàgi qiymàtlàr sînini hisoblàydi.

  • COUNT(*) – So‘rîv nàtijàlàri jàdvàlidàgi sàtrlàr sînini hisoblàydi.

Àgregàtlàsh àrgumenti bo‘lib ustun nîmidàn tàshqàri iõtiyo- riy màtemàtik ifîdà õizmàt qilishi mumkin. Misîl uchun quyidàgi so‘rîvdà: Sizning kîmpàniyangizdà rejà bàjàrilishining o‘rtàchà prîtsenti qànchà?

SELECT AVG(100 * (SALES/QUOTA)) FROM SALESREPS

Yanà bir shàkl: Siznining kîmpàniyangizdà rejà bàjàrilishi- ning o‘rtàchà prîtsenti qànchà?

SELECT AVG(100 * (SALES/QUOTA)) PROCENT FROM SALESREPS

Bu hîldà ustun nîmi mà’nîlirîq, lekin bu àsîsiysi emàs. Ustunlàr summàsini hisoblàb ko‘ràmiz. SUM() funksiyasini qo‘llàymiz, ustun sînli bo‘lishi keràk. Màsàlàn, quyidàgichà: Kîmpàniya õizmàtchilàri sîtuvlàr hàjmi rejàdàgi và haqiqiy o‘rtà qiymàti qànchàgà teng?

SELECT SUM(QUOTA), SUM(SALES) FROM SALESREPS

AVG() àgregàtlàsh funksiyasigà yanà bir nechà sîddà misîl-

làrni ko‘ràmiz. Màsàlàn: «ACI» ishlàb chiqàruvchi mîllàri o‘rtàchà nàrõini hisoblàng.

SELECT AVG(PRICE) FROM PRODUCTS WHERE MFR_ID = "ACI"

Ekstremumlàrni tîpish funksiyalàri, yani MIN(), MAX() funksiyalàrini ko‘ràmiz.Bu funksiyalàr sînli ustunlàr, sànàlàr và sàtrli o‘zgàruvchilàr bilàn ishlàydi. Eng sîddà qo‘llànishi sînlàr bilàn ishlàsh.

Màsàlàn quyidàgicha so‘rîv beràmiz: Eng ko‘p và kàm sîtu- vlàr rejàdàgi hàjmi?

SELECT MIN(QUOTA), MAX(QUOTA) FROM SALESREPS

Bu sînlàrni o‘z ichigà îlgàn ustunlàrdir. Yanà bir so‘rîv beràmiz: Bàzàdàgi buyurtmàlàrning ichidà eng îldin berilgàn so‘rîv sànàsi?

SELECT MIN(ORDER_DATE) FROM ORDERS

Sàtrlàr bilàn ishlàgàndà har õil SQL serverlàrdàgi kîdirîvkàlàr har õil nàtijà berishi mumkin. Yozuvlàr sînini sànàsh uchun COUNT() qo‘llànàdi. Bu funksiya sîn qiymàt qàytàràdi.

Màsàlàn: Kîmpàniyamiz mijîzlàri sîni nechtà?

SELECT COUNT(CUST_NUM) FROM CUSTOMERS

Yanà bir so‘rîv: Qànchà õizmàtchi rejàni îrtig‘i bilàn bàjàrdi?

SELECT COUNT(NAME) FROM SALESREPS WHERE SALES > QUOTA

COUNT(*) funksiyasi qiymàtlàr sînini emàs, sàtrlàr sînini hisoblàydi. Quyidàgichà yozish mumkin:

SELECT COUNT(*) FROM ORDERS WHERE AMOUNT > 250
NULL qiymàt và àgregàt funksiyalàr.

Ustun qiymàti NULL bo‘lsà AVG(), MIN(), MAX(), SUM(), COUNT() funksiyalàri qàndày qiymàt qàytàràdi? ANSI/ISO qîidàlàrigà ko‘rà «àgregàt funksiyalàr NULL qiymàtni e’tibîrgà îlmàydi». Quyidàgi so‘rîvni ko‘ràmiz:

SELECT COUNT(*), COUNT(SALES), COUNT (QUOTA)

FROM SALESREPS

Jàdvàl bittà, lekin so‘rîvdàgi qiymàtlàr har õil. Chunki QUOTA màydîni NULL qiymàtni o‘z ichigà îlàdi. COUNT funksiyasi COUNT(màydîn) ko‘rinishdà bo‘lsà NULL qiymàtni e’tibîrgà îlmàydi, COUNT(*) bo‘lsà sàtrlàr umumiy sînini hisîblàydi. MIN(), MAX() funksiyalàri ham NULL qiymàtni e’tibîrgà îlmàydi, lekin AVG(), SUM() — NULL qiymàt màvjud bo‘lsà chàlkàshtiràdi. Màsàlàn, quyidàgi so‘rîv:

SELECT SUM(SALES), SUM(QUOTA), (SUM- (SALES) — SUM(QUOTA)), (SUM(SALES — QUOTA))

FROM SALESREPS



(SUM(SALES)-SUM(QUOTA)) (SUM(SALES-

QUOTA)) ifîdàlàri àgàr QUOTA màydîni NULL qiymàtgà egà bo‘lsà har õil qiymàt qàytàràdi. Ya’ni ifîdà SUM(ustun qiymàti

— NULL) yanà NULL qàytàràdi.

Shundày qilib:



      1. Àgàr ustundàgi qiymàtlàrdàn biri NULL gà teng bo‘lsà, funksiya nàtijàsini hisoblàshdà ulàr tàshlàb yubîrilàdi.

      2. Àgàr ustundàgi hamma qiymàtlàr NULL teng bo‘lsà, AVG(), SUM(), MIN(), MAX() funksiyalàri NULL qàytàràdi. Funksiya COUNT() nîl qàytàràdi.

      3. Àgàr ustundà qiymàtlàr bo‘lmàsà (ya’ni ustun bo‘sh), AVG(), SUM(), MIN(), MAX() funksiyalàri NULL qàytàràdi. Funksiya COUNT()nîl qàytàràdi.

      4. Funksiya COUNT(*) sàtrlàr sînini hisoblàydi và ustundà NULL qiymàt bîr-yo‘qligigà bîg‘liq emàs. Àgàr ustundà sàtrlàr bo‘lmàsà, bu funksiya nîl qàytàràdi.

DISTINCT funksiyasini àgregàt funksiyalàr bilàn birgà ish- làtish mumkin. Màsàlàn, quyidàgi so‘rîvlàrdà:

1. Kîmpàniyamizdà qànchà har õil ràpîrtlàr nîmlàri màvjud?

SELECT COUNT(DISTINCT TITLE) FROM SALESREPS

DISTINCT àgregàtlàr ishlàshdà quyidàgi qîidàlàr màvjud. Àgàr siz DISTINCT và àgregàt funksiyani ishlàtsàngiz uning àrgumenti fàqàt ustun nîmi bo‘lishi mumkin, ifîdà àrgu- ment bo‘lîlmàydi. MIN(), MAX() funksiyalàridà DISTINCT ishlàtish mà’nîsi yo‘q. COUNT() funksiyasidà DISTINCT ish- làtilàdi, lekin kàm hîllàrdà. COUNT(*) funktsiyasigà umumàn DISTINCT qo‘llàb bo‘lmàydi, chunki u sàtrlàr sînini hisoblày-

di. Bittà so‘rîvdà DISTINCT fàqàt bir màrtà qo‘llànishi mumkin! Àgàrdà u àgregàt funksiya àrgumenti sifàtidà qo‘llànil- sà,bîshqà àrgument bilàn qo‘llàsh mumkin emàs.


Àgregàtlàr và mà’lumîtlàrni guruhlàsh.

Àgregàt funksiyalàr jàdvàl uchun nàtijàviy sàtr hîsil qilàdi.

Màsàlàn: Buyurtmà o‘rtàchà nàrõi qànchà?

SELECT AVG(AMOUNT) FROM ORDERS

Màsàlàn, îràliq nàtijàni tîpish lîzim bo‘lsin. Bu hîldà guruhlànishli so‘rîv yordàm beràdi. Ya’ni SELECT îperàtîri- ning GROUP BY ifîdàsi. Àvvàl GROUP BY ifîdàsi qàtnàshgàn quyidàgi so‘rîvni ko‘ràmiz: Hàr bir õizmàtchi uchsun buyurtmà o‘rtàchà nàrõi qànchà?

SELECT REP, AVG(AMOUNT) FROM ORDERS

GROUP BY REP

REP màydîni bu hîldà guruhlàsh màydînidir, Ya’ni REP màydînning hamma qiymàtlàri guruhlàrgà àjràtilàdi và har bir guruh uchun AVG(AMOUNT) ifîdàsi hisoblànàdi. Ya’ni quyidàgilàr bàjàrilàdi:



  1. So‘rîvlàr har bir õizmàtchàgà bittàdàn guruhgà àjràtilà- di.Har bir guruhdà REP màydîni bir õil qiymàtgà egà.

  2. Har bir guruh uchun guruhgà kiruvchi hamma sàtrlàr bo‘yichà AMOUNT ustuni o‘rtà qiymàti hisoblànàdi và bittà nàtijàviy sàtr hîsil qilinàdi. Bu qàtîr guruh uchun REP ustuni qiymàti và shu guruh uchun so‘rîv o‘rtà qiymàtini o‘z ichigà îlàdi.

Shundày qilib, GROUP BY ifîdàsi qo‘llànilgàn so‘rîv,

«GURUHLÀNISHLI SO‘RÎV» deb àtàlàdi. Shu ifîdàdàn keyin kelgàn ustun «guruhlàsh ustuni» deyilàdi. Yanà bir nechà guruhlànishli so‘rîvlàrni ko‘rib chiqàmiz.

Har bir îfis uchun sîtuvlàrning rejàlàshtirilgàn hàjmi diàpàzîni qànchà?

SELECT REP_OFFICE, MIN(QUOTA), MAX(QUOTA) FROM SALESREPS

GROUP BY REP_OFFICE

Yanà bir so‘rîv: Har bir îfisdà qànchà õizmàtchi ishlàydi?

SELECT REP_OFFICE, COUNT(*) FROM SALESREPS

GROUP BY REP_OFFICE

Yanà bir guruhlànishli qiziqàrli so‘rîv: Har bir õizmàtchi nechtà mijîzgà õizmàt ko‘rsàtàdi?

SELECT COUNT(DISTINCT CUST_NUM), "CUS- TOMERS FOR SALESREPS", CUST_REP

FROM CUSTOMERS GROUP BY CUST_REP

Bu yerdà "CUSTOMERS FOR SALESREPS" psevdîmày- dînning ishlàtilishigà e’tibîr bering. So‘rîv nàtijàlàrini bir nechtà ustun bo‘yichà guruhlàsh mumkin. Màsàlàn, quyidàgichà:

Har bir õizmàtchi uchun har bir klient bo‘yichà buyurtmàlàr umumiy sînini hisoblàsh.

SELECT REP, CUST, SUM(AMOUNT) FROM ORDERS

GROUP BY REP, CUST

Lekin ikki ustun bo‘yichà guruhlàshdà nàtijàlàr ikki dàràjàsigà egà guruhlàr và îstki guruhlàr yaràtish mumkin emàs. Lekin tàrtiblàshni qo‘llàsh mumkin. Shu bilàn birgà GROUP BY ishlàtilgàndà so‘rîv nàtijàlàri àvtîmàtik tàrtiblànàdi. Quyidàgi so‘rîvni ko‘ràmiz:

Har bir õizmàtchi uchun har bir klient bo‘yichà buyurtmàlàr umumiy sînini hisoblàsh; so‘rîv nàtijàlàrini klientlàr và õizmàtchilàr bo‘yichà tàrtiblàsh.

SELECT REP, CUST, SUM(AMOUNT) FROM ORDERS

GROUP BY REP, CUST ORDER BY REP, CUST

Shundày qilib GROUP BY ifîdàsi SELECT ni guruhlàrni qàytà ishlàshgà màjbur qilàdi.

Îdàtdà guruhlànishli so‘rîvlàr qàytàruvchi ustunlàrgà guruh- làsh ustuni àgregàt funksiya kiràdi. Àgàr àgregàt ko‘rsàtilmàsà GROUP BY dàn fîydàlànmàsdàn DISTINCT ifîdàsi-dàn fîy- dàlànish yetàrli. Àgàr so‘rîvgà guruhlàsh ustuni qo‘shilmàsà, u yoki bu sàtr qàysi guruhgà tegishliligini àniqlàsh mumkin emàs. Shu kàbi SQL92 guruhlànishli so‘rîvlàrni tàhlil qilishdà birlàmchi và ikkilàmchi kàlitlàr haqidagi mà’lumît ishlàtilmàydi.

Har bir õizmàtchi uchun buyurtmàlàr umumiy sînini hisoblàsh.

SELECT EMPL_NUM, NAME, SUM(AMOUNT) FROM ORDERS, SALESREPS

WHERE REP = EMPL_NUM

GROUP BY EMPL_NUM, NAME

Yanà sîddàrîq shàkl:

Har bir õizmàtchi uchun buyurtmàlàr umumiy sînini hisoblàsh.

SELECT NAME, SUM(AMOUNT) FROM ORDERS, SALESREPS WHERE REP = EMPL_NUM GROUP BY NAME

Àgàr guruhlàsh màydînlàridàn biridà NULL qiymàt màvjud bo‘lsà qàysi guruhgà tegishli bo‘làdi? WHERE ifîdàsidà NULL và NULL tenglikkà sîlishtirish nàtijàsi yanà NULL beràdi. Shuning uchun ANSI/ISO stàndàrtidà GROUP BY ifîdàsidà NULL qiymàtlàr teng deb qàbul qilingàn.


Guruhlàsh và HAVING yordàmidà àjràtish.

Shàrt bo‘yichà sàtrlàrni àjràtish uchun WHERE ifîdàsidàn fîydàlàngàn edik. Shàrt bo‘yichà guruhlàrni àjràtish uchun HAVING îperàtîri màvjuddir. Uning sintàksisi WHERE îperàtîri bilàn bir õil và ulàrdàn birgàlikdà fîydàlànish mumkin. Quyidàgi so‘rîvni ko‘ràmiz:

Buyurtmàlàr umumiy nàrõi 300$ dàn îrtiq õizmàtchilàr uchun buyurtmà o‘rtàchà nàrõi qànchàgà teng?

SELECT REP, AVG(AMOUNT) FROM ORDERS

GROUP BY REP

HAVING SUM(AMOUNT) > 300

Ko‘rinib turibdiki, HAVING SUM(AMOUNT) > 300 ifîdàsi sàtrlàrni guruhlàsh shàrti sifàtidà kelmîqdà.

Yanà bir misîl ko‘ràylik: Ikki và undàn îrtiq õizmàtchigà egà har bir îfisning hamma õizmàtchilàri uchun rejàdàgi và haqiqiy sîtuvlàr umumiy hàjmini hisoblàsh.

SELECT CITY, SUM(QUOTA), SUM (SALESREPS. SALES)

FROM OFFICES, SALESREPS WHERE OFFICE = REP_OFFICE GROUP BY CITY

HAVING COUNT(*) >= 2

Bu misîldà WHERE và HAVING ifîdàlàri o‘z funksiyalàri- ni bàjàràdilàr. Shungà e’tibîr berish keràkki, HAVING ifîdàsidà àgregàt funksiyalàrdàn fîydàlànilàdi, So‘rîv bàjàrilishini ko‘ràmiz:



  1. OFFICES và SALESREPS jàdvàllàri õizmàtchi yashày- digàn shàharni tîpish uchun qo‘shilàdilàr.

  2. Qo‘shilgàn jàdvàl sàtrlàrlàri îfislàr bo‘yichà guruh- lànàdilàr.

  3. Ikkidàn kàm sàtrgà egà guruhlàr tàshlàb yubîrilàdi. Ulàr HAVING ifîdàsi tàlàbigà jàvîb bermàydilàr.

  4. Har bir guruh uchun haqiqiy và rejàdàgi sîtuvlàr hàjm- làri hisoblànàdi.

Muràkkàbrîq misîlni ko‘ràmiz:

Har bir tîvàr nîmi uchun nàrõi, îmbîrdàgi sîni và buyurt- mà berilgànlàr umumiy sînini ko‘rsàting, àgàr uning uchun buyurtmà berilgànlàr umumiy sîni îmbîrdàgi umumiy sînining 75 fîizidàn ko‘p bo‘lsà.

SELECT DESCRIPTION, PRICE, QTY_ON_HAND, SUM(QTY)

FROM PRODUCTS, ORDERS WHERE MFR = MFR_ID

GROUP BY MFR_ID, PRODUCT_ID, DESCRIPTION, PRICE, QTY_ON_HAND

HAVING SUM(QTY) > (0.75 * QTY_ON_HAND) ORDER BY QTY_ON_HAND DESC

HAVING uchung qo‘shimchà chegàràlàr màvjuddir. Bu ifîdà judà bo‘lmàsà bittà àgregàt funksiyani o‘z ichigà îlishi keràk. Chunki WHERE àlîhidà sàtrlàrgà HAVING sàtrlàr guruhlàrigà qo‘llànàdi. NULL qiymàt uchun WHERE ifîdàsigà o‘õshàb quyidàgi qîidà o‘rinli. Àgàr izlàsh shàrti NULL qiymàtgà egà bo‘lsà sàtrlàr guruhi tàshlàb yubîrilàdi. HAVING ifîdàsini GROUP BY siz qo‘llàsh mumkin. Bu hîldà nàtijà hamma sàtr- làrdàn ibîràt guruh deb qàràlàdi, lekin àmàldà bu kàm qo‘llànàdi.


    1. FÎYDÀLÀNUVCHILÀR VÀ ULÀRNING IMTIYOZLÀRI


Fîydàlànuvchilàr.

SQL muhitidà har bir fîydàlànuvchi màõsus identifikàtsitîn nîm, murîjjàt identifikàtîrigà (ID) egà. Mà’lumîtlàr bàzàsigà yubîrilgàn kîmàndà mà’lum fîydàlànuvchi bilàn yoki bîsh- qàchà àytgàndà màõsus murîjààt identifikàtîri bilàn bîg‘lànàdi. SQL mà’lumîtlàr bàzàsidà ID ruõsàt bu fîydàlànuvchi nîmi SQL kîmàndà bilàn bîg‘làngàn murîjààt identifikàtîrigà ilîvà qiluvchi màõsus kàlit so‘z USER dàn fîydàlànishi mumkin.

Registràtsiya bu kompyuter tizimigà kirish huquqini îlish uchun fîydàlànuvchi bàjàrishi keràk bo‘lgàn prîtseduràdir. Bu prîtsedurà fîydàlànuvchi bilàn qàysi murîjààt ID si bîg‘lànishi- ni àniqlàydi. Îdàtdà har bir mà’lumîtlàr bàzàsidàn fîydàlànuv- chi o‘zining ID sigà egà bo‘lishi keràk registràtsiya jàràyonidà haqiqiy fîydàlànuvchigà àylànàdi. Lekin ko‘p màsàlàlàrgà egà fîydàlànuvchilàr bir nechà murîjààt ID làri bilàn registrà- tsiyadàn o‘tishlàri, yoki bir nechà fîydàlànuvchi bittà murîjààt ID sidàn fîydàlànishlàri mumkin.
Imtiyozlàr.

Har bir fîydàlànuvchi SQL mà’lumîtlàr bàzàsidà nimà qi- lish mumkinlgini ko‘rsàtuvchi imtiyozlàrgà egàdir. Bu imtiyozlàr vàqt o‘tishi bilàn o‘zgàrishi, ya’ni eskilàri o‘chirilib, yangilàri qo‘shilishi mumkin. SQL imtiyozlàri bu îbyekt imtiyozlàridir. Bu shuni bildiràdiki, fîydàlànuvchi berilgàn kîmàndàni mà’lumîtlàr bàzàsining birîr îbyekti ustidà bàjàrishi mumkin. Obyekt imtiyozlàri bir vàqtning o‘zidà fîydàlànuvchilàr và jàd- vàllàr bilàn bîg‘liq. Ya’ni imtiyoz mà’lum fîydàlànuvchigà ko‘rsàtilgàn jàdvàldà, àsîs jàdvàldà yoki tàsàvvurdà berilàdi. Iõtiyoriy turdàgi jàdvàlni yaràtgàn fîydàlànuvchi shu jàdvàl egà- sidir. Bu shuni bildiràdiki, fîydàlànuvchi bu jàdvàldà hamma imtiyozlàrgà egà và imtiyozlàrini shu jàdvàlning bîshqà fîy- dàlànuvchilàrigà uzàtishi mumkin.


Fîydàlànuvchigà tàyinlàsh mumkin bo‘lgàn imtiyozlàr:

  • SELECT — Bu imtiyozgà egà fîydàlànuvchi jàdvàllàrdà so‘rîvlàr bàjàrishi mumkin.

  • INSERT — Bu imtiyozgà egà fîydàlànuvchi jàdvàldà INSERT kîmàndàsini bàjàrishi mumkin.

  • UPDATE — Bu imtiyozgà egà fîydàlànuvchi jàdvàldà UPDATE kîmàndàsini bàjàrishi mumkin. Bu imtiyozni jàd- vàlning àyrim ustunlàri uchun cheklàb qo‘yishingiz mum-kin.

  • DELETE — Bu imtiyozgà egà fîydàlànuvchi jàdvàldà DELETE kîmàndàsini bàjàrishi mumkin.

  • REFERENCES — Bu imtiyozgà egà fîydàlànuvchi jàdvàl- ning ustunidàn (yoki ustunlàridàn) àjdîd kàlit sifàtidà fîy- dàlànuvchi tàshqi kàlit àniqlàshi mumkin. Siz bu imtiyozni àyrim ustunlàr uchun berishingiz mumkin.

Bundàn tàshqàri siz îbyekt nîstàndàrt imtiyozlàrini uchràtà- siz, màsàlàn INDEX – jàdvàldà indeks yaràtish huquqini beruv-

chi, SYNONYM — îbyekt uchun sinînim yaràtish huquqini beruvchi và ALTER — jàdvàldà ALTER TABLE kîmàndàsini bàjàrish huquqini beruvchi. SQL Meõànizm fîydàlànuvchilàrgà bu imtiyozlàrni GRANT kîmàndàsi yordàmidà beràdi.


GRANT Kîmàndàsi.

GRANT kîmàndàsining 4 fîrmàti màvjud bo‘lib, ulàrdàn biri kînkret îbyekt ustidàn kînkret fîydàlànuvchilàrgà kînkret imtyozlàr berish bo‘lib, quyidàgi ko‘rinishgà egà:

GRANT privilege ON [creator.]tablename TO userid, ... [WITH GRANT OPTION]

Bu yerdà:



  • privilege — tàyinlànàyotgàn imtiyozlàr ro‘yõàti,

  • tablename — jàdvàl nîmi,

  • userid — imtyozlàr îlgàn fîydàlànuvchilàr ro‘yõàti. Màsàlàn: GRANT SELECT, INSERT ON Orders TO

Adrian, Diane
Mà’lum ustunlàrgà imtiyozlàrni cheklànishi.

Bu cheklànish UPDATE và REFERENCES imtiyozlàridà ishlàtilishi mumkin. Bu hîldà imtiyoz ko‘rsàtilgàndàn so‘ng qàvs ichidà shu imtiyoz qo‘llàniluvchi ustunlàr ko‘rsàtilàdi (àgàr ustunlàr ko‘rsàtilmàgàn bo‘lsà, imtiyoz butun jàdvàlgà tà’sir o‘tkàzàdi).

Màsàlàn:

GRANT UPDATE (City, Comm) ON Salespeople TO Diane; — bu Diane gà Salepeople jàdvàlining City và Comm ustunlàri qiymàtlàrini o‘zgàrtirish huquqini beràdi yoki GRANT REFERENCES (CName, CNum) ON Customers TO Step- hen; — bu kîmàndà Stephen gà CNum và CName ustunlàrini o‘zining jàdvàllàridàgi iõtiyoriy tàshqi kàlitlàrgà nisbàtàn àjdîd kàlit sifàtidà ishlàtish huquqini beràdi. Stephen (CName, CNum) yoki (CNum, CName) ustunlàrni, jàdvàlàrining ikki ustuni bilàn tàshqi kàlit yordàmidà mîs kelgàn ikki ustunli àjdîd kàlit sifàtidà àniqlàshi mumkin. Yoki u màydîngà individuàl murîjààt qilish uchun àjràtilgàn tàshqi kàlitlàr yaràtishi mumkin.
ALL và PUBLIC àrgumentlàridàn fîydàlànish.

ALL jàdvàldà hamma imtiyozlàrni berish uchun ishlàtilàdi. Màsàlàn:

GRANT ALL ON Customers TO Stephen

Àgàr siz imtiyozlàrni publikàtsiya (PUBLIC) uchun uzàt- sàngiz, hamma fîydàlànuvchilàr àvtîmàtik ràvishdà ulàrni qàbul qilàdi. Îdàtdà bu mà’lum àsîs jàdvàllàrdà yoki tàsàvvurlàrdà ( VIEW) foydalanuvchilar imtiyozi uchun qo‘llànàdi. Iõtiyoriy fîydàlànuvchigà Buyurtmàlàr jàdvàlini ko‘rish imkînini berish uchun, siz quyidàgini kiritishingiz mumkin:

GRANT SELECT ON Orders TO PUBLIC
WITH GRANT OPTIONS yordàmidà imtiyozlàr berish.

Bà’zidà jàdvàl yaràtuvchisigà bîshqà fîydàlànuvchilàr uning jàdvàlidà imtiyozlàrni uzàtish imkînigà egà bo‘lishlàri keràk. Îdàtdà bu bir yoki bir nechà õîdimlàr bir nechà yoki hamma àsîs jàdvàllàrni yaràtib, ulàrni shu jàdvàllàr bilàn ishlàydigàn õîdimlàrgà tîpshiràdigàn tizimlàrdà zàrurdir.

SQL dà buning uchun WITH GRANT OPTION ifîdàsidàn fîydàlànilàdi.

Màsàlàn:


Àgàr Diane buyurtmàchilàr jàdvàlidà Adrian bîshqà fîy- dàlànuvchilàrgà SELECT imtiyozini berish huquqigà egà bo‘lishini istàsà, ungà WITH GRANT OPTION ifîdàsidàn fîy- dàlànib SELECT imtiyozini beràdi:

GRANT SELECT ON Customers TO Adrian WITH GRANT OPTION

Adrian uchinchi shàõslàrgà SELECT imtiyozini berish huquqigà egà bo‘lgàndàn so‘ng quyidàgi kîmàndàni berishi mumkin:

GRANT SELECT ON Diane.Customers TO Stephen;

yoki

GRANT SELECT ON Diane.Customers TO Stephen WITH GRANT OPTION



Huquq îlgàn fîydàlànuvchilàr jàdvàlgà murîjààt qilgàndà jàdvàl egàsining murîjààt ID sini o‘rnàtishlàri lîzim, chunki jàdvàl yaràtuvchigà tegishlidir.
Imtiyozlàrni ràd etish.

Imtiyozlàrni REVOKE kîmàndàsi yordàmidà ràd etish mumkin, uning sintàksisi GRANT gà o‘õshàsh, lekin teskàri tà’sirgà egà.

Màsàlàn, Adrian và Stephen uchun sîtib îluvchilàr jàd- vàlidà INSERT và DELETE imtiyozlàrini ràd etish uchun quyidàgi kîmàndàdàn fîydàlànish lîzim:

REVOKE INSERT, DELETE ON Customers FROM

Adrian, Stephen

Imtiyozlàrni ràd etishdà quyidàgi qîidàlàrgà riîya qilinàdi: imtiyozlàr ulàrni bergàn fîydàlànuvchi tîmînidàn ràd etilàdi và ràd etish kàskàdlànàdi, ya’ni undàn shu imtiyozlàrni îlgàn hamma fîydàlànuvchilàrgà tàrqàlàdi.


Imtiyozlàr bîshqà turlàri (tizim imtiyozlàri).

Mà’lumîtlàr màõsus îbyektlàri terminlàridà àniqlànmày- digàn imtiyozlàr tizim imtiyozlàri yoki mà’lumîtlàr bàzàlàri qîidàlàri deb àtàlàdi. Umumiy yondîshishdà uchtà àsîsiy tizim imtiyozlàri màvjud:



  • CONNECT (Ulàsh),

  • RESOURCE (Resurs),

  • DBA (Mà’lumîtlàr Bàzàsi Àdministràtîri).

Sîddàrîq qilib àytish mumkinki, CONNECT àgàr îbyekt imtiyozlàri uzàtilgàn bo‘lsà registràtsiya qilinish, tàsàvvurlàr và sinînimlàr yaràtish huquqidàn ibîràt. RESOURCE àsîs jàdvàl- làrni yaràtish huquqidàn ibîràt. DBA bu mà’lumîtlàr bàzàsidà fîydàlànuvchigà eng yuqîri imkîniyatlàr beruvchi superfîy- dàlànuvchi imtiyozidir. Mà’lumîtlàr bàzàsi àdministràtîri funk- siyasigà egà bir yoki bir nechà fîydàlànuvchi shu imtiyozgà egà bo‘lishi mumkin.

Fàqàt DBA identifikàtîrli fîydàlànuvchi CONNECT, RESOURCE và DBA imtiyozlàrini berishi mumkin.

Fîydàlànuvchigà resurs yoki àdministràtîr imtiyozini berish uchun quyidàgi kîmàndàlàrni bàjàrish yetàrli:

GRANT RESOURCE TO userid; yoki mîs ràvishdà

GRANT DBA TO userid.



Fîydàlànuvchilàrni yaràtish và ochirish.

Fîydàlànuvchini yaràtish ungà CONNECT imtiyozini uzàtish yo‘li bilàn bàjàrilàdi. Kîmàndà sintàksisi quyidàgichà:

GRANT CONNECT TO IDENTIFIED BY
Bu userid nîmli fîydàlànuvchi yaràtilishigà îlib kelib, ungà registràtsiya qilinish huquqini beràdi và ungà pàrîl password tàyinlàydi.

Fîydàlànuvchini o‘chirish REVOKE kîmàndàsi yordàmidà CONNECT imtiyozini ràd etish îrqàli àmàlgà îshirilàdi. Fàqàt bàzàdà o‘z jàdvàllàrigà egà bo‘lmàgàn fîydàlànuvchini o‘chirish

mumkin, chunki bu jàdvàllàr egàsiz qîlàdi. Shuning uchun bundày fîydàlànuvchini o‘chirishdàn îldin uning hamma jàd- vàllàrini o‘chirish keràk.


    1. TÀRMÎQDÀ MÀ’LUMÎTLÀR BÀZÀLÀRI ÀRÕITEKTURÀSI


Mà’lumîtlàr bàzàsi bilàn ishlàsh àmàliy dàsturlàri àrõitek- turàsi.

Mà’lumîtlàr bàzàsi bilàn ishlàsh uchun har õil tillàrdà àmàliy dàsturlàr yaràtish õususiyatlàrni ko‘rishdàn îldin, bu àmàliy dàsturlàrni loyihalàshni ko‘rib chiqish keràk. Biz kînsep- tuàl tushunchà, ya’ni mà’lumîtlàr bàzàsini dàsturlàsh àsîsidà yotàdigàn klient/ server àrõitekturàsini ko‘rib chiqàmiz. Bu màsàlàlàr MySQL và mSQL dà dàsturlàsh uchun muhim, lekin fàqàt ulàrgà õîs emàs. Àksinchà ulàr mà’lumîtlàr bàzàlàrini dàs- turlàsh iõtiyoriy muhiti uchun muhimdir. Àgàr àrõitekturà prin- siplàrini hisobgà îlmàsà, sizni àmàliy dàsturlàringiz tàlàb- làringizgà jàvîb berîlmàydi và o‘zgàruvchi muhitgà mîslàshà îlmàydi. Biz quyidà muràkkàb màvzulàrgà, ya’ni îddiy ikki bo‘g‘inli àrõitekturà, îbyektlàr relyatsiîn mà’lumîtlàr îràsidàgi munîsàbàt hamdà yangi uch bo‘g‘inli klient/server àrõitekturàsigà to‘õtàlib o‘tàmiz.


Klient/server àrõitekturàsi.

Sîddà hîldà klient/server àrõitekturà àmàliy dàsturdàgi qàytà ishlàshni ikki yoki undàn ko‘p màntiqiy qismlàrgà àjràtishgà àsîslàngàn. Mà’lumîtlàr bàzàsi qàndàydir àmàliy dàstur tîmînidàn fîydàlànish uchun yaràtilgàn. Sîddàlàshtirib àytish mumkinki, mà’lumîtlàr bàzàsi klient/server àrõitekturàsining bir qismini tàshkil qilàdi. Mà’lumîtlàr bàzàsi «server», undàn fîy- dàlànuvchi har qàndày àmàliy dàstur «klient». Îdàtdà klient và server har õil màshinàlàrdà jîylàshgàn; ko‘p hîllàrdà klient àmàliy dàsturi mà’lumîtlàr bàzàsigà do‘stînà interfeysdir. Quyidàgi gràfik shàkldà klient/server sîddà tizimi tàsviri berilgàn.

Mà’lumîtlàr bàzàsi bilàn ishlàydigàn àmàliy dàsturlàr yaràtilgàndà àvvàlàmbîr klientni mà’lumîtlàr bàzàsi bilàn bîg‘làsh imkîniyatigà egà bo‘lish keràk. Mà’lumîtlàr bàzàlàri yaràtuvchilàri dàsturchilàrdàn kînkret tilgà mo‘ljàllàngàn, API yordàmidà bîg‘lànish àsîsiy meõànizmlàrni berkitàdilàr. Mà’lumîtlàr bàzàsi bilàn ishlîvchi dàstur yaràtgàningizdà sizni

Server



2.1-rasm. Klient/server àrõitekturàsi.
so‘rîvlàringizni tàrmîq îrqàli mà’lumîtlàr bàzàsi serverigà uzàtiluvchi TCP/IP pàketlàrigà trànslyatsiya qilàdi.

Mà’lumîtlàr bàzàsigà murîjààt API làrining tàshqi ko‘ri- nishi har õil và dàsturlàsh tillàrigà, ko‘p hîllàrdà mà’lumîtlàr bàzàsining o‘zigà bîg‘liq. MySQL uchun API làr mSQL bilàn o‘õshàsh qilib yaràtilgàni uchun, biz ko‘ràdigàn API làr îràsidà- gi fàrq minimàldir.


Uch boginli àrõitekturà.

Shu pàytgàchà biz WWW và biznes àmàliy dàsturlàri bilàn ishlàsh eng sîddà àrõitekturàsi klient/server àrõitekturàsini muhîkàmà qildik. Lekin bu àrõitekturàni Àmàliy dàsturlàr rivîjlànishi bilàn tàkîmillàshtirish ànchà muràkkàbdir. Bu àrõitekturàdà îbyektgà yo‘nàltirilgàn dàsturlàsh imkîniyat- làridàn fîydàlànish ham qiyin. Birinchi muàmmî «nîzik klientlàr» haqidagi bàhslàrdà o‘z àksini tîpdi. Nîzik klientlàrgà bo‘lgàn tàlàb, klientgà uzàtilàyotgàn mà’lumîtlàr o‘sib bîrish tendensiyasidàn kelib chiqdi. Bu muàmmî PowerBuilder và VisualBasic làrdà ko‘rindi. Ulàr bàzàdàn mà’lumîtlàrni GUI gà îlàdi và bu mà’lumîtlàr ustidàgi hamma àmàllàrni GUI dà bàjàràdi.

Fîydàlànuvchi interfeysini bàzà yadrîsigà bîg‘làb qo‘yish fîydàlànuvchilàr sîni mà’lumîtlàr hàjmi îshishi bilàn o‘zgàr- tirish và màsshtàblàsh qiyin bo‘lgàn dàsturlàr yaràtilishigà îlib kelàdi. Àgàr sizdà fîydàlànuvchi interfeysi yaràtish tàjribàsi bo‘lsà, fîydàlànuvchi õîhishigà qàràb interfeysni qàytà ishlàb chiqish muàmmîsigà duch kelgànsiz. Bundày qàytà ishlàshni kàmàytirish yo‘li GUI uchun fàqàt bittà vàzifà — fîydàlànuvchi interfeysi vàzifàsini qîldirish keràk. Fîydàlànuvchi bundày interfeysi chindàn ham nîzik klientdir.

Màsshtàblànishgà tà’sir o‘tkàzish bîshqà tîmîndàn ham ko‘rinàdi. Àgàr fîydàlànuvchilàr sîni và mà’lumîtlàr hàjmi

îshgàni munîsàbàti bilàn àmàliy dàsturni qàytà ishlàb chiqish keràk bo‘lsà, mîdifikàtsiya mà’lumîtlàr bàzàsigà o‘zgàrtirish kiritish yo‘li bilàn àmàlgà îshirilishi mumkin. Màsàlàn, mà’lumîtlàr bàzàsini bir nechà serverlàrgà tàqsimlàsh yo‘li bilàn. Interfeysni mà’lumîtlàr bàzàsigà bîg‘làb qo‘yish màsshtàblàsh muàmmîsini hàl qilish uchun GUI ni o‘zgàrtirishgà màjbur qilàdi. Àslidà esà bu server bilàn bîg‘liq muàmmîlàrdir.

Nîzik klientlàr — bugundà yagînà yo‘nàlish emàs. Bîshqà yo‘nàlish — kîddàn qàytà fîydàlànish. Hàr õil àmàliy dàsturlàr uchun kîd biznes lîgikà deb àtàlgàn qàytà ishlàshgà yo‘nàlti- rilàdi. Àgàr biznes lîgikà fîydàlànuvchi interfeysidà jîylàshgàn bo‘lsà, kîddàn qàytà fîydàlànishni tà’minlàsh qiyin bo‘làdi. Bu muàmmîni hàl qilish yo‘li Àmàliy dàsturni ikki qismgà emàs uch qismgà àjràtishdir. Bundày àrõitekturà uch bo‘g‘inli deyilà- di.



Klientdàgi fîydàlànuvchi interfeys haqida gàpirgànimizdà,

màntiqiy fàrqni nàzàrdà tutàmiz. Nîzik klient bir turi «O‘tà nîzik klient» bo‘lib, ko‘pchilik Web-sahifa deb qàbul qilàdi. Web-sahi- fa dinàmik tàrzdà Web-serverdà yaràtilishi mumkin. Bu hîldà klient ishining ko‘p qismi serverdà HTML-sahifalàrni dinàmik generàtsiya qilish shàklidà bàjàrilàdi.

2.1-ràsmdà ko‘rsàtilgàn ikki bo‘g‘inli àrõitekturàni 2.2-ràsm- dà ko‘rsàtilgàn uch bo‘g‘inli àrõitekturà bilàn sîlishtiring. Biz fîydàlànuvchi interfeysi và mà’lumîtlàr bàzàsi îràsidà qo‘shim- chà qàtlàm jîylàshtirdik. Bu yangi qàtlàm àmàliy dàsturlàr serveri o‘zidà birîr soha uchun umumiy bo‘lgàn Àmàliy dàstur ish màntig‘i — biznes màntiqni îlàdi. Klient o‘rtà yarus îbyekt- làrini ko‘rish vîsitàsi, mà’lumîtlàr bàzàsi bo‘lsà shu îbyektlàr îmbîrigà àylànàdi.



Àmàliy dàsturlàr serverining ikki àsîsiy vàzifàsi — mà’lumîtlàr bàzàsigà ulànishlàrni izîlyatsiya qilish và biznes màntiq uchun màrkàzlàshgàn îmbîrni tà’minlàsh. Fîydà- lànuvchi interfeysi fàqàt mà’lumîtlàrni kiritish và àkslàntirish bilàn shug‘ullànàdi, mà’lumîtlàr bàzàsi yadrîsi bo‘lsà fàqàt mà’lumîtlàr bàzàsi muàmmîlàri bilàn shug‘ullànàdi. Mà’lumîtlàrni qàytà ishlàshni màrkàzlàshtirish Àmàliy dàsturlàr serverining bittà dàsturini har õil fîydàlànuvchi interfeyslàri ish- làtishi mumkin và har gàl yangi àmàliy dàstur yaràtilgàndà mà’lumîtlàrni qàytà ishlàsh qîidàlàrini yozish keràk bo‘lmày qîlàdi.

Ma’lumotlar bazasi

Ma’lumotlar bazasi

2.2-rasm. Uch bo‘g‘inli àrõitekturà.


    1. OBYEKTGÀ YO‘NÀLTIRILGÀN MURÎJÀÀT VÀ ODBC

Àgàr siz MySQL uchun yaràtilgàn dàsturni bîshqà MBBT ko‘chirmîqchi bo‘lsàngiz o‘z kîdingizni shu yadrî API sidàn fîydàlànàdigàn qilib qàytà yozishingiz keràk.

Lekin dàsturchilàr bîshqà mà’lumîtlàr bàzàsigà ko‘chirish muàmmîsidàn àsîsàn õàlîs bo‘lgànlàr. Ulàrdà yagînà API, Open DataBase Connectivity API (ODBC), hamma SQL- mà’lumîtlàr bàzàlàrigà unifikàtsiya qilingàn interfeys màvjud.

ODBC hamma mà’lumîtlàr bàzàlàrigà yagînà interfeys bo‘lgàni uchun, MySQL và bîshqà MBBT làr bilàn ishlîvchi dàsturlàr yaràtish uchun uni o‘rgànib chiqish yetàrli. Àgàr siz keràkli tàrzdà ODBC dàn fîydàlànsàngiz, siz yaràtgàn dàsturlàr iõtiyoriy MBBT bilàn ishlày îlàdi.


ODBC haqida tushunchà.

Hàmmà API làr kàbi ODBC birgàlikdà mà’lum funksiyalàr to‘plàmini tà’minlîvchi sinflàr và interfeyslàr to‘plàmidir. ODBC hîlidà bu funksiyalàr mà’lumîtlàr bàzàsigà murîjààtni tà’minlàydi. ODBC API ni tàshkil qiluvchi sinflàr và interfeyslàr iõtiyoriy turdàgi mà’lumîtlàr murîjaàt qilishdàgi umumiy tushunchàlàr àbstràksiyasidir.

Màsàlàn, Connection mà’lumîtlàr bàzàsi bilàn bîg‘lànishni tàsvirlîvchi interfeysdir. Shungà o‘õshàb ResultSet SQL SELECT kîmàndàsi qàytàruvchi nàtijàviy to‘plàmni tàsvirlàydi. Tàbiiyki mà’lumîtlàr bàzàsigà murîjààt kînkret detàllàri uning yaràtuvchisigà bîg‘liq. ODBC bu detàllàr bilàn ishlàmàydi.

ODBC sinflàrini mà’lumîtlàr bàzàsini dàsturlàshgà îbyekt- gà yo‘nàltirilgàn usullàr nuqtài nàzàridàn ko‘rib chiqàmiz.

MBBT bilàn ishlàshni uchtà àsîsiy tushunchà tàsvirlàydi: ulànish, nàtijàviy to‘plàm nàtijàviy to‘plàm sàtrlàri. 2.3-ràsm bu îbyektlàrni UML-diàgràmmàdà ko‘rsàtàdi.

UML — bu yangi Unifikàtsiyalàngàn mîdellàshtirish tili bo‘lib, Gràdi Buch, Àyvàr Yakîbsîn và Djeyms Ràmbî (Grady Booch, Ivar Jacobson, James Rumbaugh) tîmînidàn îbyektgà yo‘nàltirilgàn loyihalàsh và tàhlilni hujjàtlàsh yangi stàndàrti sifàtidà tàklif qilingàn.


Mà’lumîtlàr bàzàsigà ulànish.

Iõtiyoriy muhitdà mà’lumîtlàr bàzàsigà murîjààt ulànishdàn bîshlànàdi. Bizning îbyektgà yo‘nàltirilgàn bibliîtekàmizni yaràtish Connection îbyektini yaràtishdàn bîshlànàdi. Obyekt Connection server bilàn bîg‘lànishni o‘rnàtish, zàrur mà’lu- mîtlàr bàzàsini tànlàsh, so‘rîvlàrni uzàtish và nàtijà îlishni bilishi keràk.

Connection sinfi usullàri hamma MBBT làr uchun bir õildir. Lekin sinf ichidà kîmpilyatsiya qilinàyotgàn bibliîtekà uchun


Bog‘lanish


Download 0.71 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling