1. Mệnh đề SELF JOIN

Mệnh đề SELF JOIN được thực hiện trên 1 bảng. Bảng này sẽ tự kết nối với chính nó nghĩa là, mỗi bản ghi của bảng được nối với chính nó hoặc tất cả các bản ghi khác tùy thuộc vào một số điều kiện. Nói cách khác, chúng ta có thể nói rằng SELF JOIN nó là một phép kết nối giữa hai bản sao của cùng một bảng.

Cú pháp mệnh đề SELF JOIN như sau:

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

Trong đó:

  • SELECT là câu lệnh chọn
  • column_name(s) ...là các cột được chọn lấy ra dữ liệu
  • T1, T2 là các bí danh bảng khác nhau cho cùng một bảng.

2. Ví dụ SELF JOIN

Dưới đây là bảng có tên KhachHang bao gồm các cột là: ID, TenKH, DiaChi, ThanhPho, SoDienThoai

ID TenKH DiaChi ThanhPho SoDienThoai
1 Nguyen Van A Tay Ho Ha Noi 0888999888
2 Nguyen Van B Quan 5 Ho Chi Minh 0988988988
3 Nguyen Van C Quan 7 Ho Chi Minh 0899899899
4 Nguyen Van D Bac Tu Liem Ha Noi 0788788788
5 Nguyen Van E Ngo Quen Hai Phong 0858585858
6 Nguyen Van F Ngu Hanh Son Da Nang 0969696969
7 Nguyen Van G Tay Ho Ha Noi 0838383838

Câu lệnh SQL dưới đây, sử dụng mệnh đề SELF JOIN trong bảng KhachHang trên để lấy ra các tên khách hàng (TenKH1, TenKH2) có thành phố là trùng nhau hoặc có thể hiểu là các khách hàng có cùng thành phố với nhau. Tuy nhiên, các thành phố chỉ có 1 khách hàng sẽ không được lấy ra:

SELECT A.TenKH AS TenKH1, B.TenKH AS TenKH2, A.ThanhPho
FROM KhachHang A, KhachHang B
WHERE A.ID <> B.ID
AND A.ThanhPho = B.ThanhPho
ORDER BY A.ThanhPho;

Kết quả:

TenKH1 TenKH2 ThanhPho
Nguyen Van G Nguyen Van A Ha Noi
Nguyen Van G Nguyen Van D Ha Noi
Nguyen Van A Nguyen Van G Ha Noi
Nguyen Van A Nguyen Van D Ha Noi
Nguyen Van D Nguyen Van G Ha Noi
Nguyen Van D Nguyen Van A Ha Noi
Nguyen Van B Nguyen Van C Ho Chi Minh
Nguyen Van C Nguyen Van B Ho Chi Minh