Belajar Database PostgreSQL - Contoh Penggunaan Join
Pada kesempatan kali ini kita akan membahas Cara dan Contoh Penggunaan JOIN, Klausa JOIN digunakan untuk menggabungkan dari dua atau lebih tabel dalam database. JOIN adalah sarana untuk menggabungkan field dari dua tabel.
Tipe Join di PostgreSQL
Pada PostgreSQL terdapat beberapa tipe join yang dapat kalian lakukan, antara lain : Inner Join, Left Join, Right Join, Cross Join, Full Join. Kita akan membahas semua tipe join tersebut beserta dengan contoh penggunaannya.
Persiapan
Sebelum masuk ke pembahasan mengenai penggunaan join, terlebih dahulu kalian harus membuat 3(dua) buah tabel (tbl_pelanggan, tbl_transaksi dan tbl_transaksi_detail). Berikut perintah untuk membuat tabel dan memberikan data awal yang akan kita gunakan dalam tutorial kali ini.
Buat DB
CREATEDB -U postgres -p 7117 db_retail
Catatan
Pada pembuatan database db_retail, saya menggunakan PORT 7117. Silahkan sesuaikan dengan PORT PostgreSQL yang kalian install, default dari PORT PostgreSQL adalah 5432.
Buat Tabel
CREATE TABLE tbl_pelanggan( id bigserial NOT NULL, nomor_pelanggan varchar(255), nama_pelanggan varchar(255), CONSTRAINT pelanggan_pkey PRIMARY KEY (id) ); CREATE TABLE tbl_transaksi( id bigserial NOT NULL, kode_transaksi varchar(255) NOT NULL, tanggal_transaksi date NOT NULL, nomor_pelanggan varchar(255), CONSTRAINT transaksi_pkey PRIMARY KEY (id) ); CREATE TABLE tbl_transaksi_detail( id bigserial NOT NULL, id_transaksi bigserial NOT NULL, kode_produk varchar(255) NOT NULL, nama_produk varchar(255) NOT NULL, jumlah_produk int, harga double precision, diskon double precision, CONSTRAINT transaksi_details_pkey PRIMARY KEY (id), CONSTRAINT transaksi_fkey FOREIGN KEY (id_transaksi) REFERENCES tbl_transaksi (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE );
Data
INSERT INTO tbl_pelanggan(id, nomor_pelanggan, nama_pelanggan) VALUES (1, 'P-A101', 'Akbar'); INSERT INTO tbl_pelanggan(id, nomor_pelanggan, nama_pelanggan) VALUES (2, 'P-A201', 'Luqman'); INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_transaksi, nomor_pelanggan) VALUES (1, 'TRX-101', '2022-01-29', 'P-A101'); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (1, 1, 'CK-001', 'USB 64Gb Kingston', 12, 96000, 6000); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (2, 1, 'AK-001', 'Alkaline', 6, 26000, 0); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (3, 1, 'AK-002', 'Baterai ABC', 5, 20000, 0); INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_transaksi, nomor_pelanggan) VALUES (2, 'TRX-102', '2022-02-15', ''); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (4, 2, 'CK-034', 'SSD 512 ADATA', 1, 456000, 9000); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (5, 2, 'AH-501', 'Mouse Logitech', 2, 299000, 20000); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (6, 2, 'AK-002', 'Baterai ABC', 4, 20000, 0); INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_transaksi, nomor_pelanggan) VALUES (3, 'TRX-103', '2022-02-23', 'P-A201'); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (7, 3, 'AH-045', 'Keyboard RedDragon', 2, 358000, 16000); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (8, 3, 'AH-004', 'LCD Samsung 21 Inch', 5, 2100000, 0); INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_produk, nama_produk, jumlah_produk, harga, diskon) VALUES (9, 3, 'CK-049', 'DDR4 16Gb Corsair', 2, 867000, 0);
BACA JUGA
Inner Join
Inner Join juga dikenal sebagai join atau join yang sederhana. Inner join adalah jenis yang paling umum digunakan.
Sintaks
SELECT table1.columns, table2.columns FROM table1 INNER JOIN table2 ON table1.common_filed = table2.common_field;
Contoh Penggunaan Inner Join
Contoh 1
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan FROM tbl_transaksi t INNER JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan
Contoh 2
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan, kode_produk, nama_produk, jumlah_produk, harga, diskon, (harga - diskon)*jumlah_produk total FROM tbl_transaksi t INNER JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan INNER JOIN tbl_transaksi_detail det ON t.id = det.id_transaksi
Left Join
Left Join mengembalikan semua baris dari tabel kiri(tabel 1) dan hanya baris dari tabel lain dimana join dalam kondisi terpenuhi. Left join berlawanan mutlak dengan right join.Sintaks
SELECT table1.columns, table2.columns FROM table1 LEFT JOIN table2 ON table1.common_filed = table2.common_field;
Contoh Penggunaan Left Join
Contoh 3
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan FROM tbl_transaksi t LEFT JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan
Contoh 4
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan, kode_produk, nama_produk, jumlah_produk, harga, diskon, (harga - diskon)*jumlah_produk total FROM tbl_transaksi t LEFT JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan LEFT JOIN tbl_transaksi_detail det ON t.id = det.id_transaksi
Right Join
Right join mengembalikan semua baris dari tabel kanan(tabel 2) dan hanya baris dari tabel lain dimana join dalam kondisi terpenuhi. Right join berlawanan mutlak dengan left join.
Sintaks
SELECT table1.columns, table2.columns FROM table1 RIGHT JOIN table2 ON table1.common_filed = table2.common_field;
Contoh Penggunaan Right Join
Contoh 5
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan FROM tbl_transaksi t RIGHT JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan
Contoh 6
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan, kode_produk, nama_produk, jumlah_produk, harga, diskon, (harga - diskon)*jumlah_produk total FROM tbl_transaksi t RIGHT JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan LEFT JOIN tbl_transaksi_detail det ON t.id = det.id_transaksi
BACA JUGA
Cross Join
Cross join mencocokan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua. Jika table1 memiliki "x" kolom dan table2 memiliki "y" kolom maka tabel yang dihasilkan akan memiliki (x + y) kolom.
Sintaks
SELECT columns FROM table1 CROSS JOIN table2;
Contoh Penggunaan Cross Join
Contoh 7
SELECT t.id, kode_transaksi, tanggal_transaksi, nomor_pelanggan, kode_produk, nama_produk, jumlah_produk, harga, diskon, (harga - diskon)*jumlah_produk total FROM tbl_transaksi t CROSS JOIN tbl_transaksi_detail det
Full Join
Full join mengembalikan semua baris tabel kiri(tabel 1) dan tabel kanan(tabel 2). Full join akan memberikan nilai NULL pada field yang kondisi join tidak sesuai.
Sintaks
SELECT table1.columns, table2.columns FROM table1 FULL JOIN table2 ON table1.common_filed = table2.common_field;
Contoh Penggunaan Full Join
Contoh 8
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan FROM tbl_transaksi t FULL JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan
Contoh 9
SELECT t.id, kode_transaksi, tanggal_transaksi, t.nomor_pelanggan, nama_pelanggan, kode_produk, nama_produk, jumlah_produk, harga, diskon, (harga - diskon)*jumlah_produk total FROM tbl_transaksi t FULL JOIN tbl_pelanggan p ON t.nomor_pelanggan = p.nomor_pelanggan LEFT JOIN tbl_transaksi_detail det ON t.id = det.id_transaksi
Sekian tutorial dan contoh penggunaan join pada postgresql. Silahkan tinggalkan komentar.
Mantap...!
BalasHapus