UPDATE ด้วย FROM และการอัปเดตแบบ JOIN
อัปเดตแถวโดยใช้ค่าจากอีกตารางด้วย UPDATE ... FROM (PostgreSQL) และคำสั่ง MERGE มาตรฐาน
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- INSERT หลายแถว
- UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
- UPDATE ด้วย FROM และการอัปเดตแบบ JOIN
- DELETE ด้วย USING และรูปแบบที่ปลอดภัย