數(shù)據(jù)庫應(yīng)用 第3章SQL語言基礎(chǔ)2學(xué)習(xí)資料_第1頁
數(shù)據(jù)庫應(yīng)用 第3章SQL語言基礎(chǔ)2學(xué)習(xí)資料_第2頁
數(shù)據(jù)庫應(yīng)用 第3章SQL語言基礎(chǔ)2學(xué)習(xí)資料_第3頁
數(shù)據(jù)庫應(yīng)用 第3章SQL語言基礎(chǔ)2學(xué)習(xí)資料_第4頁
數(shù)據(jù)庫應(yīng)用 第3章SQL語言基礎(chǔ)2學(xué)習(xí)資料_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章SQL語言基礎(chǔ)(2)3.1SQL簡介3.2SQL語言的基本元素3.3SQL語言中的運(yùn)算符3.4常用的SQL*Plus命令3.5SQL語言中的函數(shù)3.6關(guān)系表的DDL語句3.7關(guān)系表的DML語句3.8SQL的數(shù)據(jù)查詢3.9視圖3.6關(guān)系表的DDL語句DDL(數(shù)據(jù)定義語句) 用于定義各種數(shù)據(jù)庫對象。DDL語句只涉及到數(shù)據(jù)庫對象的結(jié)構(gòu),而不涉及對數(shù)據(jù)的具體操作。關(guān)系數(shù)據(jù)庫中最基本的數(shù)據(jù)庫對象就是關(guān)系表,關(guān)系表有嚴(yán)格的定義,它是一種二維表。對這種表有如下規(guī)定:①每張表都有一個(gè)名字,通常稱為表名或關(guān)系名。表名必須以字母開頭,最大長度為30個(gè)字符。②一張表可以由若干列組成,列名唯一,列名也稱作屬性名。③表中的一行稱為一個(gè)元組,它相當(dāng)于一條記錄。④同一列的數(shù)據(jù)必須具有相同的數(shù)據(jù)類型。⑤表中的每一個(gè)列值必須是不可分割的基本數(shù)據(jù)類型。3.6.1CREATETABLE建表語句

⑴基本格式 CREATETABLE表名

(列名1數(shù)據(jù)類型[DEFAULT缺省值][列完整性約束],

列名2數(shù)據(jù)類型[DEFAULT缺省值][列完整性約束], … [表完整性約束]);例建立一個(gè)學(xué)生表的語句如下: CREATETABLEstudent (snochar(6), snamevarchar2(10), sexchar(2)DEFAULT'男', birthdaydate, dnochar(3));⑵完整性約束定義表的完整性約束是一件非常重要的工作。Oracle允許用戶在建表時(shí),定義應(yīng)用于關(guān)系上的完整性約束,并把它作為數(shù)據(jù)庫模式的一部分存儲(chǔ)在數(shù)據(jù)字典中,由系統(tǒng)自動(dòng)維護(hù)數(shù)據(jù)的完整性。Oracle支持5種基本的完整性約束。①主碼完整性約束。②唯一完整性約束。③非空完整性約束。④基于屬性值的完整性約束。⑤引用完整性約束。完整性定義有兩種形式: ①列約束--約束是在列定義中實(shí)現(xiàn)的。 ②表約束--在所有列定義之后實(shí)現(xiàn)。對于某列的約束,可以采用列約束的形式,也可以采用表約束的形式。但是如果約束涉及不止一列時(shí),就必須采用表約束的形式定義。為了為其它操作提供方便,需給每個(gè)約束起個(gè)名字。保留字"CONSTRAINT"用來指定約束名。例: CREATETABLEstudent (snochar(6)CONSTRAINTs1PRIMARYKEY, snamevarchar2(10)CONSTRAINTs2NOTNULL);①主碼完整性約束(PRIMARYKEY)每個(gè)表都應(yīng)該有一個(gè)主碼,"PRIMARYKEY"就是來定義主碼。主碼約束具有如下特點(diǎn):a.定義主碼的字段不能為空值。b.同一個(gè)表中只能定義一個(gè)主碼約束。c.Oracle自動(dòng)為主碼約束的字段建立一個(gè)唯一索引和非空約束。d.可以使用一個(gè)字段作為主碼,也可以使用多個(gè)字段作為主碼,當(dāng)主碼由一個(gè)以上的屬性組成時(shí),必須采用表約束定義形式。例: CREATETABLEsc (snochar(6), cnochar(6), gradenumber(3),

CONSTRAINTsc1PRIMARYKEY(sno,cno));②唯一完整性約束(UNIQUE)一個(gè)關(guān)系中只能定義一個(gè)主碼,但關(guān)系中可能不止一列的值要求唯一,我們可用唯一完整性來解決這個(gè)問題。唯一完整性具有如下特點(diǎn):a.定義了唯一完整性約束的屬性不能有重復(fù)值。b.唯一完整性可以在字段定義,也可以在表級定義。c.可以使用一個(gè)屬性作為唯一完整性約束,也可以使用多個(gè)屬性作為唯一約束。d.如果在一個(gè)屬性上僅定義了唯一性約束,而沒有定義非空約束,則該屬性可以擁有多個(gè)NULL值。例: CREATETABLEdep (dnochar(3)CONSTRAINTd1PRIMARYKEY, dnamechar(10)CONSTRAINTd2UNIQUE, telchar(6), CONSTRAINTd3UNIQUE(tel));③非空完整性約束(NOTNULL)在實(shí)際應(yīng)用中,表中某些屬性不允許有空缺的情況,需定義非空約束。非空約束只能是列級約束。如:

