Matematika Fakulteti "AxbOrOt xAvfsizligi"
Download 472.62 Kb. Pdf ko'rish
|
Kurs ishi mavzular(1-u)
- Bu sahifa navigatsiya:
- II-bob.SQL EXCEPT va INTERSECT operatorlari
- Xulosa
- Kurs ishidan maqsad
1
Mirzo UlUg’bek nomidagi O’zbekistOn Milliy Universiteti Matematika Fakulteti “AxbOrOt xAvfsizligi” yO’nAlishi 3-bosqichi tAlAbAsi O’ktAmOv DAvlAtjOnning Berilganlar bazasi xavfsizligi fanidan Kurs ishi
“EXCEPT,INTERSECT,VIEW operatorlari”
Toshkent – 2020y
2
Mundarija Kirish………………………………………………………………………..3 I-bob. SQL server operatorlari…………………………….......................5 1.1 Sql haqida tushincha …………………...…………………………5 1.2 Sql VIEW operatori………………………………………………...6
2.1 Sql exsept operatori……..………………..…………………...........11 2.2 Sql intersect operatori………………….………………..………….16
3
Kirish Axborotlashgan jamiyat tezlik bilan shakllanib bormoqda. Axborot dunyosida davlat chegaralari degan tushuncha yo‘qolib bormoqda. Jahon kompyuter tarmog‘i davlat boshqaruvini tubdan o‘zgartirmoqda. Hududiy joylashishidan qat’i nazar, kundalik hayotimizga turli xildagi axborotlar Internet xalqaro kompyuter tarmog‘i orqali kirib keldi. Shuning uchun ham mavjud axborotlarga noqonuniy kirish, ulardan foydalanish va o‘zgartirish, yo‘qotish kabi muammolardan himoya qilish dolzarb masala bo‘lib qoldi. Axborotlashtirish sohasidagi davlat siyosati axborot resurslari, axborot texnologiyalari va axborot tizimlarini rivojlantirish hamda takomillashtirishning zamonaviy jahon tamoyillarini hisobga olgan holda milliy axborot tizimini yaratishga qaratilgan. Zamonaviy dunyoda hayotimizni kompyutersiz tasavvur qila olmaymiz. Kundalik turmushimizning barcha yo’nalishlari (ta’lim tizimi, ishlab chiqarish, tibbiyot, iqtisod va hokazo)da axborotlarni qabul qilish, qayta ishlash va uzatish ishlarini tez va so’z amalga oshirishda, kompyuter texnologiyalaridan keng foydalanmoqdamiz. Hоzirdа “ахbоrоt tushunchаsi” sоtib оlish, sоtish, birоr bоshqа tоvаrgа аlmаshtirish mumkin bo’lgаn mахsus tоvаr bеlgisi sifаtidа ishlаtilmоqdа. Shu bilаn birgа ахbоrоtning bахоsi ko’p хоllаrdа uning uzi jоylаshgаn kоmpyutеr tizimining bахоsidа bir nеchа yuz vа ming bаrоbаrgа оshib kеtmоqdа. Shuning uchun tаmоmilа tаbiiy hоldа ахbоrоtni ungа ruхsаt etilmаgаn хоldа kirishdаn, qаsddаn uzgаrtirishdаn, uni o’g’irlаshdаn, yuqоtishdаn vа bоshqа jinоiy хаrаktеrlаrdаn хimоya qilishgа kuchli zаrurаt tug’ilаdi. Kоmpyutеr tizimlаri vа tаrmоqlаridа aхbоrоtni хimоya оstiga оlish dеgаndа, bеrilаyotgаn, sаqlаnаyotgаn vа qаytа ishlаnilаyotgаn ахbоrоtni ishоnchliligini tizimli tаrzdа tа’minlаsh mаksаdidа turli vоsitа vа usullаrni qullаsh, chоrаlаrini ko’rish vа tаdbirlаrni аmаlgа оshirishni tushunish qаbul qilingаn.
4
Dasturlarini ishlab chiqish ko'pincha mijozlar tajribasiga qaratiladi va ko'pincha foydalanuvchilar uchun zarur funktsional imkoniyatlar va sifatli interfeysni taqdim etish bilan boshlanadi. Ko'pincha, dasturlarning server integratsiyasi tizimiga e'tibor qaratiladi. Shu bilan birga, xavfsizlik masalalari ko'pincha e'tiborsiz qoldiriladi yoki oxirgi bosqichga - dasturni tekshirish bosqichiga qoldiriladi.Turli kompaniyalarning ko'p yillik tajribasi shuni ko'rsatadiki, Veb dasturlari va serverlarni xavfsizligi ishlab chiqish jarayonining dastlabki bosqichlarida bo’lishi kerak. Kurs ishidan maqsad:Ushbu kurs ishida biz Sql nima ekanligini tushuntirib beramiz,operator misollarni tasvirlab ko’rsatamiz, turli xil Sql serverdan operatorlar except, intersect,view orqali foydalanishni tushintirib beramiz.Hozirgi kunda barcha malumotlarimiz sql server bazasida saqlanmoqda.Biz shunday operatorlardan foydalanib serverni ishini yengillatamiz,yaniy ishini osonlashtiramiz.
5
I-bob.SQL server operatorlari 1.1 Sql haqida tushincha? SQL (talaffuz qilingan "ess-que-el") Strukturalangan so'rovlar tilini anglatadi. SQL ma'lumotlar bazasi bilan bog'lanish uchun ishlatiladi. ANSI (Amerika milliy standartlar instituti) ma'lumotlariga ko'ra, bu ma'lumotlar bazasini boshqarish tizimlari uchun standart til. SQL bayonotlari ma'lumotlar bazasida ma'lumotlarni yangilash yoki ma'lumotlar bazasidan ma'lumotlarni olish kabi vazifalarni bajarish uchun ishlatiladi. SQL-dan foydalanadigan ba'zi bir relyatsion ma'lumotlar bazasini boshqarish tizimlari: Oracle, Sybase, Microsoft SQL Server, Access, Ingres va boshqalar. Ko'pgina ma'lumotlar bazalari tizimlari SQL-dan foydalansa ham, ularning aksariyati o'zlarining shaxsiy mulkiy kengaytmalariga ega, ular odatda faqat o'z tizimlarida qo'llaniladi.Biroq, "Select", "Insert", "Update", "Delete", "Create" va "Drop" kabi standart SQL buyruqlari. ma'lumotlar bazasidan bajarilishi kerak bo'lgan deyarli barcha ishlarni bajarish uchun ishlatilishi mumkin. Ushbu qo'llanmada sizga ushbu buyruqlarning har biri asoslari bo'yicha ko'rsatmalar beriladi, shuningdek ularni SQL Interpreter yordamida mashq qilish imkoniyati beriladi.SQL - bu ma'lumotlar bazasida ma'lumotlarni saqlash, boshqarish va olish uchun standart til.Bizning SQL qo'llanmamiz sizga SQL-dan MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres va boshqa ma'lumotlar bazalarida foydalanishni o'rgatadi.SQL serversi bu sizning ma'lumotlar bazangizni yo'q qilishga olib keladigan kodni kiritish usulidir.SQL serversi veb-xakerlik qilishning eng keng tarqalgan usullaridan biridir.SQL server - bu veb-sahifaga kirish orqali zararli kodni SQL bayonotlariga joylashtirish.SQL serversi odatda foydalanuvchidan foydalanuvchi nomi / foydalanuvchi identifikatori kabi kirishni so'rashda ro'y beradi va foydalanuvchi ism / id o'rniga o'rniga, siz bilmagan holda sizning ma'lumotlar bazangizda ishlaydigan SQL bayonotini beradi.
6
1.2 Sql VIEW operatori. SQL CREATE VIEW bayonoti SQL-da ko'rinish SQL bayonotining natijalar to'plamiga asoslangan virtual jadvaldir.Ko'rinishda haqiqiy jadval kabi qatorlar va ustunlar mavjud. Ko'rinishdagi maydonlar - bu ma'lumotlar bazasidagi bir yoki bir nechta haqiqiy jadvallarning maydonlari. Siz ko'rinishga SQL, WHERE va JOIN funktsiyalarini qo'shishingiz va ma'lumotlarni bitta jadvaldan kelgan kabi taqdim etishingiz mumkin. Sintaksisni yarating CREATE VIEW view_name AS SELECT column1, column2, ...
FROM table_name WHERE condition; Izoh: VIEW har doim eng so'nggi ma'lumotlarni ko'rsatadi! Foydalanuvchi ko'rinishi so'ralganda har safar SQL so'rovidan foydalanib ma'lumotlar bazasi mexanizmi ma'lumotlarni qayta yaratadi. SQL CREATE VIEWga misollar Quyidagi SQL Braziliyadagi barcha xaridorlarni ko'rsatadigan ko'rinishni yaratadi: Misol CREATE VIEW [Brazil Customers] AS SELECT CustomerName, ContactName FROM Customers WHERE Country = 'Brazil'; Yuqoridagi ko'rinishni quyidagicha so'rashimiz mumkin: Misol
SELECT * FROM [Brazil Customers]; Quyidagi SQL "Mahsulotlar" jadvalidagi har bir mahsulotni o'rtacha narxdan yuqori narx bilan tanlaydigan ko'rinishni yaratadi:
7
Misol CREATE VIEW [Products Above Average
Price] AS SELECT ProductName, Price FROM Products WHERE Price > (SELECT AVG(Price) FROM Products); Yuqoridagi ko'rinishni quyidagicha so'rashimiz mumkin: Misol SELECT * FROM [Products Above Average Price]; SQL ko'rinishni yangilash Ko'rinishni CREATE yoki REPLACE VIEW buyrug'i bilan yangilash mumkin. SQL CREATE yoki ReplaCE VIEW sintaksisi CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition; Quyidagi SQL "Siti" ustunini "Braziliya mijozlari" ko'rinishiga qo'shadi: Misol CREATE OR REPLACE VIEW [Brazil Customers] AS SELECT CustomerName, ContactName, City
FROM Customers WHERE Country = 'Brazil'; SQL ko'rinishni o'chirish Ko'rish DROP VIEW buyrug'i bilan o'chiriladi. SQL DROP VIEW sintaksisi DROP VIEW view_name; Quyidagi SQL "Braziliya mijozlari" ko'rinishini pasaytiradi: MisolDROP VIEW [Brazil Customers]; 8
II-bob.SQL EXCERT va INTERSECT operatorlari.
ning UNION, EXCEPT va INTERSECT operatorlari bitta natija to'plamini yaratish uchun bir nechta SELECT iboralarini birlashtirishga imkon beradi. UNION operatori barcha qatorlarni qaytaradi. INTERSECT operatori natijalar to'plamidagi barcha qatorlarni qaytaradi. EXCEPT operatori faqat birinchi natijalar to'plamidagi, ammo ikkinchisida bo'lmagan qatorlarni qaytaradi. Oddiymi? Rob Sheldon ko'pgina misollar bilan barchasini tushuntiradi Ko'pincha siz ikkita yoki undan ko'p jadvallarni taqqoslash yoki so'rov natijalarini aniqlash uchun, qaysi ma'lumotlar bir xil ekanligini va qaysi biri emasligini aniqlash vazifasiga duch kelasiz. Bunday taqqoslashni amalga oshirishning eng keng tarqalgan usullaridan biri bu taqqoslashni istagan 9
natijalarning tegishli ustunlarini birlashtirish uchun UNION yoki UNION ALL operatoridan foydalanishdir. Agar siz ushbu operatorlarning ikkalasida o'rnatilgan cheklovlarga amal qilsangiz, siz turli xil ma'lumotlar bazalari yoki hatto turli xil serverlardan kelgan ma'lumot to'plamlarini birlashtirishingiz mumkin. UNION operatorida ikkita natijadan iborat har bir aniq qatorni o'z ichiga olgan natijani olasiz. Shu bilan birga, ikkala natijada mavjud bo'lgan umumiy ma'lumotlarni yoki bitta jadvalda mavjud bo'lgan boshqa jadvallarni emas, balki boshqa ma'lumotlarni qaytarish uchun UNION-dan foydalanish yanada qiyinlashadi. Kerakli natijalarni olish uchun, buni qanday qilish kerakligi mantiqiy doim ham aniq bo'lmasada, siz GROUP BY guruhida UNION HAMMA ishlatishingiz kerak. Siz xohlagan natijaga erishish uchun JOIN operatoridan foydalanish oson emas. . INTERSECT va EXCEPT operatorlarini kiriting. SQL Server 2005-dan boshlab, ushbu operatorlardan so'rovlarni birlashtirish va kerakli natijalarni olish uchun foydalanishingiz mumkin. Masalan, quyidagi rasmda ko'rsatilgandek ikkala ma'lumotlar to'plamiga mos keladigan qiymatlarni qaytarish uchun siz INTERSECT operatoridan foydalanishingiz mumkin. Rasmda INTERSECT operatori ikkala natijalar to'plamiga xos bo'lgan ma'lumotlarni qanday qaytarishini ko'rsatmoqda; umumiy ma'lumotlar ikki
10
doira kesishgan joy bilan ifodalanadi. Rasmda shuningdek, EXCEPT operatori qanday ishlashi ko'rsatilgan; faqat kesishgan maydon tashqarisidagi ma'lumotlar to'plamlaridan birida mavjud bo'lgan ma'lumotlar qaytariladi. Masalan, EXCEPT operatorining chap tomonida A to'plam ko'rsatilgan bo'lsa, faqat
B to'plamiga kirmagan qiymatlar qaytariladi. Yuqoridagi rasmda, bu ikki ma'lumotlar to'plamlari kesishgan qismdan tashqari chap doiradagi ma'lumotlar bo'lishi mumkin. Quyidagi o'qlar har xil ma'lumotlarning kombinatsiyasini qaytarish uchun qaysi operatordan foydalanishni aniqlaydi:
qaytarish uchun A EXCEPT B-dan foydalaning.
Faqat ikkita to'plamda bir-biriga mos keladigan ma'lumotlarni qaytarish uchun A INTERSECT B-dan foydalaning.
uchun B EXCEPT A dan foydalaning.
Uchala sohadagi ma'lumotlarni takrorlashsiz qaytarish uchun A UNION B dan foydalaning.
uchun A UNION ALL B-dan foydalaning.
Ikkala to'plamning bir-biriga zid bo'lmagan sohalarida ma'lumotlarni qaytarish uchun (A INTIONECT B) yoki (A EXCEPT B) Birlashmasidan (B EXCEPT A) tashqari foydalaning .
11
2.1 Sql exsect operatori. EXCEPT operatori bilan ishlash INTERSECT operatorini o'zlashtirganingizdan so'ng, siz ko'p jihatdan EXCEPT operatorini o'zlashtirdingiz. Oldin aytib o'tganimdek, EXCEPT operatori faqat birlashtirilgan jadvalda mos
bo'lmagan satrlarni qaytaradi. EXCEPT operatoridan foydalanganda eslash kerak bo'lgan muhim narsa shundan iboratki, u so'rovni qaysi tomonning joylashgan tomoni o'rtasida farq qiladi. Faqat so'rovdan operatorning chap tomonidagi ma'lumotlar qaytariladi (operatordan oldin). Bu qanday ishlashini namoyish qilish uchun bir misolni ko'rib chiqaylik. Quyidagi bayonotda yana ikkita so'rovni birlashtiraman, ulardan biri "Xodimlar" jadvalidan ma'lumotlarni va JobCandidate jadvalidan ma'lumotlarni oladigan:
SELECT BusinessEntityID FROM HumanResources.Employee EXCEPT SELECT BusinessEntityID FROM HumanResources.JobCandidate; Ushbu bayonnoma siz birinchi ikkita misolda ko'rgan INTERSECT qurilishi bilan deyarli bir xil, albatta, EXCEPT operatoridan foydalanish uchun tashqari. Shu bilan birga, operatorning chap tomonidagi so'rov ma'lumotlar "Ishchilar" jadvalidan olinayotganligi sababli, oxirgi natijalar to'plami JobCandidate jadvalini emas, balki faqat shu jadvaldagi ma'lumotlarni o'z ichiga oladi. Ma'lum bo'lishicha, Xodimlar jadvali 290 qatorni o'z ichiga oladi. Oldingi misollardan eslaysiz, 212 va 274 qiymatlari jadvaldagi ikkita satr JobCandidate jadvalidagi 212 va 274 qiymatlari bo'lgan BusinessEntityID qiymatlariga ega bo'lgan ikkita satrga mos keladi. yuqoridagi so'rov natijalari to'plamidan chiqarib tashlandi, aynan nima sodir bo'ladi. So'rov 1 dan 290 gacha bo'lgan
12
BusinessEntityID qiymatlariga ega 288 qatorni qaytaradi. Ammo 212 va 274 identifikatorlari ushbu natijalarga kiritilmagan. Keling, so'rovlar tartibini o'zgartirganda nima bo'lishini ko'rib chiqamiz, chunki men quyidagi misolda qilganman.
SELECT BusinessEntityID FROM HumanResources.JobCandidate EXCEPT SELECT BusinessEntityID FROM HumanResources.Employee;
E'tibor bering, JobCandidate jadvalidan ma'lumotlarni olib qo'yadigan so'rov endi birinchi bo'lib, ya'ni EXCEPT operatorining chap tomoniga joylashadi. Ushbu bayonotning natijalari, siz kutganingizdek, oldingi misoldan ancha farq qiladi. Qaytarilganlarning barchasi bitta NULL qiymatdir. Boshqacha qilib aytganda, natijalarga ko'ra, JobCandidate jadvalida ishchilar jadvalida bo'lmagan BusinessEntityID qiymati yo'q. Bu, albatta, aniq. Yuqorida INTERSECT operatoridan foydalanadigan CTE misolida bo'lgani kabi, siz ham EXCEPT operatorlari bilan CTE-larni ishlatishingiz mumkin. Ammo oxirgi misol ko'rsatib turibdiki, agar sizning CTE ma'lumotlaringizni qaytarmasa, sizning asosiy so'rovingiz ham hech qanday ma'lumotlarni qaytarib bermaydi (hech bo'lmaganda ichki qo'shilishdan foydalansangiz), ammo bu ikkala operatorda ham to'g'ri. Umuman olganda, siz ulardan qanday foydalanishingiz bo'yicha INTERSECT va EXCEPT operatorlari o'rtasida unchalik katta farq yo'q. Farq, albatta, natijada. INTERSECT har ikkala so'rov uchun ham umumiy bo'lgan satrlarni qaytaradi va EXCEPT faqat chap so'rovdagi satrlarni qaytaradi. Ikkala operator ham UNION va UNION HAMMA operatorlari ta'minlaydigan qo'shilish turlariga foydali qo'shimchalardir. SQL Server Books Online-dagi "EXCEPT va INTERSECT (Transact-SQL)" mavzusiga murojaat qilib, INTERSECT va EXCEPT operatorlari to'g'risida ko'proq ma'lumot olishingiz mumkin. 13
Agar siz kechki ovqatga bo'lgan, ammo tushlik qilmagan narsalarni qaytarib berishni xohlasangiz, siz yana EXCEPT operatoridan foydalanishingiz mumkin, ammo quyidagi misolda ko'rsatilganidek, so'rovlarning tartibini o'zgartirishingiz kerak.
SELECT item FROM Dinner EXCEPT SELECT item FROM Lunch; E'tibor bering, men avval ma'lumotlarni kechki ovqat ko'rinishidan olaman. Chapdagi chap ulanishdan foydalanish uchun yana jadvallarning tartibini o'zgartirish kerak bo'ladi:
SELECT dinner.item FROM dinner LEFT OUTER JOIN Lunch ON Dinner.item = Lunch.item WHERE Lunch.item IS NULL;
Kutilganidek SELECT ikkala bayonoti uchun ham natijalar bir xil: element olma
Baqlajonlar Salat
Biftek Vino
Ko'rinib turibdiki, EXCEPT operatori bilan bo'lgani kabi, men ham ikkita so'rovni INTERSECT operatori bilan bog'layman. Xuddi shu natijalarga ichki qo'shilish yordamida erishishingiz mumkin: Endi keling, qanday qilib ovqatlanish vaqtida ovqatlangan ro'yxatni qaytarishingizni ko'rib chiqaylik, lekin ikkala ovqat ham emas, boshqacha aytganda non, zaytun va qahvadan boshqa ovqatlangan ovqatlar. Quyidagi bayonotda men ikkita SELECT ko'rsatmalariga qo'shilish uchun UNION operatoridan foydalanaman: 14
SELECT item FROM (
SELECT item FROM Lunch EXCEPT SELECT item FROM Dinner ) Only_Lunch UNION
SELECT item FROM
( SELECT item FROM Dinner EXCEPT SELECT item FROM Lunch ) Only_Dinner; --Items you only ate once in the day.
E'tibor bering, birinchi bayonda faqat tushlik paytida iste'mol qilgan ovqatni olish mumkin, ikkinchisida esa faqat kechki ovqat uchun eyilgan ovqatni olish mumkin. Men bunga oldingi misollardagi kabi - EXCEPT operatoridan foydalangan holda erishaman. Keyin men ikkita natijalar to'plamiga qo'shilish uchun UNION operatoridan foydalandim. To'liq tashqi qo'shilish yordamida siz bir xil natijalarga erishishingiz mumkin:
SELECT COALESCE(Dinner.item, Lunch.item) AS item FROM Dinner FULL OUTER JOIN Lunch ON Dinner.item = Lunch.item WHERE Dinner.item IS NULL OR Lunch.item IS NULL;
Ikkala misolda ham bayonotlar quyidagi natijalarni beradi: element olma
Baqlajonlar Pivo
Kalamari Salat
15
Salami Biftek
Vino Shu vaqtdan boshlab, men SQL Server 2008 va AdventureWorks2008 ma'lumotlar bazasida mahalliy misollarda namunalarni ishlab chiqdim. Har bir misol, HumanResources sxemasining ikkala qismi bo'lgan xodimlar va JobCandidate jadvallari o'rtasida ma'lumotlarni taqqoslash uchun INTERSECT yoki EXCEPT operatoridan foydalanadi. Taqqoslash har bir jadvaldagi BusinessEntityID ustuniga asoslanadi. Xodimlar jadvalidagi BusinessEntityID ustuni birlamchi kalitdir. JobCandidate jadvalida BusinessEntityID ustuni - xodimlar jadvalidagi BusinessEntityID ustuniga murojaat qiladigan tashqi kalit. JobCandidate jadvalidagi ustun ham nol qiymatlarni berishga imkon beradi.
16
2.2 Sql intersect operatori. INTERSECT operatori bilan ishlash Yuqorida aytib o'tganimdek, so'rovlarni birlashtirish uchun INTERSECT operatoridan foydalanganda, faqat ikkita ma'lumotlar to'plamiga to'g'ri keladigan ma'lumotlar qaytariladi. Bu degani, Xodimlar va JobCandidate jadvallariga kelsak, natijalar to'plami faqat Ishchilar jadvalidagi BusinessEntityID qiymati JobCandidate jadvalidagi BusinessEntityID qiymatiga to'g'ri keladigan satrlarni o'z ichiga oladi. Quyidagi misolda, Men va WorkCandidate jadvallaridan ma'lumotlarni oladigan ikkita so'rovni yarataman va ushbu so'rovlarni birlashtirish uchun INTERSECT operatoridan foydalanaman :
SELECT BusinessEntityID FROM HumanResources.Employee INTERSECT SELECT BusinessEntityID FROM HumanResources.JobCandidate;
Birinchi SELECT iborasi, ko'rib turganingizdek, BusinessEntityID ustunini Ishchilar jadvalidan, ikkinchi SELECT bayonoti esa JobCandidate jadvalidan BusinessEntityID ustunini oladi. INTERSECT operatori ikkita
so'rovni birlashtiradi.Siz so'rovlarni birlashtirish uchun INTERSECT operatoridan foydalanganda (yoki EXCEPT), ustunlar soni ikkala so'rovda ham bir xil bo'lishi kerak va ustunlar bir xil tartibda bo'lishi kerak. Bundan tashqari, so'rovlar orasidagi mos keladigan ustunlar mos keladigan ma'lumotlar turlari bilan sozlanishi kerak. Yuqoridagi misol ushbu shartlarga javob beradi, chunki har bir so'rovda bir xil ma'lumot turiga (INT) bitta ustun keladi. Ushbu ikki so'rovni birlashtirish uchun INTERSECT operatoridan foydalanilganda, bayonot quyidagi natijalarni beradi: Ma'lum bo'lishicha, Xodimlar jadvali va JobCandidate jadvalida umumiy bo'lgan ikkita BusinessEntityID qiymati mavjud. Agar siz JobCandidate jadvalidagi 17
ma'lumotlarni ko'rib chiqsangiz, bu erda so'rov natijalari ushbu jadvaldagi ma'lumotlarga mos kelishini topasiz. Jadval faqat 13 qatorni o'z ichiga oladi va BusinessEntityID ustuni barchasi uchun NULL, ammo ikkita qatordan iborat. Ushbu satrlarda BusinessEntityID qiymati 212 va 274 ni tashkil qiladi. Va siz kutganingizdek, Xodimlar jadvalida BusinessEntityID qiymati 212 va 274 qiymatli satrlar mavjud. Shubhasiz, yuqoridagi misolda ko'rsatilgandek, ikkita so'rov natijalarini birlashtirish uchun INTERSECT operatoridan foydalanish oddiy jarayondir. Kalit, men aytganimdek, ikkita so'rovda SELECT ro'yxatlari bir-biriga mos kelishiga ishonch hosil qilishdir. Ammo, bu shuningdek so'rovlarni birlashtirish uchun INTERSECT operatoridan foydalanishning cheklashlaridan birini ta'kidlaydi - ya'ni ikkinchi so'rovga qo'shilmagan bitta so'rovga ustunlarni qo'shib bo'lmaydi. Agar har bir so'rovda bir nechta mos keladigan ustunlarni qo'shsangiz, satrning qaytarilishi uchun barcha ustun qiymatlari mos kelishi kerak. Masalan, siz har birida xodimlarning identifikatorlari, ismlari va familiyalari uchun ustunlar mavjud bo'lgan ikkita jadvaldan ma'lumotlarni olayapsizmi deylik. Agar o'sha uchta ustunga asoslangan ikkita jadvalga mos kelishni istasangiz, birinchi jadvaldagi uchta qiymat satr qaytarilishi uchun ikkinchi jadvalning uchta qiymati mos kelishi kerak. (Bu vaqtda siz o'zingizdan o'zingizning ma'lumotlar bazangizdagi barcha ortiqcha ma'lumotlarni nima bilan bandligingizni so'rashingiz mumkin.) Bunday
yondashuvni o'rniga, ikkala jadvaldagi identifikatorlarni taqqoslashga qaror qilishingiz mumkin, ammo jadvalning faqat bittasida ism va familiyani oling. Yoki siz boshqa jadvalda saqlanmagan bitta jadvaldan ma'lumot olishni xohlashingiz haqida qaror qabul qilishingiz mumkin. Biroq, ularni birlashtirish uchun INTERSECT operatoridan foydalanganda ustunlar ikkita so'rov o'rtasida bir-biriga mos kelishi kerakligi sababli, ushbu cheklov atrofida ishlash usulini topishingiz kerak. Buning eng oson usullaridan biri bu sizning INTERSECT
18
tuzilishingizni jadvalning umumiy ifodasiga (CTE) qo'shish va qo'shimcha ma'lumotni olish uchun bu jadvalni jadvalga qo'shishdir. Masalan, quyidagi misol yuqoridagi misolda ko'rgan bir xil INTERSECT qurilishini o'z ichiga olgan CTE-ni o'z ichiga oladi:
WITH
cteCandidates (BusinessEntityID) AS
( SELECT BusinessEntityID FROM HumanResources.Employee INTERSECT SELECT BusinessEntityID FROM HumanResources.JobCandidate ) SELECT
c.BusinessEntityID, e.LoginID, e.JobTitle FROM
HumanResources.Employee AS e INNER JOIN cteCandidates AS c ON e.BusinessEntityID = c.BusinessEntityID ORDER BY c.BusinessEntityID;
E'tibor bering, men CTECandidates nomli CTE-ni yaratdim. Kutganingizdek, CTE ish beruvchi va JobCandidate jadvallarida mavjud bo'lgan BusinessEntityID qiymatlarini qaytaradi. SELECT boshlang'ich bayonotida CID-dagi LoginID va JobTitle qiymatlarini Ishchilar jadvalidan olish uchun xodimlar jadvaliga qo'shilaman. Men INTERSECTni CTE-ga qo'shganim sababli, bayonot endi quyidagi natijalarni berishi mumkin:Ko'rinib turibdiki, men INTERSECT operatorining cheklovlarini bilib oldim va endi jadvallardan biridan qo'shimcha ma'lumotlarni qaytarib bermoqdaman. Bundan tashqari, qo'shimcha ma'lumotlarni kiritish uchun CTE-ni boshqa jadvalga qo'shgan bo'lar edim. Masalan, men xodimlarimning ismlarini va familiyalarini olish uchun bu erda bo'lgan narsalarimni Shaxsiy jadvalga qo'shgan bo'lishim mumkin. Gap shundaki, CTE sizga 19
INTERSECT operatori bilan ishlashda juda moslashuvchan bo'lishga imkon beradi; qaysi satrlarga mos kelishini aniqlashingiz mumkin, ammo manba jadvalidan qat'iy nazar barcha kerakli ma'lumotlarni qaytarishingiz mumki Misollar uchun manba ma'lumotlari Ushbu operatorlarni amalda sinab ko'rishimiz uchun bizga ba'zi ma'lumotlar kerak bo'ladi, men ikkita jadval yaratib, ularni test ma'lumotlari bilan to'ldirishni taklif qilaman.
[Dbo] jadvalini yarating. [Test_table] ( [id] [int] YO'Q emas, [maslahat] [varchar] (50) NULL, [summa] [varchar] (50) NULL ) [PRIMARY] GO
Uning ma'lumotlari
2-jadval
Jadvalni yaratish [dbo]. [Test_table_two] ( [id] [int] YO'Q emas, [maslahat] [varchar] (50) NULL, [summa] [varchar] (50) NULL ) [PRIMARY] TO'G'RISIDA
20
INTERSECT iborasi INTERSECT ( kesishish ) - bu birinchi, ikkinchi va keyingi ma'lumotlar to'plamidan bir xil satrlarni chiqaradigan Transact-SQL bayonoti. Boshqacha qilib aytganda, u faqat birinchi natijada, ham ikkinchi ( uchinchi va hokazo ) satrlarda chiqadi , ya'ni. bu chiziqlarning kesishishi sodir bo'ladi. Ushbu operator juda foydali, masalan, birinchi jadvalda va ikkinchisida ( masalan, takrorlanuvchi
UNION operatori singari, INTERSECT ham qoidalarga ega, masalan, barcha natijalar to'plamidagi maydonlar soni va ularning ma'lumotlari turlari bir xil bo'lishi kerak.
Keling, test_table va test_table_two, ya'ni ikkalamizda qanday ma'lumotlarga ega ekanligimizni bilib olaylik. buning uchun biz oddiy SQL so'rovini yozamiz :
SELECT Maslahat, test_table FROM Summa Intersect SELECT uchi, test_table_two FROM Summa
tagacha "Skaner" mavjud.
21
XULOSA Afsuski, SQL server hali ham muammo bo'lib qolmoqda. Agar aniq zaifliklar bo'lmasa ham, SQL server usullari qo'shimcha zaifliklarni aniqlashi mumkin. SQL serversining zaifliklari tayyorlangan bayonotlar yordamida yo'q qilinishi mumkin. Hozirgacha biz faqat SQL server opertatorlarini qanday qo’llashni ko'rib chiqdik . Quyida, shuningdek, ularni qanday oldini olish mumkinligini ko'rsatamiz. Tayyorlangan iboralardan foydalanish SQL so'zi va kirish ma'lumotlarini ajratishga imkon beradi . Bu foydalanuvchi kiritgan ma'lumot SQL deb talqin qilinmasligini ta'minlaydi . Muayyan dasturlash tillariga misollarni ko’rib xatoliklarni topish mumkin . Ammo tayyorlangan bayonotlar SQL so'rovining barcha sohalarida qo'llanilmaydi . Masalan, agar jadval nomi yoki ORDER BY iborasi dinamik ravishda tuzilishi kerak bo'lsa , kiritish oq ro'yxat bilan tekshirilishi kerak .
kiritilgan kirishni tekshirish imkoni bo'lmaganda ishlatilishi kerak, chunki to'g'ri bajarish juda qiyin va SQL server qilishiga imkon beradigan bo'shliqlar xavfi mavjud . Biroq, tayyorlangan bayonotlarni oq ro'yxat va yondoshuv bilan to'ldirish ikkilamchi himoyani yaratish uchun mukammal ma'no beradi. Shunday bir rivojlangan axborot texnalogiyalari davrida yashar
ekanmiz.Bizdan yetuk bilim va ko’nikmalarni talab qiladi.Kundan- kunga yangi dasturlar ishlab chiqarilmoqda va buni buzishga harkat qilayotgan hackerlar rivojlanib bormoqda.Shuning uchun axborot xavfsizligi va kiber xavfsizligi yanada kuchaytirishimiz kerak.Shundagina bizda ko’zlangan maqsadga erishiladi.
22
Adabiyotlar
Dastur.uz
Tami.uz
w3shchools.com
Sql operator.com
SQL Server Knowledge Base - A reference guide for MySQL, MSSQL and Oracle SQL Server attacks.
database firewall used to protect databases from SQL server attacks.
An Introduction to SQL Server Attacks for Oracle Developers o
Download 472.62 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling