TUGAS I VIEWS BASIS DATA II

dokumen-dokumen yang mirip
Basis Data II. Pertemuan Ke-8 (Views & Users Authorisation) Noor Ifada S1 Teknik Informatika - Unijoyo 1

Basis Data II. Pertemuan Ke-6 (Function) Noor Ifada

Basis Data I. Pertemuan Ke-11 (SQL Part 2) Noor Ifada.

Basis Data II. Pertemuan Ke-7 (Union dan Join) Noor Ifada S1 T. Informatika - UTM (2012) 1

Basis Data II. Pertemuan Ke-2 (Review Data Manipulation Language [DML]) Noor Ifada

Basis Data II. Pertemuan Ke-9 dan ke-10 (Stored Procedure dan Trigger) Noor Ifada S1 T. Informatika - UTM (2012) 1

Basis Data I. Pertemuan Ke-10 (SQL Part 1) Noor Ifada.

Membuat Function, Stored Procedur dan View pada MySQL

MODUL 3. View PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

@Tessy Badriyah, SKom. MT. PERTEMUAN 12 VIEW

Modul 3 : Query Penggabungan Tabel

VIEW : Tabel Virtual VIEW 5/29/2017

2. Sub Kompetensi Dapat menggunakan dan mengimplementasikan View.

PENGANTAR TEKNOLOGI SISTEM INFORMASI MANAGEMENT 2

Perangkat Lunak Pengembangan Web

STRUCTURE QUERY LANGUAGE DDL & DML

Basis Data. Bagian IV SQL (3) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Constraint dan Manajemen Data dalam Timezone Berbeda

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET PEMROGRAMAN WEB Semester: 2 MYSQL 200 menit No.: Job: 12 Tgl: Hal.

SEKOLAH TINGGI TEKNOLOGI INDONESIA TANJUNG PINANG

Basis Data II. Pertemuan Ke-11 (System Catalog) Noor Ifada S1 Teknik Informatika - Unijoyo 1

INTEGRITAS BASIS DATA. OLEH : Slamet Sn Wibowo Wicaksono

Data Manipulation Language (DML)

Statement DDL Create database drop database Create table drop table alter table

Praktikum Basis Data. By. Rita Wiryasaputra, ST., M. Cs.

Oracle Academic Initiative

Contoh SQL Constraint

Konsep Sistem Informasi B. BAB 2 - SQL Overview

Pengenalan Structured Query Language

Pertemuan VI F U N C T I O N

MODUL 9 VIEW A. TUJUAN B. PETUNJUK C. DASAR TEORI. Praktikum Basis Data 2017 TE UM

TABLE JOIN SQL SERVER 2005

Praktikum Basis Data 2017 TE UM MODUL 8 TRIGGER A. TUJUAN

Pengertian Query. Query adalah perintah-perintah untuk mengakses data pada sistem basis data

Karena VIEW dibentuk tanpa mencantumkan nama kolom baru, maka v1 mewarisi kolom yang yang dipilih pada tabel mahasiswa_xxx.

LAPORAN PRAKTIKUM MODUL 1 PENGENALAN MYSQL

PRAKTIKUM 5 SISTEM BASIS DATA JOIN

Pertemuan 12 Pengenalan Structured Query Language

Macam - Macam Perintah Pada SQL

SUBQUERY-2. MI2154 SQL LANJUT Dedy Rahman Wijaya, S.T., M.T., OCA

Kegiatan Praktikum Sistem Basis Data Kelompok B

STRUCTURE QUERY LANGUAGE

Oracle Academic Initiative

Praktikum Basis Data 14 Structure Query Language 2

Contoh 3.1: Membuat suatu store procedure supaya menghapus semua pertandingan pemain berdasarkan nomor pemain yang ditentukan.

M0564-Pengantar Sistem Basisdata 12/ 1

Praktikum Basis Data (Database Server MySQL) Bekerja Dengan Tabel

BAB II PEMBUATAN DAN MANAJEMEN TABLE

Contoh SQL Constraint

Komponen-Komponen SQL a. Data Definition Language (DDL) : Digunakan untuk mendefinisikan data dengan menggunakan perintah : create, drop, alter.

S Q L STRUCTURED QUERY LANGUAGE DEFINITION MANIPULATION C O N T R O L D M L SELECT INSERT UPDATE DELETE

Sistem Basis Data Danny Kriestanto, S.Kom., M.Eng

Mudafiq Riyan Pratama

Bab 3. Query Lanjutan POKOK BAHASAN: TUJUAN BELAJAR:

Rencana Pelaksanaan Pembelajaran

BAB 2 : Dasar Penulisan Statemen SQL Sasaran Mengetahui kemampuan dari SQL SELECT Statement Dapat membuat perintah SQL dengan SELECT Statement

MODUL 4. Query SELECT dan DML (INSERT, UPDATE, DELETE) PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

PERTEMUAN 10 PEMBUATAN TABEL

Persiapan Table Untuk Latihan Sebelum kita berkenalan lebih jauh dengan Trigger, mari kita buat terlebih dahulu, struktur table yang dibutuhkan.

TABEL. Tabel Halaman 25

SQL Data Definition Language (DDL)

Basis Data. Bagian IV SQL (2) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

MODUL V SUB QUERY & VIEW

Pertemuan 10. Bahasa Query Terapan

Basis Data Terapan. Yoannita, S.Kom

Syntax Syntax SQL. Untuk lebih jelasnya dapat dilihat sebagai berikut : 1. DDL (Definition Data Language) a. CREATE

KapitaSelekta. (KBKI82127, 2 sks) Materi : Pengenalan MySQL

