در SQL، از این دستورات برای محدود کردن تعداد رکوردهایی که از یک جدول دریافت می‌کنیم استفاده می‌شود. این کار در مواقعی که جدول‌های بزرگی داریم، کمک می‌کند تا سرعت اجرای کوئری افزایش پیدا کند.

دستور SELECT TOP در SQL

دستور SELECT TOP به شما این امکان را می‌دهد که تعداد مشخصی از رکوردها را از جدول انتخاب کنید.

چرا این دستور مفید است؟

در جداول بزرگ که ممکن است هزاران رکورد داشته باشند، انتخاب تعداد زیادی رکورد می‌تواند سرعت اجرای کوئری را پایین بیاورد. بنابراین، با استفاده از SELECT TOP می‌توانیم فقط یک بخش از رکوردها را دریافت کنیم.

مثال:

فرض کنید می‌خواهید فقط سه رکورد اول جدول Customers را دریافت کنید:

SELECT TOP 3 * FROM Customers;

نکته:

همه سیستم‌های پایگاه داده از دستور SELECT TOP پشتیبانی نمی‌کنند. برای مثال:

  • MySQL از دستور LIMIT استفاده می‌کند.
  • Oracle از FETCH FIRST یا ROWNUM استفاده می‌کند.

دستور LIMIT در MySQL

در MySQL، برای انتخاب تعداد محدودی از رکوردها از دستور LIMIT استفاده می‌شود. این دستور معادل SELECT TOP در SQL Server است.

مثال:

برای انتخاب سه رکورد اول از جدول Customers در MySQL:

SELECT * FROM Customers
LIMIT 3;

دستور FETCH FIRST در Oracle

در Oracle، برای انتخاب تعداد محدود از رکوردها از دستور FETCH FIRST استفاده می‌شود.

مثال:

برای انتخاب سه رکورد اول از جدول Customers در Oracle:

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;

دستور ROWNUM در Oracle (نسخه‌های قدیمی)

در نسخه‌های قدیمی Oracle، از ROWNUM برای محدود کردن تعداد رکوردها استفاده می‌شد.

مثال:

برای انتخاب سه رکورد اول از جدول Customers با استفاده از ROWNUM:

SELECT * FROM Customers
WHERE ROWNUM <= 3;

نکته:

در Oracle قدیمی‌تر، می‌توانیم ORDER BY را هم به همراه ROWNUM استفاده کنیم.

استفاده از دستور TOP PERCENT در SQL Server

با استفاده از دستور TOP PERCENT در SQL Server، می‌توانید درصدی از رکوردها را انتخاب کنید.

مثال:

برای انتخاب ۵۰٪ از رکوردها در SQL Server:

SELECT TOP 50 PERCENT * FROM Customers;

افزودن شرط WHERE

شما می‌توانید از دستور WHERE برای فیلتر کردن نتایج استفاده کنید. مثلا می‌خواهید فقط رکوردهایی را که کشورشان “Germany” است دریافت کنید.

مثال برای SQL Server:

برای انتخاب سه رکورد اول که کشورشان “Germany” است:

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

معادل در MySQL:

در MySQL، معادل این دستور به صورت زیر است:

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

معادل در Oracle:

در Oracle:

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

استفاده از دستور ORDER BY برای مرتب‌سازی نتایج

اگر می‌خواهید رکوردها را بر اساس یک ستون خاص مرتب کنید و سپس تعداد محدودی از آنها را انتخاب کنید، از دستور ORDER BY استفاده کنید.

مثال برای SQL Server:

فرض کنید می‌خواهید رکوردها را بر اساس نام مشتریان به صورت نزولی مرتب کنید و سه رکورد اول را دریافت کنید:

SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;

معادل در MySQL:

در MySQL، می‌توانید از دستور زیر استفاده کنید:

SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;

معادل در Oracle:

در Oracle:

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

تمرین‌ها و سوالات برای درک بهتر

  1. سوال: اگر بخواهید از جدول Customers فقط ۱۰ رکورد اول را دریافت کنید، چه دستوری را باید بنویسید؟
  2. تمرین: یک کوئری بنویسید که در آن رکوردهایی که کشورشان “USA” است از جدول Customers دریافت شود و این رکوردها به ترتیب نام مشتری به صورت صعودی مرتب شوند.
  3. چالش: در MySQL از دستور LIMIT و در Oracle از FETCH FIRST برای انتخاب ۲ رکورد اول استفاده کنید، سپس نتایج را با استفاده از ORDER BY به ترتیب نام مشتری مرتب کنید.