Mempelajari SQL bagi beberapa orang
adalah sebuah tantangan tersendiri, terlebih lagi paradigma yang dibawa SQL,
yaitu paradigma set atau himpunan sangat jauh
berbeda dengan paradigma programming yang umunya imperatif atau prosedural.
Ketika kita belajar himpunan dahulu pasti pernah dikenalkan dengan Diagram Venn. Dengan
menggambarkan SQL JOIN menggunakan Diagram Venn mudah
mudahan bisa mempermudah kita memahaminya.
Saya akan membahas tujuh cara yang
berbeda menggabungkan dua tabel relasional yang berbeda menggunakan SQL JOIN.
Ketujuh Bergabung saya akan membahas adalah sebagai berikut:
- INNER JOIN (JOIN)
- LEFT OUTER JOIN (LEFT JOIN)
- RIGHT OUTER JOIN (RIGHT JOIN)
- FULL OUTER JOIN (FULL JOIN)
- LEFT JOIN EXCLUDING INNER JOIN (LEFT EXCLUDING JOIN)
- RIGHT JOIN EXCLUDING INNER JOIN (RIGHT EXCLUDING
JOIN)
- OUTER JOIN EXCLUDING INNER JOIN (OUTER EXCLUDING
JOIN)
Kita akan coba bahas satu persatu
diikuti dengan contoh agar lebih mudah dipahami. Contoh query akan menggunakan
dua buah table, yaitu TABLE_A dan TABLE_B dengan
struktur dan data sebagai berikut,
TABLE_A
|
|
1
2
3
4
5
6
7
8
9
10
|
PK Value
---- ----------
1 FOX
2 COP
3 TAXI
6 WASHINGTON
7 DELL
5 ARIZONA
4 LINCOLN
10 LUCENT
|
TABLE_B
|
|
1
2
3
4
5
6
7
8
9
10
|
PK Value
---- ----------
1 TROT
2 CAR
3 CAB
6 MONUMENT
7 PC
8 MICROSOFT
9 APPLE
11 SCOTCH
|
INNER
JOIN
Ini adalah query yang paling
sederhana, paling umum, dan paling mudah dipahami. Query ini akan mengembalikan
semua record dalam tabel kiri (tabel A) yang memiliki record yang cocok
di tabel kanan (tabel B). Query Inner Join ditulis dengan format sebagai
berikut:
1
2
3
4
|
SELECTselect_list
FROMTable_A A
JOINTable_B B
ONA.Key= B.Key
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value
ASB_Value, B.PK ASB_PK
FROMTable_A A
JOINTable_B B
ONA.PK = B.PK
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
1
FOX
TROT 1
2
COP
CAR 2
3
TAXI
CAB 3
6 WASHINGTON
MONUMENT 6
7
DELL
PC 7
(5 row(s) affected)
|
LEFT
JOIN
Query ini akan mengembalikan semua record
dalam tabel kiri (tabel A) meskipun record di tabel A
tersebut tidak memiliki record yang bersesuaian di tabel kanan
(tabel B). Dan semua record yang bersesuaian dari tabel kanan akan muncul.
Query Left Join ini ditulis dengan format sebagai berikut:
1
2
3
4
|
SELECTselect_list
FROMTable_A A
LEFTJOINTable_B B
ONA.Key= B.Key
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value ASB_Value, B.PK ASB_PK
FROMTable_A A
LEFTJOINTable_B B
ONA.PK = B.PK
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
1
FOX
TROT 1
2
COP
CAR 2
3
TAXI
CAB 3
4 LINCOLN NULL NULL
5 ARIZONA NULL NULL
6 WASHINGTON
MONUMENT 6
7
DELL
PC 7
10 LUCENT NULL NULL
(8 row(s) affected)
|
RIGHT
JOIN
Query ini akan mengembalikan semua record
dalam tabel kanan (tabel B) meskipun record di
tabel B tersebut tidak memiliki record yang bersesuaian di
tabel kiri (tabel A). Semua record yang bersesuaian dari tabel kanan akan
muncul. Query Right Join ini ditulis dengan format sebagai berikut:
1
2
3
4
|
SELECTselect_list
FROMTable_A A
RIGHTJOINTable_B B
ONA.Key= B.Key
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value ASB_Value, B.PK ASB_PK
FROMTable_A A
RIGHTJOINTable_B B
ONA.PK = B.PK
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
1
FOX
TROT 1
2
COP
CAR 2
3
TAXI
CAB 3
6 WASHINGTON
MONUMENT 6
7
DELL
PC 7
NULLNULL
MICROSOFT 8
NULLNULL
APPLE 9
NULLNULL
SCOTCH 11
(8 row(s) affected)
|
FULL
JOIN
Query ini akan mengembalikan semua record
yang ada di kedua table tersebut, dan semua record
yang bersesuaian akan digabungkan menjadi satu record. Query Right
Join ini ditulis dengan format sebagai berikut:
1
2
3
4
|
SELECTselect_list
FROMTable_A A
FULLOUTERJOINTable_B B
ONA.Key= B.Key
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value ASB_Value, B.PK ASB_PK
FROMTable_A A
FULLOUTERJOINTable_B B
ONA.PK = B.PK
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
1
FOX
TROT 1
2
COP
CAR 2
3 TAXI
CAB 3
6 WASHINGTON
MONUMENT 6
7
DELL
PC 7
NULLNULL
MICROSOFT 8
NULLNULL
APPLE 9
NULLNULL
SCOTCH 11
5 ARIZONA NULL NULL
4 LINCOLN NULL NULL
10 LUCENT NULL NULL
(11 row(s) affected)
|
LEFT
EXCLUDING JOIN
Query ini akan mengembalikan semua record
dalam tabel kiri (tabel A) yang tidak memiliki record yang
bersesuaian di tabel kanan (tabel B). Biasanya pertanyaan yang dapat
diselesaikan menggunakan Left Excluding Join adalah "Tampilkan semua
data di tabel A yang tidak ada datanya di tabel B!". Query Left
Excluding Join ini ditulis dengan format sebagai berikut:
1
2
3
4
5
|
SELECTselect_list
FROMTable_A A
LEFTJOINTable_B B
ONA.Key= B.Key
WHEREB.KeyISNULL
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value ASB_Value, B.PK ASB_PK
FROMTable_A A
LEFTJOINTable_B B
ONA.PK = B.PK
WHEREB.PK ISNULL
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
4 LINCOLN NULL NULL
5 ARIZONA NULL NULL
10 LUCENT NULL NULL
(3 row(s) affected)
|
RIGHT
EXCLUDING JOIN
Query ini akan mengembalikan semua record
dalam tabel kanan (tabel B) yang tidak memiliki record yang
bersesuaian di tabel kiri (tabel A). Biasanya pertanyaan yang dapat
diselesaikan menggunakan Left Excluding Join adalah "Tampilkan semua
data di tabel B yang tidak ada datanya di tabel A!". Query Right
Excluding Join ini ditulis dengan format sebagai berikut:
1
2
3
4
5
|
SELECTselect_list
FROMTable_A A
RIGHTJOINTable_B B
ONA.Key= B.Key
WHEREA.KeyISNULL
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value ASB_Value, B.PK ASB_PK
FROMTable_A A
RIGHTJOINTable_B B
ONA.PK = B.PK
WHEREA.PK ISNULL
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
NULLNULL
MICROSOFT 8
NULLNULL
APPLE 9
NULLNULL
SCOTCH 11
(3 row(s) affected)
|
FULL
EXCLUDING JOIN
Query ini akan mengembalikan semua record
yang tidak memiliki pasangan di tabel kiri (tabel A) maupun tabel
kanan (tabel B). Kasus ini jarang sekali ditemukan namun bukan berarti
tidak ada. Query Full Excluding Join ini ditulis dengan format sebagai berikut:
?
1
2
3
4
5
|
SELECTselect_list
FROMTable_A A
FULLOUTERJOINTable_B B
ONA.Key= B.Key
WHEREA.KeyISNULLORB.KeyISNULL
|
Jika kita menggunakan contoh data di
atas, query ini akan menghasilkan data sebagai berikut,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
SELECTA.PK ASA_PK, A.Value ASA_Value,
B.Value ASB_Value, B.PK ASB_PK
FROMTable_A A
FULLOUTERJOINTable_B B
ONA.PK = B.PK
WHEREA.PK ISNULL
ORB.PK ISNULL
A_PK A_Value B_Value
B_PK
---- ---------- ---------- ----
NULLNULL
MICROSOFT 8
NULLNULL
APPLE 9
NULLNULL
SCOTCH 11
5 ARIZONA NULL NULL
4 LINCOLN NULL NULL
10 LUCENT NULL NULL
(6 row(s) affected)
|
Mudah-mudahan sedikit penjelasan ini dapat
membantu memahami apa itu SQL Join.