دستور SELECT TOP در پایگاه های داده مختلف

06 اسفند 1397
درسنامه درس 9 از سری آموزش زبان SQL
SQL-Language-select-top

سلام خدمت شما دوستان گرامی! بحث امروز ما در رابطه با عبارت SELECT TOP در زبان SQL است. آیا جمله ی زیر را به یاد دارید؟

با اینکه این زبان یک استانداردِ ANSI/ISO است اما نسخه های مختلفی از آن وجود دارد. البته برای اینکه تا حدی استاندارد بودن خود را حفظ کنند، تمام نسخه ها از دستور های اصلی (مانند SELECT, UPDATE, DELETE, INSERT, WHERE) پشتیبانی می کنند.

درست است، این جمله را در جلسه ی اول از سری آموزش جامع زبان SQL به شما گفتیم و در این قسمت کاملا متوجه منظور ما خواهید شد.

عبارت SELECT TOP در زبان SQL چه معنی می دهد؟

عبارت SELECT TOP در فارسی معنی «فلان تعدادِ اول را انتخاب کن» می دهد؛

تصور کنید از دوستتان می خواهید فیلم های مورد علاقه اش را به شما بگوید اما دوست ندارید یک ساعت و نیم به صحبت های او گوش کنید بنابراین به او می گویید از لیست فیلم های مورد علاقه ات، سه تای اول کدام هستند؟

در سایت های اینترنتی نیز همین طور است. به طور مثال در وب سایت های خرید لوازم خانه یا محصولات الکترونیک می بینیم که به شما 5 محصول اول را نمایش می دهند و برای مشاهده ی محصولات بیشتر باید به صفحه ی بعد بروید. مثال دیگر همین روکسو ی خودمان است! اگر توجه کرده باشید مطالب این سایت صفحه بندی دارد. چرا؟ به این خاطر که در بسیاری از وب سایت ها مانند روکسو مطالب بسیار زیادی برای مخاطب قرار داده شده است و نشان دادن همه ی این مطالب به صورت یکجا عیب های زیادی دارد مانند:

  • به هم ریختن نظم و شلوغ شدن صفحه
  • اسراف منابع سرور
  • هدر رفتن وقت کاربر
  • سردرگمی کاربر و پایین آمدن UX (تجربه کاربری) در سایت ما
  • و ده ها دلیل دیگر ...

بنابراین از عبارت SELECT TOP برای مشخص کردن تعداد ردیف های برگشتی از پایگاه داده استفاده می شود. تصور کنید پایگاه داده ای با هزاران ردیف مختلف دارید؛ در چنین حالتی انتخاب تمام ردیف ها (حتی بدون نمایش دادنشان) بار سنگینی روی دوش سرور هایتان می گذارد.

همانطور که می دانید زبان SQL استاندارد است اما در برنامه های پایگاه داده ی مختلف تفاوت های ریزی نیز دارد از جمله ی این تفاوت ها، عبارت SELECT TOP است که در MySQL به صورت دستور LIMIT و در Oracle به صورت دستور ROWNUM وجود دارد. به ساختار های زیر دقت کنید:

ساختار عبارت SELECT TOP در SQL Server و MS Access:

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

ساختار عبارت SELECT TOP در MySQL:

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

ساختار عبارت SELECT TOP در Oracle:

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

قبل از کار با مثال ها باید به عنوان یادآوری نگاهی به جدول Customers در پایگاه داده ی Northwind بیندازیم:

قسمتی از جدول customer ها در پایگاه داده ی Northwind
قسمتی از جدول customer ها در پایگاه داده ی Northwind

اگر پایگاه داده ی شما اینچنین نیست، در قسمت اجرای دستور ها گزینه ی restore database را انتخاب کنید تا پایگاه داده به حالت اولیه بازگردد.

مثال های کار با عبارت SELECT TOP

دستور زیر، سه ردیف اول از جدول customers را انتخاب می کند:

SELECT TOP 3 * FROM Customers;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

دستور زیر معادل دستور بالا و با استفاده از عبارت LIMIT است:

SELECT * FROM Customers
LIMIT 3;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

و این دستور نیز معادل دستورات بالا برای ROWNUM است:

SELECT * FROM Customers
WHERE ROWNUM <= 3;

بیان درصدی

شما می توانید دستورات زیر را به شکل درصدی نیز بیان کنید. برای این کار از عبارت PERCENT استفاده کنید:

SELECT TOP 50 PERCENT * FROM Customers;

این دستور 50 درصدِ اول ردیف های جدول Customers را به شما می دهد. برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

شما می توانید تمام مطالب این جلسه به همراه مطالب جلسات قبل (به طور مثال دستور WHERE) ترکیب کنید. اگر بخواهم برایتان مثالی زده باشم می گویم:

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

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

دستور بالا 3 ردیف اول را از جدول customers انتخاب می کند اما به شرطی که کشورشان آلمان (Germany) باشد. یعنی ابتدا کشورهایی که مقدارشان برابر با Germany است را انتخاب می کنیم و از بین آن ها 3 تای اول را برمیداریم.

سوال: از کجا می فهمیم 3 تای اول کدام هستند؟ ملاک انتخاب چیست؟

پاسخ: در جلسات بعد به جواب این سوال خواهیم رسید اما به صورت خلاصه می گویم، ملاک انتخاب ما CustomerID است چرا که کلید منحصر به فرد این جدول است.

کد زیر معادل کد بالا برای دستور LIMIT است:

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

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

و همچنین معادل دستور ROWNUM:

SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;

خلاصه ی مقاله

همانطور که می دانید زبان SQL یک زبان استاندارد برای برقراری ارتباط با پایگاه های داده در دنیای وب است اما استاندارد سازی آن به شکل 100 درصدی پیاده سازی نشده است. نتیجه ی عدم استاندارد سازی کامل به وجود آمدن دستوراتی مانند SELECT TOP است. در این مقاله به طور کامل به دستور SELECT TOP و مثال های آن در برنامه های پایگاه داده (مانند MySQL و Oracle و MS Access) پرداختیم و متوجه اهمیت بسیار زیاد آن در طراحی وب سایت ها شدیم؛ به جرات میتوان گفت دستور LIMIT از دستوراتی است که در هر وب سایتی به کرات استفاده می شود. امیدوارم از این مقاله لذت برده باشیم.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

ابوالفضل
12 دی 1399
سلام. ممنون بابت اموزش خوب و مختصرتون. برای دستور درصدی در مای اسکیول از چه دستوری باید استفاده بشه؟ برای اسکیول گفتید برای مای رو نگفتید و وقتی همون رو میزنم ارور سینتکس می گیرم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.