版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1數(shù)據(jù)庫語言SQL結(jié)構(gòu)化查詢語言SQL(StructuredQueryLanguage)SQL語言復(fù)習(xí)2教學(xué)要求掌握SQL語句的書寫方法熟練使用SQL語句實現(xiàn)建表,修改表,刪除表,向表中插入,刪除,修改,查詢等操作3重點難點使用SQL語句查詢表格中的數(shù)據(jù)4概述SQL的發(fā)展1974年,由Boyce和Chamberlin提出1975~1979,IBMSanJoseResearchLab的關(guān)系數(shù)據(jù)庫管理系統(tǒng)原型SystemR實施了這種語言SQL-86是第一個SQL標(biāo)準(zhǔn)SQL-89、SQL-92(SQL2)、SQL-99(SQL3)5概述現(xiàn)狀大部分DBMS產(chǎn)品都支持SQL,成為操作數(shù)據(jù)庫的標(biāo)準(zhǔn)語言有方言,支持程度不同6交互式SQL一般DBMS都提供聯(lián)機(jī)交互工具用戶可直接鍵入SQL命令對數(shù)據(jù)庫進(jìn)行操作由DBMS來進(jìn)行解釋SQL的形式7嵌入式SQL能將SQL語句嵌入到高級語言(宿主語言)使應(yīng)用程序充分利用SQL訪問數(shù)據(jù)庫的能力、宿主語言的過程處理能力一般需要預(yù)編譯,將嵌入的SQL語句轉(zhuǎn)化為宿主語言編譯器能處理的語句SQL的形式8SQL語言主要組成部分?jǐn)?shù)據(jù)定義語言(DDL,DataDefinitionLanguage)數(shù)據(jù)操縱語言(DML,DataManipulationLanguage)數(shù)據(jù)控制語言(DCL,DataControlLanguage)9
創(chuàng)建用戶使用Createuser用戶名identifiedby密碼
[defaulttablespace缺省表空間][temporarytablespace臨時表空間];給用戶賦連接權(quán)Grantconnectto用戶名;
DDL——創(chuàng)建用戶CreateUser10具有CONNECT角色的用戶可以登錄數(shù)據(jù)庫,執(zhí)行數(shù)據(jù)查詢和操縱。即可以執(zhí)行ALTERTABLE,CREATEVIEW,CREATEINDEX,DROPTABLE,DROPVIEW,DROPINDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等操作用戶權(quán)限11如果只是給用戶賦予建表權(quán),如:
grantcreatetabletouser1這樣用戶還是不能成功建表,提示錯誤是對表空間沒有操作權(quán)。grantcreatetabletou1
是指u1擁有了建表的權(quán)限,oracle也知道了他有默認(rèn)的表空間,但默認(rèn)的表空間沒有給他分配使用權(quán)利(使用空間),所以出錯.
用戶權(quán)限——建表權(quán)12因此要先使用quota(配額)給用戶賦予表空間使用權(quán)alteruseru1quota200Mon表空間1;
--給他200M空間
alteruseru1quotaunlimitedon表空間1;--讓他隨意使用表空間1;收回權(quán)限:
Revokecreatetablefromu1;用戶權(quán)限——建表權(quán)13RESOURCE角色可以創(chuàng)建表,即執(zhí)行CREATETABLE操作。創(chuàng)建表的用戶將擁有對該表的所有權(quán)限。Createtable權(quán)限和createanytable權(quán)限是有區(qū)別的,后者可以建立其他用戶下的表格。如用U1登錄,可以這樣建表Createtablesystem.t(t1int);用戶權(quán)限——用角色賦建表權(quán)14建立其他用戶(如U1)的表格,表格的所有權(quán)應(yīng)歸屬于表格的擁有者(U1),而不是創(chuàng)建者。即他不能對該表格進(jìn)行權(quán)限外操作。若想將權(quán)限賦予所有用戶,可以使用Public角色。如:Grantselectonsctopublic;執(zhí)行后,所有用戶將擁有SC表的查詢權(quán)。用戶權(quán)限——用角色賦建表權(quán)151.
定義基本表(1)定義基本表的語句格式:CREATETABLE<表名>(<列定義>[{,<列定義>,<表約束>}])表名:列定義:列名、列數(shù)據(jù)類型、長度、是否允許空值等。定義完整性約束:列約束和表約束[CONSTRAINT<約束名>]<約束定義>DDL——建立表結(jié)構(gòu)Create16
CreateTableStudent( snochar(10)primarykey, snamevarchar2(20)notnull, sagesmallint, ssexchar(2), sdeptvarchar2(20))定義基本表17
CreateTableCourse( cnochar(10)primarykey, cnamevarchar(20), creditsmallint,snumbersmallint)--最大選課人數(shù) CreateTableSC( snochar(10)notnull, cnochar(10)notnull, gradesmallint,
primarykey(sno,cno)
)定義基本表18Oracle中復(fù)制表Createtabletasselect*fromstudent;只復(fù)制表結(jié)構(gòu):Createtablet1asselect*fromstudentwhere1=2;SQLServer中復(fù)制表Select*intotfromstudent;復(fù)制基本表19Oracle中查看表達(dá)式的值Oracle中可以通過Dual表查看常量或表達(dá)式的值:SelectsysdatefromDual;Selectdbms_random.value(1,10)fromdual;--產(chǎn)生1到10的隨機(jī)數(shù)SQLServer中查看表達(dá)式的值Selectgetdate();Oracle中查看表達(dá)式的值20用SQL刪除關(guān)系(表)將整個關(guān)系模式(表結(jié)構(gòu))徹底刪除表中的數(shù)據(jù)也將被刪除
DropTablerDropTablestudent;一旦一個表被刪除,數(shù)據(jù)將不能被恢復(fù)!DDL——刪除表結(jié)構(gòu)Drop21用SQL刪除關(guān)系(表)將整個關(guān)系模式(表結(jié)構(gòu))徹底刪除表中的數(shù)據(jù)也將被刪除與表格相關(guān)的外碼約束也一起刪除
DropTable
rCascadeConstraints;DropTablestudentCascadeConstraints;一旦一個表被刪除,數(shù)據(jù)將不能被恢復(fù)!并且相關(guān)外碼也被刪除DDL——刪除表結(jié)構(gòu)Drop22增加表中的屬性向已經(jīng)存在的表中添加屬性allownull(新添加的屬性要允許為空)已有的元組中該屬性的值被置為Null
AlterTabletAddAD
AlterTablestudentAddphonechar(16);DDL——修改表結(jié)構(gòu)Alter23修改表中的某屬性(某列)修改屬性及相應(yīng)的數(shù)據(jù)
AlterTabletmodify(AD)AlterTableStudentmodifysagechar(3)DDL——修改表結(jié)構(gòu)Alter24刪除表中的某屬性(某列)去除屬性及相應(yīng)的數(shù)據(jù)
AlterTabletDropcolumnAAlterTableStudentDropcolumnsageDDL——修改表結(jié)構(gòu)Alter25練習(xí)——DDL:1、為Student表添加籍貫(50個長度的變長字符串)列。2、將Student表中的“籍貫”列的類型精度改為100。3、刪除Student表的“籍貫”列。4、刪除這三張表。26
DML——數(shù)據(jù)庫的修改數(shù)據(jù)庫修改包括插入數(shù)據(jù)修改數(shù)據(jù)刪除數(shù)據(jù)27數(shù)據(jù)添加用SQL的插入語句,向數(shù)據(jù)庫表中添加數(shù)據(jù)按關(guān)系模式的屬性順序InsertIntoStudent
Values(‘01001’,‘張三’,27,‘M’,‘CS’)按指定的屬性順序,也可以只添加部分屬性(非Null屬性為必需)
InsertIntoStudent(sno,sname,sage)
Values(‘01002’,‘李四’,26)DML——
向表中添加數(shù)據(jù)(Insert)28只能對整個元組操作,不能只刪除某些屬性上的值只能對一個關(guān)系起作用,若要從多個關(guān)系中刪除元組,則必須對每個關(guān)系分別執(zhí)行刪除命令
DeleteFrom
rWhereP從關(guān)系r中刪除滿足P的元組,只是刪除數(shù)據(jù),而不是刪除定義(表結(jié)構(gòu))DML——數(shù)據(jù)刪除(Delete)29刪除單個元組 例:刪除學(xué)號為01001的學(xué)生的基本信息
DeleteFromStudent Wheresno=‘01001’刪除多個元組 例:刪除選課而未參加考試的學(xué)生的選課信息
DeleteFromSC Wheregradeisnull刪除整個關(guān)系中的所有數(shù)據(jù) 例:刪除所有學(xué)生的選課信息
DeleteFromSC30改變符合條件的某個(某些)元組的屬性值例:將01001學(xué)生轉(zhuǎn)入MA系
UpdateStudent
Setsdept=‘MA’
,sage=sage+1
Wheresno=‘01001’例:所有學(xué)生年齡加1
UpdateStudent
Set
sage=sage+1DML——數(shù)據(jù)更新(Update)31練習(xí)——DML:1、為Student(10行以上),Course(8行以上),SC(25行以上)表添加記錄。2、為Student表添加列“班級號”。3、為學(xué)生填寫班級號(數(shù)字)。4、將每個同學(xué)的班級號前面加上“T”。5、刪除班級號前面的“T”。6、刪除班級號為空的學(xué)生。7、刪除成績低于50分的學(xué)生的選課信息。32數(shù)據(jù)查詢是數(shù)據(jù)庫應(yīng)用的核心功能基本結(jié)構(gòu)
Selectcol1,col2,...,coln
Fromr1,r2,...,rm
WherePSelectSnamefromStudentDML——
數(shù)據(jù)查詢(Select)33Select子句——*與屬性列表星號*表示所有屬性星號*:按關(guān)系模式中屬性的順序排列顯式列出屬性名:按用戶順序排列Select*FromStudent34Select子句——更名為結(jié)果集中的某個屬性改名使結(jié)果集更具可讀性Selectsnoas‘學(xué)號’,cnoas課程號,grade成績FromSCSelectsno,sname,to_char(sysdate,’yyyy’)-sageas
birthday_YearFromStudent35Where
子句查詢滿足指定條件的元組可以通過Where子句來實現(xiàn)使where子句中的邏輯表達(dá)式返回True值的元組,是符合要求的元組,將被選擇出來36Where
子句——運算符比較:<、<=、>、>=、=、<>等確定范圍:
BetweenAandB、NotBetweenAandB確定集合:IN、NOTIN字符匹配:LIKE,NOTLIKE空值:ISNULL、ISNOTNULL多重條件:AND、OR、NOT37Where子句——Like字符匹配:Like、NotLike通配符%——
匹配任意字符串_——
匹配任意一個字符大小寫敏感38Where子句——Like例:列出姓張的學(xué)生的學(xué)號、姓名。
Selectsno,sname FromStudent WheresnameLIKE‘張%’例:列出張姓且單名的學(xué)生的學(xué)號、姓名。
Selectsno,sname FromStudent WheresnameLIKE‘張_’39From子句列出將被查詢的關(guān)系(表)例:列出所有學(xué)生的學(xué)號、姓名、課號、成績。SelectSudent.sno,sname,o,gradeFromstudent,SCWhereStudent.sno=SC.sno40From子句——元組變量為From子句中的關(guān)系定義元組變量方便關(guān)系名的引用例:列出所有學(xué)生的學(xué)號、姓名、課號、成績。SelectT.sno,sname,cno,gradeFromStudentT,SCS--不能使用as關(guān)鍵字WhereT.sno=S.sno 41OrderBy子句指定結(jié)果集中元組的排列次序耗時ASC升序(缺省)、DESC降序例:列出CS系中的男生的學(xué)號、姓名、年齡,并按年齡進(jìn)行排列(升序)Selectsno,sname,sageFromStudentWheresdept=‘CS’andssex=‘m’OrderBysageASC42OrderBy子句比較查詢:查詢成績最高的5位同學(xué)的學(xué)號,課程號,成績Select*fromscwhererownum<=5Orderbygradedesc其中Rownum為Oracle表格中記錄邏輯順序的列。43OrderBy子句在Oracle中查詢的順序是,先查詢,后排序,這樣將先查詢到結(jié)果,再在結(jié)果中排序輸出,因此該查詢應(yīng)改寫為:Select*from(select*fromscorderbygradedesc)awhererownum<=5Rownum在條件中只能小于某數(shù),不能大于某數(shù),否則將找不出任何記錄。44ROWNUM-表格中的邏輯標(biāo)識若想查詢成績的前10到15名的學(xué)生學(xué)號,下面這樣寫是找不到記錄的:Select*from(Select*fromscorderbygrade)whererownum<=15andrownum>=10;應(yīng)寫為:Select*from(selectrownumrn,a.*from(select*fromscorderbygradedesc)a)wherern<=15andrn>=1045ROWID-表格中的物理標(biāo)識ROWNUM是表格中的邏輯標(biāo)識,也就是說表格的記錄順序變了,Rownum會一起變,而ROWID是標(biāo)識物理位置的,因此對于每一條記錄,其ROWID都不會發(fā)生改變。思考:刪除完全重復(fù)的數(shù)據(jù),使其保留一行。46練習(xí)查詢選修‘c05’課程,并且年齡不大于26歲的學(xué)生的學(xué)號和成績,并按成績降序排列。(只選出第3個學(xué)生?)47練習(xí)(解答)Select*from(selectrownumrn,a.*from(Selectstudent.sno,gradefromsc,studentwherecno=‘C05’andsage<=26andsc.sno=student.snoorderbygradedesc)a)wherern=3;48用戶輸入-&Select*fromscwheresno=&msno;運行結(jié)果:輸入msno的值:001輸出‘001’學(xué)生的選課信息49練習(xí)——Select:1、查詢MA系的女同學(xué)。2、查詢CS系姓李的學(xué)生選修的課程,列出學(xué)號,課程號和成績。3、查詢選修了數(shù)據(jù)庫課程的學(xué)生的學(xué)號,成績,按成績降序排列。4、找出學(xué)分為4分以上的課程的選修情況,列出學(xué)號,課程名,成績。5、檢索數(shù)據(jù)庫的成績在90分以上的學(xué)生的學(xué)號和姓名。50子查詢是嵌套在另一查詢中的Select-From-Where表達(dá)式(Where/Having)SQL允許多層嵌套,由內(nèi)而外地進(jìn)行分析,子查詢的結(jié)果作為父查詢的查找條件可以用多個簡單查詢來構(gòu)成復(fù)雜查詢,以增強(qiáng)SQL的查詢能力子查詢中不使用OrderBy子句,OrderBy子句只能對最終查詢結(jié)果進(jìn)行排序子查詢(Subquery
)51返回單值的子查詢,只返回一行一列父查詢與單值子查詢之間用比較運算符進(jìn)行連接運算符:>、>=、=、<=、<、<>例:找出與01001同齡的學(xué)生
Select* FromStudent Wheresage=(Selectsage FromStudent Wheresno=‘01001’)子查詢——單值比較52子查詢返回多行一列運算符:In、All、Some(或Any)、Exists子查詢——多值53若值與子查詢返回集中的某一個相等,則返回true
IN被用來測試多值中的成員例:查詢選修‘C01’課程的學(xué)生的學(xué)號、姓名。
Selectsno,sname FromStudent WheresnoIN( SelectsnoFromSC Wherecno=‘C01’ )子查詢多行一列子查詢——多值成員In54例:
查詢選修了‘?dāng)?shù)據(jù)庫’的學(xué)生的學(xué)號和姓名Selectsno,snameFromStudentWheresnoIN (Selectsno FromSC WherecnoIN
(Selectcno FromCourse Wherecname=‘?dāng)?shù)據(jù)庫’))
子查詢——多值成員In55多值比較:多行一列父查詢與多值子查詢之間的比較用All來連接值s比子查詢返回集R中的每個都大時,s>AllR為TrueAll表示所有>all、<all、<=all、>=all、<>all<>all等價于notin例:找出年齡最小的學(xué)生
Select*FromStudentWheresage<=all( SelectsageFromStudent)子查詢——多值比較ALL56多值比較:多行一列父查詢與多值子查詢之間的比較需用Some/Any來連接值s比子查詢返回集R中的某一個都大時返回Tures>SomeR為True
或
s>AnyR為TrueSome(早期用Any)表示某一個(任意一個)
>some、<some、<=some、>=some、<>some=some等價于in、<>some不等價于notin子查詢——多值比較Some/Any57例:檢索選修C2課程號的學(xué)生姓名(用IN代替=ANY)SELECTSnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECno=‘C02’)58練習(xí)(使用嵌套查詢):1、查詢和數(shù)據(jù)庫相同學(xué)分的課程。2、查詢選修了數(shù)據(jù)庫課程的學(xué)生的學(xué)號。3、查詢成績最高的學(xué)生的姓名。4、查詢CS系成績最高的學(xué)生的學(xué)號、姓名以及成績。5、查詢數(shù)據(jù)庫課程成績最高的學(xué)生的姓名。59把一列中的值進(jìn)行聚合運算,返回單值的函數(shù)五個預(yù)定義的聚合函數(shù)平均值:Avg()總和:Sum()最小值:Min()最大值:Max()計數(shù):Count()返回所選列中不為NULL的數(shù)據(jù)個數(shù)Count(*)、Count(Distinct…)數(shù)值聚合函數(shù)60例:Selectavg(grade)asC05_avgfromscwherecno=’C05’如果希望看到每一位同學(xué)的平均成績,怎么辦?61GroupBy將查詢結(jié)果集按某一列或多列的值分組,值相等的為一組,一個分組以一個元組的形式出現(xiàn)只有出現(xiàn)在GroupBy子句中的屬性,才可出現(xiàn)在Select子句中例:統(tǒng)計各系學(xué)生的人數(shù)。
Selectsdept,count(*)asstu_count FromStudent GroupBysdept聚合函數(shù)62Having針對聚合函數(shù)的結(jié)果值進(jìn)行篩選(選擇),它作用于分組計算結(jié)果集跟在GroupBy子句的后面例:列出具有兩門(含)以上不及格的學(xué)生的學(xué)號、不及格的課目數(shù)。
Selectsno,count(sno)FromSC Wheregrade<60 GroupBysno Havingcount(sno)>=2聚合函數(shù)63Having
與Where的區(qū)別Where決定哪些元組被選擇參加運算,作用于關(guān)系中的元組Having決定哪些分組符合要求,作用于分組聚合函數(shù)的條件關(guān)系必須用Having,Where中不應(yīng)出現(xiàn)聚合函數(shù)聚合函數(shù)64聚合函數(shù)對Null的處理Count:不計Sum:不將其計入Avg:具有
Null
的元組不參與Max/Min:不參與例:Selectcount(sdept)FromStudent SelectAvg(sage)FromStudent聚合函數(shù)——
Null65例:找出具有最高平均成績的學(xué)號及平均成績Selectsno,avg(grade) FromSC GroupBysno Havingavg(grade)>=all(Selectavg(grade)FromSCGroupBysno)66練習(xí)——GroupBy:1、查詢每門課程的平均成績。2、查詢每門課程不及格的學(xué)生人數(shù)。3、查詢每個系學(xué)生的最高成績。4、查詢平均分在75以上的課程。5、查詢女同學(xué)中成績最高的學(xué)生所在的系。6、查詢選課人數(shù)最多的課程。67Exists+子查詢用來判斷該子查詢是否返回元組當(dāng)子查詢的結(jié)果集非空時,Exists為True當(dāng)子查詢的結(jié)果集為空時,Exists為False不關(guān)心子查詢的具體內(nèi)容,因此用Select*子查詢——存在判斷Exists68具有外部引用的子查詢,稱為相關(guān)子查詢(CorrelatedQueries)外層元組的屬性作為內(nèi)層子查詢的條件
子查詢——相關(guān)子查詢69
例:列出選修了C01課程的學(xué)生的學(xué)號、姓名
Selectsno,sname From
Student WhereExists(Select* FromSC WhereSC.sno=
Student.snoAnd cno=‘C01’) 子查詢——Correlated&Exists比較:Selectstudent.sno,snameFromstudent,scWheresc.sno=student.snoandcno=‘c01’等價70
例:列出得過100分的學(xué)生的學(xué)號、姓名
Selectsno,sname FromStudent WhereExists
(Select* FromSC WhereSC.sno=Student.snoAnd grade=100) 子查詢——Correlated&Exists比較:Selectstudent.sno,snameFromstudent,scWheresc.sno=student.snoandgrade=100不等價71
例:列出沒有選C01課程的學(xué)生的學(xué)號、姓名
Selectsno,sname FromStudent WhereNotExists
(Select* FromSC Wheresno=Student.snoAnd cno=‘C01’) 子查詢——Correlated&NotExists比較:Selectstudent.sno,snameFromstudent,scWheresc.sno=student.snoandcno<>‘c01’不等價72多行插入:插入一個集合例:給CS系的學(xué)生開設(shè)必修課C05,建立選課信息
InsertIntoSC Selectsno,’c05’,null FromStudent Wheresdept=‘CS’例:73給CS系的學(xué)生開設(shè)必修課C05,建立選課信息insertintosc(sno,cno)Selectsno,’c05’FromstudentWheresdept='cs'andnotexists
(select*fromscwheresno=student.snoandcno=‘c05’)子查詢——Correlated&NotExists此時要考慮到SC表中已經(jīng)存入數(shù)據(jù)的情況(避免重復(fù)錄入)74例:將選修C05課程的學(xué)生的成績改為該課的平均成績
UpdateSC Setgrade=(Selectavg(grade) FromSC Wherecno=‘C05’) Wherecno=‘C05’先計算avg,再做UpdateDML——數(shù)據(jù)更新(Update)75連接問題在SQL語句中,在FROM子句中提供了一種稱之為連接的子句,連接分為內(nèi)連接和外連接,外連接又可分為左外連接、右外連接和全外連接。(1)內(nèi)連接內(nèi)連接是指包括符合條件的每個表的記錄,也稱之為全記錄操作。【例】查詢并顯示各個學(xué)生的學(xué)號,所學(xué)課程及課程成績。SELECTSC.sno,ame,SC.gradeFROMSC,COURSEWHEREo76如果采用內(nèi)連接方式,則命令如下:SELECTSC.sno,ame,gradeFROMSCINNERJOINCOURSEONo=o將會得到完全相同的結(jié)果。(2)外連接外連接是指把兩個表分為左右兩個表。右外連接是指連接滿足條件右側(cè)表的全部記錄。左外連接是指連接滿足條件左側(cè)表的全部記錄。全外連接是指連接滿足條件表的全部記錄。77右外連接:--將student表中的所有行都返回SELECTstudent.sno,sname,cno,gradeFROMSCRightJOINStudentONSC.sno=Student.sno在Oracle中等價下面的寫法:SELECTstudent.sno,sname,cno,gradeFROMsc,studentWHEREstudent.sno=sc.sno(+)78左外連接:--將SC表中的所有行都返回SELECTstudent.sno,sname,cno,gradeFROMSCleftJOINStudentONSC.sno=Student.sno--在Oracle中等價下面的寫法:SELECTstudent.sno,sname,cno,gradeFROMsc,studentWHEREstudent.sno(+)=sc.sno79全外連接:--將Student,SC兩張表中的所有行都返回SELECTstudent.sno,sname,cno,gradeFROMSCFullJOINStudentONSC.sno=Student.sno80視圖(View)創(chuàng)建視圖
Create[OrReplace]View
v
as<queryexpression>[withcheckoption]Withcheckoption選項表示對視圖更新時必須滿足查詢語句中的條件創(chuàng)建視圖81例:計算機(jī)系的花名冊
CreateOrReplaceViewCS_Stuas Selectsno,sname,ssex,sdept FromStudent Wheresdept=‘CS’withcheckoption82視圖(View)視圖名可以出現(xiàn)在任何關(guān)系名可以出現(xiàn)的地方例:列出計算機(jī)系的男生
Selectsno,sname FromCS_Stu Wheressex=‘M’
例:建立學(xué)生平均成績視圖
CreateViewavg_grade(sno,avg)as Selectsno,avg(grade) FromSC GroupBysno83使用視圖(View) 例:找出平均成績大于等75的學(xué)生
Select* Fromavg_grade Whereavg>=7584創(chuàng)建和刪除約束
5種基本的約束:主鍵約束(primarykeyconstraint)唯一性約束(uniqueconstraint)檢查約束(checkconstraint)缺省約束(defaultconstraint)外部鍵約束(foreignkeyconstraint)85約束約束的檢查功能立即執(zhí)行的約束(Immediateconstraints)
語句執(zhí)行完后立即檢查是否違背完整性約束延遲執(zhí)行的約束(Deferredconstrainsts)完整性檢查延遲到整個事務(wù)執(zhí)行結(jié)束后進(jìn)行86創(chuàng)建和刪除約束
示例Altertablescaddconstraintfk_sc_snoforeignkey(sno)referencesstudent(sno)deferrable;--定義該約束為可延遲約束并設(shè)置為延遲約束當(dāng)定義約束時使用了Deferrable選項后,就可以設(shè)置該約束為立即執(zhí)行約束還是延遲約束,若定義約束時沒有Deferrable選項,則不能將其設(shè)置為延遲約束。Setconstraintfk_sc_snoimmediateSetconstraintfk_sc_snodeferred87練習(xí)——約束1、為Student表的Sage(小于30),Ssex(M或F,缺省為M)添加約束。2、為SC表的sno(外碼),cno(外碼),grade(1到100分)添加約束。3、為Course表的Cname(唯一),Credit(1到5)添加約束。88為Oracle對象添加注釋信息使用Comment語句可以為表,列等添加注釋信息例:現(xiàn)建立一表T如下
Createtablet(t1int,t2int);為表建立注釋:
Commentontabletis‘這是例子表格’;為表中的列建立注釋:
Commentoncolumnt.t1is‘這是第一列’;可以通過ments系統(tǒng)視圖來查看表格的注釋信息,通過ments或Describe來查看表中列的注釋信息89索引數(shù)據(jù)庫中的索引與書籍中的索引類似,在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無須對整個表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書中的索引是一個詞語列表,其中注明了包含各個詞的頁碼。而數(shù)據(jù)庫中的索引是某個表中一列或者若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針清單。90索引在SQLServer中索引分為聚集索引(Clustered)和非聚集索引(Unclustered)。使用CreateIndex創(chuàng)建索引。但在Oracle中CreateIndex沒有Clustered選項,即,不能創(chuàng)建聚集索引。Oracle使用索引組織表(Index-OrganizationTableIOT)來完成聚集索引功能。91Oracle的索引組織表(IOT)索引組織表(Index-OrganizationTableIOT)
數(shù)據(jù)按主碼存儲和排序,同索引結(jié)構(gòu)一樣,不過在IOT中數(shù)據(jù)直接存儲于主碼后面。索引組織表的適用情況:
1、代碼查找表。
2、經(jīng)常通過主碼訪問的表。
3、構(gòu)建自己的索引結(jié)構(gòu)。
4、加強(qiáng)數(shù)據(jù)的共同定位,要數(shù)據(jù)按特定順序物理存儲。
5、經(jīng)常用between…and…對主碼或唯一碼進(jìn)行查詢。數(shù)據(jù)物理上分類查詢。如一張訂單表,按日期裝載數(shù)據(jù),想查單個客戶不同時期的訂貨和統(tǒng)計情況。92Oracle的索引組織表(IOT)索引組織表創(chuàng)建語法:
SQL>createtablet2
2
(xintprimarykey,
ychar(2000)defaultrpad(‘a(chǎn)’,2000,‘d’),
zdate)
3
organizationindex
--表示創(chuàng)建的表類型是IOT
4
press
--同索引的壓縮選項一樣,表示是否對相同索引條目值進(jìn)行壓縮存儲
5
pctthreshold50--當(dāng)行的大小超過塊大小的百分比時,超過列數(shù)據(jù)存儲至溢出段
6
includingy
--IOT中每
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024預(yù)應(yīng)力管樁勞務(wù)分包合同
- 2025年度智能辦公空間場地租賃合作協(xié)議書4篇
- 專項水電維修分包合同書2024版范例版
- 二零二五年度文化產(chǎn)業(yè)代理注銷合作協(xié)議3篇
- 2024年04月廣州銀行白云支行2024年社會招考筆試歷年參考題庫附帶答案詳解
- 2025年度產(chǎn)學(xué)研合作項目資金支持及財務(wù)管理合同4篇
- 專業(yè)短駁貨物運輸協(xié)議示范文本版B版
- 2025年度廠房裝修項目環(huán)保評估與治理合同3篇
- 二零二五年度財務(wù)共享服務(wù)中心建設(shè)合同3篇
- 二零二五年度跨境電商供應(yīng)鏈金融連帶責(zé)任擔(dān)保協(xié)議3篇
- ICU常見藥物課件
- CNAS實驗室評審不符合項整改報告
- 農(nóng)民工考勤表(模板)
- 承臺混凝土施工技術(shù)交底
- 臥床患者更換床單-軸線翻身
- 計量基礎(chǔ)知識培訓(xùn)教材201309
- 中考英語 短文填詞、選詞填空練習(xí)
- 一汽集團(tuán)及各合資公司組織架構(gòu)
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 初一至初三數(shù)學(xué)全部知識點
- 新課程理念下的班主任工作藝術(shù)
評論
0/150
提交評論