Tarkibga o'tish

019. UPSERT va MERGE

Bu mavzuda ON CONFLICT va MERGE bo'yicha 20 ta masala bor. Har bir masala oldida qavs ichida sxema nomi va qiyinlik darajasi ko'rsatilgan. Sxemalar Sxemalar va tayyorlov sahifasida berilgan.

Masalani o'zingiz yechib, natijani Kutilgan natija bilan solishtiring. O'zgartiruvchi masalalarda (INSERT, UPDATE, DELETE, DDL) natija shartda aytilgan tekshiruv so'rovidan olingan. Natija 10 qatordan ko'p bo'lsa, birinchi 10 qator ko'rsatilgan.

1. (dokon, oson) INSERT ... ON CONFLICT DO NOTHING: kategoriya (1,'Boshqa') ni qo'shishga urining — mavjud id; tekshirish: 1-kategoriya nomi.

Kutilgan natija
Elektronika

2. (dokon, oson) UPSERT: kategoriya (1,'Elektronika buyumlari') — mavjud bo'lsa nomini yangilang; tekshirish: 1-kategoriya nomi.

Kutilgan natija
Elektronika buyumlari

3. (dokon, oson) UPSERT: yangi kategoriya (9,'Yangi') — mavjud emas, qo'shilsin; tekshirish: soni.

Kutilgan natija
6

4. (dokon, o'rta) Mahsulot (id=1) bor: qoldiqni 5 taga oshiruvchi upsert (qoldiq = mahsulot.qoldiq + EXCLUDED.qoldiq).

Kutilgan natija
1 | 22

5. (dokon, o'rta) Ikki qatorli upsert: kategoriya 5 (mavjud) va 8 (yangi), RETURNING id, nom, natijani chiqaring.

Kutilgan natija
1 | Elektronika
2 | Kiyim
3 | Oziq-ovqat
4 | Kitob
5 | Uy jihozlari
8 | Avto

6. (dokon, o'rta) MERGE: vaqtinchalik jadvaldagi yangi narxlar (id=1,2) bilan mahsulot narxini yangilang.

Kutilgan natija
1 | 111111.00
2 | 222222.00
3 | 28700.00

7. (dokon, o'rta) MERGE: yangi mijoz (id=200) bo'lsa qo'shilsin, bor bo'lsa shahri yangilansin (id=1 uchun).

Kutilgan natija
1 | Qarshi
200 | Termiz

8. (dokon, qiyin) MERGE ... WHEN MATCHED AND ... THEN DELETE: qoldig'i 0 yoki undan kam bo'lganlarni (yangi qoldiqlar jadvali orqali) o'chiring; id=1 uchun qoldiq 0 qilinsin (buyurtma_element bog'liqligini hisobga olib avval o'chirmasdan, mahsulot 21 ni ishlating).

Kutilgan natija
0

9. (dokon, qiyin) MERGE ... RETURNING (PG17): id=1 narxini 1 so'mga o'zgartiring va merge_action(), id ni qaytaring.

Kutilgan natija
1.00

10. (maktab, oson) UPSERT: fan (1,'Algebra') — id mavjud; nomi yangilansin.

Kutilgan natija
1 | Algebra

11. (maktab, o'rta) DO NOTHING: ikki fan: biri mavjud (2), biri yangi (10) — faqat yangisi qo'shilsin.

Kutilgan natija
2 | Fizika
10 | Rasm

12. (maktab, o'rta) MERGE: o'qituvchi maoshlarini yangi (id,maosh) jadvali bilan yangilash va yangilarini qo'shish (id=1 mavjud, id=50 yangi).

Kutilgan natija
1 | 9000000.00
50 | 4000000.00

13. (bank, oson) UPSERT: filial (1,'Bosh filial','Toshkent').

Kutilgan natija
Bosh filial

14. (bank, o'rta) Hisob balansiga upsert: id=1 hisobga +1000 qo'shuvchi upsert (balans = hisob.balans + EXCLUDED.balans).

Kutilgan natija
1235567.00

15. (bank, o'rta) MERGE: yangi balanslar (id 1,2) bilan hisoblar yangilansin, mavjud bo'lmagan id=99 qo'shilsin.

Kutilgan natija
1 | 5000.00
2 | 6000.00
99 | 7000.00

16. (bank, qiyin) MERGE: nolga teng balansli hisoblarni o'chirish va qolganlarini 1% oshirish qoidasi (id 1 va 2 uchun balansni 0 qilib sinab ko'ring: avval tranzaksiyalarini o'chiring).

Kutilgan natija
0

17. (kutubxona, oson) UPSERT: janr (1,'Badiiy') yangilansin.

Kutilgan natija
Badiiy

18. (kutubxona, o'rta) DO NOTHING bilan a'zo qo'shish: id=1 (mavjud) va id=30 (yangi).

Kutilgan natija
1 | Zarina Sodiqova
30 | Yangi A'zo

19. (kutubxona, o'rta) Kitob nusxasi upsert: id=1 kitobga nusxa +3 (EXCLUDED.nusxa qo'shilsin).

Kutilgan natija
5

20. (kutubxona, qiyin) MERGE: ijara qaytarish — qaytarilmagan ijaralar (id 5,10) uchun qaytarilgan sanani qo'ying, bunday id=9999 yo'q bo'lsa e'tiborsiz.

Kutilgan natija
5 | 2024-12-31
10 | 2024-12-31