Заявката DELETE е подчаст от езика за манипулиране на данни, използван за премахване на редове от таблици. Как да изтриете присъединяване MySQL е много популярен въпрос по време на интервютата. Не е лесен процес за използване на операторите за изтриване на присъединяване в MySQL. В този раздел ще опишем как можете да изтриете записи от множество таблици с помощта на INNER JOIN или LEFT JOIN в заявката DELETE.
DELETE JOIN с INNER JOIN
Заявката за вътрешно присъединяване може да се използва със заявка за изтриване за премахване на редове от една таблица и съответстващите редове от другата таблица, които отговарят на определеното условие.
Синтаксис
Следва синтаксисът, който може да се използва за изтриване на редове от повече от една таблица с помощта на Inner Join.
DELETE target table FROM table1 INNER JOIN table2 ON table1.joining_column= table2.joining_column WHERE condition
Тук целта е име на таблица, откъдето искаме да изтрием редове, като отговаряме на определеното условие. Да предположим, че искате да изтриете редове от таблицата Т1 и Т2 където 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. Ако пропуснем някое име на таблица от там, тогава изтриване на изявление премахва само редове от една таблица. Изразът, написан с НА ключова дума е условието, което съответства на редовете в таблиците, където ще изтриете.
Пример
Да предположим, че имаме две таблици студенти и Контакти който съдържа следните данни:
Маса: ученици
Таблица: контакти
Изпълнете следната заявка, за да разберете Изтриване на присъединяване с вътрешно присъединяване. Този оператор изтрива ред, който има същия идентификатор и в двете таблици.
DELETE students, contacts FROM students INNER JOIN contacts ON students.student_id=contacts.college_id WHERE students.student_id = 4;
След успешно изпълнение, той ще даде следното съобщение:
myflixer
Сега изпълнете следната заявка, за да проверите успешно изтритите редове.
mysql> SELECT * FROM students; mysql> SELECT * FROM contacts;
Можете да видите, че редовете, където student_id=4 се изтрива.
DELETE JOIN с LEFT JOIN
Вече научихме клаузата LEFT JOIN с израза SELECT, която връща всички редове от лявата (първата) таблица и съответстващите или несъвпадащите редове от друга таблица. По подобен начин можем да използваме клаузата LEFT JOIN с ключовата дума DELETE за изтриване на редове от лявата (първата) таблица, която няма съвпадащи редове от дясна (втора) таблица.
Следната заявка обяснява по-ясно къде операторът DELETE използва LEFT JOIN за изтриване на редове от Маса 1 който няма съвпадащи редове в Таблица 2 :
DELETE Table1 FROM Table1 LEFT JOIN Table2 ON Table1.key = Table2.key WHERE Table2.key IS NULL;
В горната заявка забележете, че ще използваме само Table1 с ключовата дума DELETE, а не и двете, както беше в оператора INNER JOIN.
Пример
Нека създадем таблица ' Контакти ' и ' клиенти ' в база данни, която съдържа следните данни:
Таблица: контакти
plsql
Маса: клиенти
Изпълнете следния оператор, който премахва клиента, който няма a мобилен телефон номер:
DELETE customers FROM customers LEFT JOIN contacts ON customers.customer_id = contacts.contact_id WHERE cellphone IS NULL;
След успешно изпълнение, той ще даде следното съобщение:
Сега изпълнете следната заявка, за да проверите успешно изтритите редове.
mysql> SELECT * FROM customers;
Можете да видите, че редовете, в които клиентът няма номера на мобилния телефон, са изтрити.