آموزش جامع SQL Server (جلسه سه: محدود کردن ردیف‌ها)
1398/02/10 12:27 , میلاد صاحب نظر

آموزش جامع SQL Server (جلسه سه: محدود کردن ردیف‌ها)

در جلسه قبل در مورد نوشتن query با استفاده از دستور select و مرتب‌سازی نمایش نتایج با استفاده از دستور ORDER BY پرداختیم. در چند جلسه آتی در مورد بقیه دستورهای SQL Server و کاربرد آن‌ها صحبت می‌کنیم.

۱- نصب و آشنایی با SQL Server

۱۰-عملگرهای SET وCTEوPIVOT

۱۹-indexها بخش۱

۲۸-توابع تاریخ یا date بخش۲

۲-نوشتن query

۱۱-تغییر داده‌ها

۲۰-indexها بخش۲

۲۹-توابع رشته‌ای بخش۱

۳-محدود کردن ردیف‌ها

۱۲-تعریف داده‌ها بخش۱

۲۱-stored procedureها بخش۱

۳۰- توابع رشته‌ای بخش۲

۴-فیلتر کردن داده‌ها بخش ۱

۱۳-تعریف داده‌ها بخش۲

۲۲- stored procedureها بخش۲

۳۱- توابع رشته‌ای بخش۳

۵-فیلتر کردن داده‌ها بخش۲

۱۴-data typeهای بخش۱

۲۳- stored procedureها بخش۳

۳۲-توابع سیستمی بخش ۱

۶-اتصال جداول بخش۱

۱۵-data typeها بخش۲

۲۴-توابع تعریف شده توسط کاربر

۳۳-توابع سیستمی بخش۲

۷-اتصال جداول بخش۲

۱۶-ویژگی‌ها

۲۵-triggerها

۳۴-window functionها بخش۱

۸-گروه‌بندی داده‌ها

۱۷-expressionها

۲۶-توابع تجمعی

۳۵-window functionها بخش ۲

۹-subquery

۱۸-viewها

۲۷-توابع تاریخ یا date بخش۱

 

دستور OFFSET FETCH در SQL Server

دستورهای OFFSET و FETCH از جمله گزینه‌ها و آپشن‌های دستور ORDER BY هستند. آن‌ها شما را قادر می‌سازند تا تعداد ردیف‌هایی که توسط query بازگردانده می‌شوند را محدود کنید.

کد زیر، syntax دستورهای OFFSET و FETCH را نشان‌ می‌دهد:

ORDER BY column_list [ASC |DESC]
OFFSET offset_row_count {ROW | ROWS}
FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY

در این syntax:

  • دستور OFFSET پیش از اینکه ردیف‌ها را باز‌گرداند، تعداد ردیف‌هایی که باید نادیده گرفته شوند را مشخص می‌کند.
    offset_row_count می‌تواند به شکل یک ثابت، متغیر یا پارامتر باشد که بزرگ‌تر یا برابر با صفر است.

  • دستور FETCH تعداد ردیف‌هایی که پس از پردازش شدن دستور OFFSET باید بازگردانده شوند را مشخص می‌کند.
    offset_row_count می‌تواند به شکل یک ثابت، متغیر یا اسکالر (عددی) باشد که بزرگ‌تر یا برابر با ۱ است.

  • در صورت لزوم، به کار بردن دستور OFFSET اجباری است، در حالی که دستور FETCH اختیاری است. همچنین، دستورهای FIRST و NEXT دقیقاً یک معنا و کاربرد دارند و می‌توانید آن‌ها را به جای یکدیگر به کار ببرید.

تصویر زیر کاربرد دستورهای OFFSET و FETCH را نمایش می‌دهد:

کاربرد دستورهای OFFSET و FETCH

توجه کنید که از دستورهای OFFSET و FETCH حتماً باید در کنار دستور ORDER BY استفاده کنید. در غیر این صورت، برنامه به شما ارور می‌دهد.

دستورهای OFFSET و FETCH برای پیاده‌سازی صفحه‌بندی نتایج query مناسب‌تر از دستور TOP هستند.

مثال‌هایی از دستور‌های OFFSET و FETCH در SQL Server

این‌ دفعه از جدول products موجود در نمونه پایگاه داده Bikestores استفاده می‌کنیم.

جدول products

Query زیر تمام محصولات موجود در جدول products را بازمی‌گرداند و محصولات را بر اساس لیست قیمت‌ها و اسامی آن‌ها مرتب می‌کند:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name;

نتایج

برای نادیده گرفتن ۱۰ محصول اول و بازگرداندن بقیه محصولات، همان‌طور که در query زیر مشاهده می‌کنید از دستور OFFSET استفاده می‌کنیم:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS;

OFFSET results

برای نادیده گرفتن ۱۰ محصول اول و انتخاب ۱۰ محصول بعدی، باید همانند query زیر از هر دو دستور OFFSET و FETCH استفاده کرد:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY;

FETCH results

برای به دست آوردن ۱۰ مورد از گران‌قیمت‌ترین محصولات، باز هم از هر دو دستورهای OFFSET و FETCH استفاده می‌کنیم:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price DESC,
    product_name 
OFFSET 0 ROWS 
FETCH FIRST 10 ROWS ONLY;

نتایج

در این مثال، دستور ORDER BY محصولات را بر اساس لیست قیمت‌های آن‌ها به ترتیب نزولی مرتب می‌کند. سپس، دستور OFFSET از صفر ردیف چشم‌پوشی می‌کند و دستور FETCH ۱۰ محصول اول لیست را بازمی‌گرداند.

در نتیجه آموختید که چگونه برای محدود کردن ردیف‌های بازگشتی توسط query، می‌توان از دستورهای OFFSET و FETCH استفاده کرد.

دستور SELECT TOP در SQL Server

یک دستور دیگر برای محدود کردن ردیف‌های بازگشتی توسط query دستور SELECT TOP است.

این دستور شما را قادر می‌سازد تا تعداد ردیف‌ها یا درصد ردیف‌های بازگشتی در یک مجموعه نتیجه query را محدود کنید.

چون ترتیب ردیف‌های ذخیره شده در یک جدول غیر قابل پیش‌بینی است، عبارت SELECT TOP همیشه همراه با دستور ORDER BY به کار می‌رود.

در نتیجه، مجموعه نتیجه به N تعداد اول ردیف‌های مرتب شده محدود می‌شود. کد زیر syntax دستور TOP همراه با عبارت SELECT را نشان می‌دهد.

 

SELECT TOP (expression) [PERCENT]
    [WITH TIES]
FROM 
    table_name
ORDER BY 
    column_name;

در این syntax، عبارت SELECT می‌تواند همراه با دستورات دیگری همچون WHERE، JOIN، HAVING و GROUP BY نیز بیاید.

expression

پس از کلیدواژه TOP یک expression می‌آید که تعداد ردیف‌های بازگشتی را مشخص می‌کند. اگر از PERCENT استفاده شود، این expression به عنوان یک مقدار float در نظر گرفته می‌شود. در غیر این صورت، به یک مقدار BIGINT تبدیل می‌شود.

PERCENT

کلیدواژه PERCENT نشان می‌دهد که کد قرار است N درصد اول ردیف‌ها را بازگرداند، که N نتیجه Expression است.

WITH TIES

این دستور به شما اجازه می‌دهد ردیف‌های بیشتری که دارای مقادیر مشابه با آخرین ردیف موجود در مجموعه نتایج محدود شده می‌باشند را بازگردانید.

توجه کنید که WITH TIES ممکن است تعداد ردیف بیشتر از آنچه در expression مشخص شد را بازگرداند.

برای مثال، اگر بخواهید گران‌قیمت‌ترین محصولات را بازگردانید، می‌توانید از TOP 1 استفاده کنید. به هر حال، اگر دو یا تعداد بیشتری از محصولات دارای قیمت مشابه با گران‌قیمت‌ترین محصول باشند، آنگاه آن محصولات را از دست خواهید داد.

برای پرهیز از این مشکل، می‌توانید از دستور TOP 1 WITH TIES استفاده کنید. این دستور نه تنها باعث می‌شود اولین محصول گران‌قیمت بازگردانده شود، بلکه دومین، سومین و بقیه محصولات گران‌قیمت را نیز بازمی‌گرداند.

مثال‌هایی از SELECT TOP در SQL Server

برای نمایش مثال‌ها از جدول production.products در پایگاه داده نمونه bikestores استفاده می‌کنیم.

جدول products

  • استفاده از TOP با یک مقدار ثابت

مثال زیر از یک مقدار ثابت برای بازگرداندن ۱۰ مورد از گران‌قیمت‌ترین محصولات استفاده می‌کند.

SELECT TOP 10
    product_name, 
    list_price
FROM
    production.products
ORDER BY 
    list_price DESC;

نتایج کد به این شکل هستند:

TOP results

  • استفاده از TOP برای بازگرداندن درصدی از ردیف‌ها

مثال زیر از PERCENT برای مشخص کردن تعداد محصولات بازگشتی در مجموعه نتایج استفاده می‌کند. جدول production.products دارای ۳۲۱ ردیف است، در نتیجه یک درصد از ۳۲۱، یک مقدار اعشاری است (۳.۲۱) که SQL Server آن را به عدد صحیح بزرگ‌تر گرد می‌کند (یعنی به ۴).

SELECT TOP 1 PERCENT
    product_name, 
    list_price
FROM
    production.products
ORDER BY 
    list_price DESC;

خروجی به این شکل است:

PERCENT results

  • استفاده از TOP WITH TIES برای درج ردیف‌های دارای مقادیر مشابه با آخرین ردیف

مثال زیر، سه مورد از گران‌قیمت‌ترین محصولات را بازمی‌گرداند.

SELECT TOP 3 WITH TIES
    product_name, 
    list_price
FROM
    production.products
ORDER BY 
    list_price DESC;

خروجی به این صورت است:

TIES result

در این مثال، سومین محصول گران‌قیمت دارای قیمت ۶۴۹۹.۹۹ است. چون در کد از TOP WITH TIES استفاده شده است، سه محصول دیگر هم که قیمت آن‌ها با قیمت سومین محصول برابر است، بازگشت داده شده‌اند.

خلاصه

در این جلسه با دو دستور مکمل به نام‌های OFFSET FETCH و SELECT TOP آشنا شدید. فهمیدید که به تنهایی قابلیتی ندارند و اگر آن‌ها را تنها به کار ببرید برنامه به شما ارور می‌دهد.

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

با MUG همراه باشید!

 منبع: SQLServertutorial

 مطالب مرتبط

۱۳ دستور مهم SQL که هر برنامه‌نویس باید بداند
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات