Tujuan

Hari ini kita mulai mencakup topik yang mungkin baru bahkan untuk programmer atau pengguna database yang telah memiliki beberapa hubungan ke SQL. Hari 1 sampai 8 mencakup hampir semua materi pengantar Anda butuhkan untuk memulai menggunakan SQL dan database relasional Menciptakan. Hari ke-9, “dan Memanipulasi Tabel,” telah dikhususkan untuk diskusi tentang desain database, pembuatan tabel, dan data manipulasi perintah lain. Ciri umum dari obyek yang dibahas sejauh – database, tabel, catatan, dan bidang – adalah bahwa mereka semua benda-benda fisik terletak pada hard disk. Hari ini pergeseran fokus ke dua fitur dari SQL yang memungkinkan Anda untuk melihat atau memberikan data dalam format yang berbeda dari yang terlihat pada disk. Kedua fitur tampilan dan indeks. Pada akhir hari ini, Anda akan tahu yang berikut:

  • Bagaimana membedakan antara indeks dan dilihat
  • Cara membuat pemandangan
  • Cara membuat indeks
  • Bagaimana mengubah data menggunakan dilihat
  • Apa indeks lakukan

Sebuah tampilan sering disebut sebagai tabel virtual. Tampilan diciptakan dengan menggunakan pernyataan CREATE VIEW. Setelah melihat telah dibuat, Anda dapat menggunakan perintah berikut untuk merujuk SQL untuk melihat bahwa:

  • SELECT
  • INSERT
  • INPUT
  • UPDATE
  • HAPUS

Sebuah indeks adalah cara lain penyajian data berbeda dari yang terlihat pada disk. Khusus jenis indeks menyusun ulang fisik lokasi catatan di dalam tabel. Indeks dapat dibuat pada kolom dalam tabel atau pada kombinasi kolom dalam tabel. Ketika indeks digunakan, data ini disajikan untuk pengguna dalam urutan disortir, yang Anda dapat mengontrol dengan pernyataan CREATE INDEX.Anda biasanya bisa mendapatkan perbaikan kinerja substansial oleh pengindeksan pada bidang yang benar, terutama bidang yang sedang bergabung antara tabel.


CATATAN: Tampilan dan indeks adalah dua benda yang sama sekali berbeda, namun mereka memiliki satu kesamaan: Mereka berdua terkait dengan tabel dalam database. Meskipun objek asosiasi masing-masing dengan meja yang unik, mereka berdua meningkatkan meja, sehingga pembukaan fitur canggih seperti data presorted dan standar permintaan.



CATATAN: Kami menggunakan Pribadi Oracle7 untuk menghasilkan’s contoh hari ini. Silakan lihat dokumentasi untuk pelaksanaan SQL spesifik untuk setiap perbedaan kecil dalam sintaks.


Menggunakan Tampilan

Anda dapat menggunakan pandangan, atau tabel virtual, untuk membungkus permintaan kompleks. Setelah melihat pada satu set data telah dibuat, Anda dapat memperlakukan bahwa pandangan seperti meja lain. Namun, pembatasan khusus ditempatkan pada memodifikasi data dalam pandangan. Ketika data dalam tabel perubahan, apa yang Anda lihat ketika Anda query tampilan juga berubah. Tampilan tidak mengambil ruang fisik dalam database seperti tabel lakukan.

Sintaks untuk pernyataan CREATE VIEW adalah

Sintaks:
  CREATE VIEW <view_name> [(column1, column2 ...)] AS 
  SELECT <table_name column_names> 
  DARI <table_name> 

Seperti biasa, sintaks ini mungkin tidak jelas pada pandangan pertama, tapi itu bahan ini berisi banyak contoh yang menggambarkan penggunaan dan manfaat dari pandangan. Perintah ini memberitahu SQL untuk membuat tampilan (dengan nama pilihan Anda) yang terdiri dari kolom (dengan nama pilihan Anda jika Anda suka). Sebuah pernyataan SQL SELECT menentukan bidang dalam kolom dan jenis data mereka. Ya, ini adalah pernyataan SELECT yang sama yang telah digunakan berulang kali untuk hari-hari terakhir sembilan.

Sebelum Anda dapat melakukan sesuatu yang berguna dengan dilihat, Anda perlu mengisi database BILLS dengan data yang lebih sedikit. Jangan khawatir jika Anda punya senang dan memanfaatkan pengetahuan baru ditemukan Anda perintah DROP DATABASE. Anda hanya dapat kembali menciptakannya. (Lihat Tabel 10.1, 10.2, dan 10,3 untuk data sampel.)

INPUTOUTPUT:
  SQL> BILLS membuat database; 

  Pernyataan diproses.
INPUTOUTPUT:
  SQL> BILLS membuat tabel ( 
    2 NAME CHAR (30) NOT NULL, 
    3 JUMLAH NOMOR, 
    4 account_id NUMBER NOT NULL); 

  Tabel dibuat.
INPUTOUTPUT:
  SQL> BANK_ACCOUNTS membuat tabel ( 
    2 NOMOR account_id NOT NULL, 
    3 JENIS CHAR (30), 
    4 NERACA NOMOR, 
    5 BANK CHAR (30)); 

  Tabel dibuat.
INPUTOUTPUT:
 SQL> membuat tabel PERUSAHAAN (2 NAMA CHAR (30) NOT NULL, 3 ALAMAT CHAR (50), 4 CITY CHAR (30), 5 NEGARA CHAR (2)); Tabel dibuat.

Tabel 10.1. Contoh data untuk tabel BILLS.

Nama Jumlah Account_id
Telepon Perusahaan 125 1
Power Company 75 1
Rekam Club 25 2
Software Perusahaan 250 1
Perusahaan TV kabel 35 3
Joe Istana Mobil 350 5
SC Student Loan 200 6
Air Florida Perusahaan 20 1
UO-Kami Perusahaan Asuransi 125 5
Debitur Kartu Kredit 35 4

Tabel 10.2. Contoh data untuk tabel BANK_ACCOUNTS.

Account_id Jenis Keseimbangan Bank
1 Memeriksa 500 Pertama Federal
2 Pasar uang 1200 Pertama Investor
3 Memeriksa 90 Credit Union
4 Tabungan 400 First Federal
5 Memeriksa 2500 Kedua Reksa
6 Bisnis 4.500 Kesetiaan

Tabel 10.3. Contoh data untuk tabel PERUSAHAAN.

Nama Alamat Kota Negara
Telepon Perusahaan 111 1 Street Atlanta GA
Power Company 222 2 Street Jacksonville FL
Rekam Club 333 3 Avenue Los Angeles
Software Perusahaan 444 4 Drive San Francisco
Perusahaan TV kabel 555 5 Drive Austin TX
Joe Istana Mobil Pemerintah 1000. Blvd Miami FL
SC Student Loan 25 College Blvd SC
Air Florida Perusahaan 1883 Hwy 87 Navarre FL
UO-Us Asuransi 295 Beltline Hwy Macon GA
Debitur Kartu Kredit 115 2 Avenue Newark NJ

Sekarang bahwa Anda telah berhasil menggunakan CREATE DATABASE, CREATE TABLE, dan INSERT perintah untuk memasukkan semua informasi ini, Anda siap untuk diskusi mendalam dalam berpendapat.

J Dilihat Wikipedia

Mari kita mulai dengan paling sederhana dari semua pandangan. Misalkan, untuk beberapa alasan yang tidak diketahui, Anda ingin membuat tampilan di atas meja BILLS yang terlihat identik dengan meja tapi memiliki nama yang berbeda. (Kami menyebutnya HUTANG.) Berikut pernyataan:

INPUT:
  SQL> CREATE VIEW AS HUTANG 
       SELECT * FROM BILLS; 

Untuk mengkonfirmasi bahwa operasi ini melakukan apa yang seharusnya, Anda dapat memperlakukan melihat seperti meja:

