PostgreSQL ODSTRANIT řádky z výběru

⚡ Chytré shrnutí

PostgreSQL Příkaz DELETE odstraní jeden nebo více řádků z tabulky a jeho spárování s klauzulí WHERE se zaměří pouze na záznamy, které splňují podmínku, zatímco vynechání klauzule WHERE vymaže všechny řádky v tabulce.

  • ???? Syntaxe: Podmínka DELETE FROM table WHERE odstraní odpovídající řádky a podmínka RETURNING může zobrazit smazaná data.
  • 🎯 Jedna podmínka: Jedna klauzule WHERE smaže pouze řádky, které splňují jeden test.
  • Dvě podmínky: Spojení dvou testů pomocí operátoru AND zúží odstranění na přesné řádky.
  • 🔗 Klauzule EXISTS: Funkce EXISTS odstraní řádky v jedné tabulce na základě shodných záznamů v jiné tabulce.
  • 🖥️ pgAdmin: Stejné dotazy na odstranění se spouštějí vizuálně prostřednictvím editoru dotazů pgAdmin.
  • 🤖 Bezpečnost umělé inteligence: Asistenti umělé inteligence přidávají správnou klauzuli WHERE a varují před smazáním celé tabulky.

PostgreSQL Odstranit řádky z výběru

Smazat dotaz v PostgreSQL

Jedno Příkaz DELETE in PostgreSQL se používá k odstranění jednoho nebo více záznamů z tabulky. Chcete-li z tabulky odstranit pouze vybrané řádky, PostgreSQL umožňuje kombinovat příkaz DELETE s klauzulí WHERE; jinak smaže všechny záznamy v tabulce.

PostgreSQL Syntaxe dotazu pro odstranění

Příkaz DELETE lze definovat pomocí následující syntaxe:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

parametry

K dispozici jsou následující parametry:

  • s dotazemKlauzule WITH umožňuje odkazovat na jeden nebo více poddotazů podle názvu uvnitř dotazu DELETE.
  • název-tabulky: název tabulky, ze které mají být záznamy vymazány.
  • přezdívka: náhrada za název cílové tabulky.
  • seznam použití: tabulkové výrazy, které umožňují použití sloupců z jiných tabulek v klauzuli WHERE.
  • podmínky): volitelné. Toto jsou podmínky, které musí být splněny pro smazání záznamů. Pokud tato část není uvedena, budou smazány všechny záznamy s názvy tabulek.
  • jméno kurzoru: kurzor, který se má použít v podmínce WHERE CURRENT OF. Poslední řádek načtený tímto kurzorem bude smazán.
  • výstupní-výrazvýraz, který má být zpracován a vrácen příkazem DELETE po smazání každého řádku.
  • název-výstupu: název, který se má použít pro vrácený sloupec.

Všimněte si, že protože příkaz DELETE smaže celý řádek, není nutné zadávat názvy sloupců.

PostgreSQL Smazat dotaz s jednou podmínkou

Příkaz DELETE lze použít s jedinou podmínkou, která se nastavuje pomocí klauzule WHERE. Uvažujme tabulku Price s následujícími daty:

Cena:

PostgreSQL Smazat dotaz s jednou podmínkou

Smažeme záznam s ID 4:

DELETE FROM Price
WHERE id = 4;

Výše uvedený příkaz smaže záznamy, jejichž ID je 4. Potvrdíme, zda bylo smazání úspěšné:

PostgreSQL Smazat dotaz s jednou podmínkou

Řádek s ID 4 byl smazán.

Odstranit dotaz se dvěma podmínkami

Jedno PostgreSQL Příkaz DELETE může také obsahovat dvě podmínky. Tyto dvě podmínky by měly být spojeny operátorem AND. Použijeme následující tabulku:

Cena:

PostgreSQL Odstranit dotaz se dvěma podmínkami

Zvažte příklad uvedený níže:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Ve výše uvedeném příkazu mažeme řádek, ve kterém je ID 3 a cena 300. Nyní můžeme dotazovat tabulku:

SELECT * FROM Price;

To vrátí následující:

PostgreSQL Odstranit dotaz se dvěma podmínkami

Záznam s ID 3 a cenou 300 byl smazán.

PostgreSQL Smazat dotaz pomocí podmínky EXISTS

S hodinkami EXISTUJE podmínku, můžete příkaz DELETE zkomplikovat. Někdy může být potřeba odstranit záznamy v jedné tabulce na základě záznamů v jiné tabulce.

Protože klauzule FROM neumožňuje při mazání vypsat záznamy z více než jedné tabulky, klauzule EXISTS se stává velmi užitečnou. Máme následující dvě tabulky:

