שאילתת DELETE היא תת-חלק של שפת מניפולציה של נתונים המשמשת להסרת השורות מטבלאות. כיצד למחוק הצטרפות MySQL היא שאלה פופולרית מאוד במהלך הראיונות. זה לא תהליך קל להשתמש בהצהרות ה-delete join ב-MySQL. בסעיף זה, נתאר כיצד ניתן למחוק רשומות ממספר טבלאות באמצעות שימוש ב-INNER JOIN או LEFT JOIN בשאילתת DELETE.
מחק JOIN עם INNER JOIN
ניתן להשתמש בשאילתת החיבור הפנימי עם שאילתת מחק להסרת שורות מטבלה אחת והשורות התואמות מהטבלה האחרת שממלאות את התנאי שצוין.
תחביר
להלן התחביר שניתן להשתמש בו למחיקת שורות מיותר מטבלה אחת באמצעות Inner Join.
DELETE target table FROM table1 INNER JOIN table2 ON table1.joining_column= table2.joining_column WHERE condition
כאן, היעד הוא שם טבלה שממנו אנו רוצים למחוק שורות על ידי התאמה לתנאי שצוין. נניח שאתה רוצה למחוק שורות מהטבלה T1 ו T2 איפה student_id = 2 , אז זה יכול להיכתב כמשפט הבא:
מעלה
DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.student_id=T2.student.id WHERE T1.student_id=2;
בתחביר לעיל, טבלת היעד (T1 ו-T2) נכתבת בין מילות מפתח DELETE ו-FROM. אם נשמיט שם טבלה כלשהי משם, אז ה מחק הצהרה מסיר רק שורות מטבלה בודדת. הביטוי שנכתב עם עַל מילת מפתח היא התנאי שתואם את השורות בטבלאות שבהן אתה עומד למחוק.
דוגמא
נניח שיש לנו שני טבלאות תלמידים ו אנשי קשר שמכיל את הנתונים הבאים:
טבלה: תלמידים
טבלה: אנשי קשר
בצע את השאילתה הבאה כדי להבין את מחק הצטרף עם Inner Join. הצהרה זו מוחקת שורה בעלת אותו זיהוי בשתי הטבלאות.
DELETE students, contacts FROM students INNER JOIN contacts ON students.student_id=contacts.college_id WHERE students.student_id = 4;
לאחר ביצוע מוצלח, הוא יציג את ההודעה הבאה:
כעת, הפעל את השאילתה הבאה כדי לאמת את השורות שנמחקו בהצלחה.
mysql> SELECT * FROM students; mysql> SELECT * FROM contacts;
אתה יכול לראות כי השורות שבהן student_id=4 מחוק.
מחק JOIN עם LEFT JOIN
כבר למדנו את משפט LEFT JOIN עם משפט SELECT שמחזיר את כל השורות מהטבלה השמאלית (הראשונה) ואת השורות התואמות או לא תואמות מטבלה אחרת. באופן דומה, אנו יכולים גם להשתמש בסעיף LEFT JOIN עם מילת המפתח DELETE למחיקת שורות מהטבלה השמאלית (הראשונה) שאין לה שורות תואמות מטבלה ימנית (שנייה).
מחרוזת Java replaceall
השאילתה הבאה מסבירה בצורה ברורה יותר היכן משפט DELETE משתמש ב-LEFT JOIN למחיקת שורות מ שולחן 1 שאין לו שורות תואמות ב- שולחן 2 :
DELETE Table1 FROM Table1 LEFT JOIN Table2 ON Table1.key = Table2.key WHERE Table2.key IS NULL;
בשאילתה שלמעלה, שים לב שנשתמש רק בטבלה 1 עם מילת המפתח DELETE, לא בשתיהן כפי שנעשה במשפט INNER JOIN.
דוגמא
תן לנו ליצור טבלה ' אנשי קשר 'ו' לקוחות ' במסד נתונים המכיל את הנתונים הבאים:
טבלה: אנשי קשר
להסביר את עצמאות הנתונים
טבלה: לקוחות
בצע את ההצהרה הבאה המסירה את הלקוח שאין לו א טלפון נייד מספר:
DELETE customers FROM customers LEFT JOIN contacts ON customers.customer_id = contacts.contact_id WHERE cellphone IS NULL;
לאחר ביצוע מוצלח, הוא יציג את ההודעה הבאה:
כעת, הפעל את השאילתה הבאה כדי לאמת את השורות שנמחקו בהצלחה.
mysql> SELECT * FROM customers;
ניתן לראות שהשורות שבהן אין ללקוח את מספר הסלולרי נמחקות.