PERTEMUAN 9 MANIPULASI DATA

Pertemuan VII TRIGGERS

MODUL 1. Pembuatan tabel, pendefinisian constraint, export dan import PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

Pertemuan DDL INDIKATOR. Modul Teori Database Aknela

MODUL V DATA MANIPULATION LANGUAGE (DML) 1

OPTIMALISASI QUERY DALAM BASIS DATA MY SQL MENGGUNAKAN INDEX

Jobsheet SQL Dasar : Hari Zulianto, ST [Year]

Eksekusi file setup.exe yang ada dalam CD atau folder instalasi oracle.

Mahasiswa memahami fungsi-fungsi lain di dalam SQL Mahasiswa memahami tentang operasi agregasi Mahasiswa mampu mengaplikasikan operasi agregasi

STRUCTURE QUERY LANGUAGE (SQL)

RENCANA PEMBELAJARAN

S Q L. Sejarah SQL. Penulisan Perintah SQL. SQL (Structure Query Language)


Obyek pada Oracle. Manajemen Obyek Basis Data dan Dictionary View. Obyek pada Oracle adalah segala hal yang bisa dibuat di Oracle, seperti:

BAHASA QUERY KOMERSIAL

RENCANA PROGRAM KEGIATAN PERKULIAHAN SEMESTER (RPKPS)

Pemrograman Basis Data Berbasis Web

Pengenalan Database Management System MySQL. Pokok Bahasan: Pengenalan DataBase Pembangunan database berbasis Client-Server Dasar-Dasar MySQL

STRUCTURED QUERY LANGUAGE (SQL) (Implementasi menggunakan MySQL)

Oracle Academic Initiative

Oracle Academic Initiative

Basis Data Spasial Modul 2

MySQL Databases. Dasar-dasar MySQL dan Implementasi MySQL kedalam pemrograman PHP. Jakarta, 16 April 2011 Oleh: M. Awaludin, S.Kom

LAPORAN TUGAS BASIS DATA I

SISTEM BASIS DATA 1. WAHYU PRATAMA, S.Kom., MMSI.

Desain Fisik Basis Data. Yusuf 2010

Riyanto

MODUL IV DATA DEFINITION LANGUAGE (DDL)

Sistem Basis Data 1. Pertemuan 5 dan 6 Aljabar Relasional dan SQL Rogayah, ST.,MMSI Untuk 3DB01 dan 3DB04

Sejarah(1) Sejarah(2) STRUCTURE QUERY LANGUANGE (1) Definisi SQL

Apakah SQL? Membuat basis data dan struktur tabel Input, update, dan delete data dari tabel Membuat query sederhana dan kompleks SQL

MODUL PEMPROGRAMAN SQL TINGKAT DASAR 1 STANDAR KOMPETENSI: MENERAPKAN BAHASA PEMPROGRAMAN SQL TINGKAT DASAR SMK NEGERI 1 MAJALENGKA

Transkripsi:

TUGAS I VIEWS BASIS DATA II Disusun Oleh : Kelompok BD2-B5 Bisma alfian imanata 100411100014 Fitria Dwindah mukhtalifah 100411100081 Nur chandra sundara 100411100089 Shohib 100411100101 Dosen Pengampu : Noor Ifada TEKNIK INFORMATIKA UNIVERSITAS TRUNOJOYO MADURA MARET 2012 1

DAFTAR ISI Cover... 1 Daftar Isi... 2 26.1 Pendahuluan... 3 26.2 Membuat Views.... 3 26.3 Nama Kolom Pada Views... 7 26.4 Merperbarui Views: WITH CHECK OPTION... 8 26.5 Pilihan Dari Views... 11 26.6 Menghapus Views... 12 26.7 Views and the Catalog... 13 26.8 Kekurangan pada Perubahan Views... 14 26.9 Cara Kerja Statemen View... 16 26.10 Area Applikasi PadaViews... 19 26.11 Jawaban... 24 2

26.1 PENDAHULUAN MySQL mendukung dua jenis tabel: tabel nyata, umumnya dikenal sebagai tabel dasar, dan tabel turunan, juga disebut views. Tabel dasar diciptakan dengan CREATE TABLE pernyataan dan adalah satusatunya di mana data dapat disimpan. Contohnya adalah PLAYERS dan TEAMS tabel dari database klub tennis. Sebuah tabel diturunkan, atau melihat, menyimpan ada baris itu sendiri. Sebaliknya, ia berfungsi sebagai rumus atau formula untuk menggabungkan data tertentu dari tabel dasar untuk membuat"virtual" tabel. Itu kata virtual digunakan karena isi dari pandangan hanya ada bila digunakan dalam pernyataan. Pada saat itu, MySQL mengambil rumus yang membentuk view formula, mengeksekusinya, dan menyajikan pengguna dengan apa yang lihatnyamenjadi tabel nyata. Bab ini menjelaskan cara view diciptakan dan bagaimana view dapat digunakan. Beberapa aplikasi yang berguna termasuk menyederhanakan laporan rutin dan reorganisasi tabel.dua bagian mencakup pembatasan query dan memperbarui view. 26.2 MEMBUAT VIEW View di buat dengan statemen CREATE VIEW. DEFINISI <create view statement> ::= CREATE [ OR REPLACE ] VIEW <view name> [ <column list> ] AS <table expression> [ WITH [ CASCADED LOCAL ] CHECK OPTION ] Contoh 26.1: Buat tampilan yang memegang nama-nama kota semua dari tabel PLAYERS dan menampilkan isi virtual pandangan baru. CREATE VIEW TOWNS AS SELECT DISTINCT TOWN FROM TOWNS Hasilnya :

