Tags:

Tổng hợp các phép JOIN trong SQL

Phép JOIN trong SQL được sử dụng để kết hợp dữ liệu giữa 2 hay nhiều bảng dựa trên các trường dữ liệu chung của chúng thông thường thông qua khóa chính và khóa ngoại.

Trong SQL phép JOIN được chia thành 4 loại:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL JOIN

Cho 2 table như sau:

Student

ROOL_NO NAME ADDRESS PHONE AGE
1 HARSH DELPHI XXXXXXXXXX 18
2 PRATIK BIHAR XXXXXXXXXX 19
3 RIYANKA SILIGURI XXXXXXXXXX 20
4 DEEP RAMNAGAR XXXXXXXXXX 18
5 SAPTARHI KOLKATA XXXXXXXXXX 19
6 DHANRAJ BARABAJAR XXXXXXXXXX 20
7 ROHIT BALURGHAT XXXXXXXXXX 18
8 NIRAJ ALIOUR XXXXXXXXXX 19

StudentCource

COURSE_ID ROLL_NO
1 1
2 2
2 3
3 4
1 5
4 9
5 10
4 11

Inner Join

Là phép JOIN đơn giản nhất trong SQL, từ khóa INNER JOIN sẽ lấy tất cả các dòng từ cả 2 bảng miễn là chúng thỏa mãn điều kiện.

Cú pháp

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
INNER JOIN table2
ON table1.matching_column = table2.matching_column;


table1: Table 1.
table2: Table 2
matching_column:Cột dùng để so sánh điều kiện.

Xem hình dưới đây để dễ tưởng tượng hơn:

inner join

 

Lưu ý rằng lệnh JOIN cũng tương ứng với INNER JOIN. Chúng ta có thể tùy ý viết JOIN hay INNER JOIN đều có thể được.

SELECT StudentCourse.COURSE_ID, Student.NAME, Student.AGE FROM Student
INNER JOIN StudentCourse
ON Student.ROLL_NO = StudentCourse.ROLL_NO;
COURSE_ID NAME AGE
1 HARSH 18
2 PRATIK 19
2 RIYANKA 20
3 DEEP 18
1 SAPTARHI 19

Left Join

Phép Join này sẽ trả về tất cả các dòng dữ liệu từ bảng phía bên trái phép Join với các dòng thỏa điều kiện của bảng phía bên phải phép JOIN. Nếu các dòng dữ liệu phía bên trái không có dòng dữ liệu phía bên phải nào thỏa điều kiện thì kết quả về của chúng sẽ hiện thị null.

LEFT JOIN cũng có tên gọi là LEFT OUTER JOIN nên chúng ta có thể sử dụng một trong 2 từ khóa trên đều được.

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
LEFT JOIN table2
ON table1.matching_column = table2.matching_column;


table1: Table 1.
table2: Table 2
matching_column:Cột dùng để so sánh điều kiện.

left join

Cùng một câu truy vấn trên hiển thị NAME và COURSE_ID mà một Student đã đăng ký. Các Student không có đăng ký môn học thì hiển thị null.

SELECT Student.NAME,StudentCourse.COURSE_ID 
FROM Student
LEFT JOIN StudentCourse 
ON StudentCourse.ROLL_NO = Student.ROLL_NO;
NAME COURSE
HARSH 1
PRATIK 2
RIYANKA 2
DEEP 3
SAPTARHI 1
DHANRAJ NULL
ROHIT NULL
NIRAJ NULL

Right Join

Ngược lại với Right Join, Right Join trả về tất cả các dòng dữ liệu từ bảng phía bên phải phép Join với các dòng thỏa điều kiện của bảng phía bên trái. Nếu các dòng dữ liệu phía bên phải không có dòng dữ liệu phía bên trái nào thỏa điều kiện thì kết quả về của chúng sẽ hiện thị null.

RIGHT JOIN cũng có tên gọi là RIGHT OUTER JOIN nên chúng ta có thể sử dụng một trong 2 từ khóa trên đều được.

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
RIGHT JOIN table2
ON table1.matching_column = table2.matching_column;


table1: Table 1.
table2: Table 2
matching_column:Cột dùng để so sánh điều kiện.

right join

Ví dụ tìm các COURSE_ID, NAME và các Student đã đăng ký khóa học. Nếu khóa học không có Student đăng ký thì hiển thị null.

SELECT Student.NAME,StudentCourse.COURSE_ID 
FROM Student
RIGHT JOIN StudentCourse 
ON StudentCourse.ROLL_NO = Student.ROLL_NO;

Output

NAME COURSE
HARSH 1
PRATIK 2
RIYANKA 2
DEEP 3
SAPTARHI 1
NULL 4
NULL 5
NULL 4

Full Join

Full Join có thể xem là sự kết hợp của Left Join và Right Join. Kết hợp trả về sẽ chứa toàn bộ các dòng dữ liều từ cả 2 bảng. Những dòng dữ liệu nào không có có kết quả phù hợp sẽ được hiển thị null.

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
FULL JOIN table2
ON table1.matching_column = table2.matching_column;


table1: Table 1.
table2: Table 2
matching_column:Cột dùng để so sánh điều kiện.

Ví dụ hiển thị tất cả các Student và Course, nếu không Student chưa đăng ký Course nào thì hiện thị null, ngược lại nếu Course chưa được Student nào đăng ký thì cũng sẽ hiển thị null.

SELECT Student.NAME,StudentCourse.COURSE_ID 
FROM Student
FULL JOIN StudentCourse 
ON StudentCourse.ROLL_NO = Student.ROLL_NO;

Output

NAME COURSE
HARSH 1
PRATIK 2
RIYANKA 2
DEEP 3
SAPTARHI 1
DHANRAJ NULL
ROHIT NULL
NIRAJ NULL
NULL 9
NULL 10
NULL 11

Nguồn tham khảo

https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x