دستور WHERE در SQL (+تمرینات)

16 بهمن 1400
درسنامه درس 4 از سری آموزش زبان SQL
SQL-Language-where

با سلام، در این مقاله، با کاربرد و نحوه استفاده از دستور WHERE در SQL در خدمت شما هستیم.

کاربرد دستور WHERE در SQL

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

به عبارت دیگر می توان گفت WHERE یک نوع شرط محسوب می شود که داده ها را بر اساس آن فیلتر می کند.

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

SELECT column1, column2, ...
FROM table_name
WHERE condition;

نکته: ما هنوز با دستورات دیگر SQL به غیر از SELECT آشنا نشده ایم، بنابراین از SELECT به عنوان مثال استفاده می کنیم اما شما باید به یاد داشته باشید که WHERE با دستورات دیگری مثل UPDATE و DELETE و غیره نیز استفاده می شود.

قبل از ارائه مثال، قسمتی از پایگاه داده خود را برای شما قرار می دهیم تا به ساختار کلی آن آشنا شوید:

قسمتی از جدول customer ها در پایگاه داده ی Northwind
قسمتی از جدول customer ها در پایگاه داده Northwind

حالا به سراغ مثال می رویم!

کد زیر مشتریانی را انتخاب می کند که از کشور مکزیک باشند:

SELECT * FROM Customers
WHERE Country='Mexico';

برای مشاهده نتیجه کد بالا روی این لینک کلیک کنید.

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

result set ما بعد از دستور SELECT * FROM Customers WHERE Country='Mexico'
result set ما بعد از دستور SELECT * FROM Customers WHERE Country='Mexico'

بنابراین 5 مشتری از مکزیک داریم.

نکته: در نوشتن کدهای SQL نیازی به رفتن به خط بعد ندارید، بنابراین هر دو کد زیر دقیقا یکی هستند:

SELECT * FROM Customers
WHERE Country='Mexico';
SELECT * FROM Customers WHERE Country='Mexico';

ما به جهت واضح تر شدن کدها برای افراد مبتدی از اینتر استفاده می کنیم و به خط جدید می رویم اما روش مرسوم تر در نوشتن کدهای SQL، پشت سر هم نوشتن آن ها در یک خط است (مخصوصا در سورس کد).

فیلدهای عددی و فیلدهای متنی

در زبان SQL اگر بخواهید با فیلدهای متنی کار کنید باید از single quote استفاده کنید (البته در بیشتر سیستم های پایگاه داده می توانید از double quotes نیز استفاده کنید) اما فیلدهای عددی را داخل quotation قرار ندهید. مثال:

SELECT * FROM Customers
WHERE CustomerID=1;

برای مشاهده نتیجه کد بالا روی این لینک کلیک کنید.

مشتری ای که دارای آیدی 1 است به ما داده می شود.

نکته: اگر نمی دانید single quote و double quote چه هستند به تصویر زیر نگاهی بیندازید:

علائم مهم نگارشی در برنامه نویسی
علائم مهم نگارشی در برنامه نویسی
  • اگر در جایی به جای curly braces به braces برخورد کردید، ممکن است منظور نویسنده تمام علامت های {} و () و [] و ... باشد.
  • منظور از Quotation (به شکل تنها)، هر دو علامتِ double quotation و single quotation (یا یکی از آن ها) است.

اپراتورهای دستور WHERE

از آن جا که گفتیم دستور WHERE نوعی شرط است، می دانیم که اپراتورهایی نیز دارد. شما می توانید از اپراتورهای زیر در دستور WHERE استفاده کنید:

اپراتور توضیحات
= مساوی است با
<> مساوی نیست با (در برخی نسخه ها به صورت =! است)
< بزرگتر است از (برنامه نویسی از چپ به راست است)
> کوچکتر است از
=< بزرگتر مساوی است با
=> کوچکتر مساوی است با
BETWEEN بین یک محدوده خاص
LIKE برای جست و جوی الگویی خاص
IN نشان دادن اینکه چندین مقدار برای یک ستون ممکن است

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

تمرینات

از آن جایی که برنامه نویسی بدون تمرین تقریبا به هیچ دردی نمی خورد، درباره مبحث دستور WHERE در SQL تمرینات مختلفی به شما خواهیم داد. شما باید سعی کنید که شخصا به آن ها پاسخ دهید و مستقیما به سراغ جواب ها نروید.

سوال اول: ستون هایی را انتخاب کنید که مقدار City در آن ها مساوی برلین یعنی "Berlin" باشد.

سوال اول تمرین های SQL

پاسخ:

برای پاسخ دادن به این سوال باید ابتدا نگاهی به جدول customers داشته باشید. پس از بررسی این جدول در میابید که یکی از ستون های آن city نام دارد و مخصوص نگه داری نام شهر ها است. با این اوصاف کار ما بسیار ساده می شود؛ تنها کافی است ابتدا تمام ستون های customers را انتخاب کنید (خط اول و استفاده از علامت ستاره) و سپس از شرط WHERE استفاده کنید و بگویید ستون city را برابر رشته Berlin قرار بده.

