Kursus
Selama menganalisis data dengan SQL, Anda sering perlu melihat beberapa tabel dan menggabungkannya untuk mendapatkan hasil yang diinginkan. Menggabungkan tabel untuk menganalisis data juga merupakan keterampilan wajib bagi data scientist. Dalam tutorial ini, Anda akan mempelajari berbagai jenis join yang dapat Anda lakukan di PostgreSQL. Anda akan mulai dengan mempelajari konsep dasar join di SQL, lalu mengenal berbagai jenis join beserta sintaksnya di PostgreSQL. Anda akan menutup tutorial ini dengan mengeksekusi berbagai jenis kueri join menggunakan dua tabel. Agar dapat mengikuti, Anda sebaiknya sudah familier dengan dasar-dasar SQL dan cara menulis kueri sederhana di PostgreSQL. Jika Anda mencari sumber belajar untuk hal tersebut, berikut beberapa yang dapat berguna -
Mari mulai.
Ringkasnya
-
SQL join memungkinkan Anda menggabungkan data dari dua atau lebih tabel menggunakan kolom yang sama.
-
INNER JOINhanya mengembalikan baris yang cocok, sedangkan variasiOUTER JOIN(LEFT,RIGHT,FULL) mempertahankan baris yang tidak cocok dari satu atau kedua sisi dan mengisi kekosongan denganNULL. -
CROSS JOINmenghasilkan setiap kemungkinan kombinasi baris (produk Kartesius), danSELF JOINmemungkinkan Anda menggabungkan tabel dengan dirinya sendiri — berguna untuk membandingkan baris dalam dataset yang sama. -
Semi-join dan anti-join, yang ditulis sebagai subkueri dengan
INatauNOT IN, menyaring baris dari satu tabel berdasarkan apakah baris tersebut memenuhi kondisi di tabel lain.
Menyiapkan lingkungan basis data di PostgreSQL
Sebelum mempelajari dasar-dasar SQL join, sebaiknya Anda membuat beberapa tabel untuk analisis. Anda memerlukan setidaknya dua tabel yang memiliki minimal satu kolom yang sama. Walaupun Anda dapat menjalankan kueri self-join pada tabel yang sama, untuk saat ini mari abaikan hal tersebut.
Anda dapat melakukan semua operasi SQL pada alat bernama pgAdmin yang umumnya tersedia bersama instalasi PostgreSQL. Buka pgAdmin dan buat sebuah basis data (beri nama sesuai pilihan Anda) untuk membuat tabel jika Anda belum memiliki basis data yang akan digunakan. Lalu Anda dapat membuat dua tabel berikut dengan spesifikasi seperti yang diberikan -
- student_name (id, name)
- student_stream (id, stream)
Perhatikan bahwa kedua tabel memiliki kolom id yang sama. Anda dapat menggunakan pernyataan CREATE berikut untuk membuat tabel-tabel tersebut -
- Untuk student_name -
CREATE TABLE student_name ( id smallint, name "char"[] ); - Untuk student_stream -
CREATE TABLE student_stream ( id smallint, stream "char"[] );
Sekarang mari masukkan beberapa data ke dalam tabel.
- Untuk student_name -
INSERT INTO student_name(id, name) VALUES (1, 'Sayak');
INSERT INTO student_name(id, name) VALUES (2, 'Alex');
INSERT INTO student_name(id, name) VALUES (3, 'Sameer');
INSERT INTO student_name(id, name) VALUES (4, 'Rick');
- Untuk student_stream -
INSERT INTO student_stream(id, stream) VALUES (1, 'CS');
INSERT INTO student_stream(id, stream) VALUES (1, 'IT');
INSERT INTO student_stream(id, stream) VALUES (2, 'ECE');
INSERT INTO student_stream(id, stream) VALUES (9, 'ECE');
Entri tabel akan seperti berikut jika Anda mengeksekusi kueri di atas tanpa mengubah apa pun -

Sekarang Anda memiliki dua tabel sederhana yang siap digunakan. Mari lanjut mempelajari dasar-dasar SQL join.
SQL Join - Dasar
SQL Join memungkinkan Anda menggabungkan dua atau lebih tabel (kadang hanya satu tabel) dengan menggunakan pengenal yang sama. Ambil contoh dua tabel yang Anda buat di atas — keduanya memiliki kolom id yang sama. Anda mungkin mempertanyakan perlunya join di SQL. Mari bahas secara singkat.
Karena batasan normalisasi, Anda mungkin tidak memiliki semua informasi yang diperlukan dalam satu tabel. Normalisasi tidak hanya diinginkan, tetapi juga diperlukan untuk menjaga konsistensi, mengurangi redundansi, dan mencegah berbagai anomali penyisipan dan pemutakhiran. Pertimbangkan kembali dua tabel di atas. Misalkan Anda ingin mencari jurusan yang diambil Sayak. Untuk menjawab pertanyaan ini, Anda perlu menggabungkan dua tabel tersebut (subkueri juga bisa digunakan, tetapi untuk sekarang kita abaikan) lalu melanjutkan sesuai kebutuhan.
Agar dua tabel dapat digabungkan, harus ada sesuatu yang sama di antara keduanya. Apakah ini berarti kedua tabel harus memiliki setidaknya satu kolom dengan nama yang sama? Atau sebenarnya apa syaratnya?
Tabel yang ingin Anda gabungkan tidak harus memiliki kolom dengan nama yang sama, namun secara logis harus setara, yaitu tipe datanya harus sama. Anda tidak dapat menggabungkan dua tabel yang memiliki kolom dengan nama sama tetapi tipe data berbeda. Sekarang mari pelajari berbagai jenis SQL join.
Berbagai jenis SQL Join
Pada bagian ini, Anda akan mempelajari beberapa jenis SQL Join -
- INNER JOIN
- Self-join
- OUTER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
- CROSS JOIN
- Semi-join dan Anti-join
PostgreSQL menyediakan kata kunci terpisah untuk jenis-jenis join yang disebutkan dengan huruf kapital. Mari pelajari satu per satu. Untuk itu, Anda akan terlebih dahulu mempelajari join secara visual, lalu mengeksekusi kueri join terkait di PostgreSQL.
INNER JOIN
Perhatikan diagram berikut untuk memahami INNER JOIN secara visual -

