id_book
|
Name
|
id_cat
|
page
|
id_avtor
|
yil
|
1
|
Odamiylik Mulki
|
4
|
980
|
1
|
2016
|
2
|
Ikki eshik orasi
|
1
|
450
|
2
|
1996
|
3
|
Ikki eshik orasi
|
1
|
460
|
2
|
2000
|
4
|
Ikki eshik orasi
|
1
|
380
|
2
|
2012
|
5
|
Sariq devni minib
|
5
|
220
|
3
|
1990
|
6
|
Sariq devni minib
|
5
|
180
|
3
|
2005
|
7
|
Shaytanat
|
2
|
1250
|
1
|
2018
|
8
|
Dexqon va ayiq
|
5
|
100
|
5
|
2019
|
9
|
Eng katta sexr
|
5
|
230
|
5
|
2020
|
10
|
Nafs kishanlari
|
4
|
240
|
1
|
2015
|
11
|
Samum
|
2
|
380
|
1
|
2012
|
12
|
Jannati odamlar
|
4
|
210
|
3
|
1996
|
13
|
Shirin qovunlar mamlakati
|
5
|
180
|
3
|
1986
|
14
|
Qora tol
|
1
|
350
|
4
|
1988
|
15
|
Dala armonlari
|
1
|
450
|
4
|
1967
|
16
|
Mangu buloq
|
4
|
360
|
4
|
1970
|
17
|
Sehrli qalpoqcha
|
3
|
250
|
3
|
1964
|
18
|
Dunyoning ishlari“
|
4
|
280
|
2
|
2005
|
19
|
Shaytanat
|
2
|
960
|
1
|
2020
|
|
Avtor
id_avtor
|
fio
|
1
|
Toxir Malik
|
2
|
O`tkir Hoshimov
|
3
|
Xudayberdi To`xtaboyev
|
4
|
Ibraym Yusupov
|
5
|
Xalq ogzaki ijodi
|
Categiriya
id_cat
|
name_cat
|
1
|
Tarixiy
|
2
|
Detektiv
|
3
|
Fantastik
|
4
|
Tarbiyaviy
|
5
|
Ertak
|
|
Keltirilgan ko`p jadvalli so`rov bir jadvalli so`rovdan quyidagilar bilan farq qiladi.
FROM sektsiyasida ikkita jadval ko`rsatilgan.
jadvallr soni bitta ko`p, shuning uchun ko`rsatilgan maydonlar nomining bir qiymatliligi yo`qoladi. Masalan, ko`p xollarda maydonni FROM da ko`rsatilgan jadvallar ro`yxatidagi qaysi jadvaldan olish noma`lum bo`lib qoladi. Maydon nomlarining ko`p qiymatliligini bataraf etish uchun maydon nomida perefiks - jadval nomi qo`shimcha qilinadi. Jadval nomi maydon nomidan nuqta bilan ajratiladi.
WHERE ifodasida jadvallarni birlashtirish sharti ko`rsatiladi.
Yuqoridagi ikki yoki undan ko`p amallarni o`zaro bog`lashda, jadvallardagi mos quyilayotgan atributlarning qiymati bittalab tekshiriladi. Bu esa so`rov bajarilishi uchun ortiqcha resurs zaruriyatini keltirib chiqaradi.
2-masala. 2005 yildan keyin chop etilgan adabiyotlarni muallifi, kategriyasi va saxifalari bilan chiqarish talab etilgan bo`lsin.
SELECT B.name, A.fio, C.name_cat, B.page
FROM Books B, Avtor A, Categoria C
WHERE B.id_avtor = A.id_avtor AND
B.id_cat = C.id_cat AND B.yil > 2005
So`rov natijasi quyidagicha bo`ladi.
name
|
fio
|
name_cat
|
page
|
Ikki eshik orasi
|
Utkir Hoshimov
|
Tarixiy
|
380
|
Shaytanat
|
Toxir Malik
|
Detektiv
|
1250
|
Samum
|
Toxir Malik
|
Detektiv
|
380
|
Shaytanat
|
Toxir Malik
|
Detektiv
|
960
|
Odamiylik Mulki
|
Toxir Malik
|
Tarbiyaviy
|
980
|
Nafs kishanlari
|
Toxir Malik
|
Tarbiyaviy
|
240
|
Sariq devni minib
|
Xudayberdi To`xtaboyev
|
Ertak
|
180
|
Dexqon va ayiq
|
Xalq ogzaki ijodi
|
Ertak
|
100
|
Eng katta sexr
|
Xalq ogzaki ijodi
|
Ertak
|
230
| 2. JOIN orqali jadvallarni gorizontal birlashtirish
Ko`pchilik holatlarda butun MBdan amaliy ahamiyatli natijalarni olishda ko`p jadvalli murakkab so`rovlarni yaratishga to`g`ri keladi. Hozirgi kunda MBBTlarida bir nachta jadvallarning mos atributlari bo`yicha o`zaro bog`lanishni ta`minlovchi standartlar mavjud. Bular zarur ma`lumotlarni turli jadvallardan olishda jadvallarni o`zaro gorizontal bog`lanishni (JOIN) ta`minlaydi. Bu yerda o`ng tomon va chap tomon jadvallar tegishli artibutlari biror shart asosida birlashtiriladi. Gorizontal bog`lanish bir nechta turga ajratiladi: Join, Left Join, Right Join, Full Join, Cross Join, Natural Join.
Bizga Authors va Books jadvallari berilib bu jadvallarni vertikal birlashtirishda ularning mos AuthorID va BookID atributlari qaraladi.
Authors
AuthorID
|
AuthorName
|
1
|
Bruce Eckel
|
2
|
Robert Lafore
|
3
|
Andrew Tanenbaum
|
|
Books
BookID
|
BookName
|
3
|
Modern Operating System
|
1
|
Thinking in Java
|
3
|
Computer Architecture
|
4
|
Programming in Scala
|
|
JOIN – chap va o`ng tomondagi jadvallar birlashtiriladi va mos qo`yilgan atributlar orasidagi shart bajarilganda javob (yozuv) qaytariladi
chap_jadval INNER JOIN o`ng_jadval ON bog`lanish_sharti
INNER JOIN sintaksisi:
SELECT maydon nomlari [,... n]
FROM Jadval_1
INNER JOIN Jadval _2 ON bog`liqlik_sharti
Misol:
SELECT * FROM Authors A
INNER JOIN Books B ON A.AuthorID = B.BookID
Natija
A.AuthorID
|
A.AuthorName
|
B.BookID
|
B.BookName
|
3
|
Andrew Tanenbaum
|
3
|
Modern Operating System
|
1
|
Bruce Eckel
|
1
|
Thinking in Java
|
3
|
Andrew Tanenbaum
|
3
|
Computer Architecture
|
LEFT JOIN – chap tomon jadvalining barcha qatori qaytariladi. Bu qaytarilayotgan qiymatlarga mos o`ng tomon jadvalidan mos qiymatlar olinadi, agar mos qiymati bo`lmasa bo`sh qiymat (NULL) qaytariladi
chap_jadval LEFT OUTER JOIN o`ng_jadval ON bog`lanish_sharti
LEFT JOIN sintaksisi:
SELECT maydon nomlari [,... n] FROM Jadval_1
LEFT OUTER JOIN Jadval _2 ON bog`liqlik_sharti
Misol:
SELECT * FROM Authors A
LEFT OUTER JOIN Books B ON A.AuthorID = B.BookID
Natija
A.AuthorID
|
A.AuthorName
|
B.BookID
|
B.BookName
|
1
|
Bruce Eckel
|
1
|
Thinking in Java
|
2
|
Robert Lafore
|
NULL
|
NULL
|
3
|
Andrew Tanenbaum
|
3
|
Modern Operating System
|
3
|
Andrew Tanenbaum
|
3
|
Computer Architecture
|
LEFT JOIN orqali chap tomon jadvalining o`ng tomon jadvaliga tegishli bo`lmagan qatorlaridan holi qatorlarini ajratib olish mumkin. Ya`ni chap tomon jadvalidan o`ng tomon jadval elementlarini ayirib chap tomon jadval qatorlarini chiqarish mumkin.
chap_jadval LEFT OUTER JOIN o`ng_jadval ON bog`lanish_sharti WHERE o`ng_jadval IS NULL
Misol:
SELECT * FROM Authors A
LEFT OUTER JOIN Books B ON A.AuthorID = B.BookID
WHERE B.BookID IS NULL
RIGHT JOIN – o`ng tomon jadvalining barcha qatori qaytariladi. Bu qaytarilayotgan qiymatlarga mos chap tomon jadvalidan mos qiymatlar olinadi, agar mos qiymati bo`lmasa bo`sh qiymat (NULL) qaytariladi
chap_jadval RIGHT OUTER JOIN o`ng_jadval ON bog`lanish_sharti
RIGHT JOIN sintaksisi:
SELECT maydon nomlari [,... n] FROM Jadval_1
RIGHT OUTER JOIN Jadval _2 ON bog`liqlik_sharti
Misol:
SELECT * FROM Authors A
RIGHT OUTER JOIN Books B ON A.AuthorID = B.BookID
Natija
A.AuthorID
|
A.AuthorName
|
B.BookID
|
B.BookName
|
3
|
Andrew Tanenbaum
|
3
|
Modern Operating System
|
1
|
Bruce Eckel
|
1
|
Thinking in Java
|
3
|
Andrew Tanenbaum
|
3
|
Computer Architecture
|
NULL
|
NULL
|
4
|
Programming in Scala
|
RIGHT JOIN orqali o`ng tomon jadvalining chap tomon jadvaliga tegishli bo`lmagan qatorlaridan holi qatorlarini ajratib olish mumkin. Ya`ni o`ng tomon jadvalidan chap tomon jadval elementlarini ayirib o`ng tomon jadval qatorlarini chiqarish mumkin.
chap_jadval RIGHT OUTER JOIN o`ng_jadval ON bog`lanish_sharti WHERE o`ng_jadval IS NULL
Misol:
SELECT * FROM Authors A
RIGHT OUTER JOIN Books B ON A.AuthorID = B.BookID
WHERE A.AuthorID IS NULL
FULL JOIN – chap va o`ng tomon jadvallarining barcha qatori qaytariladi. Agar bog`lanish sharti chap va o`ng tomon jadvallarni qanoatlantirsa, ular bir qatorga birlashtiriladi. Bog`lanish sharti qanoatlantirilmasa, NULL qiymati bog`liq bo`lmagan qatorlarga ko`ra chap yoki o`ng tomon jadvallari o`rniga qo`yiladi
chap_jadval FULL OUTER JOIN o`ng_jadval ON bog`lanish_sharti
FULL JOIN sintaksisi:
SELECT maydon nomlari [,... n] FROM Jadval_1
FULL OUTER JOIN Jadval _2 ON bog`liqlik_sharti
Misol:
SELECT * FROM Authors A
FULL OUTER JOIN Books B ON A.AuthorID = B.BookID
Natija
A.AuthorID
|
A.AuthorName
|
B.BookID
|
B.BookName
|
1
|
Bruce Eckel
|
1
|
Thinking in Java
|
2
|
Robert Lafore
|
NULL
|
NULL
|
3
|
Andrew Tanenbaum
|
3
|
Modern Operating System
|
3
|
Andrew Tanenbaum
|
3
|
Computer Architecture
|
NULL
|
NULL
|
4
|
Programming in Scala
|
FULL JOIN orqali chap va o`ng tomondagi jadvallar birlashtirilishi va ularda mos qo`yilgan atributlar orasidagi shart bajarilgandan tashqari (teskari) yozuvlarini chiqarish mumkin.
chap_jadval FULL OUTER JOIN o`ng_jadval ON bog`lanish_sharti WHERE o`ng_jadval IS NULL OR chap_jadval IS NULL
Misol:
SELECT * FROM Authors A
FULL OUTER JOIN Books B ON A.AuthorID = B.BookID
WHERE A.AuthorID IS NULL OR B.BookID IS NULL
NATURAL JOIN – chap tomon jadvali bilan o`ng tomon jadvalining mos atributlari avtomatik aniqlanib, bu atributlar orasida shart bajarilsa javob qaytariladi. Xuddi INNER JOIN kabi
chap_jadval NATURAL JOIN o`ng_jadval
CROSS JOIN – chap tomon jadvalining har bir yozuvi o`ng tomon jadvalining har bir yozuviga mos quyiladi, ya`ni dekart ko`paytma bo`ladi
chap_jadval CROSS JOIN o`ng_jadval
CROSS JOIN sintaksisi:
SELECT maydon nomlari [,... n] FROM Jadval_1
CROSS JOIN Jadval _2 ON bog`liqlik_sharti
Misol:
SELECT *
FROM Authors A
CROSS JOIN Books B
Natija
A.AuthorID
|
A.AuthorName
|
B.BookID
|
B.BookName
|
1
|
Bruce Eckel
|
3
|
Modern Operating System
|
1
|
Bruce Eckel
|
1
|
Thinking in Java
|
1
|
Bruce Eckel
|
3
|
Computer Architecture
|
1
|
Bruce Eckel
|
4
|
Programming in Scala
|
2
|
Robert Lafore
|
3
|
Modern Operating System
|
2
|
Robert Lafore
|
1
|
Thinking in Java
|
2
|
Robert Lafore
|
3
|
Computer Architecture
|
2
|
Robert Lafore
|
4
|
Programming in Scala
|
3
|
Andrew Tanenbaum
|
3
|
Modern Operating System
|
3
|
Andrew Tanenbaum
|
1
|
Thinking in Java
|
3
|
Andrew Tanenbaum
|
3
|
Computer Architecture
|
3
|
Andrew Tanenbaum
|
4
|
Programming in Scala
| UNION orqali jadvallarni vertikal birlashtirish
Biz JOIN orqali so`rovda jadvallarni gorizontal birlashtirib natijalarini olishni qarab chiqdik. Endi so`rov natijalarini UNION orqali vertikal birlashtirish amallarini qaraladi. Qisqacha aytganda jadvallarni JOIN yonma-yon, UNION ustma-ust birlashtiradi.
UNION – turlicha jadvallardan qayta ishlangan natija beruvchi, lekin bir xil tuzulmga ega bo`lgan so`rovlarning natijalarini umumlashtiradi. Shunday ekan bunda har bir so`rovning ustunlari soni, ma`lumot turlariga ko`ra ustunlarning joylashuv tartibi mos bo`lishi kerak. Misol uchun, yuqori va ostki so`rovlar uchun sonli ustun ostida son, matnli ustun ostida matn va h.k.
Vertikal jadvallarni birlashtirish amallari MBBT xususiyatlaridan kelib chiqqan holda amalga oshiriladi. Misol uchun MS SQL da quyidagi turlari mavjud: UNION ALL, UNION, EXCEPT, INTERSECT.
UNION ALL – ikki to`plamdagi barcha qatorlarni birlashtiradi (A+B). Bu operator xuddi gorizontal birlashtirishdagi FULL JOIN ga o`xshaydi.
UNION – ikki to`plamdan takrorlanmas (unikal) qatorlarni birlashtiradi. DISTINCT(A+B). Bu operator gorizontal birlashtirishdagi LEFT JOIN ga o`xshaydi.
EXCEPT \ MINUS – yuqori jalvaldning unikal qatorlaridan quyi jadvalning unikal qatorlarini ayirib, yuqori jadval qatorlarini chiqaradi DISTINCT(A-B). Bu operator esa LEFT JOIN ga o`xshaydi.
INTERSECT – yuqori va quyi jadvallarda mavduj unikal qatorlarni natija sifatida qaytaradi DISTINCT(A&B). Bu esa INNER JOIN ga o`xshaydi.
Misollar.
Nazorat savollari
SQL tilida ma`lumotlarni manipulyatsiya qilish operatorlari?
SELECT operatori sintaksisidagi kalit so`zlar ma`nosi?
SQL so`rovida ishtiroki shart bo`lgan kalit so`zlar qaysilar?
SQL tilida mantiqiy operatorlar qaysilar va qaerda qo`llaniladi?
Mantiqiy operatorlar bajarilishidagi bir-biridan ustuvorligini asoslang?
Maxsus mantiqiy operatorlarni sanang.
So`rovda BERWEEN peridikati ekvivalent ifoda qanday?
ANY va ALL peridikatlarini IN peridikatidan farqi nimada?
SQLda ko`p jadvalli so`rovlar yaratish turlari qanday?
Jadvallarni gorizontal birlashtirish buyruqlari qanday?
Jadvallarni vertikal birlashtirish buyruqlari qanday?
Jadvallarni birlashtirish farqlari va birga ishlatish mumkinmi?
Ikkita jadval elementlarining kesishmasidan tashqari elementlar qanday olinadi?
Do'stlaringiz bilan baham: |