📚 فصل ۱۸ — عملگرهای منطقی (AND, OR, NOT) در SQL Server

""

1️⃣ مقدمه — چرا عملگرهای منطقی مهم‌اند؟

وقتی با شرط‌های پیچیده در SQL کار می‌کنیم، معمولاً لازم داریم چندین شرط را با هم ترکیب کنیم.
عملگرهای منطقی دقیقا این کار را انجام می‌دهند:

  • AND → همه شرط‌ها باید درست باشند.
  • OR → حداقل یکی از شرط‌ها باید درست باشد.
  • NOT → شرط را برعکس می‌کند.

📌 این عملگرها در سه دستور زیر بیشترین کاربرد را دارند:

  • SELECT → فیلتر کردن داده‌ها
  • UPDATE → آپدیت رکوردهای خاص
  • DELETE → حذف رکوردها

2️⃣ ساختار کلی استفاده

SELECT ستون‌ها
FROM جدول
WHERE شرط_۱ [AND | OR] شرط_۲ [AND | OR] ...;

3️⃣ عملگر AND — همه شرط‌ها باید برقرار باشند

وقتی از AND استفاده می‌کنیم، رکورد فقط زمانی می‌آید که تمام شرط‌ها درست باشند.

مثال — مشتریان تهران و فعال

SELECT *
FROM Customers
WHERE City = N'تهران' AND IsActive = 1;

📌 فقط مشتریان تهرانی که ستون IsActive آنها برابر ۱ است.


4️⃣ عملگر OR — کافی است یکی برقرار باشد

وقتی از OR استفاده می‌کنیم، رکورد اگر حتی یکی از شرط‌ها درست باشد نمایش داده می‌شود.

مثال — مشتریان تهران یا مشهد

SELECT *
FROM Customers
WHERE City = N'تهران' OR City = N'مشهد';

📌 هرکس در تهران یا مشهد باشد می‌آید.


5️⃣ عملگر NOT — معکوس کردن شرط

اگر شرط درست باشد، با NOT نادرست می‌شود، و برعکس.

مثال — همه مشتریانی که شهرشان مشهد نیست

SELECT *
FROM Customers
WHERE NOT City = N'مشهد';

6️⃣ ترکیب عملگرها و اهمیت پرانتز

در SQL، AND اول اجرا می‌شود، بعد OR.
برای کنترل اولویت، از پرانتز استفاده کنید.

مثال — بدون پرانتز

SELECT *
FROM Customers
WHERE City = N'تهران' OR City = N'مشهد' AND IsActive = 1;

📌 اینجا اول AND اجرا می‌شود، یعنی:

  • مشتریان مشهدی که فعال هستند
  • یا مشتریان تهران (بدون توجه به فعال بودن)

مثال — با پرانتز

SELECT *
FROM Customers
WHERE (City = N'تهران' OR City = N'مشهد') AND IsActive = 1;

📌 اینجا نتیجه متفاوت است: فقط مشتریان تهرانی یا مشهدی که فعال باشند.


7️⃣ مثال عملی — فیلتر چندگانه

فرض کنید می‌خواهیم محصولاتی را ببینیم که:

  • قیمت بیش از ۵۰ هزار دارند، یا
  • موجودی آن‌ها بیش از ۱۰۰ است، ولی
  • دسته‌بندی آن‌ها برابر ۳ نباشد.
SELECT *
FROM Products
WHERE (Price > 50000 OR Stock > 100) AND NOT CategoryID = 3;

8️⃣ AND، OR و NOT با توابع

می‌توان از توابع داخلی هم داخل شرط استفاده کرد.

مثال — کاربرانی که سال تولدشان بعد از ۱۳۷۰ است و فعال‌اند:

SELECT *
FROM Users
WHERE YEAR(BirthDate) > 1991 AND IsActive = 1;

9️⃣ AND، OR با BETWEEN، IN و LIKE

مثال ۱ — ترکیب AND و BETWEEN

SELECT *
FROM Orders
WHERE Status = N'پرداخت شده' AND OrderDate BETWEEN '2025-01-01' AND '2025-06-30';

مثال ۲ — ترکیب OR و IN

SELECT *
FROM Customers
WHERE City IN (N'تهران', N'مشهد') OR Country = N'ایران';

مثال ۳ — ترکیب NOT و LIKE

SELECT *
FROM Customers
WHERE NOT FullName LIKE N'%آزمایشی%';

🔟 اشتباهات رایج

  1. فراموش کردن پرانتز در ترکیب AND و OR در شرط‌های پیچیده.
  2. استفاده نادرست از NOT با چند شرط:
   -- اشتباه
   WHERE NOT City = N'مشهد' AND City = N'تهران';
   -- درست (اینجا NOT روی کل پرانتز اعمال شده)
   WHERE NOT (City = N'مشهد' AND City = N'تهران');
  1. شرط‌های زیاد که باعث کندی کوئری می‌شوند.
  2. نداشتن ایندکس روی ستون‌های پرتکرار در WHERE.

1️⃣1️⃣ سناریوهای واقعی پروژه‌ای

سناریو ۱ — مشتریان VIP

نمایش افرادی که یا بیش از ۱۰ خرید داشته‌اند یا خریدشان بالای ۵۰ میلیون بوده و وضعیت‌شان فعال است:

SELECT *
FROM Customers
WHERE (TotalOrders > 10 OR TotalAmount > 50000000) AND IsActive = 1;

سناریو ۲ — حذف سفارش‌های تستی

DELETE FROM Orders
WHERE (CustomerID IN (999, 1000) OR OrderNotes LIKE N'%تست%')
  AND OrderDate < '2025-01-01';

سناریو ۳ — به‌روزرسانی موجودی محصولات

UPDATE Products
SET Stock = Stock + 50
WHERE CategoryID = 4 AND (Stock < 10 OR LastRestockDate < '2025-06-01');

1️⃣2️⃣ تمرین‌های عملی

  1. همه کارمندانی که در بخش IT یا HR کار می‌کنند و سابقه بیش از ۵ سال دارند.
  2. همه محصولاتی که یا نامشان شامل “کتاب” است یا قیمتشان بین ۱۰۰ و ۲۰۰ هزار تومان است.
  3. همه سفارش‌هایی که پرداخت نشده‌اند اما وضعیتشان “ارسال شده” نیست.
  4. حذف کاربران غیرفعالی که بیش از یک سال است وارد سیستم نشده‌اند یا هیچ سفارش ثبت نکرده‌اند.
  5. آپدیت وضعیت سفارش‌هایی که یا متعلق به مشتریان جدید است یا تاریخشان کمتر از یک هفته است.

1️⃣3️⃣ جمع‌بندی

در این فصل یاد گرفتید:

  • AND → همه شروط باید درست باشند
  • OR → کافیست یکی درست باشد
  • NOT → برعکس کردن شرط
  • ترتیب اجرای شرط‌ها و اهمیت پرانتز
  • ترکیب این عملگرها با LIKE، IN، BETWEEN و توابع
  • سناریوهای واقعی و اشتباهات رایج
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *