انتقل إلى محتوى الدرس
الدرس 45
دورة MySQL

العمليات متعددة الجداول INSERT SELECT و UPDATE JOIN و DELETE JOIN في MySQLMySQL Multi Table INSERT SELECT UPDATE JOIN and DELETE JOIN

تعلّم العمليات متعددة الجداول INSERT SELECT و UPDATE JOIN و DELETE JOIN في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

بدلاً من سحب آلاف الصفوف إلى ذاكرة التطبيق البرمجي ثم إعادة إدراجها صفاً تلو الآخر، تنقل صيغة INSERT INTO ... SELECT مخرجات أي استعلام SELECT (بما في ذلك الاستعلامات المترابطة عبر JOIN) وتدرجها مباشرةً داخل الجدول الهدف في محرك قاعدة البيانات:

  • التطابق الموضعي للأعمدة: اذكر دائماً أسماء الأعمدة المستهدفة صراحةً بعد INSERT INTO وطابق عددها وأنواع بياناتها مع قائمة SELECT بالترتيب.
  • الاستغناء عن كلمة VALUES: عند الإدراج من استعلام، تحل جملة SELECT محل جملة VALUES (...) بالكامل.
مخطط العمليات متعددة الجداول INSERT SELECT و UPDATE JOIN و DELETE JOIN في MySQL 8
SQL
-- Populate shipping_labels from paid orders joined with customers
INSERT INTO shipping_labels (order_id, recipient_name, city, created_at)
SELECT
  o.order_id,
  u.full_name,
  u.city,
  o.order_date
FROM orders AS o
INNER JOIN users AS u ON o.user_id = u.user_id
WHERE o.status = 'paid';

يبرز الاستخدام الهندسي الأهم لصيغة INSERT INTO ... SELECT في سيناريوهين أساسيين داخل أنظمة الإنتاج وهما أرشفة البيانات التاريخية وتعبئة جداول التقارير التلخيصية:

  • نقل السجلات للأرشيف: نسخ الطلبات المكتملة الأقدم من تاريخ معين إلى جدول أرشيف orders_archive لتخفيف حجم الجدول التشغيلي الساخن.
  • بناء جداول الملخصات المجمعة: ربط جداول الطلبات والأصناف مع GROUP BY لحساب إجماليات المبيعات الشهرية وتخزينها في جدول تقارير سريع للوحات المتابعة.
SQL
-- Load monthly category revenue rollup into a reporting table
INSERT INTO category_monthly_summary
  (category_id, report_month, gross_revenue)
SELECT
  p.category_id,
  '2026-10' AS report_month,
  SUM(oi.quantity * oi.unit_price) AS gross_revenue
FROM order_items AS oi
INNER JOIN products AS p ON oi.product_id = p.product_id
GROUP BY p.category_id;

يدعم MySQL صياغة قوية للتحديث متعدد الجداول UPDATE ... JOIN تتيح لك تعديل أعمدة جدول (أو حتى الجدولين المرتبطين معاً في نفس اللحظة) اعتماداً على قيم أو شروط موجودة في جدول آخر:

  • ترتيب الجمل الخاص بـ MySQL: تُكتب جملة INNER JOIN أو LEFT JOIN مباشرةً بعد اسم الجدول في جملة UPDATE، أي قبل كلمة SET على النحو: UPDATE t1 INNER JOIN t2 ON ... SET t1.col = ....
  • الحسابات العابرة للجداول: يمكنك إسناد قيمة عمود من الجدول الثاني مباشرة إلى عمود في الجدول الأول مثل SET p.unit_price = s.promo_price.
SQL
-- Apply supplier discount rates to matching products via UPDATE JOIN
UPDATE products AS p
INNER JOIN suppliers AS s
  ON p.supplier_id = s.supplier_id
SET p.unit_price = ROUND(p.unit_price * (1 - s.discount_rate), 2)
WHERE s.is_preferred = 1
  AND p.is_active = 1;

