id | name
1 | alice
2 | bob
3 | charlie
student_id | subject | grade
1 | math | a
2 | math | b
4 | science | c
SELECT students.name, grades.subject, grades.grade
FROM students
INNER JOIN grades ON students.id = grades.student_id;
Truy vấn này trả về chỉ các hàng có khớp trong cả hai bảng.
Kết quả:
name | subject | grade
--------|---------|------
alice | math | a
bob | math | b
Giải thích: Chỉ có Alice và Bob có các bản ghi khớp trong cả hai bảng.
SELECT students.name, grades.subject, grades.grade
FROM students
LEFT JOIN grades ON students.id = grades.student_id;
Truy vấn này trả về tất cả các hàng từ bảng trái (students) và các hàng khớp từ bảng phải (grades). Nếu không có khớp, các giá trị NULL được trả về cho các cột từ bảng phải.
Kết quả:
name | subject | grade
--------|---------|------
alice | math | a
bob | math | b
charlie | NULL | NULL
Giải thích: Charlie được bao gồm mặc dù không có điểm khớp.
SELECT students.name, grades.subject, grades.grade
FROM students
RIGHT JOIN grades ON students.id = grades.student_id;
Truy vấn này trả về tất cả các hàng từ bảng phải (grades) và các hàng khớp từ bảng trái (students). Nếu không có khớp, các giá trị NULL được trả về cho các cột từ bảng trái.
Kết quả:
name | subject | grade
--------|---------|------
alice | math | a
bob | math | b
NULL | science | c
Giải thích: Điểm môn khoa học cho student_id 4 được bao gồm, mặc dù không có học sinh khớp.
SELECT students.name, grades.subject, grades.grade
FROM students
FULL JOIN grades ON students.id = grades.student_id;
Truy vấn này trả về tất cả các hàng khi có khớp trong một trong hai bảng. Nếu không có khớp, các giá trị NULL được trả về cho các cột từ bảng không có khớp.
Kết quả:
name | subject | grade
--------|---------|------
alice | math | a
bob | math | b
charlie | NULL | NULL
NULL | science | c
Giải thích: Điều này bao gồm tất cả học sinh và tất cả điểm, ngay cả khi không có khớp giữa các bảng.