Rezervovat:

PostgreSQL Smazat dotaz pomocí podmínky EXISTS

Cena:

PostgreSQL Smazat dotaz pomocí podmínky EXISTS

Poté můžeme spustit následující dotaz:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Příkaz odstraní řádky z tabulky Book, které mají odpovídající ID v tabulce Price s cenou nižší než 250.

Tabulka knih je nyní následující:

PostgreSQL Smazat dotaz pomocí podmínky EXISTS

Záznam s ID 1 byl smazán.

Jak smazat řádek v PostgreSQL pomocí pgAdmin

Stejné dotazy na odstranění lze také spustit vizuálně prostřednictvím rozhraní pgAdmin podle následujících kroků:

S jednou podmínkou

Krok 1) Přihlaste se ke svému účtu pgAdmin. Otevřete pgAdmin a přihlaste se ke svému účtu pomocí svých přihlašovacích údajů.

Krok 2) Vytvořte demo databázi.

  1. Na navigační liště vlevo klikněte na Databáze.
  2. Klepněte na tlačítko Demo.

Smazat řádek v PostgreSQL pomocí pgAdmin

Krok 3) Do editoru dotazů zadejte níže uvedený dotaz:

DELETE FROM Price
WHERE id = 4;

Krok 4) Klepněte na tlačítko Spustit.

Smazat řádek v PostgreSQL pomocí pgAdmin

Krok 5) Zkontrolujme, zda byl řádek smazán:

Smazat řádek v PostgreSQL pomocí pgAdmin

Se dvěma podmínkami

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. Klepněte na tlačítko Demo.

Smazat řádek v PostgreSQL pomocí pgAdmin

Krok 3) Zadejte dotaz v editoru dotazů:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Krok 4) Klepněte na tlačítko Spustit.

Smazat řádek v PostgreSQL pomocí pgAdmin

Krok 5) Zkontrolujeme, zda bylo smazání úspěšné:

Smazat řádek v PostgreSQL pomocí pgAdmin

Pomocí podmínky EXISTS

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. Klepněte na tlačítko Demo.

Smazání řádku pomocí podmínky EXISTS v pgAdmin

Krok 3) Zadejte dotaz v editoru dotazů:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Krok 4) Klepněte na tlačítko Spustit.

Smazání řádku pomocí podmínky EXISTS v pgAdmin

Krok 5) Zkontrolujeme, zda bylo smazání úspěšné:

Smazání řádku pomocí podmínky EXISTS v pgAdmin

Stáhněte si databázi použitou v tomto kurzu

Nejčastější dotazy

Funkce TRUNCATE okamžitě odstraní všechny řádky a vynuluje úložiště, ale ignoruje spouštěče WHERE a spouštěče pro jednotlivé řádky. Funkce DELETE odstraní vybrané řádky pomocí klauzule WHERE, spustí spouštěče řádků a lze ji v rámci transakce vrátit zpět.

Přidejte klauzuli USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Spojí druhou tabulku a smaže odpovídající řádky, což dává stejný výsledek jako EXISTS s jasnější syntaxí ve stylu spojení.

RETURNING vyvolá sloupce z řádků, které byly právě smazány ve stejném příkazu. Zapište DELETE FROM Price WHERE id = 4 RETURNING * a PostgreSQL vrací odstraněná data, aby aplikace mohly změnu zaznamenat nebo potvrdit.

Ano. Zabalte DELETE do transakce s příkazem BEGIN a poté spusťte ROLLBACK pro její vrácení zpět nebo COMMIT pro její zachování. Dokud neprovedete commit, lze odstraněné řádky obnovit, což chrání před nechtěným smazáním.

Ponechte jednu kopii na skupinu pomocí skrytého sloupce ctid: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Tím se odstraní duplicitní řádky a zároveň se zachová jeden záznam.

Nejprve spusťte stejný filtr jako u SELECT, nebo otevřete transakci s BEGIN a pomocí RETURNING zkontrolujte dotčené řádky. RevZobrazení výsledku WHERE před příkazem COMMIT zabrání smazání více řádků, než bylo zamýšleno.

Asistenti s umělou inteligencí překládají pravidla v jednoduché angličtině do příkazu DELETE se správnou klauzulí WHERE, navrhují EXISTS nebo USING pro mazání napříč tabulkami a označují příkazy, kterým chybí podmínka, jež by vymazala celou tabulku.

Ano. AI Copilot kontroluje každý příkaz DELETE, varuje, pokud není přítomna klauzule WHERE, a doporučuje transakci nebo náhled RETURNING, čímž snižuje riziko nechtěného smazání celé tabulky.

Shrňte tento příspěvek takto: