WELCOME TO MY BLOG @ UNIVERSITAS KRISNADWIPAYANA

Teknik Join

       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:
  1. INNER JOIN (JOIN)
  2. LEFT OUTER JOIN (LEFT JOIN)
  3. RIGHT OUTER JOIN (RIGHT JOIN)
  4. FULL OUTER JOIN (FULL JOIN
  5. LEFT JOIN EXCLUDING INNER JOIN (LEFT EXCLUDING JOIN)
  6. RIGHT JOIN EXCLUDING INNER JOIN (RIGHT EXCLUDING JOIN)
  7. 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.