Selasa, 24 Februari 2009

View di Mysql

Salah satu feature yang terdapat pada mysql 5.0 adalah view, sedangkan view sendiri apa ya ???, ada orang yang bilang kalau view adalah tabel temporari kadang ada juga yang bilang virtual tabel, tapi maksudnya sih... sama aja... sih...

biasanya view di buat untuk menyederhanakan pengambilan data, yang dimana query sebenarnya ribet, misalkan di tabel tersebut terdapat join, grup by, agregasi (sum, min, max dsb).


oke deh... kita mulai aja cara bikinnnya gimana,

kasus yang akan diambil adalah tentang nilai siswa, dimana di databases tersebut ada tiga buah tabel:
  • tabel pertama untuk menyimpan biodata siswa
  • tabel kedua untuk menyimpan mata pelajara
  • tabel ketiga untuk menyimpan nilai,
sepertinya akan lebih mudah di dibayangkan maksud gw kalau di dalam script sql, berikut ini adalah struktur tabelnya.

1. tbl_siswa (tabel untuk menyimpan biodata siswa)

CREATE TABLE `sisfo_sekolah`.`tbl_mp` (
`mp` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
PRIMARY KEY (`mp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


2. tbl_mp (tabel untuk menyimpan mata pelajaran)

CREATE TABLE `sisfo_sekolah`.`tbl_mp` (
`mp` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
PRIMARY KEY (`mp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


3. tbl_nilai (tabel untuk menyimpan nilai2 siswa)

CREATE TABLE `sisfo_sekolah`.`tbl_nilai` (
`kode` varchar(255) NOT NULL,
`nis` char(10) NOT NULL,
`mp` char(10) NOT NULL,
`nilai` int(11) NOT NULL,
PRIMARY KEY (`kode`),
KEY `nis_fk_constraint` (`nis`),
KEY `mp_fk_constraint` (`mp`),
CONSTRAINT `mp_fk_constraint` FOREIGN KEY (`mp`) REFERENCES `tbl_mp` (`mp`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `nis_fk_constraint` FOREIGN KEY (`nis`) REFERENCES `tbl_siswa` (`nis`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1


jadi ketiga tabel di atas tadi untuk intinya adalah tabel-tabel yang yang, dibutuhkan untuk menghasilkan nilai-nilai siswa dari setiap mata pelajaran.

sekarang kita ingin membuat sebuah report yang dimana di report tersebut memilik field nis, nama_siswa, nama_matapelajaran, nilai, yang dimana akan dimplementasikan query tersebut menjadi sebuah view, dibawah ini adalah cara membuat nya,

CREATE VIEW `view_nilai`
AS select `n`.`nis` AS `nis`,
`n`.`nilai` AS `nilai`,
`s`.`nama` AS `nama_siswa`,
`m`.`nama` AS `mata_pelajaran`
from ((`tbl_nilai` `n` join `tbl_siswa` `s` on((`n`.`nis` = `s`.`nis`))) join `tbl_mp` `m` on((`n`.`mp` = `m`.`mp`)))


setelah view terbuat dengan query yang cukup kompleks seperti diatas, maka untuk untuk mendapat nilai siswa berikutnya kita cukup memanggil view nya saja seperti di bawah ini,

select * from view_nilai

nah... udah bisa menangkapnya-kah maksud gw... selamat mecoba, dan semoga membantu

27 komentar:

  1. aku mau buat "view_laba". field2nya seperti di bawah ini, udah aku ketik di perintah SQL di Mysql, datanya udah tampil, tapi bagaimana cara menyimpan view_laba tersebut?, supaya nanti bisa langsung di panggil view_laba.


    SELECT beli.faktur, beli.kodesupplier, supplier.namasupplier, beli.tanggalbeli, detail_beli.kodebarang, detail_beli.hargabeli, detail_beli.jumlahbeli, (detail_beli.hargabeli*detail_beli.jumlahbeli) AS subtotal, (barang.hargajual-barang.hargabeli) AS laba
    FROM ((beli INNER JOIN supplier ON beli.kodesupplier = supplier.kodesupplier) INNER JOIN detail_beli ON beli.faktur = detail_beli.faktur) INNER JOIN barang ON detail_beli.kodebarang = barang.kodebarang;

    BalasHapus
  2. tinggal di tambahkan saja DDL untuk bikin view nya. contohnya seperti ini
    CREATE VIEW `"view_laba" AS [SQL labanya ditulis disini]

    Selanjutnya Anda cukup menuliskan SELECT * FROM view_laba untuk mendapatkan data mengeniai laba

    BalasHapus
  3. wah makasih yah infonya, blog dendie ini sangat membantu saya..

    BalasHapus
  4. saya blh tny??????
    klw cth na gni,,
    ...no_NPM
    093510126
    093510128
    nama_mhs
    tiwi
    oka
    alamat
    jl.surya
    jl.kelapa

    select,no_mhs,nama,from,table_mhs;
    ...soalnya:
    1. panggil viewnya
    2. dimana view tersimpan
    3. bagaimana mengapus view..

    gmn cr na nie????????

    BalasHapus
  5. 1. Panggil View ?
    sebelum memanggil view, membuat view dahulu untuk query tersebut.

    - Membuat View
    CREATE VIEW `view_mhs` AS SELECT no_mhs,nama FROM table_mhs

    - Memanggil View
    SELECT * FROM view_mhs


    2. dimana view tersimpan ?
    view tersimpan di database, untuk melihat ya, bisa menggunakan MySQL GUI seperti navicate, maka view tersebut akan terlihat seperti table


    3. bagaimana mengapus view ?
    DROP VIEW view_mhs

    BalasHapus
  6. bentuk umum view?

    BalasHapus
  7. bentuk atau pola penulisa view adalah seperti ini.
    CREATE VIEW [nama view] AS [tuliskan query]

    BalasHapus
  8. mau tanya doong ...
    saya dapet tugas untuk membuat contoh view dengan perintah DDL:
    CREATE
    ALTER
    DROP
    nah saya baru bisa menemukan create view dan drop view saja...
    kalo yang alter view itu gimana yaaa???
    mohon bantuannya
    terima kasih sebelumnya :)

    BalasHapus
  9. begini aja gan... contoh nya begini

    ALTER VIEW view_nilai AS select * from siswa

    atau bisa dilihat di

    http://dev.mysql.com/doc/refman/5.0/en/alter-view.html

    http://www.roseindia.net/mysql/mysql5/views.shtml

    BalasHapus
  10. mw nanya mas.. misalkan tabel2 tersebut sudah dibuatkan view.. cara mengetahui bahwa ada view diantara query tabel2 tersebut gmn..?

    BalasHapus
  11. Kalau ingin mendapatkan informasi mengenai tabel-tabel yang digunakan oleh suatu view saya belum pernah menemukan caranya.

    Tetapi apabil ingin mengetahui view yang terdapat dalam sebuah database dapat menggunakan cara dibawah ini.

    select TABLE_NAME from information_schema.VIEWS where TABLE_SCHEMA = '[NAMA DATABASE]'

    contoh

    select TABLE_NAME from information_schema.VIEWS where TABLE_SCHEMA = 'sirapphp'

    Hasil

    +----------------------------+
    | TABLE_NAME |
    +----------------------------+
    | view_reklame_ijin_terakhir |
    | view_reklame_report |
    +----------------------------+

    BalasHapus
  12. mau nanya........
    gmn caranya menampilkan record yg qt input melalui textboxt, bisa terlihat di grid.... di vb 6.0 yg tabelnya dari mysql mas...

    BalasHapus
  13. semisal mau menampilkan data tertentu saja di view. misal ak punya view isinya ada produk,banyak,harga,total.
    dan ak cuma mau menampilkan total terbesar gimana caranya gan?thx

    BalasHapus
  14. Thanks mas, Bermanfaat banget infonya. hehe

    BalasHapus
  15. Bang tanya Nih saya ada tabel Begini

    ID,Judul Buku,tgl_masuk
    1,ber cocok tanam 1,1 januari 1998
    2,ber cocok tanam 1,10 maret 1998
    3,Tutorial MySQL 1,10 maret 1998
    4,Tutorial MySQL 1,10 April 1998
    5,Tutorial MySQL 1,10 juli 1998
    6,Komputer pemula ,10 juni 1998


    Saya ingin membuat view yang manampilkan seperti ini

    ID,Judul Buku,tgl_masuk,jumlah
    1,ber cocok tanam 1,1 januari 1998,2
    2,ber cocok tanam 1,10 maret 1998,2
    3,Tutorial MySQL 1,10 maret 1998,3
    4,Tutorial MySQL 1,10 April 1998,3
    5,Tutorial MySQL 1,10 juli 1998,3
    6,Komputer pemula ,10 juni 1998,1

    Gimana bang tuh statement SQL nya, pakek JOIN Gak jadi2 bang bisa di bantu? kalau berkenan kirim email ke smpn1jaya@gmail.com SQLnya

    BalasHapus
  16. min tau gak gimana caranya 'show tables' tapi view nya jangan ikut mncul juga?

    BalasHapus
    Balasan
    1. Bisa caranya seperti ini :

      select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = '[nama database]'

      Contoh :

      select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = 'akademik'

      Hapus
  17. contoh syntaxnya update pada view 2 tau gak?

    BalasHapus
  18. mengapa view itu lebih optimal dibandingkan select..???

    mengapa view itu dibilang kode rahasisa untuk menampilkan sebuah data..???

    BalasHapus
    Balasan
    1. 1. View di buat untuk menyerderhanakan pengambilan data, yang dimana query sebenarnya ribet.

      2. View adalah buka kode rahasia.

      Hapus
  19. CREATE VIEW `view_nilai`
    AS select `n`.`nis` AS `nis`,
    `n`.`nilai` AS `nilai`,
    `s`.`nama` AS `nama_siswa`,
    `m`.`nama` AS `mata_pelajaran`
    from ((`tbl_nilai` `n` join `tbl_siswa` `s` on((`n`.`nis` = `s`.`nis`))) join `tbl_mp` `m` on((`n`.`mp` = `m`.`mp`)))
    maksudnya n,s,m apa ya gan? thnks

    BalasHapus
  20. siank mas..
    mau nanya dunks, saya lupa menyimpan script view pada program saya.. adakah cara untuk menemukan script tersebut?

    tx

    BalasHapus
  21. mas mau tanya,
    kalau mau buat view dari sub query gmn ya??
    kok malah kayak gini hasilnya Error Code : 1349
    View's SELECT contains a subquery in the FROM clause
    (32 ms taken).
    sub query nya gini mas :
    select nama_dos from (select nama_dos, count(*) as jml from dosen natural join krs natural join mkuliah group by nama_dos having jml >=2) as dummy;
    tolong ya mas :D

    BalasHapus
  22. min punya contoh repot dri vb.net 2008 ke word gak.
    minta syntax nya, yg di kasih dri guru error terus.
    barang kali ada yg lain

    BalasHapus
  23. Pak saya mohon bantuannya, kira2 dimana kesalahannya karena setiap saya enter selalu muncul pesan error. Create view daftarkuliah as select dosen.NIP, dosen.Namadosen, mahasiswa.NIM, mahasiswa.Namamahasiswa, mahasiswa.Jurusan, mahasiswa.Prodi, matakuliah.Kd_Matakuliah, matakuliah.Namamatakuliah, matakuliah.Jlh_SKS from matakuliah inner join dosen on matakuliah.NIP=dosen.NIP inner join mahasiswa on matakuliah.NIM=mahasiswa.NIM; Saya mohon bantuannya dengan sangat. Trims sebelumnya

    BalasHapus