การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง
เหตุใดจึงอ้างอิงนามแฝงของ SELECT ใน WHERE ไม่ได้ และผู้สัมภาษณ์ทดสอบขอบเขตของนามแฝงอย่างไร
การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
การฉายผลลัพธ์: การเลือกคอลัมน์
การเลือกว่าคำสั่งสอบถามจะส่งคืนคอลัมน์ใดเรียกว่าการฉายผลลัพธ์ ซึ่งเป็นสิ่งที่คุณทำทุกครั้งที่เขียน SELECT ในโค้ดจริงควรระบุชื่อคอลัมน์อย่างชัดเจน และเก็บ SELECT * ไว้ใช้สำรวจข้อมูลอย่างรวดเร็ว
SELECT id, first_name, email
FROM employees;เหตุใดผู้สัมภาษณ์จึงไม่ชอบ SELECT *
เหตุใดผู้สัมภาษณ์จึงไม่ชอบ SELECT * ในโค้ดของแอปพลิเคชัน เพราะคำสั่งนี้เปราะบาง ลำดับคอลัมน์อาจเปลี่ยนได้ สิ้นเปลืองทรัพยากรรับส่งข้อมูล ทำให้การใช้ดัชนีมีประสิทธิภาพลดลง และบดบังสิ่งที่คุณต้องการจริง ๆ ดังนั้นควรระบุชื่อคอลัมน์ให้ชัดเจน 👍
การตั้งชื่อแทนคอลัมน์ด้วย AS
ชื่อแทนใช้เปลี่ยนชื่อคอลัมน์ในผลลัพธ์ ควรใช้ AS เพื่อให้ชัดเจน โดยเฉพาะกับคอลัมน์ที่คำนวณ เพราะช่วยเปลี่ยนนิพจน์ที่อ่านยากอย่าง salary * 12 ให้มีหัวคอลัมน์ที่สะอาดและอ่านง่าย
SELECT first_name AS name,
salary * 12 AS annual_salary
FROM employees;การใส่เครื่องหมายคำพูดให้ชื่อแทนที่มีช่องว่าง
หากชื่อแทนมีช่องว่างหรือเป็นคำสงวน คุณต้องใส่เครื่องหมายคำพูด วิธีที่ใช้ได้ทั่วไปและเป็นมาตรฐานคือเครื่องหมายอัญประกาศคู่ เคล็ดลับคือใช้ชื่อที่เขียนโดยคั่นคำด้วยขีดล่าง แล้วไม่ต้องใส่เครื่องหมายคำพูดเลย
SELECT salary AS "Annual Pay"
FROM employees;จุดผิดพลาดสำคัญ: ขอบเขตของชื่อแทนใน WHERE
นี่คือจุดที่มักออกข้อสอบมากที่สุด: กำหนดชื่อแทนใน SELECT แล้วนำไปกรองใน WHERE ซึ่งจะล้มเหลว เพราะ WHERE ทำงานก่อน SELECT ดังนั้นชื่อแทนนั้นจึงยังไม่มีอยู่
-- This raises an error
SELECT salary * 12 AS annual_salary
FROM employees
WHERE annual_salary > 100000;เหตุผล: ลำดับการทำงานเชิงตรรกะ
วิธีแก้คือทำความเข้าใจ ลำดับส่วนคำสั่งเชิงตรรกะ: FROM, WHERE, GROUP BY, HAVING, SELECT แล้วจึง ORDER BY เนื่องจาก SELECT ทำงานเกือบเป็นลำดับสุดท้าย ส่วนคำสั่งก่อนหน้านั้นจึงมองไม่เห็นนามแฝงของ SELECT
วิธีแก้ที่ 1: เขียนนิพจน์ซ้ำ
วิธีแก้ที่ใช้ได้กว้างที่สุดนั้นเรียบง่ายมาก: เพียง เขียนนิพจน์ซ้ำใน WHERE แทนการใช้นามแฝง วิธีนี้อาจยืดเยื้อเล็กน้อย แต่ใช้ได้กับทุกฐานข้อมูลและใช้ได้ทุกครั้ง
SELECT salary * 12 AS annual_salary
FROM employees
WHERE salary * 12 > 100000;วิธีแก้ที่ 2: ครอบด้วยแบบสอบถามย่อยหรือ CTE
หากการเขียนนิพจน์ยาวซ้ำดูไม่สวยงาม ให้คำนวณนิพจน์นั้นใน แบบสอบถามย่อยหรือ CTE ก่อน จากนั้นนามแฝงจะกลายเป็นคอลัมน์จริง ทำให้ WHERE ด้านนอกกรองด้วยนามแฝงนั้นได้
SELECT *
FROM (
SELECT first_name, salary * 12 AS annual_salary
FROM employees
) t
WHERE annual_salary > 100000;จุดที่นามแฝงใช้ได้ (ARE): ORDER BY
ข่าวดีคือ ORDER BY สามารถใช้นามแฝงของ SELECT ได้ เพราะทำงานหลัง SELECT ดังนั้น WHERE, GROUP BY และ HAVING จึงมองไม่เห็นนามแฝง แต่ ORDER BY มองเห็นได้
SELECT first_name, salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;ความแตกต่างของไวยากรณ์ที่ควรกล่าวถึง
ความแตกต่างที่ควรกล่าวถึงคือ MySQL อนุญาตให้ใช้นามแฝงใน GROUP BY และ HAVING ได้อย่างยืดหยุ่น ขณะที่ Postgres และ SQL Server ยึดตามมาตรฐาน ให้ใช้ลำดับการทำงานเชิงตรรกะเป็นเหตุผล แล้วจึงกล่าวถึงข้อยกเว้นนี้
นามแฝงตารางกับนามแฝงคอลัมน์
ไม่ควรสับสนระหว่างสองสิ่งนี้ นามแฝงตารางใช้ย่อชื่อตารางและมองเห็นได้ทุกที่ แม้แต่ใน WHERE ส่วนนามแฝงคอลัมน์ใช้เปลี่ยนชื่อผลลัพธ์และมองไม่เห็นใน WHERE ซึ่งตรงกันข้ามทุกประการ
SELECT e.first_name, e.salary AS pay
FROM employees AS e
WHERE e.salary > 50000;ตรวจสอบอย่างรวดเร็ว
ทดสอบจุดผิดพลาดหลัก
สรุปทบทวน
สรุป: ควรระบุคอลัมน์อย่างชัดเจนแทนการใช้ SELECT * และตั้งนามแฝงด้วย AS นามแฝงของ SELECTมองไม่เห็นใน WHERE/GROUP BY/HAVING แต่ใช้ได้ใน ORDER BY วิธีแก้คือเขียนนิพจน์ซ้ำหรือใช้ CTE
คำถามที่พบบ่อย
บทเรียน “การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง”
เหตุใดจึงอ้างอิงนามแฝงของ SELECT ใน WHERE ไม่ได้ และผู้สัมภาษณ์ทดสอบขอบเขตของนามแฝงอย่างไร คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง
- คอลัมน์คำนวณและลำดับความสำคัญของนิพจน์
- DISTINCT เทียบกับ GROUP BY เพื่อหาค่าที่ไม่ซ้ำกัน
- นิพจน์ CASE ใน SELECT