PostgreSQL CTE
Ushbu qo'llanmada siz murakkab so'rovlarni soddalashtirish uchun PostgreSQL CTE (umumiy jadval ifodalari(common table expressions)) dan qanday foydalanishni o'rganasiz.
Umumiy jadval ifodasi vaqtinchalik natijalar to'plami bo'lib, siz boshqa SQL iborasida, jumladan, SELECT, INSERT, UPDATE yoki DELETE orqali murojaat qilishingiz mumkin.
Umumiy jadval iboralari vaqtinchalik, chunki ular faqat so'rovni bajarish paytida mavjud bo'ladi.
Quyida CTE yaratish sintaksisi ko'rsatilgan:
WITH cte_name (column_list) AS (
CTE_query_definition
)
statement; Ushbu sintaksisda:
Birinchidan, ixtiyoriy ustunlar ro'yxatidan keyin CTE nomini belgilang.
Ikkinchidan,
WITHbandining tanasi ichida natijalar to'plamini qaytaradigan so'rovni belgilang. Agar siz CTE nomidan keyin ustunlar ro'yxatini aniq ko'rsatmasangiz,CTE_query_definitionning tanlangan ro'yxati CTE ustunlar ro'yxatiga aylanadi.Uchinchidan,
SELECT,INSERT,UPDATEyokiDELETEbo'lishi mumkin bo'lgan bayonotdagi jadval yoki ko'rinish kabiCTEdan foydalaning.
Umumiy jadval ifodalari yoki CTE odatda PostgreSQL-da murakkab birlashmalar va pastki so'rovlarni soddalashtirish uchun ishlatiladi.
PostgreSQL CTE misollari
Keling, yaxshiroq tushunish uchun CTE dan foydalanishga misollar keltiraylik.
Oddiy PostgreSQL CTE misoli
Namoyish uchun namunaviy ma'lumotlar bazasidagi film va rental jadvallaridan foydalanamiz.
Quyidagi misolga qarang:
WITH cte_film AS (
SELECT
film_id,
title,
(CASE
WHEN length < 30 THEN 'Short'
WHEN length < 90 THEN 'Medium'
ELSE 'Long'
END) length
FROM
film
)
SELECT
film_id,
title,
length
FROM
cte_film
WHERE
length = 'Long'
ORDER BY
title;Mana qisman chiqish:

E'tibor bering, ushbu misol namoyish qilish uchun mo'ljallangan.
Ushbu misolda biz birinchi navbatda WITH bandidan foydalanib cte_film nomli umumiy jadval ifodasini quyidagicha aniqladik:
WITH cte_film AS (
SELECT
film_id,
title,
(CASE
WHEN length < 30
THEN 'Short'
WHEN length >= 30 AND length < 90
THEN 'Medium'
WHEN length >= 90
THEN 'Long'
END) length
FROM
film
)Umumiy jadval ifodasi ikki qismdan iborat:
Birinchi qism
CTEnomini belgilaydi, ya'nicte_film.Ikkinchi qism ifodani qatorlar bilan to'ldiradigan
SELECTiborasini belgilaydi.
Keyin biz SELECT bayonotida cte_film CTE dan faqat uzunligi "Long"` filmlarni qaytarish uchun foydalandik.
JOIN bilan CTE jadval misollari
Quyidagi misolda biz rental va staff jadvalidan foydalanamiz:
Quyidagi bayonot CTE ga jadval bilan qanday qo'shilish kerakligini ko'rsatadi:
WITH cte_rental AS (
SELECT staff_id,
COUNT(rental_id) rental_count
FROM rental
GROUP BY staff_id
)
SELECT s.staff_id,
first_name,
last_name,
rental_count
FROM staff s
INNER JOIN cte_rental USING (staff_id);Ushbu misolda:
Birinchidan,
CTExodimlar identifikatori va ijaralar sonini o'z ichiga olgan natijalar to'plamini qaytaradi.Keyin,
staff_idustunidan foydalanib,staffjadvaliga CTE bilan qo'shiling.
Mana natija:

Oyna funktsiyasi misoli bilan CTE dan foydalanish
Quyidagi bayonot CTE dan RANK() oyna funksiyasi bilan qanday foydalanishni ko'rsatadi:
WITH cte_film AS (
SELECT film_id,
title,
rating,
length,
RANK() OVER (
PARTITION BY rating
ORDER BY length DESC)
length_rank
FROM
film
)
SELECT *
FROM cte_film
WHERE length_rank = 1;Ushbu misolda:
Birinchidan, biz har bir film reytingi uchun filmlar reytingini uzunligi bo'yicha qaytaradigan CTE ni aniqladik.
Ikkinchidan, biz faqat uzunligi reytingi bitta bo'lgan filmlarni tanladik.
Quyidagi rasmda chiqish ko'rsatilgan:

PostgreSQL CTE afzalliklari
Quyidagilar umumiy jadval ifodalari yoki CTE lardan foydalanishning ba'zi afzalliklari:
Murakkab so'rovlarni o'qish qobiliyatini yaxshilashi. Siz murakkab so'rovlarni yanada tartibli va o'qilishi mumkin bo'lgan tarzda tashkil qilish uchun CTE'lardan foydalanasiz.
Rekursiv so'rovlarni yaratish qobiliyati. Rekursiv so'rovlar o'z-o'ziga havola qiladigan so'rovlardir. Rekursiv so'rovlar tashkilot jadvali yoki materiallar ro'yxati kabi ierarxik ma'lumotlarni so'rashni xohlaganingizda foydali bo'ladi.
Oyna funksiyalari bilan birgalikda foydalanish. Dastlabki natijalar to'plamini yaratish uchun CTE'larni oyna funktsiyalari bilan birgalikda ishlatishingiz va ushbu natijalar to'plamini keyingi qayta ishlash uchun boshqa tanlash bayonotidan foydalanishingiz mumkin.
Ushbu qo'llanmada siz PostgreSQL CTE yoki murakkab so'rovlarni soddalashtirish uchun umumiy jadval ifodasi haqida bilib oldingiz.
Last updated
Was this helpful?