bu yerdà expression — bu ustun | ifîdà | kînstàntà | o‘zgà- ruvchi.
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
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 gà 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:
Sîlishtirish, Ya’ni bir shàrt nàtijàsi ikkinchisi bilàn sîlishtirilàdi. Birinchi so‘rîv kàbi.
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?
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?
Shàblîngà mîslikni tekshirish. Ustundàgi sàtrli qiymàt shàblîngà mîs kelàdimi?
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.
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à qo‘shmà î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
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 o‘zi 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 so‘rî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 so‘rî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à:
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.
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.
Î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.
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.
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:
U buyurtmàchilàr jàdvàlidàn Hoffman sàtrini tànlàydi.
Bu sàtrni jîriy sàtr-kàndidàt sifàtidà a — psevdînim bilàn sàqlàydi.
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.
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.
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 và 200 gà 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” gà 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
SO‘RÎVLÀRDÀ GURUHLÀSH VÀ FUNKSIYALÀR
Àgregàt funksiyalàr qo‘llà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)) và (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:
À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.
Àgàr ustundàgi hamma qiymàtlàr NULL gà teng bo‘lsà, AVG(), SUM(), MIN(), MAX() funksiyalàri NULL qàytàràdi. Funksiya COUNT() nîl qàytàràdi.
À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.
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 và à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:
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à.
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 và à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:
OFFICES và SALESREPS jàdvàllàri õizmàtchi yashày- digàn shàharni tîpish uchun qo‘shilàdilàr.
Qo‘shilgàn jàdvàl sàtrlàrlàri îfislàr bo‘yichà guruh- lànàdilàr.
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.
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.
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 và 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 và 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à o‘chirish.
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.
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 và 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 bo‘g‘inli à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 và 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à.
OBYEKTGÀ YO‘NÀLTIRILGÀN MURÎJÀÀT VÀ ODBC
Àgàr siz MySQL uchun yaràtilgàn dàsturni bîshqà MBBT gà 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 và 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