آموزش جامعSQL Server(جلسه دو: نوشتن Query و مرتب‌سازی نتایج)
1398/02/08 16:38 , میلاد صاحب نظر

آموزش جامعSQL Server(جلسه دو: نوشتن Query و مرتب‌سازی نتایج)

در این جلسه با دستور SELECT و چگونگی کوئری نویسی برای دریافت اطلاعات و همچنین دستور ORDER و مرتب‌سازی نتایج کوئری خواهید آموخت.

۱- نصب و آشنایی با 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 بخش۱

 

عبارت ساده SELECT در SQL Server

جداول پایگاه داده اشیایی هستند که تمام داده‌های موجود در یک پایگاه داده را در خود ذخیره می‌کنند. در یک جدول، داده‌ها به صورت منطقی در فرمت ردیف و ستون سازماندهی می‌شوند که چیزی شبیه به یک spreadsheet (صفحه گسترده) است.

در یک جدول، هر ردیف نشان دهنده یک رکورد منحصر به فرد و هر ستون نشان دهنده یک فیلد در رکورد است. برای مثال، جدول customers شامل داده‌های مشتری (مانند شماره شناسایی مشتری، نام،‌ نام خانوادگی، شماره تلفن، ایمیل و اطلاعات آدرس) است که در زیر مشاهده می‌کنید:

customer table

SQL Server از schemaها برای دسته‌بندی منطقی جداول و دیگر اشیاء پایگاه داده استفاده می‌کند. در نمونه پایگاه داده (همان Bikestores که در جلسه قبل در SQL Server خود لود کردید)، ما دو schema به نام‌های sales و production داریم.

Sales schema تمام جداول مرتبط با فروش را گروه‌بندی می‌کند، در حالی که production schema تمام جداول مرتبط با تولید را گروه‌بندی می‌کند.

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

SELECT
    select_list
FROM
    schema_name.table_name;

در این syntax:

  • ابتدا، در قسمت SELECT لیستی از ستون‌ها را مشخص می‌کند که با ویرگول از هم مجزا شده‌اند و شما قصد دارید برای آن‌ها کوئری بنویسید.
  • دوم، در قسمت FROM جدول منبع و نام schema آن جدول مشخص شده است.

در هنگام پردازش عبارت SELECT، اگرچه عبارت SELECT در ابتدای کد آمده است، اما SQL Server ابتدا عبارت FROM و سپس عبارت SELECT را پردازش می‌کند.

ترتیب اجرای دستورات

نمونه‌هایی از عبارت SELECT در SQL Server

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

ستون جدول customer table

الف) SELECT در SQL Server مثال دریافت چند ستون از یک جدول

کوئری زیر نام و نام خانوادگی تمام مشتریان را پیدا می‌کند:

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

به نتیجه کوئری، یک مجموعه نتیجه گفته می‌شود.

کد زیر نام، نام خانوادگی و ایمیل‌های تمام مشتریان را بازمی‌گرداند:

نتایج آن به شرح زیر هستند:

ب) SELECT در SQL Server مثال دریافت تمام ستون‌ها از یک جدول

برای به دست آوردن داده‌های تمام ستون‌های یک جدول، می‌توانید تمام ستون‌های موجود در لیست انتخابی را نام ببرید. یا می‌توانید از دستور* SELECT  به عنوان یک میانبر برای صرفه‌جویی در زمان استفاده کنید:

دستور* SELECT  برای بررسی ستون‌ها و داده‌های جدولی که با آن آشنا نیستید مفید است. همچنین برای کوئری‌های ad-hoc نیز مفید است.

