พนักงานและผู้จัดการ
ตัวอย่างลำดับชั้นแบบคลาสสิก
พนักงานและผู้จัดการ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเชื่อมตารางกับตัวเองคืออะไร
การเชื่อมตารางกับตัวเอง คือการเชื่อมตารางเข้ากับตัวมันเอง แนวคิดนี้อาจฟังดูแปลก แต่มีประโยชน์อย่างมากเมื่อแถวในตารางมีความสัมพันธ์กับแถวอื่นในตารางเดียวกัน
ตัวอย่างคลาสสิกคือตาราง พนักงาน ซึ่งพนักงานแต่ละคนอาจมีผู้จัดการ และผู้จัดการคนนั้นก็เป็นพนักงานที่เก็บอยู่ในตารางเดียวกัน
ตารางพนักงาน
มาสร้างตาราง employees แบบง่าย ๆ กัน แต่ละแถวมี id, name และ manager_id ที่ชี้กลับไปยังอีกแถวหนึ่งในตารางเดียวกัน
เมื่อ manager_id เป็น NULL พนักงานคนนั้นจะไม่มีผู้จัดการ และอยู่บนสุดของลำดับชั้น (เช่น CEO)
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
manager_id INT REFERENCES employees(id)
);การเพิ่มข้อมูลตัวอย่าง
มาเติมข้อมูลลำดับชั้นของบริษัทขนาดเล็กลงในตารางกัน Alice เป็น CEO (ไม่มีผู้จัดการ) ส่วน Bob และ Carol ขึ้นตรงต่อ Alice ทั้งคู่ ขณะที่ Dave และ Eve ขึ้นตรงต่อ Bob
INSERT INTO employees (id, name, manager_id) VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);การเรียกดูข้อมูลโดยไม่ใช้การเชื่อมตาราง
หากเพียงเลือกแถวทั้งหมด เราจะเห็นตัวเลข manager_id ดิบ ๆ ไม่ใช่ชื่อผู้จัดการ ซึ่งอ่านได้ยากและไม่มีประโยชน์สำหรับผู้ใช้ปลายทาง
SELECT id, name, manager_id
FROM employees;การเขียนการเชื่อมตารางกับตัวเอง
หากต้องการแสดงชื่อผู้จัดการถัดจากพนักงานแต่ละคน ให้เชื่อมตาราง employees เข้ากับตัวมันเอง และกำหนดนามแฝงที่ต่างกันให้แต่ละสำเนา: e แทนพนักงาน และ m แทนผู้จัดการ
เงื่อนไขการเชื่อมตารางจะเชื่อม manager_id ของพนักงานเข้ากับ id ของผู้จัดการ
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;การรวมพนักงานที่ไม่มีผู้จัดการ
INNER JOIN ด้านบนซ่อน Alice ไว้ เนื่องจาก manager_id ของเธอเป็น NULL และไม่มีแถวที่ตรงกันทางด้านขวา หากต้องการรวมทุกคนไว้ (แม้แต่พนักงานระดับบนสุด) ให้ใช้ LEFT JOIN
Alice จะปรากฏขึ้นพร้อมค่า NULL ในคอลัมน์ผู้จัดการ
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;การใช้ COALESCE เพื่อให้อ่านง่ายขึ้น
ค่า NULL ในคอลัมน์ผู้จัดการอาจทำให้สับสน สามารถใช้ COALESCE แทนค่า NULL ด้วยป้ายกำกับที่อ่านเข้าใจง่าย เช่น 'ไม่มีผู้จัดการ' เพื่อให้ผลลัพธ์สำหรับรายงานดูสะอาดตาขึ้น
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY manager, employee;การค้นหาผู้ใต้บังคับบัญชาโดยตรง
สามารถสลับแนวทางของแบบสอบถามเพื่อถามว่า ใครขึ้นตรงต่อผู้จัดการคนใดคนหนึ่ง สิ่งนี้เรียกว่าการค้นหาผู้ใต้บังคับบัญชาโดยตรง ในที่นี้เราจะค้นหาพนักงานทั้งหมดที่ขึ้นตรงต่อ Alice (โดยมี ID เท่ากับ 1)
SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;การนับผู้ใต้บังคับบัญชาต่อผู้จัดการแต่ละคน
การรวมการเชื่อมตารางกับตัวเองเข้ากับ GROUP BY และ COUNT ช่วยให้เห็นว่าผู้จัดการแต่ละคนมีผู้ใต้บังคับบัญชาโดยตรงกี่คน ซึ่งมีประโยชน์สำหรับการวิเคราะห์ภาระงาน
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;ลำดับชั้นสองระดับ
หากต้องการเห็นลำดับชั้นสองระดับพร้อมกัน ได้แก่ พนักงาน ผู้จัดการของพนักงาน และผู้จัดการของผู้จัดการ สามารถเชื่อมตารางเป็นครั้งที่สามได้ การเชื่อมแต่ละครั้งจะเพิ่มลำดับชั้นขึ้นอีกหนึ่งระดับ
SELECT
e.name AS employee,
m.name AS manager,
gm.name AS grand_manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
LEFT JOIN employees gm ON m.manager_id = gm.id;ข้อจำกัดของการเชื่อมตารางกับตัวเอง
การเชื่อมตารางกับตัวเองทำงานได้ดีสำหรับลำดับชั้นตื้นที่มีจำนวนระดับคงที่ (1–3 ระดับ) หากไม่ทราบความลึกหรือลำดับชั้นมีความลึกไม่จำกัด เช่น แผนผังองค์กรที่อาจลึกถึง 10 ระดับ จำเป็นต้องใช้ CTE แบบเรียกซ้ำแทน
สำหรับแบบสอบถามพนักงานและผู้จัดการที่ใช้งานจริงส่วนใหญ่ แนวทางการเชื่อมตารางกับตัวเองที่ครอบคลุมในบทเรียนนี้เป็นเครื่องมือที่เหมาะสม
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับการเชื่อมตารางกับตัวเองและลำดับชั้นพนักงานกับผู้จัดการ
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้วิธีใช้การเชื่อมตารางกับตัวเองเพื่อจำลองและเรียกดูข้อมูลลำดับชั้นพนักงานกับผู้จัดการแบบคลาสสิกที่เก็บอยู่ในตารางเดียว
ประเด็นสำคัญ:
- การเชื่อมตารางกับตัวเองเชื่อมตารางเข้ากับตัวมันเองโดยใช้นามแฝงที่แตกต่างกันสองชื่อ
- เงื่อนไขการเชื่อมตารางจะเชื่อม
manager_idเข้ากับidในตารางเดียวกัน - ใช้ INNER JOIN เพื่อดูเฉพาะพนักงานที่มีผู้จัดการ และใช้ LEFT JOIN เพื่อรวมทุกคนไว้
- COALESCE สามารถแทนค่าผู้จัดการที่เป็น NULL ด้วยป้ายกำกับที่อ่านเข้าใจง่าย
- สำหรับลำดับชั้นที่มีความลึกไม่จำกัด ให้พิจารณาใช้ CTE แบบเรียกซ้ำ
คำถามที่พบบ่อย
บทเรียน “พนักงานและผู้จัดการ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พนักงานและผู้จัดการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พนักงานและผู้จัดการ”
ตัวอย่างลำดับชั้นแบบคลาสสิก คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “พนักงานและผู้จัดการ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเชื่อมตารางกับตัวเองคืออะไร
- พนักงานและผู้จัดการ
- การเปรียบเทียบแถวในตารางเดียวกัน
- ข้อจำกัดของการเชื่อมตารางกับตัวเอง