سيناريو:
لديك جدولين: login_log
و ip_location
. الهدف من ذلك هو تحديد جميع عناوين IP المسجلة في login_log
التي هي لا موجودة في
يمكن لعدة أساليب SQL تحقيق ذلك. دعنا ندرس ثلاث طرق شائعة:
لا يوجد subquery: هذه الطريقة فعالة بشكل عام وتوافق على نطاق واسع.
SELECT ip
FROM login_log
WHERE NOT EXISTS (
SELECT 1
FROM ip_location
WHERE login_log.ip = ip_location.ip
);
login_log لديه إدخال مقابل في ip_location
. إذا لم يتم العثور على تطابق ، يتم تضمين عنوان IP في النتائج. لاحظ أن حدد 1
غالبًا ما يكون أكثر كفاءة من حدد IP
في subquery.
ترك الانضمام مع null
تحقق: يستخدم هذا النهج
اليسار لدمج الجداول ، ثم المرشحات للصفوف حيث عنوان IP.
حدد L.IP
من login_log l
اليسار انضم إلى ip_location i على l.ip = i.ip
حيث I.IP هو فارغ ؛
SELECT l.ip
FROM login_log l
LEFT JOIN ip_location i ON l.ip = i.ip
WHERE i.ip IS NULL;
Minus Minus في Oracle).
حدد IP من login_log
يستثني
حدد IP من ip_location ؛
SELECT ip FROM login_log
EXCEPT
SELECT ip FROM ip_location;
تعتمد الطريقة المثلى على نظام قاعدة البيانات الخاص بك وحجم الجدول والفهرسة. ينضم فعالًا في أنظمة أخرى. باستثناء
يمكن أن تكون موجزة ولكن قد لا تكون دائمًا الأسرع. تجنب ليس في مع الفائزين الفرعيين ، حيث يمكن أن يكون أبطأ بشكل ملحوظ ، خاصة مع مجموعات البيانات الكبيرة. يعد الفهرسة المناسبة على العمود
IP في كلا الجدولين أمرًا ضروريًا للأداء في جميع الحالات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3