Minggu, 06 Oktober 2019

BAB 13 RECURSIVE QUERIES

Recursive adalah proses pemanggilan dirinya sendiri (fungsi atau prosedur). Fungsi maupun prosedur yang memanggil dirinya disebut fungsi atau prosedur rekursif. Fungsi antuk suatu bagian program yang mengembalikan (menghasilkan) hanya satu nilai.

BAB 12 TRIGGERS


Trigger adalah code procedural yang secara otomatis tereksekusi sebagai respon terhadap event tertentu pada table atau view tertentu pada database.  Trigger biasanya digunakan untuk menjaga integrity dari informasi pada database. Misal pada desa akan terdata otomatis ketika penginputan dilakukan (pada kasus ini diasumsikan petugas yang menginputkan adalah Moeljoko dengan iddesa = 1).

Gambar 12.1 Contoh pembuatan trigger

 
Kita inputkan lagi data lainnya


BAB 11 FUNGSI DAN PROSEDUR



11.1 Fungsi

Fungsi (function) pada MySQL sama dengan bahasa pemrograman yang lain. Fungsi mengembalikan suatu nilai, yang berbeda dengan prosedur. Berikut contoh penggunaan fungsi.

Gambar 11. 1 Contoh penggunaan fungsi

11.2 Prosedur

Prosedur (procedure) mirip dengan fungsi, dimana yang membedakan adalah suatu prosedur tidak mengembalikan nilai. Berikut contoh dari prosedur.



BAB 10 ORDERING, GROUPING DAN HAVING



10.1 Ordering

Fungsi ordering digunakan untuk mengurtkan tampilan data berdasarkan atribut tertentu. Misal diminta untuk ditampilkan jeniskegiatan dan alamat kegiatan yang diurutkan berdasarkan jenis kegiatan.
 
Gambar 10. 1  Data kegiatan yang diurutkan berdasarkan jenis kegiatan
Secara default fungsi ordering mengurutkan data secara ascending, yaitu secara alfabetik dari A ke Z, atau secara angka dari yang terkecil ke terbesar. Pengurutan juga bisa dilakukan secara descending. Misalkan diminta untuk menampilkan data kegiatan dan alamat kegiatannya diurutkan berdasarkan jenis kegiatan.



 
Gambar 10. 2 Data kegiatan  yang diurutkan berdasarkan jeniskegiatan  secara descending

10.2 Grouping

Grouping artinya pengelompokkan, digunakan untuk mengelompokkan data berdasarkan atribut tertentu. Sebagai contoh Anda diminta untuk menampilkan banyaknya buku dan total stok dari buku untuk setiap penerbit. Query yang dapat digunakan adalah:

Gambar 10. 3 Menampilkan idkegiatan dengan menggunakan grouping
10.3 Having
Having digunakan untuk menggantikan WHERE dan biasanya digunakan ketika harus dipasangkan dengan fungsi agregat.

Gambar 10. 4 Menampilkan data pengarang dengan menggunakan having

BAB 9 VIEW



9.1       Definisi View

Tujuan dari pembuatan view adalah untuk kenyamanan (mempermudah penulisan query), untuk keamanan (menyembunyikan beberapa kolom yang bersifat rahasia), atau dalam beberapa kasus bisa digunakan untuk mempercepat proses menampilkan data (terutama jika kita akan menjalankan query tersebut secara berulang). 
Misal ingin dibuat dua buah tampilan. Tampilan pertama yaitu menampilkan daftar kegiatan tampilan satunya menampilkan daftar pemberitahuan. Untuk tampilan pertama querynya cukup mudah:

Gambar 9. 1 Data kegiatan
Sedangkan untuk menampilkan tampilan yang kedua, kita perlu melakuan subquery bersarang dengan memanfaatkan query pada tampilan pertama:
Gambar 9. 2 Data kegiatan
Query yang digunakan untuk menampilkan tampilan kedua adalah query yang cukup panjang. Jika diinginkan tampilan yang lain yang levelnya bahkan lebih tinggi daripada tampilan kedua tersebut, tentunya akan menjadi sangat rumit sekali.
Disinilah view dapat digunakan untuk membantu seorang programmer.

9.2       Membangun View

Disini akan dibagi menjadi dua sub bab lagi, yaitu view untuk data kegiatan dan pemberitahuan.

9.3       Menghapus View

Untuk menghapus view dapat menggunakan perintah DROP. Sebelum dihapus, view dapat dilihat pada list tabel:
Jika dilakukan penghapusan, maka daftar view pun akan hilang.

BAB 8 JOIN


 

8.1     Natural Join
Jika diperhatikan, penulisan query menggunakan SELECT untuk menampilkan data yang berrelasi menggunakan klausa WHERE memerlukan banyak energi. Query yang dituliskan panjang sehingga kemungkinan kesalahan dalam penulisan query pun semakin besar. Sebagai contoh perhatikan query berikut yang menggunakan klausa WHERE:
Gambar 8. 1 Menampilkan data desa dan kegiatan menggunakan klausa WHERE

