WHERE و شرطگذاری
WHERE و شرطگذاری
بخشی از آموزش جامع SQL Server
محتوای درس WHERE و شرطگذاری
T-SQL | Predicate، NULL و SARGability
WHERE Rowهای ورودی Result Set را Filter میکند. Predicate درست علاوه بر صحت منطقی، روی امکان استفاده از Index و کیفیت Execution Plan اثر دارد.
متن این فصل با رویکرد مرجع فنی و قابل استفاده در پروژه واقعی تنظیم شده است؛ مثالها در امتداد مدل StoreDb نوشته شدهاند و اصطلاحات اصلی SQL Server و T-SQL بهصورت یکدست بهکار میروند.
1. مفاهیم و قراردادهای اصلی
WHERE Rowهای ورودی Result Set را Filter میکند. Predicate درست علاوه بر صحت منطقی، روی امکان استفاده از Index و کیفیت Execution Plan اثر دارد.
در طراحی پایگاه داده، Syntax تنها بخشی از مسئله است. نوع داده، Constraint، الگوی دسترسی، Transaction و هزینه اجرای Query باید همزمان با نیاز Domain در نظر گرفته شوند.
| مفهوم | کارکرد |
|---|---|
| Predicate | شرط Filter |
| AND/OR | ترکیب شرطها |
| IN | مجموعه مقادیر |
| BETWEEN | بازه شامل |
| LIKE | الگوی متن |
| IS NULL | بررسی NULL |
2. ساختار و Syntax پایه
شرطها بر اساس Data Type واقعی نوشته میشوند. برای Range تاریخی، مرز پایین شامل و مرز بالا غیرشامل الگوی قابل اتکاتری نسبت به تبدیل Column با Function است.
SELECT Id, Name, Price, Stock
FROM dbo.Products
WHERE IsActive = 1
AND Stock > 0
AND Price >= 10000000;3. سناریوی StoreDb
برای سفارشهای اوت 2026، Range تاریخ با >= و < نوشته میشود تا زمانهای داخل روز آخر از دست نروند و Index روی OrderDate قابل استفاده باقی بماند.
نمونههای این فصل بر مدل فروشگاهی StoreDb بنا شدهاند تا ارتباط مفاهیم میان فصلها حفظ شود و Queryها در یک Context یکپارچه قابل بررسی باشند.
SELECT Id, CustomerId, OrderDate, TotalAmount
FROM dbo.Orders
WHERE OrderDate >= '2026-08-01'
AND OrderDate < '2026-09-01';4. اصول طراحی و Performance
طراحی پایدار باید هم صحت داده و هم هزینه اجرای عملیات را پوشش دهد. انتخاب سادهتر زمانی ترجیح دارد که Contract داده را روشنتر و رفتار Optimizer را قابل پیشبینیتر نگه دارد.
- شرطهای پرتکرار با Index Design هماهنگ شوند.
- Parameter Type با Column Type یکسان باشد.
- NULL با IS NULL/IS NOT NULL بررسی شود.
- برای ورودی Application Query پارامتری استفاده شود.
5. خطاهای رایج و نکات ایمنی
دستورهای SQL میتوانند مستقیماً داده و ساختار را تغییر دهند؛ بنابراین بازبینی Context، تعداد Rowهای هدف و اثر Transaction قبل از اجرای تغییرات اهمیت عملی دارد.
- WHERE YEAR(OrderDate)=2026 روی Column Index شده.
- استفاده از = NULL.
- ORهای پیچیده بدون بررسی Plan.
- Concatenation ورودی در Dynamic SQL.
6. چکلیست نهایی فصل
- AND/OR و precedence بهدرستی کنترل شدهاند.
- NULL رفتار صحیح دارد.
- Date Range نیمهباز استفاده میشود.
- Predicateهای مهم SARGable هستند.
7. جمعبندی
خروجی این فصل باید به تصمیمی قابل اتکا در طراحی یا Query منجر شود؛ صحت داده، قابلیت نگهداری و رفتار Performance سه معیار ثابت برای ارزیابی نمونهها هستند.