snamechar(6)CONSTRAINTs2NOTNULL,④基于屬性值的完整性約束"CHECK"約束可以為屬性定義復(fù)雜的約束條件。在數(shù)據(jù)錄入或修改時(shí),系統(tǒng)會(huì)依據(jù)CHECK表達(dá)式來檢查屬性值的合法性,并拒絕接收非法值。例如性別只能是男和女:

sexchar(2)CONSTRAINTs3CHECK(sexin('男','女')),牽涉多個(gè)屬性的CHECK約束,只能在表級定義。例: CREATETABLEemp (enochar(3), enamevarchar2(10), salnumber, deptnochar(3), CHECK((deptno='d01'andsal<=5000)or (deptno!='d02'andsal<=4000));⑤引用完整性約束(REFERENCES)不同關(guān)系中的數(shù)據(jù)之間也會(huì)存在完整性和一致性的問題,這類問題我們用引用完整性約束來解決。引用完整性約束涉及兩張表,其定義格式如下:

CONSTRAINT約束名REFERENCES表名(列名)[ONDELETECASCADE|SETNULL]

或表級約束:

CONSTRAINT約束名FOREIGNKEY(列名)REFERENCES表名(列名)[ONDELETECASCADE|SETNULL]例:主表

CREATETABLEdept (dnochar(3)CONSTRAINTd1PRIMARYKEY, dnamechar(10)CONSTRAINTd2NOTNULL);子表

CREATETABLEstudent (snochar(3)CONSTRAINTs1PRIMARYKEY, snamechar(8)CONSTRAINTs2NOTNULL, dnochar(3)CONSTRAINTs3REFERENCESdept(dno));定義了引用約束后,系統(tǒng)將會(huì)執(zhí)行以下幾個(gè)方面的檢查:a.約束定義中所引用的另一關(guān)系(主表)的屬性必須是那個(gè)關(guān)系的碼(主碼或唯一約束的屬性)。必須先建好主表,然后才能建立包含了引用完整性約束的子表。b.外碼的值必須是所引用的表的碼的存在值。c.默認(rèn)情況下,當(dāng)刪除一個(gè)主表記錄時(shí),如果子表中還有對應(yīng)的記錄,系統(tǒng)就不允許刪除該記錄。我們可以在定義引用時(shí),用ONDELETECASCADE選項(xiàng)來指定連帶刪除。如:dnochar(3)CONSTRAINTs3REFERENCESdept(dno)ONDELETECASCADE

主記錄刪除時(shí),自動(dòng)級聯(lián)刪除子記錄?;騞nochar(3)CONSTRAINTs3REFERENCESdept(dno)ONDELETESETNULL

主記錄刪除時(shí)更新子表,將子表中參考主記錄的子記錄設(shè)成NULL。3.6.2AlTERTABLE修改表語句語句的基本語法如下:

ALTERTABLE表名

ADD(加列選項(xiàng)) MODIFY(修改列選項(xiàng)) DROP刪除選項(xiàng)

RENAMETO新的表名

RENAMECOLUMN列名TO新的列名⑴ADD子句①增加新列

ALTERTABLEdept ADD(damgrchar(8)CONSTRAINTd4UNIQUE);增加列的定義和建表時(shí)的列的定義在語法上一樣。

②ADD子句還可為已建的列添加約束

ALTERTABLEdept ADD(CONSTRAINTd5UNIQUE(dname));⑵MODIFY子句修改表定義。如:

ALTERTABLEdemp MODIFY(dnamevarchar2(20)CONSTRAINTddNOTNULL);對于MODIFY子句需注意:在執(zhí)行修改時(shí),新的定義不能和已有的數(shù)據(jù)有矛盾。⑶DROP子句用來刪除列和約束。如:

ALTERTABLEstudent DROP(birthday);DROP子句刪除約束有以下三種形式:a.DROPPRIMARYKEY[CASCADE];b.DROPUNIQUE(列名,…);c.DROPCONSTRAINT約束名;在第一種形式中,如果指定CASCADE選項(xiàng),則意味著同時(shí)刪除依賴于該主碼的其它表中的引用完整性約束。如emp表中

deptnoREFERENCESdept(deptno);ALTERTABLEdeptDROPPRIMARYKEY;以上語句不能執(zhí)行。ALTERTABLEdeptDROPPRIMARYKEYCASCADE;以上可執(zhí)行,該語句將dept表的主碼約束和emp表的引用完整性約束一起刪了。⑷修改表名或列名如:

ALTERTABLEtemp RENAMETOemp;--改表名

ALTERTABLEtemp RENAMECOLUMNaTOb;--改列名3.6.3刪除表語句

DROPTABLE表名;刪除一個(gè)表時(shí),Oracle執(zhí)行以下操作:①刪除表中所有的數(shù)據(jù)。②刪除表中所有的索引。③如果該表不是一個(gè)聚集的組成部分,Oracle將分配給表及索引的所有數(shù)據(jù)塊釋放,并歸還給它們所在的表空間。④如果該表是視圖的基表,或該表被存儲(chǔ)過程、函數(shù)引用,Oracle將使得這些對象為不可用,但并不刪除它們。3.6.4索引的建立和刪除查詢是數(shù)據(jù)庫日常應(yīng)用最多的操作,因而查詢效率也是用戶最關(guān)心的問題。當(dāng)一個(gè)關(guān)系的記錄數(shù)很大時(shí),為查詢出符合條件的數(shù)據(jù)而對整個(gè)關(guān)系進(jìn)行掃描是很花時(shí)間的。解決此問題一個(gè)有效方法是使用索引。索引是由Oracle自動(dòng)使用和維護(hù)的一種數(shù)據(jù)庫對象。建立索引的方法有兩種:自動(dòng)方法當(dāng)用戶定義的表中某一列有PRIMARYKEY或UNIQUE約束時(shí),系統(tǒng)自動(dòng)建立一個(gè)唯一性索引,索引的名字就是約束條件的名字。手動(dòng)方法用戶建立的非唯一性索引。 建立索引的原則見教材P109建立索引的語法CREATE[{UNIQUE|BITMAP}]INDEX索引名ON表名(列名1[,列名2]…);UNIQUE:表示建立唯一索引,保證指定列上的值唯一。BITMAP:表示建立位圖索引,位圖索引在關(guān)鍵字取值范圍很小,且變化不大時(shí)采用。默認(rèn):表示建立非唯一索引(B+樹索引),對大量變化的數(shù)據(jù)很有效。當(dāng)索引關(guān)鍵字有多個(gè)時(shí),稱為復(fù)合索引。對于復(fù)合索引,只有在查詢條件中含有主關(guān)鍵字時(shí),系統(tǒng)才使用索引。CREATEINDEXemp_enameONemp(ename);CREATEBITMAPINDEXdep_addressONdep(address);索引的刪除DROPINDEXemp_ename;3.7關(guān)系表的DML語句與表有關(guān)的DML語句實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的讀寫操作,即數(shù)據(jù)的查詢、插入、修改和刪除。3.7.1INSERT插入語句將一條記錄或查詢結(jié)果插入到指定的表中。格式:

INSERTINTO表名[(列名1,列名2,…)] VALUES(表達(dá)式1,表達(dá)式2,…);使用VALUES子句,一次只能插入一行,插入記錄時(shí),將表達(dá)式的值作為對應(yīng)列的值。除數(shù)據(jù)型數(shù)據(jù)外,字符型和日期型數(shù)據(jù)要用單引號括起來,空值用NULL表示。如果插入語句中沒有指定表的全部列,那么余下的列將采用空值(NULL)或建表時(shí)規(guī)定的默認(rèn)值。例:INSERTINTOstudentVALUES(0412,'李寧','男','15-7月-1987','d01');

INSERTINTOstudent(sno,sname,sex,dno)VALUES(0413,'李寧','男','d01');INSERTINTOmyclass(sno,sname,age) SELECTsno,sname,age FROMstudent WHEREcno='0603';使用查詢結(jié)果插入時(shí),一次可插入多行。3.7.2UPDATE修改語句修改語句是對表中已有的數(shù)據(jù)進(jìn)行修改。格式:

UPDA

溫馨提示

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

評論

0/150

提交評論