0Pricing
SQL Academy · บทเรียน

คำค้นย่อยแบบสเกลาร์ แถว และตาราง

ใช้คำค้นย่อยที่คืนค่าค่าเดียว แถวเดียว หรือตารางเต็ม และวางไว้ในส่วนคำสั่ง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คำค้นย่อยแบบสเกลาร์ แถว และตาราง
  2. คำค้นย่อยแบบสัมพันธ์กับแบบไม่สัมพันธ์
  3. นิพจน์ตารางร่วม (WITH)
  4. CTE แบบเวียนเกิดสำหรับลำดับชั้น
← กลับไปที่ SQL Academy