SQL JOIN adalah perintah query dalam SQL yang memiliki fungsi untuk menggabungkan dua buah tabel dan menghasilkan tabel baru yang bersifat sementara (temporary). Adapun hasil tabel yang digabung tersebut disebut dengan joined table.
Terdapat beberapa jenis join dalam query sql join table, semua tipe sql join tersebut memiliki fungsinya masing-masing sehingga penting untuk diketahui.
Jenis SQL JOIN Table
- INNER JOIN berfungsi untuk menggabungkan dua buah tabel dengan kondisi mengembalikan records yang memiliki nilai yang bersesuaian di kedua tabel.
- LEFT JOIN berfungsi untuk menggabungkan dua buah tabel dengan kondisi mengembalikan semua records dari tabel kiri dan beberapa records dari tabel kanan yang memiliki nilai bersesuaian, jika tidak ada yang cocok diisi NULL.
- RIGHT JOIN berfungsi untuk menggabungkan dua buah tabel dengan kondisi mengembalikan semua records dari tabel kanan dan beberapa records dari tabel kiri yang memiliki nilai bersesuaian, jika tidak ada yang cocok diisi NULL.
- FULL JOIN berfungsi untuk menggabungkan dua buah tabel dengan mengembalikan semua records dari kedua tabel tersebut, di mana jika tidak ada nilai yang bersesuaian akan diisi dengan nilai NULL.
Sintaks SQL JOIN
Misalkan kita punya dua buah tabel dengan nama tabel1
dan tabel2
. Kedua tabel tersebut memiliki kolom yang bersesuaian yaitu kolom1
. Maka sintaks SQL JOIN menjadi seperti berikut.
SELECT
kolom1, kolom2, ...
FROM
tabel1
tipe_join
tabel2
ON
tabel.kolom1 = tabel2.kolom2;
Berdasarkan sintaks di atas, tipe_join
merupakan keyword dari jenis sql join yang akan digunakan seperti yang disebutkan sebelumnya.
Agar bisa menguatkan pemahaman terkait dengan SQL JOIN ini, mari kita lakukan studi kasus pada tiap-tiap jenis sql join di tabel berikut.
Tabel customers
CustomerID | CustomerName | Address |
---|---|---|
1 | John Doe | Jl. Sungai Kapuas |
2 | Mikel Oman | Jl. Batu Tunggal |
3 | Robert Lewi | Jl. Kocoran Baru |
Tabel orders
OrderID | CustomerID | OrderDate |
---|---|---|
10010 | 1 | 2023-11-09 |
10020 | 4 | 2023-11-10 |
10030 | 5 | 2023-11-11 |
Tampak bahwa ada kolom yang bersesuaian dari kedua tabel di atas, yaitu kolom CustomerID
.
SQL INNER JOIN
Dalam kasus ini kita akan melakukan INNER JOIN pada tabel customers
dan orders
berdaasrkan kolom yang bersesuaian yaitu CustomerID
.
SELECT
*
FROM
customers
INNER JOIN
orders
ON
customers.CustomerID = orders.CustomerID;
Output:
CustomerID | CustomerName | Address | OrderID | CustomerID | OrderDate |
---|---|---|---|---|---|
1 | John Doe | Jl. Sungai Kapuas | 10010 | 1 | 2023-11-09 |
Dari output yang kita peroleh bisa kita lihat bahwa data kedua tabel bergabung tetapi hanya mengembalikan satu data record dengan CustomerID = 1.
Hal ini karena dari kedua tabel tersebut yang berisisan hanya di CustomerID = 1, sehingga SQL INNER JOIN hanya mengembalikan satu data saja pada kasus ini.
SQL LEFT JOIN
Dengan cara yang sama, sekarang mari kita lakukan LEFT JOIN di mana tabel kiri yakni customers
dan tabel kanan yaitu orders
.
SELECT
*
FROM
customers
LEFT JOIN
orders
ON
customers.CustomerID = orders.CustomerID;
Output:
CustomerID | CustomerName | Address | OrderID | CustomerID | OrderDate |
---|---|---|---|---|---|
1 | John Doe | Jl. Sungai Kapuas | 10010 | 1 | 2023-11-09 |
2 | Mikel Oman | Jl. Batu Tunggal | NULL | NULL | NULL |
3 | Robert Lewi | Jl. Kocoran Baru | NULL | NULL | NULL |
Dari output di atas, tampak bahwa kita memperoleh semua data di tabel kiri (customers) dan satu data dari tabel kanan (orders) yang memiliki CustomerID sama dengan tabel kiri.
Sedangkan sisanya bernilai NULL yang berarti tidak ada. Hal ini karena di tabel kanan tidak ada yang cocok dengan CustomerID lain dari tabel kiri.
SQL RIGHT JOIN
Sekarang mari kita lakukan SQL RIGHT JOIN pada tabel yang sama dengan contoh-contoh sebelumnya. Pada dasarnya, query SQL RIGHT JOIN merupakan kebalikan dari LEFT JOIN.
SELECT
*
FROM
customers
RIGHT JOIN
orders
ON
customers.CustomerID = orders.CustomerID;
Output:
CustomerID | CustomerName | Address | OrderID | CustomerID | OrderDate |
---|---|---|---|---|---|
1 | John Doe | Jl. Sungai Kapuas | 10010 | 1 | 2023-11-09 |
NULL | NULL | NULL | 10020 | 4 | 2023-11-10 |
NULL | NULL | NULL | 10030 | 5 | 2023-11-11 |
Tampak cukup jelas bahwa output dari SQL RIGHT JOIN mengembalikan nilai seluruh tabel kanan (orders) dan satu data dari tabel kiri (customers) yang memiliki CustomerID sama dengan tabel kanan.
Dari contoh tersebut kita dapat memahami bahwa LEFT dan RIGHT JOIN di sql itu saling berkebalikan.
SQL FULL JOIN
Terakhir dalam materi SQL JOIN ini yaitu SQL FULL JOIN yang mana akan menghasilkan gabungan antara LEFT JOIN dan RIGHT JOIN.
SELECT
*
FROM
customers
FULL JOIN
orders
ON
customers.CustomerID = orders.CustomerID;
Output:
CustomerID | CustomerName | Address | OrderID | CustomerID | OrderDate |
---|---|---|---|---|---|
1 | John Doe | Jl. Sungai Kapuas | 10010 | 1 | 2023-11-09 |
2 | Mikel Oman | Jl. Batu Tunggal | NULL | NULL | NULL |
3 | Robert Lewi | Jl. Kocoran Baru | NULL | NULL | NULL |
NULL | NULL | NULL | 10020 | 4 | 2023-11-10 |
NULL | NULL | NULL | 10030 | 5 | 2023-11-11 |
Tampak bahwa output SQL FULL JOIN mengembalikan semua nilai dari kedua tabel layaknya gabungan LEFT JOIN dan RIGHT JOIN sql.
SQL JOIN dengan Alias
Di materi sebelumnya terkait dengan sql alias sempat disinggung bahwa penggunaan alias akan berguna dalam SQL JOIN.
Nah di akhir materi ini kita akan menunjukkan hal tersebut. Misalkan pada kasus FULL JOIN sebelumnya kita terapkan alias, maka query nya akan menjadi seperti berikut.
SELECT
*
FROM
customers
AS
c
FULL JOIN
orders
AS
o
ON
c.CustomerID = o.CustomerID;
Output:
CustomerID | CustomerName | Address | OrderID | CustomerID | OrderDate |
---|---|---|---|---|---|
1 | John Doe | Jl. Sungai Kapuas | 10010 | 1 | 2023-11-09 |
2 | Mikel Oman | Jl. Batu Tunggal | NULL | NULL | NULL |
3 | Robert Lewi | Jl. Kocoran Baru | NULL | NULL | NULL |
NULL | NULL | NULL | 10020 | 4 | 2023-11-10 |
NULL | NULL | NULL | 10030 | 5 | 2023-11-11 |
Coba perhatikan pada query SQL JOIN menggunakan alias di atas, kita melakukan alias pada kedua tabel customers
sebagai c
sedangkan orders
sebagai o
.
Kebergunaanya terjadi di statement keyword ON di mana kita hanya perlu memanggil alias tabelnya ketimbang nama tabel, sehingga menjadi lebih singkat. Sekali lagi, ini akan sangat readable ketika terjadi di kasus nama tabel yang cukup panjang.