PENGGABUNGAN DATA



1.     Join dengan Equijoin
Join adalah penggabungan data yang berasal dari beberapa table. Operator yang digunakan untuk melaksanakan penggabungan berupa operator sama dengan (=).
Untuk mempraktikan berbagai operasi join, siapkanlah dulu database bernama wilayah, dan tabel bernama provinsi, kota dan kecamatan.
CREATE DATABASE wilayah;

USE wilayah;

CREATE TABLE provinsi(
kode_prov VARCHAR(2) NOT NULL PRIMARY KEY,
nama_prov VARCHAR(30) NOT NULL);

CREATE TABLE kota(
kode_prov VARCHAR(2) NOT NULL ,
kode_kota VARCHAR(2) NOT NULL,
nama_kota VARCHAR(25) NOT NULL.
PRIMARY KEY(kode_prov, kode_kota));

CREATE TABLE kecamatan(
kode_prov VARCHAR(2) NOT NULL ,
kode_kota VARCHAR(2) NOT NULL,
kode_kec VARCHAR(2) NOT NULL,
nama_kEC VARCHAR(25) NOT NULL.
PRIMARY KEY(kode_prov, kode_kota, kode_kec));

Masukkan data pada ketiga tabel seperti di bawah ini !
Tabel provinsi
kode_prov
nama_prov
20
DKI Jakarta
21
Jawa Barat
22
Jawa Tengah
23
DI Yogyakarta
24
Jawa Timur

Tabel kota
kode_prov
kode_kota
nama_kota
12
01
Medan
21
01
Bandung
21
02
Bogor
22
01
Semarang
22
02
Kudus
23
01
Yogya
23
02
Sleman
24
01
Surabaya
31
01
Banjarmasin

Tabel kecamatan
kode_prov
kode_kota
kode_kec
nama_kec
22
02
01
Kudus Kota
22
02
02
Jati
23
01
01
Gondokusuman
23
01
02
Umbulharjo
Untuk menggabungkan data nama kota dan nama provinsi menggunakan perintah:
SELECT kota.nama_kota, provinsi.nama_prov
FROM kota, provinsi
WHERE kota.kode_prov = provinsi.kode_prov;

2.     Natural Join
Natural join adalah penggabungan data dari dua buah table yang didasarkan pada kolom dengan nama sama pada kedua table. Penggabungan ini mencerminkan hubungan antara kunci tamu dan kunci primer dalam dua buah tabel.
SELECT nama_kota, nama_prov
FROM kota NATURAL JOIN provinsi;

Pernyataan di atas juga bisa ditulis menjadi :
SELECT nama_kota, nama_prov
FROM provinsi NATURAL JOIN kota;

Bisa juga ditambahkan klausa seperti ORDER BY untuk mengurutkan hasil.
SELECT nama_kota, nama_prov
FROM provinsi NATURAL JOIN kota
ORDER BY nama_kota;
Contoh :
Tampilkan informasi mengenai nama kecamatan, nama kota, dan nama provinsi.
SELECT nama_kec, nama_kota, nama_prov
FROM kecamatan
NATURAL JOIN kota
NATURAL JOIN provinsi;

Kalau tidak menggunakan kata kunci NATURAL JOIN adalah sebagai berikut:
SELECT nama_kec, nama_kota, nama_prov
FROM kecamatan, kota, provinsi
WHERE kecamatan.kode_prov = kota.kode_prov AND
kecamatan.kode_kota = kota.kode_kota AND
kota.kode_prov = provinsi.kode_prov;

3.     Perkalian Kartesian
Bentuk paling sederhana dari penggabungan dua buah tabel akan membentuk perkalian kartesian (Cartesian product) atau biasa juga disebut cross join atau full join. Pada perkalian product klausa where tidak disebutkan.
SELECT kota.nama_kota, provinsi.namaprov
FROM kota, provinsi;

Bisa ditulis menjadi :
SELECT kota.nama_kota, provinsi.namaprov
FROM kota CROSS JOIN  provinsi;
 Atau
SELECT kota.nama_kota, provinsi.namaprov
FROM provinsi CROSS JOIN kota ;

CROSS JOIN dapat diikuti dengan suatu kondisi penggabungan berbentuk :
-          ON kondisi
SELECT kota.nama_kota, provinsi.namaprov
FROM kota CROSS JOIN  provinsi
ON kota.kode_prov = provinsi.kode_prov;

-          USING (daftar_kolom)
SELECT kota.nama_kota, provinsi.namaprov
FROM kota CROSS JOIN  provinsi
USING (kode_prov);

Contoh berikut menunjukkan penggunaan USING kalau terdapat dua buah nama kolom yang sama.
SELECT nama_kec, nama_kota
FROM kecamatan CROSS JOIN kota
USING (kode_prov, kode_kota);


4.     Inner Join dan Outer Join
Equijoin seringkali dibedakan menjadi 2 kategori yakni inner equijoin ( disingkat inner join) dan outer equijoin ( disingkat outer join).
-          Inner join
SELECT kota.nama_kota, provinsi.nama_prov
FROM kota, provinsi
WHERE kota.kode_prov = provinsi.kode_prov;
-          Outer join
Untuk melakukan outer join bisa menggunakan NATURAL LEFT JOIN.
SELECT nam_kota, nama_prov
FROM kota NATURAL LEFT JOIN provinsi;

Alternatif lain bisa menggunakan LEFT JOIN, kondisi ini menggunakan ON atau USING.
SELECT nama_kota, nama_prov
FROM kota LEFT JOIN provinsi
ON kota.kode_prov = provinsi.kode_prov;

Kalau menggunakan USING:
SELECT nama_kota, nama_prov
FROM kota LEFT JOIN provinsi
USING (kode_prov);

Berikutnya bisa mengubah LEFT menjadi RIGHT:
SELECT nama_kota, nama_prov
FROM kota RIGHT  JOIN provinsi
USING (kode_prov);
Atau
SELECT nama_kota, nama_prov
FROM kota NATURAL RIGHT  JOIN provinsi;

5.     Penggunaan Alias pada Join
Pernyataan SELECT yang menggunakan JOIN, penerapan alias pada tabel tetap bisa dilakukan.
SELECT nama_kota, nama_prov
FROM kota CROSS JOIN provinsi
ON kota.kode_prov = provinsi.kode_prov;

Dapat ditulis menjadi :
SELECT k.nama_kota, p.nama_prov
FROM kota k CROSS JOIN provinsi p
ON k.kode_prov = p.kode_prov;

6.     Operator Union
Operator Union berguna untuk menggabungkan hasil dari dua buah query tanpa ada baris yang kembar.
SELECT nama_kota, nama_prov
FROM kota NATURAL LEFT JOIN provinsi
UNION
SELECT nama_kota, nama_prov
FROM kota NATURAL RIGHT JOIN provinsi;


Komentar