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

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

با سلام، در این قسمت از سری آموزشی جامع زبان SQL با دستور WHERE در خدمت شما هستیم. همچنین تمریناتی در رابطه با این جلسه و جلسه ی قبل خدمت شما ارائه خواهد شد.

دستور WHERE

از دستور 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 نشان دادن اینکه چندین مقدار برای یک ستون ممکن است

در جلسات بعد در رابطه با تک تک این موارد صحبت خواهیم کرد.

تمرینات

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

سوال اول: ستون هایی را انتخاب کنید که مقدار 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 توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (4 دیدگاه)

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

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

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

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

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

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

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

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

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

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

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

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

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