INPUT / OUTPUT:
  SQL> SELECT * FROM HUTANG; 

  JUMLAH NAMA account_id 
  Telepon Perusahaan 125 1 
  Perusahaan Power 75 1 
  Rekam Club 25 2 
  Perusahaan perangkat lunak 250 1 
  Perusahaan TV kabel 35 3 
  Istana Mobil Joe 350 5 
  Student Loan SC 200 6 
  Perusahaan Air Florida 20 1 
  UO-Kami Perusahaan Asuransi 125 5 
  Kartu Kredit Debitor 35 4 
  10 baris yang dipilih. 

Anda bahkan dapat membuat pemandangan baru dari tampilan yang ada. Hati-hati saat membuat pandangan pandangan. Meskipun praktek ini dapat diterima, hal itu mempersulit pemeliharaan.Misalnya Anda memiliki tampilan tiga level di bawah dari meja, seperti gambaran tentang pandangan pandangan tabel. Apa yang Anda pikir akan terjadi jika pandangan pertama di atas meja akan dijatuhkan? Lain Kedua masih dilihat ada, tapi mereka akan sia-sia karena mereka mendapatkan sebagian informasi mereka dari pandangan pertama. Ingat, setelah melihat telah diciptakan, berfungsi sebagai meja virtual.

INPUT:
  SQL> CREATE VIEW AS CREDITCARD_DEBTS 
    2 SELECT * FROM HUTANG 
    3 WHERE 4 = account_id; 
  SQL> SELECT * FROM CREDITCARD_DEBTS;
OUTPUT:
 NAMA BESARNYA account_id Debitor Kredit Kartu 35 4 1 baris yang dipilih.

The CREATE VIEW juga memungkinkan Anda untuk memilih kolom individu dari meja dan menempatkannya di tampilan. Memilih Contoh berikut NAMA, dan bidang meja NEGARA dari PERUSAHAAN.

INPUT:
  SQL> CREATE VIEW COMPANY_INFO (NAMA, NEGARA) SEBAGAI 
    2 SELECT * FROM PERUSAHAAN; 
  SQL> SELECT * FROM COMPANY_INFO;
OUTPUT:
  NAMA NEGARA 
  Telepon Perusahaan GA 
  Perusahaan Power FL 
  Rekam Club CA 
  Perusahaan software CA 
  Perusahaan TV kabel TX 
  Joe FL Istana Mobil 
  Student Loan SC SC 
  Perusahaan Air Florida FL 
  UO-Kami Perusahaan Asuransi GA 
  Kartu Kredit Debitor NJ 

  10 baris yang dipilih. 

CATATAN: Pengguna dapat membuat pemandangan untuk permintaan data tertentu. Katakanlah Anda memiliki sebuah meja dengan 50 kolom dan ratusan ribu baris, tetapi Anda perlu melihat data dalam hanya 2 kolom. Anda dapat membuat tampilan pada kolom kedua, dan kemudian dengan query dari tampilan ini, Anda akan melihat perbedaan besar dalam jumlah waktu yang dibutuhkan untuk hasil pencarian Anda akan dikembalikan.


Mengganti Nama Kolom

Tampilan menyederhanakan representasi data. Selain penamaan melihat, sintaks SQL untuk pernyataan CREATE VIEW memungkinkan Anda untuk mengubah nama kolom yang dipilih.Pertimbangkan contoh sebelumnya sedikit lebih erat. Bagaimana jika Anda ingin menggabungkan ALAMAT, KOTA, dan bidang NEGARA dari meja PERUSAHAAN untuk mencetak mereka pada amplop?Contoh berikut menggambarkan hal ini. Contoh ini menggunakan operator + SQL untuk menggabungkan bidang alamat ke satu alamat lama dengan menggabungkan spasi dan koma dengan data karakter.

INPUT:
  SQL> CREATE VIEW BATAS (PERUSAHAAN, MAILING_ADDRESS) SEBAGAI 
    2 SELECT NAMA, ALAMAT + "" + KOTA "+," + NEGARA 
    3 DARI PERUSAHAAN; 
  SQL> SELECT * FROM BATAS;
OUTPUT:
  PERUSAHAAN MAILING_ADDRESS 
  Telepon Perusahaan 111 1 Street Atlanta, GA 
  Perusahaan Power 222 2 Street Jacksonville, FL 
  Rekam Club 3 333 Los Angeles Avenue, CA 
  Perusahaan perangkat lunak 444 San Francisco 4 Drive, CA 
  Perusahaan TV kabel 555 Austin Drive 5, TX 
  Joe Istana Mobil 1.000 Pemerintah.  Blvd Miami, FL 
  Student Loan College SC 25 Blvd.  Columbia, SC 
  Perusahaan Air Florida 1883 Hwy.  87 Navarre, FL 
  UO-Kami Perusahaan Asuransi Beltline 295 Hwy.  Macon, GA 
  Kartu Kredit Debitor 115 2 Avenue Newark, NJ 

  10 baris yang dipilih. 
ANALISIS:

Sintaks SQL mengharuskan Anda untuk menyertakan nama field’s virtual virtual setiap kali melihat lapangan dibuat menggunakan perhitungan atau fungsi SQL. Cedure-pro ini masuk akal karena Anda tidak ingin melihat’s kolom nama menjadi COUNT (*) atau AVG (PEMBAYARAN).


CATATAN: Periksa pelaksanaan Anda untuk penggunaan operator +.


SQL Lihat Pengolahan

Tampilan dapat mewakili data di dalam tabel dalam cara yang lebih mudah dari apa yang sebenarnya yang ada di meja struktur database. Tampilan juga bisa sangat nyaman saat melakukan query beberapa kompleks dalam serangkaian (seperti dalam prosedur disimpan atau program aplikasi). Untuk memperkuat pemahaman Anda pandang dan pernyataan SELECT, bagian berikutnya membahas cara proses SQL query terhadap view. Misalnya Anda memiliki sebuah query yang sering terjadi, misalnya, Anda secara rutin bergabung dengan meja BILLS dengan tabelBANK_ACCOUNTS untuk mengambil informasi mengenai pembayaran Anda.

INPUT:
 SQL SELECT BILLS.NAME>, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCE, 2 BANK_ACCOUNTS.BANK DARI BILLS, BANK_ACCOUNTS 3 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;
OUTPUT:
  BILLS.NAME BANK_ACCOUNTS.BALANCE BANK_ACCOUNTS.BANK BILLS.AMOUNT 
  Telepon 125 500 Pertama Perusahaan Federal 
  Power Perusahaan Federal Pertama 75 500 
  Rekam Club Investor Pertama 1200 25's 
  Software 250 500 Pertama Perusahaan Federal 
  Perusahaan TV kabel 35 90 Credit Union 
  Joe Istana Mobil Kedua Reksa 350 2500 
  SC Student Loan Fidelity 200 4500 
  Perusahaan Air Florida 20 500 Pertama Federal 
  UO-Kami Perusahaan Asuransi Reksa Kedua 125 2500 

  9 baris yang dipilih. 

Anda dapat mengubah proses ini menjadi tampilan dengan menggunakan pernyataan berikut:

INPUT / OUTPUT:
  SQL> CREATE VIEW BILLS_DUE (NAMA, JUMLAH, ACCT_BALANCE, BANK) SEBAGAI 
    2 SELECT BILLS.NAME, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCE, 
    3 BANK_ACCOUNTS.BANK DARI BILLS, BANK_ACCOUNTS 
    4 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID; 

  Lihat dibuat. 

Jika Anda tanya tampilan BILLS_DUE menggunakan beberapa kondisi, pernyataan tersebut akan terlihat seperti ini:

INPUT / OUTPUT:
  SQL> SELECT * FROM BILLS_DUE 
    2 WHERE ACCT_BALANCE> 500; 

  NAMA BANK JUMLAH ACCT_BALANCE 
  Rekor Klub Investor Pertama 1200 25's 
  Joe Istana Mobil Kedua Reksa 350 2500 
  SC Student Loan Fidelity 200 4500 
  UO-Us Perusahaan Asuransi Reksa Kedua 125 2500 

  4 baris yang dipilih. 
ANALISIS:

SQL menggunakan beberapa langkah untuk memproses laporan sebelumnya. Karena BILLS_DUE adalah pandangan, bukan meja aktual, SQL pertama mencari meja bernama BILLS_DUE dan menemukan apa-apa. SQL prosesor mungkin akan (tergantung pada apa yang sistem database yang Anda gunakan) untuk mengetahui dari meja BILLS_DUE adalah sistem yang melihat. Hal ini kemudian akan menggunakan tampilan rencananya untuk membangun query berikut:

  SQL> SELECT BILLS.NAME, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCE, 
    2 BANK_ACCOUNTS.BANK DARI BILLS, BANK_ACCOUNTS 
    3 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID 
    4 DAN BANK_ACCOUNTS.BALANCE> 500; 

Contoh 10.1

Buatlah sebuah tampilan yang menunjukkan semua negara yang sedang tagihan dikirim. Juga menampilkan total jumlah uang dan jumlah tagihan yang dikirim ke masing-masing negara.

Pertama-tama, Anda tahu bahwa CREATE VIEW bagian dari pernyataan tersebut akan terlihat seperti ini:

  CREATE VIEW CONTOH (NEGARA, TOTAL_BILLS, TOTAL_AMOUNT) SEBAGAI ... 

Sekarang Anda harus menentukan apa yang query SELECT akan terlihat seperti. Anda tahu bahwa Anda ingin memilih bidang NEGERI pertama menggunakan sintaks SELECT berbedaberdasarkan kebutuhan untuk menampilkan tagihan negara-negara yang sedang dikirim. Sebagai contoh:

INPUT:
  SQL> SELECT berbeda NEGARA DARI PERUSAHAAN;
OUTPUT:
  NEGARA 
  GA 
  FL 
  CA 
  TX 
  SC 
  NJ 

  6 baris yang dipilih. 

Selain memilih bidang NEGERI, Anda perlu total jumlah pembayaran dikirim ke NEGARA. Oleh karena itu, Anda perlu untuk bergabung dengan meja BILLS dan meja PERUSAHAAN.

INPUT / OUTPUT:
  SQL SELECT COMPANY.STATE berbeda>, COUNT (BILLS. *) DARI BILLS, PERUSAHAAN 
    2 GROUP BY COMPANY.STATE 
    3 HAVING BILLS.NAME = COMPANY.NAME; 

  NEGARA COUNT (BILLS. *) 
  GA 2 
  FL 3 
  CA 2 
  TX 1 
  SC 1 
  NJ 1 

  6 baris yang dipilih. 

Sekarang bahwa Anda telah berhasil kembali dua pertiga hasil yang diinginkan, Anda dapat menambahkan nilai pengembalian yang diperlukan akhir. Menggunakan fungsi SUM untuk total jumlah uang yang dikirim ke masing-masing negara.

INPUT / OUTPUT:
  SQL> SELECT COMPANY.STATE berbeda, COUNT (BILLS.NAME), SUM (BILLS.AMOUNT) 
    2 DARI BILLS, PERUSAHAAN 
    3 GROUP BY COMPANY.STATE 
    4 HAVING BILLS.NAME = COMPANY.NAME; 
  NEGARA COUNT (BILLS. *) SUM (BILLS.AMOUNT) 
  GA 2 250 
  FL 3 445 
  CA 2 275 
  TX 1 35 
  SC 1 200 
  NJ 1 35 

  6 baris yang dipilih. 

Sebagai langkah terakhir, Anda dapat menggabungkan pernyataan SELECT dengan CREATE VIEW pernyataan yang dibuat pada awal proyek ini:

INPUT / OUTPUT:
  SQL> CREATE VIEW CONTOH (NEGARA, TOTAL_BILLS, TOTAL_AMOUNT) SEBAGAI 
    2 COMPANY.STATE berbeda SELECT, COUNT (BILLS.NAME), SUM (BILLS.AMOUNT) 
    3 DARI BILLS, PERUSAHAAN 
    4 GROUP BY COMPANY.STATE 
    5 HAVING BILLS.NAME = COMPANY.NAME; 

  Lihat dibuat. 
INPUT / OUTPUT:
  SQL> * SELECT DARI CONTOH; 

  NEGARA TOTAL_BILLS TOTAL_AMOUNT 
  GA 2 250 
  FL 3 445 
  CA 2 275 
  TX 1 35 
  SC 1 200 
  NJ 1 35 

  6 baris yang dipilih. 

Contoh sebelumnya menunjukkan Anda bagaimana merencanakan pernyataan CREATE VIEW dan laporan SELECT. Kode ini tes laporan SELECT untuk melihat apakah mereka akan menghasilkan hasil yang tepat dan kemudian menggabungkan laporan untuk membuat tampilan.

Contoh 10,2

Asumsikan bahwa kreditor Anda mengenakan biaya layanan 10 persen untuk semua akhir pembayaran, dan sayangnya Anda terlambat pada segala bulan ini. Anda ingin melihat tagihan akhir ini seiring dengan jenis rekening pembayaran berasal dari.

Ini bergabung sangatlah mudah. (Anda tidak perlu menggunakan hal seperti COUNT atau SUM Namun.), Anda akan menemukan salah satu keuntungan utama menggunakan pandangan. Anda dapat menambahkan 10 persen service charge dan menampilkannya sebagai sebuah bidang dalam melihat. Sejak saat itu, Anda dapat memilih catatan dari melihat dan telah memiliki jumlah total dihitung untuk Anda. Pernyataan tersebut akan terlihat seperti ini:

INPUT:
  SQL> CREATE VIEW LATE_PAYMENT (NAMA, NEW_TOTAL, ACCOUNT_TYPE) SEBAGAI 
    2 SELECT BILLS.NAME, * BILLS.AMOUNT 1.10, BANK_ACCOUNTS.TYPE 
    3 DARI BILLS, BANK_ACCOUNTS 
    4 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;
OUTPUT:
  Lihat dibuat.
INPUT / OUTPUT:
 SQL> * SELECT FROM LATE_PAYMENT; NAMA Perusahaan NEW_TOTAL Telepon ACCOUNT_TYPE 137,50 Memeriksa Power Perusahaan 82,50 Memeriksa Rekam Klub 27,50 Pasar Uang Perusahaan Software 275 Memeriksa kabel Perusahaan TV Joe Mobil Palace 38,50 Memeriksa 385 Memeriksa Pinjaman Mahasiswa SC 220 Bisnis Florida Perusahaan Air 22 Memeriksa UO-Us 137,50 Perusahaan Asuransi Bisnis Kartu Kredit Debitor 38,50 Tabungan 10 baris yang dipilih.

Menggunakan pembatasan SELECT

SQL pembatasan tempat-tempat tertentu dengan menggunakan perintah SELECT untuk merumuskan melihat. Dua mematuhi peraturan berlaku pada saat menggunakan SELECT:

  • Anda tidak dapat menggunakan operator UNION.
  • Anda tidak dapat menggunakan klausa ORDER BY. Namun, Anda dapat menggunakan klausa GROUP BY di maksud untuk melakukan fungsi yang sama seperti klausa ORDER BY.

Memodifikasi Data di Lihat

Seperti yang telah Anda pelajari, dengan membuat pandangan pada satu atau lebih tabel fisik dalam database, Anda dapat membuat tabel virtual untuk digunakan di seluruh skrip SQL atau aplikasi database. Setelah melihat telah dibuat dengan menggunakan CREATE VIEW ... SELECT pernyataan, Anda dapat memperbarui, memasukkan, atau menghapus tampilan data dengan menggunakan UPDATE, INSERT, dan DELETE perintah Anda pelajari tentang pada Hari 8, “Memanipulasi Data.”

Kami membahas pembatasan memodifikasi tampilan’s data yang lebih rinci nanti. Kelompok berikutnya menggambarkan contoh bagaimana untuk memanipulasi data yang ada di tampilan.

Untuk melanjutkan pekerjaan yang Anda lakukan pada Contoh 10.2, update tabel BILLS untuk mencerminkan bahwa 10 persen muatan malang terlambat.

INPUT / OUTPUT:
  SQL> CREATE VIEW AS LATE_PAYMENT 
    2 SELECT * FROM BILLS; 

  Lihat dibuat. 

  SQL> UPDATE LATE_PAYMENT 
    2 SET JUMLAH = JUMLAH * 1,10; 

  1 baris diperbarui. 

  SQL> SELECT * FROM LATE_PAYMENT; 

  NAMA NEW_TOTAL account_id 
  Telepon Perusahaan 137,50 1 
  Power Perusahaan 82,50 1 
  Rekam Club 27,50 2 
  Perusahaan perangkat lunak 275 1 
  Perusahaan TV kabel 38,50 3 
  Istana Mobil Joe 385 5 
  Student Loan SC 220 6 
  Perusahaan Air Florida 22 1 
  UO-Kami Perusahaan Asuransi 5 137,50 
  Kartu Kredit Debitor 38,50 4 

  10 baris yang dipilih. 

Untuk memastikan bahwa benar-benar diperbarui UPDATE tabel yang mendasari, BILLS, query tabel BILLS:

INPUT / OUTPUT:
  SQL> SELECT * FROM BILLS; 

  NAMA NEW_TOTAL account_id 
  Telepon Perusahaan 137,50 1 
  Power Perusahaan 82,50 1 
  Rekam Club 27,50 2 
  Perusahaan perangkat lunak 275 1 
  Perusahaan TV kabel 38,50 3 
  Istana Mobil Joe 385 5 
  Student Loan SC 220 6 
  Perusahaan Air Florida 22 1 
  UO-Kami Perusahaan Asuransi 5 137,50 
  Kartu Kredit Debitor 38,50 4 

  10 baris yang dipilih. 

Sekarang menghapus baris dari melihat:

INPUT / OUTPUT:
  SQL> HAPUS DARI LATE_PAYMENT 
    2 WHERE 4 = account_id; 

  1 baris dihapus. 

  SQL> SELECT * FROM LATE_PAYMENT; 

  NAMA NEW_TOTAL account_id 
  Telepon Perusahaan 1 137,50 
  Power Perusahaan 82,50 1 
  Rekam Club 27,50 2 
  Perusahaan perangkat lunak 275 1 
  Cable TV 3 Perusahaan 38,50 
  Istana Mobil Joe 385 5 
  SC Student Loan 220 6 
  Perusahaan Air Florida 22 1 
  UO-Kami Perusahaan Asuransi 5 137,50 

  9 baris yang dipilih. 

Langkah terakhir adalah untuk menguji fungsi UPDATE. Untuk semua tagihan yang telah NEW_TOTAL yang lebih besar dari 100, menambahkan 10 tambahan.

INPUT / OUTPUT:
  SQL> UPDATE LATE_PAYMENT 
    2 SET NEW_TOTAL = + NEW_TOTAL 10 
    3 WHERE NEW_TOTAL> 100; 

  9 baris diperbarui. 

  SQL> SELECT * FROM LATE_PAYMENT; 

  NAMA NEW_TOTAL account_id 
  Telepon Perusahaan 147,50 1 
  Power Perusahaan 82,50 1 
  Rekam Club 27,50 2 
  Perusahaan perangkat lunak 285 1 
  Perusahaan TV kabel 38,50 3 
  Istana Mobil Joe 395 5 
  Student Loan SC 230 6 
  Perusahaan Air Florida 22 1 
  UO-Kami Perusahaan Asuransi 5 147,50 

  9 baris yang dipilih. 

Masalah dengan Menggunakan Data Memodifikasi Tampilan

Karena apa yang Anda lihat melalui melihat dapat beberapa set sekelompok tabel, memodifikasi data dalam tabel yang mendasarinya tidak selalu langsung seperti contoh sebelumnya. Berikut ini adalah daftar pembatasan yang paling umum yang akan Anda hadapi saat bekerja dengan tampilan:

  • Anda tidak dapat menggunakan laporan DELETE pada pandangan beberapa meja.
  • Anda tidak dapat menggunakan pernyataan INSERT kecuali semua kolom NULL TIDAK digunakan dalam tabel yang mendasari termasuk dalam view. Pembatasan ini berlaku karena prosesor SQL tidak tahu mana nilai-nilai untuk memasukkan ke dalam kolom TIDAK NULL.
  • Jika Anda memasukkan atau memperbarui data melalui bergabung melihat, semua catatan yang harus diperbarui milik tabel fisik yang sama.
  • Jika Anda menggunakan klausa yang berbeda untuk membuat tampilan, kau tidak dapat memperbarui atau catatan memasukkan dalam pandangan bahwa.
  • Anda tidak dapat memperbarui kolom virtual (kolom yang merupakan hasil dari sebuah ekspresi atau fungsi).

Aplikasi Umum Tampilan

Berikut adalah beberapa tugas-tugas yang dilihat dapat melakukan:

  • Menyediakan fungsi keamanan pengguna
  • Konversi antara unit
  • Membuat tabel virtual baru format
  • Menyederhanakan pembangunan kompleks query

Tampilan dan Keamanan

Meskipun diskusi lengkap keamanan database muncul di Hari 12, “Database Security,” kita secara singkat menyentuh pada topik sekarang untuk menjelaskan bagaimana Anda dapat menggunakan pandangan dalam melakukan fungsi keamanan.

Semua sistem database relasional yang digunakan saat ini termasuk rangkaian lengkap dari built-in fitur keamanan. Pengguna sistem database umumnya dibagi dalam kelompok berdasarkan penggunaan database. kelompok jenis umum adalah database administrator, pengembang database, personil entri data, dan pengguna umum. Kelompok-kelompok pengguna memiliki berbagai tingkat hak istimewa saat menggunakan database. Administrator database mungkin akan memiliki kontrol penuh terhadap sistem, termasuk UPDATE, INSERT, DELETE, dan hak istimewa ALTERbasis data. Kelompok masyarakat dapat diberikan hak istimewa SELECT hanya – dan mungkin mungkin diperbolehkan untuk SELECT hanya dari tabel tertentu dalam database tertentu.

Tampilan umum digunakan dalam situasi ini untuk mengontrol informasi bahwa pengguna memiliki akses ke database. Misalnya, jika anda ingin pengguna memiliki akses hanya untuk bidang NAMAtabel BILLS, Anda hanya dapat menciptakan pandangan disebut BILLS_NAME:

INPUT / OUTPUT:
  SQL> CREATE VIEW AS BILLS_NAME 
    2 SELECT NAMA FROM BILLS; 

  Lihat dibuat. 

Seseorang dengan tingkat hak istimewa administrator sistem dapat memberikan hak istimewa kelompok masyarakat SELECT di tampilan BILLS_NAME. Kelompok ini tidak akan memiliki hak istimewa di meja BILLS mendasarinya. Seperti yang Anda duga, SQL telah memberikan keamanan data laporan untuk Anda gunakan juga. Perlu diketahui bahwa pandangan yang sangat berguna untuk melaksanakan keamanan database.

Menggunakan Tampilan Mengkonversi Unit

Tampilan juga berguna dalam situasi di mana Anda perlu menyajikan pengguna dengan data yang berbeda dari data yang benar-benar ada dalam database. Misalnya, jika bidang JUMLAHsebenarnya disimpan dalam dolar AS dan Anda tidak ingin pengguna Kanada harus terus-menerus melakukan perhitungan mental untuk melihat total AMOUNT dalam dolar Kanada, Anda dapat membuat tampilan sederhana yang disebut CANADIAN_BILLS:

INPUT / OUTPUT:
  SQL> CREATE VIEW CANADIAN_BILLS (NAMA, CAN_AMOUNT) SEBAGAI 
    2 SELECT NAMA, JUMLAH / 1,10 
    3 DARI BILLS; 

  Lihat Dibuat. 

  SQL> SELECT * FROM CANADIAN_BILLS; 

  NAME CAN_AMOUNT 
  Telepon Perusahaan 125 
  Power 75 Perusahaan 
  Record 25 Club 
  250 Perusahaan Software 
  35 Perusahaan TV kabel 
  Istana Mobil Joe 350 
  Student Loan SC 200 
  20 Perusahaan Air Florida 
  UO-125 Kami Perusahaan Asuransi 

  9 baris yang dipilih. 
ANALISIS:

Ketika unit konversi seperti ini, mengingat kemungkinan masalah yang melekat dalam memodifikasi data yang mendasar pada tabel ketika perhitungan (seperti contoh sebelumnya) digunakan untuk membuat salah satu kolom view. Seperti biasa, Anda harus berkonsultasi’s database sistem dokumentasi Anda untuk menentukan dengan tepat bagaimana menerapkan sistem perintahCREATE VIEW.

Pertanyaan Penyederhanaan Kompleks Menggunakan Tampilan

Tampilan juga berguna dalam situasi yang mengharuskan Anda untuk melakukan suatu urutan pertanyaan untuk mencapai hasil. Contoh berikut menggambarkan penggunaan pandangan dalam situasi ini.

Untuk memberikan nama semua bank yang mengirim tagihan ke negara bagian Texas dengan jumlah kurang dari $ 50, Anda akan melanggar masalah menjadi dua masalah yang terpisah:

  • Ambil semua tagihan yang dikirim ke Texas
  • Ambil semua tagihan kurang dari $ 50

Mari kita mengatasi masalah ini dengan menggunakan dua tampilan yang terpisah: BILLS_1 dan BILLS_2:

INPUT / OUTPUT:
  SQL> CREATE TABLE BILLS1 AS 
    2 SELECT * FROM BILLS 
    3 WHERE JUMLAH <50; 

  Tabel dibuat. 

  SQL> CREATE TABLE BILLS2 (NAMA, JUMLAH, account_id) SEBAGAI 
    2 BILLS BILLS DARI SELECT .*, PERUSAHAAN 
    3 WHERE BILLS.NAME = COMPANY.NAME DAN COMPANY.STATE = "TX"; 

  Tabel dibuat. 
ANALISIS:

Karena Anda ingin mencari semua tagihan dikirim ke Texas dan semua tagihan yang kurang dari $ 50, Anda sekarang dapat menggunakan SQL DI klausa untuk mencari uang di BILLS1 yang dikirim ke Texas. Gunakan informasi ini untuk menciptakan pandangan baru yang disebut BILLS3:

INPUT / OUTPUT:
  SQL> CREATE VIEW AS BILLS3 
    2 SELECT * FROM WHERE NAMA DI BILLS2 
    3 (SELECT * FROM BILLS1); 

  Lihat dibuat. 

Sekarang permintaan sebelumnya menggabungkan dengan tabel BANK_ACCOUNTS untuk memenuhi persyaratan asli contoh ini:

INPUT / OUTPUT:
  SQL> CREATE VIEW BANKS_IN_TEXAS (BANK) SEBAGAI 
    2 SELECT BANK_ACCOUNTS.BANK 
    3 DARI BANK_ACCOUNTS, BILLS3 
    4 WHERE BILLS3.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID; 

  Lihat dibuat. 

  SQL> SELECT * FROM BANK_IN_TEXAS; 

  BANK 
  Credit Union 

  1 baris yang dipilih. 

ANALISIS:

Seperti yang Anda lihat, setelah permintaan tersebut dipecah menjadi pandangan terpisah, pertanyaan akhir agak sederhana. Juga, Anda dapat menggunakan kembali pandangan individu sesering mungkin.

Pernyataan itu DROP VIEW

Yang sama dengan setiap CREATE SQL lainnya … perintah, CREATE VIEW memiliki DROP terkait … perintah. Sintaksnya adalah sebagai berikut:

Sintaks:
  SQL> DROP VIEW view_name; 

Satu-satunya hal yang harus diingat ketika menggunakan perintah DROP VIEW adalah bahwa semua pandangan lain yang melihat referensi yang sekarang tidak sah. Beberapa sistem database bahkan drop semua pandangan yang digunakan tampilan Anda jatuh. Menggunakan Pribadi Oracle7, jika Anda menurunkan tampilan BILLS1, pertanyaan akhir akan menghasilkan error berikut:

INPUT / OUTPUT:
  SQL> DROP VIEW BILLS1; 

  Lihat menjatuhkan. 

  SQL> SELECT * FROM BANKS_IN_TEXAS; 
  * 
  ERROR pada baris 1: 
  ORA-04063: view "PERKINS.BANKS_IN_TEXAS" memiliki kesalahan  

CATATAN: Sebuah tampilan dapat dijatuhkan tanpa tabel aktual yang diubah, yang menjelaskan mengapa kita sering lihat dilihat sebagai tabel virtual. (Logika yang sama dapat diterapkan pada teknologi virtual reality.)


Menggunakan Indeks

Cara lain untuk menyajikan data dalam format yang berbeda dari yang secara fisik ada di disk adalah dengan menggunakan indeks. Selain itu, indeks juga dapat menyusun ulang data yang disimpan pada disk (dilihat sesuatu yang tidak dapat dilakukan).

Indeks yang digunakan dalam database SQL untuk tiga alasan utama:

  • Untuk menegakkan batasan integritas referensial dengan menggunakan kata kunci UNIK
  • Untuk memudahkan pemesanan data berdasarkan isi indeks lapangan atau bidang
  • Untuk mengoptimalkan kecepatan eksekusi query

Apakah Indeks?

Data dapat diambil dari database dengan menggunakan dua metode. Metode pertama, yang sering disebut Metode Sequential Access, SQL mengharuskan untuk melewati setiap record mencari korek api. Metode pencarian ini tidak efisien, tetapi satu-satunya cara untuk SQL untuk menemukan arsip yang benar. Pikirkan kembali hari-hari ketika perpustakaan memiliki sistem katalog kartu pengajuan besar-besaran. Misalkan pustakawan dihapus kartu indeks alfabet, melemparkan kartu ke udara, kemudian menempatkan mereka kembali ke dalam lemari arsip. Bila Anda ingin mencari lokasi’s rak buku ini, mungkin Anda akan mulai dari awal, kemudian pergi melalui satu kartu pada suatu waktu sampai Anda menemukan informasi yang Anda inginkan. (Kemungkinannya adalah, Anda akan berhenti mencari segera setelah Anda menemukan buku tentang topik ini!)

Sekarang anggaplah pustakawan diurutkan menurut abjad judul buku. Anda dapat dengan cepat mengakses informasi buku ini dengan menggunakan pengetahuan Anda tentang alfabet untuk bergerak melalui katalog.

Bayangkan fleksibilitas jika pustakawan itu rajin tidak hanya cukup untuk menyortir buku-buku dengan judul tetapi juga menciptakan lain katalog diurutkan menurut nama pengarang dan lain diurutkan berdasarkan topik. Proses ini akan memberikan Anda, pengguna perpustakaan, dengan banyak fleksibilitas dalam mengambil informasi. Juga, Anda akan dapat mengambil informasi Anda dalam hitungan waktu yang awalnya akan diambil.