عندما تحتاج إلى حذف سجلات من جدول بناءً على خصائص أو حالات مخزنة في جدول آخر مرتبط به، يوفّر MySQL صيغة الحذف المترابط DELETE ... JOIN:

  • تحديد الاسم المستعار بعد DELETE: اكتب دائماً الاسم المستعار للجدول المراد الحذف منه بين كلمتي DELETE وFROM مثل: DELETE o FROM orders AS o INNER JOIN users AS u ON ....
  • الحذف من جدول واحد أو جدولين: كتابة DELETE o تحذف الصفوف المطابقة من جدول الطلبات فقط دون المساس بجدول المستخدمين، بينما كتابة DELETE o, oi تحذف السجلات المطابقة من الجدولين معاً.
SQL
-- Delete unpaid draft orders belonging to banned accounts
DELETE o
FROM orders AS o
INNER JOIN users AS u
  ON o.user_id = u.user_id
WHERE u.account_status = 'banned'
  AND o.status = 'draft';

عبر دمج الحذف المترابط DELETE مع نمط ربط عدم التطابق LEFT JOIN ... WHERE right_table.pk IS NULL، يمكنك تنظيف السجلات اليتيمة المعزولة أو الجلسات المؤقتة المنتهية التي لا تملك سجلاً مقابلاً في الجدول الرئيسي:

  • عزل السجلات غير المرتبطة بدقة: وضع الجدول المراد تنظيفه على اليسار وفحص IS NULL على المفتاح الأساسي للجدول الأيمن يحصر الحذف في الصفوف المعزولة فقط.
  • التحقق المسبق بـ SELECT: نفّذ دائماً نفس جملة FROM ... LEFT JOIN ... WHERE ... IS NULL كاستعلام قراءة SELECT COUNT(*) أولاً للتحقق من عدد الصفوف قبل تحويلها إلى DELETE.
SQL
-- Purge orphaned cart items whose parent shopping cart no longer exists
DELETE ci
FROM cart_items AS ci
LEFT JOIN shopping_carts AS sc
  ON ci.cart_id = sc.cart_id
WHERE sc.cart_id IS NULL;

يلخّص الجدول التالي أنماط تعديل البيانات متعددة الجداول في MySQL 8:

نمط العملية المترابطةهيكل الصياغة في MySQL 8قاعدة تحديد الجدول الهدفالاستخدام الهندسي الأمثل
INSERT INTO ... SELECTINSERT INTO target (cols) SELECT ... FROM a JOIN bيُذكر بعد INSERT INTOأرشفة السجلات التاريخية وتعبئة جداول الملخصات والتقارير
UPDATE ... JOINUPDATE a JOIN b ON ... SET a.col = val WHERE ...الأعمدة المسندة في SETتحديث الأسعار أو الحالات اعتماداً على بيانات جدول آخر
DELETE ... INNER JOINDELETE a FROM a INNER JOIN b ON ... WHERE ...الاسم المستعار بعد DELETEحذف السجلات المرتبطة بحسابات ملغاة أو فئات محددة
DELETE ... LEFT JOINDELETE a FROM a LEFT JOIN b ON ... WHERE b.id IS NULLالجدول الأيسر بعد DELETEتنظيف السجلات اليتيمة التي فقدت ارتباطها بالجدول الأب

ملخص الدرس: أتقنّا في هذا الدرس نسخ وتلخيص السجلات بين الجداول عبر INSERT INTO ... SELECT، وتحديث الأعمدة المترابطة بصيغة UPDATE ... JOIN ... SET، وحذف السجلات المطابقة أو المعزولة عبر DELETE ... JOIN.
الخطوة التالية والدرس القادم: في الدرس القادم نبدأ وحدة الاستعلامات المتقدمة بدراسة «الاستعلامات الفرعية مع IN و ANY و ALL والجداول المشتقة في MySQL».

خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تنفّذ عمليات INSERT SELECT وUPDATE JOIN وDELETE JOIN تحويلات البيانات العلائقية مباشرةً داخل محرك InnoDB بكفاءة عالية. الخطوة التالية: انتقل إلى درس «الاستعلامات الفرعية مع IN و ANY و ALL والجداول المشتقة في MySQL».

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات5

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 5 مفهومةأول بطاقة، أول خطوة
01 Update Joins تحديث مترابط
تعلّم العمليات متعددة الجداول INSERT SELECT و UPDATE JOIN و DELETE JOIN في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
للمراجعة
02 Copying Query Results INSERT SELECT نسخ النتائج بـ INSERT SELECT
المفهوم الهندسي والصياغة العملية الخاصة بقسم نسخ النتائج بـ INSERT SELECT في MySQL 8.
للمراجعة
03 Archiving and Summary Table Loads أرشفة السجلات وجداول التقارير
المفهوم الهندسي والصياغة العملية الخاصة بقسم أرشفة السجلات وجداول التقارير في MySQL 8.
للمراجعة
04 Updating Columns via UPDATE JOIN تحديث جدول بربطه بآخر
المفهوم الهندسي والصياغة العملية الخاصة بقسم تحديث جدول بربطه بآخر في MySQL 8.
للمراجعة
05 Multi Table DELETE JOIN Syntax حذف السجلات بـ DELETE JOIN
المفهوم الهندسي والصياغة العملية الخاصة بقسم حذف السجلات بـ DELETE JOIN في MySQL 8.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 DML DML
Data Manipulation Language
تعليمات معالجة البيانات في SQL المسؤولة عن إدراج وتحديث وحذف الصفوف.
للمراجعة
02 ETL ETL
Extract, Transform, Load
نمط استخراج وتحويل وتحميل البيانات الذي تنفذه تعليمة INSERT INTO ... SELECT داخل القاعدة.
للمراجعة
03 Orphan Row سجل يتيم
Orphaned Child Record
صف فرعي يشير مفتاحه الأجنبي إلى سجل أب غير موجود، ويُنظف عبر DELETE ... LEFT JOIN.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أمثلة SQL المشروحة في قسم نسخ النتائج بـ INSERT SELECT داخل قاعدة بياناتك المحلية وتحقق من مجموعة النتائج.

  2. بدّل بين الحالات التفاعلية في قسم أرشفة السجلات وجداول التقارير وقارن كيف ينفّذ محرك MySQL 8 كل استعلام.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

5أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي5 أسئلة تنتظرك
01

عند استخدام صيغة INSERT INTO target_table (col1, col2) SELECT ...، ماذا يحدث لكلمة VALUES؟

تذكّر القاعدة النحوية عند الإدراج المباشر من مخرجات استعلام.

02

ما هي التعليمة التي تنشئ جدول أرشيف فارغاً يطابق أعمدة وفهارس جدول موجود تماماً تمهيداً لملئه بـ INSERT INTO ... SELECT؟

حدّد صيغة نسخ هيكل الجدول دون صفوفه في MySQL.

03

في MySQL، أين يجب وضع جملة INNER JOIN أو LEFT JOIN داخل تعليمة التحديث متعدد الجداول UPDATE؟

تحقق من الترتيب الصحيح للجمل داخل تعليمة UPDATE المترابطة في MySQL.

04

في التعليمة DELETE o FROM orders AS o INNER JOIN users AS u ON o.user_id = u.user_id WHERE u.is_banned = 1، أي جدول تُحذف منه الصفوف؟

انظر إلى الاسم المستعار المكتوب مباشرةً بعد كلمة DELETE.

05

دمج DELETE t1 FROM t1 LEFT JOIN t2 ON t1.parent_id = t2.id WHERE t2.id IS NULL يحذف السجلات الفرعية اليتيمة في t1 التي لا تملك سجلاً أباً في t2.

تحقق من عمل نمط LEFT JOIN ... IS NULL عند استخدامه مع تعليمة DELETE.