SQL Academy · บทเรียน

UPDATE ด้วย FROM และการอัปเดตแบบ JOIN

อัปเดตแถวโดยใช้ค่าจากอีกตารางด้วย UPDATE ... FROM (PostgreSQL) และคำสั่ง MERGE มาตรฐาน

บทเรียน 3 จาก 414 ขั้นตอน

UPDATE ด้วย FROM และการอัปเดตแบบ JOIN เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 จะสร้างเวอร์ชันใหม่ของแถวและทำเครื่องหมายเวอร์ชันเก่าว่าหมดสภาพ (MVCC) ตารางที่มีการอัปเดตบ่อยอาจมีขนาดบวม ซึ่งจะอธิบายในบทเรียน VACUUM/MVCC

สรุป

UPDATE … FROM คือการอัปเดตในรูปแบบ JOIN ที่ทำให้การแก้ไขข้อมูลจำนวนมากเป็นระเบียบ

  • ใช้ WHERE เสมอ ห้ามลืมเด็ดขาด
  • ใช้ RETURNING เพื่อตรวจสอบผล
  • ทดสอบในธุรกรรมด้วย ROLLBACK

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ไวยากรณ์ UPDATE แบบใดที่ทำให้คุณอ้างอิงอีกตารางหนึ่งใน PostgreSQL ได้

เริ่มต้นได้ฟรี

เรียนรู้ SQL ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
46
บทเรียน
183

คำถามที่พบบ่อย

บทเรียน “UPDATE ด้วย FROM และการอัปเดตแบบ JOIN” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “UPDATE ด้วย FROM และการอัปเดตแบบ JOIN” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “UPDATE ด้วย FROM และการอัปเดตแบบ JOIN”

อัปเดตแถวโดยใช้ค่าจากอีกตารางด้วย UPDATE ... FROM (PostgreSQL) และคำสั่ง MERGE มาตรฐาน คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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