Sekarang Anda dapat membuat tampilan yang sama dengan query yang lebih singkat, yaitu menggunakan NATURAL JOIN. Seperti yang ditunjukkan pada gambar berikut:
Gambar 8. 2 Menampilkan data kegiatan dan desa menggunakan NATURAL JOIN
Anda tidak perlu lagi menyamakan FK dengan PK nya, karena NATURAL JOIN memastikan atribut yang bernama sama pasti berhubungan. Sehingga Anda dapat menghemat waktu dan energi dengan menggunakan NATURAL JOIN. Walaupun demikian, ada paling tidak dua kondisi yang harus diperhatikan jika Anda memutuskan menggunakan NATURAL JOIN:
1.      Pastikan untuk atribut-atribut yang berhubungan/berrelasi memiliki nama yang sama.
2.      Pastikan untuk atribut-atribut yang tidak saling berhubungan/berrelasi tidak memiliki nama yang sama.
Untuk membuktikan kondisi tersebut, di sini akan diberikan tambahan tabel yaitu tabel petugas. Dimana tabel petugas berrelasi dengan tabel lainnya dalam hal pengelolaan sehingga database memiliki tabel yang mencatat history pengelolaan data. Lebih jelasnya digambarkan pada ERD berikut:
Gambar 8. 3 ERD yang menampilkan tabel histori pada database si_desa
Perhatikan pada tabel admin PK nya berubah menjadi idadmin (silakan diubah dengan menggunakan ALTER). Selain itu terdapat juga tambahan entitas yang lain, Berikut akan ditunjukkan pembuatan tabel ADMIN         

Gambar 8. 4 Pembuatan tabel admin
Sedangkan untuk tabel lainnya hanya akan dicontohkan pembuatan tabel kelola_pengarang saja. Silakan tabel lainnya juga dibuat dengan cara yang sama.
Gambar 8. 5 Pembuatan tabel penduduk
Kemudian isikan tabel admin dan tabel penduduk yang telah dibuat tadi dengan data sebagai berikut (tabel lainnya silakan diisi sendiri):
Perhatikan bahwa tabel admin dan tabel penduduk  memiliki atribut yang bernama sama, Akan tetapi jika kita gunakan natural join untuk menampilkan id desa dan id desa  pada tabel penduduk
Himpunan kosong dihasilkan dari natural join karena tidak memperhatikan kondisi dan syarat untuk natural join. Hal ini diakibatkan karena pada tabel admin memiliki atribut nama Untuk mengatasi permasalahan ini, dapat digunakan klausa where
Selain dengan klausa where, dapat juga digunakan left join, right join dan inner join untuk memecahkan permasalah di atas, yang dijabarkan pada sub bab beikutnya.

8.2     Left Join dan Right Join
Left Join akan menampilkan semua record dari tabel sebelah kiri, dan record dari tabel sebelah kanan yang cocok. Hasilnya akan NULL untuk bagian kanan jika tidak ada kecocokan. Misal diminta untuk ditampilkan tabel adminyang menampilkan juga no HP admin yang mencatat. Query yang tepat jika menggunakan left join adalah sebagai berikut:
Akan tetapi jika posisi kedua tabel yang berhubungan diubah, maka tampilan datanya pun akan memiliki arti yang lain.
Right join adalah join yang serupa dengan left join, hanya saja posisi tabel yang kanan akan ditampilkan semua record nya. Sedangkan tabel yang kiri hanya record yang bersesuaian saja.

8.3     Inner Join
Versi aman dari left join maupun right join adalah inner join. Inner join tidak mementingkan posisi tabel pada query dan fungsinya sama dengan klausa where.

BAB 7 SUBQUERY BERSARANG



7.1     SELECT

Berdasarkan kasus yang sudah ada, ada beberapa permasalahan yang mungkin saja agak rumit jika diselesaikan dengan query SQL dasar. Misal Anda diminta untuk menampilkan data pengarang, yang pada tahun 2017 bukunya diterbitkan oleh Erlangga dan pada tahun 2016 bukunya diterbitkan oleh Andi.
Untuk menyelesaikan ini Anda dapat menggunakan subquery bersarang:

Gambar 7. 1 Query bersarang untuk kasus SELECT
DISTINCT digunakan untuk jika dalam suatu tampilan data terdapat baris yang duplikat (lebih dari satu baris dengan isi yang sama), maka hanya ditampilkan satu baris data saja. 

7.2     INSERT

Jika Anda diminta untuk memasukkan data baru, dimana memiliki detail sebagai berikut:
Iddesa             : null
Namadesa        : Ranggang
Idkegiatan       : null
Idpemberitahuan : 11
Maka Anda dapat menggunakan query bersarang berikut untuk tabel desa:

Gambar 7. 2 Query bersarang untuk menginputkan data desa

Sementara untuk tabel kegiatan akan menjadi lebih rumit, karena kita tidak tahu informasi idkegiatan. Sedangkan PK dari desa mengharuskan format kode memuat iddesa dan idkegiatan. Hal tersebut bukan masalah, Anda dapat memasukkan kode dummy terlebih dahulu, yang kemudian Anda bisa update nantinya. Misal:
Gambar 7. 3 Query bersarang untuk menginputkan data kegiatan

Selanjutnya Anda tinggal menuliskan perintah UPDATE: 

7.3     UPDATE

Perhatikan tampilan data buku dan penerbit berikut:

 
Misalkan ada kesalahan pada data di atas. Id kegiatan Maka query bersarang yang bisa Anda gunakan adalah:

Gambar 7. 4 Query bersarang untuk kasus UPDATE

7.4     DELETE

Sama seperti kasus sebelumnya, jika diminta untuk menghapus data desa yang  kegiatan, maka query yang dapat digunakan adalah sebagai berikut:

Gambar 7. 5 Query bersarang untuk kasus DELETE
Jika data desa ada yang dihapus, lalu bagaimana dengan tabel kegiatam?
Karena sebelumnya membangun tabel desa menggunakan ON DELETE CASCADE, maka seharusnya data pada tabel tersebut akan otomatis ikut hilang. Mari kita buktikan, tampilkan data pada tabel desa menggunakan select * from desa;

TUGAS BESAR PPEMROGRAMAN VISUAL