PostgreSQL في، ليس في مع الأمثلة

⚡ ملخص ذكي

PostgreSQL يتحقق عامل التشغيل IN مما إذا كانت القيمة تظهر داخل قائمة أو استعلام فرعي داخل عبارة WHERE، مما يحل محل شروط OR المتعددة عبر عبارات SELECT و UPDATE و INSERT و DELETE للحصول على تصفية أنظف وأسرع وأكثر قابلية للقراءة.

  • 📋 بناء الجملة: تُرجع الدالة value IN (list) القيمة true عندما تتطابق القيمة مع أي عنصر من عناصر القائمة.
  • 🔤 قوائم الشخصيات: ضع قيم النص بين علامتي اقتباس مفردتين داخل الأقواس.
  • 🔢 القوائم الرقمية: قارن الأرقام مباشرة، بدون علامات اقتباس، للحصول على تطابقات دقيقة.
  • 🚫 غير موجود في: يُعيد الصفوف التي لا توجد قيمتها في القائمة المُقدمة.
  • ⚠️ مصيدة فارغة: يمكن أن يؤدي استخدام قيمة فارغة (NULL) داخل عبارة NOT IN إلى إرجاع صفر من الصفوف دون أن يلاحظ المستخدم ذلك.
  • 🤖 استفسارات الذكاء الاصطناعي: يقوم المساعدون بإنشاء عبارات IN ويشيرون إلى قيم NULL ومخاطر الأداء.

PostgreSQL الداخل، الخارج مع أمثلة

ما هي تفاصيل PostgreSQL في؟

يُستخدم عامل التشغيل IN في عبارة WHERE للتحقق مما إذا كانت قيمة ما موجودة ضمن قائمة من القيم الأخرى. تُساعد عملية IN على تقليل الحاجة إلى استخدام شروط OR متعددة في عبارات SELECT وUPDATE وINSERT وDELETE.

بناء الجملة

يأخذ عامل IN الصيغة التالية:

value IN (value_1, value_2, ...)

القيمة هي القيمة التي تقوم بالتحقق منها في القائمة.

القيمة value_1، value_2... هي قيم القائمة.

إذا تم العثور على القيمة في القائمة، فسوف يقوم المشغل بإرجاع القيمة true.

يمكن أن تكون القائمة مجموعة من الأرقام أو السلاسل النصية، أو حتى نتيجة إخراج عملية ما اختيار البيان كما هو مبين أدناه:

value IN (SELECT value FROM table-name);

يُعرف البيان الموجود داخل القوس بالاستعلام الفرعي.

PostgreSQL في الشخصية

دعونا نوضح لك كيفية استخدام عامل IN مع قيم الأحرف.

خذ بعين الاعتبار الجدول التالي:

الموظفين:

PostgreSQL في الشخصية

دعونا نجري الاستعلام التالي على الجدول أعلاه:

SELECT * FROM Employees WHERE name IN ('James John', 'Mercy Bush', 'Kate Joel');

ويعيد ما يلي:

PostgreSQL نتيجة IN مع الحرف

لدينا قائمة بثلاثة أسماء. نبحث عما إذا كان بإمكاننا العثور على أي من هذه الأسماء في عمود الأسماء في جدول الموظفين. تم العثور على اسم "كيت جويل" في أحد سجلات الجدول، وتم استرجاع تفاصيله.

PostgreSQL إدخال مع رقمي

الآن، دعونا نرى كيف يمكننا استخدام عامل IN مع القيم الرقمية.

خذ بعين الاعتبار جدول الأسعار الموضح أدناه:

السعر:

PostgreSQL إدخال مع رقمي

يمكننا تشغيل الاستعلام التالي على الجدول:

SELECT * FROM Price WHERE price IN (200, 308, 250, 550);

هذا يعيد ما يلي:

PostgreSQL في مع نتيجة رقمية

لقد قمنا بإنشاء قائمة تحتوي على 4 قيم رقمية. نحن نتحقق مما إذا كان بإمكاننا مطابقة أي من هذه القيم مع القيم الموجودة في عمود السعر في جدول السعر. تمت مطابقة قيمتين وتم إرجاع تفاصيلهما.

استخدام النفي Operaتور

يمكن استخدام عامل IN مع عامل NOT. فهو يعيد القيم التي لا توجد في العمود المحدد. وسوف نستخدم جدول الأسعار لتوضيح ذلك.

SELECT * FROM Price WHERE price NOT IN (200, 400, 190, 230);

سيؤدي هذا إلى إرجاع ما يلي:

PostgreSQL باستخدام عامل النفي

