2.Hisoblanadigan ustunlar.
SQL so’rovi bevosita MBdagi qiymatlardan iborat ustunlardan tashqari MBda saqlanuvchi qiymatlar asosida hisoblanadigan ustunlardan ham tashkil topadi. Hisoblanadigan ustunni olish uchun natija sifatida qaytariladigan qiymatlar ro’yxatiga ifodani qo’yish lozim. Oldingi qismlarda aytib o’tilganidek, ifoda qo’shish, ayirish, ko’paytirish, bo’lish operastiyalaridan tashkil topadi. Ifodalarda qavslarni ham ishlatish mumkin. Arifmetik ifodalarda qatnashuvchi ustunlar , albatta sonli qiymatlarni saqlashi lozim. Matnli ma’lumotlar ustida qo’shish, ko’paytirish, ayirish yoki bo’lish amallari bajarilsa xatolik haqida xabar chiqariladi.
Quyidagi so’rovda oddiy hisoblanuvchi ustun keltirilgan .
Har bir ofis haqida u joylashgan shahar region va rejadan oshgan, rejaga etishmaydigan, bajarilgan savdo hajmi haqida ma’lumot chiqaring.
SELECT city, region, (sales-target)
FROM offices
city
|
region
|
sales-target
|
--------
|
-------
|
--------
|
Denver
|
Western
|
$113,958.00
|
New york
|
Eastern
|
$117,637.00
|
Chicago
|
Eastern
|
$64,968.00
|
Atlanta
|
Eastern
|
$17,911.00
|
Los angeles
|
Western
|
$110,915.00
|
Bu so’rovni bajarish uchun OFFICES jadvalining har bir satri uchun bitta natija satri tuziladi. So’rov natijasining birinchi 2 ta ustuni qiymati bevosita OFFICES jadvalidan olinadi. 3-ustun so’rov natijasining har bir satri uchun OFFICES jadvali ustunlarining joriy satrlari qiymatlari asosida hisoblanadi. quyida hisoblanuvchi ustun ishlatiladigan boshqa so’rovlarga misollar keltirilgan .
Xar bir tovarning umumiy qiymatini chiqaring.
SELECT mfr_id, product_id, description, (qty_on_hand*price)
FROM products
mfr_id
|
product_id
|
descreption
|
(qty_on_hand*price)
|
---
|
-----
|
-----
|
----------
|
REI
|
2A45C
|
Ratchet Link
|
$79.00
|
ACI
|
41004
|
Widget Remover
|
$2.750.00
|
QSA
|
XK47
|
Reduser
|
$355.00
|
BIC
|
41672
|
late
|
$180.00
|
IMM
|
779C
|
900-ibBrase
|
$1,875.00
|
ACI
|
41003
|
Size 3 widget
|
$107,00
|
ACI
|
41004
|
Size 4 Widget
|
$117.00
|
BCI
|
41003
|
Handle
|
$652.00
|
Agarda xar bir xizmatchining rejadagi savdo hajmi uning bajargan savdo hajmining 3 % iga oshirilsa, uning rejadagi savdo hajmi qanchaga teng bo’ladi.
SELECT name, quota, (quota*(0.03*sales))
FROM salesreps
name
|
Quota
|
(quota*(0.03*sales))
|
------
|
-------
|
-----------
|
Bill Adams
|
$350,000.00
|
$361,037.33
|
Mary Jones
|
$300,000.00
|
$311,781.75
|
Sue Smith
|
$350,000.00
|
$364,221.50
|
Sam Slark
|
$275,000.00
|
$283,997.36
|
Bob Smith
|
$200,000.00
|
$204,277.82
|
Dan Roberts
|
$300,000.00
|
$309,170.19
|
Tom Snyder
|
NULL
|
NULL
|
Larry Fitch
|
$350,000.00
|
$360,855.95
|
3.Qaytariladigan qiymatlar (DISTINCT kalitli so’zi)
Agarda o’qish so’rovining qaytariladigan qiymatlar ustida jadvalning birlamchi kalitini ko’rsatsak so’rov natijasining har bir satri unikal bo’ladi.
Ofisning barcha menenjerlari haqida ma’lumot chiqaring
SELECT MGR
FROM OFFICES
-
MGR
|
----
|
108
|
106
|
104
|
105
|
108
|
SELECT DISTINCT MGR
FROM OFFICES
-
Bu so’rov quyidagi tarzda bajariladi. Oldin barcha natijaviy satrlar generastiya qilinadi, undan keyin esa boshqasini takrorlaydigan ustunlar o’chiriladi. Agarda DISTING kalit so’zi ko’rsatilmagan bo’lsa takrorlanadigan satrlar o’chirilmaydi.
4. Qiymatni biror diapazonga tegishlilik shartini tekshirish (BETWEEN)
1989 yilning oxirgi kvartalida berilgan barcha buyurtmalarni toping
SELECT ORDER_NUM, ORDER_DATE, MFR, PRODUCT, AMOUNT
FROM ORDERS
WHERE ORDERS_DATE BETWEEN ’01-OCT-89’ AND ’31-DEC-89’
ORDER_NUM
|
ORDER_DATE
|
MFR
|
PRODUCT
|
AMOUNT
|
------
|
------
|
--
|
----
|
----
|
112961
|
17-DEC-89
|
REI
|
2A44L
|
$31,500.00
|
112968
|
12-OCT-89
|
ACI
|
41004
|
$3,276.00
|
112963
|
17-DEC-89
|
ACI
|
41004
|
$702.00
|
112983
|
27-DEC-89
|
ACI
|
41004
|
$15,000.00
|
112979
|
12-OCT-89
|
ACI
|
41007
|
$760.00
|
112992
|
04-NOV-89
|
ACI
|
41008
|
$R,100.00
|
112975
|
12-OCT-89
|
REI
|
2A44G
|
$3,276.00
|
112987
|
31-DEC-89
|
ACI
|
41004
|
$27,500.00
|
Narxi ko’rsatilgan diapazonda yotuvchi buyurtmalar haqidagi ma’lumotlarni chiqaring.
SELECT ORDER_NUM, AMOUNT
FROM ORDERS
WHERE AMOUNT BETWEEN 30000.00 AND 39999.99
ORDER_NUM
|
AMOUNT
|
-------------
|
-------------
|
112961
|
$1,500.00
|
113069
|
$31,350.00
|
SELECT ORDER_NUM, AMOUNT
FROM ORDERS
WHERE AMOUNT BETWEEN 40000.00 AND 49999.99
ORDER_NUM
|
AMOUNT
|
------------
|
------------
|
113045
|
$45,000.00
|
Bajargan savdo hajmi 80% dan – 120% gacha diapazonda yotmaydigan xodimlar ro’yxatini chiqaring.
SELECT NAME ,SALES , QUOTA
FROM SALESREPS
WHERE SALES NOT BETWEEN (0.8*QUOTA) AND (1.2*QUOTA)
NAME
|
SALES
|
QUOTA
|
-------
|
-------
|
--------
|
MARY JONES
|
$392,475.00
|
$300,000.00
|
SUE SMITH
|
$474,050.00
|
$350,000.00
|
BOB SMITH
|
$142,594.00
|
$200,000.00
|
NANCY ANGELLI
|
$186,042.00
|
$300,000.00
|
5. WHERE kalit so’zi
WHERE kalit so’zi SELECT operatori yordamida ma’lumotlarni ajratib olishda kiymatlar bo’yicha shart kiritish uchun ishlatiladi. Quyidagi operatorni kiritamiz:
SELECT * FROM REGIONS WHERE Zip = 8324
Natijada bitta qator tanlanadi va Zip ustunidagi kiymati 8324 ga teng bo’ladi.
Keyingi keltirilayotgan operatorda REGIONS jadvalidagi qatorlarni sanash REGION ustuni “Gijduvan” bilan boshlanadigan shart asosida bo’ladi.
SELECT COUNT(*) FROM REGIONS WHERE Region LIKE 'Gijduvan%'
Natijada 1 qiymati qayd etiladi.
SELECT operatorining WHERE kalit so’zi bilan keladigan yana bir nechta variantlarini ko’ramiz.
SELECT COUNT(*) FROM REGIONS WHERE Zip BETWEEN 8300 AND 8320
Bu erda Zip maydoni 8300 dan 8320 gacha diapazonda bo’lgan qatorlar soni aniqlanadi.
SELECT * FROM REGIONS WHERE Zip IN (8300,8310,8320)
Bu erda zip maydonining qiymati IN so’zidan keyin turgan qiymatlardan biriga teng bo’lgan qatorlar tanlanadi.
SELECT MAX(Zip) FROM REGIONS WHERE Region IS NOT NULL
Bu operatorda REGIONS jadvalining Zip maydonidagi eng katta qiymatga ega bo’lgan qator Region maydonidagi qandaydir qiymatga ega bo’lgan qatorlar orasidan tanlanadi.
SELECT * FROM REGIONS WHERE Region LIKE 'Gijduvan%' AND City = 'Gishti'
Bu erda Region maydoning qiymati “Gijduvan” bilan boshlanadigan va City maydoning qiymati “Gishti” ga teng bo’lgan qatorlar tanlanadi.
6. Birlashtirish
WHERE kalit so’zining yana bir qo’llanish sohalaridan biri jadvallarni mantiqiy birlashtirishdan iborat. Birlashtirish amali ikki etapda amalga oshiriladi: avval FROM kalit so’zi yordamida SELECT operatoridagi jadvallar birlashtiriladi, keyin esa WHERE kalit so’zi orqali jadvallarni kerakli maydon bo’yicha birlashtiriladi.
Quyidagi misolni ko’ramiz:
SELECT STAFF.LastName, STAFF.FirstName, STAFF.FatherName, REGIONS.City
FROM STAFF, REGIONS
WHERE STAFF.Zip = REGIONS.ZIP
Bu operator bajarilishi natijasida to’rtta maydondan iborat qator chiqariladi: Jo’raev, Azamat, Nosirovich, Gishti. Bu erda STAFF va REGION jadvallari Zip ustuni bo’yicha birlashtirilgan. WHERE shartida tenglikdan chap tomonda turgan jadval tashqi (outer), o’ng tomonda turgan jadval esa ichki (inner) jadval deyiladi.Yuqoridagi keltirilgan birlashtirish ichki birlashtirish (inner join) deyiladi.
Bundan tashqari birlashtirish tashqi (outer join) bo’lishi ham mumkin.
Bundan tashqari shartga bog’liq bo’lmagan qatorlar ham keltiriladi, birlashtirish shartiga mos kelmagan barcha maydonlar NULL qiymatini beradi.
Tashqi va ichki birlashtirishning ANSI sintaksisi quyidagi ko’rinishga ega.
SELECT Tablel.Columnl, Table2.Column2
FROM Tablel OUTER [INNER] JOIN Table2
ON Tablel.Columnl = Table2.Column3
7. Ichma-ich so’rovlar
Ichma-ich so’rovlar — bu shunday SELECT operatorlariki, WHERE kalit so’zidan keyin ham SELECT operatori ishlatiladi.
Misol keltiramiz:
SELECT * FROM STAFF
WHERE PosID IN (SELECT PosID FROM POSS
WHERE PosLevel BETWEEN 1 AND 3)
Bu operatorda oldin ichki so’rov bajariladi, unda lavozim identifikatori 1,2 yoki 3 ga teng bo’lgan yozuvlar tanlanadi, so’ngra STAFF jadvalidan PosID maydonining qiymati oldingi so’rovda aniqlangan naborga mos keladigan qatorlar tanlanadi.
8. GROUP BY amali
SQL da GROUP BY amali orqali ma’lum bir maydonlar bo’yicha guruxlash amalga oshiriladi. Odatda bu amal SELECT operatorining oxirgi maydoni sifatida matematik funkstiya ishlatilganda qo’llaniladi.
Misol keltiramiz:
SELECT DEPS.DeptFullName, SUM(STAFF.Salary)
FROM DEPS, STAFF
WHERE STAFF.DepID = DEPS.DeptID
GROUP BY DEPS.DeptFullHame
Bu operatorda xodimlar maoshining summasi bo’limlar bo’yicha guruxlanib hisoblanadi. Bunda STAFF va DEPS jadvallari birlashtirilayapti. Chunki STAFFda bo’limning faqat identifikatori saqlanadi.
Yana bitta guruxlash amaliga doir misol ko’ramiz:
SELECT LastName, COUNT(*) FROM STAFF
GROUP BY LastName
Bu operator yordamida STAFF jadvalidagi bir familiyali xodimlar soni aneqlanadi.
Do'stlaringiz bilan baham: |