PostgreSQL موجود مع تحديد Operaتور (مثال)

⚡ ملخص ذكي

PostgreSQL EXISTS هو عامل منطقي يختبر ما إذا كان الاستعلام الفرعي المرتبط يُرجع أي صف، مما يسمح لعبارات SELECT وINSERT وUPDATE وDELETE بتصفية البيانات حسب وجود أو عدم وجود سجلات مطابقة بكفاءة.

  • 📋 بناء الجملة: تُرجع عبارة WHERE EXISTS (الاستعلام الفرعي) القيمة true عندما ينتج عن الاستعلام الفرعي صف واحد على الأقل.
  • 🔗 استعلام فرعي مرتبط: يربط EXISTS الاستعلامات الداخلية والخارجية، ويطابق الصفوف بناءً على مفتاح مشترك.
  • ⚡ ماس كهربائي: تتوقف عملية EXISTS عند أول صف مطابق، لذا فهي قابلة للتوسع بشكل جيد على الجداول الكبيرة.
  • 🔁 أربع عبارات: يعمل هذا المعامل داخل استعلامات SELECT و INSERT و UPDATE و DELETE.
  • 🛡️ غير موجود: يستبعد الصفوف بأمان ويتجنب مشكلة NULL التي تؤدي إلى فشل NOT IN.
  • 🤖 استفسارات الذكاء الاصطناعي: يقوم المساعدون بإنشاء عبارات EXISTS ويشيرون إلى مخاطر أداء الاستعلامات الفرعية المرتبطة.

PostgreSQL موجود مع تحديد Operaتور

ما هو موجود في PostgreSQL?

استخدم PostgreSQL المشرقية يختبر عامل التشغيل EXISTS وجود صف أو أكثر في استعلام فرعي. وهذا يعني أنه يُستخدم مع استعلام فرعي. ويُقال إن عامل التشغيل EXISTS قد تحقق عند العثور على صف واحد على الأقل في الاستعلام الفرعي. يمكنك استخدام هذه العملية مع عبارات SELECT وUPDATE وINSERT وDELETE.

PostgreSQL صيغة استعلام EXISTS

هنا هو بناء الجملة ل PostgreSQL بيان موجود:

WHERE EXISTS (subquery);

يوضح بناء الجملة أعلاه أن عامل EXISTS يأخذ وسيطة، وهي عبارة عن استعلام فرعي. الاستعلام الفرعي هو ببساطة اختيار البيان يجب أن يبدأ بـ SELECT * بدلاً من قائمة أسماء الأعمدة أو التعبيرات.

PostgreSQL يوجد باستخدام عبارة SELECT

لنرى كيف نستخدم عبارة SELECT مع عامل التشغيل EXISTS. لدينا الجداول التالية:

كتاب:

PostgreSQL يوجد باستخدام عبارة SELECT

السعر:

PostgreSQL يوجد باستخدام عبارة SELECT

قم بتشغيل العبارة التالية:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

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

PostgreSQL موجود مع نتيجة عبارة SELECT

يجب أن يقوم الأمر أعلاه بإرجاع كافة السجلات الموجودة في جدول الكتاب الذي يتطابق معرفه مع معرف أي سجلات بواسطة الاستعلام الفرعي. تمت مطابقة معرف واحد فقط. وبالتالي، تم إرجاع سجل واحد فقط.

PostgreSQL يوجد باستخدام عبارة INSERT

يمكننا استخدام عامل EXISTS في إدراج بيانلدينا الجداول الثلاثة التالية:

كتاب:

PostgreSQL يوجد باستخدام عبارة INSERT

السعر:

PostgreSQL يوجد باستخدام عبارة INSERT

السعر2:

PostgreSQL يوجد باستخدام عبارة INSERT

ومن ثم يمكننا تنفيذ العبارة التالية:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

جدول الأسعار الآن على النحو التالي:

PostgreSQL تم العثور على نتيجة عبارة INSERT

تمت مطابقة الصف ذو المعرف 5 في الجدول المسمى Price2. ثم تم إدراج هذا السجل في جدول الأسعار.

PostgreSQL بيان التحديث الموجود

يمكننا استخدام عامل EXISTS في بيان UPDATE.

قم بتشغيل الاستعلام التالي:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

PostgreSQL بيان التحديث الموجود

