كيفية اختيار الصف nth
في جدول قاعدة بيانات SQL
عند العمل مع البيانات في قاعدة بيانات، قد تجد نفسك بحاجة إلى اختيار عنصر محدد، مثل الصف nth
في جدول. ومع ذلك، تتنوع الطرق قليلاً حسب قواعد البيانات المختلفة لتحقيق ذلك، ويمكن أن يكون تعلم كيفية القيام بذلك عبر أنظمة SQL متعددة مفيدًا للغاية. في هذه التدوينة، سنستكشف كل من الأساليب المستقلة عن قواعد البيانات وكذلك الحلول المحددة لقواعد بيانات SQL الشهيرة مثل SQL Server وMySQL وPostgreSQL وSQLite وOracle.
منهج مستقل عن قواعد البيانات
قبل أن نغوص في تفاصيل كل قاعدة بيانات، لنبدأ بطريقة يمكن اعتبارها أكثر شمولاً. في حين أن بعض الميزات قد لا تكون مدعومة عبر كل منصات SQL، إلا أن هناك استراتيجيات شاملة تجعل اختيار الصف nth
أسهل.
استخدام LIMIT وOFFSET (PostgreSQL وMySQL)
لإدارة قواعد البيانات مثل PostgreSQL وMySQL، يمكنك استخدام بناء الجملة SQL التالي:
SELECT ... LIMIT y OFFSET x
- LIMIT يحدد عدد الصفوف التي ترغب في استردادها.
- OFFSET يحدد من أي نقطة تريد بدء استرداد الصفوف.
لذا، على سبيل المثال، لاختيار الصف العاشر، ستقوم بكتابة:
SELECT * FROM tablename LIMIT 1 OFFSET 9;
هذه الصيغة مفيدة لتقسيم البيانات أو، كما هو الحال في مثالنا، لجلب صف محدد.
حلول قاعدة البيانات المحددة
SQL Server
مع SQL Server، وبشكل خاص الإصدارات التي تسبق SQL Server 2012، يمكنك استخدام دوال النوافذ للحصول على نتائج مماثلة. إليك كيف يتم ذلك باستخدام مثال شائع:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders
)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000;
- ROW_NUMBER() يولد رقمًا تسلسليًا للصفوف في مجموعة النتائج استنادًا إلى الترتيب المحدد.
- قم بتعديل
WHERE RowNumber = 1000000
لتحديد الصف الذي ترغب في استرداده.
PostgreSQL وSQLite (الإصدار 3.25.0+)
اعتبارًا من PostgreSQL 8.4، تم دعم دوال النوافذ القياسية، مما يتيح لك استخدام نهج مشابه كما في SQL Server:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
- استبدل
n
بالرقم الصف المطلوب. ستظل هذه البنية تعمل بشكل فعال في SQLite ابتداءً من الإصدار 3.25.0.
Oracle وDB2
بالنسبة لـ Oracle وDB2، فإنه يدعمان أيضًا دوال النوافذ. والصيغة مشابهة لتلك الخاصة بـ PostgreSQL:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
استخدام ROW_NUMBER()
يضمن إمكانية الوصول إلى صفوف محددة استنادًا إلى الترتيب الذي تحدده.
الخاتمة
اختيار الصف nth
من قاعدة بيانات SQL هو مهمة شائعة قد يتم الاقتراب منها بطرق مختلفة اعتمادًا على قاعدة البيانات المستخدمة. فهم الصيغ والأساليب المختلفة يسمح لك بالعمل بشكل أكثر فعالية عبر أنظمة مختلفة. سواء كنت تستعلم في SQL Server أو MySQL أو PostgreSQL أو SQLite أو Oracle، لديك الآن الأدوات اللازمة لاسترداد الصفوف الدقيقة التي تحتاجها.
للمزيد من القراءة، يمكنك دائمًا الاطلاع على تفاصيل أكثر تعقيداً حول تقنيات استعلام SQL على موقع ترويلس أرفين. استمتع بالاستعلام!