メインコンテンツにスキップ
モジュール 8 · レッスン 2 / 4コース内の 30/57~10 min
モジュールのレッスン (2/4)

更新と削除: UPDATE と DELETE

UPDATE は既存の行を変更します。 DELETE はそれらを削除します。両者が共有するのは、 同じ基本的な黄金律: WHERE 句によって どの行が決定されるか 触れること。これを忘れると、テーブル全体を変更/削除することになります。

アップデート

SQL
UPDATE tabella
SET    colonna1 = nuovo_valore,
       colonna2 = altra_espressione
WHERE  condizione;

例:

SQL
-- Aumenta del 10% i prezzi di tutti i prodotti della categoria 5 (Computer):
UPDATE products
SET    price = price * 1.10
WHERE  category_id = 5;

-- Aggiorna due colonne contemporaneamente:
UPDATE orders
SET    status     = 'shipped',
       shipped_at = NOW()
WHERE  id = 12;

SET col = espressione: 式は 行の現在の行を参照できます 値 (price * 1.10)、NOW()、NULL、または サブクエリ。

消去

SQL
DELETE FROM tabella
WHERE  condizione;

例:

SQL
-- Cancella tutte le recensioni con rating < 3:
DELETE FROM reviews
WHERE  rating < 3;

-- Cancella un ordine specifico:
DELETE FROM orders WHERE id = 999;

ここにも戻ってきます

INSERT と同様、UPDATE および DELETE も RETURNING を受け入れます。 彼らが行動したこと:

SQL
DELETE FROM reviews
WHERE  rating < 3
RETURNING id, customer_id, rating;

削除/変更された内容を一発でログに記録するのに便利です。

外部キーと削除

外部キーを介して別のテーブルによって参照されている行を削除しようとしています エラーが発生します:

SQL
DELETE FROM customers WHERE id = 1;
-- ERROR: update or delete on table "customers" violates foreign key constraint
-- on table "orders"

解決策: 最初に子行を削除するか、次のように FK を定義します。 ON DELETE CASCADE テーブルを作成するとき (これについては、「 次の DDL レッスン)。

あなたの番です

運動#sql.m8.l2.e1
試行回数: 0読み込み中…

カテゴリ 5 (コンピュータ) のすべての製品の価格を 10% 値上げします。単一の UPDATE ステートメント。

エディターを読み込み中…
ヒントを表示

SET の右側の式は、列自体を参照できます (price * 1.10)。

3 回の試行後に解決策が利用可能になります

復習演習

運動#sql.m8.l2.e2
試行回数: 0読み込み中…

評価が 3 未満のレビュー (非常に否定的なレビュー) をすべて削除します。

エディターを読み込み中…
ヒントを表示

WHERE 評価 < 3。

3 回の試行後に解決策が利用可能になります