عبارة SQL: TOP و LIMIT و FETCH FIRST و ROWNUM

تعليمات SQL: استخدام TOP و LIMIT و FETCH FIRST و ROWNUM

عبارة SQL: TOP و LIMIT و FETCH FIRST و ROWNUM

تُستخدم عبارة SELECT TOP لتحديد عدد السجلات المراد عرضها من الجدول. وهي مفيدة بشكل خاص عند التعامل مع الجداول الكبيرة التي تحتوي على آلاف السجلات، حيث إن استرجاع عدد كبير من الصفوف قد يؤثر على الأداء.

مثال (SQL Server)

SELECT TOP 3 * FROM Customers;

يعرض هذا الاستعلام أول 3 سجلات فقط من جدول Customers.

ملاحظة: ليست كل أنظمة قواعد البيانات تدعم SELECT TOP. فمثلاً:

  • MySQL يستخدم LIMIT.
  • Oracle يستخدم FETCH FIRST n ROWS ONLY أو ROWNUM.

بناء الجمل حسب نوع قاعدة البيانات

SQL Server / MS Access

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;

MySQL

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;

Oracle 12+

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY;

Oracle الأقدم

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

مع ترتيب النتائج:

SELECT *
FROM (SELECT column_name(s) FROM table_name ORDER BY column_name(s))
WHERE ROWNUM <= number;

قاعدة البيانات التجريبية

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

أمثلة عملية

MySQL

SELECT * FROM Customers
LIMIT 3;

Oracle

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;

SQL Server — استخدام النسبة

SELECT TOP 50 PERCENT * FROM Customers;

Oracle — استخدام النسبة

SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;

استخدام WHERE مع TOP / LIMIT / FETCH FIRST

SQL Server:

SELECT TOP 3 * FROM Customers
WHERE Country = 'Germany';

MySQL:

SELECT * FROM Customers
WHERE Country = 'Germany'
LIMIT 3;

Oracle:

SELECT * FROM Customers
WHERE Country = 'Germany'
FETCH FIRST 3 ROWS ONLY;

استخدام ORDER BY

SQL Server:

SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;

MySQL:

SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;

Oracle:

SELECT * FROM Customers
ORDER BY CustomerName DESC
FETCH FIRST 3 ROWS ONLY;

تمرين

ماذا يفعل الاستعلام التالي في SQL Server؟

SELECT TOP 5 * FROM Customers;
  1. يعرض أول 5 سجلات من جدول Customers ← (الإجابة الصحيحة)
  2. يعرض آخر 5 سجلات من جدول Customers
  3. يعرض 5 سجلات مرتبة حسب CustomerName
  4. يعرض كل السجلات التي CustomerID أقل من 5

هاشتاجات

#SQL #SQLServer #MySQL #Oracle #Database #تعلم_SQL #SalemNet

تعليقات