14/08/2018, 13:30

SELF JOIN trong SQL

SELF JOIN trong SQL được sử dụng để kết hợp một bảng với chính nó như khi coi bảng đó là hai bảng, thay tên tạm thời ít nhất một bảng trong lệnh SQL. Cú pháp Cú pháp cơ bản của SELF JOIN trong SQL như sau: SELECT a.ten_cot, b.ten_cot... FROM bang1 a, bang1 b WHERE a.field_chung = ...

SELF JOIN trong SQL được sử dụng để kết hợp một bảng với chính nó như khi coi bảng đó là hai bảng, thay tên tạm thời ít nhất một bảng trong lệnh SQL.

Cú pháp

Cú pháp cơ bản của SELF JOIN trong SQL như sau:

SELECT a.ten_cot, b.ten_cot...
FROM bang1 a, bang1 b
WHERE a.field_chung = b.field_chung;

Ở đây, mệnh đề WHERE có thể là bất kỳ biểu thức nào theo yêu cầu của bạn.

Ví dụ

Giả sử có hai bảng, bảng NHANVIEN có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | DIACHI   | LUONG   |
+----+----------+-----+-----------+----------+
|  1 | Hoang   |  32 | DongDa |  2000.00 |
|  2 | Thanh   |  25 | QuangTrung     |  1500.00 |
|  3 | Viet  |  23 | KimLien      |  2000.00 |
|  4 | Nhan |  25 | BaDinh    |  6500.00 |
|  5 | Huong   |  27 | CauGiay    |  8500.00 |
|  6 | Long    |  22 | TrungKinh        |  4500.00 |
|  7 | Nam    |  24 | GiapBat    | 10000.00 |
+----+----------+-----+-----------+----------+

Bây giờ, chúng ta kết hợp bảng này với chính nó bởi sử dụng SELF JOIN trong SQL như sau:

SQL> SELECT  a.ID, b.NAME, a.LUONG
     FROM NHANVIEN a, NHANVIEN b
     WHERE a.LUONG < b.LUONG;

Ví dụ trên sẽ cho kết quả:

+----+----------+---------+
| ID | TEN     | LUONG  |
+----+----------+---------+
|  2 | Hoang   | 1500.00 |
|  2 | Viet  | 1500.00 |
|  1 | Nhan | 2000.00 |
|  2 | Nhan | 1500.00 |
|  3 | Nhan | 2000.00 |
|  6 | Nhan | 4500.00 |
|  1 | Huong   | 2000.00 |
|  2 | Huong   | 1500.00 |
|  3 | Huong   | 2000.00 |
|  4 | Huong   | 6500.00 |
|  6 | Huong   | 4500.00 |
|  1 | Long    | 2000.00 |
|  2 | Long    | 1500.00 |
|  3 | Long    | 2000.00 |
|  1 | Nam    | 2000.00 |
|  2 | Nam    | 1500.00 |
|  3 | Nam    | 2000.00 |
|  4 | Nam    | 6500.00 |
|  5 | Nam    | 8500.00 |
|  6 | Nam    | 4500.00 |
+----+----------+---------+
0