SQL - کار با WHERE در دیتابیس
در این مقاله میخوایم در باره WHERE حرف بزنیم و اینکه چطوری میشه اطلاعات برگشتی از SELECT رو باهاش فیلتر کنیم تا نتیجه مطلوبمون رو نشون بده.
مقدمه ای بر WHERE
دستور SELECT تمامی ردیف های جدول رو بهمون نشون میده. حالا اگه ما بخوایم فقط ردیف هایی با شرایط خاص بهمون نشون داده بشه، باید از WHERE استفاده کنیم. ( مثلا تمام عکس های مربوط به یوزر خاص! ) به همین راحتی.
نحوه استفاده از WHERE به شکل زیر است:
SELECT select_list
FROM table_name
WHERE condition
ORDER BY sort_expression
همونطور که میبینین، WHERE سمت راست FROM توی دستور SELECT قرار میگیره و از شرط ها برای فیلتر کردن ردیف ها استفاده میکنه. ردیف هایی که از SELECT برامون میان. شرط ها میتونن TRUE یا FALSE یا UNKNOWN باشن. همچنین میتونن شامل یک شرط و یا ترکیبی از شروطی باشن که با AND یا OR با هم ترکیب شدن.
پس به شکل کلی، Query فقط ردیف هایی رو بر میگردونه که توی شرط صادق باشن.
اگه از Column Alias توی SELECT استفاده میکنین، اجازه استفاده از اونهارو توی WHERE ندارین.
همچنین بجز SELECT ، میتونیم از WHERE توی UPDATE و DELETE هم استفاده کنیم تا ردیف های خاصی رو ویرایش و یا حذف کنیم.
توی WHERE از عملگرهای منطقی و مقایسه ای به شکل زیر استفاده میشه:
| عملگر | توضیح |
|---|---|
| = | برابری |
| > | بزرگتر از |
| < | کوچکتر از |
| >= | بزرگتر و یا مساوی |
| <= | کوچکتر و یا مساوی |
| <> or != | عدم تساوی |
| AND | ترکیب شروط |
| OR | جمع شروط |
| IN | مقدار True بر میگرداند وقتی اگر مقدار در لیست وجود داشته باشد |
| BETWEEN | اگر مقداری بین رنجی از مقادیر باشد ، True را برمی گرداند |
| LIKE | وقتی از پترن مورد نظر تبعیت کند، True برمی گرداند |
| IS NULL | وقتی مقدار NULL باشد، True بر می گرداند |
| NOT | مقدار عملگرهای بالا رو برعکس میکند |
مثال هایی از WHERE
بیاین با هم چنتا مثال از WHERE ببینیم تا بهتر درکش کنیم:
فرض کنین ما یک جدول به اسم customer داریم با یک سری اطلاعات پیشفرض توش که ساختار زیر رو داره:

1) استفاده از WHERE و شرط تساوی ( = )
در مثال زیر، از WHERE برای نمایش تمامی کاربرانی که اسم آنها Jamie هست استفاده شده:
SELECT
last_name,
first_name
FROM
customer
WHERE
first_name = 'Jamie';
و در نتیجه :

2) استفاده از AND در WHERE برای ترکیب شروط
توی مثال زیر، دنبال کاربرانی میگردیم که اسمشون Jamie و همچنین فامیلیشون Rice باشه. واسه این کار، از AND استفاده کردیم. در واقع ما میخوایم هر دو شرط همزمان صادق باشه.
SELECT
last_name,
first_name
FROM
customer
WHERE
first_name = 'Jamie' AND
last_name = 'Rice';
و در نتیجه:

3) استفاده از OR در WHERE برای ترکیب شروط
توی مثال زیر، دنبال کاربرانی میگردیم که اسمشون Adam باشه و یا فامیلیشون Rodriguez باشه. واسه این کار، از OR استفاده کردیم. در واقع ما میخوایم یا اسمشون اونی که ما میخوایم باشه و یا فامیلیشون اونی که میخوایم باشه.
SELECT
first_name,
last_name
FROM
customer
WHERE
last_name = 'Rodriguez' OR
first_name = 'Adam';
و در نتیجه:

4) استفاده از IN در WHERE
اگه دنبال پیدا کردن یک چیزی، توی لیست از موارد هستیم، از IN استفاده میکنیم. مثال زیر کاربرایی رو بهمون بر میگردونه که اسمشون
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name IN ('Ann','Anne','Annie');
و در نتیجه:

5) استفاده از LIKE در WHERE
وقتی بدنبال پیدا کردن یک پترن خاص هستیم، از LIKE استفاده میکنیم. دستور زیر تمامی افرادی که اسمشون با Ann شروع شده رو بهمون نشون میده. اهمیتی نداره در ادامه چیه اسمشون فقط کافیه با Ann شروع شده باشه.
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Ann%'
و در نتیجه:
توی LIKE از % استفاده میکنیم تا پترنمون رو تعیین کنیم. در واقع به شکل ساده بخوام بگم، وقتی % میزاریم یعنی دیگه مهم نیست. مثلا %R% یعنی تمام عباراتی که حداقل یک R داشته باشند و مهم نیست که اول باشه، وسط و یا آخر. پس % هرجا باشه یعنی اونجاش دیگه مهم نیست.
6) استفاده از BETWEEN در WHERE
توی مثال زیر، تمامی افرادی که اسمشون با A شروع میشه و همچنین طول اسمشون بین 3 و 5 حرف هست رو از دیتابیس می خونیم. در واقع BETWEEN بهمون کمک میکنه که یک رنج خاصی رو انتخاب کنیم و وقتی True خواهد بود که بین رنج مورد نظرمون باشه. به مثال زیر توجه کنین:
SELECT
first_name,
LENGTH(first_name) name_length
FROM
customer
WHERE
first_name LIKE 'A%' AND
LENGTH(first_name) BETWEEN 3 AND 5
ORDER BY
name_length;
و در نتیجه:
توی این مثال ما از تابع LENGTH برای گرفتن طول اسم هر فرد استفاده کردیم.
7) استفاده از <> در WHERE
وقتی میخوایم عدم تساوی رو چک کنیم، از <> استفاده میکنیم.
مثال زیر تمامی افرادی که اسمشون با Bra شروع شده باشه ولی فامیلیشون Motley نباشه رو نشون می ده:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Bra%' AND
last_name <> 'Motley';
و در نتیجه:

میتونیم به جای <> از != استفاده کنیم و هر دو یک معنی رو میده.
توی این مقاله در باره استفاده از WHERE توی SELECT حرف زدیم. نظرتون رو برام کامنت بذارین :)