sql-創(chuàng)建視圖和索引_第1頁
sql-創(chuàng)建視圖和索引_第2頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、sql創(chuàng)建視圖和索引、視圖1、使視圖創(chuàng)建視圖:給BILLS表創(chuàng)建視圖。創(chuàng)建的視圖實際上是個虛表。CREATE VIEW DEBTS ASSELECT * FROM BILLS;可以選擇特定的進新視圖的創(chuàng)建。CREATE VIEW CREDITCARD_DEBTS ASSELECT * FROM DEBTSSELECT * FROM CREDITCARD_DEBTS;可以從表中挑選特定的列創(chuàng)建視圖。2、列的重命名視圖繼承了已有列的名字,此外視圖還可以有的名字。例如:把 COMPANY 中的 ADDRESS CITY 和 STATE 字段組合起來并打印到信封。select * from ENVEL

2、OPE;注:當在視圖中使 SQL 的計算功能時,SQL 會要求你給出個虛字段的名字, 像 COUNT(*)或 AVG(PAYMENT)是不能作為名字的。3、sql對視圖的處理過程視圖應于經(jīng)常運個查詢。例如:你需要例公事地將 BILLS 表與 BANK_ACCOUNT 表進歸并以得到付信息create table BANK_ACCOUNTS (ACCOUNT_ID NUMBER NOT NULL,TYPE CHAR(30),BALANCE NUMBER,BANK CHAR(30);-sql語句進SELECT BILLS.NAME, BILLS.AMOUNT, BANK_ACCOUNTS.BALA

3、NCE,BANK_ACCOUNTS.BANK BANK FROM BILLS, BANK_ACCOUNTSWHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;CREATE VIEW BILLS_DUE (NAME, AMOUNT, ACCT_BALANCE, BANK) ASSELECT BILLS.NAME, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCEBANK_ACCOUNTS.BANK FROM BILLS, BANK_ACCOUNTSWHERE BILLS.ACCOUNT_ID = ;如果對BILLS_DUE視圖

4、執(zhí)查詢操作。WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_IDAND BANK_ACCOUNTS.BALANCE 500;4、在select語句中使約束4.1 在視圖中修改數(shù)據(jù)更新 BILLS 表中的10%的費。select *from LATE_PAYMENT;從視圖中刪除:delete from LATE_PAYMENTwhere ACCOUNT_ID=4;update函數(shù)例如:為BILLS表中所有的NEW_TOTAL中對于100的增加10。update LATE_PAYMENTselect * from LATE_PAYMENNT;4.2

5、在視圖中修改數(shù)據(jù)的個問題4.2.1 視圖與安全性數(shù)據(jù)庫系統(tǒng)的戶通常會根據(jù)使的數(shù)據(jù)庫進分組:數(shù)據(jù)庫管理員(database adminstrators)數(shù)據(jù)庫開發(fā)員(database developers)數(shù)據(jù)錄員(data entry personnel)眾戶不同的組在使數(shù)據(jù)庫時有著不同的權(quán)限,系統(tǒng)管理員有系統(tǒng)的完全控制權(quán)限,包括更新、插、刪除、修改。眾則只有數(shù)據(jù)庫使select語句的權(quán)限。例如:希望戶訪問BILLS表中的字段,需要創(chuàng)建個名字叫BILLS_NAME的視圖。CREATE VIEW BILLS_NAME AS SELECT NAME FROM BILLS;4.2.2 在單位換算中使

6、視圖視圖在你提供給戶的數(shù)據(jù)與數(shù)據(jù)庫中的真實數(shù)據(jù)不同時也相當有 。例如:如果 AMOUNT 字段實際上存儲于美國,加拿的戶不想頻繁地進美元與加拿元之間的轉(zhuǎn)換作。那么你可以創(chuàng)建個叫CANADA_BILLS 的視圖。CREATE VIEW CANADIAN_BILLS (NAME, CAN_AMOUNT) ASSELECT NAME, AMOUNT / 1.10select * from CANADIAN_BILLS;4.2.3 在視圖中使簡單的結(jié)構(gòu)化復合查詢視圖在你需要按次序運系列查詢以后得到某個結(jié)果的情況下也很有。例如:找出所有發(fā)給德克薩斯州的賬單額少于 50 美元的銀的名字??梢詫栴}分解成兩

7、個問題:1、得到所有發(fā)給得克薩斯州的賬單。2、找出賬單中額于50美元的記錄。兩個問題的解決語句為:CREATE TABLE BILLS2 (NAME, AMOUNT, ACCOUNT_ID) ASSELECT BILLS * FROM BILLS, COMPANYWHERE BILLS.NAME = COMPANY.NAME AND COMPANY.STATE = TX;使sql中的in句來找出所有在 BILLS1中發(fā)往德州的賬單,這個信息來創(chuàng)建個名字叫 BILLS3 的視圖:CREATE VIEW BILLS3 ASSELECT * FROM BILLS2 WHERE NAME IN(SEL

8、ECT * FROM BILLS1);將上述的BANK_ACCOUNT表進合并得到最初想要的結(jié)果:CREATE VIEW BANKS_IN_TEXAS (BANK) ASSELECT BANK_ACCOUNTS.BANKFROM BANK_ACCOUNTS, BILLS3WHERE BILLS3.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;select * from BANK_IN_TEXAS;4.2.4 刪除視圖語句drop view view_name;drop view命令會將所有與drop視圖相關(guān)聯(lián)的視圖不能正常運,些數(shù)據(jù)庫系統(tǒng)甚會將所有與要drop的視

9、圖相關(guān)聯(lián)的視圖也要刪除掉。例如:刪除BILLS視圖,查詢相關(guān)的視圖BANKS_IN_TEXAS也會返回錯誤,drop view BILLS;select *from BANKS_IN_TEXAS;刪除視圖不會對真實的表有任何影響,視圖是個虛的表。、索引1、使索引SQL使索引的原因是因為以下種:(1)在使UNIQUE關(guān)鍵字時強制性地保證數(shù)據(jù)的完整性。(2)可以容易地索引字段或其他字段進排序。(3)提查詢的執(zhí)速度2、什么是索引?索引是便查詢的種段,SQL采樹形結(jié)構(gòu)存儲和返回索引數(shù)據(jù),以指的數(shù)據(jù)存儲在樹的最末端,每個節(jié)點中有個指向其他節(jié)點的指針,節(jié)點左邊的值只是它的雙親節(jié)點,節(jié)點右邊的值則是孩節(jié)點或

10、葉。基本的索引語法:2.1 創(chuàng)建索引create index index_name;例如:要對BILLS表中的ACCOUNTID字段創(chuàng)建索引,其CREATE INDEX語句如下:select * from BILLS;create INDEX ID_INDEX on BILLSACCOUNT_ID);select * from BILLS;直索引被drop index語句刪除前,BILLS表是按照ACCOUNT_ID的順序進排序的。2.2 刪除索引drop index index_name;例如:刪除剛剛創(chuàng)建的ACCOUNTID索引。drop index ID_INDEX;-BILLS存儲結(jié)構(gòu)

