Bosh sahifa Wiki Derived table

Derived table

Derived tableSQL FROM bandida yozilgan subquery natijasidan hosil bo‘ladigan vaqtinchalik relation. U mustaqil doimiy jadval sifatida saqlanmaydi; faqat tashqi query doirasida nomlangan table source sifatida ishlatiladi.

Sintaksis

Har mijoz bo‘yicha jami summani avval hisoblab, keyin filtrlaydigan misol:

SELECT d.customer_id, d.total_amount
FROM (
    SELECT customer_id, SUM(total) AS total_amount
    FROM orders
    GROUP BY customer_id
) AS d
WHERE d.total_amount >= 1000000;

Ko‘pchilik database tizimlarida derived table uchun alias majburiy. Uning ustun nomlari ichki SELECT aliaslaridan olinadi yoki tashqi alias ro‘yxati bilan beriladi. Bir xil nomli ustunlar keyingi murojaatni ambiguous qilishi mumkin.

Query bloklari

Ichki query alohida query block bo‘lib, projection, filter, aggregate, window function va set operationni o‘z ichiga olishi mumkin. Tashqi query uning natijasini oddiy jadvaldek join qiladi yoki filtrlaydi. Bu mantiqiy bosqichlarni ajratib, masalan window alias bo‘yicha tashqi filter yozishga imkon beradi.

Derived table ichidagi ORDER BY tashqi natija tartibini kafolatlamaydi. Sort faqat LIMIT/FETCH bilan ichki top-Nni aniqlash yoki mahsulotga xos semantika uchun ahamiyatli. Yakuniy ko‘rsatish tartibi eng tashqi queryda beriladi.

Inline va materialization

“Derived” atamasi natija albatta to‘liq vaqtinchalik disk jadvaliga yoziladi degani emas. Optimizer subqueryni tashqi queryga merge/inline qilib, filterlarni ichkariga surishi mumkin. Boshqa holatda natijani materialize qiladi va keyin bir yoki bir necha marta o‘qiydi.

GROUP BY, DISTINCT, LIMIT, window function yoki set operatori kabi semantik chegaralar merge imkoniyatini cheklashi mumkin. Query plan materialization, temporary scan yoki inline qilingan operatorlarni ko‘rsatadi. Materialization takroriy hisobni kamaytirishi, evaziga xotira va disk sarflashi mumkin.

Correlation va lateral

Oddiy derived table odatda FROMdagi oldingi table aliasiga murojaat qila olmaydi. LATERAL yoki mahsulotdagi APPLY operatori ichki queryni tashqi satrga bog‘lash imkonini beradi. Bu har customer uchun eng yangi order kabi top-N-per-group vazifada ishlatiladi.

Correlated lateral query tashqi satrlar sonicha bajarilishi mumkin. Mos index bo‘lsa samarali, katta tashqi oqimda esa qimmat bo‘lishi mumkin. Query plandagi loops va actual rows tekshiriladi.

CTE va viewdan farqi

Common Table Expression WITH bandida nomlanadi va murakkab queryni yuqoridan o‘qishni yengillashtiradi; recursive bo‘lishi ham mumkin. Derived table aynan FROM ichida joylashadi. Zamonaviy optimizerlarda ikkalasi ko‘pincha o‘xshash plan oladi, ammo materialization qoidasi mahsulot va versiyaga bog‘liq.

View schema darajasida saqlangan query ta’rifi bo‘lib, ko‘p query tomonidan ishlatiladi. Derived table bir statementga lokal. Sensitive ustunlarni olib tashlash yoki access controlni faqat query ichidagi projectionga tayanib hal qilish yetarli emas; ruxsat alohida boshqariladi.

DML bilan ishlash

Ayrim database tizimlarida derived table UPDATE yoki DELETE targetini aniqlash uchun join source bo‘lishi mumkin. Yangilanadigan target aniq va har qator uchun deterministic bo‘lishi kerak. Bitta target satrga derived table’dan bir nechta mos yozuv kelsa, qaysi qiymat qo‘llanishi noma’lum yoki mahsulotga xos bo‘ladi. Avval source unique ekanligi constraint yoki ranking bilan ta’minlanadi. O‘zgartiruvchi query transaction ichida dry-run SELECT va ta’sirlangan satrlar soni bilan tekshiriladi.

Bog‘liq tushunchalar

Subquery, Common Table Expression, LATERAL, Materialization, Query optimizer, View, FROM clause, Query plan