I dette selvstudie gennemgår vi de forskellige måder at opdatere rækker i en tabel ved hjælp af SQL, der går fra mere generelle opdateringer til mere specifikke metoder.
Fuld opdatering
Hvis hvert felt skal opdateres til den samme værdi, kan du gøre det ved at bruge en simpel UPDATE
kommando.
UPDATE table
SET col = new_value;
Betinget opdatering
For at lave en betinget opdatering afhængigt af om den aktuelle værdi af en kolonne matcher betingelsen, kan du tilføje en WHERE
klausul, der specificerer dette. Databasen vil først finde rækker, der matcher WHERE
klausul og derefter kun udføre opdateringer på disse rækker.
UPDATE table
SET col = new_value
WHERE col = old_value;
For at udvide dette kan du tilføje hvad som helst til WHERE
klausul du kan lide, så længe det er et gyldigt udtryk. Så for at udføre en opdatering baseret på værdien af en anden kolonne i samme tabel, kan du udføre følgende:
UPDATE table
SET col = new_value
WHERE other_col = some_other_value;
Siden WHERE
klausul kan indeholde ethvert gyldigt udtryk, du har også mulighed for at lave opdateringer, hvor flere kolonner opfylder kriterierne
UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;
UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;
Som du kan se, kan du udvide WHERE
klausul så meget som du vil for at filtrere rækkerne ned for at opdatere til det, du har brug for.
Hvad sker der nu, hvis du vil opdatere rækker i én tabel baseret på tilstanden for en anden tabel? Dette spørgsmål fører til et par forskellige måder, du kan gøre dette på.
Siden WHERE
klausul kan indeholde et hvilket som helst gyldigt udtryk, du kan bruge en underforespørgsel:
UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);
Du kan også bruge en underforespørgsel i SET
del af sætningen, hvis du vil indstille kolonnen til en værdi i en anden tabel
UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
Måske er en nemmere måde at angive flere tabeller efter UPDATE
klausul. Kun SET
expression vil udføre opdateringer, men en liste over yderligere tabeller gør det muligt at inkludere tabellerne.
UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;
På samme måde som at udvide WHERE
klausul, kan mængden af tabeller udvides til at omfatte alle de tabeller, du har brug for, hvis du har flere tabeller, der skal samles på.