انتخاب برتر (Select Top)
«انتخاب برتر (Select Top)» یعنی تعداد ردیف های خروجی را محدود کنیم. این کار روی جدول های بزرگ سرعت را بهتر می کند؛ مثل دیدن فقط سه نمره بالای کلاس.
ایده اصلی Select Top
با این دستور فقط چند ردیف برمی گردد. تعداد را خودت تعیین می کنی.
SELECT TOP 3 *
FROM Customers;
سینتکس در سیستم های مختلف
SQL Server / MS Access
SELECT TOP number | percent column_name(s)
FROM table_name
WHERE condition;
MySQL (LIMIT)
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Oracle 12c+ (FETCH FIRST)
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY;
Oracle قدیمی (ROWNUM)
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Oracle قدیمی با مرتب سازی
SELECT *
FROM (
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
)
WHERE ROWNUM <= number;
LIMIT در MySQL
نمونه معادل در MySQL با LIMIT.
SELECT *
FROM Customers
LIMIT 3;
FETCH FIRST در Oracle
نمونه معادل در Oracle با FETCH FIRST.
SELECT *
FROM Customers
FETCH FIRST 3 ROWS ONLY;
Top درصدی
در SQL Server می توان درصدی انتخاب کرد.
SELECT TOP 50 PERCENT *
FROM Customers;
و معادل Oracle با درصد:
SELECT *
FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;
افزودن WHERE
می توان اول فیلتر کرد، سپس محدود کرد. «WHERE» یعنی شرط فیلتر.
SELECT TOP 3 *
FROM Customers
WHERE Country = 'Germany';
SELECT *
FROM Customers
WHERE Country = 'Germany'
LIMIT 3;
SELECT *
FROM Customers
WHERE Country = 'Germany'
FETCH FIRST 3 ROWS ONLY;
مرتب سازی با ORDER BY
برای نتیجه دقیق، اول مرتب کن، بعد محدود کن. «ORDER BY» یعنی مرتب سازی.
SELECT TOP 3 *
FROM Customers
ORDER BY CustomerName DESC;
SELECT *
FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;
SELECT *
FROM Customers
ORDER BY CustomerName DESC
FETCH FIRST 3 ROWS ONLY;
نکته: در Oracle 12c+ بهتر است همیشه همراه FETCH، ORDER BY هم باشد.
برای ادامه مسیر، صفحه توابع تجمیعی را ببین. همچنین راهنمای حذف و به روزرسانی کنار همین موضوع مفید است. همین صفحه انتخاب برتر مرجع این بخش است.
گام های عملی سریع
- اگر نیاز به ترتیب داری، اول ORDER BY بنویس.
- بعد محدودیت را با TOP، LIMIT، یا FETCH بگذار.
- شرط ها را با WHERE اضافه کن تا خروجی دقیق شود.
جمع بندی سریع
- TOP برای SQL Server است.
- LIMIT مخصوص MySQL است.
- FETCH FIRST برای Oracle نو است.
- ORDER BY قبل از محدودسازی نتیجه بیاید.