UPDATE с FROM и обновления в стиле JOIN
Обновляйте строки значениями из другой таблицы с помощью UPDATE ... FROM (PostgreSQL) и стандартного оператора MERGE
«UPDATE с FROM и обновления в стиле JOIN» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Базовый UPDATE
Изменить значения в подходящих строках:
UPDATE users SET full_name = 'Alice Adams' WHERE id = 1;Несколько столбцов
Список SET через запятую:
UPDATE users
SET full_name = 'Alice', last_login = NOW(), visits = visits + 1
WHERE id = 1;Обновление многих строк
Просто выберите больше строк с помощью WHERE:
UPDATE orders SET status = 'archived'
WHERE created_at < NOW() - INTERVAL '5 years';UPDATE с подзапросом
Вычислить новое значение с помощью другого запроса:
UPDATE products
SET review_count = (
SELECT COUNT(*) FROM reviews WHERE reviews.product_id = products.id
);UPDATE … FROM (PostgreSQL)
Обновление в стиле JOIN — получить значения из другой таблицы:
UPDATE products p
SET stock = i.qty
FROM inventory i
WHERE i.product_id = p.id;UPDATE … FROM с несколькими таблицами
Список FROM может включать несколько таблиц:
UPDATE invoices inv
SET tax_rate = r.rate
FROM users u
JOIN rates r ON r.country = u.country
WHERE inv.user_id = u.id;Стандартный SQL: UPDATE … FROM через коррелированный подзапрос
Переносимый эквивалент (но более медленный):
UPDATE products p
SET stock = (SELECT qty FROM inventory i WHERE i.product_id = p.id);MERGE для INSERT/UPDATE/DELETE
PostgreSQL 15+ поддерживает MERGE для объединённых операций — см. урок об UPSERT.
RETURNING в UPDATE
Получить обновлённые строки за одно обращение к базе данных:
UPDATE orders SET status = 'shipped', shipped_at = NOW()
WHERE id = $1
RETURNING id, status, shipped_at;Обновление с помощью CASE
Условные новые значения:
UPDATE orders
SET status = CASE
WHEN paid_at IS NOT NULL THEN 'paid'
WHEN created_at < NOW() - INTERVAL '24h' THEN 'expired'
ELSE status
END;Остерегайтесь отсутствующего WHERE
UPDATE users SET active = false; обновляет КАЖДУЮ строку. В рабочей среде:
- Сначала выполните SELECT, чтобы проверить количество строк
- Заключите операцию в транзакцию и проверьте результат перед COMMIT
- Используйте
BEGIN; ...; SELECT count(*) FROM users WHERE active = false; ROLLBACK;для пробного запуска
Производительность UPDATE
UPDATE создаёт новую версию строки и помечает старую как удалённую (MVCC). Таблицы, в которых часто выполняются обновления, могут разрастаться — это рассматривается в уроке о VACUUM/MVCC.
Итоги
UPDATE … FROM — это обновление в стиле JOIN, которое упрощает массовое исправление данных.
- Всегда используйте WHERE — никогда о нём не забывайте
- Используйте RETURNING для проверки
- Тестируйте в транзакции с ROLLBACK
Быстрая проверка
Какой синтаксис UPDATE позволяет обратиться к другой таблице в PostgreSQL?
Часто задаваемые вопросы
Урок «UPDATE с FROM и обновления в стиле JOIN» бесплатный?
Да — полный текст урока «UPDATE с FROM и обновления в стиле JOIN» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «UPDATE с FROM и обновления в стиле JOIN»?
Обновляйте строки значениями из другой таблицы с помощью UPDATE ... FROM (PostgreSQL) и стандартного оператора MERGE Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «UPDATE с FROM и обновления в стиле JOIN»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- INSERT с несколькими строками
- UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
- UPDATE с FROM и обновления в стиле JOIN
- DELETE с USING и безопасные шаблоны