DELETE dotaz je dílčí částí jazyka pro manipulaci s daty, který se používá k odstranění řádků z tabulek. Jak smazat join in MySQL je velmi oblíbená otázka během rozhovorů. Použití příkazů delete join v MySQL není snadný proces. V této části popíšeme, jak můžete odstranit záznamy z více tabulek pomocí INNER JOIN nebo LEFT JOIN v dotazu DELETE.
DELETE JOIN pomocí INNER JOIN
Dotaz Inner Join lze použít s dotazem Delete k odstranění řádků z jedné tabulky a odpovídajících řádků z druhé tabulky, které splňují zadanou podmínku.
Syntax
Následuje syntaxe, kterou lze použít pro odstranění řádků z více než jedné tabulky pomocí Inner Join .
DELETE target table FROM table1 INNER JOIN table2 ON table1.joining_column= table2.joining_column WHERE condition
Zde je cílem název tabulky, ze které chceme odstranit řádky podle zadané podmínky. Předpokládejme, že chcete odstranit řádky z tabulky T1 a T2 kde student_id = 2 , pak to lze zapsat jako následující prohlášení:
import skeneru java
DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.student_id=T2.student.id WHERE T1.student_id=2;
Ve výše uvedené syntaxi je cílová tabulka (T1 a T2) zapsána mezi klíčová slova DELETE a FROM. Pokud odtud vynecháme jakýkoli název tabulky, pak smazat výpis odebere pouze řádky z jedné tabulky. Výraz psaný s NA klíčové slovo je stav, který odpovídá řádkům v tabulkách, které se chystáte odstranit.
Příklad
Předpokládejme, že máme dva stoly studentů a kontakty který obsahuje následující údaje:
Tabulka: studenti
Tabulka: kontakty
Proveďte následující dotaz, abyste pochopili Smazat připojení s Inner Join. Tento příkaz odstraní řádek, který má v obou tabulkách stejné id.
DELETE students, contacts FROM students INNER JOIN contacts ON students.student_id=contacts.college_id WHERE students.student_id = 4;
Po úspěšném provedení se zobrazí následující zpráva:
můj flixer
Nyní spusťte následující dotaz k ověření úspěšně odstraněných řádků.
mysql> SELECT * FROM students; mysql> SELECT * FROM contacts;
Můžete vidět, že řádky, kde student_id=4 je smazán.
DELETE JOIN pomocí LEVÉHO PŘIPOJENÍ
Klauzuli LEFT JOIN jsme se již naučili s příkazem SELECT, který vrací všechny řádky z levé (první) tabulky a odpovídající nebo neodpovídající řádky z jiné tabulky. Podobně můžeme také použít klauzuli LEFT JOIN s klíčovým slovem DELETE pro mazání řádků z levé (první) tabulky, která nemá odpovídající řádky z pravé (druhé) tabulky.
Následující dotaz to vysvětluje jasněji, kde příkaz DELETE používá pro mazání řádků LEFT JOIN Stůl 1 který nemá odpovídající řádky v Tabulka2 :
DELETE Table1 FROM Table1 LEFT JOIN Table2 ON Table1.key = Table2.key WHERE Table2.key IS NULL;
Všimněte si, že ve výše uvedeném dotazu použijeme Tabulku1 pouze s klíčovým slovem DELETE, nikoli obojí jako v příkazu INNER JOIN.
Příklad
Pojďme vytvořit tabulku' kontakty ' a ' zákazníky ' v databázi, která obsahuje následující data:
Tabulka: kontakty
java je prázdná
Tabulka: zákazníci
Proveďte následující příkaz, který odebere zákazníka, který nemá a mobilní telefon číslo:
DELETE customers FROM customers LEFT JOIN contacts ON customers.customer_id = contacts.contact_id WHERE cellphone IS NULL;
Po úspěšném provedení se zobrazí následující zpráva:
Nyní spusťte následující dotaz k ověření úspěšně odstraněných řádků.
mysql> SELECT * FROM customers;
Vidíte, že jsou odstraněny řádky, kde zákazník nemá číslo mobilního telefonu.