Menambahkan indeks ke database SQL memungkinkan Anda untuk menggunakan Metode Akses langsung. SQL menggunakan struktur treelike untuk menyimpan dan mengambil data indeks.Pointer ke grup data yang disimpan di bagian atas pohon. Kelompok-kelompok ini disebut node. Setiap node berisi pointer ke node lain. Kelenjar getah bening menunjuk ke kiri berisi nilai-nilai yang kurang dari node induknya. The pointer ke titik yang tepat untuk nilai lebih besar dari node induk.

Sistem database dimulai pencarian di node atas dan hanya mengikuti petunjuk sampai sukses.


CATATAN: Hasil query terhadap tabel unindexed sering disebut sebagai meja penuh scan. Sebuah meja penuh scan adalah proses yang digunakan oleh server database untuk mencari setiap baris tabel sampai semua baris yang dikembalikan dengan kondisi yang diberikan (s). Operasi ini sebanding dengan mencari buku di perpustakaan oleh mulai dari buku pertama di rak pertama dan scan setiap buku sampai Anda menemukan yang Anda inginkan. Di sisi lain, untuk mencari buku dengan cepat, Anda mungkin akan terlihat dalam) kartu katalog terkomputerisasi (. Demikian pula, indeks memungkinkan server database untuk menunjuk ke baris tertentu dari data dengan cepat dalam tabel.


Untungnya, Anda tidak diharuskan untuk benar-benar melaksanakan struktur pohon sendiri, sama seperti Anda tidak diharuskan untuk menulis pelaksanaan untuk menyimpan dan membaca dalam tabel atau database. SQL Sintaks dasar untuk membuat indeks adalah sebagai berikut:

INPUT / OUTPUT:
  SQL> CREATE INDEX index_name 
    2 ON table_name (column_name1, [column_name2], ...); 

  Indeks dibuat. 

Ketika Anda telah melihat beberapa kali sebelumnya, sintaks untuk CREATE INDEX dapat sangat bervariasi diantara sistem database. Sebagai contoh, pernyataan CREATE INDEX bawah Oracle7 terlihat seperti ini:

Sintaks:
  CREATE INDEX [schema.] Indeks 
  ON (skema [.] Tabel ([kolom dibawah! |! ASC DESC] 
       [, [Kolom dibawah! ...! ASC | DESC]]) 
     | KLASTER [schema.] Cluster) 
  [INITRANS integer] [MAXTRANS integer] 
  [Tablespace tablespace] 
  [PENYIMPANAN storage_clause] 
  [PCTFREE integer] 
  [NOSORT] 

Sintaks untuk CREATE INDEX menggunakan Sybase SQL Server adalah sebagai berikut:

Sintaks:
  membuat unik] [[berkerumun | nonclustered] 
       index index_name
on [[database.]owner.]table_name (column_name
    [, column_name]...)
[with {fillfactor = x, ignore_dup_key, sorted_data,
      [ignore_dup_row | allow_dup_row]}]
[on segment_name]

Informix SQL implements the command like this:

Sintaks:
 CREATE [UNIQUE | DISTINCT] [CLUSTER] INDEX index_name
ON table_name (column_name [ASC | DESC],
               column_name [ASC | DESC]...)

Notice that all of these implementations have several things in common, starting with the basic statement

 CREATE INDEX index_name ON table_name (column_name, ...)

SQL Server dan Oracle memungkinkan Anda untuk membuat sebuah clustered index, yang dibahas kemudian. Oracle dan Informix memungkinkan Anda untuk menetapkan apakah kolom nama harus disortir di menaik atau menurun. Kami tidak suka suara seperti kaset rusak, tapi, sekali lagi, Anda harus berkonsultasi dokumentasi sistem manajemen database Anda ketika menggunakan INDEXcommand CREATE.

Misalnya, untuk membuat indeks di bidang account_id tabel BILLS, pernyataan CREATE INDEX akan terlihat seperti ini:

INPUT:
 SQL> SELECT * FROM BILLS;
OUTPUT:
  JUMLAH NAMA account_id 
  Telepon Perusahaan 125 1 
  Perusahaan Power 75 1 
  Rekam Club 25 2 
  Perusahaan perangkat lunak 250 1 
  Perusahaan TV kabel 35 3 
  Istana Mobil Joe 350 5 
  Student Loan SC 200 6 
  Perusahaan Air Florida 20 1 
  UO-Kami Perusahaan Asuransi 125 5 
  Kartu Kredit Debitor 35 4 

  10 baris yang dipilih. 
INPUT / OUTPUT:
  SQL> CREATE INDEX ON ID_INDEX BILLS (account_id); 

  Indeks dibuat. 

  SQL> SELECT * FROM BILLS; 

  JUMLAH NAMA account_id 
  Telepon Perusahaan 125 1 
  Perusahaan Power 75 1 
  Perusahaan perangkat lunak 250 1 
  Perusahaan Air Florida 20 1 
  Rekam Club 25 2 
  Perusahaan TV kabel 35 3 
  Kartu Kredit Debitor 35 4 
  Istana Mobil Joe 350 5 
  UO-Kami Perusahaan Asuransi 125 5 
  Student Loan SC 200 6 

  10 baris yang dipilih. 

Tabel BILLS diurutkan menurut bidang account_id sampai indeks akan dibuang dengan menggunakan pernyataan INDEKS DROP. Seperti biasa, pernyataan INDEKS DROP sangat mudah:

Sintaks:
  SQL> DROP INDEX index_name; 

Berikut adalah apa yang terjadi ketika indeks akan dibuang:

INPUT / OUTPUT:
  SQL> DROP INDEX ID_INDEX; 

  Indeks menjatuhkan. 

  SQL> SELECT * FROM BILLS; 

  JUMLAH NAMA account_id 
  Telepon Perusahaan 125 1 
  Perusahaan Power 75 1 
  Rekam Club 25 2 
  Perusahaan perangkat lunak 250 1 
  Perusahaan TV kabel 35 3 
  Istana Mobil Joe 350 5 
  Student Loan SC 200 6 
  Perusahaan Air Florida 20 1 
  UO-Kami Perusahaan Asuransi 125 5 
  Kartu Kredit Debitor 35 4 

  10 baris yang dipilih. 
ANALISIS:

Sekarang tabel BILLS dalam bentuk aslinya. Menggunakan bentuk yang paling sederhana dari pernyataan CREATE INDEX fisik tidak mengubah cara meja itu disimpan.

Anda mungkin bertanya-tanya mengapa sistem database bahkan menyediakan indeks jika mereka juga memungkinkan Anda untuk menggunakan klausa ORDER BY.

INPUT / OUTPUT:
SQL> SELECT * FROM BILLS ORDER BY ACCOUNT_ID; NAME                         AMOUNT     ACCOUNT_ID Phone Company                125        1 Power Company                75         1 Software Company             250        1 Florida Water Company        20         1 Record Club                  25         2 Cable TV Company             35         3 Debtor's Credit Card         35         4 Joe's Car Palace             350        5 UO-Us Insurance Company     125        5 SC Student Loan            200        6 10 rows selected.
ANALISIS:

Ini SELECT dan ID_INDEX di meja BILLS menghasilkan hasil yang sama. Perbedaannya adalah bahwa klausa ORDER BY kembali dan perintah-macam data setiap kali Anda menjalankan pernyataan SQL yang sesuai. Bila menggunakan indeks, sistem database membuat objek indeks fisik (menggunakan struktur pohon dijelaskan sebelumnya) dan menggunakan kembali indeks yang sama setiap kali Anda query meja.

PERINGATAN: Bila meja terjatuh, semua indeks yang terkait dengan meja yang jatuh juga.
Pengindeksan Tips

Tercantum di sini adalah beberapa tips untuk diingat ketika indeks menggunakan:

  • Untuk meja kecil, menggunakan indeks tidak menghasilkan perbaikan kinerja.
  • Menghasilkan indeks perbaikan terbesar ketika kolom Anda diindeks di berisi berbagai data atau nilai NULL banyak.
  • Indeks dapat mengoptimalkan query Anda ketika mereka permintaan akan kembali sejumlah kecil data (aturan praktis yang baik adalah kurang dari 25 persen dari data). Jika Anda kembali data yang lebih sebagian besar waktu, indeks cukup tambahkan overhead.
  • Indeks dapat meningkatkan kecepatan pengambilan data. Namun, mereka lambat update data.Ingatlah ini ketika melakukan banyak pembaruan seiring dengan indeks. Untuk update sangat besar, Anda bisa mempertimbangkan menjatuhkan indeks sebelum Anda melakukan update.Ketika update selesai, cukup membangun kembali indeks Anda. Pada satu update tertentu, kami dapat menyimpan programmer 18 jam dengan menjatuhkan indeks dan menciptakan kembali setelah beban data.
  • Indeks mengambil tempat dalam database Anda. Jika Anda menggunakan sistem manajemen database yang memungkinkan Anda untuk mengelola ruang disk yang diambil database Anda, faktor dalam ukuran indeks saat perencanaan ukuran database Anda.

Selalu indeks pada kolom yang digunakan dalam bergabung antara tabel. Teknik ini dapat sangat meningkatkan kecepatan join.

Kebanyakan sistem database tidak membolehkan Anda untuk membuat indeks pada tampilan.Jika sistem database Anda memungkinkan, gunakan klausa teknik dengan pernyataan SELECT yang membangun tampilan untuk memesan data di dalam view. (Sayangnya, banyak sistem tidak memungkinkan klausa ORDER BY dengan pernyataan CREATE VIEW baik.)

Jangan indeks pada kolom yang diperbarui atau dimodifikasi secara teratur. overhead yang dibutuhkan untuk selalu memperbarui indeks akan mengimbangi keuntungan kinerja Anda berharap untuk mendapatkan.

Jangan indeks menyimpan dan tabel pada drive fisik yang sama. Memisahkan benda-benda ini akan menghilangkan pertengkaran drive dan menghasilkan permintaan yang lebih cepat.
Pengindeksan pada Lebih dari Satu Field

SQL juga memungkinkan Anda untuk indeks pada lebih dari satu lapangan. Jenis indeks merupakan indeks komposit. Kode berikut menggambarkan indeks komposit sederhana.Perhatikan bahwa walaupun dua bidang yang sedang digabungkan, hanya satu indeks fisik dibuat (disebut ID_CMPD_INDEX).

INPUT / OUTPUT:

 SQL> CREATE INDEX ID_CMPD_INDEX ON BILLS( ACCOUNT_ID, AMOUNT );

Index created.

SQL> SELECT * FROM BILLS;

NAME                         AMOUNT         ACCOUNT_ID
Florida Water Company            20                  1
Power Company                    75                  1
Phone Company                   125                  1
Software Company                250                  1
Record Club                      25                  2
Cable TV Company                 35                  3
Debtor's Credit Card             35                  4
UO-Us Insurance Company        125                  5
Joe's Car Palace                350                  5
SC Student Loan               200                  6

  10 baris yang dipilih. 

SQL> DROP INDEX ID_CMPD_INDEX;

Index dropped.
ANALISIS:

Anda dapat mencapai keuntungan kinerja dengan memilih kolom dengan nilai-nilai paling unik.Misalnya, setiap nilai dalam bidang NAMA tabel BILLS adalah unik. Bila menggunakan indeks majemuk, tempat yang paling selektif bidang pertama dalam daftar kolom. Artinya, tempat bidang yang Anda harapkan untuk memilih yang paling sering pada awal daftar. (Urutan nama kolom yang muncul dalam pernyataan INDEKS theCREATE tidak harus sama dengan urutan mereka dalam tabel) Asumsikan Anda secara rutin menggunakan pernyataan seperti berikut :

 SQL> SELECT * FROM BILLS WHERE NAME = "Cable TV Company";

Untuk mencapai keuntungan kinerja, Anda harus membuat indeks menggunakan bidang NAMA sebagai kolom terkemuka. Berikut adalah dua contoh:

 SQL> CREATE INDEX NAME_INDEX ON BILLS(NAME, AMOUNT);

atau

 SQL> CREATE INDEX NAME_INDEX ON BILLS(NAME);

Bidang NAMA adalah kolom paling kiri untuk kedua indeks ini, sehingga permintaan sebelumnya akan dioptimalkan untuk pencarian di bidang NAMA.

Komposit indeks juga digunakan untuk menggabungkan dua atau lebih kolom yang dengan sendirinya mungkin telah selektivitas rendah. Untuk contoh selektivitas, memeriksa BANK_ACCOUNTS tabel:

ACCOUNT_ID     TYPE             BALANCE     BANK 1              Checking         500         First Federal 2              Money Market     1200        First Investor's 3              Checking         90          Credit Union 4              Savings          400         First Federal 5              Checking         2500        Second Mutual 6              Business         4500        Fidelity

Perhatikan bahwa dari enam catatan, yang Memeriksa nilai muncul dalam tiga dari mereka.Kolom ini memiliki selektivitas lebih rendah dari bidang account_id. Perhatikan bahwa setiap nilai field account_id adalah unik. Untuk meningkatkan selektivitas indeks Anda, Anda bisa menggabungkan JENIS dan bidang account_id dalam indeks baru. Langkah ini akan menciptakan nilai indeks yang unik (yang, tentu saja, adalah selektivitas tertinggi yang bisa mendapatkan).

Catatan: Sebuah indeks yang berisi beberapa kolom sering disebut sebagai indeks komposit.Kinerja masalah dapat mempengaruhi keputusan Anda apakah akan menggunakan kolom-tunggal atau indeks komposit. Dalam Oracle, misalnya, Anda dapat memutuskan untuk menggunakan indeks tunggal-kolom jika sebagian besar pertanyaan Anda melibatkan satu kolom khusus sebagai bagian dari kondisi, di sisi lain, Anda mungkin akan membuat indeks komposit jika kolom dalam indeks yang sering digunakan bersama sebagai kondisi untuk permintaan. Periksa pelaksanaan bimbingan khusus Anda pada saat membuat indeks beberapa-kolom.
Menggunakan Kata Kunci UNIK dengan CREATE INDEX

indeks komposit yang sering digunakan dengan kata kunci UNIK untuk mencegah beberapa catatan muncul dengan data yang sama. Misalkan Anda ingin memaksa tabel BILLS memiliki built-in sebagai berikut “aturan”: Setiap tagihan yang dibayarkan kepada perusahaan harus berasal dari rekening bank yang berbeda. Anda akan membuat indeks UNIQUE pada NAMA dan bidang account_id. Sayangnya, Oracle7 tidak mendukung sintaks UNIK. Sebaliknya, mengimplementasikan fitur UNIK menggunakan batasan integritas UNIK. Contoh berikut ini menunjukkan kata kunci UNIK dengan CREATE INDEX menggunakan bahasa Transact-SQL Sybase’s.

INPUT:
 1> create unique index unique_id_name
2> on BILLS(ACCOUNT_ID, NAME)
  3> pergi 
1> select * from BILLS
  2> pergi
OUTPUT:
NAME                         AMOUNT     ACCOUNT_ID Florida Water Company        20         1 Power Company                75         1 Phone Company                125        1 Software Company             250        1 Record Club                  25         2 Cable TV Company             35         3 Debtor's Credit Card         35         4 UO-Us Insurance Company     125        5 Joe's Car Palace             350        5 SC Student Loan            200        6

Sekarang coba untuk menyisipkan merekam ke dalam tabel BILLS yang duplikat data yang sudah ada.

INPUT:
 1> insert BILLS (NAME, AMOUNT, ACCOUNT_ID)
2> values("Power Company", 125, 1)
  3> pergi 
ANALISIS:

Anda seharusnya menerima pesan kesalahan yang mengatakan bahwa perintah INSERT tidak diperbolehkan. Jenis pesan kesalahan bisa terperangkap dalam sebuah program aplikasi, dan pesan bisa memberitahu pengguna ia dimasukkan data yang tidak valid.

Example 10.3

Buat indeks pada tabel BILLS yang akan menyortir bidang AMOUNT dalam urutan.

INPUT / OUTPUT:
 SQL> CREATE INDEX DESC_AMOUNT
     ON  BILLS(AMOUNT DESC);

Index created.
ANALISIS:

Ini adalah pertama kalinya Anda telah menggunakan operator DESC, yang menceritakan SQL untuk menyortir indeks dalam urutan. (Secara default field nomor diurutkan dalam urutan) Sekarang Anda dapat memeriksa hasil karya Anda.:

INPUT / OUTPUT:
 SQL> SELECT * FROM BILLS;

NAME                         AMOUNT     ACCOUNT_ID
Joe's Car Palace             350        5
Software Company             250        1
SC Student Loan            200        6
Phone Company                125        1
UO-Us Insurance Company     125        5
Power Company                75         1
Cable TV Company             35         3
Debtor's Credit Card         35         4
Record Club                  25         2
Florida Water Company        20         1

  10 baris yang dipilih. 
ANALISIS:

Contoh ini membuat indeks menggunakan operator DESC pada jumlah kolom.Perhatikan dalam output, angka tersebut dipesan dari terbesar ke terkecil.

Indexes and Joins

Bila menggunakan bergabung rumit dalam permintaan, perintah SELECT Anda dapat mengambil waktu yang lama. Dengan tabel besar, ini jumlah waktu bisa mendekati beberapa detik (dibandingkan dengan milidetik Anda digunakan untuk menunggu). Jenis kinerja di klien / server lingkungan dengan banyak pengguna menjadi sangat frustasi dengan pengguna aplikasi Anda. Membuat indeks pada kolom yang sering digunakan dalam bergabung dapat mengoptimalkan kinerja query Anda cukup. Namun, jika terlalu banyak indeks diciptakan, mereka dapat memperlambat kinerja sistem anda, bukan mempercepatnya. Kami menyarankan Anda bereksperimen dengan menggunakan indeks pada beberapa tabel besar (di urutan ribuan catatan). Jenis percobaan mengarah ke pemahaman yang lebih baik mengoptimalkan pernyataan SQL.

Catatan: Sebagian besar implementasi mekanisme untuk mengumpulkan waktu yang telah berlalu dari query; Oracle mengacu pada fitur ini sebagai waktu. Periksa pelaksanaan Anda untuk informasi spesifik.
Contoh berikut membuat index pada bidang account_id di BILLS dan tabel BANK_ACCOUNTS:

INPUT / OUTPUT:
 SQL> CREATE INDEX BILLS_INDEX ON BILLS(ACCOUNT_ID);

Index created.

SQL> CREATE INDEX BILLS_INDEX2 ON BANK_ACCOUNTS(ACCOUNT_ID);

Index created.

SQL> SELECT BILLS.NAME NAME, BILLS.AMOUNT AMOUNT, BANK_ACCOUNTS.BALANCE
  2 ACCOUNT_BALANCE
  3  FROM BILLS, BANK_ACCOUNTS
  4 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;

NAME                         AMOUNT     ACCOUNT_BALANCE
Phone Company                125        500
Power Company                75         500
Software Company             250        500
Florida Water Company        20         500
Record Club                  25         1200
Cable TV Company             35         90
Debtor's Credit Card         35         400
Joe's Car Palace             350        2500
UO-Us Insurance Company     125        2500
SC Student Loan            200        4500

  10 baris yang dipilih. 
ANALISIS:

Contoh ini pertama membuat indeks untuk account_id pada kedua tabel dalam query yang berhubungan. Dengan membuat indeks untuk account_id di meja masing-masing, join dapat lebih cepat mengakses baris tertentu dari data. Sebagai aturan, Anda harus indeks kolom (s) dari tabel yang unik atau yang Anda rencanakan untuk bergabung tabel dengan dalam permintaan.

Using Clusters

Meskipun kami awalnya mengatakan bahwa indeks dapat digunakan untuk menyajikan gambaran tentang tabel yang berbeda dari pengaturan fisik yang ada, pernyataan ini tidak sepenuhnya akurat. Jenis khusus dari indeks didukung oleh banyak sistem database memungkinkan manajer database atau pengembang data cluster. Ketika sebuah clustered index digunakan, susunan fisik dari data dalam tabel adalah dimodifikasi. Menggunakan clustered index biasanya hasil dalam temu data yang lebih cepat daripada menggunakan indeks, tradisional nonclustered. Namun, sistem banyak database (seperti Sybase SQL Server) hanya mengizinkan satu berkerumun indeks per tabel. lapangan yang digunakan untuk membuat clustered index biasanya bidang primary key. Menggunakan Transact-SQL Sybase, Anda dapat membuat indeks, cluster yang unik pada tabel ACCOUNT_IDfield BANK_ACCOUNTS menggunakan sintaks berikut:

Sintaks:
 create unique clustered index id_index
on BANK_ACCOUNTS(ACCOUNT_ID)
 go

Oracle memperlakukan konsep cluster yang berbeda. Bila menggunakan database Oracle relasional, cluster adalah sebuah objek database seperti database atau tabel. Sebuah cluster digunakan untuk menyimpan tabel dengan bidang umum sehingga kecepatan akses mereka ditingkatkan.

Berikut adalah sintaks untuk membuat cluster menggunakan Oracle 7:

Sintaks:
 CREATE CLUSTER [schema.]cluster
(column datatype [,column datatype] ... )
[PCTUSED integer] [PCTFREE integer]
[SIZE integer [K|M] ]
[INITRANS integer] [MAXTRANS integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[!!under!!INDEX
| [HASH IS column] HASHKEYS integer]

You should then create an index within the cluster based on the tables that will be added to it. Then you can add the tables. You should add tables only to clusters that are frequently joined. Do not add tables to clusters that are accessed individually through a simple SELECT statement.

Obviously, clusters are a very vendor-specific feature of SQL. We will not go into more detail here on their use or on the syntax that creates them. However, consult your database vendor’s documentation to determine whether your database management system supports these useful objects.

Ringkasan

Tampilan adalah tabel virtual. Tampilan hanya cara penyajian data dalam format yang berbeda dari jalan sebenarnya ada di database. Sintaks dari pernyataan CREATE VIEW menggunakan perintah SELECT standar untuk membuat melihat (dengan beberapa pengecualian). Anda dapat memperlakukan pandangan sebagai meja biasa dan melakukan sisipan, pembaruan, menghapus, dan memilih pada itu. Kami secara singkat membahas penggunaan keamanan database dan bagaimana pandangan umumnya digunakan untuk mengimplementasikan keamanan ini. Database keamanan dibahas secara lebih rinci pada Hari 12.

Sintaks dasar yang digunakan untuk membuat tampilan adalah :

 CREATE VIEW view_name AS
SELECT field_name(s) FROM table_name(s);

Berikut adalah penggunaan yang paling umum dilihat:

  • Untuk melakukan fungsi keamanan pengguna
  • Untuk mengkonversi unit
  • Untuk membuat format tabel virtual baru
  • Untuk menyederhanakan pembangunan kompleks query

Indeks juga database desain dan tool pemrograman SQL. Indeks adalah objek database fisik disimpan oleh sistem manajemen database yang dapat digunakan untuk mengambil data yang telah diurutkan dari database. Selain itu, berkat indeks cara yang dipetakan, menggunakan indeks dan query yang terbentuk dengan baik dapat menghasilkan peningkatan kinerja yang signifikan.

Sintaks dasar yang digunakan untuk menciptakan indeks terlihat seperti ini:

 CREATE INDEX index_name
ON table_name(field_name(s));

Beberapa sistem database termasuk opsi-opsi tambahan yang sangat berguna seperti UNIK dan kata kunci berkerumun.

Sumber ; http://www.webbasedprogramming.com