समस्या:
आप SQL सर्वर परिणाम सेट में पंक्तियों को सीमित करना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में toy
कॉलम में डेटा के साथ id
, name
, और price
।
आईडी | <थ>नामकीमत | |
---|---|---|
161 | बाइक बीएमएक्स | 200.00 |
121 | रोबोट टोबी | 185.50 |
213 | मछली पकड़ने का खेल | 25.00 |
102 | पशु पहेली | 45.80 |
111 | रेस ट्रैक सेट | 126.70 |
233 | आसान ईंटें | 21.00 |
आइए खिलौनों के नाम और कीमतों का चयन करें। लेकिन हमें केवल पहली पांच पंक्तियां देखने की जरूरत है।
समाधान 1:
SELECT name, price FROM toy ORDER BY price OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;
ये रहा क्वेरी का नतीजा:
नाम | कीमत |
---|---|
आसान ईंटें | 21.00 |
मछली पकड़ने का खेल | 25.00 |
पशु पहेली | 45.80 |
रेस ट्रैक सेट | 126.70 |
रोबोट टोबी | 185.50 |
चर्चा:
परिणाम सेट में पंक्तियों को सीमित करने के लिए, वैकल्पिक OFFSET और FETCH क्लॉज के साथ ORDER BY का उपयोग करें। सबसे पहले, क्वेरी पंक्तियों को क्रमबद्ध करती है (ORDER BY)। फिर आप SQL सर्वर को बताते हैं कि परिणाम सेट में पहली पंक्ति कौन सी होनी चाहिए (ऑफसेट ... पंक्तियाँ) और कितनी पंक्तियों को वापस करना है (केवल प्राप्त करें)।
OFFSET क्लॉज ORDER BY के तुरंत बाद रखा जाता है। पूर्णांक पहली पंक्ति को गिनने के लिए इंगित करता है (SQL सर्वर में, पहली पंक्ति 0 है, दूसरी पंक्ति 1 है, आदि), इसके बाद कीवर्ड ROW या ROWS है। आप या तो ROW या ROWS का उपयोग कर सकते हैं, लेकिन 1 पंक्ति के लिए ROW और 0 और एकाधिक पंक्तियों के लिए ROWS का उपयोग करने की अनुशंसा की जाती है। तस्वीर को देखो:
हमारे उदाहरण में, हम कीमत . के अनुसार क्रमित करते हैं (ORDER BY price
) और पहली पंक्ति से परिणाम लौटाना शुरू करें (OFFSET 0 ROWS
) फिर हम FETCH का उपयोग FIRST कीवर्ड के साथ करते हैं। आप पहले या अगले का उपयोग कर सकते हैं; यदि आप बिना किसी रिकॉर्ड को छोड़े पहली पंक्ति से शुरू कर रहे हैं तो FIRST का उपयोग करने की अनुशंसा की जाती है और यदि कोई पंक्ति छोड़ी जाती है तो अगला (अर्थात यदि OFFSET 0 से अधिक है)।
अंत में, हमारे पास चयन करने के लिए पंक्तियों की संख्या और कीवर्ड केवल ROWS है। ROWS का उपयोग केवल तभी करें जब आप एक से अधिक पंक्तियाँ लौटा रहे हों और केवल ROW आप परिणाम को एक पंक्ति तक सीमित कर रहे हों। हमारे उदाहरण में, हम इसे पाँच पंक्तियों तक सीमित करते हैं (FETCH FIRST 5 ROWS ONLY
)।
नीचे, हमारे पास एक और क्वेरी है जो पंक्तियों को पाँच तक सीमित करती है लेकिन तालिका में पाँचवीं पंक्ति से शुरू होती है (OFFSET 4 ROWS
):
समाधान 2:
SELECT name, price FROM toy ORDER BY price OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY;
ये रहा क्वेरी का नतीजा:
नाम | कीमत |
---|---|
रोबोट टोबी | 185.50 |
बाइक बीएमएक्स | 200.00 |
ध्यान दें कि यह क्वेरी केवल दो पंक्तियाँ लौटाती है, न कि पाँच संकेतित। तस्वीर को देखो:
केवल दो पंक्तियाँ ही क्यों? क्योंकि इस तालिका में केवल छह रिकॉर्ड हैं। यदि हम पहली चार पंक्तियों को छोड़ देते हैं और पंक्ति 5 से शुरू करते हैं, तो केवल दो पंक्तियाँ शेष रह जाती हैं।
SQL सर्वर के पास पंक्तियों को सीमित करने का एक और तरीका है:TOP क्लॉज।
समाधान 3:
SELECT TOP 3 name, price FROM toy ORDER BY price;
ये रहा क्वेरी का नतीजा:
नाम | कीमत |
---|---|
आसान ईंटें | 21.00 |
मछली पकड़ने का खेल | 25.00 |
पशु पहेली | 45.80 |
यदि आपको किसी पंक्ति को छोड़ने की आवश्यकता नहीं है, तो आप लौटाई गई पंक्तियों को सीमित करने के लिए SQL सर्वर के TOP क्लॉज का उपयोग कर सकते हैं। इसे SELECT के तुरंत बाद रखा जाता है। शीर्ष कीवर्ड के बाद पूर्णांक होता है जो लौटने के लिए पंक्तियों की संख्या दर्शाता है। हमारे उदाहरण में, हमने कीमत . के आधार पर आदेश दिया है और फिर लौटाई गई पंक्तियों को 3 तक सीमित कर दिया।
OFFSET - FETCH पद्धति के विपरीत, TOP को ORDER BY की आवश्यकता नहीं होती है। यहां एक समान उदाहरण दिया गया है, लेकिन रिकॉर्ड को क्रमबद्ध किए बिना:
समाधान 4:
SELECT TOP 3 name, price FROM toy;
ये रहा क्वेरी का नतीजा:
ध्यान दें कि विभिन्न रिकॉर्ड वापस कर दिए गए हैं। आम तौर पर (लेकिन हमेशा नहीं) पंक्तियों को उसी क्रम में दिखाया जाएगा जिस क्रम में रिकॉर्ड तालिका में डाले गए थे।
हम TOP के बजाय OFFSET और FETCH का उपयोग करने की सलाह देते हैं, क्योंकि OFFSET और FETCH SQL मानक हैं; TOP T-SQL के लिए विशिष्ट है।