[SQL] 10 loại kết bảng trong SQL
Team mình vừa tiếp nhận hơn chục bạn sinh viên năm 3 vô thực tập. Sắp tới các bạn sẽ được training về SQL. Ở trường các bạn mới được học có một môn về CSDL nên biết chưa nhiều lắm.
Hỏi thăm các bạn về các loại kết bảng. Các bạn liệt kê ra được INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN và kết luận 4. Ngay sau đó mình nói 9. Chênh nhau hẳn 5 loại. Google tìm ra 7 như hình. Vậy 2 loại còn lại ở đâu. Giờ mình nói thêm.
1) Thứ 8 là CROSS JOIN: kết hai bảng ko sử dụng ON, gần giống FULL JOIN. Dùng khi 2 table không có khoá ngoại với nhau hoặc có nhưng không dùng.
-----------------//-------------------
SELECT *
FROM [TABLE 1]
CROSS JOIN [TABLE 2]
Hoặc
SELECT *
FROM [TABLE 1], [TABLE 2]
--------------------/----------------
2) Thứ 9 là SELF JOIN: khi bảng kết với chính nó. Gần giống CROSS JOIN 2 table nhưng có điều kiện kết không phải là Key.
----------------//------------------
Ví dụ:
SELECT a.ID, b.NAME, a.SALARY
FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY < b.SALARY
Đã đủ 9 loại cho các em sinh viên.
FPT Software, 05/07/2016
HaiNTT5
----------------//------------------
3) Bổ sung loại thứ 10:
Hôm nay mình đã vô cùng vui khi phát hiện ra một cách JOIN cực kỳ lạ nhưng lại rất quen thuộc. Đó là JOIN với điều kiện: ON 1 = 1
----------------///------------------
SELECT *
FROM [TABLE 1]
INNER JOIN [TABLE 2] ON 1 = 1
Với câu trên bạn nghĩ nó ra cái gì. He he. Kết quả là nó tương đương với CROSS JOIN (loại thứ
Thật là thú vị. Mình cười suốt khi nghĩ tới nó. Mình đặt cho nó là loại thứ 10.
----------------///------------------
FPT Software, 19/07/2016
HaiNTT5
Nguồn: SQL Training Blog