Contoh 26.2: Buatlah View yang menampilkan nomor pemain dan nomor liga dari semua pemain yang memiliki sejumlah liga dan menampilkan isi virtual view ini. CREATE VIEW CPLAYERS AS SELECT PLAYERNO, LEAGUENO WHERE LEAGUENO IS NOT NULL FROM CPLAYERS Hasilnya : Statemen CREATE VIEW membuat dua tampilan: TOWNS dan CPLAYERS. Sebuah ekspresi tabel mendefinisikan isi view masing-masing dan membentuk rumus view. Dua view ini dapat dilihat seperti tabel dasar, dan view CPLAYERS bahkan diperbarui (lihat Bagian 26.8). Contoh 26.3: Carilah pemain dan nomor liga untuk pemain yang nomor kompetisinya antara 6 dan 44. 4

FROM CPLAYERS WHERE PLAYERNO BETWEEN 6 AND 44 Hasilnya : Jika kita tidak menggunakan tampilan CPLAYERS untuk pertanyaan yang sama tetapi diakses tabel PLAYERS langsung, kita akan membutuhkan statemen SELECT karena lebih kompleks untuk mengambil informasi yang sama: SELECT PLAYERNO, LEAGUENO WHERE LEAGUENO IS NOT NULL AND PLAYERNO BETWEEN 6 AND 44 Contoh 26.4: Hapus pemain yang nomor kompetisi liganya adalah 7060. DELETE FROM CPLAYERS WHERE LEAGUENO = '7060' Bila statemen ini dieksekusi, ia menghapus baris di data tabel (PLAYERS) di mana kolom LEAGUENO sama dengan 7060. Isi view tidak disimpan, tetapi bukan berasal ketika melihat ini dirujuk. Ini berarti bahwa, menurut definisi, selalu sejalan dengan isi dari tabel dasar. Setiap update yang dibuat untuk data dalam tabel dasar segera terlihat dalam sebuah view. Pengguna tidak perlu khawatir tentang integritas isi dari view, selama integritas dari tabel dasar tetap terjaga. kita kembali ke subjek memperbarui view dalam Bagian 26.8. Tampilan lain dapat ditentukan dalam formula view. Dengan kata lain, kita mungkin membutuhkan view bersarang. Contoh 26.5: Buat tampilan yang menampilkan pemain di semua kompetisi yang nomor pemainnya antara 6 dan 27, dan menampilkan isi virtual view ini CREATE VIEW SEVERAL AS 5

FROM CPLAYERS WHERE PLAYERNO BETWEEN 6 AND 27 FROM SEVERAL Hasilnya : Dalam kebanyakan kasus, ekspresi tabel mengambil data dari tabel dasar atau views, namun, ekspresi tabel dapat memberikan hasil tanpa mengakses tabel (lihat Contoh 7.34). Oleh karena itu, views tidak perlu didefinisikan pada tabel dasar. Lihat contoh ini: Contoh 26.6: Buatlah view dimana DIGIT 0 sampai 9 yang muncul, dan tampilkan hasilnya. CREATE VIEW DIGITS AS SELECT 0 DIGIT UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 FROM DIGITS Hasilnya : Di balik kata CREATE, kita dapat menentukan OR REPLACE. Jika nama tampilan sudah ada, rumus view baru menimpa yang lama. 6

26.3 NAMA KOLOM PADA VIEWS Nama-nama kolom dalam tampilan biasa untuk nama kolom pada klausa SELECT. Misalnya, dua kolom dalam tampilan SEVERAL disebut PLAYERNO dan LEAGUENO. Views mewarisi nama kolom. Anda dapat juga secara eksplisit mendefinisikan nama kolom views. Contoh 26.7: Buatlah view yang menampilkan jumlah pemain, nama, inisial, dan tanggal kelahiran setiap pemain yang tinggal di Stratford. CREATE VIEW STRATFORDERS (PLAYERNO, NAME, INIT, BORN) AS SELECT PLAYERNO, NAME, INITIALS, BIRTH_DATE WHERE TOWN = 'Stratford' FROM STRATFORDERS WHERE PLAYERNO > 90 Perhatikan nama kolom yang di hasilkan : Nama kolom baru yang permanen. Anda tidak lagi dapat merujuk pada kolom PLAYERNO atau BIRTH_DATE dalam tampilan STRATFORDERS. MySQL memungkinkan ekspresi dalam klausa SELECT formula views menjadi fungsi atau perhitungan bukan spesifikasi kolom. Nama kolom adalah sama dengan ekspresi. Contoh 26.8: Untuk setiap kota, Buatlah view yang menampilkan nama tempat dan nomor pemain yang tinggal di kota itu dan kemudian tampilkan isi dari view. CREATE VIEW RESIDENTS AS SELECT TOWN, COUNT(*) GROUP BY TOWN SELECT TOWN, "COUNT(*)" FROM RESIDENTS 7

