عبارة 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;
- يعرض أول 5 سجلات من جدول Customers ← (الإجابة الصحيحة)
- يعرض آخر 5 سجلات من جدول Customers
- يعرض 5 سجلات مرتبة حسب CustomerName
- يعرض كل السجلات التي CustomerID أقل من 5
هاشتاجات
#SQL #SQLServer #MySQL #Oracle #Database #تعلم_SQL #SalemNet
تعليقات
إرسال تعليق