Querying

آموزش دستور SELECT

در سری مطالب پیش رو قرار است به مهمترین دستور کویری یعنی SELECT بپردازیم.

اگر تا کنون موفق به نصب Microsoft SQL Server نشده اید، این مطلب را بخوانید.

تمام دستورات بر روی دیتابیس آموزشی Adventure Works  نوشته و اجرا می شوند. اگر برای دانلود و نصب پایگاه داده آموزشی Adventure Works نیاز به راهنمایی دارید، به این مطلب یه سری بزنید.

یک دستور SELECT در حالت کلی شامل قسمت های مختلفی است. در مثال زیر نمونه ای از این دستور را می بینید:

select
            SOH.CustomerID
            SUM(SOD.Orderqty*SOD.UnitPrice) AS TotalSales

نمونه دستور SELECT
نمونه دستور SELECT

اگر این کویری برای شما نا آشناست، جای نگرانی ندارد. به مرور تمام قسمت های آن بررسی خواهد شد.

همان طور که قبلا گفتیم، زبان SQL یک زبان توصیفی است. این به معنای آن است که ترتیب اجرای دستورات لزوما با ترتیب نوشتار آن یکی نیست. بنابراین سوالی که پیش می آید این است که دستور SELECT  به چه ترتیبی اجرا می شود؟

پردازش منطقی کویری (Logical Query Processing):

پردازش یک دستور SELECT به صورت منطقی به گام های متفاوتی تقسیم می شود:

Logical Query Processin
پردازش منطقی کویری

همان طور که مشاهده می کنید در دستور SELECT، ترتیب اجرا متفاوت از ترتیب نوشتار است. اولین گام، پردازش FROM است و این ممکن است برای شما کمی عجیب باشد. توجه به گام های پردازش منطقی کویری (Logical query-processing) از پایه ای ترین مفاهیمی است که باید همیشه به آن توجه داشت، چرا که می تواند شما را از یک کویری نویس عادی به یک کویری نویس حرفه ای تبدیل کند.

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

در این مطلب نگاه مختصری به گام های پردازش منطقی کویری (Logical Query Processing) می اندازیم، ولی شرح کامل هر گام در مطلبی جداگانه خواهد آمد:

1. FROM

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

1.1 JOIN

وظیفه اصلی این عملگر در کنار هم قرار دادن دو مجموعه داده است. JOIN ها انواع مختلفی داشته و بر اساس نوع آن ها می توانند شامل این گام های درونی باشند: ضرب دکارتی، ارزیابی شرط JOIN و اضافه کردن رکورد های خارجی. در مطلب مرتبط با JOIN به شرح کامل انواع JOIN و گام های درونی اجرای آن خواهیم پرداخت.

1.2 APPLY

عملگر APPLY دارای دو نوع می باشد و بنابر هر یک از این دو نوع می تواند گام های متفاوتی داشته باشد. APPLY دو ورودی دارد: یک مجموعه داده و یک table expression. وظیفه اصلی APPLY اعمال کردن table expression بر روی مجموعه داده می باشد. در مطالب جداگانه به شرح table expression، انواع APPLY و گام های اجرای آن خواهیم پرداخت.

1.3 PIVOT

واژه Pivot در زبان انگلیسی به معنای چرخش می باشد. وظیفه این عملگر چرخاندن داده از سطر به ستون می باشد. هر چند که می توان این فرایند را با کمک دستورات دیگر شبیه سازی کرد، اما PIVOT کارایی بالایی داشته و از سرعت مناسبی برخوردار است. این عملگر می تواند کمک بسیاری به فرایند تهیه گزارش کند. PIVOT داری سه گام درونی (گروه بندی، پخش و تجمیع) است که بایستی در مطلبی جداگانه به شرح آن پرداخت.

1.4 UNPIVOT

برعکس PIVOT عمل می کند. بنابراین وظیفه آن چرخاندن داده از ستون ها به سطر ها می باشد. این عملیات طی سه گام درونی (تولید کپی از مجموعه داده، استخراج عناصر چرخش و حذف رکورد های خالی) صورت می گیرد. در یک مطلب جداگانه به شرح عملگر UNPIVOT خواهیم پرداخت.

عملگر های APPLY، PIVOT و UNPIVOT در SQL استاندارد وجود ندارند و از عملگرهای توسعه یافته در T-SQL می باشد. SQL استاندارد عملگری به نام LATERAL دارد که مشابه APPLY رفتار می کند. این عملگر در T-SQL پیاده سازی نشده است.

2. WHERE

وظیفه این عملگر حذف و انتخاب رکورد های ورودی می باشد. شرط WHERE بر روی تمامی سطر های خروجی از گام پیشین اعمال می شود. رکورد های منتخب در قالب یک جدول مجازی به گام بعدی منتقل می شوند. نکته مهم در تمامی عملگر هایی که وظیفه فیلتر کردن را دارند، منطق Microsoft SQL Server در ارزیابی شرط های فیلتر می باشد. این منطق که با نام منطق سه ارزشی (Three Valued Logic) معروف است از اصول پایه ای است که نیاز به شرح جداگانه دارد.

3. GROUP BY

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

4. HAVING

اگر نیاز دارید که پس از گروه بندی، گروه های تشکیل شده را حذف و انتخاب نمایید، بایستی از عملگر HAVING استفاده نمایید. این عملگر مانند تمامی عملگر های فیلتر کننده، تابع منطق سه ارزشی (Three Valued Logic) می باشد. خروجی این گام در قالب یک جدول مجازی به مرحله بعد منتقل می شود.

5. SELECT

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

5.1 Select List

شما در این گام می توانید فیلد های جدید تولید کرده، برای آن ها نام انتخاب کنید و فیلد های پیشین را تغییر نام دهید.

5.2 DISTINCT

عملگر DISTINCT سطر های تکراری را حذف می کند.

6. ORDER BY

مرتب کردن سطر ها را از طریق ORDER BY صورت می گیرد. مرتب کردن به طور پیش فرض به صورت صعودی است ولی می تواند به صورت نزولی نیز انجام بگیرد.

7. TOP یا OFFSET-FETCH

این دو عملگر به طور همزمان نمی توانند در یک دستور SELECT شرکت کنند. وظیفه TOP انتخاب قسمتی از رکوردهای ابتدایی یک مجموعه داده مرتب یا غیر مرتب است. OFFSET-FETCH کمی پیشرفته تر عمل می کند و می تواند ابتدا چند رکورد ابتدایی را حذف و پس از قسمتی از رکورد ها را انتخاب نماید. دستور OFFSET-FETCH از SQL Server 2012 به مجموعه دستورات T-SQL اضافه شده است.

مسیر پردازش منطقی کویری (Logical Query Processing) را می توانید در تصویر زیر مشاهده کنید:

Logical Query Processing Diagram
فلوچارت پردازش منطقی کویری

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید

بستن
دکمه بازگشت به بالا
بستن
بستن