عملگر IN در SQL به ما این امکان را می‌دهد که چند مقدار را در یک شرط WHERE مشخص کنیم. این عملگر در واقع یک روش کوتاه برای نوشتن چندین شرط OR است.


✅ مثال: نمایش مشتریان از کشورهای خاص

فرض کنید می‌خواهیم تمام مشتریانی را که در آلمان (Germany)، فرانسه (France) یا بریتانیا (UK) هستند، نمایش دهیم. به جای نوشتن چندین OR، می‌توانیم از IN استفاده کنیم:

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

🔹 چرا از IN استفاده کنیم؟
✅ کد خواناتر و کوتاه‌تر می‌شود.
✅ عملکرد بهتری نسبت به چندین OR دارد.


📌 ساختار کلی IN

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

💡 نکته: می‌توان هر تعداد مقداری که نیاز داریم درون پرانتز قرار دهیم.


📊 جدول نمونه (Customers)

جدول زیر شامل اطلاعات مشتریان است که در مثال‌ها از آن استفاده شده است:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

استفاده از NOT IN

اگر بخواهیم مشتریانی که در این لیست نیستند را نمایش دهیم، می‌توانیم از NOT IN استفاده کنیم.

🚀 مثال: نمایش مشتریانی که از آلمان، فرانسه یا بریتانیا نیستند

SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

نتیجه: مشتریانی که کشور آن‌ها Germany، France یا UK نیست، نمایش داده می‌شوند.


🔍 استفاده از IN با Subquery (زیرپرس‌وجو)

گاهی اوقات به جای مقدارهای مشخص، می‌توانیم از یک Subquery برای انتخاب مقدارها استفاده کنیم.

🏷 مثال: نمایش مشتریانی که حداقل یک سفارش ثبت کرده‌اند

SELECT * FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders);

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


استفاده از NOT IN با Subquery

اگر بخواهیم مشتریانی را نمایش دهیم که هیچ سفارشی ثبت نکرده‌اند، می‌توانیم از NOT IN استفاده کنیم.

📌 مثال: نمایش مشتریانی که هیچ سفارشی ندارند

SELECT * FROM Customers
WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);

عملکرد: این کوئری لیست مشتریانی را برمی‌گرداند که در جدول Orders سفارشی ثبت نکرده‌اند.


🎯 جمع‌بندی

IN برای انتخاب چند مقدار خاص استفاده می‌شود.
NOT IN مقادیر مشخص‌شده را فیلتر کرده و حذف می‌کند.
IN همراه با Subquery برای انتخاب داده‌های مرتبط بین دو جدول به کار می‌رود.
NOT IN همراه با Subquery برای پیدا کردن داده‌هایی که در جدول دیگر وجود ندارند، کاربرد دارد.

💡 تمرین:
یک کوئری بنویسید که تمام مشتریانی را نمایش دهد که در کشورهای “Brazil” یا “Mexico” هستند. 🤔


📌 نکته پایانی

🚀 استفاده از IN و NOT IN باعث می‌شود کوئری‌های شما خواناتر و بهینه‌تر شوند. این دستورات به‌خصوص در جداولی با داده‌های زیاد بسیار مفید هستند.