Automatically translated.View original post

SQL Query: SELECT Comic Edition

1/16 Edited to

... Read moreนอกจากคำสั่ง SELECT ที่ใช้ “ดึงคอลัมน์ที่ต้องการ” จากตาราง (เช่น `SELECT Name FROM USERS;` หรือ `SELECT Name, Height FROM USERS;`) อีกเรื่องที่คนค้นหาคู่กันบ่อยมากคือ JOIN เพราะพอเริ่มทำงานจริง ข้อมูลมักไม่ได้อยู่ตารางเดียว จากประสบการณ์เรา เวลาเริ่มหัด SQL ใหม่ๆ จะสับสนว่า “เลือกคอลัมน์” กับ “เชื่อมตาราง” ต่างกันยังไง สรุปให้แบบจำง่ายๆ คือ SELECT = เลือกว่าจะเอาอะไรออกมา, FROM = เอามาจากโต๊ะไหน, JOIN = เอาโต๊ะอีกตัวมาต่อกันเพื่อให้ข้อมูลครบ ตัวอย่างสถานการณ์ง่ายๆ: เรามีตาราง `USERS` เก็บข้อมูลผู้ใช้ เช่น `UserId, Name, Height` แต่ชื่อแผนก/ทีมอาจอยู่ตาราง `TEAMS` เช่น `TeamId, TeamName` และใน `USERS` มีคอลัมน์ `TeamId` ไว้ชี้ว่าคนนี้อยู่ทีมไหน ถ้าเราอยากได้ “ชื่อผู้ใช้ + ชื่อทีม” เราจะใช้ JOIN แบบนี้: `SELECT u.Name, t.TeamName FROM USERS u JOIN TEAMS t ON u.TeamId = t.TeamId;` ทริคที่ช่วยให้ไม่งง: - ใส่ alias ให้ตาราง เช่น `USERS u` และ `TEAMS t` แล้วเวลาเลือกคอลัมน์ให้เขียน `u.Name` หรือ `t.TeamName` จะเห็นชัดว่ามาจากตารางไหน - เงื่อนไขหลัง `ON` คือ “จุดเชื่อม” สำคัญมาก (มักเป็น id ที่สัมพันธ์กัน) JOIN ที่ใช้บ่อยและควรรู้ 2 แบบแรก: 1) `INNER JOIN` (เขียนแค่ `JOIN` ก็เท่ากัน): เอาเฉพาะแถวที่จับคู่กันได้ทั้งสองตาราง เช่น ผู้ใช้ต้องมี TeamId ที่มีอยู่จริงใน TEAMS 2) `LEFT JOIN`: เอาทุกแถวจากตารางซ้าย (เช่น USERS) แม้บางคนจะไม่มีทีม ข้อมูลฝั่งทีมจะเป็น `NULL` ตัวอย่าง: `SELECT u.Name, t.TeamName FROM USERS u LEFT JOIN TEAMS t ON u.TeamId = t.TeamId;` อีกอย่างที่มือใหม่พลาดบ่อยคือใช้ `SELECT *` ตอน JOIN แล้วได้คอลัมน์เยอะมาก/ชื่อชนกัน (เช่นมี `Id` ทั้งสองตาราง) แนะนำให้เลือกเฉพาะคอลัมน์ที่ต้องใช้ จะอ่านผลลัพธ์ง่ายและ query เบากว่า ถ้าจะเริ่มฝึกแบบจับต้องได้ ลองตั้งโจทย์เล็กๆ จากตาราง USERS ก่อน เช่น “ดึง Name กับ Height” แล้วค่อยเพิ่มตารางที่สองเพื่อฝึก JOIN ทีละขั้น รับรองว่า SQL ไม่ยากอย่างที่คิดจริงๆ