Oʻzbеkistоn rеspublikаsi оliy vа oʻrtа mаxsus tа’lim vаzirligi islom karimov nоmidаgi




Download 2,08 Mb.
Pdf ko'rish
bet17/19
Sana17.05.2024
Hajmi2,08 Mb.
#240356
1   ...   11   12   13   14   15   16   17   18   19
Bog'liq
МББваДТ (1 курс)tayyor

LEFT (OUTER) JOIN:
Chap jadvaldagi barcha ma‘lumotlarni va 
oʻng jadvaldagi mos keladigan ma‘lumotlarni qaytaradi. 
RIGHT (OUTER) JOIN:
Oʻng jadvaldagi barcha ma‘lumotlarni va 
chap jadvaldagi mos keladigan ma‘lumotlarni qaytaradi. 
 
 
FULL (OUTER) JOIN:
Agar chap yoki oʻng jadvalda mos keladigan 
boʻlsa, barcha ma‘lumotlarni qaytaradi. 
Soʻrovni yozishda bir nechta jadvallarni oʻzaro boʻladigan indeks 
maydonlar ishlatiladi. 
Koʻpincha bir nechta jadvallardan ma‘lumotlarni olishimiz kerak 
boʻladi. Turli jadvallardagi ma‘lumotlarni birlashtirish uchun SELECT 
buyrugʻidan foydalanishingiz mumkin. Misol uchun, sizda munosabatlar 
bilan bogʻlangan quyidagi jadvallar mavjud deylik: 
1. 
2. 
3. 
4. 
5. 
6. 
7. 
8. 
9. 
10. 
11. 
12. 
13. 
14. 
15. 
CREATE
TABLE
Products
(
Id SERIAL PRIMARY
KEY,
ProductName VARCHAR(30) NOT
NULL,
Company VARCHAR(20) NOT
NULL,
ProductCount INTEGER
DEFAULT
0,
Price NUMERIC
NOT
NULL
);
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName VARCHAR(30) NOT
NULL
);
CREATE
TABLE
Orders
(
Id SERIAL PRIMARY
KEY,


72 
16. 
17. 
18. 
19. 
20. 
21. 
22. 
23. 
ProductId 
INTEGER
NOT
NULL
REFERENCES
Products(Id) ON
DELETE
CASCADE,
CustomerId 
INTEGER
NOT
NULL
REFERENCES
Customers(Id) ON
DELETE
CASCADE,
CreatedAt DATE
NOT
NULL,
ProductCount INTEGER
DEFAULT
1,
Price NUMERIC
NOT
NULL
);
Bunday holda, Mijozlar va Mahsulotlar jadvallari Buyurtmalar 
jadvaliga birdan koʻpga bogʻlangan. ProductId va CustomerId xorijiy 
kalitlari koʻrinishidagi Buyurtmalar jadvali mos ravishda Mahsulotlar va 
mijozlar jadvallaridagi Id ustunlariga havolalarni oʻz ichiga oladi. 
Shuningdek, u sotib olingan mahsulot miqdorini (ProductCount) va 
qanday narxda sotib olinganini (Narx) saqlaydi. Bundan tashqari, jadval 
xarid sanasini CreatedAt ustunida ham saqlaydi. 
Ushbu jadvallar quyidagi ma‘lumotlarni oʻz ichiga oladi: 
1. 
2. 
3. 
4. 
5. 
6. 
7. 
8. 
9. 
10. 
11. 
12. 
13. 
14. 
15. 
16. 
17. 
18. 
19. 
20. 
21. 
22. 
INSERT
INTO
Products(ProductName, 
Company, 
ProductCount, Price) 
VALUES
('iPhone X', 'Apple', 2, 66000),
('iPhone 8', 'Apple', 2, 51000),
('iPhone 7', 'Apple', 5, 42000),
('Galaxy S9', 'Samsungʻ, 2, 56000),
('Galaxy S8 Plus', 'Samsungʻ, 1, 46000),
('Nokia 9', 'HDM Global', 2, 26000),
('Desire 12', 'HTC', 6, 38000);
INSERT
INTO
Customers(FirstName) 
VALUES
('Tom'), ('Bob'),('Sam');
INSERT
INTO
Orders(ProductId, CustomerId, CreatedAt, 
ProductCount, Price) 
VALUES

(SELECT
Id 
FROM
Products 
WHERE
ProductName='Galaxy S9'), 
(SELECT
Id FROM
Customers WHERE
FirstName='Tom'),
'2017-07-11',
2, 
(SELECT
Price 
FROM
Products 
WHERE
ProductName='Galaxy S9')
),


73 
23. 
24. 
25. 
26. 
27. 
28. 
29. 
30. 
31. 
32. 
33. 
34. 
35. 
36. 

(SELECT
Id 
FROM
Products 
WHERE
ProductName='iPhone 8'), 
(SELECT
Id FROM
Customers WHERE
FirstName='Tom'),
'2017-07-13',
1, 
(SELECT
Price 
FROM
Products 
WHERE
ProductName='iPhone 8')
),