به هر حال، در یک کد و برنامه واقعی هیچ‌وقت نباید از دستور* SELECT  استفاده کنید، به این دلیل که:

  1. اولاً، * SELECT  گاهی بیش از آنچه برنامه شما نیاز به پردازش دارد، اطلاعات را بازمی‌گرداند. این امر باعث می‌شود داده‌های غیر ضروری از SQL Server به سمت برنامه مشتری ارسال شوند، در نتیجه زمان بیشتری طول می‌کشد تا داده‌ها در شبکه منتقل شوند و سرعت عملکرد برنامه کاهش می‌یابد.
  2. دوما، اگر یک یا چند ستون جدید به جدول اضافه شده باشند، آنگاه دستور* SELECT  تمام ستون‌ها (از جمله ستون‌های جدید) را بازمی‌گرداند که مسلماً داده‌های موجود در ستون‌های جدید جزو ملزومات برنامه نیستند و در نتیجه برنامه کرش می‌کند.

‌پ) SELECT در SQL Server – فیلتر و مرتب‌سازی مجموعه نتایج

برای فیلتر ردیف‌ها بر اساس یک یا چند شرط، همان‌طور که در کد و نتایج زیر مشاهده می‌کنید از دستور WHERE استفاده می‌کنیم:

در این مثال، کوئری مشتریانی که در کالیفرنیا مستقر هستند را بازمی‌گرداند.

وقتی دستور WHERE وجود داشته باشد، SQL Server دستورات کوئری را به ترتیبی که در تصویر زیر می‌بینید پردازش می‌کند: یعنی ابتدا FROM، سپس WHERE و در آخر SELECT.

ترتیب اجرای دستورات

همان‌طور که در کد و نتایج زیر مشاهده می‌کنید، برای مرتب‌سازی مجموعه نتایج بر اساس یک یا چند ستون، از دستور ORDER BY استفاده می‌شود:

در این مثال، دستور ORDER BY مشتریان را بر اساس نام آن‌ها و به ترتیب صعودی مرتب می‌کند(در بخش بعدی بیشتر در مورد این دستور صحبت می‌کنیم).

در این مورد، SQL Server دستورهای کوئری را به این ترتیب پردازش می‌کند: FROM، بعد WHERE، بعد SELECT و سپس ORDER BY.

ترتیب اجرای دستورات

ت) SELECT در SQL Server – کنار هم آوردن ردیف‌ها در یک گروه

برای کنار هم آوردن ردیف‌ها در یک گروه از دستور GROUP BY استفاده می‌شود. برای مثال، عبارت زیر تمام شهرهای مشتریانی که در ایالت کالیفرنیا مستقر هستند و تعداد مشتریان در هر شهر را بازمی‌گرداند.

در این مورد، SQL SERVER دستورها را به این ترتیب پردازش می‌کند: FROM، بعد WHERE، بعد GROUP BY بعد SELECT و در آخر ORDER BY.

ترتیب اجرای دستورات

ث) SELECT در SQL Server – مثال فیلتر گروه‌ها

برای فیلتر گروه‌ها بر اساس یک یا چند شرط، از دستور HAVING استفاده می‌کنیم. کد زیر شهری در کالیفرنیا را بازمی‌گرداند که دارای بیش از ۱۰ مشتری باشد:

توجه کنید که دستور WHERE ردیف‌ها را فیلتر می‌کند، در حالی که دستور HAVING گروه‌ها را فیلتر می‌کند.

در این قسمت تمام کدهایی که می‌توان با دستور SELECT نوشت را آموختید. بقیه دستورات در بخش‌ها و جلسات آینده به صورت مفصل و کامل توضیح داده خواهند شد.

دستور ORDER BY در SQL Server

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

تنها روش برای اینکه تضمین کنید ردیف‌هایی که در مجموعه نتایج نمایش داده می‌شوند، همان‌طور که مد نظر شما است مرتب شوند این است که از دستور ORDER By استفاده کنید. کد زیر syntax عبارت ORDER BY را نشان می‌دهد:

در این syntax:

ابتدا نام ستون و سپس عبارت قرار می‌گیرند.

