ORDER BY
क्वेरी के परिणामों को सॉर्ट करने के लिए आमतौर पर SQL में क्लॉज का उपयोग किया जाता है।
यह आपको उस क्रम को निर्दिष्ट करने की अनुमति देता है जिसमें परिणाम लौटाए जाते हैं।
आप निर्दिष्ट कर सकते हैं कि परिणाम आरोही क्रम या अवरोही क्रम में क्रमबद्ध हैं या नहीं। आप छँटाई के लिए कई कॉलम भी निर्दिष्ट कर सकते हैं।
उदाहरण
ORDER BY
. को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है खंड।
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId ASC;
परिणाम:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | | 1002 | Sledge Hammer | 33.49 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | +------------+---------------------------------+----------------+
ASC
भाग का अर्थ है आरोही . जब आप ORDER BY
का उपयोग करते हैं खंड, यह आरोही के लिए डिफ़ॉल्ट है, इसलिए आप ASC
. को छोड़ सकते हैं यदि आप चाहें तो भाग।
तो हम इस तरह की क्वेरी भी लिख सकते हैं:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId;
अवरोही क्रम
इसे अवरोही . में क्रमित करने के लिए ऑर्डर करें, DESC
का उपयोग करें ।
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC;
परिणाम:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
एकाधिक कॉलम द्वारा ऑर्डर करें
आप कई कॉलम निर्दिष्ट कर सकते हैं जिनके साथ सॉर्ट करना है। यह आपको यह निर्दिष्ट करने में सक्षम बनाता है कि पहले सॉर्ट किए गए कॉलम में समान मान वाली एकाधिक पंक्तियां होने पर पंक्तियों को कैसे सॉर्ट किया जाना चाहिए।
इसे एक उदाहरण के साथ प्रदर्शित करना शायद आसान है।
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName DESC, ProductPrice DESC;
परिणाम:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------------+---------------------------------+----------------+
यदि हम VendorId
. के साथ तीन पंक्तियों पर ध्यान केंद्रित करते हैं का 1001
, हम देख सकते हैं कि पिछले उदाहरण ने उत्पाद के नामों को आरोही क्रम में लौटाया, लेकिन इस उदाहरण में हमने उन्हें अवरोही क्रम में लौटा दिया। ऐसा इसलिए है, क्योंकि हमने ProductName
. को नामांकित किया है हमारे ORDER BY
. में दूसरे कॉलम के रूप में खंड, और हमने निर्दिष्ट किया DESC
अवरोही क्रम के लिए।
दूसरा कॉलम केवल तभी प्रभावी होता है जब पहले ORDER BY
. में डुप्लीकेट हों कॉलम। यदि नहीं, तो आगे की छँटाई के लिए कोई भी अनुवर्ती कॉलम अप्रासंगिक है।
अगर हम ProductPrice
को देखें तो कॉलम, हम देख सकते हैं कि इस कॉलम का छँटाई पर कोई प्रभाव नहीं पड़ा, भले ही हमने ProductPrice DESC
निर्दिष्ट किया हो . हम देख सकते हैं कि कीमतें आरोही क्रम में हैं, हमारे आग्रह के बावजूद कि वे अवरोही क्रम में होनी चाहिए। इस कॉलम का कोई प्रभाव नहीं होने का कारण यह है कि पहले से छांटे गए कॉलम में कोई डुप्लिकेट नहीं था। इसलिए, पहले दो स्तंभों के क्रम ने परिणामों को प्रभावित किया, लेकिन तीसरे स्तंभ के क्रम ने ऐसा नहीं किया।
यह कहना नहीं है कि तीसरे स्तंभ का कभी कोई प्रभाव नहीं पड़ेगा। अगर बाद में हमने एक और Left handed screwdriver
inserted डाला , लेकिन एक अलग कीमत पर, फिर ProductPrice
कॉलम का क्रम इस तथ्य के कारण प्रभावी होगा कि ProductName
में डुप्लिकेट मान हैं कॉलम।
आरोही को अवरोही के साथ मिलाना
आप प्रत्येक कॉलम को आरोही और अवरोही क्रम में मिला सकते हैं। जरूरी नहीं कि वे सभी एक जैसे हों। उदाहरण के लिए, हम यह कर सकते हैं:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName ASC, ProductPrice DESC;
परिणाम:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
कॉलम उपनामों द्वारा आदेश
ORDER BY
क्लॉज कॉलम एलियासेस को एक कॉलम के रूप में स्वीकार करता है जिसके द्वारा ऑर्डर किया जाना है।
उदाहरण के लिए, हम यह कर सकते हैं:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY ID DESC, Name DESC, Price DESC;
परिणाम:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
उन स्तंभों के आधार पर क्रमित करें जो चयन सूची में नहीं हैं
ORDER BY
क्लॉज उन कॉलमों को स्वीकार करता है जो SELECT
. में निर्दिष्ट नहीं हैं सूची।
दूसरे शब्दों में, आपको उस कॉलम के आधार पर छाँटने के लिए किसी कॉलम को चुनने की ज़रूरत नहीं है।
उदाहरण:
SELECT
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY VendorId DESC, Name DESC, Price DESC;
परिणाम:
+---------------------------------+---------+ | Name | Price | |---------------------------------+---------| | Bottomless Coffee Mugs (4 Pack) | 9.99 | | Straw Dog Box | 55.99 | | Chainsaw | 245.00 | | Sledge Hammer | 33.49 | | Long Weight (green) | 11.99 | | Long Weight (blue) | 14.75 | | Left handed screwdriver | 25.99 | +---------------------------------+---------+
यहां, हमने VendorId
. द्वारा आदेश दिया है कॉलम, भले ही हमने इसे SELECT
. में शामिल न किया हो सूची।
कॉलम आईडी के आधार पर ऑर्डर करें
ORDER BY
क्लॉज कॉलम नाम के स्थान पर कॉलम आईडी को भी स्वीकार करता है।
उदाहरण के लिए, हम यह कर सकते हैं:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
परिणाम:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
हालाँकि, यह अनुशंसित नहीं है।
सबसे पहले, यह दूसरों के लिए पढ़ने और समझने के लिए क्वेरी को कठिन बनाता है।
दूसरा, अगर किसी ने बाद में SELECT
. में कॉलम का क्रम बदल दिया हो सूची में, उन्हें ORDER BY
. का क्रम भी बदलना होगा सूची। ऐसा करना भूलना बहुत आसान होगा, और क्वेरी के परिणाम गलत क्रम में समाप्त हो जाएंगे।
मेरे कहने का एक उदाहरण यहां दिया गया है।
SELECT
ProductName AS Name,
VendorId AS ID,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
परिणाम:
+---------------------------------+------+---------+ | Name | ID | Price | |---------------------------------+------+---------| | Straw Dog Box | 1003 | 55.99 | | Sledge Hammer | 1002 | 33.49 | | Long Weight (green) | 1001 | 11.99 | | Long Weight (blue) | 1001 | 14.75 | | Left handed screwdriver | 1001 | 25.99 | | Chainsaw | 1003 | 245.00 | | Bottomless Coffee Mugs (4 Pack) | 1004 | 9.99 | +---------------------------------+------+---------+
मैंने केवल ProductPrice
को स्थानांतरित कर दिया था SELECT
. में कॉलम की स्थिति सूची, और इसने परिणामों के क्रम को पूरी तरह से गड़बड़ कर दिया।
डिफ़ॉल्ट ऑर्डरिंग
SQL में, यदि आप ORDER BY
. का उपयोग नहीं करते हैं खंड, इस बात की कोई गारंटी नहीं है कि आपके परिणाम किस क्रम में होंगे। हालांकि यह दिख सकता है जैसे आपका डेटाबेस किसी विशेष कॉलम द्वारा परिणामों को सॉर्ट कर रहा है, यह वास्तव में ऐसा नहीं हो सकता है।
सामान्य तौर पर, बिना ORDER BY
. के खंड, डेटा को उस क्रम में क्रमबद्ध किया जाएगा जिसमें इसे तालिका में लोड किया गया था। हालांकि, अगर पंक्तियों को हटा दिया गया है या अपडेट कर दिया गया है, तो ऑर्डर इस बात से प्रभावित होगा कि कैसे डीबीएमएस पुनः प्राप्त संग्रहण स्थान का पुन:उपयोग करता है।
इसलिए, परिणामों को किसी भी सार्थक क्रम में क्रमबद्ध करने के लिए DBMS पर निर्भर न रहें। यदि आप चाहते हैं कि आपके परिणाम क्रमबद्ध हों, तो ORDER BY
का उपयोग करें खंड।
अपवादों के साथ आदेश देना
आपको ऐसे समय का सामना करना पड़ सकता है जब आपको अपने ORDER BY
. में एक अपवाद शामिल करने की आवश्यकता हो खंड।
उदाहरण के लिए, आप एक पंक्ति को छोड़कर किसी स्तंभ द्वारा वर्णानुक्रम में क्रमित करना चाहते हैं। आप चाहते हैं कि एक पंक्ति (या कई पंक्तियाँ) शीर्ष पर दिखाई दें, जबकि शेष सभी पंक्तियों को एक विशेष क्रम में क्रमबद्ध किया गया है।
सौभाग्य से, ऐसा करने का एक आसान तरीका है। यदि आपको ऐसा करने की आवश्यकता है तो अपवादों के साथ क्लॉज द्वारा ऑर्डर कैसे लिखें देखें।