版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與應(yīng)用(Oracle版)數(shù)據(jù)庫原理與應(yīng)用(Oracle版)人民郵電出版社2第4章SQL基礎(chǔ)4.1SQL的三級模式結(jié)構(gòu)4.2SQL的數(shù)據(jù)定義4.3SQL數(shù)據(jù)查詢4.4SQL的數(shù)據(jù)操縱4.5視圖4.6Oracle常用函數(shù)人民郵電出版社2第4章SQL基礎(chǔ)4.1SQL的三級模式結(jié)4.1SQL的三級模式結(jié)構(gòu)SQL是通用的、功能極強(qiáng)的關(guān)系DB語言。SQL的主要標(biāo)準(zhǔn)SQL-86SQL-89SQL-92(SQL2)SQL-99(SQL3)SQL-2003人民郵電出版社34.1SQL的三級模式結(jié)構(gòu)SQL是通用的、功能極強(qiáng)的關(guān)系D4.1SQL的三級模式結(jié)構(gòu)SQL不僅具有豐富的查詢功能還具有數(shù)據(jù)定義和數(shù)據(jù)控制功能,是集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)查詢語言(DQL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)于一體的關(guān)系數(shù)據(jù)語言。人民郵電出版社4SQL功能SQL動詞數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOTE4.1SQL的三級模式結(jié)構(gòu)SQL不僅具有豐富的查詢功能還具4.1SQL的三級模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級模式結(jié)構(gòu)人民郵電出版社54.1SQL的三級模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級模式結(jié)構(gòu)人4.2SQL的數(shù)據(jù)定義通過SQL語言的數(shù)據(jù)定義功能,可以完成數(shù)據(jù)庫、基本表、視圖以及索引的創(chuàng)建和修改。通過CREATE、DROP、ALTER3個核心動詞完成數(shù)據(jù)定義功能。人民郵電出版社6動詞功
能CREATECREATEDATABASECREATETABLECREATEVIEWCREATEINDEX創(chuàng)建數(shù)據(jù)庫創(chuàng)建表創(chuàng)建視圖創(chuàng)建索引DROPDROPDATABASEDROPTABLEDROPVIEWDROPINDEX刪除數(shù)據(jù)庫刪除表刪除視圖刪除索引ALTERALTERTABLE修改表4.2SQL的數(shù)據(jù)定義通過SQL語言的數(shù)據(jù)定義功能,可以完4.2SQL的數(shù)據(jù)定義Oracle支持的數(shù)據(jù)類型1)字符類型CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR22)數(shù)值類型NUMBER、LONG、BINARY_FLOAT、BINARY_DOUBLE3)日期/時間類型DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONE、INTERVALYEARTOMONTH、INTERVALDAYTOSECOND4)大對象RAW、LONGRAW、CLOB、NCLOB、BLOB、BFILE5)ROWID人民郵電出版社74.2SQL的數(shù)據(jù)定義Oracle支持的數(shù)據(jù)類型人民郵電出4.2SQL的數(shù)據(jù)定義基本表的定義CREATETABLE<表名>(<字段名1><字段數(shù)據(jù)類型>[列完整性約束],<字段名2><字段數(shù)據(jù)類型>[列完整性約束],……[表級完整性約束]);人民郵電出版社84.2SQL的數(shù)據(jù)定義基本表的定義人民郵電出版社84.2SQL的數(shù)據(jù)定義基本表定義的例子建立學(xué)生信息表studentSQL>CREATETABLEstudent( snoNUMBER(8)NOTNULL, snameVARCHAR2(64)NOTNULL, sexCHAR(4)DEFAULT'男', birthdayDATE, addressVARCHAR2(256),CONSTRAINT[PK_student]PRIMARYKEY(sno),CONSTRAINT[gen_check]CHECK(sexin('男','女'));人民郵電出版社94.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社94.2SQL的數(shù)據(jù)定義完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可定義在列級,也可以定義在表級。定義表結(jié)構(gòu),并指定相應(yīng)的數(shù)據(jù)完整性約束條件。人民郵電出版社10分析外碼:sno,cno
主碼:sno姓名:非空性別:男、女兩值Student表:Course表:主碼:cno課程名:非空外碼:pcnoSC表:主碼:(sno,cno)成績:0-1004.2SQL的數(shù)據(jù)定義完整性約束條件涉及到該表的多個屬性列4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLEStudent(snoCHAR(8)NOTNULL,snameVARCHAR2(64)NOTNULL,sexCHAR(4),
birthdayDATE,deptCHAR(32),PRIMARYKEY(sno),CHECKsexIN(‘男’,‘女’));人民郵電出版社11列級完整性約束實(shí)體完整性約束用戶自定義完整性約束4.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社11列4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLECourse(cnoCHAR(4),cnameCHAR(10)NOTNULL,pcnoCHAR(4),creditNUMBER(4),PRIMARYKEY(cno),FOREIGNKEY(pcno)REFERENCESCourse(cno));人民郵電出版社12參照完整性約束條件4.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社12參4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLESC(snoCHAR(8),cnoCHAR(4),gradeNUMBER(6,2),PRIMARYKEY(sno,cno),FOREIGNKEY(sno)REFERENCESStudent(sno),FOREIGNKEY(cno)REFERENCESCourse(cno),CHECK((gradeISNULL)OR(gradeBETWEEN0AND100)));人民郵電出版社134.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社134.2SQL的數(shù)據(jù)定義在Oracle中創(chuàng)建表的完整的語法如下:CREATETABLE[模式名.]<表名>(<字段名><字段數(shù)據(jù)類型>[,字段名字段數(shù)據(jù)類型]…) [TABLESPACE表空間名] [PCTFREE] [PCTUSED] [INITRANS] [MAXTRANS] [STORAGECLAUSE] [LOGGING|NOLOGGING] [CACHE|NOCACHE];人民郵電出版社144.2SQL的數(shù)據(jù)定義在Oracle中創(chuàng)建表的完整的語法如4.2SQL的數(shù)據(jù)定義基本表的修改ALTERTABLE<基本表名>[ADD<新列名><列數(shù)據(jù)類型>[列完整性約束]][DROPCOLUMN<列名>][MODIFY<列名><新的數(shù)據(jù)類型>][ADDCONSTRAINT<表級完整性約束>][DROPCONSTRAINT<表級完整性約束>]人民郵電出版社154.2SQL的數(shù)據(jù)定義基本表的修改人民郵電出版社154.2SQL的數(shù)據(jù)定義基本表修改的例子例在student表中增加一個age列(年齡)。ALTERTALBEstudentADDageNUMBER(4)NULL;例修改student表中dept列為CHAR(16)。ALTERTALBEstudentMODIFYdeptCHAR(16);例刪除student表中新增的age列。ALTERTALBEstudentDROPCOLUMNage;人民郵電出版社164.2SQL的數(shù)據(jù)定義基本表修改的例子人民郵電出版社164.2SQL的數(shù)據(jù)定義基本表的刪除當(dāng)數(shù)據(jù)庫某個基本表不再使用時,可以將其刪除。當(dāng)一個基本表被刪除后,該表中的所有數(shù)據(jù)連同該表建立的索引都會被刪除。但由該表導(dǎo)出的視圖的定義仍然存在數(shù)據(jù)字典當(dāng)中,只是無法使用。DROPTABLE<基本表名>例刪除student表DROPTALBEstudent;人民郵電出版社174.2SQL的數(shù)據(jù)定義基本表的刪除人民郵電出版社174.2SQL的數(shù)據(jù)定義什么是索引漢語字典中的漢字按頁存放,一般都有漢語拼音目錄(索引)、偏旁部首目錄等我們可以根據(jù)拼音或偏旁部首,快速查找某個字詞人民郵電出版社18在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無需對整個表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書中的索引是一個詞語列表,其中注明了包含各個詞的頁碼。數(shù)據(jù)庫中的索引是某個表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針清單。4.2SQL的數(shù)據(jù)定義什么是索引人民郵電出版社18在一本書4.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)為了改善查詢性能,可以建立索引。索引是根據(jù)表中的一列或若干列按照一定順序建立的列值,與表中記錄行之間具有一一對應(yīng)關(guān)系的輔助表結(jié)構(gòu)。索引屬于物理存儲的路徑概念,而不是用戶使用的邏輯概念。建立在多個列上的索引被稱為復(fù)合索引。有兩種重要的索引:聚集索引(ClusteredIndex)非聚集索引(Non-clusteredIndex)。人民郵電出版社194.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社194.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)聚集索引類似于按姓氏排列數(shù)據(jù)的電話簿。由于聚集索引規(guī)定了數(shù)據(jù)在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣。聚集索引對于那些經(jīng)常要搜索范圍值的列特別有效。人民郵電出版社204.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社204.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)非聚集索引與書本中的索引類似。數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數(shù)據(jù)的存儲位置。索引中的項(xiàng)目按索引鍵值的順序存儲,而表中的信息則按另一種順序存儲(這可以由聚集索引規(guī)定)。與使用書中索引的方式相似,DBMS在搜索數(shù)據(jù)值時,先對非聚集索引進(jìn)行搜索,找到數(shù)據(jù)值在表中的位置,然后從該位置直接檢索數(shù)據(jù)。人民郵電出版社214.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社214.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)創(chuàng)建索引CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<基本表名>(<列名>[<次序>],[,<列名>[<次序>]]…);說明:UNIQUE:規(guī)定索引的每一個索引值只對應(yīng)于表中的唯一記錄。CLUSTER:規(guī)定此索引為聚集索引。省略CLUSTER則表示創(chuàng)建的索引為非聚集索引。<次序>:建立索引時指定列名的索引表是ASC(升序)或DESC(降序)。人民郵電出版社224.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社224.2SQL的數(shù)據(jù)定義索引的優(yōu)缺點(diǎn)優(yōu)點(diǎn)加快訪問速度加強(qiáng)行的唯一性缺點(diǎn)帶索引的表在數(shù)據(jù)庫中需要更多的存儲空間操縱數(shù)據(jù)的命令需要更長的處理時間,因?yàn)樗鼈冃枰獙λ饕M(jìn)行更新人民郵電出版社234.2SQL的數(shù)據(jù)定義索引的優(yōu)缺點(diǎn)人民郵電出版社234.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)創(chuàng)建索引例子例
在Employee表的屬性列Eno上創(chuàng)建一個非聚集索引。CREATEINDEXIDX_DNO_ENOONEmployee(DnoASC,EnoASC);例
在Employee表的屬性列Ename上創(chuàng)建一個聚集索引。CREATECLUSTERINDEXIDX_ENAMEONEmployee(EnameASC);人民郵電出版社244.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社244.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)刪除索引過多或不當(dāng)?shù)乃饕龝?dǎo)致系統(tǒng)低效。用戶在表中每加進(jìn)一個索引,數(shù)據(jù)庫就要做更多的工作。過多的索引甚至?xí)?dǎo)致索引碎片,降低系統(tǒng)效率。DROPINDEX<索引名>ON<基本表名>例
刪除Employee表的IDX_ENAME索引。DROPINDEXIDX_ENAMEONEmployee;人民郵電出版社254.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社254.3SQL數(shù)據(jù)查詢SQL數(shù)據(jù)查詢是SQL語言中最重要、最豐富也是最靈活的內(nèi)容。SELECT語句的語法SELECT[ALL|DISTINCT]<列名或表達(dá)式>[別名1][,<列名或表達(dá)式>[別名2]]…FROM<表名或視圖名>[表別名1][,<表名或視圖名>[表別名2]]…[WHERE<條件表達(dá)式>][GROUPBY<列名>[,<列名>…][HAVING<條件表達(dá)式>]][ORDERBY<列名>[ASC|DESC][,<列名>[ASC|DESC]…]人民郵電出版社264.3SQL數(shù)據(jù)查詢SQL數(shù)據(jù)查詢是SQL語言中最重要、最4.3SQL數(shù)據(jù)查詢查詢的基本結(jié)構(gòu)包括了三個字句:SELECT、FROM、WHERE。從表中(From子句),選擇滿足記錄選擇條件(Where子句)的記錄,并對他們進(jìn)行分組(Group子句,Having子句表達(dá)組選擇條件)統(tǒng)計(jì)(統(tǒng)計(jì)函數(shù))和排序(Orderby子句)和投影(Select子句),形成查詢結(jié)果集人民郵電出版社274.3SQL數(shù)據(jù)查詢查詢的基本結(jié)構(gòu)包括了三個字句:SELE4.3SQL數(shù)據(jù)查詢單表無條件查詢從Northwind數(shù)據(jù)庫的Customers表中查詢出所有的列:
SELECT*FROMcustomers從Customers表中查詢出部分列:
SELECTCompanyName,ContactName,Address,PhoneFROMcustomers在結(jié)果集中給查詢的列以別名:
SELECTCompanyNameAS公司名稱,ContactNameAS聯(lián)系人姓名,AddressAS地址,PhoneAS電話FROMcustomers人民郵電出版社284.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社284.3SQL數(shù)據(jù)查詢Oracle所提供的scott模式可以提供一些示例表和數(shù)據(jù),該模式演示了一個很簡單的公司人力資源管理。通過連接到scott模式,并查詢數(shù)據(jù)字典視圖USER_TABLES可以獲知該模式所包含的表。SQL>CONNECTscott/ustb2012;SQL>SELECTtable_nameFROMUSER_TABLES;人民郵電出版社294.3SQL數(shù)據(jù)查詢Oracle所提供的scott模式可以4.3SQL數(shù)據(jù)查詢單表無條件查詢SELECT字段名1,字段名2…FROM<表名或視圖名>例如,要查詢dept表中的deptno和loc列,對應(yīng)的SELECT語句為:SQL>SELECTdeptno,locFROMdept;如果要查詢表中的所有的列,可以用“*”符號代替所有的列名。例如:SQL>SELECT*FROMdept;使用別名的SELECT語句格式為:SELECT字段名1AS別名1,字段名2AS別名2…FROM<表名或視圖名>人民郵電出版社304.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社304.3SQL數(shù)據(jù)查詢單表無條件查詢查詢列中含有聚合函數(shù)COUNT(*)統(tǒng)計(jì)查詢結(jié)果中的元組個數(shù)COUNT(<列名>)統(tǒng)計(jì)查詢結(jié)果中一個列上值的個數(shù)MAX(<列名>) 計(jì)算查詢結(jié)果中一個列上的最大值MIN(<列名>) 計(jì)算查詢結(jié)果中一個列上的最小值SUM(<列名>) 計(jì)算查詢結(jié)果中一個數(shù)值列上的總和AVG(<列名>) 算查詢結(jié)果中一個數(shù)值列上的平均值①除COUNT(*)外,其他集函數(shù)都會先去掉空值再計(jì)算。②在<列名>前加入DISTINCT保留字,會將查詢結(jié)果中重復(fù)的列去掉后再計(jì)算。SELECTCOUNT(*)FROMdept
人民郵電出版社314.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社314.3SQL數(shù)據(jù)查詢單表帶條件查詢一般地,數(shù)據(jù)庫中的數(shù)據(jù)量都非常大,顯示表中所有的行是很不現(xiàn)實(shí)的,可以在查詢的時候根據(jù)查詢條件對表進(jìn)行水平分割,使用WHERE子句即可實(shí)現(xiàn)。人民郵電出版社324.3SQL數(shù)據(jù)查詢單表帶條件查詢?nèi)嗣襦]電出版社324.3SQL數(shù)據(jù)查詢WHERE<條件表達(dá)式>人民郵電出版社33查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE:%(匹配多個字符),_(匹配單個字符),[](匹配某區(qū)間數(shù)據(jù))空值ISNULL,ISNOTNULL多重條件AND,OR4.3SQL數(shù)據(jù)查詢WHERE<條件表達(dá)式>人民郵電出版4.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用比較運(yùn)算符的查詢在表dept中查詢部門10的員工姓名和工資信息SQL>SELECTename,salFROMempWHEREdeptno=10;查詢工資在1000到2000之間的員工SQL>SELECTenameFROMempWHEREsal>=1000ANDsal<=2000;查詢工資大于1000的員工姓名SQL>SELECTenameFROMempWHEREsal>=1000;人民郵電出版社344.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用比較運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢查詢工資在1000到2000之間的員工,使用BETWEEN…AND:SQL>SELECTenameFROMempWHEREsalBETWEEN1000AND2000;查詢其姓名在指定集合之中的員工:SQL>SELECTenameFROMempWHEREenameIN('SMITH','FORD','HELLO');人民郵電出版社354.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢查詢員工表emp中dname列的值為NULL的記錄:SELECT*FROMempWHEREdnameISNULL查詢員工表emp中dname列的值非空的記錄,使用ISNOTNULL:SELECT*FROMempWHEREdnameISNOTNULL人民郵電出版社364.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢<列名>LIKE/NOTLIKE<字符串常數(shù)>字符串常數(shù)中通常要使用通配符。通配符可以出現(xiàn)在字符串的任何位置。但通配符出現(xiàn)在字符串首時查詢效率會變慢。%:表示任意長度的字符串_(下劃線):表示任意的單個字符查詢包含字符串“AR”的員工姓名:SQL>SELECTenameFROMempWHEREenameLIKE'%AR%';人民郵電出版社374.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVINGGROUPBY子句的語法格式為:GROUPBY<字段名>[,<字段名>…][HAVING<條件表達(dá)式>]要對公司各部門的員工工資進(jìn)行統(tǒng)計(jì),包括各部門的平均工資、最高工資、最低工資、工資總和和總?cè)藬?shù),構(gòu)造的SELECT語句如下所示:SQL>SELECTdeptnoAS部門號,AVG(sal)AS平均工資,MIN(sal)AS最低工資,MAX(sal)AS最高工資,SUM(sal)AS工資總和FROMempGROUPBYdeptno;人民郵電出版社384.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVING4.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVING含有GROUPBY的查詢稱為分組查詢。GROUPBY子句把一個表按某一指定列(或一些列)上的值相等的原則分組,然后再對每組數(shù)據(jù)進(jìn)行規(guī)定的操作。分組查詢一般和查詢列的集函數(shù)一起使用,當(dāng)使用GROUPBY子句后,所有的集函數(shù)都將是對每一個組進(jìn)行運(yùn)算,而不是對整個查詢結(jié)構(gòu)進(jìn)行運(yùn)算。人民郵電出版社394.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVING4.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句SELECT子句的ORDERBY子句可使輸出的查詢結(jié)果按照要求的順序排列。由于是控制輸出結(jié)果,因此ORDERBY子句只能用于最終的查詢結(jié)果。基本格式是:ORDERBY<列名>[ASC|DESC]有了ORDERBY子句后,SELECT語句的查詢結(jié)果表中各元組將按照要求的順序排列:首先按第一個<列名>值排列;前一個<列名>相同的,再按下一個<列名>值排列人民郵電出版社404.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句人民郵電4.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句ORDERBY子句的語法格式為:ORDERBY<字段名>[ASC|DESC][,<字段名>[ASC|DESC]…要對公司各部門的工資統(tǒng)計(jì)情況進(jìn)行排序,要求是按照工資總和從大到小排序,如果工資總和相同,再按照部門號從小到大排序。SQL>SELECTdeptnoAS部門號,AVG(sal)AS平均工資,MIN(sal)AS最低工資,MAX(sal)AS最高工資,SUM(sal)AS工資總和FROMempGROUPBYdeptnoORDERBYSUM(sal)DESC,deptnoASC人民郵電出版社414.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句人民郵電4.3SQL數(shù)據(jù)查詢多表查詢在數(shù)據(jù)庫中通常存在著多個相互關(guān)聯(lián)的表,用戶常常需要同時從多個表中找出自己想要的數(shù)據(jù),這就涉及到多個數(shù)據(jù)表的查詢。SQL通過連接查詢、并操作、交操作、差操作可以實(shí)現(xiàn)關(guān)系代數(shù)中的運(yùn)算功能。表間的關(guān)系一對一一對多多對多人民郵電出版社424.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社424.3SQL數(shù)據(jù)查詢多表查詢連接查詢:SQL提供在FROM子句中列出每個關(guān)系,然后在SELECT子句和WHERE子句中引用FROM子句中的關(guān)系的屬性,而WHERE子句中用來連接兩個關(guān)系的條件稱為連接條件。兩個表的連接查詢:下面的SELECT語句從emp表中查詢員工的姓名和工資,同時在dept表中查詢員工所在部門的名稱。SQL>SELECTename,sal,dnameFROMemp,deptWHEREemp.deptno=dept.deptno;人民郵電出版社434.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社434.3SQL數(shù)據(jù)查詢多表查詢?nèi)齻€表的連接查詢:涉及三個表(emp、dept和salgrade)的查詢,salgrade表記錄了工資級別的規(guī)定?,F(xiàn)在要查詢部門10和20中每個員工的姓名、工資、工資級別以及所在部門的名稱,相應(yīng)的SELECT語句為:SQL>SELECTenameAS姓名,salAS工資,gradeAS工資級別,dnameAS部門名稱FROMempa,deptb,salgradecWHEREa.deptno=b.deptnoAND(a.deptno=10ora.deptno=20)AND(sal>=c.losalandsal<=c.hisal)人民郵電出版社444.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社444.3SQL數(shù)據(jù)查詢多表查詢使用表的別名的連接查詢兩個表的查詢SQL>SELECTename,sal,dnameFROMempe,deptdWHEREe.deptno=d.deptno;
三個表的查詢SQL>SELECTenameAS姓名,salAS工資,gradeAS工資級別,dnameAS部門名稱FROMempa,deptb,salgradecWHEREa.deptno=b.deptnoAND(a.deptno=10ora.deptno=20)AND(sal>=c.losalandsal<=c.hisal)人民郵電出版社454.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社454.3SQL數(shù)據(jù)查詢多表查詢外連接查詢外連接是一種特殊的連接方式。其原理是將B表中的所有數(shù)據(jù)分別與A表中的每條數(shù)據(jù)進(jìn)行連接組合,返回的結(jié)果不僅包含B表中符合條件的數(shù)據(jù)外,還包含B表中不符合條件的數(shù)據(jù),并在A表的相應(yīng)列中添加NULL值。對于表A和表B來說,外連接的條件表達(dá)式的格式為:WHEREA.字段名(+)=B.字段名例如,對于表emp和dept來說,利用相等連接可以查詢所有員工的信息以及員工所在部門的信息。如果某個部門沒有員工,那么該部門的信息是查詢不到的,因?yàn)檫@樣的部門不滿足相等條件。但是如果使用外連接,可以保證它們同樣被查詢出來。SQL>SELECTename,dnameFROMempa,deptbWHEREa.deptno(+)=b.deptno;人民郵電出版社464.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社464.3SQL數(shù)據(jù)查詢多表查詢自身連接查詢自身連接查詢是一種特殊的相等連接查詢。相等連接一般涉及多個不同的表,自連接也涉及多個表,但是它們是同一個表。例如,在表emp中,每個員工都有一個上級領(lǐng)導(dǎo)編號,而這個上級領(lǐng)導(dǎo)同時也是該公司的員工。如果要查詢每個員工的上級領(lǐng)導(dǎo)姓名,首先要確定上級領(lǐng)導(dǎo)的編號,然后根據(jù)這個編號再查詢emp表,利用相等連接確定上級領(lǐng)導(dǎo)的姓名,這就相當(dāng)于兩個表的連接。能夠完成這個查詢的SELECT語句為:SQL>SELECTa.ename,b.enameASmanagerFROMempa,empbWHEREa.mgr=b.empno;SQL允許為FROM子句中的關(guān)系R的每一次出現(xiàn)定義一個別名。這樣在SELECT子句和WHERE子句中的屬性前面就可以加上“別名.<屬性名>”。人民郵電出版社474.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社474.3SQL數(shù)據(jù)查詢多表查詢子查詢嵌套查詢是指嵌套在另一個SELECT語句中的查詢。在SELECT語句中,WHERE子句或者HAVING子句中的條件往往不能用一個確定的表達(dá)式來確定,而要依賴于另一個查詢,這個被嵌套使用的查詢稱為子查詢,它在形式上是被一對圓括號限定的SELECT語句。在子查詢中還可以再嵌套子查詢。子查詢中的運(yùn)算符人民郵電出版社484.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社484.3SQL數(shù)據(jù)查詢多表查詢子查詢SQL>SELECTenameFROMempWHEREEXISTS(SELECTdeptnoFROMdeptWHEREdeptno=0);SQL>SELECTdnameFROMdeptWHEREdeptnoIN(SELECTdistinctdeptnoFROMemp);SQL>SELECTdnameFROMdeptWHEREdeptno=ANY(SELECTdistinctdeptnoFROMemp);人民郵電出版社494.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社494.4SQL的數(shù)據(jù)操縱SQL語言的數(shù)據(jù)操縱功能主要包括插入(INSERT)、刪除(DELETE)和更新(UPDATE)3個方面。借助相應(yīng)的數(shù)據(jù)操縱語句,可以對基本表中的數(shù)據(jù)進(jìn)行更新,包括向基本表中插入數(shù)據(jù)、修改基本表中原有數(shù)據(jù)、刪除基本表的某些數(shù)據(jù)。人民郵電出版社504.4SQL的數(shù)據(jù)操縱SQL語言的數(shù)據(jù)操縱功能主要包括插入4.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)當(dāng)基本表建立以后,就可以往表中插入數(shù)據(jù)了,在SQL中插入數(shù)據(jù)使用INSERT語句實(shí)現(xiàn)。INSERT語句有兩種插入形式:插入單個元組插入多個元組。人民郵電出版社514.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)人民郵電出版社514.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)插入單個元組INSERTINTO<基本表名>[(<字段名1>,<字段名2>,…,<字段名n>)]VALUES(<表達(dá)式1>,<表達(dá)式2>,…,<表達(dá)式n>)其中,<基本表名>指定要插入元組的表的名字;<字段名1>,<字段名2>,…,<字段名n>為要添加列值的列名序列;VALUES后則一一對應(yīng)要添加字段的輸入值。人民郵電出版社524.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)人民郵電出版社524.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)插入單個元組:要往dept表中插入一條新記錄,部門號為50,部門名稱為NETWORK,部門地址為BEIJING,相應(yīng)的INSERT語句為:SQL>INSERTINTOdept(deptno,dname,loc)VALUES(50,'NETWORK','BEIJING');SQL>INSERTINTOdeptVALUES(50,'NETWORK','BEIJING');人民郵電出版社534.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)人民郵電出版社534.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)插入多個元組INSERTINTO<基本表名>[(<字段名1>,<字段名2>,…,<字段名n>)]<子查詢>
這種形式可將子查詢的結(jié)果集一次性插入基本表中。如果列名序列省略,則子查詢所得到的數(shù)據(jù)列必須和要插入數(shù)據(jù)的基本表的數(shù)據(jù)列完全一致。如果列名序列給出,則子查詢結(jié)果與列名序列要一一對應(yīng)。假設(shè)有一個表emp1,它的結(jié)構(gòu)與emp相同,現(xiàn)在希望從表emp中將部門10和部門20的員工數(shù)據(jù)復(fù)制到表emp1中,相應(yīng)的數(shù)據(jù)插入語句為:SQL>INSERTINTOemp1(empno,ename,deptno,sal,hiredate)SELECTempno,ename,deptno,sal,hiredateFROMempWHEREdeptno=10ordeptno=20;
人民郵電出版社544.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)人民郵電出版社544.4SQL的數(shù)據(jù)操縱修改數(shù)據(jù)在SQL中使用UPDATE語句修改滿足指定條件元組的指定列值。滿足指定條件的元組可以是一個元組,也可以是多個元組。UPDATE語句的一般格式為:UPDATE<基本表名>SET<字段名1>=<表達(dá)式1>[,<字段名2>=<表達(dá)式2>][,…n][WHERE<條件>]例如:SQL>UPDATEempSETsal=sal*1.1,comm=nvl(comm,0)+100WHEREdeptnoIN(10,20)ANDsal>2000;人民郵電出版社554.4SQL的數(shù)據(jù)操縱修改數(shù)據(jù)人民郵電出版社554.4SQL的數(shù)據(jù)操縱刪除數(shù)據(jù)SQL提供了DELETE語句用于刪除每一個表中的一行或多行記錄。DELETE是數(shù)據(jù)操縱語句,只是刪除表中的每條記錄,不能刪除表的定義。DELETE語句的一般格式:DELETEFROM<表名>[WHERE<條件>]DROP、DELETE、TRUNCATE三者的差別TRUNCATETABLE<表名>下面的DELETE語句將刪除表emp中的所有記錄SQL>DELETEFROMemp;SQL>TRUNCATETABLEdept;人民郵電出版社564.4SQL的數(shù)據(jù)操縱刪除數(shù)據(jù)人民郵電出版社564.5視圖視圖是外模式的基本單位,從用戶觀點(diǎn)來看,視圖和基本表是一樣的。實(shí)際上視圖是從若干個基本表或視圖導(dǎo)出來的表,因此當(dāng)基本表的數(shù)據(jù)發(fā)生變化時,相應(yīng)的視圖數(shù)據(jù)也會隨之改變。視圖定義后,可以和基本表一樣被用戶查詢、更新,但通過視圖來更新基本表中的數(shù)據(jù)要有一定的限制。人民郵電出版社574.5視圖視圖是外模式的基本單位,從用戶觀點(diǎn)來看,視圖和基4.5視圖 定義視圖SQL語言用CREATEVIEW命令建立視圖,其一般格式為:CREATEVIEW<視圖名>[(<字段名>[,<字段名>]…)]AS(子查詢)[WITHREADONLY][WITHCHECKOPTION]WITHCHECKOPTION是可選項(xiàng),該選項(xiàng)表示對所建視圖進(jìn)行INSERT、UPDATE和DELETE操作時,讓系統(tǒng)檢查該操作的數(shù)據(jù)是否滿足子查詢中WHERE子句里限定的條件,若不滿足,則系統(tǒng)拒絕執(zhí)行。人民郵電出版社584.5視圖 定義視圖人民郵電出版社584.5視圖定義視圖面的語句創(chuàng)建視圖view_1,它所代表的操作是查詢員工表中部門30的員工姓名、工資和獎金。SQL>CREATEVIEWview_1ASSELECTename,sal,commFROMempWHEREdeptno=30;下面的語句重新創(chuàng)建視圖view_1,并為這個視圖指定了不同的名稱。SQL>CREATEVIEWview_1(name,salary,comm1)ASSELECTename,sal,commFROMempWHEREdeptno=30;人民郵電出版社594.5視圖定義視圖人民郵電出版社594.5視圖刪除視圖在SQL中刪除視圖使用DROPVIEW語句,其一般格式為:DROPVIEW<視圖名>刪除視圖view_1。SQL>DROPVIEWview_1;人民郵電出版社604.5視圖刪除視圖人民郵電出版社604.5視圖 查詢視圖從用戶角度來說,查詢視圖與查詢基本表是一樣的,可是視圖是存在于數(shù)據(jù)庫當(dāng)中的虛表,所以DBMS執(zhí)行對視圖的查詢實(shí)際上是根據(jù)視圖的定義轉(zhuǎn)換成等價(jià)的對基本表的查詢。因此DBMS對某SELECT語句進(jìn)行處理時,若發(fā)現(xiàn)被查詢對象是視圖,則DBMS將進(jìn)行下述操作:從數(shù)據(jù)字典中取出視圖的定義。把視圖定義的子查詢和本SELECT語句定義的查詢相結(jié)合,生成等價(jià)的對基本表的查詢。執(zhí)行對基本表的查詢,把查詢結(jié)果向用戶顯示。人民郵電出版社614.5視圖 查詢視圖人民郵電出版社614.5視圖查詢視圖在視圖view_1中查找薪水大于2000的員工信息SELECTename,sal,commFROMview_1WHEREsal>2000本例在執(zhí)行時DBMS會轉(zhuǎn)化為下列執(zhí)行語句:SELECTename,sal,commFROMempWHEREdeptno=30ANDsal>2000人民郵電出版社624.5視圖查詢視圖人民郵電出版社624.5視圖 更新視圖視圖更新是指對視圖進(jìn)行插入(INSERT)、刪除(DELETE)和修改(UPDATE)操作。同查詢視圖一樣,因?yàn)橐晥D是虛表,所以對視圖的更新實(shí)際是轉(zhuǎn)換成對基本表的更新。若加上子句WITHCHECKOPTION,則在對視圖更新時,系統(tǒng)將自動檢查原定義的條件是否滿足。若不滿足,則拒絕執(zhí)行。人民郵電出版社634.5視圖 更新視圖人民郵電出版社634.5視圖 視圖的優(yōu)點(diǎn)視圖提供一定程度的邏輯獨(dú)立性用戶程序是通過視圖來訪問數(shù)據(jù)庫的,視圖相當(dāng)于用戶的外模式,只需要修改用戶的視圖定義來保證用戶的外模式不變,而用戶的程序不必改變。視圖有利于數(shù)據(jù)的保密對于不同的用戶定義不同的視圖,而只授予用戶訪問自己視圖的權(quán)限視圖簡化了用戶的操作視圖機(jī)制是用戶把注意力集中在自己所關(guān)心的數(shù)據(jù)上。這種視圖所表達(dá)的數(shù)據(jù)邏輯結(jié)構(gòu)相比基本表而言,更易被用戶所理解。人民郵電出版社644.5視圖 視圖的優(yōu)點(diǎn)人民郵電出版社644.6Oracle常用函數(shù)在SQL使用過程中,經(jīng)常會使用到DBMS提供的函數(shù)來完成用戶需要的功能。針對不同的DBMS系統(tǒng),提供的函數(shù)都不盡相同,本小節(jié)將對Oracle中的一些常用函數(shù)進(jìn)行介紹,如字符類函數(shù)、數(shù)字類函數(shù)、日期類函數(shù)、轉(zhuǎn)換類函數(shù)、聚集類函數(shù)等。人民郵電出版社654.6Oracle常用函數(shù)在SQL使用過程中,經(jīng)常會使用到4.6Oracle常用函數(shù)字符類函數(shù)是專門用于字符處理的函數(shù),處理的對象可以是字符串常數(shù),也可以是字符類型的字段。人民郵電出版社664.6Oracle常用函數(shù)字符類函數(shù)是專門用于字符處理的函4.6Oracle常用函數(shù)數(shù)字類函數(shù)操作數(shù)字?jǐn)?shù)據(jù),執(zhí)行數(shù)學(xué)和算術(shù)運(yùn)算。所有函數(shù)都有數(shù)字參數(shù)并返回?cái)?shù)字值。需要注意的是所有三角函數(shù)的操作數(shù)和值都是弧度而不是角度。人民郵電出版社674.6Oracle常用函數(shù)數(shù)字類函數(shù)操作數(shù)字?jǐn)?shù)據(jù),執(zhí)行數(shù)學(xué)4.6Oracle常用函數(shù)日期類函數(shù)操作DATE數(shù)據(jù)類型。絕大多數(shù)都有DATE數(shù)據(jù)類型的參數(shù),且其返回值也大都為DATE數(shù)據(jù)類型。人民郵電出版社684.6Oracle常用函數(shù)日期類函數(shù)操作DATE數(shù)據(jù)類型。4.6Oracle常用函數(shù)轉(zhuǎn)換類函數(shù)用于操作多數(shù)據(jù)類型,在數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換。在使用SQL語句進(jìn)行數(shù)據(jù)操作時,經(jīng)常使用到這一類函數(shù)。人民郵電出版社694.6Oracle常用函數(shù)轉(zhuǎn)換類函數(shù)用于操作多數(shù)據(jù)類型,在4.6Oracle常用函數(shù)Oracle提供了豐富的聚集類函數(shù)。這些函數(shù)可以在SELECT或SELECT的HAVING子句中使用,當(dāng)用SELECT子句時常常與GROUPBY一起使用。人民郵電出版社704.6Oracle常用函數(shù)Oracle提供了豐富的聚集類函小結(jié)4.1SQL的三級模式結(jié)構(gòu)4.2SQL的數(shù)據(jù)定義4.3SQL數(shù)據(jù)查詢4.4SQL的數(shù)據(jù)操縱4.5視圖 4.6Oracle常用函數(shù)人民郵電出版社71小結(jié)4.1SQL的三級模式結(jié)構(gòu)人民郵電出版社71數(shù)據(jù)庫原理與應(yīng)用(Oracle版)數(shù)據(jù)庫原理與應(yīng)用(Oracle版)人民郵電出版社73第4章SQL基礎(chǔ)4.1SQL的三級模式結(jié)構(gòu)4.2SQL的數(shù)據(jù)定義4.3SQL數(shù)據(jù)查詢4.4SQL的數(shù)據(jù)操縱4.5視圖4.6Oracle常用函數(shù)人民郵電出版社2第4章SQL基礎(chǔ)4.1SQL的三級模式結(jié)4.1SQL的三級模式結(jié)構(gòu)SQL是通用的、功能極強(qiáng)的關(guān)系DB語言。SQL的主要標(biāo)準(zhǔn)SQL-86SQL-89SQL-92(SQL2)SQL-99(SQL3)SQL-2003人民郵電出版社744.1SQL的三級模式結(jié)構(gòu)SQL是通用的、功能極強(qiáng)的關(guān)系D4.1SQL的三級模式結(jié)構(gòu)SQL不僅具有豐富的查詢功能還具有數(shù)據(jù)定義和數(shù)據(jù)控制功能,是集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)查詢語言(DQL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)于一體的關(guān)系數(shù)據(jù)語言。人民郵電出版社75SQL功能SQL動詞數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOTE4.1SQL的三級模式結(jié)構(gòu)SQL不僅具有豐富的查詢功能還具4.1SQL的三級模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級模式結(jié)構(gòu)人民郵電出版社764.1SQL的三級模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級模式結(jié)構(gòu)人4.2SQL的數(shù)據(jù)定義通過SQL語言的數(shù)據(jù)定義功能,可以完成數(shù)據(jù)庫、基本表、視圖以及索引的創(chuàng)建和修改。通過CREATE、DROP、ALTER3個核心動詞完成數(shù)據(jù)定義功能。人民郵電出版社77動詞功
能CREATECREATEDATABASECREATETABLECREATEVIEWCREATEINDEX創(chuàng)建數(shù)據(jù)庫創(chuàng)建表創(chuàng)建視圖創(chuàng)建索引DROPDROPDATABASEDROPTABLEDROPVIEWDROPINDEX刪除數(shù)據(jù)庫刪除表刪除視圖刪除索引ALTERALTERTABLE修改表4.2SQL的數(shù)據(jù)定義通過SQL語言的數(shù)據(jù)定義功能,可以完4.2SQL的數(shù)據(jù)定義Oracle支持的數(shù)據(jù)類型1)字符類型CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR22)數(shù)值類型NUMBER、LONG、BINARY_FLOAT、BINARY_DOUBLE3)日期/時間類型DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONE、INTERVALYEARTOMONTH、INTERVALDAYTOSECOND4)大對象RAW、LONGRAW、CLOB、NCLOB、BLOB、BFILE5)ROWID人民郵電出版社784.2SQL的數(shù)據(jù)定義Oracle支持的數(shù)據(jù)類型人民郵電出4.2SQL的數(shù)據(jù)定義基本表的定義CREATETABLE<表名>(<字段名1><字段數(shù)據(jù)類型>[列完整性約束],<字段名2><字段數(shù)據(jù)類型>[列完整性約束],……[表級完整性約束]);人民郵電出版社794.2SQL的數(shù)據(jù)定義基本表的定義人民郵電出版社84.2SQL的數(shù)據(jù)定義基本表定義的例子建立學(xué)生信息表studentSQL>CREATETABLEstudent( snoNUMBER(8)NOTNULL, snameVARCHAR2(64)NOTNULL, sexCHAR(4)DEFAULT'男', birthdayDATE, addressVARCHAR2(256),CONSTRAINT[PK_student]PRIMARYKEY(sno),CONSTRAINT[gen_check]CHECK(sexin('男','女'));人民郵電出版社804.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社94.2SQL的數(shù)據(jù)定義完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可定義在列級,也可以定義在表級。定義表結(jié)構(gòu),并指定相應(yīng)的數(shù)據(jù)完整性約束條件。人民郵電出版社81分析外碼:sno,cno
主碼:sno姓名:非空性別:男、女兩值Student表:Course表:主碼:cno課程名:非空外碼:pcnoSC表:主碼:(sno,cno)成績:0-1004.2SQL的數(shù)據(jù)定義完整性約束條件涉及到該表的多個屬性列4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLEStudent(snoCHAR(8)NOTNULL,snameVARCHAR2(64)NOTNULL,sexCHAR(4),
birthdayDATE,deptCHAR(32),PRIMARYKEY(sno),CHECKsexIN(‘男’,‘女’));人民郵電出版社82列級完整性約束實(shí)體完整性約束用戶自定義完整性約束4.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社11列4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLECourse(cnoCHAR(4),cnameCHAR(10)NOTNULL,pcnoCHAR(4),creditNUMBER(4),PRIMARYKEY(cno),FOREIGNKEY(pcno)REFERENCESCourse(cno));人民郵電出版社83參照完整性約束條件4.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社12參4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLESC(snoCHAR(8),cnoCHAR(4),gradeNUMBER(6,2),PRIMARYKEY(sno,cno),FOREIGNKEY(sno)REFERENCESStudent(sno),FOREIGNKEY(cno)REFERENCESCourse(cno),CHECK((gradeISNULL)OR(gradeBETWEEN0AND100)));人民郵電出版社844.2SQL的數(shù)據(jù)定義基本表定義的例子人民郵電出版社134.2SQL的數(shù)據(jù)定義在Oracle中創(chuàng)建表的完整的語法如下:CREATETABLE[模式名.]<表名>(<字段名><字段數(shù)據(jù)類型>[,字段名字段數(shù)據(jù)類型]…) [TABLESPACE表空間名] [PCTFREE] [PCTUSED] [INITRANS] [MAXTRANS] [STORAGECLAUSE] [LOGGING|NOLOGGING] [CACHE|NOCACHE];人民郵電出版社854.2SQL的數(shù)據(jù)定義在Oracle中創(chuàng)建表的完整的語法如4.2SQL的數(shù)據(jù)定義基本表的修改ALTERTABLE<基本表名>[ADD<新列名><列數(shù)據(jù)類型>[列完整性約束]][DROPCOLUMN<列名>][MODIFY<列名><新的數(shù)據(jù)類型>][ADDCONSTRAINT<表級完整性約束>][DROPCONSTRAINT<表級完整性約束>]人民郵電出版社864.2SQL的數(shù)據(jù)定義基本表的修改人民郵電出版社154.2SQL的數(shù)據(jù)定義基本表修改的例子例在student表中增加一個age列(年齡)。ALTERTALBEstudentADDageNUMBER(4)NULL;例修改student表中dept列為CHAR(16)。ALTERTALBEstudentMODIFYdeptCHAR(16);例刪除student表中新增的age列。ALTERTALBEstudentDROPCOLUMNage;人民郵電出版社874.2SQL的數(shù)據(jù)定義基本表修改的例子人民郵電出版社164.2SQL的數(shù)據(jù)定義基本表的刪除當(dāng)數(shù)據(jù)庫某個基本表不再使用時,可以將其刪除。當(dāng)一個基本表被刪除后,該表中的所有數(shù)據(jù)連同該表建立的索引都會被刪除。但由該表導(dǎo)出的視圖的定義仍然存在數(shù)據(jù)字典當(dāng)中,只是無法使用。DROPTABLE<基本表名>例刪除student表DROPTALBEstudent;人民郵電出版社884.2SQL的數(shù)據(jù)定義基本表的刪除人民郵電出版社174.2SQL的數(shù)據(jù)定義什么是索引漢語字典中的漢字按頁存放,一般都有漢語拼音目錄(索引)、偏旁部首目錄等我們可以根據(jù)拼音或偏旁部首,快速查找某個字詞人民郵電出版社89在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無需對整個表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書中的索引是一個詞語列表,其中注明了包含各個詞的頁碼。數(shù)據(jù)庫中的索引是某個表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針清單。4.2SQL的數(shù)據(jù)定義什么是索引人民郵電出版社18在一本書4.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)為了改善查詢性能,可以建立索引。索引是根據(jù)表中的一列或若干列按照一定順序建立的列值,與表中記錄行之間具有一一對應(yīng)關(guān)系的輔助表結(jié)構(gòu)。索引屬于物理存儲的路徑概念,而不是用戶使用的邏輯概念。建立在多個列上的索引被稱為復(fù)合索引。有兩種重要的索引:聚集索引(ClusteredIndex)非聚集索引(Non-clusteredIndex)。人民郵電出版社904.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社194.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)聚集索引類似于按姓氏排列數(shù)據(jù)的電話簿。由于聚集索引規(guī)定了數(shù)據(jù)在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣。聚集索引對于那些經(jīng)常要搜索范圍值的列特別有效。人民郵電出版社914.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社204.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)非聚集索引與書本中的索引類似。數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數(shù)據(jù)的存儲位置。索引中的項(xiàng)目按索引鍵值的順序存儲,而表中的信息則按另一種順序存儲(這可以由聚集索引規(guī)定)。與使用書中索引的方式相似,DBMS在搜索數(shù)據(jù)值時,先對非聚集索引進(jìn)行搜索,找到數(shù)據(jù)值在表中的位置,然后從該位置直接檢索數(shù)據(jù)。人民郵電出版社924.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社214.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)創(chuàng)建索引CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<基本表名>(<列名>[<次序>],[,<列名>[<次序>]]…);說明:UNIQUE:規(guī)定索引的每一個索引值只對應(yīng)于表中的唯一記錄。CLUSTER:規(guī)定此索引為聚集索引。省略CLUSTER則表示創(chuàng)建的索引為非聚集索引。<次序>:建立索引時指定列名的索引表是ASC(升序)或DESC(降序)。人民郵電出版社934.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社224.2SQL的數(shù)據(jù)定義索引的優(yōu)缺點(diǎn)優(yōu)點(diǎn)加快訪問速度加強(qiáng)行的唯一性缺點(diǎn)帶索引的表在數(shù)據(jù)庫中需要更多的存儲空間操縱數(shù)據(jù)的命令需要更長的處理時間,因?yàn)樗鼈冃枰獙λ饕M(jìn)行更新人民郵電出版社944.2SQL的數(shù)據(jù)定義索引的優(yōu)缺點(diǎn)人民郵電出版社234.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)創(chuàng)建索引例子例
在Employee表的屬性列Eno上創(chuàng)建一個非聚集索引。CREATEINDEXIDX_DNO_ENOONEmployee(DnoASC,EnoASC);例
在Employee表的屬性列Ename上創(chuàng)建一個聚集索引。CREATECLUSTERINDEXIDX_ENAMEONEmployee(EnameASC);人民郵電出版社954.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社244.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)刪除索引過多或不當(dāng)?shù)乃饕龝?dǎo)致系統(tǒng)低效。用戶在表中每加進(jìn)一個索引,數(shù)據(jù)庫就要做更多的工作。過多的索引甚至?xí)?dǎo)致索引碎片,降低系統(tǒng)效率。DROPINDEX<索引名>ON<基本表名>例
刪除Employee表的IDX_ENAME索引。DROPINDEXIDX_ENAMEONEmployee;人民郵電出版社964.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社254.3SQL數(shù)據(jù)查詢SQL數(shù)據(jù)查詢是SQL語言中最重要、最豐富也是最靈活的內(nèi)容。SELECT語句的語法SELECT[ALL|DISTINCT]<列名或表達(dá)式>[別名1][,<列名或表達(dá)式>[別名2]]…FROM<表名或視圖名>[表別名1][,<表名或視圖名>[表別名2]]…[WHERE<條件表達(dá)式>][GROUPBY<列名>[,<列名>…][HAVING<條件表達(dá)式>]][ORDERBY<列名>[ASC|DESC][,<列名>[ASC|DESC]…]人民郵電出版社974.3SQL數(shù)據(jù)查詢SQL數(shù)據(jù)查詢是SQL語言中最重要、最4.3SQL數(shù)據(jù)查詢查詢的基本結(jié)構(gòu)包括了三個字句:SELECT、FROM、WHERE。從表中(From子句),選擇滿足記錄選擇條件(Where子句)的記錄,并對他們進(jìn)行分組(Group子句,Having子句表達(dá)組選擇條件)統(tǒng)計(jì)(統(tǒng)計(jì)函數(shù))和排序(Orderby子句)和投影(Select子句),形成查詢結(jié)果集人民郵電出版社984.3SQL數(shù)據(jù)查詢查詢的基本結(jié)構(gòu)包括了三個字句:SELE4.3SQL數(shù)據(jù)查詢單表無條件查詢從Northwind數(shù)據(jù)庫的Customers表中查詢出所有的列:
SELECT*FROMcustomers從Customers表中查詢出部分列:
SELECTCompanyName,ContactName,Address,PhoneFROMcustomers在結(jié)果集中給查詢的列以別名:
SELECTCompanyNameAS公司名稱,ContactNameAS聯(lián)系人姓名,AddressAS地址,PhoneAS電話FROMcustomers人民郵電出版社994.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社284.3SQL數(shù)據(jù)查詢Oracle所提供的scott模式可以提供一些示例表和數(shù)據(jù),該模式演示了一個很簡單的公司人力資源管理。通過連接到scott模式,并查詢數(shù)據(jù)字典視圖USER_TABLES可以獲知該模式所包含的表。SQL>CONNECTscott/ustb2012;SQL>SELECTtable_nameFROMUSER_TABLES;人民郵電出版社1004.3SQL數(shù)據(jù)查詢Oracle所提供的scott模式可以4.3SQL數(shù)據(jù)查詢單表無條件查詢SELECT字段名1,字段名2…FROM<表名或視圖名>例如,要查詢dept表中的deptno和loc列,對應(yīng)的SELECT語句為:SQL>SELECTdeptno,locFROMdept;如果要查詢表中的所有的列,可以用“*”符號代替所有的列名。例如:SQL>SELECT*FROMdept;使用別名的SELECT語句格式為:SELECT字段名1AS別名1,字段名2AS別名2…FROM<表名或視圖名>人民郵電出版社1014.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社304.3SQL數(shù)據(jù)查詢單表無條件查詢查詢列中含有聚合函數(shù)COUNT(*)統(tǒng)計(jì)查詢結(jié)果中的元組個數(shù)COUNT(<列名>)統(tǒng)計(jì)查詢結(jié)果中一個列上值的個數(shù)MAX(<列名>) 計(jì)算查詢結(jié)果中一個列上的最大值MIN(<列名>) 計(jì)算查詢結(jié)果中一個列上的最小值SUM(<列名>) 計(jì)算查詢結(jié)果中一個數(shù)值列上的總和AVG(<列名>) 算查詢結(jié)果中一個數(shù)值列上的平均值①除COUNT(*)外,其他集函數(shù)都會先去掉空值再計(jì)算。②在<列名>前加入DISTINCT保留字,會將查詢結(jié)果中重復(fù)的列去掉后再計(jì)算。SELECTCOUNT(*)FROMdept
人民郵電出版社1024.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社314.3SQL數(shù)據(jù)查詢單表帶條件查詢一般地,數(shù)據(jù)庫中的數(shù)據(jù)量都非常大,顯示表中所有的行是很不現(xiàn)實(shí)的,可以在查詢的時候根據(jù)查詢條件對表進(jìn)行水平分割,使用WHERE子句即可實(shí)現(xiàn)。人民郵電出版社1034.3SQL數(shù)據(jù)查詢單表帶條件查詢?nèi)嗣襦]電出版社324.3SQL數(shù)據(jù)查詢WHERE<條件表達(dá)式>人民郵電出版社104查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE:%(匹配多個字符),_(匹配單個字符),[](匹配某區(qū)間數(shù)據(jù))空值ISNULL,ISNOTNULL多重條件AND,OR4.3SQL數(shù)據(jù)查詢WHERE<條件表達(dá)式>人民郵電出版4.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用比較運(yùn)算符的查詢在表dept中查詢部門10的員工姓名和工資信息SQL>SELECTename,salFROMempWHEREdeptno=10;查詢工資在1000到2000之間的員工SQL>SELECTenameFROMempWHEREsal>=1000ANDsal<=2000;查詢工資大于1000的員工姓名SQL>SELECTenameFROMempWHEREsal>=1000;人民郵電出版社1054.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用比較運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢查詢工資在1000到2000之間的員工,使用BETWEEN…AND:SQL>SELECTenameFROMempWHEREsalBETWEEN1000AND2000;查詢其姓名在指定集合之中的員工:SQL>SELECTenameFROMempWHEREenameIN('SMITH','FORD','HELLO');人民郵電出版社1064.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢查詢員工表emp中dname列的值為NULL的記錄:SELECT*FROMempWHEREdnameISNULL查詢員工表emp中dname列的值非空的記錄,使用ISNOTNULL:SELECT*FROMempWHEREdnameISNOTNULL人民郵電出版社1074.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢<列名>LIKE/NOTLIKE<字符串常數(shù)>字符串常數(shù)中通常要使用通配符。通配符可以出現(xiàn)在字符串的任何位置。但通配符出現(xiàn)在字符串首時查詢效率會變慢。%:表示任意長度的字符串_(下劃線):表示任意的單個字符查詢包含字符串“AR”的員工姓名:SQL>SELECTenameFROMempWHEREenameLIKE'%AR%';人民郵電出版社1084.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVINGGROUPBY子句的語法格式為:GROUPBY<字段名>[,<字段名>…][HAVING<條件表達(dá)式>]要對公司各部門的員工工資進(jìn)行統(tǒng)計(jì),包括各部門的平均工資、最高工資、最低工資、工資總和和總?cè)藬?shù),構(gòu)造的SELECT語句如下所示:SQL>SELECTdeptnoAS部門號,AVG(sal)AS平均工資,MIN(sal)AS最低工資,MAX(sal)AS最高工資,SUM(sal)AS工資總和FROMempGROUPBYdeptno;人民郵電出版社1094.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVING
溫馨提示
- 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年婚前房產(chǎn)協(xié)議書
- 2024年攜手共創(chuàng):金礦采礦工程承包合約
- 2024服務(wù)禮儀個人培訓(xùn)工作總結(jié)(3篇)
- 2024年房屋拆遷安置勞務(wù)協(xié)議
- 專練02七道選擇題主觀原理題-2023年高考化學(xué)考前手感保溫訓(xùn)練(全國卷)(原卷版)
- DB4113T 061-2024 水稻直播高產(chǎn)栽培技術(shù)規(guī)程
- DB4113T 035-2023 南陽艾病蟲害綜合防治技術(shù)規(guī)程
- DB4106T 79-2022 大棚韭菜生產(chǎn)技術(shù)規(guī)程
- DB4106T 60-2022 夏玉米倒伏等級氣象指標(biāo)
- DB4105T 197-2022 冬小麥晚播栽培技術(shù)規(guī)程
- 北京市海淀區(qū)2024-2025學(xué)年高三第一學(xué)期期中練習(xí)語文試卷含答案
- 劉潤年度演講2024
- 小學(xué)六年級英語上冊《Unit 1 How can I get there》教案
- 完整版方法驗(yàn)證報(bào)告模板最終
- 電力管道資料表格(共30頁)
- 大班科學(xué)活動教案《豆豆家族》含PPT課件
- 【精品試卷】部編人教版(統(tǒng)編)一年級上冊語文第一單元測試卷含答案
- 金屬有機(jī)化學(xué)ppt課件
- 數(shù)學(xué)說題稿(共4頁)
- 門球協(xié)會章程
- 應(yīng)急管理試題庫
評論
0/150
提交評論