(SELECT
Id 
FROM
Products 
WHERE
ProductName='iPhone 8'), 
(SELECT
Id FROM
Customers WHERE
FirstName='Bob'),
'2017-07-11',
1, 
(SELECT
Price 
FROM
Products 
WHERE
ProductName='iPhone 8')
);
Keling, ikkita jadvalni qoʻshamiz Buyurtmalar va mijozlar: 
1. 
SELECT
* FROM
Orders, Customers;
Ushbu tanlov yordamida Buyurtmalar jadvalidagi har bir satr Mijozlar 
jadvalidagi har bir qatorga moslashtiriladi. Ya'ni, siz oʻzaro bogʻlanishni 
olasiz. Masalan, Buyurtmalarda uchta qator, Mijozlarda esa uchta qator 
mavjud, shuning uchun biz 3 · 3 = 9 qatorni olamiz: 
7.1-rasm. Jadvallarni qoʻshish 


74 
Ya'ni, bu holda biz ikki guruhning toʻgʻridan-toʻgʻri (kartezian) 
mahsulotini olamiz. Biroq, bunday natijani istalgan deb atash qiyin. 
Bundan tashqari, Buyurtmalarning har bir buyurtmasi barcha mumkin 
boʻlgan mijozlar bilan emas, balki Mijozlarning ma‘lum bir mijozi bilan 
bogʻliq. 
Ushbu muammoni hal qilish uchun siz WHERE bandidan 
foydalanishingiz va Buyurtmalardagi CustomerId maydoni Mijozlarning 
Id maydoniga mos kelishi sharti bilan qatorlarni filtrlashingiz kerak: 
1. 
2. 
SELECT
* FROM
Orders, Customers
WHERE
Orders.CustomerId = Customers.Id;
7.2-rasm. Jadvallarni qoʻshish 
Keling, uchta jadvaldagi Buyurtmalar, Mijozlar va Mahsulotlar uchun 
ma‘lumotlarni birlashtiramiz. Ya'ni, biz barcha buyurtmalarni qabul 
qilamiz hamda mijoz va tegishli mahsulot haqida ma‘lumot qoʻshamiz: 



SELECT
Customers.FirstName, Products.ProductName, 
Orders.CreatedAt 
FROM
Orders, Customers, Products
WHERE
Orders.CustomerId = Customers.Id AND
Orders.ProductId=Products.Id;
Bu yerda uchta jadval birlashtirilganligi sababli, kamida ikkita shart 
qoʻllanilishi kerak. Buyurtmalar asosiy jadval boʻlib qoladi, undan barcha 
buyurtmalar olinadi va keyin mijoz haqidagi ma‘lumotlar unga Orders. 


