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
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
SELECT nama_kota, nama_prov
FROM kota NATURAL RIGHT JOIN provinsi;
Komentar
Posting Komentar