WITH: nomlangan so‘rovlar
168 daq
Murakkab so‘rovlar tezda chalkashib ketadi: ichki so‘rov ichida ichki so‘rov… WITH (CTE — Common Table Expression) ularni nomlangan, tartibli qadamlarga ajratadi.
Qolip
WITH nom AS (
SELECT …
)
SELECT … FROM nom;nom — shu so‘rov davomida mavjud bo‘ladigan vaqtinchalik jadval.
Misol: o‘rtacha balli talabalar
Avval har bir talabaning o‘rtacha balini hisoblaymiz, keyin undan foydalanamiz:
Xuddi shuni ichki so‘rov bilan ham yozsa bo‘ladi, lekin WITH bilan o‘qish ancha oson: har bir qadamning nomi bor.
Bir nechta CTE
Vergul bilan ketma-ket yoziladi, keyingisi oldingisidan foydalana oladi:
Rekursiv CTE
WITH RECURSIVE o‘zini o‘zi chaqiradi — daraxtsimon ma’lumot uchun (rahbar → bo‘ysunuvchi → uning bo‘ysunuvchisi…):
Birinchi qism — boshlang‘ich nuqta (bosh direktor), ikkinchisi — har safar bir pog‘ona pastga tushadi.
WITH yordamida har bir haydovchining yakunlangan safarlar sonini hisoblang va 40 tadan ko‘p safari borlarning driver_id va safarlar sonini chiqaring.
Esda qoldiring
WITH nom AS (…)— so‘rovni nomlangan qadamlarga bo‘ladi.- Bir nechta CTE vergul bilan; keyingisi oldingisini ishlata oladi.
WITH RECURSIVE— daraxt va zanjirlar uchun.