نقوم بتحديث عمود السعر في جدول الأسعار. هدفنا هو أن تكون أسعار العناصر التي تشترك في المعرف هي نفسها. تمت مطابقة صف واحد فقط، وهو 5.

ولكن بما أن الأسعار متساوية، أي 205، لم يتم إجراء أي تحديث. ولو كان هناك اختلاف لكان قد تم التحديث.

PostgreSQL يوجد مع عبارة الحذف

A PostgreSQL يمكن لبيان DELETE استخدام عامل EXISTS. فيما يلي مثال:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

جدول الأسعار الآن على النحو التالي:

PostgreSQL يوجد مع عبارة الحذف

تم حذف الصف ذو المعرف 5.

PostgreSQL بيان EXISTS باستخدام pgAdmin

بالإضافة إلى واجهة SQL، يمكن تنفيذ استعلامات EXISTS نفسها بصريًا من خلال واجهة pgAdmin. والآن، دعونا نرى كيف يمكن تنفيذ هذه الإجراءات باستخدام pgAdmin:

باستخدام عبارة SELECT

فيما يلي خطوات استخدام استعلام EXISTS في PostgreSQL باستخدام عبارة SELECT باستخدام pgAdmin:

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

الخطوة 2) أنشئ قاعدة بيانات تجريبية.

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

PostgreSQL بيان EXISTS باستخدام pgAdmin

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

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

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

PostgreSQL بيان EXISTS باستخدام pgAdmin

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

PostgreSQL بيان EXISTS باستخدام pgAdmin

مع بيان INSERT

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

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

الخطوة 2)

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

بيان EXISTS في PostgreSQL باستخدام pgAdmin

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

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

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

بيان EXISTS في PostgreSQL باستخدام pgAdmin

يجب أن يكون جدول الأسعار الآن كما يلي:

بيان EXISTS في PostgreSQL باستخدام pgAdmin

مع بيان التحديث

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

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

الخطوة 2)

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

بيان EXISTS في PostgreSQL باستخدام pgAdmin

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

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

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

PostgreSQL بيان EXISTS باستخدام pgAdmin

يجب أن يكون جدول الأسعار الآن كما يلي:

PostgreSQL بيان EXISTS باستخدام pgAdmin

مع بيان الحذف

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

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

الخطوة 2)

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

PostgreSQL بيان EXISTS باستخدام pgAdmin

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

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

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

PostgreSQL بيان EXISTS باستخدام pgAdmin

يجب أن يكون جدول الأسعار الآن كما يلي:

PostgreSQL بيان EXISTS باستخدام pgAdmin

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

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

تختبر دالة EXISTS ما إذا كانت استعلامة فرعية مرتبطة تُرجع أي صف وتتوقف عند أول تطابق، لذا فهي مناسبة للاستعلامات الفرعية الكبيرة. أما دالة IN فتقارن قيمةً بقائمة وتناسب المجموعات الصغيرة والثابتة.

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

يشير الاستعلام الفرعي المرتبط إلى عمود من الاستعلام الخارجي، مثل WHERE Book.id = Price.id. يعيد EXISTS التحقق منه لكل صف خارجي ويعيد القيمة true بمجرد العثور على تطابق.

نعم. تُرجع دالة EXISTS القيمة "صحيح" بمجرد أن يُنتج الاستعلام الفرعي صفًا واحدًا، لذا فهي لا تفحص باقي الصفوف. هذا السلوك المختصر يجعلها فعالة في الاستعلامات الفرعية الكبيرة والمترابطة.

لا، يتحقق EXISTS فقط مما إذا كانت الاستعلامات الفرعية تُرجع صفًا، لذا فإن SELECT * و SELECT 1 و SELECT id تتصرف بنفس الطريقة. قائمة الأعمدة داخل الاستعلام الفرعي لا تؤثر على النتيجة.

قم بفهرسة الأعمدة المدمجة داخل الاستعلام الفرعي، واجعل شرط الارتباط قابلاً للبحث، ثم قم بتشغيل EXPLAIN ANALYZE. PostgreSQL غالباً ما يعيد كتابة EXISTS كعملية شبه ربط فعالة عندما تدعم الفهارس ذلك.

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

نعم. يقوم مساعد الذكاء الاصطناعي باكتشاف أنماط الاستعلامات الفرعية وإعادة كتابة IN كـ EXISTS أو NOT IN كـ NOT EXISTS، مما يحسن سلامة NULL والأداء على الجداول الكبيرة.

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