75 
CustomerId = Customers. Id sharti boʻyicha va mahsulot haqidagi 
ma‘lumotlar Orders. ProductId = Products. Id sharti boʻyicha ulanadi. 
7.3-rasm. Jadvallarni qoʻshish 
Bu holda jadval nomlari kodni sezilarli darajada oshirganligi sababli, 
jadval taxalluslari yordamida uni qisqartirishimiz mumkin: 
1. 
2. 
3. 
SELECT
C.FirstName, P.ProductName, O.CreatedAt 
FROM
Orders AS
O, Customers AS
C, Products AS
P
WHERE
O.CustomerId = C.Id AND
O.ProductId=P.Id;
Agar taxallusdan foydalanganda ma‘lum bir jadvaldagi barcha 
ustunlarni tanlashingiz kerak boʻlsa, yulduzchadan foydalanishingiz 
mumkin: 
1. 
2. 
3. 
SELECT
C.FirstName, P.ProductName, O.*
FROM
Orders AS
O, Customers AS
C, Products AS
P
WHERE
O.CustomerId = C.Id AND
O.ProductId=P.Id;
INNER JOIN 
Jadvallarni birlashtirishning yana bir usuli JOIN yoki INNER JOIN 
operatorlaridan foydalanishdir. U ichki bogʻlanish deb ataladigan narsani 
ifodalaydi. Uning rasmiy sintaksisi: 
1. 
2. 
3. 
4. 
SELECT
столбцы
FROM
таблица1
[INNER] JOIN
таблица2
ON
условие1


76 
5. 
6. 
[[INNER] JOIN
таблица3
ON
условие2]
JOIN operatoridan keyin ikkinchi jadval nomi keladi, uning 
ma‘lumotlari tanlovga qoʻshilishi kerak. JOIN oldidan ixtiyoriy INNER 
bayonoti boʻlishi mumkin. Uning mavjudligi yoki yoʻqligi hech narsaga 
ta'sir qilmaydi. Bundan tashqari, ON kalit soʻzidan keyin qoʻshilish sharti 
koʻrsatiladi. Bu shart ikki jadval qanday solishtirilishini belgilaydi. 
Odatda, birlashma asosiy jadvalning asosiy kalitidan va bogʻliq jadvalning 
tashqi kalitidan foydalanadi. 
Oldingi yuqoridagi ma‘lumotlar jadvallarini olaylik. 
JOIN-dan foydalanib, keling, barcha buyurtmalarni tanlaymiz va ularga 
mahsulot ma‘lumotlarini qoʻshamiz: 
1. 
2. 
3. 
SELECT
Orders.CreatedAt, 
Orders.ProductCount, 
Products.ProductName 
FROM
Orders
JOIN
Products ON
Products.Id = Orders.ProductId;
Xuddi shunday, biz boshqa jadvallarni qoʻshishimiz mumkin. Misol 
uchun, mijozlar jadvalidagi mijoz ma‘lumotlarini buyurtmaga qoʻshamiz: 
1. 
2. 
3. 
4. 
SELECT
Orders.CreatedAt, 
Customers.FirstName, 
Products.ProductName 
FROM
Orders
JOIN
Products ON
Products.Id = Orders.ProductId
JOIN
Customers ON
Customers.Id=Orders.CustomerId;
7.4-rasm. JOIN operatoridan foydalanish 