Hasilnya : Penjelasan: Pandangan ini memiliki nama kolom dua: TOWN dan COUNT (*). Perhatikan bahwa COUNT nama (*) harus diapit oleh tanda kutip ganda. Latihan 26.1: Buat tampilan yang disebut NUMBERPLS yang berisi semua tim angka dan jumlah total pemain yang telah bermain untuk tim itu. (Asumsikan bahwa setidaknya satu pemain telah berkompetisi untuk setiap tim.) Latihan 26,2: Buat tampilan yang disebut WINNER yang berisi jumlah dan nama setiap pemain yang, untuk setidaknya satu tim, telah memenangkan satu pertandingan. Latihan 26,3: Buat tampilan yang disebut TOTALS yang mencatat jumlah total hukuman untuk setiap pemain yang telah terjadi setidaknya satu penalti. 26.4 UPDATING VIEWS: WITH CHECK OPTION Kita telah melihat sejumlah contoh di mana tabel yang mendasarinya sedang diupdate melalui metode view. Hati-hati dalam menggunakan metode updating view, karena dapat menghasilkan hasil yang tak terduga. Contoh berikut menggambarkan situasi ini. Contoh 26,9: Buat tampilan semua pemain yang lahir lebih awal dari 1960. CREATE VIEW VETERANS AS WHERE BIRTH_DATE < '1960-01-01' Hasil running : 8

Sekarang kita ingin mengubah tanggal lahir veteran pemain dengan nomor 2 dari 1 September 1948 menjadi 1 September 1970. Querynya seperti dibawah ini : UPDATE VETERANS SET BIRTH_DATE = '1970-09-01' WHERE PLAYERNO = 2 Hasil running : Proses update sudah benar. Tanggal lahir pemain nomor 2 di table PLAYERS telah berubah. Namun, akibat dari proses update ini adalah pemain nomor 2 tidak muncul lagi jika kita melihat view menggunakan perintah SELECT. Hal ini dikarenakan pemain tidak lagi memenuhi kondisi yang ditentukan dalam rumus view setelah update terjadi. Jika Anda memperluas definisi view menggunakan WITH CHECK OPTION, MySQL memastikan bahwa efek yang tidak dikehendaki tidak akan muncul. Definisi view kemudian menjadi: CREATE VIEW VETERANS AS WHERE BIRTH_DATE < '1960-01-01' WITH CHECK OPTION Hasil running : Jika tampilan yang digunakan mencakup klausa with check options, semua perubahan pada tampilan dengan menggunakan pernyataan UPDATE, INSERT, dan DELETE diperiksa untuk validitas: 9

Sebuah pernyataan UPDATE adalah benar jika baris yang diupdate masih termasuk konten (virtual) dari isi tampilan(view). Sebuah pernyataan INSERT adalah benar jika baris baru yang diupdate masih termasuk konten (virtual) isi dari tampilan(view). Sebuah pernyataan DELETE adalah benar jika baris yang dihapus masih termasuk (virtual) isi dari tampilan(view). Seperti yang disebutkan sebelumnya, view dapat diulang, atau dengan kata lain, view bisa ditumpuk di atas view lain. Anda mungkin bertanya-tanya sejauh mana pengecekan melalui WITH CHECK OPTION dapat dilakukan. Jika kita melakukan cek dengan WITH CASCADED CHECK OPTION, maka semua tampilan (view) akan tercek. Ketika WITH LOCAL CHECK OPTIONdigunakan, LOCAL CHECK OPTION memeriksa kondisi hubungan dalam tampilan yang sedang diperbarui merupakan satu-satunya kondisi yang diperiksa. CASCADE merupakan pilihan default. Example 26.10: Buat tampilan semua pemain yang lahir lebih awal dari tahun 1960 dan tinggal di kota Ingglewood. CREATE VIEW INGLEWOOD_VETERANS AS FROM VETERANS WHERE TOWN = 'Inglewood' WITH CASCADED CHECK OPTION Hasil Running : Tidak muncul, karena dalam View VETERANS tidak ada pemain yang tinggal di Ingglewood. Tetapi ketika kita mengubah FROM VETERANS menjadi SELECT *, maka akan muncul tampilan seperti di bawah ini. Penjelasan: Jika kita menggunakan pernyataan INSERT untuk menambahkan pemain dalam tampilan ini, ia harus tinggal di Inglewood dan harus telah lahir lebih awal dari 1 Januari 1960. Ketika kita tidak menggunakan Cascade, setiap pemain yang kami tambahkan ke table INGLEWOOD_VETERANS harus tinggal di Inglewood. MySQL tidak lagi 10

melakukan cek itu. with check options hanya dapat digunakan dalam hubungannya dengan tampilan yang dapat diperbarui sesuai dengan aturan yang tercantum dalam Bagian 26.8. 26.5 PILIHAN DARI VIEWS Anda dapat menentukan pilihan khusus seperti hak istimewa dan metode pengolahan untuk setiap view.on <create view statement> ::= CREATE [ OR REPLACE ] [ DEFINER = { <user name> CURRENT_USER } ] [ SQL SECURITY { DEFINER INVOKER } ] [ ALGORITHM = { MERGE TEMPTABLE UNDEFINED } ] VIEW <viewname> [ <column list> ] AS <table expression> [ WITH [ CASCADED LOCAL ] CHECK OPTION ] Dengan definer option kita dapat mengindikasikan atau mengetahui creator atau definer yang membuat tampilan itu. Apabila pilihan itu tidak ditentukan, user yang menciptakan tampilan itu adalah definer. Kita bisa mengganti ini dengan membuat tampilan untuk pengguna SQL lain Example 26.11: Buat tampilan dengan user JACO sebagai definernya. CREATE DEFINER = 'JACO'@'%' VIEW JACO_VIEW AS WHERE PLAYERNO > 100 Menentukan istilah CURRENT_USER sebagai definer, memiliki hasil yang sama seperti menghilangkan pilihan definer. Seorang user mungkin memiliki hak untuk tampilan query, tetapi apa yang terjadi jika tampilan table query untuk user yang sama tidak memiliki hak untuk melakukan SELECT? SQL SECURITY OPTION yang menentukan hasilnya. Jika SQL SECURITY OPTION belum ditentukan, aturannya adalah user yang membuat tampilan harus dapat melakukan SELECT pada table query. Misalnya, jika tampilan V1 pada table query T1, definer harus bisa melakukan perintah SELECT untuk table T1. Untuk pengguna lainnya dari V1 tidak perlu melakukan hal yang sama dengan definer tadi. SQL SECURITY option tidak sama dengan SQL SECURITY DEFINER. Jika kita spesifikasikan SQL SECURITY INVOKER, tampilan dari user harus secara eksplisit harus bisa dikenali secara mudah untuk melakukan akses table. Oleh karena itu, setiap user query V1 harus bisa melakukan perintah SELECT pada table T1. 11

