خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
12. آموزش SQL Server به زبان ساده. محدود کردن داده ها با دستور WHERE

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

اول بیاییم با یک مثال کاربردی شروع کنیم. وارد محیط اس کیو ال سرور شوید و دیتابیس PhoneBookDB را انتخاب کنید. سپس یک Query جدید را ایجاد کنید. حالا دستور زیر را مشابه تصویر زیر وارد کنید و آن را اجرا نمایید.
SELECT * FROM PhoneBook
WHERE RowID = 1

همانطور که می بینید، علیرغم اینکه در جدول ما رکوردهای دیگری هم بودند اما فقط یکی از آنها نمایش داده شد. دستور WHERE به ما کمک کرد تا داده های خروجی را محدود کنیم. به شرط (RowID = 1) که بعد از دستور WHERE آمده است دقت کنید. معنای این دستور در حالت کلی این می شود :
کلیه فیلدهای جدول PhoneBook را به من نشان بده و فقط ردیفهایی را به من نشان بده که مقدار فیلد RowID آنها برابر 1 باشد. طبیعتا چون فقط یک رکورد از رکوردهای جدول ما دارای چنین شرایطی می باشد، اس کیو ال سرور هم فقط همان یک رکورد را به ما نشان داد.
حالا دستور را به شکل زیر تغییر بدهید و آن را اجرا کنید:
SELECT * FROM PhoneBook
WHERE RowID > 1

اینبار ما شرط را به این شکل نوشتیم که رکوردهایی را به من نشان بده که مقدار فیلد RowID آنها بزرگتر از 1 باشد. اس کیو ال سرور هم بعد از پردازش و اجرای دستور ما دو رکورد را پیدا کرد و آنها را به ما نشان داد.
حالا شرط به شکل زیر تغییر بدهید و مجددا دستور را اجرا کنید :
SELECT * FROM PhoneBook
WHERE RowID < 1