77 
Jadvallarni birlashtirish tufayli biz tanlovni filtrlash yoki saralash 
uchun ularning ustunlaridan foydalanishimiz mumkin: 
1. 
2. 
3. 
4. 
5. 
6. 
SELECT
Orders.CreatedAt, 
Customers.FirstName, 
Products.ProductName 
FROM
Orders
JOIN
Products ON
Products.Id = Orders.ProductId
JOIN
Customers ON
Customers.Id=Orders.CustomerId
WHERE
Products.Price > 45000
ORDER
BY
Customers.FirstName;
ON kalit soʻzidan keyingi shartlar murakkabroq boʻlishi mumkin. 
Misol uchun, Apple tomonidan ishlab chiqarilgan mahsulotlar uchun 
barcha buyurtmalarni tanlaymiz. 
1. 
2. 
3. 
4. 
5. 
SELECT
Orders.CreatedAt, 
Customers.FirstName, 
Products.ProductName 
FROM
Orders
JOIN
Products ON
Products.Id = Orders.ProductId AND
Products.Company='Apple'
JOIN
Customers ON
Customers.Id=Orders.CustomerId
ORDER
BY
Customers.FirstName;
OUTER JOIN yoki tashqi birlashmada qatnashgan bir yoki ikkita 
jadvalning barcha qatorlarini qaytarish imkonini beradi. 
Outer Join quyidagi sintaksisga ega: 
1. 
2. 
3. 
4. 
SELECT
столбцы
FROM
jadval1
{LEFT|RIGHT|FULL} [OUTER] JOIN
jadval2 ON
shart1
[{LEFT|RIGHT|FULL} [OUTER] JOIN
jadval3 ON
shart2]...
JOIN iborasi oldidan LEFT, RIGHT yoki FULL kalit soʻzlardan biri 
boʻlib, ular qoʻshilish turini aniqlaydi: 
LEFT: tanlov birinchi yoki chap jadvaldagi barcha qatorlarni oʻz ichiga 
oladi 
RIGHT: tanlov ikkinchi yoki oʻng jadvaldagi barcha qatorlarni oʻz 
ichiga oladi 
FULL: tanlov ikkala jadvaldagi barcha qatorlarni oʻz ichiga oladi 


78 
JOIN operatoridan oldin OUTER kalit soʻzi boʻlishi mumkin, lekin u 
ixtiyoriy. JOIN dan keyin qoʻshiladigan jadval, soʻngra qoʻshilish sharti 
ON operatoridan keyin keladi. 
Buyurtmalar va mijozlar jadvallarini qoʻshish: 
1. 
2. 
3. 
SELECT
FirstName, 
CreatedAt, 
ProductCount, 
Price, ProductId 
FROM
Orders LEFT
JOIN
Customers 
ON
Orders.CustomerId = Customers.Id;
Yuqoridagi natijadan koʻrinib turibdiki, chap tomondagi birlashma 
INNER qoʻshilish bilan bir xil, ammo unday emas. Shart bajarilganda 
Inner Join jadvallari qatorlarini birlashtiradi. Agar jadvallardan birida 
ushbu shartga mos kelmaydigan qatorlar mavjud boʻlsa, u holda bu 
qatorlar chiqish tanloviga kiritilmaydi. Left Join birinchi jadvaldagi barcha 
satrlarni tanlaydi va keyin oʻng jadvaldagi qatorlarni ularga birlashtiradi. 
Masalan, mijozlar jadvalini olaylik va mijozlarga ularning buyurtmalari 
haqida ma‘lumot qoʻshamiz: 
7.5-rasm. INNER JOIN va LEFT JOIN. 
Yuqoridagi misolda ulanish turini oʻng tomonga oʻzgartiramiz: 
1. 
2. 
3. 
SELECT
FirstName, CreatedAt, ProductCount, Price, 
ProductId 
FROM
Orders RIGHT
JOIN
Customers 
ON
Orders.CustomerId = Customers.Id;
Endi Mijozlarning barcha qatorlari tanlanadi va shartlar boʻyicha 
Buyurtmalar jadvalidagi qatorlar allaqachon ularga biriktiriladi: 


79 
7.6-rasm. RIGHT JOIN
 
Mijozlar jadvalidagi mijozlardan birining Buyurtmalardan bogʻlangan 
buyurtmalari yoʻqligi sababli, Buyurtmalardagi mos ustunlar NULL 
boʻladi. 
FULL JOIN ikkala jadvalni birlashtiradi: 
1. 
2. 
3. 
SELECT
FirstName, CreatedAt, ProductCount, Price, 
ProductId 
FROM
Orders FULL
JOIN
Customers 
ON
Orders.CustomerId = Customers.Id;

Download 2,08 Mb.
1   ...   11   12   13   14   15   16   17   18   19




Download 2,08 Mb.
Pdf ko'rish

Bosh sahifa
Aloqalar

    Bosh sahifa



Oʻzbеkistоn rеspublikаsi оliy vа oʻrtа mаxsus tа’lim vаzirligi islom karimov nоmidаgi

Download 2,08 Mb.
Pdf ko'rish