বেশিরভাগ ডাটাবেসগুলি এই বিষয় সম্পর্কে বেশ স্পষ্ট যে ORDER BY
একটি সাবকোয়ারিতে একটি হয়:
- অনুমোদিত নয়: যেমন এসকিউএল সার্ভার, কোথাও সাইবাজ এসকিউএল (যদি না এর সাথে পরিপূরক হয়
TOP
বা OFFSET .. FETCH
)
- অর্থহীন: যেমন পোস্টগ্রিগ এসকিউএল, ডিবি 2 (আবার, যদি না এর সাথে পরিপূরক হয়
OFFSET .. FETCH
বা LIMIT
)
এখানে DB2 LUW ম্যানুয়াল থেকে একটি উদাহরণ দেওয়া হয়েছে (জোর দেওয়া খনি)
একটি উপ-বিভাগে একটি অর্ডার বাই ধারাটি কোয়েরিতে ফিরে আসা সারির ক্রমকে প্রভাবিত করে না । বাইরের একটি অর্ড ক্লজ কেবলমাত্র সর্বাধিক সরেজমিনে সুনির্দিষ্ট করা থাকলে ফিরে আসা সারিগুলির ক্রমকে প্রভাবিত করে।
শব্দগুচ্ছটি পোস্টগ্র্রেএসকিউএল এর মতোই স্পষ্ট :
যদি বাছাই না করা হয়, সারিগুলি একটি অনির্দিষ্ট ক্রমে ফিরে আসবে। সেক্ষেত্রে প্রকৃত অর্ডার স্ক্যানের উপর নির্ভর করবে এবং পরিকল্পনার ধরণ এবং ডিস্কের অর্ডারে যোগদান করবে তবে এটির উপর নির্ভর করা উচিত নয় । একটি নির্দিষ্ট আউটপুট অর্ডারিং কেবলমাত্র গ্যারান্টিযুক্ত হতে পারে যদি সাজানোর পদক্ষেপটি স্পষ্টভাবে চয়ন করা হয়।
এই স্পেসিফিকেশন থেকে, এটি অনুসরণ করা যেতে পারে যে ORDER BY
উত্সযুক্ত টেবিলের ধারাটির ফলে প্রাপ্ত কোনও আদেশ কেবল দুর্ঘটনাজনক এবং কাকতালীয়ভাবে আপনার প্রত্যাশিত ক্রমটির সাথে মেলে (যা এটি আপনার তুচ্ছ উদাহরণের মধ্যে বেশিরভাগ ডাটাবেসে থাকে) তবে নির্ভর করা বুদ্ধিমানের কাজ হবে না এই.
ডিবি 2 এর সাইড নোট:
বিশেষত, ডিবি 2 এর একটি কম পরিচিত বৈশিষ্ট্য রয়েছেORDER BY ORDER OF <table-designator>
যা নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:
SELECT C1 FROM
(SELECT C1 FROM T1
UNION
SELECT C1 FROM T2
ORDER BY C1 ) AS UTABLE
ORDER BY ORDER OF UTABLE
এই বিশেষ ক্ষেত্রে, উত্পন্ন টেবিলের ক্রমটি বহিরাগত সর্বাধিক নির্বাচন করে স্পষ্টভাবে পুনরায় ব্যবহার করা যেতে পারে
ওরাকলে সাইড নোট:
বছরের পর বছর ধরে এটি OFFSET
ব্যবহার করে পৃষ্ঠাবদ্ধকরণ বাস্তবায়ন করার জন্য ওরাকলে একটি অনুশীলন ছিল ROWNUM
, যা উত্পন্ন টেবিলের অর্ডার দেওয়ার পরে যুক্তিসঙ্গত গণনা করা যেতে পারে :
SELECT *
FROM (
SELECT rownum AS rn, t.* -- ROWNUM here depends on the derived table's ordering
FROM (
SELECT * FROM table ORDER BY time DESC
) t
) t
WHERE rn BETWEEN 10 AND 20
এটি যুক্তিসঙ্গতভাবে প্রত্যাশা করা যেতে পারে যে কমপক্ষে ROWNUM
কোনও প্রশ্নের উপস্থিতিতে ভবিষ্যতের ওরাকল সংস্করণগুলি সমস্ত উত্তরাধিকার ওরাকল এসকিউএলকে ভঙ্গ করতে না পারার জন্য এই আচরণটি ভাঙবে না, যা এখনও অনেক বেশি আকাঙ্ক্ষিত হয়ে স্থানান্তরিত হয়নি এবং পঠনযোগ্য এসকিউএল স্ট্যান্ডার্ড OFFSET .. FETCH
সিনট্যাক্স:
SELECT * FROM table ORDER BY time DESC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY