عبارتهای In ،Distinct و Alias در SQL – راهنمای جامع
در ادامه سلسله مطالب آموزش عبارتهای SQL، در این راهنما نیز سه مورد دیگر از عبارتهای SQL را که در انتخاب رکوردهای مورد نظر شما از پایگاه داده راهگشا هستند، معرفی میکنیم.
Distinct
کلیدواژه Distinct به شما امکان میدهد که مقادیر منحصر به فرد را در یک ستون بیابید. زمانی که یک جدول دادههای زیادی در خود جای داده باشد، برخی ستونها شامل مقادیر تکراری خواهند بود.
برای نمونه بسیاری از افراد نام و نام خانوادگی مشترکی دارند. در اغلب موارد این مسئله مشکلی ایجاد نمیکند. اما در برخی موارد باید بدانید که چه تعدادی از مقادیر منحصر به فرد در یک ستون وجود دارند. برای این کار باید از کلیدواژه Distinct استفاده کنید.
عبارت SQL
SELECT DISTINCT(FIRSTNAME) FROM INDIVIDUAL;
جدول منبع
IndividualId | FirstName | LastName | UserName |
---|---|---|---|
1 | Fred | Flinstone | freddo |
2 | Homer | Simpson | homey |
3 | Homer | Brown | notsofamous |
4 | Ozzy | Ozzbourne | sabbath |
5 | Homer | Gain | noplacelike |
نتیجه
در این مثال با استفاده از کلیدواژه Distinct همه مشتریانی که نام یکسانی داشتند به عنوان یک نفر در نظر گرفته شدهاند. نتایجی که از این عبارت بازگشت مییابد، شامل تنها یک مورد (Homer) است؛ گرچه سه مدخل متفاوت با این نام در جدول وجود دارد.
FirstName |
---|
Fred |
Homer |
Ozzy |
عبارت IN
IN یک عملگر است که به شما کمک میکند چندین مقدار را در بند WHERE خود تعیین کنید. عملگر IN زمانی که نیاز به مقایسه یک مقدار با فهرستی از مقادیر داشته باشید مفید خواهد بود. در اغلب موارد این فهرست میتواند نتیجه یک کوئری از جدول دیگری باشد.
ساختار SQL
SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN (VALUE1,VALUE2,...);
مثال
SELECT * FROM INDIVIDUAL WHERE LASTNAME IN ('SIMPSON','OZZBOURNE','FLINSTONE');
جدول منبع
Id | FirstName | LastName | UserName |
---|---|---|---|
1 | Fred | Flinstone | freddo |
2 | Homer | Simpson | homey |
3 | Homer | Brown | notsofamous |
4 | Ozzy | Ozzbourne | sabbath |
5 | Homer | Gain | noplacelike |
نتیجه
IndividualId | FirstName | LastName | UserName |
---|---|---|---|
1 | Fred | Flinstone | freddo |
2 | Homer | Simpson | homey |
4 | Ozzy | Ozzbourne | sabbath |
ممکن است متوجه شده باشید که این دستور همان نتیجهای را بازمیگرداند که عبارت SQL زیر باز خواهد گرداند:
SELECT * FROM INDIVIDUAL WHERE LASTNAME = 'SIMPSON' OR LASTNAME = 'OZZBOURNE' OR LASTNAME = 'FLINSTONE';
این حرف صحیح است و دستور فوق نیز نتیجه مشابهی ارائه میکند؛ اما استفاده از عبارت IN در دستور SQL بسیار خلاصهتر است.
IN در SQL و کوئریهای فرعی
اما یکی از مفیدترین استفاده از عملگر IN زمانی است که میخواهید یک مقدار را در برابر نتایج یک کوئری دیگر مقایسه کنید. برای نمونه فرض کنید جدول دیگری به نام Publisher داشته باشیم. این جدول شامل کاربرانی است که از طریق یک کنسول مدیریتی امکان انتشار مطالبی را در وبسایت ما داشتهاند. همه کاربران موجود در جدول Publisher در جدول Individual نیز حضور دارند؛ اما همه کاربران موجود در جدول Individual در جدول Publisher وجود ندارند.
جدول Individual
IndividualId | FirstName | LastName | UserName |
---|---|---|---|
1 | Fred | Flinstone | freddo |
2 | Homer | Simpson | homey |
3 | Homer | Brown | notsofamous |
4 | Ozzy | Ozzbourne | sabbath |
5 | Homer | Gain | noplacelike |
جدول Publisher
IndividualId | AccessLevel |
---|---|
1 | Administrator |
2 | Contributor |
3 | Contributor |
4 | Contributor |
وظیفه ما این است که فهرستی از نام کاربری همه افراد Publisher ایجاد کنیم که دارای دسترسی Contributor هستند. ممکن است متوجه شده باشید که نام کاربران در جدول Individual قرار دارد؛ اما سطح دسترسی در جدول Publisher ذخیره شده است. ضمناً به طور بالقوه ممکن است افراد با خصوصیت Contributor زیادی وجود داشته باشند. در چنین مواردی بهترین کار استفاده از عملگر IN است.
عبارت SQL
SELECT USERNAME FROM INDIVIDUAL WHERE INDIVIDUALID IN (SELECT INDIVIDUALID FROM PUBLISHER WHERE ACCESSLEVEL = 'CONTRIBUTOR');
نتیجه
UserName |
---|
homey |
notsofamous |
sabbath |
در این مثال رکوردهای زیادی در جدول Publisher وجود نداشت؛ اما حالتی را تصور کنید که در چنین جدولی هزاران رکورد وجود داشته باشد. در این حالت عبارت IN بسیار مفید خواهد بود.
عبارت ALIAS در SQL
منظور از ALIAS در SQL نامی مستعار است که به یک جدول داده میشود. بدین ترتیب کار با نامهای جدولها، به خصوص در مواردی که نامها طولانی هستند، راحتتر میشود.
نام مستعار (ALIAS) هر چیزی میتواند باشد؛ اما معمولاً سعی میشود از نامهای کوتاه استفاده شود. شاید از خود بپرسید که چرا باید برای جدولی که خود از قبل نام دارد، بخواهیم یک نام جدید بدهیم؟ پاسخ این است که این کار دلایل خوبی دارد که در ادامه برخی از آنها را مورد اشاره قرار میدهیم:
- کوئریها در برخی موارد بسیار طولانی میشوند. ALIAS ها میتوانند باعث شوند که خواندن کوئریها آسانتر شود.
- ممکن است در مواردی متوجه شوید که در موارد متعددی به یک نام جدول اشاره میکنید. این حالت در مواردی که با چند جدول کار میکنید و باید به ستونهای مختلف آن جدولها اشاره کنید، بسیار اتفاق میافتد. این وضعیت میتواند آزار دهنده باشد، چون باید هر بار نام کامل را بنویسید و در مواردی که این نام طولانی باشد نیز این زحمت دو چندان میشود.
- ممکن است در مواردی برای مثال در صورت وجود یک SELF JOIN، مجبور باشید با وهلههای مختلفی از یک جدول واحد کار کنید.
همان طور که اشاره کردیم یک ALIAS میتواند هر چیزی باشد. برای مثال، اگر جدولی به نام INDIVIDUAL داشته باشید، میتوانید ALIAS آن را به صورت i تعیین کنید. برای جدول دیگری که INDIVIDUALPRODUCTPURCHASE نام دارد، میتوانید یک ALIAS به صورت ipp نامگذاری کنید.
ساختار ALIAS
SELECT * FROM TABLE_NAME AS ALIAS_NAME;
مثال
SELECT O.JOBTITLE FROM INDIVIDUAL AS I, OCCUPATION AS O WHERE I.FIRSTNAME = 'HOMER' ORDER BY O.JOBTITLE;
بدین ترتیب این نوشته با موضوع معرفی برخی از عملگرهای SQL نیز به پایان رسید. شما میتوانید هر زمان از بخش نظرات در ادامه، برای برقراری ارتباط در خصوص موضوعات این نوشته، ارائه دیدگاهها و پیشنهادهای خود استفاده کنید.
اگر این نوشته مورد توجه شما قرار گرفته است، ممکن است به موارد زیر نیز علاقهمند باشید:
- معرفی زبان SQL — راهنمای جامع
- اصول پایگاه داده و SQL — همه آن چه یک هکر باید بداند
- مجموعه آموزش های پایگاه داده و سیستم های مدیریت اطلاعات
- آموزش آشنایی با LINQ to SQL در C#
- اتصال رشتهها در SQL و روشهای استفاده هوشمند از آن
- تزریق SQL پیشرفته — انگشتنگاری پایگاه داده و شناسایی عمومی برای اجرای حملهای مؤثرتر
- مجموعه آموزشهای برنامهنویسی
==