فصل 7 از 24 درس 1 از 1

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 سه معیار ثابت برای ارزیابی نمونه‌ها هستند.