Belajar Database Relational SQL Lite Bagian 4 – Join Table

Belajar Database Relational SQL Lite Bagian 4 – Join Table

780 Views

Belajar Database Relational SQL Lite Bagian 4 akan membahas mengenai operasi join yaitu menggabungkan beberapa tabel menjadi satu yang dihubungkan/relational oleh primary key dan foreign key. Pada bab sebelumnya kita telah membahas cara membuat table Belajar Database Relational SQL Lite Bagian 2 – Operasi CRUID dan Sqlite browser Belajar Database Relational SQL Lite Bagian 3 – DB Browser Sqlite

Operasi join terdiri dari cross, inner, dan out join. Masing-masing mempunyai perbedaan sesuai dengan tujuaanya. Untuk mempermudah cara kerja join table pada Sqlite. Kita akan membuat table provinsi yang berisikan no, kota, nama_provinsi untuk di join dengan table kontak.  Berikut isi tabel provinsi

no kota nama_provinsi
1 semarang jawa tengah
2 solo jawa tengah
3 kendari sulteng
4 makasar sulsel
5 surabaya jawa timur
6 kediri jawa timur
7 jepara jawa tengah
8 pati jawa tengah
9 klaten jawa tengah

Penggabungan antar tabel kontak (Ingat bab sebelumnya telah kita buat tabel kontak) dengan isi berikut

id_biodata nama tanggal_lahir kota
1 agus 04/06/1988 semarang
2 bejo 01/11/2000 solo
3 cucup 09/09/1988 kendari
4 deden 01/07/1986 makasar
5 eko 08/09/2001 surabaya
6 farah 31/12/2000 kediri
7 galih 06/12/1988 jepara
8 bejo 09/12/1989 pati

akan menghasilkan tabel yang lebih detail yaitu semarang –> jawa tengah. Nah tabel kontak mempunyai foreign key nya adalah kota sedangkan tabel provinsi mempunyai primary key adalah kota. Kalau digabungkan menjadi seperti berikut

id_biodata nama tanggal_lahir kota nama_provinsi
1 agus 04/06/1988 semarang jawa tengah
2 bejo 01/11/2000 solo jawa tengah
3 cucup 09/09/1988 kendari sulsel
4 deden 01/07/1986 makasar sulteng
5 eko 08/09/2001 surabaya jawa timur
6 farah 31/12/2000 kediri jawa timur
7 galih 06/12/1988 jepara jawa tengah
8 bejo 09/12/1989 pati jawa tengah

 

Kalian bisa menggunakan sqlite CLI atau sqlite browser. Berikut detail schema dari tabel provinsi

sqlite> CREATE TABLE provinsi (
   ...> no int primary key,
   ...> kota text,
   ...> nama_provinsi text);
sqlite>

kita isi dengan berikut (biar cepat pakai sqlite browser saja)

insert into provinsi (no,kota,nama_provinsi)
values (1,'semarang','jawa tengah');

insert into provinsi (no,kota,nama_provinsi)
values (2,'solo','jawa tengah');

insert into provinsi (no,kota,nama_provinsi)
values (3,'kendari','sulteng');

insert into provinsi (no,kota,nama_provinsi)
values (4,'makasar','sulsel');

insert into provinsi (no,kota,nama_provinsi)
values (5,'surabaya','jawa timur');

insert into provinsi (no,kota,nama_provinsi)
values (6,'kediri','jawa timur');

insert into provinsi (no,kota,nama_provinsi)
values (7,'jepara','jawa tengah');

insert into provinsi (no,kota,nama_provinsi)
values (8,'pati','jawa tengah');

insert into provinsi (no,kota,nama_provinsi)
values (9,'klaten','jawa tengah');


Inner Join

Yaitu akan menggabungkan 2 tabel jika kondisinya sama. Perintah yang digunakan yaitu SELECT * FROM tabel1 INNER JOIN tabel2 ON tabel1.key = tabel2.key. Contohnya sebagai berikut

See also  Menyimpan Gambar ke dalam Database Sqlite Java