ALGORITMA option menunjukkan bagaimana view harus diproses secara internal. Ada dua metode yang bisa dipakai untuk memproses pernyataan view. Metode pertama disebut MERGE, salah satu statement query yaitu SELECT, dikombinasikan dengan rumus view. Akibatnya, salah satu dari pernyataan SELECT yang dikombinasikan, diproses. Dengan metode TEMPTABLE, perintah SELECT pada view diproses dalam dua tahap. Selama langkah pertama diproses, hasil sementara dari rumus view ditentukan dan di simpan dalam table. Pada langkah ke 2, pernyataan SELECT di jalankan sampai ditemukan hasil sementara. Apabila ALGORITMA option belum ditentukan, atau jika sudah di atur agar tidak terdefinisi, maka MySQL akan menentukan metode mana yang akan diterapkan. Example 26.12: Buat tampilan proses dengan menggunakan metode MERGE untuk akses setiap user CREATE SQL SECURITY INVOKER ALGORITHM = MERGE VIEW SIMPLE_VIEW AS SELECT PLAYERNO WHERE PLAYERNO > 100 Semua option termasuk creator dan view formula, dapat di ubah dengan menggunakan pernyataan ALTER USER. <alter view statement> ::= ALTER [ DEFINER = { <user name> CURRENT_USER } ] [ SQL SECURITY { DEFINER INVOKER } ] [ ALGORITHM = { MERGE TEMPTABLE UNDEFINED } ] VIEW <view name> [ <column list> ] AS <table expression> [ WITH [ CASCADED LOCAL ] CHECK OPTION ] 26.6 MENGHAPUS VIEWS DROP VIEW digunakan untuk menghapus tampilan. Dengan menggunakan statement ini, setiap referensi tampilan yang dihapus, maka tampilan yang lainnya akan secara otomatis terhapus. Ketika base table di drop, maka semua tampilan yang sudah ditetapkan maupun yang belum ditetapkan, juga akan ter drop juga. 12

<drop view statement> ::= DROP VIEW [ IF EXISTS ] <table specification> [, <table specification> ]... [ RESTRICT CASCADE ] Example 26.13: hilangkan tampilan CPLAYERS Ketika ada spesifikasi tabel yang ditentukan, maka tidak ada pesan error yang muncul. RESTRICT dan CASCADE pada script di atas tidak memiliki efek apapun jika tidak ada spesifikasi table yang ditentukan. 26.7 VIEWS DAN CATALOG Informasi tentang views tercatat di berbagai tabel. Pada tabel VIEWS, sebuah baris menyimpan masing-masing view. Kolom VIEW_ID merupakan primary key dari tabel katalog ini. Kolom VIEW_NAME dan CREATOR merupakan sebuah alternate key. Nama Kolom Tipe Data Deskripsi VIEW_CREATOR CHAR Nama dari database yang termasuk view VIEW_NAME CHAR Nama dari view CREATE_TIMESTAMP TIMESTAMP Tanggal saat view dibuat; tapi, kolom ini tidak terdapat pada MYSQL WITHCHECKPOT CHAR Bernilai YES jika view didefinisikan dengan WITH CHECK, CASCADED, atau LOCAL OPTION; sebaliknya, nilainya adalah NO IS_UPDATABLE CHAR Bernilai YES jika view bisa diperbarui; sebaliknya, nilainya adalah NO 13

COMMENT CHAR Komentar dimasukkan dengan menggunakan statement COMMENT VIEWFORMULA CHAR Menampilkan formula (table lambang) Kolom-kolom view mewarisi tipe data dari kolom lambang mulai dari kalimat SELECT sampai view formula. Contoh 26.14 : Dapatkah sebuah table memanggil STOCK yang telah dibuat di DATABASE TENNIS, atau apakah namanya sudah ada? SELECT TABLE_NAME FROM TABLES WHERE TABLE_NAME = 'STOCK' AND TABLE_CREATOR = 'TENNIS' UNION SELECT VIEW_NAME FROM VIEWS WHERE VIEW_NAME = 'STOCK' AND VIEW_CREATOR = 'TENNIS' Keterangan : Statement SELECT mengecek apakah table atau view telah dibuat dengan nama STOCK pada DATABASE TENNIS. Jika statement tersebut memiliki hasil, nama table ini tidak dapat digunakan lagi. Tabel VIEWS pada INFORMATION_SCHEMA catalog berisi data di views. 26.8 KEKURANGAN PADA PERUBAHAN VIEWS Statement INSERT, UPDATE, dan DELETE mungkin dapat di eksekusi pada views. Bagaimanapun, MYSQL memiliki beberapa kekurangan. Contohnya, baris-baris pada beberapa views tidak boleh di delete atau di update. Bagian ini menutupi kekurangan yang digunakan untuk merubah views. Sebuah view dapat dirubah hanya jika satu per satu sarat ada diantara baris-baris view dan baris-baris pokok table. Tambahan, rumus view akan memenuhi kondisi-kondisinya. Tujuh kondisi pertama digunakan pada semua statements update. 14

