คำค้นย่อยแบบสเกลาร์ แถว และตาราง
ใช้คำค้นย่อยที่คืนค่าค่าเดียว แถวเดียว หรือตารางเต็ม และวางไว้ในส่วนคำสั่ง SELECT, FROM และ WHERE
คำค้นย่อยแบบสเกลาร์ แถว และตาราง เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คำสั่งย่อยคืออะไร
คำสั่งย่อย คือ SELECT ที่อยู่ภายในคำสั่ง SQL อื่น ซึ่งอาจเป็น:
- คำสั่งย่อยแบบ สเกลาร์ — คืนค่าค่าเดียว
- คำสั่งย่อยแบบ แถว — คืนค่าแถวเดียว
- คำสั่งย่อยแบบ ตาราง — คืนค่ารีเลชัน (ใช้ใน FROM)
คำสั่งย่อยแบบสเกลาร์
ใช้ในตำแหน่งที่ต้องการค่าหนึ่งค่า:
SELECT id, total,
total - (SELECT AVG(total) FROM orders) AS diff_from_avg
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';คำสั่งย่อยแบบแถว
คืนค่าแถวหนึ่งแถวที่มีหลายคอลัมน์ พบได้น้อยกว่า และส่วนใหญ่ใช้กับตัวสร้างแถว:
SELECT *
FROM orders
WHERE (status, country) = (
SELECT status, country FROM orders WHERE id = 1
);คำสั่งย่อยแบบตารางใน FROM
ปฏิบัติต่อผลลัพธ์ของคำค้นเสมือนเป็นตารางชั่วคราว:
SELECT country, AVG(big_order_total) AS avg_big
FROM (
SELECT country, total AS big_order_total
FROM orders
WHERE total > 1000
) AS sub
GROUP BY country;การตั้งชื่อแทนคำสั่งย่อยใน FROM
คำสั่งย่อยใน FROM ทุกคำสั่งต้องมีชื่อแทนใน PostgreSQL — แม้จะไม่ได้ใช้งานก็ตาม:
SELECT * FROM (SELECT 1) sub; -- "sub" requiredคำสั่งย่อยใน WHERE
กรองด้วยชุดค่าที่ได้มาจากการคำนวณ:
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE total > 100
);EXISTS / NOT EXISTS
ตรวจสอบว่าคำสั่งย่อยคืนค่าอย่างน้อยหนึ่งแถวหรือไม่:
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);คำสั่งย่อยใน SELECT
ฝังคำสั่งย่อยแบบสเกลาร์สำหรับแต่ละแถว:
SELECT id, full_name,
(SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;
-- Often readable, but a LEFT JOIN + GROUP BY is usually faster.คำสั่งย่อยในฐานะนิพจน์
คำสั่งย่อยแบบสเกลาร์ที่คืนค่ามากกว่าหนึ่งแถวจะทำให้เกิดข้อผิดพลาด:
SELECT (SELECT email FROM users);
-- ERROR: more than one row returned by a subquery used as an expressionเมื่อใดควรปรับคำสั่งย่อยเป็น JOIN
นิพจน์ "x IN (SELECT...)" หลายกรณีสามารถเขียนใหม่เป็น JOIN ได้ เลือกรูปแบบที่อ่านเข้าใจง่ายกว่า ตัววางแผนสมัยใหม่มักสร้างแผนเดียวกัน
คำสั่งย่อยเทียบกับ CTE
หากต้องใช้คำสั่งย่อยเดิมสองครั้ง ให้ตั้งชื่อด้วย CTE — จะกล่าวถึงในบทเรียนถัดไป
สรุปทบทวน
คำสั่งย่อยมีสามรูปแบบ
- แบบสเกลาร์ใน SELECT/WHERE
- แบบแถวในการทดสอบความเท่ากัน
- แบบตารางใน FROM
- ใช้ EXISTS สำหรับการทดสอบว่า "ตรงกันรายการใดรายการหนึ่ง"
ตรวจสอบความเข้าใจ
คำสั่งย่อยรูปแบบใดใช้ภายในส่วนคำสั่ง FROM เป็นตารางชั่วคราว
คำถามที่พบบ่อย
บทเรียน “คำค้นย่อยแบบสเกลาร์ แถว และตาราง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คำค้นย่อยแบบสเกลาร์ แถว และตาราง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คำค้นย่อยแบบสเกลาร์ แถว และตาราง”
ใช้คำค้นย่อยที่คืนค่าค่าเดียว แถวเดียว หรือตารางเต็ม และวางไว้ในส่วนคำสั่ง SELECT, FROM และ WHERE คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “คำค้นย่อยแบบสเกลาร์ แถว และตาราง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คำค้นย่อยแบบสเกลาร์ แถว และตาราง
- คำค้นย่อยแบบสัมพันธ์กับแบบไม่สัมพันธ์
- นิพจน์ตารางร่วม (WITH)
- CTE แบบเวียนเกิดสำหรับลำดับชั้น