Pada contoh di atas, kolom yang diperhatikan adalah kolom id. INNER JOIN akan mengabaikan kolom lainnya yang nilainya tidak sama di kedua tabel. Sekarang mari jalankan kueri di PostgreSQL yang melakukan INNER JOIN antara dua tabel — student_name dan student_stream.
Setelah menjalankan kueri berikut, Anda akan mendapatkan hasil seperti yang ditunjukkan pada gambar di atas -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
ON s1.id = s2.id;
s1 dan s2 adalah alias untuk kedua tabel. Anda menggunakan kata kunci ON bersama INNER JOIN. Kueri ini juga dapat dijalankan menggunakan kata kunci USING -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
USING (id);
Self Join memungkinkan Anda melakukan join pada tabel yang sama. Lalu kapan ini menjadi opsi yang baik? Misalkan Anda memiliki tabel yang terdiri dari kolom berikut -
- Country
- Continent
Sekarang Anda ingin mencantumkan dua negara dengan ketentuan benua mereka sama. Gambar berikut akan memberi gambaran tentang hasil yang diharapkan -

OUTER JOIN
OUTER JOIN dapat dibagi lagi menjadi tiga jenis -
LEFT JOIN atau Left Outer JOIN: Diagram berikut memberi gambaran yang jelas tentang LEFT JOIN di SQL -

Perhatikan bahwa tidak seperti INNER JOIN, LEFT JOIN mengambil rekaman dari tabel kiri (terkait urutan yang Anda tentukan dalam kueri) yang tidak memiliki pasangan yang cocok di tabel kanan. Ini, pada gilirannya, menunjukkan bahwa Sameer dan Rick belum mengambil jurusan apa pun. Kueri untuk ini adalah -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
LEFT JOIN student_stream AS s2
ON s1.id = s2.id;
RIGHT JOIN atau Right Outer JOIN: RIGHT JOIN kebalikan persis dari LEFT JOIN -

RIGHT JOIN dapat membantu Anda menemukan jurusan yang tidak diambil oleh siapa pun. Kuerinya adalah -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
RIGHT JOIN student_stream AS s2
ON s1.id = s2.id;
FULL JOIN atau Full Outer JOIN: FULL JOIN memungkinkan Anda menggabungkan LEFT JOIN dan RIGHT JOIN dalam satu kompilasi -

Kueri yang sesuai adalah -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
FULL JOIN student_stream AS s2
ON s1.id = s2.id;
Perhatikan bahwa Anda dapat mengeksekusi semua kueri OUTER JOIN di atas menggunakan kata kunci USING. Sekarang mari pelajari CROSS JOIN.
CROSS JOIN
CROSS JOIN pada dasarnya adalah produk Kartesius antara dua himpunan yang diekspresikan dengan SQL. Misalkan Anda perlu mendapatkan semua kombinasi yang mungkin di antara dua tabel atau bahkan dalam satu tabel. Anda memerlukan CROSS JOIN untuk melakukan ini. Gambar berikut menyajikan konsep ini secara visual -

Anda sudah memiliki dua tabel untuk mengujinya. Untuk mendapatkan semua kombinasi yang mungkin antara kolom id pada tabel student_name dan student_stream, Anda dapat menjalankan kueri berikut -
SELECT s1.id, s2.id
FROM student_name AS s1
CROSS JOIN student_stream AS s2;
Dan Anda akan mendapatkan hasil berikut -

Sekarang mari lihat dua jenis join lain yang tidak memiliki kata kunci langsung di PostgreSQL.
Semi-join dan Anti-join
Pertimbangkan tabel yang Anda buat sebelumnya di tutorial ini:

Kueri Semi Join umumnya dieksekusi dalam bentuk subkueri di mana baris diambil dari tabel pertama berdasarkan suatu kondisi (atau sekumpulan kondisi) yang cocok di tabel kedua. Misalkan tabel kiri adalah tabel pertama, dan tabel kanan adalah tabel kedua.
Kueri Anti Join kebalikannya. Pada Anti Join, baris diambil dari tabel pertama berdasarkan suatu kondisi (atau sekumpulan kondisi) yang tidak cocok di tabel kedua. Berikut diagram agar Anda dapat memahaminya secara visual -

Kueri untuk merealisasikan Semi Join adalah -
select id, name
from student_name
where id IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));
Demikian pula, kueri yang merealisasikan Anti Join dalam kasus ini adalah -
select id, name
from student_name
where id NOT IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));
Perhatikan penggunaan NOT pada kueri di atas.
Meningkatkan keahlian SQL Join Anda ke level berikutnya
Itu saja untuk tutorial ini. Anda telah mempelajari beberapa jenis SQL Join dan juga mengenal sintaksnya di PostgreSQL. Jika Anda ingin berlatih latihan SQL Join yang menantang, Anda sebaiknya mengikuti kursus Joining Data in SQL dari DataCamp. Bahkan, materi dari kursus tersebut digunakan sebagai referensi untuk membuat tutorial ini.
Silakan tinggalkan pertanyaan Anda di bagian Comments.