select * from kontak inner join provinsi on provinsi.kota=kontak.kota;

hasilnya yaitu terlihat kota klaten tidak muncul karena pada tabel kontak tidak ada kota dengan nama klaten

id_biodata nama tanggal_lahir kota no kota nama_provinsi
1 agus 4/6/1988 semarang 1 semarang jawa tengah
2 bejo 1/11/2000 solo 2 solo jawa tengah
3 cucup 9/9/1988 kendari 3 kendari sulteng
4 deden 1/7/1986 makasar 4 makasar sulsel
5 eko 8/9/2001 surabaya 5 surabaya jawa timur
6 farah 31/12/2000 kediri 6 kediri jawa timur
7 galih 6/12/1988 jepara 7 jepara jawa tengah
8 bejo 9/12/1989 pati 8 pati jawa tengah

biasanya agar rapi, kita hanya seleksi kolom2 yang diperlukan saja, misalkan

select id_biodata,nama,tanggal_lahir,kontak.kota, nama_provinsi from kontak inner join provinsi on provinsi.kota=kontak.kota;

hasilnya sebagai berikut

id_biodata nama tanggal_lahir kota nama_provinsi
1 agus 4/6/1988 semarang jawa tengah
2 bejo 1/11/2000 solo jawa tengah
3 cucup 9/9/1988 kendari sulteng
4 deden 1/7/1986 makasar sulsel
5 eko 8/9/2001 surabaya jawa timur
6 farah 31/12/2000 kediri jawa timur
7 galih 6/12/1988 jepara jawa tengah
8 bejo 9/12/1989 pati jawa tengah

Outer Join

Sayangnya untuk saat ini sqlite hanya bisa mendukung left outer join. Yuk kita coba dibalik tabel nya menjadi urutan sebagai berikut

select * from provinsi LEFT OUTER JOIN kontak on provinsi.kota=kontak.kota;

hasilnya ada baris kosong pada kota klaten

no kota nama_provinsi id_biodata nama tanggal_lahir kota
1 semarang jawa tengah 1 agus 4/6/1988 semarang
2 solo jawa tengah 2 bejo 1/11/2000 solo
3 kendari sulteng 3 cucup 9/9/1988 kendari
4 makasar sulsel 4 deden 1/7/1986 makasar
5 surabaya jawa timur 5 eko 8/9/2001 surabaya
6 kediri jawa timur 6 farah 31/12/2000 kediri
7 jepara jawa tengah 7 galih 6/12/1988 jepara
8 pati jawa tengah 8 bejo 9/12/1989 pati
9 klaten jawa tengah

Cross Join

Cross join akan melakukan penggabungan antar 2 tabel tanpa terkecuali sehingga bila ada 8 baris di tabel kontak dan 9 baris di tabel provinsi, maka nanti akan ada 72 baris (8*9)

See also  Belajar Database Relational SQL Lite Bagian 3 - DB Browser Sqlite

select * from provinsi CROSS JOIN kontak;

hasilnya sebagai berikut

