W tym samouczku omówimy różne sposoby aktualizowania wierszy w tabeli za pomocą SQL, przechodząc od bardziej ogólnych aktualizacji do bardziej szczegółowych metod.
Pełna aktualizacja
Jeśli każde pole musi zostać zaktualizowane do tej samej wartości, możesz to zrobić za pomocą prostej UPDATE
polecenie.
UPDATE table
SET col = new_value;
Aktualizacja warunkowa
Aby wykonać aktualizację warunkową w zależności od tego, czy bieżąca wartość kolumny pasuje do warunku, możesz dodać WHERE
klauzula, która to określa. Baza danych najpierw znajdzie wiersze, które pasują do WHERE
klauzuli, a następnie wykonaj aktualizacje tylko w tych wierszach.
UPDATE table
SET col = new_value
WHERE col = old_value;
Aby to rozwinąć, możesz dodać wszystko do WHERE
klauzula, którą lubisz, o ile jest to prawidłowe wyrażenie. Aby przeprowadzić aktualizację na podstawie wartości innej kolumny w tej samej tabeli, możesz wykonać następujące czynności:
UPDATE table
SET col = new_value
WHERE other_col = some_other_value;
Ponieważ WHERE
klauzula może zawierać dowolne poprawne wyrażenie, masz również możliwość dokonywania aktualizacji, w których wiele kolumn spełnia kryteria
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;
Jak widać, możesz rozwinąć WHERE
klauzuli tyle, ile chcesz, aby przefiltrować wiersze w celu aktualizacji do tego, czego potrzebujesz.
Co się stanie, jeśli chcesz zaktualizować wiersze w jednej tabeli na podstawie stanu innej tabeli? To pytanie prowadzi do kilku różnych sposobów, w jakie możesz to zrobić.
Ponieważ WHERE
klauzula może zawierać dowolne poprawne wyrażenie, możesz użyć podzapytania:
UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);
Możesz także użyć podzapytania w SET
część instrukcji, jeśli chcesz ustawić kolumnę na wartość z innej tabeli
UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
Być może łatwiejszym sposobem jest określenie wielu tabel po UPDATE
klauzula. Tylko SET
wyrażenie wykona aktualizacje, ale wyświetlenie dodatkowych tabel pozwoli na ich uwzględnienie.
UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;
Podobnie do rozwinięcia WHERE
klauzula, liczba stołów może zostać rozszerzona, aby objąć wszystkie potrzebne stoły, jeśli masz kilka stołów, które trzeba połączyć.