Oddiy SELECT so‘rovlar va mantiqiy operatorlar
SELECT operatori MB jadvallaridan natijaviy to‘plam olish uchun mo‘ljallangandir. SELECT operatori yordamida MBga so‘rov beriladi va u foydalanuvchiga ma‘lumotlarning natijaviy to‘plamini qaytaradi. Bu ma‘lumotlar jadval shaklida qaytariladi. Bu jadval keyingi SELECT operatori tomonidan yana qayta ishlanishi ham mumkin.
SELECT operatori SQL quyidagi ko‘rinishga ega:
SELECT [ALL]
FROM jadval
WHERE izlash sharti
GROUP BY ustunlar
HAVING izlash sharti
ORDER BY tartiblash spesifikatori
Masalan, OFFICES jadvalidagi hamma yozuvlarni qaytaruvchi sodda so‘rov quyidagicha yoziladi. SELECT * FROM OFFICES
Misol: Hamma xizmatchilarning nomlari, ofislari va ishga olish sanalari ro‘yxatini hosil qilish.
SELECT NAME, REP_OFFICE, HIRE_DATE FROM SALESREPS
SELECT operatori WHERE sharti berilgan shart asosida kerakli ma‘lumotlarni qaytarish uchun xizmat qiladi. Masalan, sotuvlarda haqiqiy hajmi rejadan oshgan ofislarni ko‘rsatish kerak.
SELECT CITY, SALES, TARGET FROM OFFICES
WHERE SALES > TARGET
Nomeri 105 ga teng bo‘lgan xizmatchi nomi, haqiqiy va rejadagi sotuvlar hajmini ko‘rsatish:
SELECT SALES, NAME, QUOTA FROM SALESREPS
WHERE EMPL_NUM = 105
Agar izlash sharti TRUE bo‘lsa qator natijaviy to‘plamga qo‘shiladi, agar izlash sharti FALSE bo‘lsa, qator natijaviy to‘plamga qo‘shilmaydi, agar NULL bo‘lsa ham natijaviy to‘plamdan chiqariladi. O‘z ma’nosiga ko‘ra WHARE, kerakli yozuvlarni qoldiruvchi filtr sifatida ishlatiladi.
Mantiqiy operatorlar
BETWEEN va IN operatorlari. BETWEEN operatori - bu qiymatlar diapazoniga tegishlilikni tekshirishdir. Misol: Narxi har xil diapazonga mos keluvchi buyurtmalarni topish.
SELECT ORDER_NUM, AMOUNT FROM ORDERS
WHERE AMOUNT BETWEEN 20.000 AND 29.999
NOT ifodasi shartni teskarisiga o‘giradi, yani tegishli emas ma’nosini bildiradi. NOT ifodasi yordamida berilgan diapazonga tegishlilikni tekshirish mumkin, masalan: sotuvlar haqiqiy hajmlari rejaning 80 dan 120 protsentgacha bo‘lgan oraliqqa tushmaydigan xizmatchilar ro‘yxatini chiqarish.
SELECT NAME, SALES, QUOTA FROM SALESREPS
WHERE SALES NOT BETWEEN (0.8 * QUOTA) AND (1.2 * QUOTA)
IN operatori to‘plamga tegishlilikni tekshiradi. Masalan, to‘rtta aniq xizmatchilar tomonidan olingan hamma buyurtmalarni aniqlash.
SELECT ORDER_NUM, REP, AMOUNT FROM ORDERS
WHERE REP IN (107, 109, 101, 103)
NOT IN yordamida diapazonga "tegishli emaslikni " tekshirish mumkin.
LIKE operatori. Quyidagicha '%' shablonli LIKE operatorini qaraymiz:
SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS
WHERE COMPANY LIKE '%n'
Bu xolda LIKE '%n' operatori 'n' harfiga tugaydigan hamma yozuvlarni ko‘rsatadi, agar % shabloni birinchi kelsa:
SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS
WHERE COMPANY LIKE '%gan'
Agar faqat bitta simvol ixtiyoriy bo‘lsa '_' shabloni qo‘llaniladi. Masalan:
SELECT COMPANY, CREDIT_LIMIT FROM CUSTOMERS
WHERE COMPANY LIKE 'Ap_lsin'
Yozuvlarni tartiblash, ORDER BY ifodasi. SELECT operatori tarkibida natijaviy yozuvlarni tartiblangan holda taqdim etish uchun ORDER BY ifodai ko‘zda tutilgan. Masalan, agar o‘quvchilar ro‘yxatini alfavit tartibida yoki tovarlar narxini kamayish tartibida chiqarish zarur bo‘lsa, u holda bu ifodadan foydalanish kerak bo‘ladi.
Quyidagi misolni ko‘ramiz: Har bir offis uchun sotuvlar haqiqiy hajmlarini regionlar nomlari, har bir regionda esa shaharlar nomlari bo‘yicha alfavit tartibida chiqarish.
SELECT CITY, REGION, SALES FROM OFFICES
ORDER BY REGION, CITY
Masalan: Sotuvlari haqiqiy xajmlari kamayish tartibida bo‘lgan offislar ro‘yxatini chiqarish.
SELECT CITY, REGION, SALES FROM OFFICES
ORDER BY SALES DESC
Sotuvlar hajmlarini DESC predikatini qo‘llab kamayish tartibida chiqaramiz. O‘sish tartibida chiqarish uchun ASC predikati qo‘‘llanadi.Bu predikat ko‘zda tutilgan bo‘lib, uni ko‘rsatish shart emas.
Bir necha jadvallar bilan ishlash
Jadvallarni jamlashtirish. Jamlashtirish relyatsion ma‘lumotlar bazasi operatsiyalaridan biri bo‘lib, jadvallar orasidagi aloqani belgilaydi va ulardan ma‘lumotni bitta buyruq yordamida ajratishga imkon beradi. Jamlashda jadvallar FROM buyrug‘idan so‘ng ro‘yxat sifatida tasvirlanadi. So‘rov predikati ixtiyoriy jadval ixtiyoriy ustuniga tegishli bo‘lishi mumkin. Jamlashning eng soddasi bu dekart ko‘paytmasidir, uni quyidagicha bajarish mumkin:
SELECT Customers.*, Salepeople.* FROM Salepeople, Customers;
Lekin bu yerda hosil bo‘lgan jadval keraksiz ma‘lumotlarga ega. Keraksiz satrlarni olib tashlash uchun WHERE jumlasidan foydalaniladi.
Masalan: berilgan shahardagi sotuvchilar va buyurtmachilar ixtiyoriy kombinatsiyasini ko‘rish uchun quyidagini kiritish lozim:
SELECT Customers.CName, Salepeople.SName, Salepeople.City
FROM Salepeople, Customers
WHERE Salepeople.City = Customers.City;
Jamlashda SQL bir necha jadval satrlari kombinatsiyasini predikatlar bo‘yicha solishtirishdir. Misol: har bir sotuvchiga mos keluvchi buyurtmachilar ro‘yxatini chiqarish:
SELECT Customers.CName, Salepeople.SName
FROM Customers, Salepeople
WHERE Salepeople.SNum = Customers.SNum;
Sodda joylashtirilgan ostki so‘rovlar.
SQL yordamida so‘rovlarni bir birining ichiga joylashtirish ham mumkin. Odatda ichki so‘rov qiymat hosil qiladi va bu qiymat tashqi predikat tomonidan tekshirilib, to‘g‘ri yoki noto‘g‘riligi tekshiriladi.
Misol: bizga sotuvchi nomi ma’lum: Motika, lekin biz SNUM maydoni qiymatini bilmaymiz va buyurtmachilar jadvalidan hamma buyurtmalarni ajratib olmoqchimiz. Buni quyidagicha amalga oshirish mumkin:
SELECT * FROM Orders WHERE SNum =
( SELECT SNum FROM Salepeople
WHERE SName = 'Motika’ );
Agar ostki so‘rovda IN operatoridan foydalanilsa, ixtiyoriy sondagi satrlar hosil qilish mumkin. Misol: Londondagi sotuvchilar uchun hamma buyurtmalarni ko‘rsatish.
SELECT * FROM Orders WHERE SNum IN
( SELECT SNum FROM Salepeople WHERE City = 'London' );
Bu natijani jamlanma orqali ham hosil qilish mumkin. Lekin odatda ostki so‘rovli so‘rovlar tezroq bajariladi. Ostki so‘rovlarni HAVING izlash sharti ichida ishlatish ham mumkin. Bu ostki so‘rovlar agar ko‘p qiymatlar qaytarmasa agregat funksiyalaridan yoki GROUP BY yoki HAVING operatorlaridan foydalanishi mumkin. Misol:
SELECT Rating, COUNT (DISTINCT CNum) FROM Customers
GROUP BY Rating
HAVING Rating >( SELECT AVG (Rating) FROM Customers
WHERE City = 'San Jose' );
Bu buyruq San Jose dagi baholari o‘rtachadan yuqori bo‘lgan buyurtmachilarni aniqlaydi.
UNION ifodasidan foydalanish. UNION ifodasi bir yoki bir necha so‘rovlar natijasini birlashtirishga imkon beradi.
Misol: Londonda joylashgan hamma sotuvchilar va buyurtmachilarni bitta jadvalda chiqarish.
SELECT SNum, SName FROM Salepeople WHERE City = 'London'
UNION
SELECT CNum, CName FROM Customers WHERE City = 'London';
So‘rovlarda funksiyalar
Agregat funksiyalar qo‘llanishi.
Agregat (yoki STATIK) funksiyalar sonli yoki hisoblanuvchi ustunlar bilan ishlaydi. Agregat funksiya argumenti butun ustun bo‘lib, bitta qiymat qaytaradi. Bu funksiyalarga quyidagilar kiradi:
• SUM() – ustundagi hamma qiymatlar summasini hisoblash.
• AVG() – ustundagi hamma qiymatlar o‘rtachasi qiymatini hisoblash.
• MIN() – ustundagi hamma qiymatlar eng kichigini aniqlash.
• MAX() – ustundagi hamma qiymatlar eng kattasini aniqlash.
• COUNT() – ustundagi qiymati sonini aniqlash.
• COUNT(*) – so‘rov natijasi jadvalidagi satrlar sonini aniqlash.
Agregatlash argumenti bo‘lib ustun nomidan tashqari ixtiyoriy matematik ifoda xizmat qilishi ham mumkin. Misol: Sotuv kompaniyada reja bajarilishining o‘rtacha protsentini aniqlash.
SELECT AVG(100 * (SALES/QUOTA)) FROM SALESREPS
Masalan, sotuv kompaniyasida sotuvlar xajmini chiqarish.
SELECT SUM(QUOTA), SUM(SALES) FROM SALESREPS
AVG() agregatlash funksiyasiga yana bir sodda misolni ko‘ramiz. Masalan: "ACI" ishlab chiqaruvchi mollari o‘rtacha narxini hisoblash.
SELECT AVG(PRICE) FROM PRODUCTS
WHERE MFR_ID = 'ACI'
Ekstremumlarni topishda MIN() va MAX() funksiyalari sonli ustunlar, sanalar va satrli o‘zgaruvchilar bilan ishlaydi. Eng sodda qo‘llanish sonlar bilan ishlash. Masalan, eng ko‘p va kam sotuvlar rejadagi hajmini chiqarish.
SELECT MIN (QUOTA), MAX (QUOTA) FROM SALESREPS
Masalan, buyurtmalardan eng oldin berilgan so‘rov sanasini topish.
SELECT MIN(ORDER_DATE) FROM ORDERS
MBdagi yozuvlar sonini sanash uchun COUNT() qo‘llaniladi. Bu funksiya son qiymat qaytaradi. Masalan: kompaniya mijozlari sonini chiqarish.
SELECT COUNT(CUST_NUM) FROM CUSTOMERS
COUNT(*) funksiyasi satrlar sonini hisoblaydi. Misol
SELECT COUNT(*) FROM ORDERS
Agregat funksiyalar jadval uchun natijaviy satr hosil ham qiladi. Masalan: Buyurtma o‘rtacha narxini chiqarish.
SELECT AVG(AMOUNT) FROM ORDERS
|