فیلتر کردن با WHERE
با WHERE، عملگرهای مقایسهای، AND/OR، IN، BETWEEN و LIKE ردیفهای مورد نظر را جدا کنی و NULL را درست بفهمی.
14 دقیقه مطالعه · 6 سؤال تمرینی · SQL از صفر: پرسوجو برای تحلیل داده
شرطها در WHERE
معمولاً همهی ردیفها را نمیخواهیم. WHERE فقط ردیفهایی را نگه میدارد که شرطشان درست باشد:
SELECT name, price
FROM products
WHERE category = 'electronics' AND price < 300;
- مقایسه:
=،<>(نابرابر)،<،<=،>،>=. متن بین تکنقلقول'...'میآید. - ترکیب:
AND،OR،NOT. اگر هر دو را بنویسید،ANDزودتر ازORارزیابی میشود؛ برای وضوح پرانتز بگذارید. IN ('a', 'b')یعنی «یکی از اینها»، وBETWEEN 10 AND 100یعنی «از ۱۰ تا ۱۰۰، با خود ۱۰ و ۱۰۰».LIKEالگو میگیرد:%یعنی هر تعداد حرف و_یعنی دقیقاً یک حرف. مثلاًname LIKE 'M%'یعنی با M شروع شود.
NULL: «نامعلوم» برابر با هیچ چیز نیست
NULL یعنی مقدار نامعلوم (نه صفر و نه رشتهی خالی). هر مقایسه با NULL، حتی NULL = NULL، نتیجهاش «درست» نیست؛ نتیجه نامعلوم است و WHERE ردیف نامعلوم را کنار میگذارد.
برای همین:
-- اشتباه: هیچ ردیفی برنمیگردد
SELECT * FROM customers WHERE city = NULL;
-- درست
SELECT * FROM customers WHERE city IS NULL;
نکتهی خطرناکتر: WHERE city <> 'Tehran' مشتریای که city او NULL است را هم حذف میکند، چون NULL <> 'Tehran' نامعلوم است. اگر آنها را هم میخواهید باید صریح بنویسید: city <> 'Tehran' OR city IS NULL.