Oracle's rownum
pseudocolumn ، الذي يستخدم بشكل متكرر لتقييد مجموعة النتائج ، يمثل تحديًا فريدًا عند الجمع بين الطلب. على عكس MySql's الحد الأدنى
، وهو ما ينطبق بعد الفرز ، rownum
مرشحات قبل تتم معالجة بالترتيب بواسطة
. هذا يعني ببساطة استخدام Rownum
لن يضمن مجموعة فرعية محددة من نتائجك.
النهج القياسي (جميع إصدارات Oracle):
لتحقيق ما يعادل وظائف MySQL
SELECT *
FROM (
SELECT *
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM Rownum ، مما يضمن إرجاع أعلى 5 رواتب.
إزاحة النتائج والقيود:
من أجل التحكم الأكثر تطوراً ، يتطلب تحديد كل من الإزاحة والحدود استعلامًا أكثر تعقيدًا قليلاً:
يختار *
من (
حدد A.*، Rownum rnum
من (
حدد * - استفسارك الرئيسي مع النظام بالترتيب
من Some_table
اطلب من Some_Column
) أ
حيث rownum =: min_row_to_fetch ؛ SELECT *
FROM (
SELECT a.*, ROWNUM rnum
FROM (
SELECT * -- Your main query with ORDER BY clause
FROM some_table
ORDER BY some_column
) a
WHERE ROWNUM = :MIN_ROW_TO_FETCH;
: max_row_to_fetch و : min_row_to_fetch
مع الحدود العلوية والسفلية المطلوبة. هذا يجلب الصفوف ضمن نطاق معين بعد الطلب.
Oracle 12C و Beyond: The Fetch Clause:
تقدم Oracle 12C (والإصدارات الأحدث) حلًا أكثر أناقة باستخدام
Fetch الجملة:
- استرداد الصفوف العشرة الأولى
يختار *
من بعض الشيء
الطلب بالاسم
جلب أول 10 صفوف فقط ؛
-استرداد الصفوف 20-30
يختار *
من بعض الشيء
الطلب بالاسم
إزاحة 20 صفًا يجلب الصفوف 10 التالية فقط ؛ -- Retrieve the first 10 rows
SELECT *
FROM sometable
ORDER BY name
FETCH FIRST 10 ROWS ONLY;
-- Retrieve rows 20-30
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
التي تجلبها طريقة أنظف وأكثر قابلية للقراءة للحد من نتائج وإزاحةها ، مما يجعله الطريقة المفضلة لـ Oracle 12C وبعد ذلك. بالنسبة للإصدارات القديمة ، يظل نهج الاستعلام المتداخل ضروريًا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3