عملگر تعلق: IN و NOT IN در SQL

در SQL، از عملگرهای IN و NOT IN برای فیلتر کردن نتایج بر اساس یک لیست از مقادیر استفاده می‌شود. این عملگرها به شما امکان می‌دهند تا بررسی کنید که آیا یک مقدار خاص در یک لیست از مقادیر وجود دارد یا خیر.

عملگر IN

عملگر IN برای بررسی اینکه آیا یک مقدار در یک لیست از مقادیر وجود دارد استفاده می‌شود. اگر مقدار مورد نظر در لیست وجود داشته باشد، شرط TRUE می‌شود و رکورد مربوطه در نتیجه نمایش داده می‌شود.

مثال:

فرض کنید جدولی به نام employees داریم و می‌خواهیم اطلاعات کارمندانی که در دپارتمان‌های ۱، ۲ یا ۳ کار می‌کنند را دریافت کنیم.

SELECT * 
FROM employees 
WHERE department_id IN (1, 2, 3);

این کوئری تمام رکوردهایی را برمی‌گرداند که department_id آنها برابر با ۱، ۲ یا ۳ باشد.

عملگر NOT IN

عملگر NOT IN برعکس IN عمل می‌کند. این عملگر برای بررسی اینکه آیا یک مقدار در یک لیست از مقادیر وجود ندارد استفاده می‌شود. اگر مقدار مورد نظر در لیست وجود نداشته باشد، شرط TRUE می‌شود و رکورد مربوطه در نتیجه نمایش داده می‌شود.

مثال:

فرض کنید می‌خواهیم اطلاعات کارمندانی را دریافت کنیم که در دپارتمان‌های ۱، ۲ یا ۳ کار نمی‌کنند.

SELECT * 
FROM employees 
WHERE department_id NOT IN (1, 2, 3);

این کوئری تمام رکوردهایی را برمی‌گرداند که department_id آنها برابر با ۱، ۲ یا ۳ نباشد.

نکات مهم:

  1. مقادیر NULL: اگر در لیست IN یا NOT IN مقادیر NULL وجود داشته باشد، رفتار این عملگرها ممکن است غیرمنتظره باشد. به ویژه، NOT IN در صورتی که لیست شامل NULL باشد، ممکن است هیچ رکوردی را برنگرداند.
  2. بهینه‌سازی: استفاده از IN و NOT IN می‌تواند بر عملکرد کوئری تأثیر بگذارد، به ویژه زمانی که لیست مقادیر بزرگ باشد. در برخی موارد، استفاده از JOIN یا EXISTS ممکن است بهینه‌تر باشد.

مثال با NULL:

SELECT * 
FROM employees 
WHERE department_id NOT IN (1, 2, NULL);

این کوئری ممکن است هیچ رکوردی را برنگرداند، زیرا NOT IN با NULL به درستی کار نمی‌کند.

جایگزین NOT IN با NOT EXISTS:

در مواردی که لیست مقادیر شامل NULL است، می‌توان از NOT EXISTS به جای NOT IN استفاده کرد.

SELECT * 
FROM employees e
WHERE NOT EXISTS (
    SELECT 1 
    FROM departments d 
    WHERE d.department_id = e.department_id 
    AND d.department_id IN (1, 2, 3)
);

این کوئری کارمندانی را برمی‌گرداند که در دپارتمان‌های ۱، ۲ یا ۳ کار نمی‌کنند و با مشکل NULL مواجه نمی‌شود.

با استفاده از این عملگرها، می‌توانید کوئری‌های قدرتمند و انعطاف‌پذیری در SQL بنویسید.

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.