SELECT * FROM Customers
WHERE City = 'Berlin';

نکته: توجه داشته باشید که کلمه Berlin باید داخل quotation باشد. همانطور که گفتیم در اکثر سیستم های SQL تفاوتی بین single quotation و double quotation وجود ندارد اما از آن جایی که برخی از این سیستم ها double quotation را قبول نمی کنند بهتر است ریسک نکنید و همیشه و در همه جا از single quotation استفاده کنید.


سوال دوم: ستون هایی را انتخاب کنید که مقدار City در آن ها مساوی برلین یعنی "Berlin" نباشد.

تمرین دستور SELECT در SQL

پاسخ:

اگر با کلمه NOT آشنایی داشته باشید می دانید که این کلمه، شرطِ WHERE را برعکس می کند. بنابراین جواب بسیار ساده خواهد بود.

SELECT * FROM Customers
WHERE NOT City = 'Berlin';

اگر با کلیدواژه NOT آشنا نیستید نگران نباشید، در جلسات بعدی آن را توضیح خواهیم داد و در مثال های عملی از آن استفاده خواهیم کرد. دلیل اینکه آن را اینجا آوردم این است که اگر اطلاعات به صورت ناگهانی و بدون مقدمه به شما برسند، بهتر در ذهنتان می مانند! بدین صورت در جلسات بعد NOT را فراموش نخواهید کرد.

سوال سوم: ستون هایی را انتخاب کنید که مقدار CustomerID در آن ها مساوی عدد 32 باشد.

تمرین SQL با WHERE

پاسخ:

جواب دادن این سوال نیز بسیار ساده است؛ دقیقا مانند موارد قبل عمل می کنیم با این تفاوت که شرطِ WHERE را به صورت CustomerID = 32 تعریف می کنیم.

SELECT * FROM Customers
WHERE CustomerID = 32;

قطعا خروجی این کد یک ردیف است (اطلاعات فردی که دارای آیدی 32 است).

نکته: توضیحات مربوط به این آیدی ها، نحوه تعیین آیدی ها و مباحث دیگر را در جلسات آینده (در قسمت پائین این مقاله می توانید درس های جلسات بعد و قبل را ببینید) توضیح خواهیم داد.

خلاصه مقاله

این مقاله از دو قسمت اصلی تشکیل شده است: قسمت اول که آشنایی با ساختار کلی و مثال های دستور WHERE بود و قسمت دوم که شامل سه تمرین مختلف بود. در درس بعد به سراغ اپراتورهای AND و OR و NOT خواهیم رفت و مفصلا در موردشان صحبت خواهیم کرد. در پائین این مقاله می توانید به درس های بعدی دسترسی داشته باشید. امیدوارم از این قسمت لذت برده باشید. 

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (8 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

parnia
29 آبان 1401
سلام ممنون از مطالب خوبتون ، چقدر خوب و با جزئیات توضیح دادین

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

نجمه محمدی
03 مرداد 1401
ممنون از توضیحات رسا و بیان قابل درک شما، با تدریس شما خیلی راحت میشه مطالب رو یاد گرفت. و اینکه خیلی خوب درس ها رو تفکیک کردید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
11 مرداد 1401
خوشحالیم که از این مطلب استفاده کردید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

میترا
19 دی 1400
واقعا بیان رسا و ساده ای دارید و به بهتریت شکل کادر بندی شده دستورانت و آموزشها و شلوغ نکردن صفحه رو واقعا احسنت بر شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
16 بهمن 1400
سلام. سپاس از توجهتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حامد حاجوی
17 آبان 1400
سلام علیکم توووی سوال دوم آیا بهتر است از عملگر نابرابری استفاده کنیم یا از کلاز NOT?? منظورم اینه که کدامیک برای استفاده خوبه و یا اصن فرقی ندارن؟ سپاس فراوان

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمدرضا
27 دی 1400
سلام هیچ تفاوتی ندارن.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Amir
15 شهریور 1400
بسیارعالی و مفید ممنونم ازتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
16 بهمن 1400
تشکر از شما که همراه ما هستید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

galaxy
04 آبان 1399
ممنون اقای زوارمی من با اموزشهای شما به خوبی ارتباط برقرار میکنم و قابل فهمن واسم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مرضیه
26 تیر 1398
واقعا ممنونم عالی کارتون اجرتون با خدا

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
27 تیر 1398
سلام دوست عزیز از شما ممنونم. خوشحالم که مورد پسند شما است.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمد قاسمی
29 فروردین 1398
با سلام خدمت اساتید بزرگوار واقعآ دست مریزاد آموزشهایتان عالی عالی است

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
31 فروردین 1398
سلام دوست عزیز واقعا خوشحالم که آموزش ها تونسته به شما کمک کنه!

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.