SQL مخفف Structured Query Language است که یک زبان کامپیوتری است که برای ذخیره، دستکاری و بازیابی داده ها از پایگاه داده رابطه ای استفاده می شود. SQL یک زبان مدیریت پایگاه داده است که از ایجاد پایگاه داده، حذف، به دست آوردن ردیف ها و تغییر ردیف ها و سایر ویژگی ها پشتیبانی می کند.
تابع اس کیو ال ROW_NUMBER
تابع ROW_NUMBER یک تابع رتبه بندی SQL است که به هر رکورد جدید در یک پارتیشن یک عدد رتبه ترتیبی اختصاص می دهد.
هنگامی که تابع SQL Server ROW NUMBER دو مقدار یکسان را در یک پارتیشن شناسایی می کند، اعداد رتبه متفاوتی را به هر دو اختصاص می دهد.
شماره رتبه با ترتیبی که در آن نمایش داده می شوند تعیین می شود.
آرگومان ها در SQL چیست؟
دستورات SQL از آرگومان هایی تشکیل شده اند که قطعات کدی هستند که می توانند برای انجام وظایف خاص مورد استفاده قرار گیرند. این آرگومان ها شامل SELECT است که برای بازیابی داده ها از پایگاه داده استفاده می شود. INSERT، برای افزودن رکوردهای جدید؛ به روز رسانی، برای اصلاح سوابق موجود و DELETE، برای حذف رکوردهای خاص. آرگومان های دیگری مانند WHERE و ORDER BY نیز برای اصلاح پرس و جو و برگرداندن نتایج خاص استفاده می شوند. با ترکیب مناسبی از عبارات، کاربران می توانند پرس و جوهای پیچیده ای ایجاد کنند که داده های دقیق را برمی گرداند و به آنها اجازه می دهد تا به سرعت تصمیمات آگاهانه بگیرند.
نحو SQL ROW_NUMBER
نحو تابع ROW_NUMBER در SQL به شرح زیر است:
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
حال، اجازه دهید به بندهای مختلف استفاده شده در نحو بالا نگاه کنیم.
OVER
این بند پنجره یا مجموعه ردیف هایی را که تابع پنجره اجرا می کند، مشخص می کند. PARTITION BY و ORDER BY دو بند ممکن از عبارت OVER هستند.
PARTITION BY
این یک عبارت اختیاری در تابع ROW_NUMBER است. این عبارتی است که مجموعه نتایج را به پارتیشن ها (گروه های ردیف) تقسیم می کند. سپس متد ROW_NUMBER() برای هر پارتیشن اعمال می شود که یک عدد رتبه جداگانه به هر پارتیشن اختصاص می دهد.
اگر پارتیشن توسط بند مشخص نشده باشد، تابع ROW NUMBER کل نتیجه را به عنوان یک پارتیشن واحد در نظر می گیرد و آن را از بالا به پایین رتبه بندی می کند.
ORDER BY
در هر پارتیشن، این بند به ما اجازه میدهد تا ردیفها را در مجموعه نتایج مرتب کنیم. از آنجا که تابع ROW NUMBER () وابسته به ترتیب است، یک عبارت ضروری است.
چگونه از ROW_NUMBER در SQL Query استفاده کنیم؟
اکنون که دستور اولیه برای نوشتن تابع ROW_NUMBER در SQL را پوشش دادهایم، اجازه دهید به یک مثال نگاه کنیم تا بفهمیم چگونه با جدول سرور SQL کار میکند.
مثال
SELECT ROW_NUMBER() OVER (ORDER BY E_id) row_num,E_name FROM Employee;
کوئری بالا جدول Employee یک ستون به نام row_num ایجاد می کند با ترتیب 1 تا n و برحسب ستون E_id آن را شماره گذاری می کند.
انواع بازگشت در SQL چیست؟
انواع بازگشتی SQL بخش اساسی کار با پایگاه داده است. این ساختار تعیین می کند که کدام نوع داده پس از اجرای دستور SQL بازگردانده می شود. چندین نوع برگشتی مختلف وجود دارد، از جمله یک مقدار واحد، چندین مقدار، آرایه ای از اشیا و یک جدول. هر نوع بازگشتی بر نحوه ذخیره و دسترسی به داده ها تأثیر می گذارد.
توابع، رویههای ذخیره شده و تریگرها همگی میتوانند مقادیر را در SQL برگردانند. این مقادیر می توانند از انواع داده های مختلف مانند عدد صحیح، رشته، تاریخ یا حتی یک رکورد یا جدول باشند. توابع و رویههای ذخیره شده میتوانند از دستورهای بازگشتی برای برگرداندن هر نوع داده اسکالر یا جدولی استفاده کنند و تریگرها فقط میتوانند یک مقدار اسکالر تولید کنند.
استفاده از SQL ROW_NUMBER() برای صفحه بندی
تابع SQL ROW_NUMBER() می تواند برای محدود کردن تعداد ردیف های برگشتی برای اهداف صفحه بندی استفاده شود. این می تواند برای برنامه های کاربردی با مجموعه داده های بزرگ مفید باشد و تضمین کند که کاربران فقط داده های مورد نیاز خود را دریافت می کنند. به عنوان مثال، یک برنامه ممکن است تعداد ردیف های بازگردانده شده را به 20 در یک زمان محدود کند. تابع ROW_NUMBER() یک ابزار ارزشمند برای صفحه بندی مجموعه داده ها است و برنامه ها را قادر می سازد تا نتایج سریع تری ارائه دهند. تابع Row_Number() می تواند یک عدد متوالی منحصر به فرد برای هر سطر در مجموعه نتایج برای یک پرس و جوی SQL داده شده ارائه دهد. سپس می توان از این عدد ترتیبی برای شناسایی و دسترسی به داده ها در محدوده خاصی از صفحات استفاده کرد. علاوه بر این، تابع Row_Number() را می توان با عبارت ORDER BY ترکیب کرد تا اطمینان حاصل شود که هنگام صفحه بندی داده ها همان ترتیب حفظ می شود.
استفاده از SQL ROW_NUMBER() برای یافتن نهمین بالاترین ارزش در هر گروه
با استفاده از تابع ROW_NUMBER() میتوانیم nامین مقدار بالاتر در هر گروه را پیدا کنیم. این را می توان با تعیین یک شرط در عبارت "PARTITION BY" که داده ها را به گروه ها تقسیم می کند و سپس ترتیب داده های درون هر گروه را بر اساس مقدار علاقه انجام داد. سپس تابع ROW_NUMBER() میتواند ردیفی را با nامین مقدار بالاتر در هر گروه شناسایی کند. این ویژگی قدرتمند به ما اجازه می دهد تا داده ها را در هر گروه به سرعت شناسایی و تجزیه و تحلیل کنیم. این را می توان با اختصاص تابع ROW_NUMBER() به هر ردیف از داده ها و سپس استفاده از عبارت Partition برای گروه بندی داده ها بر اساس یک مقدار خاص انجام داد. سپس Nامین بالاترین مقدار را می توان با استفاده از عبارت ORDER BY برای مرتب کردن داده ها به ترتیب نزولی و تعیین مقدار ردیف N تعیین کرد. این تکنیک قدرتمند برای مدیریت مجموعه دادهها با هر اندازه به برنامهها اجازه میدهد تا به سرعت به دادههای مورد نظر دسترسی پیدا کرده و آنها را برگردانند.
ROW_NUMBER با سایر توابع رتبه بندی در SQL
ROW_NUMBER تابعی در زبان پایگاه داده Transact-SQL است که به هر ردیف در مجموعه نتایج یک پرس و جو، یک عدد متوالی منحصر به فرد اختصاص می دهد. معمولاً همراه با سایر توابع رتبه بندی مانند DENSE_RANK، RANK و NTILE برای انجام انواع مختلف تجزیه و تحلیل رتبه بندی استفاده می شود. ROW_NUMBER همچنین در برنامههای گزارشدهی برای نمایش یک عدد ترتیبی برای هر ردیف در گزارش استفاده میشود. این می تواند به مرتب سازی بر اساس معیارهایی که در اطلاعات یا برای اشکال زدایی عبارات پیچیده ظاهر نمی شوند کمک کند.
هدف این مقاله تحلیل استفاده از ROW_NUMBER همراه با سایر توابع رتبهبندی در پایگاههای داده SQL است. هدف ما بررسی گزینه های مختلف موجود و درک مزایا و معایب آنها در زمینه بازیابی داده است. ما همچنین بررسی خواهیم کرد که چگونه توابع رتبه بندی مختلف را می توان برای ایجاد یک راه حل جامع برای بازیابی داده ها ترکیب کرد. برای انجام این کار، نمونههایی از نحوه استفاده از ROW_NUMBER و سایر توابع رتبهبندی ارائه میکنیم و نقاط قوت و ضعف مربوطه را مورد بحث قرار میدهیم.
چگونه از تابع SQL ROW_NUMBER با PARTITION BY استفاده کنیم؟
عبارت زیر از تابع ROW_NUMBER برای تخصیص متوالی یک عدد صحیح به هر کارمند در جدول استفاده می کند. بند پارتیشن در اینجا برای تقسیم کارمندان مختلف بر اساس کشورشان استفاده شده است.
SELECT E_name,E_country,ROW_NUMBER() OVER (PARTITION BY E_country ORDER BY E_name) row_num FROM Employee ORDER BY E_country;
همانطور که در خروجی بالا مشاهده می کنید که هر کارمند بر اساس کشور تقسیم شده است. هر بار که نام کشور تغییر می کند، عدد صحیح اختصاص داده شده به ترتیب یا ROW_NUMBER مجدداً شروع می شود.
چگونه از تابع SQL ROW_NUMBER () بدون PARTITION BY استفاده کنیم؟
تابع SQL ROW_NUMBER() اغلب برای اختصاص یک شماره ردیف منحصر به فرد به هر رکورد در مجموعه نتایج شما استفاده می شود. وقتی از تابع ROW_NUMBER() بدون بند PARTITION BY استفاده میکنید، کل مجموعه نتایج را بهعنوان یک پارتیشن واحد در نظر میگیرد و ردیفها را بهطور متوالی در کل مجموعه شمارهگذاری میکند، نه اینکه تعداد هر پارتیشن جدید را مجدداً راهاندازی کند. این می تواند به ویژه زمانی مفید باشد که شما به یک شناسه منحصر به فرد برای هر ردیف صرف نظر از هر طبقه بندی نیاز دارید. با این حال، تابع برای تعیین دنباله شمارهگذاری به عبارت ORDER BY نیاز دارد.
چگونه با استفاده از CTE و ROW_NUMBER زیرمجموعه ای از ردیف ها را برگردانیم؟
در برنامه های کاربردی، از متد ROW NUMBER() برای صفحه بندی استفاده می شود. برای مثال، میتوانید فهرستی از مشتریان را بر اساس صفحه، با 10 ردیف در هر صفحه ارائه دهید.
دستور کد داده شده استفاده از تابع ROW_NUMBER را برای برگرداندن ردیف های کارمند از 1 تا 5 نشان می دهد.
CTE به عنوان "بیان جدول مشترک" تعریف شده است. یک CTE به شما امکان می دهد یک مجموعه نتایج موقت با نام ایجاد کنید که در محدوده اجرای دستورات SELECT، INSERT، UPDATE، DELETE یا MERGE موجود است.
WITH cte AS ( SELECT ROW_NUMBER() OVER(ORDER BY E_name) row_num, E_id, E_name FROM Employee) SELECT E_id,E_name FROM cte WHERE row_num > 1 AND row_num <= 5;
در مثال بالا، CTE از متد ROW NUMBER() برای اختصاص یک عدد صحیح متوالی به هر سطر در مجموعه نتایج استفاده می کند.
دوم، کوئری بیرونی سطرهایی را با اعداد ردیف از 1 تا 5 برگرداند.
سوالات متداول
1) چگونه شماره ردیف را در SQL بدست بیاورم؟
برای دریافت اعداد ردیف در SQL، میتوانید از تابع ROW_NUMBER() استفاده کنید. بر اساس ترتیب مشخص شده، یک عدد متوالی منحصر به فرد را به هر ردیف در مجموعه نتیجه اختصاص می دهد.
2) ID ردیف و شماره ردیف در SQL چیست؟
در SQL، ردیف ID به یک شناسه منحصربفرد اشاره دارد که توسط سیستم مدیریت پایگاه داده به هر ردیف در جدول اختصاص داده شده است. این اغلب یک مکانیسم داخلی است که توسط پایگاه داده برای ردیابی و مکان یابی موثر ردیف ها استفاده می شود. از طرف دیگر، شماره ردیف یک عدد متوالی است که به هر ردیف در مجموعه نتایج بر اساس یک ترتیب مشخص، معمولاً با استفاده از تابع ROW_NUMBER () اختصاص داده می شود.
3) چگونه بر اساس شماره ردیف در SQL گروه بندی کنیم؟
برای گروه بندی بر اساس شماره ردیف در SQL، می توانید از یک عبارت فرعی یا یک عبارت جدول مشترک (CTE) استفاده کنید. ابتدا با استفاده از تابع ROW_NUMBER () شماره ردیف را به هر ردیف اختصاص دهید. سپس، در پرس و جو بیرونی، ردیف ها را بر اساس شماره ردیف های اختصاص داده شده گروه بندی کنید.
4) ROW_NUMBER () over partition by چیست؟
ROW_NUMBER() OVER PARTITION BY یک تابع SQL است که به هر سطر در یک پارتیشن خاص یک عدد متوالی منحصر به فرد اختصاص می دهد. پارتیشن زیرمجموعهای از ردیفهایی است که مقادیر مشابهی را در ستونهای مشخص شده به اشتراک میگذارند. تابع ROW_NUMBER() شماره گذاری هر پارتیشن را بازنشانی می کند و در نتیجه تعداد ردیف های منحصر به فرد در هر پارتیشن ایجاد می شود.
5) Rownum 1 در SQL چیست؟
Rownum 1 در SQL یک نحو استاندارد SQL نیست. با این حال، در برخی از سیستم های پایگاه داده مانند Oracle، Rownum یک شبه ستون است که می تواند برای محدود کردن تعداد ردیف های برگشتی در یک پرس و جو استفاده شود. Rownum 1 اغلب برای بازیابی تنها ردیف اول از مجموعه نتایج استفاده می شود. برای مثال، "SELECT * FROM table WHERE ROWNUM = 1" سطر اول جدول را برمی گرداند.
منبع: simplilearn.com