1. SELECT tidak dapat berisi DISTINCT 2. SELECT tidak dapat berisi kumpulan fungsi 3. FROM tidak dapat berisi lebih dari satu table 4. WHERE tidak dapat menyambungkan subquery 5. Statement SELECT tidak dapat berisi klausa GROUP BY (atau klausa HAVING) 6. Statement SELECT tidak dapat berisi klausa ORDER BY 7. Statement SELECT tidak dapat menggunakan operator Pada penambahan, kekurangan selanjutnya ada pada UPDATE 8. Kolom yang sebenarnya tidak dapat di UPDATE Kolom BEGIN_AGE pada view berikutnya tidak dapat di update (meskipun PLAYERNO dapat di update) : CREATE VIEW AGES (PLAYERNO, BEGIN_AGE) AS SELECT PLAYERNO, JOINED YEAR(BIRTH_DATE) Penambahan, kekurangan selanjutnya ada pada INSERT : 9. SELECT harus ada isinya, dari table yang menentukan FROM, semua kolom yang nilainya null tidak mengijinkan atau untuk yang nilainya no default akan ditetapkan. Ini adalah kenapa INSERT tidak dapat menentang view yang selanjutnya-ini tidak berisi semua kolom NOT NULL, seperti SEX dan TOWN : CREATE VIEW PLAYERS_NAMES AS SELECT PLAYERNO, NAME, INITIALS Latihan 26.4 : Bab ini telah banyak menampilkan contoh-contoh view. Untuk tiap view yang selanjutnya, menandai apakah UPDATE, INSERT, atau DELETE akan dapat dilakukan oleh : 1. TOWNS 2. CPLAYERS 3. SEVERAL 4. DIGITS 5. STRATFORDERS 6. RESIDENTS 7. VETERANS 8. TOTALS 9. AGES 15

26.9 CARA KERJA STATEMENT VIEW Tahap berjalannya (lihat Chapter 6, statement SELECT, Tabel Expresi, dan subqueries ) tidak dapat di eksekusi satu per satu, seperti yang terjadi pada table dasar. MYSQL mencapai klausa FROM dan mencoba untuk mengambil baris dari database; hal ini menjumpai masalah karena view berisi baris yang tidak tersimpan. MYSQL tahu bahwa ini bekerja pada view. Untuk memproses step ini, MYSQL dapat memilih diantara dua method dinamakan substitution dan materialization. Dengan method pertama, rumus view digabungkan ke statement SELECT. Method ini dinsmsksn pengganti karena nama view pada statement SELECT diganti dengan rumus view. Selanjutnya, statement SELECT mencapai proses. Contoh selanjutnya mengilustrasikan method ini. Contoh 26.15 : buatlah view dari semua data pemain yang terkena penalty. Selanjutnya, tampilkan nomor tiap pemain dari COST_RAISERS view yang telah mendapatkan sedikitnya satu penalty dan tinggal di Stratford. CREATE VIEW COST_RAISERS AS WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) SELECT PLAYERNO FROM COST_RAISERS WHERE TOWN = 'Stratford' Proses step pertama berisi gabungan dari formula view ke statement SELECT dan membuat statement selanjutnya: SELECT PLAYERNO FROM ( WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES)) AS VIEWFORMULA WHERE TOWN = 'Stratford' Sekarang statement ini dapat diproses dengan berpindah terus ke step yang tetap. Akhirnya hasilnya adalah: PLAYERNO -------- 16

6 Lihat contoh selanjutnya yang menggunakan STRATFORDERS view dari bagian 26.3. Contoh 26.16 : hapus semua orang Stratford yang lahir diatas 1965. DELETE FROM STRATFORDERS WHERE BORN > '1965-12-31' Setelah namanya telah diganti dengan formula view, statement dibaca: DELETE WHERE BIRTH_DATE > '1965-12-31' AND TOWN = 'Stratford' Method yang lainnya yang diproses berarti telah berhasil. Pada method ini, table expresi dari rumus view diproses pertama, yang memberikan sebuah hasil perantara. Selanjutnya, statement SELECT yang sebenarnya di eksekusi pada hasil perantara. Jika kita akan memproses Contoh 26.15 yang telah selesai, statement selanjutnya akan di eksekusi pertama. WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) Ini menghasilkan hasil perantara (untuk lebih sederhananya, hanya kolom PLAYERNO dan TOWN yang telah ditampilkan): PLAYERNO TOWN --------------- --------- 6 Stratford 8 Inglewood 27 Eltham 17

44 Inglewood 104 Eltham MYSQL menyimpan hasil perantara ini di memori internal. Setelah itu, statement selanjutnya di eksekusi : SELECT PLAYERNO FROM <intermediate result> WHERE TOWN = 'Stratford' Kedua method tersebut memiliki kelebihan dan kekurangan. MYSQL sendiri menentukan method yang mana yang harus digunakan pada setiap situasi; bagaimanapun, pengguna dapat memilih pemrosesan method dengan menentukannya pada dafinisi view. Contoh 26.17: buatlah view dari semua data pemain yang mendapatkan penalty dan pastikan bahwa MYSQL menggunakan method yang sudah selesai selama proses. CREATE VIEW EXPENSIVE_PLAYERS AS ALORITHM = TEMPTABLE WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) Penjelasan : dengan kata TEMPTABLE, kita mengindikasikan bahwa table sementara harus dibuat dalam proses statement SELECT pada views inipenyelesaiannya harus dikerjakan. Jika MERGE dikatakan sebagai algoritma, pengganti method lah yang digunakan. Dengan UNDEFINED, MYSQL membuat keputusannya sendiri. Latihan 26.5 : bagaimana statement berikut muncul setelah rumus view dimasukkan pada pengganti method? 1. SELECT YEAR(BORN) 1900 AS DIFFERENCE, COUNT(*) FROM STRATFORDERS GROUP BY DIFFERENCE 2. SELECT COST_RAISERS.PLAYERNO FROM COST_RAISERS, STRATFORDERS 18

WHERE COST_RAISERS.PLAYERNO = STRATFORDERS.PLAYERNO 3. UPDATE STRATFORDERS SET BORN = '1950-04-04' WHERE PLAYERNO = 7 26.10 AREA APPLIKASI PADA VIEW VIEW dapat digunakan dalam berbagai aplikasi. Ada beberapa bagian dari VIEW ini. Tidak ada signifikansi dengan urutan yang dibahas. 26.10.1 PENYEDERHANAAN DARI PERNYATAAN YANG BIASA DIGUNAKAN PERNYATAAN YANG SERING DIGUNAKAN ATAU SECARA STRUKTURAL MIRIP DAPAT DISEDERHANAKAN MELALUI PENGGUNAAN VIEW. Contoh 26.18: Lihatlah dari dua pernyataan ini yan dimasukkan. WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) AND TOWN = 'Stratford' dan SELECT TOWN, COUNT(*) WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) GROUP BY TOWN Kedua pernyataan diatas berhubungan dengan pemain yang telah dikeluarkan setidaknya satu penalti, maka bagian dari pemain dapat didefinisikan oleh view: CREATE VIEW PPLAYERS AS WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) Sekarang dua pernyataan SELECT sebelumnya dapat disederhanakan dengan menggunakan PPLAYERS view: 19

FROM PPLAYERS WHERE TOWN = 'Stratford' and SELECT TOWN, COUNT(*) FROM PPLAYERS GROUP BY TOWN Contoh 26.19: perhatikan tabel PLAYERS sering bergabung dengan tabel MATCHES. SELECT..., MATCHES WHERE PPLAYERS.PLAYERNO = MATCHES.PLAYERNO AND... Dalam hal ini, pernyataan SELECT menjadi lebih sederhana jika bergabung dan didefinisikan sebagai view: CREATE VIEW PLAY_MAT AS SELECT..., MATCHES WHERE PLAYERS.PLAYERNO = MATCHES.PLAYERNO Setelah menggabungkan, sekarang kita dapat mengambil bentuk yang sederhana: SELECT... FROM PLAY_MAT WHERE... 26.10.2 REORGANISASI STRUKTUR TABEL Tabel dirancang dan digunakan berdasarkankan keadaan tertentu. Keadaan/kondisi sewaktu-waktu dapat berubah, yang berarti bahwa struktur juga berubah. Misalnya, kolom baru akan ditambahkan ke sebuah tabel, atau dua tabel dapat bergabung menjadi tabel tunggal. Dalam beberapa kasus, reorganisasi struktur tabel membutuhkan alter/ mengubah pernyataan yang sudah dikembangkan dan operasional. Perubahan tersebut memerlukan banyak waktu dan biaya. Dengan penanganan yang tepat maka akan meminimalisir waktu dan biaya yang kita gunakan. Agar lebih jelas maka perhatikan contoh. Contoh 26.20: Untuk setiap pemain kompetisi, carilah nama, inisial, dan divisi di mana ia pernah dimainkan. 20

SELECT DISTINCT NAME, INITIALS, DIVISION AS P, MATCHES AS M, TEAMS AS T WHERE P.PLAYERNO = M.PLAYERNO AND M.TEAMNO = T.TEAMNO Hasilnya adalah: NAME INITIALS DIVISION --------- -------- -------- Parmenter R first Baker E first Hope PK first Everett R first Collins DD second Moorman D second Brown M first Bailey IP second Newcastle B first Newcastle B second Untuk alasan yang tidak diketahui, tabel TEAMS dan tabel MATCHES perlu ditata kembali; kedua tabel tersebut digabungkan untuk membentuk satu tabel, tabel RESULT, seperti berikut: Kolom CAPTAIN dalam tabel RESULT sebelumnya adalah kolom PLAYERNO dari tabel TEAMS. Kolom ini telah diberi nama lain, jika tidak, maka akan ada dua kolom yang bernama PLAYERNO. Semua pernyataan yang mengacu pada dua tabel, termasuk pernyataan SELECT sebelumnya, sekarang 21

perlu ditulis ulang. Agar tidak kesulitan dan untuk menulis ulang, solusi yang lebih baik adalah mendefinisikan dua pandangan yang mewakili tabel TEAMS dan tabel MATCHES, masing-masing: CREATE VIEW TEAMS (TEAMNO, PLAYERNO, DIVISION) AS SELECT DISTINCT TEAMNO, CAPTAIN, DIVISION FROM RESULT CREATE VIEW MATCHES AS SELECT MATCHNO, TEAMNO, PLAYERNO, WON, LOST FROM RESULT Isi yang sebenarnya dari 2 view sama dengan isi 2 table yang asli. Tidak ada yang perlu ditulis ulang, termasuk kata kunci SELECT. Kita tidak dapat mengelola setiap reorganisasi tabel dengan view. Karena itu sangat berpengaruh, misalnya, untuk menyimpan data tentang pemain pria dan wanita pada tabel yang terpisah. Kedua tabel berisi kolom yang sama sebagai tabel PLAYERS tetapi menghilangkan kolom SEX. Hal ini dimungkinkan untuk merekonstruksi tabel PLAYERS asli dengan melihat menggunakan operator UNION, akan tetapi memasukkan view tidak diperbolehkan 26.10.3 TAHAP-TAHAP PENGEMBANGAN PERNYATAAN SELECT kita perlu menjawab pertanyaan berikut: Untuk setiap pemain dari Stratford yang telah mendapatkan pinalti yang lebih besar daripada pinalti ratarata pemain dari tim kedua dan yang bermain minimal satu tim divisi pertama, carilah nama dan inisial. Kita bisa menulis sebuah pernyataan SELECT yang besar untuk menjawab ini, tetapi kita juga bisa mengembangkan sebuah query dengan cara bertahap. Pertama, kita membuat tampilan semua pemain yang telah mendapatkan setidaknya satu penalti yang lebih besar daripada pinalti rata-rata untuk pemain dari kedua tim: CREATE VIEW GREATER AS SELECT DISTINCT PLAYERNO FROM PENALTIES WHERE AMOUNT > (SELECT AVG(AMOUNT) FROM PENALTIES WHERE PLAYERNO IN (SELECT PLAYERNO 22

FROM MATCHES WHERE TEAMNO = 2)) Kemudian kita membuat tampilan dari semua pemain yang bertanding untuk tim dalam divisi pertama: CREATE VIEW FIRST AS SELECT DISTINCT PLAYERNO FROM MATCHES WHERE TEAMNO IN (SELECT TEAMNO FROM TEAMS WHERE DIVISION = 'first') Dengan menggunakan dua view/ tampilan, maka kita bisa menjawab pertanyaan awal: SELECT NAME, INITIALS WHERE TOWN = 'Stratford AND PLAYERNO IN (SELECT PLAYERNO FROM GREATER) AND PLAYERNO IN (SELECT PLAYERNO FROM FIRST) Kita dapat membagi masalah ke "mini-problem/ masalah-masalah kecil" dan menjalankannya menggunakan langkah-langkah, membuat satu pernyataan SELECT panjang. 26.10.4 KENDALA DALAM MENENTUKAN INTEGRITAS Gunakan klausa WITH CHECK OPTION untuk menerapkan aturan yang membatasi kemungkinan nilai-nilai yang dapat dimasukkan ke dalam kolom. Contoh 26.21: Kolom SEX pada tabel PLAYERS berisi nilai 'M' atau 'F'. Dengan menggunakan klausa WITH CHECK OPTION maka akan otomatis menjalankan ini. Lihat definisi dibawah: CREATE VIEW PLAYERSS AS WHERE SEX IN ('M', 'F') 23

WITH CHECK OPTION Kami tidak mengizinkan orang lain mengakses tabel PLAYERS langsung, sebaliknya, orang lain perlu menggunakan tampilan PLAYERSS. dengan klausa WITH CHECK OPTION tes setiap kali menggunakan pernyataan UPDATE dan INSERT untuk menentukan apakah nilai yang ada di kolom SEX dapat di diizinkan untuk diakses. Catatan: Jika cek yang diinginkan dapat didefinisikan dengan batasan integritas cek, menggunakan aplikasi ini adalah saran yang dianjurkan. 26.10.5 KEAMANAN DATA Tampilan juga dapat digunakan untuk melindungi bagian tabel. Pada pembahasan selanjutnya Bab 28, "Pengguna dan Data Keamanan, "mencakup topik ini secara rinci. Latihan 26.6: Tentukan apakah reorganisasi dari struktur database berikut yang mungkin menggunakan view. 1. Kolom NAME ditambahkan ke tabel PENALTIES tetapi juga tetap dalam tabel PLAYERS. 2. Kolom TOWN akan dihapus dari tabel PLAYERS dan ditempatkan pada tempat yang sama dengan kolom PLAYERNO dalam tabel terpisah. 26.11 JAWABAN 26.1 CREATE VIEW NUMBERPLS (TEAMNO, NUMBER) AS SELECT TEAMNO, COUNT(*) FROM MATCHES GROUP BY TEAMNO 26.2 CREATE VIEW WINNERS AS SELECT PLAYERNO, NAME FROM PLAYERS WHERE PLAYERNO IN (SELECT PLAYERNO FROM MATCHES WHERE WON > LOST) 26.3 CREATE VIEW TOTALS (PLAYERNO, SUM_PENALTIES) AS SELECT PLAYERNO, SUM(AMOUNT) 24

FROM GROUP BY PENALTIES PLAYERNO 26.5 1. SELECT YEAR(BORN) 1900 AS DIFFERENCE, COUNT(*) FROM (SELECT PLAYERNO, NAME, NITIALS, BIRTH_DATE AS BORN WHERE TOWN = 'Stratford') AS STRATFORDERS GROUP BY DIFFERENCE 2. SELECT EXPENSIVE.PLAYERNO FROM ( WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES)) AS EXPENSIVE, (SELECT PLAYERNO, NAME, INITIALS, BIRTH_DATE AS BORN WHERE TOWN = 'Stratford') AS STRATFORDERS WHERE EXPENSIVE.PLAYERNO = STRATFORDERS.PLAYERNO 3. UPDATE PLAYERS SET BIRTH_DATE = '1950-04-04' WHERE PLAYERNO = 7 26.6 1. ya 2. Ya, tapi melihat dapat di-query hanya, tidak diperbarui, karena pandangan rumus berisi bergabung. 25