کوئری نوشتن با استفاده از زبان SQL جهت بهینه سازی برنامه ها

در این مقاله کوئری های اصیل SQL که نوع کلاسیک پرس‌ و جو ها هستند را بررسی خواهیم کرد.

پیش از آنکه به سراغ نوشتن کوئری با استفاده از SQL برویم بهتر است با یک نقل قول از w3school زبان SQL را مختصرا معرفی کنیم:

یک زبان برای مرتب سازی، بازیابی و مدیریت داده هاست. داده هایی مثل مشخصات یک انسان.

در مقاله قبلی در مورد اهمیت پرس و جو در نرم افزار ها صحبت شد و برای انجام آن در زمان اجرای نرم افزار تکنولوژی LINQ معرفی شد.

راه حل دیگری که می توان با آن پرس و جو  انجام داد نوشتن کوئری با زبان SQL است.

دلیل محبوبیت کوئری نویسی با زبان sql ، بر اساس سی شارپ کرنر دو مورد است :

  • زحمت برنامه نویس ها کم می شود?
  • execution plan های دوست داشتنی باعث بهبود عملکرد برنامه می شود?

گرچه کوئری های SQL در مسائل امنیتی و پیچیدگی هم معترضانی دارد. اما زمانی که حجم داده ها زیاد باشد این کوئری ها مورد استفاده قرار می گیرند.

به‌طورکلی، یک پرس ‌وجو یا کوئری یک سوال است که اغلب نیاز است به‌صورت رسمی بیان شود.

کوئری های sql طبیعتا در محیط برنامه sql server  نوشته و اجرا می شوند.

بنابراین در ابتدا نحوه ساخت کوئری در محیط برنامه sql server را ببینیم.

در صفحه ای به شکل زیر :

 

SQL کوئری اس کیو ال Query

 

روی آیکون New Query از نوار ابزار کلیک کن.

یک صفحه سفید بدون هیچ خط کدی جلوی چشمانت ظاهر می شود!

حالا دستورات sql را در این صفحه باید بنویسی.

و برای اینکه کوئری ات را اجرا کنی روی دکمه Execute از نوار ابزار کلیک کن:

SQL کوئری اس کیو ال Query

پس از اجرای دستورات، نتایج به‌دست‌آمده در بخش Results در پایین همان صفحه‌ی ویرایشگر نشان داده می‌شود و پیام مربوط به آن نیز در برگه‌ی Messages در کنار Results نشان داده می‌شود.

نکته:

در برخی موارد لازم است تا پرس‌ و جو ها را به دلایل مختلف ذخیره کنید. پرس‌ و جو ها با پسوند .sql ذخیره می‌شوند

برای ذخیره‌سازی یک پرس‌ و جو کافی است تا دکمه‌ی Save () را از نوار ابزار کلیک کنید یا اینکه از کلیدهای ترکیبی Ctrl+S استفاده کنید.

و اما چه دستوراتی برای ایجاد یک کوئری با SQL داریم :

در مقاله LinQ در مورد دستورات select , where , group  , join صحبت کردم . این دستورات پایه و اساس کوئری ها هستند.

بنابراین پرس و جو های SQL را نیز با همین دستورات شروع می کنیم:

دستور select در پرس و جو های SQL:

در یک جمله ساده دستور select برای انتخاب استفاده می شود.

ساختار دستور select به شکل زیر است:

Select ( *  نام فیلد یا  )  from   نام جدول

فرض کنید در بانک اطلاعاتی کد تجاری یک جدول به نام human داریم به شکل زیر:

SQL کوئری اس کیو ال Query

 

صورت مساله : نام کارمندان کد تجاری را چگونه می توان از این جدول بدست آورد؟

 

در دنیای واقعی مساله به شکل زیر و بسیار ساده است ؟

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

 

 

نام پرسنل در یک جدول برروی کاغذ نوشته شده است.

و در دنیای نرم افزاری به جای آنکه کاغذ باشد یک جدول در نرم افزار SQL Server است.

 

حل مساله : باید نام کارمندان از یک جدول به نام human  انتخاب کنیم. این دستور را با استفاده از select در sql به شکل زیر خواهد بود:

 

Select name from  human

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

 

SQL کوئری اس کیو ال Query

 

خب حالا این دستور رو موشکافی می کنیم :

 

SQL کوئری اس کیو ال Query

 

اگر در این قسمت سوال داری حتما از من بپرس.

اولین دستور تنها انتخاب یک ستون از جدول بود. اگر بخواهی دو ستون را هم ببینی، دستور را به صورت می نویسی :

Select name,age from  human

و طبیعتا خروجی به شکل زیر است:

 

SQL کوئری اس کیو ال Query

 

سوال : اگر همه ستون های جدول را بخواهیم ببینیم دستور sql به چه صورت خواهد ؟!

 

انتخاب عنوان برای ستون‌ها در SQL

 

می توان برای ستون های خروجی های کوئری با زبان SQL عنوان به زبان فارسی با انگلیسی نوشت.

ساختار انتخاب عنوان برای ستون ها:

 

برای انتخاب عنوان، پس از نام ستون، از کلمه‌ی کلیدی AS و پس ‌از آن عنوان موردنظر خود را قرار دهید.

 

مثال : در جدول بالا برای ستون name عنوان “نام و نام خانوادگی” و برای ستون age عنوان “سن” را انتخاب می کنیم:

دستور آن به شکل زیر خواهد بود:

Select name as  نام_نام_خانوادگی, age AS سن  from human

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

 

SQL کوئری اس کیو ال Query

 

تا یادم نرفته :

نمی توانی بین عنوان هایی که انتخاب می کنی از space استفاده کنی. اما استفاده از _ مجاز است.

SQL کوئری اس کیو ال Query

در این مثال در جدول من نام و نام خانوادگی هر دو در یک ستون به نام name قرار دارند.

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

مانند جدول زیر:

 

SQL کوئری اس کیو ال Query

 

همچنین حق طبیعی تو است که با وجود جدا بودن ستون های آن ها، در خروجی آن ها را فقط در یک ستون قرار دهی.

به این کار می گویند ترکیب کردن ستون ها.

 

ترکیب کردن ستون ها در یک پرس و جو به زبان SQL را به این صورت بنویس :

 

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

مثال : در جدول زیر نام و نام خانوادگی قرار گیرند:

Select FirstName + ' ' + LastName from human2

موشکافی:

 

SQL کوئری اس کیو ال Query

 

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

تا یادم نرفته :

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

تا یادم نرفته:

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

 

دستور Where در پرس و جو های SQL

 

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

برای اینکه بتوانی رکوردهایی که دارای شرط خاصی هستند را ببینی، می‌توانی از عبارات شرطی پس از کلمه‌ی کلیدی Where استفاده کنی.

ساختار دستورات شرطی به شکل زیر است:

SELECT نام ستون FROM نام جدول

WHERE شرط ;

 

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

تا یادم نرفته :

پیشنهاد می کنم از Select های تودرتو استفاده نکنی. چراکه این شکل از دستور Select سرعت و کارایی دستوراتت را کاهش می‌دهد.

در عکس زیر افراد با سن های مختلف قرار دارند:

 

 

مثال : می خواهیم نام افرادی را ببینیم که سنشان برابر ۲۰ است.

 

SQL کوئری اس کیو ال Query

 

ظاهر قضیه در دنیای واقعی به شکل زیر خواهد بود:

 

 

افراد را به دو دسته ۲۰ ساله ها و غیر ۲۰ ساله ها تقسیم کرده ایم.

دستور SQL این کار (نمایش افراد ۲۰ ساله) باید به شکل زیر باشد:

Select FirstName from human2

where age = 20

و خروجی به شکل زیر می باشد:

SQL کوئری اس کیو ال Query

 

 

شرط های مختلفی را می توان بررسی کرد :

مثال : نام افرادی که سن آن ها بین ۲۱ تا ۲۳ است:

Select FirstName from human2

where age BETWEEN 21 and 23

SQL کوئری اس کیو ال Query

دستور JOIN در پرس و جو های SQL :

 

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

 

همانطور که در تصویردیده می­شود، اتصالات به دو دسته اصلیِ اتصالات با شرط و بدون شرط تقسیم می‌شوند.

 

 

SQL کوئری اس کیو ال Query

 

اتصالات با شرط

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

 

اتصالات با شرط داخلی:

در اتصالات با شرط داخلی تنها رکوردهایی نمایش داده می‌شوند که الزاماً با یکدیگر ارتباط داشته باشند. به‌عبارت‌دیگر تنها رکوردهایی از دو طرف رابطه به هم متصل می‌شوند که شرط بیان‌شده در آن‌ها برقرار باشد.

 

SQL کوئری اس کیو ال Query

 

برای استفاده از اتصالات با شرط داخلی از عبارت کلیدی Inner Join به‌صورت زیر در دستور Select استفاده می‌شود:

Select لیست_موردنظر|*

From نام جدول ۱  Inner Join نام جدول ۲  ON   شرط

 

مثلا دو جدول زیر را در نظر بگیرید :

 

SQL کوئری اس کیو ال Query

 

که داده های آن ها به شکل زیر است:

 

SQL کوئری اس کیو ال Query

 

 

بر اساس ستون human_id در جدول car id های ۱ و ۳ و ۶ دارای ماشین هستند یعنی : محسن، ندا و حسن.

حال می خواهیم با استفاده از دستورات SQL نام افرادی را بدست آوریم که دارای ماشین هستند. برای اینکار از inner join استفاده می کنیم:

select FirstName from human2 Inner Join car

ON human2.id = human_id

 

و خروجی آن به صورت زیر خواهد بود.

 

SQL کوئری اس کیو ال Query

 

اتصالات با شرط خارجی:

اتصالات با شرط خارجی به دو دسته‌ی راست و چپ تقسیم می‌شوند. این نوع اتصالات پس ‌از آنکه همانند اتصالات داخلی، رکوردهایی که در هر دو جدول با یکدیگر ارتباط دارند را نمایش می‌دهند، رکوردهایی که در جهت (Right یا Left) تعیین‌شده در این دستور قرار دارند، و شرط اتصال در آن‌ها برقرار نمی‌باشد را نیز نشان می­دهند.

تا یادم نرفته :

منظور از جهت جدول‌ها که چپ یا راست هستند، همان جهتی است که نسبت به دستور Outer Join دارند.

ساختار کلی اتصالات با شرط خارجی:

Select لیست_ستون‌ها |*

From جدول_۱  جهت اتصال Outer Join جدول_۲  ON   شرط

در شکل دستور فوق، جدول ۱ جدول سمت چپ و جدول ۲ همان جدول سمت راست خواهد بود. (برای مشاهده مثال این قسمت برروی فلش زیر کلیک کنید?)

 

 

بنابراین درصورتی‌که از اتصال خارجی سمت راست استفاده شود، رکوردهایی از دو جدول که شرط در آن‌ها در برقرار است به همراه رکوردهایی از جدول سمت راست (در اینجا همان جدول ۲) که شرط در آن‌ها برقرار نیست را نشان می‌دهد .

 

SQL کوئری اس کیو ال Query

 

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

 

SQL کوئری اس کیو ال Query

 

 

اتصالات بدون شرط

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

 

SQL کوئری اس کیو ال Query

 

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

Select لیست_ستون‌ها |*

From جدول_۱  Cross Join جدول_۲

در مثال جدول human2 و car یک cross join بکار برده شده است :

select * from human2 Cross Join car

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

 

SQL کوئری اس کیو ال Query

 

داستان پرس و جو های sql در این قسمت به پایان نمی رسد.

دستورات مهم تری نیز از جمله Group که به آن ها در مقالات بعدی خواهیم پرداخت.

3 پاسخ
  1. نازمحمد گری
    نازمحمد گری گفته:

    با سلام خدمت شما
    در مورد : سوال اگر همه ستون های جدول را بخواهیم ببینیم دستور sql به چه صورت خواهد ؟!
    از علامت * به صورت ذیل استفاده می شود که در اینجا به معنای همه ستون های جدول باشد / امید وارم که درست باشه/

    نام جدول Select ( * ) from

    پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

پاسخی بگذارید

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