لقد قمنا بإنشاء قائمة تحتوي على 4 قيم رقمية. نقوم الآن بفحص عمود السعر في جدول الأسعار بحثًا عن القيم التي لا تشكل جزءًا من القائمة. لم يتم العثور على قيمتين، 250 و300. وبالتالي تم إرجاع تفاصيلهما.

باستخدام pgAdmin

بالإضافة إلى واجهة SQL، يمكن تشغيل نفس استعلامات IN و NOT IN بشكل مرئي من خلال واجهة pgAdmin.

مع الشخصية

لإنجاز الأمر نفسه من خلال pgAdmin، قم بما يلي:

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

استخدام pgAdmin مع الحرف

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT * FROM Employees WHERE name IN ('James John', 'Mercy Bush', 'Kate Joel');

الخطوة 4) انقر فوق الزر "تنفيذ".

استخدام pgAdmin مع استعلام الأحرف

ينبغي أن يعود ما يلي:

استخدام pgAdmin مع نتيجة الأحرف

مع رقمية

لإنجاز الأمر نفسه من خلال pgAdmin، قم بما يلي:

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

استخدام pgAdmin مع رقمي

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT * FROM Price WHERE price IN (200, 308, 250, 550);

الخطوة 4) انقر فوق الزر "تنفيذ".

استخدام pgAdmin مع الاستعلام الرقمي

ينبغي أن يعود ما يلي:

استخدام pgAdmin مع نتيجة رقمية

استخدام النفي Operaتور

لإنجاز الأمر نفسه من خلال pgAdmin، قم بما يلي:

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

استخدام عامل النفي (NOT) في pgAdmin

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT * FROM Price WHERE price NOT IN (200, 400, 190, 230);

الخطوة 4) انقر فوق الزر "تنفيذ".

استخدام استعلام عامل النفي (NOT) في pgAdmin

ينبغي أن يعود ما يلي:

يؤدي استخدام عامل النفي (NOT) إلى ظهور نتائج في pgAdmin

قم بتنزيل قاعدة البيانات المستخدمة في هذا البرنامج التعليمي

الأسئلة الشائعة

In PostgreSQLغالبًا ما يكون استخدام EXISTS أسرع من IN في الاستعلامات الفرعية الكبيرة لأنه يتوقف عند أول تطابق. أما بالنسبة للقوائم الصغيرة والثابتة، فإن IN بسيط وفعال. اختبر كلا الخيارين باستخدام EXPLAIN ANALYZE على بياناتك الخاصة.

تتعامل عبارة NOT IN مع القيم الفارغة (NULL) على أنها غير معروفة، لذا إذا احتوت القائمة أو الاستعلام الفرعي على قيمة فارغة (NULL)، فقد تُقيّم العبارة بأكملها على أنها غير معروفة وتُرجع صفرًا من الصفوف. لذا، يُنصح بتصفية القيم الفارغة (NULL) أو استخدام عبارة NOT EXISTS بدلاً منها.

يستبدل IN سلاسل طويلة من شروط OR بعبارة واحدة سهلة القراءة. WHERE id IN (1,2,3) يساوي WHERE id=1 OR id=2 OR id=3، ولكنه أقصر وأوضح وأسهل في الصيانة.

نعم. PostgreSQL يعامل التعبير x IN (a, b, c) على أنه مكافئ للتعبير x = ANY (ARRAY[a, b, c]). ينتج عن كليهما نفس النتيجة وعادةً نفس خطة الاستعلام.

تقوم المساعدات الذكية بإنشاء عبارات IN من اللغة الإنجليزية البسيطة، واقتراح قائمة القيم الصحيحة، والإشارة إلى مخاطر NULL في NOT IN. كما أنها تعيد كتابة الاستعلامات البطيئة وتضيف تلميحات EXPLAIN لتحسين الأداء.

نعم. أدوات AI Copilot تكتشف شروط OR المتكررة في عمود واحد وتعيد هيكلتها إلى قائمة IN واحدة، مما يحسن من سهولة القراءة ويقلل من احتمالية حدوث أخطاء منطقية.

نعم. ضع عبارة SELECT داخل الأقواس: WHERE id IN (SELECT id FROM orders). يُوفّر الاستعلام الداخلي، المسمى بالاستعلام الفرعي، قائمة القيم التي تم التحقق منها بواسطة IN.

بالنسبة للجداول الكبيرة، عادةً ما يكون استخدام NOT EXISTS أو LEFT JOIN مع IS NULL أفضل من استخدام NOT IN لأن PostgreSQL يُنشئ عملية ربط مضادة فعّالة. تأكد أيضًا من فهرسة الأعمدة المُقارنة.

تلخيص هذه التدوينة بـ: