Join On

Join digunakan untuk menggabungkan isi beberapa tabel berdasarkan kesamaan isi kolomnya. Sintaksnya bisa kalian lihat di bawah ini.

  • Select nama_kolom1, nama_kolom2, ... From nama_tabel_utama join nama_tabel_lain on kondisi
  • Select nama_kolom1, nama_kolom2, ... From nama_tabel_1 join nama_tabel2 on kondisi join nama_tabel3 on kondisi

Contoh Query :

  • SELECT penjualan.id, obat.nama, obat.harga, penjualan.kuantitas, (obat.harga*penjualan.kuantitas) AS total FROM penjualan JOIN obat ON obat.id=penjualan.obat

Jika ada kolom yang namanya sama, kita perlu menambahkan nama tabel sebelum nama kolomnya yang dipisahkan dengan titik. Misalnya, jika tabel obat dan penjualan sama-sama punya kolom bernama id, maka kita harus menulis obat.id dan penjualan.id untuk membedakan kedua kolom tersebut.

//install librarynya kalau belum ada
#include <iostream>
#include <sqlite3.h>

char *err;
typedef char stringku[30];

int callback(void *notused, int jkolom, char **dataku, char **kolom){
   for(int i=0;i<jkolom;i++)printf("%s = %s\n", kolom[i], dataku[i]);
   printf("\n");
   return 0;
}

void database_penjualan(sqlite3 *conn){
    char query[255];
    static stringku data[5][2]={{"1", "3"}, {"2", "4"}, {"1", "5"}, {"0", "6"}, {"0", "4"}};
	     
    sqlite3_exec(conn, "Create Table penjualan(id INTEGER Primary Key, obat INTEGER, kuantitas INTEGER);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<5;i++){
        sprintf(query, "INSERT INTO penjualan(id, obat, kuantitas) VALUES('%d','%s', '%s')", i, data[i][0], data[i][1]);
        sqlite3_exec(conn, query, 0, 0, &err);
    }
}

void database_obat(sqlite3 *conn){
    char query[255];
    static stringku data[3][2]={{"Parasetamol", "7000"}, {"Dexametason", "10000"}, {"Antasida", "20000"}};
	     
    sqlite3_exec(conn, "Create Table obat(id INTEGER Primary Key, nama Text, harga INTEGER);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<5;i++){
        sprintf(query, "INSERT INTO obat(id, nama, harga) VALUES('%d','%s', '%s')", i, data[i][0], data[i][1]);
        sqlite3_exec(conn, query, 0, 0, &err);
    }
}

int main(){
	int res=0;
	char query[255]="SELECT penjualan.id, obat.nama, obat.harga, penjualan.kuantitas, (obat.harga*penjualan.kuantitas) AS total FROM penjualan join obat on obat.id=penjualan.obat";
	sqlite3 *conn=NULL;
	sqlite3_stmt *stmt=NULL;
	sqlite3_open("databaseku.dat", &conn);
	
	//jika database kosong, tambah tabel
	if(conn){
	     database_obat(conn);
	     database_penjualan(conn);
	}
	
	//gunakan query
	sqlite3_exec(conn, query, callback, 0, &err);
	sqlite3_close(conn);
	return 0;
}
Output
id = 0
nama = Dexametason
harga = 10000
kuantitas = 3
total = 30000

id = 1
nama = Antasida
harga = 20000
kuantitas = 4
total = 80000

id = 2
nama = Dexametason
harga = 10000
kuantitas = 5
total = 50000

id = 3
nama = Parasetamol
harga = 7000
kuantitas = 6
total = 42000

id = 4
nama = Parasetamol
harga = 7000
kuantitas = 4
total = 28000

Contoh di atas menggabungkan informasi dari tabel obat ke dalam tabel penjualan. Tabel penjualan berperan sebagai tabel utama yang ditampilkan informasinya sehingga ada 5 data yang ditampilkan. Hasilnya akan berbeda jika tabel utamanya ditukar.