no kota nama_provinsi id_biodata nama tanggal_lahir kota
1 semarang jawa tengah 1 agus 4/6/1988 semarang
1 semarang jawa tengah 2 bejo 1/11/2000 solo
1 semarang jawa tengah 3 cucup 9/9/1988 kendari
1 semarang jawa tengah 4 deden 1/7/1986 makasar
1 semarang jawa tengah 5 eko 8/9/2001 surabaya
1 semarang jawa tengah 6 farah 31/12/2000 kediri
1 semarang jawa tengah 7 galih 6/12/1988 jepara
1 semarang jawa tengah 8 bejo 9/12/1989 pati
2 solo jawa tengah 1 agus 4/6/1988 semarang
2 solo jawa tengah 2 bejo 1/11/2000 solo
2 solo jawa tengah 3 cucup 9/9/1988 kendari
2 solo jawa tengah 4 deden 1/7/1986 makasar
2 solo jawa tengah 5 eko 8/9/2001 surabaya
2 solo jawa tengah 6 farah 31/12/2000 kediri
2 solo jawa tengah 7 galih 6/12/1988 jepara
2 solo jawa tengah 8 bejo 9/12/1989 pati
3 kendari sulteng 1 agus 4/6/1988 semarang
3 kendari sulteng 2 bejo 1/11/2000 solo
3 kendari sulteng 3 cucup 9/9/1988 kendari
3 kendari sulteng 4 deden 1/7/1986 makasar
3 kendari sulteng 5 eko 8/9/2001 surabaya
3 kendari sulteng 6 farah 31/12/2000 kediri
3 kendari sulteng 7 galih 6/12/1988 jepara
3 kendari sulteng 8 bejo 9/12/1989 pati
4 makasar sulsel 1 agus 4/6/1988 semarang
4 makasar sulsel 2 bejo 1/11/2000 solo
4 makasar sulsel 3 cucup 9/9/1988 kendari
4 makasar sulsel 4 deden 1/7/1986 makasar
4 makasar sulsel 5 eko 8/9/2001 surabaya
4 makasar sulsel 6 farah 31/12/2000 kediri
4 makasar sulsel 7 galih 6/12/1988 jepara
4 makasar sulsel 8 bejo 9/12/1989 pati
5 surabaya jawa timur 1 agus 4/6/1988 semarang
5 surabaya jawa timur 2 bejo 1/11/2000 solo
5 surabaya jawa timur 3 cucup 9/9/1988 kendari
5 surabaya jawa timur 4 deden 1/7/1986 makasar
5 surabaya jawa timur 5 eko 8/9/2001 surabaya
5 surabaya jawa timur 6 farah 31/12/2000 kediri
5 surabaya jawa timur 7 galih 6/12/1988 jepara
5 surabaya jawa timur 8 bejo 9/12/1989 pati
6 kediri jawa timur 1 agus 4/6/1988 semarang
6 kediri jawa timur 2 bejo 1/11/2000 solo
6 kediri jawa timur 3 cucup 9/9/1988 kendari
6 kediri jawa timur 4 deden 1/7/1986 makasar
6 kediri jawa timur 5 eko 8/9/2001 surabaya
6 kediri jawa timur 6 farah 31/12/2000 kediri
6 kediri jawa timur 7 galih 6/12/1988 jepara
6 kediri jawa timur 8 bejo 9/12/1989 pati
7 jepara jawa tengah 1 agus 4/6/1988 semarang
7 jepara jawa tengah 2 bejo 1/11/2000 solo
7 jepara jawa tengah 3 cucup 9/9/1988 kendari
7 jepara jawa tengah 4 deden 1/7/1986 makasar
7 jepara jawa tengah 5 eko 8/9/2001 surabaya
7 jepara jawa tengah 6 farah 31/12/2000 kediri
7 jepara jawa tengah 7 galih 6/12/1988 jepara
7 jepara jawa tengah 8 bejo 9/12/1989 pati
8 pati jawa tengah 1 agus 4/6/1988 semarang
8 pati jawa tengah 2 bejo 1/11/2000 solo
8 pati jawa tengah 3 cucup 9/9/1988 kendari
8 pati jawa tengah 4 deden 1/7/1986 makasar
8 pati jawa tengah 5 eko 8/9/2001 surabaya
8 pati jawa tengah 6 farah 31/12/2000 kediri
8 pati jawa tengah 7 galih 6/12/1988 jepara
8 pati jawa tengah 8 bejo 9/12/1989 pati
9 klaten jawa tengah 1 agus 4/6/1988 semarang
9 klaten jawa tengah 2 bejo 1/11/2000 solo
9 klaten jawa tengah 3 cucup 9/9/1988 kendari
9 klaten jawa tengah 4 deden 1/7/1986 makasar
9 klaten jawa tengah 5 eko 8/9/2001 surabaya
9 klaten jawa tengah 6 farah 31/12/2000 kediri
9 klaten jawa tengah 7 galih 6/12/1988 jepara
9 klaten jawa tengah 8 bejo 9/12/1989 pati
See also  Cara Hitung Manual Uji Normalitas Shapiro Wilk

 

You May Have Missed