मॉड्यूल पाठ (1/3)
सीटीई का परिचय (साथ)
सीटीई का परिचय (साथ)
देर-सबेर यह हर किसी के साथ होता है: आपको एकत्रीकरण के परिणाम के आधार पर डेटा को फ़िल्टर करने की आवश्यकता होती है, फिर उस फ़िल्टर को लें और इसे किसी अन्य एकत्रित क्वेरी के साथ जोड़ दें। आप SELECT के अंदर SELECT लिखना शुरू करते हैं, जो बदले में एक और SELECT के FROM में समाप्त होता है।
नतीजा? स्पेगेटी एसक्यूएल, एक ऐसी क्वेरी जो किसी भी इंसान के लिए अपठनीय है।
सीटीई (कॉमन टेबल एक्सप्रेशन) आपको इस गड़बड़ी को सुलझाने देता है। आप उन्हें WITH कीवर्ड के साथ सक्रिय करते हैं, जो आपको अस्थायी नामित क्वेरी को परिभाषित करने और फिर अंतिम क्वेरी में उन्हें "वर्चुअल टेबल" के रूप में पुन: उपयोग करने की अनुमति देता है।
मूल सिंटेक्स
WITH premium_customers AS (
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;जैसा कि आप देख सकते हैं, नीचे दी गई मुख्य क्वेरी premium_customers से है जैसे कि यह एक वास्तविक तालिका हो! और यह नेस्टेड सबक्वेरीज़ वाले मेगा इनर-जॉइन की तुलना में कहीं अधिक पठनीय है।
हम बहुत महंगे उत्पाद चाहते हैं। 'उत्पादों' से 'आईडी' और 'कीमत' का चयन करने के लिए 'लक्जरी_प्रोडक्ट्स' नामक सीटीई का उपयोग करें जहां 'कीमत> 500' है। फिर इस CTE पर एक मुख्य क्वेरी चलाएँ और सब कुछ दिखाएँ (*)।
संकेत दिखाएँ
लक्ज़री_प्रोडक्ट्स AS (...) से प्रारंभ करें, फिर लक्ज़री_प्रोडक्ट्स से * चुनें।
3 प्रयासों के बाद समाधान उपलब्ध है
हम ऐसे उपयोगकर्ताओं को ढूंढना चाहते हैं जो समीक्षाएँ लिखते हैं। एक CTE 'समीक्षक' बनाएं जो 'समीक्षाओं' से अद्वितीय (DISTINCT) 'customer_id' मान निकालता है। फिर 'ग्राहक' तालिका से 'आईडी', 'पहला_नाम', 'अंतिम_नाम' निकालें और आईडी पर 'समीक्षकों' सीटीई के साथ इसे \`जुड़ें\`।
संकेत दिखाएँ
समीक्षकों के साथ AS (समीक्षाओं से अलग ग्राहक_आईडी चुनें) ग्राहकों से आईडी, प्रथम_नाम, अंतिम_नाम चुनें customer.id पर समीक्षकों से जुड़ें = समीक्षक.ग्राहक_आईडी;
3 प्रयासों के बाद समाधान उपलब्ध है