Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดึง Username จาก ID ผ่าน JOIN 2 ตารางใน MySQL

สถานการณ์: 2 ตาราง เชื่อมด้วย Foreign Key

  • demo77: User Table (userid PK, username)
  • demo78: Country Table (id PK, FK → demo77.userid)

สร้างตารางพร้อม FK

CREATE TABLE demo77 (
    userid INT NOT NULL PRIMARY KEY,
    username VARCHAR(20)
);

CREATE TABLE demo78 (
    id INT NOT NULL PRIMARY KEY,
    countryname VARCHAR(20),
    CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES demo77(userid)
);

ข้อมูล

demo77:

+--------+----------+
| userid | username |
+--------+----------+
| 1      | John     |
| 2      | Bob      |
| 3      | Mike     |
+--------+----------+

demo78:

+----+-------------+
| id | countryname |
+----+-------------+
| 1  | US          |
| 2  | AUS         |
+----+-------------+

คำสั่ง JOIN: ดึง Username

SELECT username 
FROM demo77
JOIN demo78 ON demo77.userid = demo78.id;

ผลลัพธ์

+----------+
| username |
+----------+
| John     |
| Bob      |
+----------+

Mike (id=3) ไม่ออกมา เพราะไม่มีใน demo78 (INNER JOIN)

ประเภท JOIN และผลลัพธ์

JOIN TypeSQLผลลัพธ์
INNER JOINJOIN ... ONJohn, Bob (Match ทั้งคู่)
LEFT JOINLEFT JOIN ... ONJohn, Bob, Mike (User ทั้งหมด + Country ถ้ามี)
RIGHT JOINRIGHT JOIN ... ONJohn, Bob (Country ทั้งหมด + User ถ้ามี)

LEFT JOIN: แสดง User ทั้งหมด

SELECT u.username, c.countryname
FROM demo77 u
LEFT JOIN demo78 c ON u.userid = c.id;
+----------+-------------+
| username | countryname |
+----------+-------------+
| John     | US          |
| Bob      | AUS         |
| Mike     | NULL        |
+----------+-------------+

Best Practices

  • ใช้ Table Aliases (u, c) อ่านง่าย
  • ระบุคอลัมน์ชัดเจน: SELECT u.username, c.countryname
  • Index บน FK Column (demo78.id) — PK มี Index อยู่แล้ว
  • ใช้ INNER JOIN คำสั่งเต็ม แทน JOIN เพื่อความชัดเจน

Foreign Key Constraints

CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES demo77(userid)
    ON DELETE CASCADE     -- ลบ User → ลบ Country Record
    ON UPDATE CASCADE;    -- Update User ID → Update Country ID

ตรวจสอบ FK ที่มีอยู่

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = 'demo78';