• Tidak ada hasil yang ditemukan

TUGAS I VIEWS BASIS DATA II

N/A
N/A
Protected

Academic year: 2021

Membagikan "TUGAS I VIEWS BASIS DATA II"

Copied!
25
0
0

Teks penuh

(1)

1

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

(2)

2

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

(3)

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 satu-satunya 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 PLAYERS

SELECT * FROM TOWNS

(4)

4 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 FROM PLAYERS

WHERE LEAGUENO IS NOT NULL SELECT *

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.

(5)

5 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 FROM PLAYERS

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

(6)

6 SELECT *

FROM CPLAYERS

WHERE PLAYERNO BETWEEN 6 AND 27 SELECT *

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

SELECT * FROM DIGITS Hasilnya :

Di balik kata CREATE, kita dapat menentukan OR REPLACE. Jika nama tampilan sudah ada, rumus view baru menimpa yang lama.

(7)

7 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 FROM PLAYERS

WHERE TOWN = 'Stratford' SELECT *

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(*) FROM PLAYERS

GROUP BY TOWN

SELECT TOWN, "COUNT(*)" FROM RESIDENTS

(8)

8 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 SELECT *

FROM PLAYERS

WHERE BIRTH_DATE < '1960-01-01'

(9)

9 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 SELECT *

FROM PLAYERS

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:

(10)

10  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 SELECT *

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 SELECT *FROM VETERANS menjadi SELECT * FROM PLAYERS, 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

(11)

11 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 SELECT *

FROM PLAYERS

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.

(12)

12 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 FROM PLAYERS

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.

(13)

13

<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

(14)

14

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.

(15)

15 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) FROM PLAYERS

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 FROM PLAYERS

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

(16)

16 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 SELECT * FROM PLAYERS 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 (SELECT * FROM PLAYERS

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 ---

(17)

17 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

FROM PLAYERS

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.

SELECT *

FROM PLAYERS

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

(18)

18 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 SELECT * FROM PLAYERS WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES)

Penjelasan : dengan kata TEMPTABLE, kita mengindikasikan bahwa table sementara harus dibuat dalam proses statement SELECT pada views ini-penyelesaiannya 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

(19)

19 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.

SELECT *

FROM PLAYERS

WHERE PLAYERNO IN (SELECT PLAYERNO FROM PENALTIES) AND TOWN = 'Stratford'

dan

SELECT TOWN, COUNT(*) FROM PLAYERS

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 SELECT *

FROM PLAYERS WHERE PLAYERNO IN

(SELECT PLAYERNO FROM PENALTIES)

Sekarang dua pernyataan SELECT sebelumnya dapat disederhanakan dengan menggunakan PPLAYERS view:

(20)

20 SELECT *

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 ...

FROM PLAYERS, 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 ...

FROM PLAYERS, 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.

(21)

21

SELECT DISTINCT NAME, INITIALS, DIVISION

FROM PLAYERS 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

(22)

22 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 rata-rata 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

(23)

23

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 FROM PLAYERS 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 SELECT *

FROM PLAYERS

(24)

24

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)

(25)

25

FROM PENALTIES

GROUP BY PLAYERNO

26.5 1. SELECT YEAR(BORN) – 1900 AS DIFFERENCE, COUNT(*)

FROM (SELECT PLAYERNO, NAME, NITIALS, BIRTH_DATE AS BORN

FROM PLAYERS

WHERE TOWN = 'Stratford') AS STRATFORDERS GROUP BY DIFFERENCE 2. SELECT EXPENSIVE.PLAYERNO FROM (SELECT * FROM PLAYERS WHERE PLAYERNO IN (SELECT PLAYERNO

FROM PENALTIES)) AS EXPENSIVE, (SELECT PLAYERNO, NAME,

INITIALS, BIRTH_DATE AS BORN FROM PLAYERS

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.

Gambar

Tabel VIEWS pada INFORMATION_SCHEMA catalog berisi data di views.

Referensi

Dokumen terkait

Hasil pene- litian didapat bahwa persepsi perawat tentang kualitas pada aspek akurasi pendokumentasi- an asuhan keperawatan menggunakan SIMRS hampir seluruh responden

bahwa dalam rangka meningkatkan daya guna dan hasil guna serta kesejahteraan Anggota Tentara Nasional Indonesia, perlu mengubah gaji pokok Anggota Tentara Nasional

2) Guru bersama dengan peserta didik mengidentifikasi kelebihan dan kekurangan kegiatan pembelajaran (yaitu kegiatan mengumpulkan informasi dengan cara …, menjawab pertanyaan

Olch karena itu perlu dilakukan penelitian untuk membuktikan bagaimana hubungan antara preeklampsia berat dengan berat bayi lahir rendah di Rumah Sakit Islam Siti Khodijah

Dalam Bab II Ketentuan Umum Pasal 2 Peraturan daerah Kota Samarinda Nomor 16 Tahun 2002 ayat 2 yaitu Pembinaan dimaksud pada ayat (1) pasal ini dapat berbentuk Yayasan,

[r]

Hasil dari penelitian ini adalah tekanan darah sebelum pemberian intervensi sebagian besar adalah prehypertension (39%), tekanan darah setelah pemberian intervensi

Tradisi batagak kudo-kudo adalah acara untuk merayakan, serta memberitahu kepada semua orang bahwa seseorang akan mengatap rumahnya dan rumah itu akan siap