11、select * from BILLS;現(xiàn)在BILLS表就是它原本的形態(tài),使索引不會對表中的物理存儲造成影響。注:使select * from BILLS order by ACCOUNT_ID;的結(jié)果和和創(chuàng)建索引的結(jié)果相同,不同在于當使order by句時,每次運它都要重新進排序,當使索引的時候,數(shù)據(jù)庫會建個物理索引對象,在你每次運查詢時,都訪問同個索引。注:當表被刪除時,所有與表相關(guān)的索引都將會被刪除。2.3 使索引的技巧(1)對于表來說,使索引對于性能不會有任何提。(2)當你的索引列中有極多的不同的數(shù)據(jù)和空值時索引會使性能有極的提。(3)當查詢要返回的數(shù)據(jù)很少時索引可以優(yōu)化你的查詢(較好

12、的情況是少于全部數(shù)據(jù)的 25%),如果你要返回的數(shù)據(jù)很多時索引會加系統(tǒng)開銷。(4)索引可以提查詢的速度,但會使得數(shù)據(jù)的更新操作變慢。進量的更新操作時,可以刪除索引,在更新完成后進索引的恢復。(5)索引會占據(jù)數(shù)據(jù)庫的空間,設(shè)計數(shù)據(jù)庫可空間時需要考慮索引占的空間。(6)對字段的索引已經(jīng)對兩個表進了歸并操作,可以提歸并的速度。(7)對視圖創(chuàng)建索引,在 SELECT 語句中對視圖的數(shù)據(jù)進排序。(8)不要創(chuàng)建對經(jīng)常需要更新或修改的字段創(chuàng)建索引,更新索引的開銷會降低你所期望獲得的性能。(9)不要將索引與表存儲在同個驅(qū)動器上,分開存儲會去掉訪問的沖突從使結(jié)果返回的更快。2.4 復合索引復合索引:對多個字段進

13、索引。雖然進的是多個字段的索引,但是索引在物理結(jié)構(gòu)上還是只有個。例如:對BILLS表的ACCOUNTID和AMOUNT字段創(chuàng)建索引。create INDEX ID_CMPD_INDIX on BILLS(ACCOUNT_ID,AMOUNT);select * from BILLS;選擇唯值越多的列建索引,可以達到更好的性能。如果你經(jīng)常在BILLS表中查詢某位員,例如:SELECT * FROM BILLS WHERE NAME = Cable TV Company;這時為了更好的查詢性能,可以對name列創(chuàng)建個索引。create INDEX NAME_INDEX on BILLS(NAME,A

14、MOUNT);如果你在查詢條件中經(jīng)常指定某特定的列那個你可以創(chuàng)建這個列的索引。當你的查詢需要復合條件時你可以創(chuàng)建復合索引。2.5 使unique關(guān)鍵字創(chuàng)建索引復合索引通常使unique關(guān)鍵字防有相同數(shù)據(jù)的多個記錄多次出現(xiàn)。ORACLE不持UNIQUE 語法,它是UNIQUE 完整性約束來達到內(nèi)容唯這特性的。使unique關(guān)鍵字創(chuàng)建索引以后,如果想要添加列相同的記錄則將會報錯。使DESC 操作創(chuàng)建的索引,它將告訴SQL 將索引降序排列。例如:在 BILLS 表中創(chuàng)建個索引以對 AMOUNT 字段進降序排列。(般默認為升序)create INDEX DESC_AMOUNT on BILLS(AMO

15、UNT DESC);2.6 索引與歸并對 BILS 表與 BANK_ACCOUNT 表根據(jù) ACCOUNT_ID 字段創(chuàng)建索引:WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;在每個表中均對 ACCOUNT_ID 字段創(chuàng)建了索引以后,歸并就可以更快地訪問特定的數(shù)據(jù)。2.7 群集(簇)的使當使群集索引時,數(shù)據(jù)在表中的物理排列式將會被修改,使群集索引通常傳統(tǒng)的不使群集的索引速度要快。但是許多數(shù)據(jù)庫管理系統(tǒng)(如 Sybase 的 SQL Server),只允許個表有個群集索引,于創(chuàng)建群集索引的字段常常是主關(guān)鍵字。例如:對 BANK_ACCOUNT 的 ACCOUNT_ID 字段創(chuàng)建個群集的,不重復的索引。create unique clustered index id_index on BANK_ACCOUNTS(ACCOUNT_ID)goORACLE 中群集的概念與此不同,當使 ORACLE 關(guān)系數(shù)據(jù)庫系統(tǒng)時,群集就是 個像數(shù)據(jù)或表樣的對象,群集般是存儲了表的共有字段以提對表的訪問速度。例如:ORACLE7 中創(chuàng)建群集。CREATE CLUSTER schema.cluster (c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論