ابتدا، یک نام ستون یا یک عبارت مشخص می‌کنید که بر اساس آن مجموعه نتایج حاصل از کوئری باید مرتب شوند. اگر چند ستون مشخص کنید، مجموعه نتایج بر اساس اولین ستون مرتب می‌شوند و سپس آن نتایج مرتب شده، بر اساس دومین ستون دوباره مرتب می‌شوند و همین‌طور الی آخر.

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

سپس از عبارات ASC یا DESC برای مشخص کردن اینکه داده‌های آن ستون باید به صورت صعودی مرتب شوند یا نزولی استفاده می‌شود.

عبارت ASC نتایج را از کمترین مقدار تا بیشترین مقدار مرتب می‌کند، در حالی که عبارت DESC مجموعه نتایج را از بیشترین مقدار تا کمترین مقدار مرتب می‌کند.

اگر صریحاً از عبارات ASC یا DESC استفاده نکنید، SQL Server به صورت پیش‌فرض داده‌ها را صعودی مرتب می‌کند. همچنین، SQL Server با NULL به عنوان کمترین مقدار برخورد می‌کند.

در پردازش دستور SELECT که دارای دستور ORDER BY است، دستور ORDER BY همیشه آخرین دستوری است که پردازش می‌شود.

مثال از دستور ORDER BY در SQL Server

همچنان از جدول customers در نمونه پایگاه داده Bikestores برای نمایش استفاده می‌کنیم.

ستون جدول customer table

الف) مرتب‌سازی نتایج جستجو با یک ستون به ترتیب صعودی

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

 در این مثال، چون صریحاً از عبارت ASC یا DESC استفاده نکردیم، دستور ORDER BY به صورت پیش‌فرض داده‌ها را به صورت صعودی مرتب می‌کند.

ب) مرتب‌سازی مجموعه نتایج با یک ستون به ترتیب نزولی

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

در این مثال، چون صریحاً از عبارت DESC استفاده کردیم، دستور ORDER BY مجموعه نتایج را بر اساس مقادیر ستون first_name به صورت نزولی مرتب می‌کند.

پ)مرتب‌سازی مجموعه نتایج با چندین ستون

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

ت) مرتب‌سازی مجموعه نتایج با چندین ستون و به ترتیب‌های مختلف

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

ث) مرتب‌سازی نتایج با یک ستون که جزء لیست انتخابی نیست

این امکان وجود دارد که مجموعه نتایج بر اساس ستونی که در لیست انتخابی وجود ندارد مرتب شوند، کد زیر مشتریان را بر اساس ایالت آن‌ها مرتب می‌کند، حتی با اینکه ستون state در لیست انتخابی وجود ندارد.

توجه کنید که ستون state  در جدول customers تعریف شده است. اگر این‌طور نبود، آنگاه کوئری شما برای برنامه قابل قبول نمی‌شد.

ج) مرتب‌سازی مجموعه نتایج با یک عبارت

تابع ()LEN تعداد کاراکترهای یک رشته را بازمی‌گرداند. کد زیر در دستور ORDER BY از تابع ()LEN برای بازگرداندن یک لیست مشتری مرتبط شده بر اساس طول‌ (تعداد حروف) نام استفاده می‌کند.

چ)مرتب‌سازی با موقعیت‌های ترتیبی (ordinal positions)

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

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

در این مثال، ۱ یعنی ستون first_name و ۲ یعنی ستون last_name.

استفاده از موقعیت‌های ترتیبی ستون‌ها در دستور ORDER BY به دو دلیل یک برنامه‌نویسی بد تلقی می‌شود:

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

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

خلاصه

در این جلسه به صورت کامل با تمامی موارد استفاده از دو دستور SELECT و ORDER BY آشنا شدید. فهمیدید که در کوئری‌هایی که می‌نویسید بهتر است چگونه کد بزنید و اینکه ترتیب اجرای دستورها توسط SQL Server چگونه هستند.

در جلسات آینده در مورد بقیه دستورهای مفید در کوئری نویسی صحبت خواهیم کرد.

با 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 در جلسه قبلی بررسی شد. این مبحث که ...

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

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

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