فیلتر کردن با 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.

تمرین‌های این درس را حل کن (رایگان)