0Pricing
SQL Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. INSERT с несколькими строками
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE с FROM и обновления в стиле JOIN
  4. DELETE с USING и безопасные шаблоны
← Назад к SQL Academy