مهدی عادلی فر
بنیانگذار توسینسو و برنامه نویس

دستور SELECT در SQL با چه ترتیبی اجرا می شود؟

ترتیب اجرا دستورات SELECT در یک Query از SQL چگونه است؟ اصلی ترین دستور دردیتابیس های رابطه ای دستور لود کردن یا خواندن اطلاعات است  که در زبان SQL با دستور SELECT مشخص می شود. نمای کلی این دستور به شکل زیر است:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
SELECT columns
From table
Where conditions
Group By columns
Having conditions
order by columns

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

Select FirstName+' '+LastName as FullName
From UserTabel
Where len(FullName)>5

اگر شما یک جدول به نام UserTabel داشته باشید که در آن دو ستون به نام های FirstName, LastName هم داشته باشید و کد بالا را اجرا کنید حتما به شما خطا می دهد. خطایی که به شما می گوید که ستونی به نام FullName پیدا نشده است. و باید بدانیم که دلیل این نوع خطاها ترتیب اجرای بخش های مختلف دستورات Select است. نحوه اجرای بخش های مختلف دستور Select به شکل زیر است

From table
Where conditions
Group By columns
Having conditions
Select columns
Order By columns

این ترتیب اعلام می کند که

  1. اول جدول هدف مشخص می شود.
  2. و بر روی داده های شرط where اعمال می شود.
  3. سپس اگر نیاز به گروه بندی اطلاعات باشد در بخش group by اطلاعات بر اساس ستون های مشخص شده گروه بندی می شوند. دقت داشته باشید که این گروه بندی بر روی داده هایی که از فیلتر where رد شده اند اعمال می شود.
  4. بعد از گروه بندی شرط Having بر روی گروه های به وجود آمده در مرحله قبل اعمال خواهد شد.
  5. بعد از آن ستون هایی که باید انتخاب شوند در بخش select انتخاب می شوند.
  6. در قدم آخر ستون های مورد نظر مرتب سازی و sort می شوند.

با توجه به ترتیبی که گفته شد می توان فهمید که دلیل خطای کوئری بالا چیست. در اصل دلیل خطا در کد بالا این است که وقتی که اجرای کوئری به خط Where می رسد هنوز قسمت Select اجرا نشده است. به همین دلیل نام مستعار (alias) که در بخش select ساخته شده است در بخش where قابل شناسایی و قابل اجرا نیست و شکل درست این کوئری مانند کد زیر است:

Select FirstName+' '+LastName as FullName
From UserTabel
Where len(FirstName+' '+LastName)>5

یعنی به جز قسمت order by که بعد از دستور select اجرا می شود بقیه دستورات قبل از بخش select اجرا می شوند و اگر یک نام مستعار در select انتخاب کنیم در بخش هایی مانند where , group by قابل استفاده نیست و اگر نوشته شوند هنگام اجرا خطا دریافت خواهیم کرد.با وب سایت Tosinso همراه باشید.


مهدی عادلی فر
مهدی عادلی فر

بنیانگذار توسینسو و برنامه نویس

مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.

نظرات