اینبار ما از اس کیو ال سرور خواستیم تا رکوردهایی را که مقدار فیلد RowID آنها کوچکتر از 1 است را به ما نشان بدهد. اس کیو ال سرور هم دستور ما را پردازش کرد و متوجه شد که هیچ رکوردی که فیلد RowID آن کوچکتر از 1 باشد وجود ندارد و طبیعتا در خروجی دستور هیچ اطلاعاتی را به ما نشان نداد.
شرطهایی که در بالا نوشتیم، در مورد فیلدهای عددی کاربرد داشتند. اما اگر فیلد ما متنی باشد چطور؟ آیا بازهم می توانیم از دستورات بالا استفاده کنیم؟
پاسخ بله است. اما نحوه نوشتن آن اندکی متفاوت است. در هنگام شرط گذاشتن روی فیلدهای متنی ما باید مقدار مورد جستجو را بین دو علامت تک کوتیشن (') قرار دهیم. به مثال زیر توجه کنید و آن را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName = N'محمد'

در این دستور ما از اس کیو ال سرور خواستیم تا رکوردهایی را به ما نشان بدهد که مقدار فیلد FirstName آن برابر "محمد" باشد. دقت کنید که چگونه کلمه "محمد" را داخل یک جفت تک کوتیشن (') قرار داده ایم. همینطور به حرف N که قبل از آن قرار داده ایم نیز دقت کنید.
وقتی بر روی فیلدهایی که نوع داده متنی دارند، شرط قرار می دهیم بهتر است تا بجای علامت = از شرط LIKE استفاده کنیم. شرط LIKE مخصوص داده های متنی می باشد و امکاناتی که در اختیار ما قرار می دهد بسیار وسیع تر است. برای درک بهتر دستور LIKE مثال زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'محمد'

اگر این دستور را بخواهیم به فارسی ساده بگوییم اینطور می شود : رکوردهایی را به من نشان بده که مقدار فیلد "نام" آن دقیقا مشابه کلمه "محمد" باشد. دقت کنید که نگفتم برابر و گفتم مشابه. حالا چرا از کلمه مشابه استفاده کردم، ادامه آموزش به شما این موضوع را می آموزاند.
دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'م%'

به زبان ساده این دستور می گوید: رکوردهایی را به من نشان بدهد که مقدار فیلد نام آن از ابتدای آن مشابه عبارت "م" باشد. یعنی با عبارت "م" شروع شود و ادامه اش هر چی بود مهم نباشد. کاراکتر "%" (درصد) در اینجا نقش بسیار مهمی را بازی می کند، قرار دادن درصد بعد از کاراکتر "م" یعنی، بقیه عبارت هر چه باشد مهم نیست. همانطور که در خروجی دستور می بینید، اس کیو ال سرور دو رکورد "محمد" و "محمود" را برای ما بازیابی کرده است و دلیلش هم اینست که هر دوی آنها با "م" شروع می شوند.
حالا دستور را اندکی تغییر می دهیم. دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'مح%'

در اینجا از اس کیو ال سرور خواستیم تا کلیه رکوردهایی که فیلد "نام" آنها با عبارت "مح" شروع می شود را به ما نشان بدهد و طبیعتا هر دو نام "محمد" و "محمود" با عبارت "مح" شروع می شوند.
حالا دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'%د'

اینبار از اس کیو ال سرور خواستیم تا رکوردهایی را به ما نشان بدهد که در فیلد "نام" آنها حرف "د" بکار رفته باشد. دقت کنید که کاراکتر درصد (%) را اینبار در ابتدای قسمت شرط قرار داده ایم.
حالا دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'%حم%'

اینبار از اس کیو ال سرور خواستیم تا رکوردهایی را به ما نشان بدهد که در یک قسمتی از فیلد "نام" آن (تفاوتی نمیکند در کدام قسمتش، ابتدا، وسط و یا انتها) عبارت "حم" بکار رفته باشد. دقت کنید که در این مثال ما از دو کاراکتر درصد (%) در که یکی در ابتدای شرط و دیگری در انتهای شرط قرار داده شده است، استفاده کردیم.
آموزش قبلی : 11. آموزش SQL Server به زبان ساده. بازیابی اطلاعات جداول با استفاده از دستور SELECT
آموزش بعدی : 13. آموزش SQL Server به زبان ساده. استفاده از عملگرهای AND و OR

نحوه استفاده از دستور WHERE
اول بیاییم با یک مثال کاربردی شروع کنیم. وارد محیط اس کیو ال سرور شوید و دیتابیس PhoneBookDB را انتخاب کنید. سپس یک Query جدید را ایجاد کنید. حالا دستور زیر را مشابه تصویر زیر وارد کنید و آن را اجرا نمایید.
SELECT * FROM PhoneBook
WHERE RowID = 1

همانطور که می بینید، علیرغم اینکه در جدول ما رکوردهای دیگری هم بودند اما فقط یکی از آنها نمایش داده شد. دستور WHERE به ما کمک کرد تا داده های خروجی را محدود کنیم. به شرط (RowID = 1) که بعد از دستور WHERE آمده است دقت کنید. معنای این دستور در حالت کلی این می شود :
کلیه فیلدهای جدول PhoneBook را به من نشان بده و فقط ردیفهایی را به من نشان بده که مقدار فیلد RowID آنها برابر 1 باشد. طبیعتا چون فقط یک رکورد از رکوردهای جدول ما دارای چنین شرایطی می باشد، اس کیو ال سرور هم فقط همان یک رکورد را به ما نشان داد.
حالا دستور را به شکل زیر تغییر بدهید و آن را اجرا کنید:
SELECT * FROM PhoneBook
WHERE RowID > 1

اینبار ما شرط را به این شکل نوشتیم که رکوردهایی را به من نشان بده که مقدار فیلد RowID آنها بزرگتر از 1 باشد. اس کیو ال سرور هم بعد از پردازش و اجرای دستور ما دو رکورد را پیدا کرد و آنها را به ما نشان داد.
حالا شرط به شکل زیر تغییر بدهید و مجددا دستور را اجرا کنید :
SELECT * FROM PhoneBook
WHERE RowID < 1

اینبار ما از اس کیو ال سرور خواستیم تا رکوردهایی را که مقدار فیلد RowID آنها کوچکتر از 1 است را به ما نشان بدهد. اس کیو ال سرور هم دستور ما را پردازش کرد و متوجه شد که هیچ رکوردی که فیلد RowID آن کوچکتر از 1 باشد وجود ندارد و طبیعتا در خروجی دستور هیچ اطلاعاتی را به ما نشان نداد.
نحوه شرط گذاشتن روی مقادیر متنی در اس کیو ال سرور
شرطهایی که در بالا نوشتیم، در مورد فیلدهای عددی کاربرد داشتند. اما اگر فیلد ما متنی باشد چطور؟ آیا بازهم می توانیم از دستورات بالا استفاده کنیم؟
پاسخ بله است. اما نحوه نوشتن آن اندکی متفاوت است. در هنگام شرط گذاشتن روی فیلدهای متنی ما باید مقدار مورد جستجو را بین دو علامت تک کوتیشن (') قرار دهیم. به مثال زیر توجه کنید و آن را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName = N'محمد'

در این دستور ما از اس کیو ال سرور خواستیم تا رکوردهایی را به ما نشان بدهد که مقدار فیلد FirstName آن برابر "محمد" باشد. دقت کنید که چگونه کلمه "محمد" را داخل یک جفت تک کوتیشن (') قرار داده ایم. همینطور به حرف N که قبل از آن قرار داده ایم نیز دقت کنید.
نکته مهم : حرف N که در اینجا از آن استفاده کرده ایم به این دلیل است که نوع داده فیلد ما nvarchar است و از نوع یونیکد می باشد. در مورد یونیکد در آموزشهای قبلی کمی توضیح دادیم. بطور کل زمانی که می خواهیم حروف غیر انگلیسی مانند فارسی، عربی، چینی، و ... را در فیلدی ذخیره کنیم بهتر است تا از یونیکد استفاده کنیم.
استفاده از شرط LIKE به جای شرط = در مقادیر متنی
وقتی بر روی فیلدهایی که نوع داده متنی دارند، شرط قرار می دهیم بهتر است تا بجای علامت = از شرط LIKE استفاده کنیم. شرط LIKE مخصوص داده های متنی می باشد و امکاناتی که در اختیار ما قرار می دهد بسیار وسیع تر است. برای درک بهتر دستور LIKE مثال زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'محمد'

اگر این دستور را بخواهیم به فارسی ساده بگوییم اینطور می شود : رکوردهایی را به من نشان بده که مقدار فیلد "نام" آن دقیقا مشابه کلمه "محمد" باشد. دقت کنید که نگفتم برابر و گفتم مشابه. حالا چرا از کلمه مشابه استفاده کردم، ادامه آموزش به شما این موضوع را می آموزاند.
ترکیب دستور LIKE با کاراکتر % و قدرت مانور بالای آن
دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'م%'

به زبان ساده این دستور می گوید: رکوردهایی را به من نشان بدهد که مقدار فیلد نام آن از ابتدای آن مشابه عبارت "م" باشد. یعنی با عبارت "م" شروع شود و ادامه اش هر چی بود مهم نباشد. کاراکتر "%" (درصد) در اینجا نقش بسیار مهمی را بازی می کند، قرار دادن درصد بعد از کاراکتر "م" یعنی، بقیه عبارت هر چه باشد مهم نیست. همانطور که در خروجی دستور می بینید، اس کیو ال سرور دو رکورد "محمد" و "محمود" را برای ما بازیابی کرده است و دلیلش هم اینست که هر دوی آنها با "م" شروع می شوند.
حالا دستور را اندکی تغییر می دهیم. دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'مح%'

در اینجا از اس کیو ال سرور خواستیم تا کلیه رکوردهایی که فیلد "نام" آنها با عبارت "مح" شروع می شود را به ما نشان بدهد و طبیعتا هر دو نام "محمد" و "محمود" با عبارت "مح" شروع می شوند.
حالا دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'%د'

اینبار از اس کیو ال سرور خواستیم تا رکوردهایی را به ما نشان بدهد که در فیلد "نام" آنها حرف "د" بکار رفته باشد. دقت کنید که کاراکتر درصد (%) را اینبار در ابتدای قسمت شرط قرار داده ایم.
حالا دستور زیر را بنویسید و اجرا کنید :
SELECT * FROM PhoneBook
WHERE FirstName LIKE N'%حم%'

اینبار از اس کیو ال سرور خواستیم تا رکوردهایی را به ما نشان بدهد که در یک قسمتی از فیلد "نام" آن (تفاوتی نمیکند در کدام قسمتش، ابتدا، وسط و یا انتها) عبارت "حم" بکار رفته باشد. دقت کنید که در این مثال ما از دو کاراکتر درصد (%) در که یکی در ابتدای شرط و دیگری در انتهای شرط قرار داده شده است، استفاده کردیم.
آموزش قبلی : 11. آموزش SQL Server به زبان ساده. بازیابی اطلاعات جداول با استفاده از دستور SELECT
آموزش بعدی : 13. آموزش SQL Server به زبان ساده. استفاده از عملگرهای AND و OR
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: