الفرق بين المراجعتين لصفحة: «SQL/record num»
لا ملخص تعديل |
ط تعديل الأمثلة |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 4: | سطر 4: | ||
== تحديد عدد سجلات النتائج == | == تحديد عدد سجلات النتائج == | ||
يكون للاستعلام البنية العامة الآتية في محرك SQL Server، والتي تعتمد على الكلمة المفتاحية <code>TOP</code>:<syntaxhighlight lang="sql"> | يكون للاستعلام البنية العامة الآتية في محرك SQL Server، والتي تعتمد على الكلمة المفتاحية <code>TOP</code>:<syntaxhighlight lang="sql"> | ||
SELECT TOP number | percent | SELECT TOP number | percent col_name(s) | ||
FROM | FROM tbl_name | ||
WHERE condition; | WHERE condition; | ||
سطر 11: | سطر 11: | ||
ويكون للاستعلام البنية العامة الآتية في محركات PostgreSQL و SQLite و MySQL، والتي تعتمد على الكلمة المفتاحية <code>LIMIT</code>:<syntaxhighlight lang="sql"> | ويكون للاستعلام البنية العامة الآتية في محركات PostgreSQL و SQLite و MySQL، والتي تعتمد على الكلمة المفتاحية <code>LIMIT</code>:<syntaxhighlight lang="sql"> | ||
SELECT | SELECT col_name(s) | ||
FROM | FROM tbl_name | ||
WHERE condition | WHERE condition | ||
LIMIT number; | LIMIT number; | ||
سطر 18: | سطر 18: | ||
أما في محرك Oracle، فيكون للاستعلام البنية العامة الآتية، والتي تعتمد على الكلمة المفتاحية <code>ROWNUM</code>:<syntaxhighlight lang="sql"> | أما في محرك Oracle، فيكون للاستعلام البنية العامة الآتية، والتي تعتمد على الكلمة المفتاحية <code>ROWNUM</code>:<syntaxhighlight lang="sql"> | ||
SELECT | SELECT col_name(s) | ||
FROM | FROM tbl_name | ||
WHERE ROWNUM <= number; | WHERE ROWNUM <= number; | ||
سطر 217: | سطر 217: | ||
== حذف عدد محدد من السجلات == | == حذف عدد محدد من السجلات == | ||
تكون للاستعلام البنية العامة الآتية في محرك SQL Server:<syntaxhighlight lang="sql"> | تكون للاستعلام البنية العامة الآتية في محرك SQL Server:<syntaxhighlight lang="sql"> | ||
DELETE TOP number FROM | DELETE TOP number FROM tbl_name; | ||
</syntaxhighlight>أما في محركات PostgreSQL و SQLite و MySQL، فتكون البنية العامة له كما يلي:<syntaxhighlight lang="sql"> | </syntaxhighlight>أما في محركات PostgreSQL و SQLite و MySQL، فتكون البنية العامة له كما يلي:<syntaxhighlight lang="sql"> | ||
DELETE FROM | DELETE FROM tbl_name | ||
LIMIT number; | LIMIT number; | ||
سطر 362: | سطر 362: | ||
* [https://sqlite.org/lang_select.html#limitoffset توثيق النتائج الأولى في محرك SQLite] | * [https://sqlite.org/lang_select.html#limitoffset توثيق النتائج الأولى في محرك SQLite] | ||
* [https://docs.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql توثيق النتائج الأولى في محرك SQLServer] | * [https://docs.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql توثيق النتائج الأولى في محرك SQLServer] | ||
[[تصنيف:SQL]] | [[تصنيف:SQL|{{SUBPAGENAME}}]] | ||
[[تصنيف:SQL Select]] | [[تصنيف:SQL Select|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 12:20، 30 يناير 2018
يمكن تحديد عدد السجلات التي ستُجلب من الجدول ضمن استعلام SELECT
أو التي ستُحذف من الجدول ضمن استعلام DELETE
أو ستُحدَّث قيمها ضمن استعلام UPDATE
، ولكن تختلف محركات قواعد البيانات فيما بينها بالصياغة العامة للاستعلام، وسيُذكر ذلك تباعًا.
تحديد عدد سجلات النتائج
يكون للاستعلام البنية العامة الآتية في محرك SQL Server، والتي تعتمد على الكلمة المفتاحية TOP
:
SELECT TOP number | percent col_name(s)
FROM tbl_name
WHERE condition;
إذ يُعبّر المتحول number
عن عدد السجلات المطلوبة، وتُعبّر الكلمة المفتاحية percent
عن نسبة السجلات المئوية التي نريد عرضها (أي يُمكن جلب نسبة محددة من عدد السجلات الإجمالي).
ويكون للاستعلام البنية العامة الآتية في محركات PostgreSQL و SQLite و MySQL، والتي تعتمد على الكلمة المفتاحية LIMIT
:
SELECT col_name(s)
FROM tbl_name
WHERE condition
LIMIT number;
ويمكن استخدام العبارة المفتاحية FETCH FIRST number ROWS ONLY
في محرك PostgreSQL بدلًا من LIMIT
، إذ يُعبِّر المتحول number
عن عدد السجلات المطلوبة،
أما في محرك Oracle، فيكون للاستعلام البنية العامة الآتية، والتي تعتمد على الكلمة المفتاحية ROWNUM
:
SELECT col_name(s)
FROM tbl_name
WHERE ROWNUM <= number;
إذ يُعبّر المتحول number
عن عدد السجلات المطلوبة.
أمثلة
يُراد الحصول على السجلات الخمس الأولى المحققة لشرط العمر أكبر من 25 سنة من الجدول الآتي (باسم patients
):
Doctor | Section | Age | Patient | PatientID |
---|---|---|---|---|
Nasser | Cardiology | 76 | Salem | 1029 |
Abd Allah | Neurology | 17 | Hasan | 896 |
Reem | Maternity | 23 | Nadine | 964 |
Fateh | Cardiology | 65 | Rami | 1070 |
Kareem | Neurology | 19 | Abd al-Rahim | 1150 |
Hadi | Critical Care | 65 | Roushd | 1097 |
Reem | Maternity | 27 | Sana | 1034 |
Abd Allah | Neurology | 49 | Helen | 963 |
Hadi | Critical Care | 58 | Ahmad | 1154 |
Kareem | Neurology | 40 | Maher | 1069 |
Amnah | Maternity | 30 | Zeina | 1028 |
Fateh | Cardiology | 55 | Sarah | 1180 |
Hadi | Critical Care | 23 | Fadi | 1076 |
Abd Allah | Neurology | 36 | Naim | 987 |
Fateh | Cardiology | 70 | Batoul | 1156 |
Amnah | Maternity | 24 | Rahaf | 1181 |
Nasser | Cardiology | 66 | Aya | 808 |
Fateh | Cardiology | 30 | Raghad | 1256 |
Amnah | Maternity | 17 | Mona | 1161 |
Nasser | Cardiology | 50 | Sami | 809 |
فيكون الاستعلام المطلوب تنفيذه هو (بحسب المحركات المختلفة):
في محرك SQL Server:
SELECT TOP 3 *
FROM patients
WHERE Age>25;
أو بالاستفادة من النسبة المئوية (5 مرضى من أصل 20 مريضًا تعادل نسبة 25%):
SELECT TOP 25 PERCENT *
FROM patients
WHERE Age>25;
في محركات PostgreSQL و SQLite و MySQL:
SELECT *
FROM patients
WHERE Age>25
LIMIT 5;
في محرك Oracle:
SELECT *
FROM patients
WHERE Age>25 AND ROWNUM <= 5;
وستظهر النتائج الآتية:
Doctor | Section | Age | Patient | PatientID |
---|---|---|---|---|
Nasser | Cardiology | 76 | Salem | 1029 |
Fateh | Cardiology | 65 | Rami | 1070 |
Hadi | Critical Care | 65 | Roushd | 1097 |
Reem | Maternity | 27 | Sana | 1034 |
Abd Allah | Neurology | 49 | Helen | 963 |
حذف عدد محدد من السجلات
تكون للاستعلام البنية العامة الآتية في محرك SQL Server:
DELETE TOP number FROM tbl_name;
أما في محركات PostgreSQL و SQLite و MySQL، فتكون البنية العامة له كما يلي:
DELETE FROM tbl_name
LIMIT number;
مثال
لحذف المرضى الخمسة الأكبر سنًا من جدول المرضى patients
السابق، يُستخدَم الاستعلام الآتي في محرك SQL Server:
DELETE TOP 5 FROM patients
ORDER BY age DESC;
في محركات PostgreSQL و SQLite و MySQL:
DELETE FROM patients
ORDER BY age DESC
LIMIT 5;
الحصول على عدد نتائج محدد مع الإزاحة
تستخدم الإزاحة مع العبارة ORDER BY
وذلك لاستبعاد عددٍ مُحدّدٍ من النتائج الأولى في الجدول.
مثال
إن كان الجدول cars
الآتي موجودًا في قاعدة البيانات:
Colour | Price | Year | Company | Model | CarID |
---|---|---|---|---|---|
White | 22,500 | 2018 | KIA | Optima | 05081 |
Red | 25,995 | 2017 | KIA | Optima Hybrid | 05082 |
Red | 31,900 | 2018 | KIA | Stinger | 05083 |
Black | 31,990 | 2017 | KIA | Cadenza | 05084 |
Blue | 23,240 | 2018 | KIA | Niro | 05085 |
Grey | 14,200 | 2018 | KIA | Rio 5-Door | 05086 |
Blue | 18,200 | 2018 | KIA | Forte5 | 05087 |
Blue | 32,250 | 2017 | KIA | Soul EV | 05088 |
للحصول على السيارات ذات الثمن الأعلى بدءًا من الرابعة حتى الأقل ثمنًا، يصبح الاستعلام بالشكل الآتي:
SELECT *
FROM cars
ORDER BY Price DESC
OFFSET 3 ROWS;
لتظهر النتائج بالشكل:
Colour | Price | Year | Company | Model | CarID |
---|---|---|---|---|---|
Red | 25,995 | 2017 | KIA | Optima Hybrid | 05082 |
Blue | 23,240 | 2018 | KIA | Niro | 05085 |
White | 22,500 | 2018 | KIA | Optima | 05081 |
Blue | 18,200 | 2018 | KIA | Forte5 | 05087 |
Grey | 14,200 | 2018 | KIA | Rio 5-Door | 05086 |