INTERSECT وEXCEPT للمقارنة
العثور على الصفوف المشتركة والمختلفة بين مجموعتي بيانات
INTERSECT وEXCEPT للمقارنة درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.
معاملات المقارنة
يُعد INTERSECT وEXCEPT معاملي المجموعات المستخدمين لمقارنة مجموعتي نتائج بدلًا من دمجهما. ويستعين بهما المحاورون في أسئلة مثل "أي العملاء موجودون في القائمتين؟" أو "أي الصفوف موجودة في A وليست في B؟".
INTERSECT= الصفوف الموجودة في كلا الاستعلامين.EXCEPT= الصفوف الموجودة في الاستعلام الأول وليست في الثاني.
ما الذي يعيده INTERSECT
يعيد INTERSECT الصفوف المميزة فقط التي تظهر في كلتا مجموعتي النتائج. ولكي يُعد الصف مشتركًا، يجب أن يتطابق في كل الأعمدة.
وكما هي الحال مع UNION، يزيل INTERSECT العادي التكرارات ويعيد كل صف مشترك مرة واحدة.
SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH yearsما الذي يعيده EXCEPT
يعيد EXCEPT (المسمى MINUS في Oracle) الصفوف المميزة من الاستعلام الأول التي لا تظهر في الثاني. وهو معامل اتجاهي: إذ تختلف نتيجة A EXCEPT B عن نتيجة B EXCEPT A.
وهذه هي الطريقة الطبيعية للعثور على السجلات المفقودة من مجموعة بيانات ثانية.
SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)EXCEPT ليس متماثلًا
نقطة شائعة في المقابلات: EXCEPT معامل اتجاهي. فتبديل الاستعلامين يجيب عن سؤال مختلف.
A EXCEPT B= موجود في A وغير موجود في B.B EXCEPT A= موجود في B وغير موجود في A.
أما INTERSECT فهو متماثل: إذ تساوي A INTERSECT B قيمة B INTERSECT A.
-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;التكرارات وافتراضية DISTINCT
تعمل INTERSECT وEXCEPT القياسيتان على الصفوف المميزة، مثل UNION. وتُدمج صفوف الإدخال المكررة قبل المقارنة.
تدعم بعض قواعد البيانات INTERSECT ALL وEXCEPT ALL اللذين يحافظان على التعددية، لكنهما أقل شيوعًا. إذا لم يذكر المحاور ALL، فافترض دلالات الصفوف المميزة.
SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)مقارنة الصفوف الكاملة للتساوي
يقارن المعاملان الصفوف كاملة عبر جميع الأعمدة المحددة. ولا يتساوى صفان إلا عندما تتطابق كل الأعمدة. وهذا يجعلهما مثاليين لاكتشاف ما إذا كان جدولان يحتويان على بيانات متطابقة.
حدد مجموعة الأعمدة الكاملة التي تهمك حتى تكون المقارنة ذات معنى.
SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in stagingنمط مقارنة الجدولين في الاتجاهين
للتحقق من أن جدولين متطابقان، نفّذ EXCEPT في كلا الاتجاهين ثم ادمج الفروقات. فإذا كانت النتيجة المدمجة فارغة، تطابق الجدولان تمامًا.
هذه إجابة كلاسيكية في مقابلات التحقق من البيانات المتعلقة بعمليات الترحيل والمطابقة.
(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identicalكيفية التعامل مع NULL
داخل عمليات المجموعات، تُعامل قيمتا NULL على أنهما متساويتان لأغراض المطابقة، وهذا يختلف عن كون التعبير المعتاد NULL = NULL نتيجته UNKNOWN.
لذلك سيطابق صف يحتوي على NULL في عمود ما صفًا آخر يحتوي على NULL في الموضع نفسه. يختبر المحاورون هذه النقطة لأنها تتعارض مع قواعد المقارنة المعتادة.
-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;أسبقية المعاملات بين عمليات المجموعات
عند مزج المعاملات، يرتبط INTERSECT عادةً بأسبقية أعلى من UNION وEXCEPT في معيار SQL. ولتجنب الالتباس، ضع الفروع بين قوسين.
إن توضيح أنك تستخدم الأقواس لجعل ترتيب التقييم صريحًا يدل على نضجك في المقابلة.
(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);اختيار INTERSECT وEXCEPT أم عمليات الربط
يتميز INTERSECT وEXCEPT بالاختصار، ويقارنان الصفوف الكاملة مع إزالة التكرار المضمنة. أما عمليات الربط فهي أكثر مرونة (إذ يمكنك إرجاع أعمدة إضافية واختيار كيفية التعامل مع التكرارات).
فضّل معاملات المجموعات عندما يقتصر السؤال على "أي الصفوف مشتركة أو مفقودة؟". وانتقل إلى عمليات الربط عندما تحتاج إلى أعمدة من الطرفين أو عندما تفتقر لهجة SQL إلى هذه المعاملات.
ربط المفاهيم معًا
يمكنك ترديد الملخص التالي: "يعيد INTERSECT الصفوف الموجودة في كلا الاستعلامين، وهو متماثل؛ أما EXCEPT فيعيد الصفوف الموجودة في الاستعلام الأول وليست في الثاني، وهو اتجاهي. يقارن كلاهما الصفوف كاملة، ويعاملان NULL على أنه متساوٍ، ويعيدان النتائج المميزة افتراضيًا."
أضف حيلة مقارنة EXCEPT في الاتجاهين عند السؤال اللاحق عن مطابقة البيانات، وبذلك تكون قد غطيت الموضوع بالكامل.
تحقق سريع
تريد العملاء الذين أجروا طلبًا في عام 2023 لكنهم لم يجروا أي طلب في عام 2024 (العملاء الذين توقفوا عن التعامل).
مراجعة
أهم النقاط:
INTERSECT= الصفوف الموجودة في كلا الاستعلامين؛ وهو متماثل.EXCEPT(وMINUS في Oracle) = الصفوف الموجودة في الاستعلام الأول وليست في الثاني؛ وهو اتجاهي.- يقارن كلاهما الصفوف كاملة ويعيدان النتائج المميزة افتراضيًا.
- تُعامل قيم NULL على أنها متساوية لأغراض المطابقة.
- توفر
EXCEPTفي الاتجاهين مقارنة كاملة للجدولين.
الأسئلة الشائعة
هل درس «INTERSECT وEXCEPT للمقارنة» مجاني؟
نعم — نص درس «INTERSECT وEXCEPT للمقارنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «INTERSECT وEXCEPT للمقارنة»؟
العثور على الصفوف المشتركة والمختلفة بين مجموعتي بيانات تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟
لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «INTERSECT وEXCEPT للمقارنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟
نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- UNION مقابل UNION ALL
- توافق عدد الأعمدة والأنواع
- INTERSECT وEXCEPT للمقارنة
- محاكاة عمليات المجموعات باستخدام عمليات الربط