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 حرف زدیم. نظرتون رو برام کامنت بذارین :)