Create View

Selain tabel, database juga bisa menyimpan view yang kegunaannya seperti tabel. Sama seperti saat membuat tabel, klausa yang digunakan adalah "create". Seperti tabel, view juga bisa dihapus dengan drop. Bedanya, create view hanya berisi query dengan statement select. 

Hasil dari create view dianggap seperti sebuah tabel sehingga bisa diolah lagi dengan select. Ini tentunya akan berguna saat query yang ingin dibuat terlalu panjang. Walaupun dianggap sebagai tabel, view tidak bisa diolah dengan statement update, delete, atau insert.

Sintaks :

  • CREATE [TEMP] VIEW [IF NOT EXISTS] nama_view[(daftar_nama_kolom)] AS statement_select

Contoh Query :

  • CREATE VIEW tabelku AS SELECT nama, harga, kuantitas, (harga*kuantitas) AS total FROM siswa
Klausa temp diperlukan jika  view hanya digunakan untuk koneksi yg sedang berlangsung, tanpa menyimpannya ke dalam database. Sama dengan TEMP, "If not exist" yang digunakan untuk mengecek keberadaan view juga opsional.

//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 isi_database(sqlite3 *conn){
    char query[255];
    static stringku data[4][3]={{"Deri", "3A", "75"}, {"Panji", "3A", "95"}, {"Romi", "3B", "80"}, {"Doni", "3B", "70"}};
	     
    sqlite3_exec(conn, "Create Table siswa(id INTEGER Primary Key, nama Text, kelas Text, nilai INTEGER);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<4;i++){
        sprintf(query, "INSERT INTO siswa(id, nama, kelas, nilai) VALUES('%d', '%s', '%s', '%s')", i, data[i][0], data[i][1], data[i][2]);
        sqlite3_exec(conn, query, 0, 0, &err);
    }
}

int main(){
    int res=0;
    sqlite3 *conn=NULL;
    sqlite3_stmt *stmt=NULL;
    sqlite3_open("databaseku.dat", &conn);
	
    //jika database kosong, tambah tabel
    sqlite3_exec(conn, "Drop Table siswa", 0, 0, &err);
    isi_database(conn);

    //gunakan query
    sqlite3_exec(conn, "Create view tabelku if not exists AS SELECT kelas, Sum(nilai) AS total, Avg(nilai) AS mean FROM siswa Group By kelas", 0, 0, &err);
    
    sqlite3_exec(conn, "SELECT kelas, total FROM tabelku", callback, 0, &err);
	
    sqlite3_close(conn);
    return 0;
}
Output
kelas : 3A
total : 170

kelas : 3B
total : 150