Selasa, 19 Agustus 2014

Visual Representation of SQL Joins


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

Inner Join
Ini adalah query yang paling sederhana, paling umum, dan paling mudah dipahami. Query ini akan mengembalikan semuarecord 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
SELECT select_list
FROM Table_A A
JOIN Table_B B
ON A.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
SELECT A.PK AS A_PK, A.Value AS A_Value,
       B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
JOIN Table_B B
ON A.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

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
SELECT select_list
FROM Table_A A
LEFT JOIN Table_B B
ON A.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
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.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

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
SELECT select_list
FROM Table_A A
RIGHT JOIN Table_B B
ON A.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
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.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
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
(8 row(s) affected)

FULL JOIN

Outer 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
SELECT select_list
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.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
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.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
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL
(11 row(s) affected)

LEFT EXCLUDING JOIN

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
SELECT select_list
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
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
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK
WHERE B.PK IS NULL
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

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
SELECT select_list
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL
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
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL
A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
(3 row(s) affected)

FULL EXCLUDING JOIN

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
SELECT select_list
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL
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
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL
OR B.PK IS NULL
A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL
(6 row(s) affected)

PENUTUP

Mudah-mudahan penjelasan ini dapat membantu memahami apa itu SQL Join. dan untuk para coder sejati silakan download cheatsheet di bawah ini untuk dijadikan wallpaper komputer Anda :)
Sumber:http://pojokprogrammer.net/content/representasi-sql-join-secara-visual

Tidak ada komentar:

Posting Komentar

Visual Representation of SQL Joins

Mempelajari SQL bagi beberapa orang adalah sebuah tantangan tersendiri, terlebih lagi paradigma yang dibawa SQL, yaitu paradigma  set  ata...