عملگر تعلق: 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 آنها برابر با ۱، ۲ یا ۳ نباشد.
نکات مهم:
- مقادیر
NULL: اگر در لیستINیاNOT INمقادیرNULLوجود داشته باشد، رفتار این عملگرها ممکن است غیرمنتظره باشد. به ویژه،NOT INدر صورتی که لیست شاملNULLباشد، ممکن است هیچ رکوردی را برنگرداند. - بهینهسازی: استفاده از
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 بنویسید.
دیدگاه شما