




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與應(yīng)用(Oracle版)數(shù)據(jù)庫原理與應(yīng)用(Oracle版)人民郵電出版社2第4章SQL基礎(chǔ)4.1SQL的三級(jí)模式結(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的三級(jí)模式結(jié)4.1SQL的三級(jí)模式結(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的三級(jí)模式結(jié)構(gòu)SQL是通用的、功能極強(qiáng)的關(guān)系D4.1SQL的三級(jí)模式結(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動(dòng)詞數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOTE4.1SQL的三級(jí)模式結(jié)構(gòu)SQL不僅具有豐富的查詢功能還具4.1SQL的三級(jí)模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級(jí)模式結(jié)構(gòu)人民郵電出版社54.1SQL的三級(jí)模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級(jí)模式結(jié)構(gòu)人4.2SQL的數(shù)據(jù)定義通過SQL語言的數(shù)據(jù)定義功能,可以完成數(shù)據(jù)庫、基本表、視圖以及索引的創(chuàng)建和修改。通過CREATE、DROP、ALTER3個(gè)核心動(dòng)詞完成數(shù)據(jù)定義功能。人民郵電出版社6動(dòng)詞功
能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)日期/時(shí)間類型DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONE、INTERVALYEARTOMONTH、INTERVALDAYTOSECOND4)大對(duì)象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ù)類型>[列完整性約束],……[表級(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ù)定義完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)上,否則既可定義在列級(jí),也可以定義在表級(jí)。定義表結(jié)構(gòu),并指定相應(yīng)的數(shù)據(jù)完整性約束條件。人民郵電出版社10分析外碼:sno,cno
主碼:sno姓名:非空性別:男、女兩值Student表:Course表:主碼:cno課程名:非空外碼:pcnoSC表:主碼:(sno,cno)成績:0-1004.2SQL的數(shù)據(jù)定義完整性約束條件涉及到該表的多個(gè)屬性列4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLEStudent(snoCHAR(8)NOTNULL,snameVARCHAR2(64)NOTNULL,sexCHAR(4),
birthdayDATE,deptCHAR(32),PRIMARYKEY(sno),CHECKsexIN(‘男’,‘女’));人民郵電出版社11列級(jí)完整性約束實(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<表級(jí)完整性約束>][DROPCONSTRAINT<表級(jí)完整性約束>]人民郵電出版社154.2SQL的數(shù)據(jù)定義基本表的修改人民郵電出版社154.2SQL的數(shù)據(jù)定義基本表修改的例子例在student表中增加一個(gè)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ù)庫某個(gè)基本表不再使用時(shí),可以將其刪除。當(dāng)一個(gè)基本表被刪除后,該表中的所有數(shù)據(jù)連同該表建立的索引都會(huì)被刪除。但由該表導(dǎo)出的視圖的定義仍然存在數(shù)據(jù)字典當(dāng)中,只是無法使用。DROPTABLE<基本表名>例刪除student表DROPTALBEstudent;人民郵電出版社174.2SQL的數(shù)據(jù)定義基本表的刪除人民郵電出版社174.2SQL的數(shù)據(jù)定義什么是索引漢語字典中的漢字按頁存放,一般都有漢語拼音目錄(索引)、偏旁部首目錄等我們可以根據(jù)拼音或偏旁部首,快速查找某個(gè)字詞人民郵電出版社18在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無需對(duì)整個(gè)表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書中的索引是一個(gè)詞語列表,其中注明了包含各個(gè)詞的頁碼。數(shù)據(jù)庫中的索引是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁的邏輯指針清單。4.2SQL的數(shù)據(jù)定義什么是索引人民郵電出版社18在一本書4.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)為了改善查詢性能,可以建立索引。索引是根據(jù)表中的一列或若干列按照一定順序建立的列值,與表中記錄行之間具有一一對(duì)應(yīng)關(guān)系的輔助表結(jié)構(gòu)。索引屬于物理存儲(chǔ)的路徑概念,而不是用戶使用的邏輯概念。建立在多個(gè)列上的索引被稱為復(fù)合索引。有兩種重要的索引:聚集索引(ClusteredIndex)非聚集索引(Non-clusteredIndex)。人民郵電出版社194.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社194.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)聚集索引類似于按姓氏排列數(shù)據(jù)的電話簿。由于聚集索引規(guī)定了數(shù)據(jù)在表中的物理存儲(chǔ)順序,因此一個(gè)表只能包含一個(gè)聚集索引。但該索引可以包含多個(gè)列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣。聚集索引對(duì)于那些經(jīng)常要搜索范圍值的列特別有效。人民郵電出版社204.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社204.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)非聚集索引與書本中的索引類似。數(shù)據(jù)存儲(chǔ)在一個(gè)地方,索引存儲(chǔ)在另一個(gè)地方,索引帶有指針指向數(shù)據(jù)的存儲(chǔ)位置。索引中的項(xiàng)目按索引鍵值的順序存儲(chǔ),而表中的信息則按另一種順序存儲(chǔ)(這可以由聚集索引規(guī)定)。與使用書中索引的方式相似,DBMS在搜索數(shù)據(jù)值時(shí),先對(duì)非聚集索引進(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ī)定索引的每一個(gè)索引值只對(duì)應(yīng)于表中的唯一記錄。CLUSTER:規(guī)定此索引為聚集索引。省略CLUSTER則表示創(chuàng)建的索引為非聚集索引。<次序>:建立索引時(shí)指定列名的索引表是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ù)庫中需要更多的存儲(chǔ)空間操縱數(shù)據(jù)的命令需要更長的處理時(shí)間,因?yàn)樗鼈冃枰獙?duì)索引進(jìn)行更新人民郵電出版社234.2SQL的數(shù)據(jù)定義索引的優(yōu)缺點(diǎn)人民郵電出版社234.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)創(chuàng)建索引例子例
在Employee表的屬性列Eno上創(chuàng)建一個(gè)非聚集索引。CREATEINDEXIDX_DNO_ENOONEmployee(DnoASC,EnoASC);例
在Employee表的屬性列Ename上創(chuàng)建一個(gè)聚集索引。CREATECLUSTERINDEXIDX_ENAMEONEmployee(EnameASC);人民郵電出版社244.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社244.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)刪除索引過多或不當(dāng)?shù)乃饕龝?huì)導(dǎo)致系統(tǒng)低效。用戶在表中每加進(jìn)一個(gè)索引,數(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)包括了三個(gè)字句:SELECT、FROM、WHERE。從表中(From子句),選擇滿足記錄選擇條件(Where子句)的記錄,并對(duì)他們進(jìn)行分組(Group子句,Having子句表達(dá)組選擇條件)統(tǒng)計(jì)(統(tǒng)計(jì)函數(shù))和排序(Orderby子句)和投影(Select子句),形成查詢結(jié)果集人民郵電出版社274.3SQL數(shù)據(jù)查詢查詢的基本結(jié)構(gòu)包括了三個(gè)字句: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ù),該模式演示了一個(gè)很簡單的公司人力資源管理。通過連接到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列,對(duì)應(yīng)的SELECT語句為:SQL>SELECTdeptno,locFROMdept;如果要查詢表中的所有的列,可以用“*”符號(hào)代替所有的列名。例如: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é)果中的元組個(gè)數(shù)COUNT(<列名>)統(tǒng)計(jì)查詢結(jié)果中一個(gè)列上值的個(gè)數(shù)MAX(<列名>) 計(jì)算查詢結(jié)果中一個(gè)列上的最大值MIN(<列名>) 計(jì)算查詢結(jié)果中一個(gè)列上的最小值SUM(<列名>) 計(jì)算查詢結(jié)果中一個(gè)數(shù)值列上的總和AVG(<列名>) 算查詢結(jié)果中一個(gè)數(shù)值列上的平均值①除COUNT(*)外,其他集函數(shù)都會(huì)先去掉空值再計(jì)算。②在<列名>前加入DISTINCT保留字,會(huì)將查詢結(jié)果中重復(fù)的列去掉后再計(jì)算。SELECTCOUNT(*)FROMdept
人民郵電出版社314.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社314.3SQL數(shù)據(jù)查詢單表帶條件查詢一般地,數(shù)據(jù)庫中的數(shù)據(jù)量都非常大,顯示表中所有的行是很不現(xiàn)實(shí)的,可以在查詢的時(shí)候根據(jù)查詢條件對(duì)表進(jìn)行水平分割,使用WHERE子句即可實(shí)現(xiàn)。人民郵電出版社324.3SQL數(shù)據(jù)查詢單表帶條件查詢?nèi)嗣襦]電出版社324.3SQL數(shù)據(jù)查詢WHERE<條件表達(dá)式>人民郵電出版社33查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE:%(匹配多個(gè)字符),_(匹配單個(gè)字符),[](匹配某區(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)在字符串首時(shí)查詢效率會(huì)變慢。%:表示任意長度的字符串_(下劃線):表示任意的單個(gè)字符查詢包含字符串“AR”的員工姓名:SQL>SELECTenameFROMempWHEREenameLIKE'%AR%';人民郵電出版社374.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVINGGROUPBY子句的語法格式為:GROUPBY<字段名>[,<字段名>…][HAVING<條件表達(dá)式>]要對(duì)公司各部門的員工工資進(jìn)行統(tǒng)計(jì),包括各部門的平均工資、最高工資、最低工資、工資總和和總?cè)藬?shù),構(gòu)造的SELECT語句如下所示:SQL>SELECTdeptnoAS部門號(hào),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子句把一個(gè)表按某一指定列(或一些列)上的值相等的原則分組,然后再對(duì)每組數(shù)據(jù)進(jìn)行規(guī)定的操作。分組查詢一般和查詢列的集函數(shù)一起使用,當(dāng)使用GROUPBY子句后,所有的集函數(shù)都將是對(duì)每一個(gè)組進(jìn)行運(yùn)算,而不是對(duì)整個(gè)查詢結(jié)構(gòu)進(jìn)行運(yùn)算。人民郵電出版社394.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVING4.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句SELECT子句的ORDERBY子句可使輸出的查詢結(jié)果按照要求的順序排列。由于是控制輸出結(jié)果,因此ORDERBY子句只能用于最終的查詢結(jié)果?;靖袷绞牵篛RDERBY<列名>[ASC|DESC]有了ORDERBY子句后,SELECT語句的查詢結(jié)果表中各元組將按照要求的順序排列:首先按第一個(gè)<列名>值排列;前一個(gè)<列名>相同的,再按下一個(gè)<列名>值排列人民郵電出版社404.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句人民郵電4.3SQL數(shù)據(jù)查詢排序查詢:ORDERBY子句ORDERBY子句的語法格式為:ORDERBY<字段名>[ASC|DESC][,<字段名>[ASC|DESC]…要對(duì)公司各部門的工資統(tǒng)計(jì)情況進(jìn)行排序,要求是按照工資總和從大到小排序,如果工資總和相同,再按照部門號(hào)從小到大排序。SQL>SELECTdeptnoAS部門號(hào),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ù)庫中通常存在著多個(gè)相互關(guān)聯(lián)的表,用戶常常需要同時(shí)從多個(gè)表中找出自己想要的數(shù)據(jù),這就涉及到多個(gè)數(shù)據(jù)表的查詢。SQL通過連接查詢、并操作、交操作、差操作可以實(shí)現(xiàn)關(guān)系代數(shù)中的運(yùn)算功能。表間的關(guān)系一對(duì)一一對(duì)多多對(duì)多人民郵電出版社424.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社424.3SQL數(shù)據(jù)查詢多表查詢連接查詢:SQL提供在FROM子句中列出每個(gè)關(guān)系,然后在SELECT子句和WHERE子句中引用FROM子句中的關(guān)系的屬性,而WHERE子句中用來連接兩個(gè)關(guān)系的條件稱為連接條件。兩個(gè)表的連接查詢:下面的SELECT語句從emp表中查詢員工的姓名和工資,同時(shí)在dept表中查詢員工所在部門的名稱。SQL>SELECTename,sal,dnameFROMemp,deptWHEREemp.deptno=dept.deptno;人民郵電出版社434.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社434.3SQL數(shù)據(jù)查詢多表查詢?nèi)齻€(gè)表的連接查詢:涉及三個(gè)表(emp、dept和salgrade)的查詢,salgrade表記錄了工資級(jí)別的規(guī)定。現(xiàn)在要查詢部門10和20中每個(gè)員工的姓名、工資、工資級(jí)別以及所在部門的名稱,相應(yīng)的SELECT語句為:SQL>SELECTenameAS姓名,salAS工資,gradeAS工資級(jí)別,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ù)查詢多表查詢使用表的別名的連接查詢兩個(gè)表的查詢SQL>SELECTename,sal,dnameFROMempe,deptdWHEREe.deptno=d.deptno;
三個(gè)表的查詢SQL>SELECTenameAS姓名,salAS工資,gradeAS工資級(jí)別,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值。對(duì)于表A和表B來說,外連接的條件表達(dá)式的格式為:WHEREA.字段名(+)=B.字段名例如,對(duì)于表emp和dept來說,利用相等連接可以查詢所有員工的信息以及員工所在部門的信息。如果某個(gè)部門沒有員工,那么該部門的信息是查詢不到的,因?yàn)檫@樣的部門不滿足相等條件。但是如果使用外連接,可以保證它們同樣被查詢出來。SQL>SELECTename,dnameFROMempa,deptbWHEREa.deptno(+)=b.deptno;人民郵電出版社464.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社464.3SQL數(shù)據(jù)查詢多表查詢自身連接查詢自身連接查詢是一種特殊的相等連接查詢。相等連接一般涉及多個(gè)不同的表,自連接也涉及多個(gè)表,但是它們是同一個(gè)表。例如,在表emp中,每個(gè)員工都有一個(gè)上級(jí)領(lǐng)導(dǎo)編號(hào),而這個(gè)上級(jí)領(lǐng)導(dǎo)同時(shí)也是該公司的員工。如果要查詢每個(gè)員工的上級(jí)領(lǐng)導(dǎo)姓名,首先要確定上級(jí)領(lǐng)導(dǎo)的編號(hào),然后根據(jù)這個(gè)編號(hào)再查詢emp表,利用相等連接確定上級(jí)領(lǐng)導(dǎo)的姓名,這就相當(dāng)于兩個(gè)表的連接。能夠完成這個(gè)查詢的SELECT語句為:SQL>SELECTa.ename,b.enameASmanagerFROMempa,empbWHEREa.mgr=b.empno;SQL允許為FROM子句中的關(guān)系R的每一次出現(xiàn)定義一個(gè)別名。這樣在SELECT子句和WHERE子句中的屬性前面就可以加上“別名.<屬性名>”。人民郵電出版社474.3SQL數(shù)據(jù)查詢多表查詢?nèi)嗣襦]電出版社474.3SQL數(shù)據(jù)查詢多表查詢子查詢嵌套查詢是指嵌套在另一個(gè)SELECT語句中的查詢。在SELECT語句中,WHERE子句或者HAVING子句中的條件往往不能用一個(gè)確定的表達(dá)式來確定,而要依賴于另一個(gè)查詢,這個(gè)被嵌套使用的查詢稱為子查詢,它在形式上是被一對(duì)圓括號(hào)限定的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個(gè)方面。借助相應(yīng)的數(shù)據(jù)操縱語句,可以對(duì)基本表中的數(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語句有兩種插入形式:插入單個(gè)元組插入多個(gè)元組。人民郵電出版社514.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)人民郵電出版社514.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)插入單個(gè)元組INSERTINTO<基本表名>[(<字段名1>,<字段名2>,…,<字段名n>)]VALUES(<表達(dá)式1>,<表達(dá)式2>,…,<表達(dá)式n>)其中,<基本表名>指定要插入元組的表的名字;<字段名1>,<字段名2>,…,<字段名n>為要添加列值的列名序列;VALUES后則一一對(duì)應(yīng)要添加字段的輸入值。人民郵電出版社524.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)人民郵電出版社524.4SQL的數(shù)據(jù)操縱插入數(shù)據(jù)插入單個(gè)元組:要往dept表中插入一條新記錄,部門號(hào)為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ù)插入多個(gè)元組INSERTINTO<基本表名>[(<字段名1>,<字段名2>,…,<字段名n>)]<子查詢>
這種形式可將子查詢的結(jié)果集一次性插入基本表中。如果列名序列省略,則子查詢所得到的數(shù)據(jù)列必須和要插入數(shù)據(jù)的基本表的數(shù)據(jù)列完全一致。如果列名序列給出,則子查詢結(jié)果與列名序列要一一對(duì)應(yīng)。假設(shè)有一個(gè)表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語句修改滿足指定條件元組的指定列值。滿足指定條件的元組可以是一個(gè)元組,也可以是多個(gè)元組。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語句用于刪除每一個(gè)表中的一行或多行記錄。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í)際上視圖是從若干個(gè)基本表或視圖導(dǎo)出來的表,因此當(dāng)基本表的數(shù)據(jù)發(fā)生變化時(shí),相應(yīng)的視圖數(shù)據(jù)也會(huì)隨之改變。視圖定義后,可以和基本表一樣被用戶查詢、更新,但通過視圖來更新基本表中的數(shù)據(jù)要有一定的限制。人民郵電出版社574.5視圖視圖是外模式的基本單位,從用戶觀點(diǎn)來看,視圖和基4.5視圖 定義視圖SQL語言用CREATEVIEW命令建立視圖,其一般格式為:CREATEVIEW<視圖名>[(<字段名>[,<字段名>]…)]AS(子查詢)[WITHREADONLY][WITHCHECKOPTION]WITHCHECKOPTION是可選項(xiàng),該選項(xiàng)表示對(duì)所建視圖進(jìn)行INSERT、UPDATE和DELETE操作時(shí),讓系統(tǒng)檢查該操作的數(shù)據(jù)是否滿足子查詢中WHERE子句里限定的條件,若不滿足,則系統(tǒng)拒絕執(zhí)行。人民郵電出版社584.5視圖 定義視圖人民郵電出版社584.5視圖定義視圖面的語句創(chuàng)建視圖view_1,它所代表的操作是查詢員工表中部門30的員工姓名、工資和獎(jiǎng)金。SQL>CREATEVIEWview_1ASSELECTename,sal,commFROMempWHEREdeptno=30;下面的語句重新創(chuàng)建視圖view_1,并為這個(gè)視圖指定了不同的名稱。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í)行對(duì)視圖的查詢實(shí)際上是根據(jù)視圖的定義轉(zhuǎn)換成等價(jià)的對(duì)基本表的查詢。因此DBMS對(duì)某SELECT語句進(jìn)行處理時(shí),若發(fā)現(xiàn)被查詢對(duì)象是視圖,則DBMS將進(jìn)行下述操作:從數(shù)據(jù)字典中取出視圖的定義。把視圖定義的子查詢和本SELECT語句定義的查詢相結(jié)合,生成等價(jià)的對(duì)基本表的查詢。執(zhí)行對(duì)基本表的查詢,把查詢結(jié)果向用戶顯示。人民郵電出版社614.5視圖 查詢視圖人民郵電出版社614.5視圖查詢視圖在視圖view_1中查找薪水大于2000的員工信息SELECTename,sal,commFROMview_1WHEREsal>2000本例在執(zhí)行時(shí)DBMS會(huì)轉(zhuǎn)化為下列執(zhí)行語句:SELECTename,sal,commFROMempWHEREdeptno=30ANDsal>2000人民郵電出版社624.5視圖查詢視圖人民郵電出版社624.5視圖 更新視圖視圖更新是指對(duì)視圖進(jìn)行插入(INSERT)、刪除(DELETE)和修改(UPDATE)操作。同查詢視圖一樣,因?yàn)橐晥D是虛表,所以對(duì)視圖的更新實(shí)際是轉(zhuǎn)換成對(duì)基本表的更新。若加上子句WITHCHECKOPTION,則在對(duì)視圖更新時(shí),系統(tǒng)將自動(dòng)檢查原定義的條件是否滿足。若不滿足,則拒絕執(zhí)行。人民郵電出版社634.5視圖 更新視圖人民郵電出版社634.5視圖 視圖的優(yōu)點(diǎn)視圖提供一定程度的邏輯獨(dú)立性用戶程序是通過視圖來訪問數(shù)據(jù)庫的,視圖相當(dāng)于用戶的外模式,只需要修改用戶的視圖定義來保證用戶的外模式不變,而用戶的程序不必改變。視圖有利于數(shù)據(jù)的保密對(duì)于不同的用戶定義不同的視圖,而只授予用戶訪問自己視圖的權(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)常會(huì)使用到DBMS提供的函數(shù)來完成用戶需要的功能。針對(duì)不同的DBMS系統(tǒng),提供的函數(shù)都不盡相同,本小節(jié)將對(duì)Oracle中的一些常用函數(shù)進(jìn)行介紹,如字符類函數(shù)、數(shù)字類函數(shù)、日期類函數(shù)、轉(zhuǎn)換類函數(shù)、聚集類函數(shù)等。人民郵電出版社654.6Oracle常用函數(shù)在SQL使用過程中,經(jīng)常會(huì)使用到4.6Oracle常用函數(shù)字符類函數(shù)是專門用于字符處理的函數(shù),處理的對(duì)象可以是字符串常數(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ù)操作時(shí),經(jīng)常使用到這一類函數(shù)。人民郵電出版社694.6Oracle常用函數(shù)轉(zhuǎn)換類函數(shù)用于操作多數(shù)據(jù)類型,在4.6Oracle常用函數(shù)Oracle提供了豐富的聚集類函數(shù)。這些函數(shù)可以在SELECT或SELECT的HAVING子句中使用,當(dāng)用SELECT子句時(shí)常常與GROUPBY一起使用。人民郵電出版社704.6Oracle常用函數(shù)Oracle提供了豐富的聚集類函小結(jié)4.1SQL的三級(jí)模式結(jié)構(gòu)4.2SQL的數(shù)據(jù)定義4.3SQL數(shù)據(jù)查詢4.4SQL的數(shù)據(jù)操縱4.5視圖 4.6Oracle常用函數(shù)人民郵電出版社71小結(jié)4.1SQL的三級(jí)模式結(jié)構(gòu)人民郵電出版社71數(shù)據(jù)庫原理與應(yīng)用(Oracle版)數(shù)據(jù)庫原理與應(yīng)用(Oracle版)人民郵電出版社73第4章SQL基礎(chǔ)4.1SQL的三級(jí)模式結(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的三級(jí)模式結(jié)4.1SQL的三級(jí)模式結(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的三級(jí)模式結(jié)構(gòu)SQL是通用的、功能極強(qiáng)的關(guān)系D4.1SQL的三級(jí)模式結(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動(dòng)詞數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOTE4.1SQL的三級(jí)模式結(jié)構(gòu)SQL不僅具有豐富的查詢功能還具4.1SQL的三級(jí)模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級(jí)模式結(jié)構(gòu)人民郵電出版社764.1SQL的三級(jí)模式結(jié)構(gòu)SQL支持的數(shù)據(jù)庫三級(jí)模式結(jié)構(gòu)人4.2SQL的數(shù)據(jù)定義通過SQL語言的數(shù)據(jù)定義功能,可以完成數(shù)據(jù)庫、基本表、視圖以及索引的創(chuàng)建和修改。通過CREATE、DROP、ALTER3個(gè)核心動(dòng)詞完成數(shù)據(jù)定義功能。人民郵電出版社77動(dòng)詞功
能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)日期/時(shí)間類型DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONE、INTERVALYEARTOMONTH、INTERVALDAYTOSECOND4)大對(duì)象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ù)類型>[列完整性約束],……[表級(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ù)定義完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)上,否則既可定義在列級(jí),也可以定義在表級(jí)。定義表結(jié)構(gòu),并指定相應(yīng)的數(shù)據(jù)完整性約束條件。人民郵電出版社81分析外碼:sno,cno
主碼:sno姓名:非空性別:男、女兩值Student表:Course表:主碼:cno課程名:非空外碼:pcnoSC表:主碼:(sno,cno)成績:0-1004.2SQL的數(shù)據(jù)定義完整性約束條件涉及到該表的多個(gè)屬性列4.2SQL的數(shù)據(jù)定義基本表定義的例子CREATETABLEStudent(snoCHAR(8)NOTNULL,snameVARCHAR2(64)NOTNULL,sexCHAR(4),
birthdayDATE,deptCHAR(32),PRIMARYKEY(sno),CHECKsexIN(‘男’,‘女’));人民郵電出版社82列級(jí)完整性約束實(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<表級(jí)完整性約束>][DROPCONSTRAINT<表級(jí)完整性約束>]人民郵電出版社864.2SQL的數(shù)據(jù)定義基本表的修改人民郵電出版社154.2SQL的數(shù)據(jù)定義基本表修改的例子例在student表中增加一個(gè)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ù)庫某個(gè)基本表不再使用時(shí),可以將其刪除。當(dāng)一個(gè)基本表被刪除后,該表中的所有數(shù)據(jù)連同該表建立的索引都會(huì)被刪除。但由該表導(dǎo)出的視圖的定義仍然存在數(shù)據(jù)字典當(dāng)中,只是無法使用。DROPTABLE<基本表名>例刪除student表DROPTALBEstudent;人民郵電出版社884.2SQL的數(shù)據(jù)定義基本表的刪除人民郵電出版社174.2SQL的數(shù)據(jù)定義什么是索引漢語字典中的漢字按頁存放,一般都有漢語拼音目錄(索引)、偏旁部首目錄等我們可以根據(jù)拼音或偏旁部首,快速查找某個(gè)字詞人民郵電出版社89在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無需對(duì)整個(gè)表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書中的索引是一個(gè)詞語列表,其中注明了包含各個(gè)詞的頁碼。數(shù)據(jù)庫中的索引是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁的邏輯指針清單。4.2SQL的數(shù)據(jù)定義什么是索引人民郵電出版社18在一本書4.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)為了改善查詢性能,可以建立索引。索引是根據(jù)表中的一列或若干列按照一定順序建立的列值,與表中記錄行之間具有一一對(duì)應(yīng)關(guān)系的輔助表結(jié)構(gòu)。索引屬于物理存儲(chǔ)的路徑概念,而不是用戶使用的邏輯概念。建立在多個(gè)列上的索引被稱為復(fù)合索引。有兩種重要的索引:聚集索引(ClusteredIndex)非聚集索引(Non-clusteredIndex)。人民郵電出版社904.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社194.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)聚集索引類似于按姓氏排列數(shù)據(jù)的電話簿。由于聚集索引規(guī)定了數(shù)據(jù)在表中的物理存儲(chǔ)順序,因此一個(gè)表只能包含一個(gè)聚集索引。但該索引可以包含多個(gè)列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣。聚集索引對(duì)于那些經(jīng)常要搜索范圍值的列特別有效。人民郵電出版社914.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社204.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)非聚集索引與書本中的索引類似。數(shù)據(jù)存儲(chǔ)在一個(gè)地方,索引存儲(chǔ)在另一個(gè)地方,索引帶有指針指向數(shù)據(jù)的存儲(chǔ)位置。索引中的項(xiàng)目按索引鍵值的順序存儲(chǔ),而表中的信息則按另一種順序存儲(chǔ)(這可以由聚集索引規(guī)定)。與使用書中索引的方式相似,DBMS在搜索數(shù)據(jù)值時(shí),先對(duì)非聚集索引進(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ī)定索引的每一個(gè)索引值只對(duì)應(yīng)于表中的唯一記錄。CLUSTER:規(guī)定此索引為聚集索引。省略CLUSTER則表示創(chuàng)建的索引為非聚集索引。<次序>:建立索引時(shí)指定列名的索引表是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ù)庫中需要更多的存儲(chǔ)空間操縱數(shù)據(jù)的命令需要更長的處理時(shí)間,因?yàn)樗鼈冃枰獙?duì)索引進(jìn)行更新人民郵電出版社944.2SQL的數(shù)據(jù)定義索引的優(yōu)缺點(diǎn)人民郵電出版社234.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)創(chuàng)建索引例子例
在Employee表的屬性列Eno上創(chuàng)建一個(gè)非聚集索引。CREATEINDEXIDX_DNO_ENOONEmployee(DnoASC,EnoASC);例
在Employee表的屬性列Ename上創(chuàng)建一個(gè)聚集索引。CREATECLUSTERINDEXIDX_ENAMEONEmployee(EnameASC);人民郵電出版社954.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)人民郵電出版社244.2SQL的數(shù)據(jù)定義索引的建立和維護(hù)刪除索引過多或不當(dāng)?shù)乃饕龝?huì)導(dǎo)致系統(tǒng)低效。用戶在表中每加進(jìn)一個(gè)索引,數(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)包括了三個(gè)字句:SELECT、FROM、WHERE。從表中(From子句),選擇滿足記錄選擇條件(Where子句)的記錄,并對(duì)他們進(jìn)行分組(Group子句,Having子句表達(dá)組選擇條件)統(tǒng)計(jì)(統(tǒng)計(jì)函數(shù))和排序(Orderby子句)和投影(Select子句),形成查詢結(jié)果集人民郵電出版社984.3SQL數(shù)據(jù)查詢查詢的基本結(jié)構(gòu)包括了三個(gè)字句: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ù),該模式演示了一個(gè)很簡單的公司人力資源管理。通過連接到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列,對(duì)應(yīng)的SELECT語句為:SQL>SELECTdeptno,locFROMdept;如果要查詢表中的所有的列,可以用“*”符號(hào)代替所有的列名。例如: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é)果中的元組個(gè)數(shù)COUNT(<列名>)統(tǒng)計(jì)查詢結(jié)果中一個(gè)列上值的個(gè)數(shù)MAX(<列名>) 計(jì)算查詢結(jié)果中一個(gè)列上的最大值MIN(<列名>) 計(jì)算查詢結(jié)果中一個(gè)列上的最小值SUM(<列名>) 計(jì)算查詢結(jié)果中一個(gè)數(shù)值列上的總和AVG(<列名>) 算查詢結(jié)果中一個(gè)數(shù)值列上的平均值①除COUNT(*)外,其他集函數(shù)都會(huì)先去掉空值再計(jì)算。②在<列名>前加入DISTINCT保留字,會(huì)將查詢結(jié)果中重復(fù)的列去掉后再計(jì)算。SELECTCOUNT(*)FROMdept
人民郵電出版社1024.3SQL數(shù)據(jù)查詢單表無條件查詢?nèi)嗣襦]電出版社314.3SQL數(shù)據(jù)查詢單表帶條件查詢一般地,數(shù)據(jù)庫中的數(shù)據(jù)量都非常大,顯示表中所有的行是很不現(xiàn)實(shí)的,可以在查詢的時(shí)候根據(jù)查詢條件對(duì)表進(jìn)行水平分割,使用WHERE子句即可實(shí)現(xiàn)。人民郵電出版社1034.3SQL數(shù)據(jù)查詢單表帶條件查詢?nèi)嗣襦]電出版社324.3SQL數(shù)據(jù)查詢WHERE<條件表達(dá)式>人民郵電出版社104查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE:%(匹配多個(gè)字符),_(匹配單個(gè)字符),[](匹配某區(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)在字符串首時(shí)查詢效率會(huì)變慢。%:表示任意長度的字符串_(下劃線):表示任意的單個(gè)字符查詢包含字符串“AR”的員工姓名:SQL>SELECTenameFROMempWHEREenameLIKE'%AR%';人民郵電出版社1084.3SQL數(shù)據(jù)查詢單表帶條件查詢:使用特殊運(yùn)算符的查詢?nèi)?.3SQL數(shù)據(jù)查詢分組查詢GROUPBY與HAVINGGROUPBY子句的語法格式為:GROUPBY<字段名>[,<字段名>…][HAVING<條件表達(dá)式>]要對(duì)公司各部門的員工工資進(jìn)行統(tǒng)計(jì),包括各部門的平均工資、最高工資、最低工資、工資總和和總?cè)藬?shù),構(gòu)造的SELECT語句如下所示:SQL>SELECTdeptnoAS部門號(hào),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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能牌藝提升課程行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 味精(谷氨酸鈉)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 罐頭企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 汽車運(yùn)輸企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 年產(chǎn)2000噸鍛造套圈項(xiàng)目可行性研究報(bào)告寫作模板-備案審批
- 二零二五年度教育信息化合作協(xié)議補(bǔ)充協(xié)議
- 二零二五年度智能交通系統(tǒng)工程合作協(xié)議書
- 餐飲行業(yè)2025年度校園飯?zhí)媒?jīng)營權(quán)轉(zhuǎn)讓合同
- 媒體合作合同履約金條款
- 2025年度智慧社區(qū)車位產(chǎn)權(quán)出售協(xié)議書
- 納米生物醫(yī)用材料課件
- 八年級(jí)-現(xiàn)在完成時(shí)復(fù)習(xí)(共26張)課件
- 第十章可持續(xù)發(fā)展理論與實(shí)踐課件
- 電氣基礎(chǔ)知識(shí)培訓(xùn)要點(diǎn)課件
- 洗浴中心轉(zhuǎn)讓合同(5篇)
- 外研版小學(xué)英語五年級(jí)下冊課文翻譯
- YY-T 1823-2022 心血管植入物 鎳鈦合金鎳離子釋放試驗(yàn)方法
- 年產(chǎn)12000噸水合肼(100%)項(xiàng)目環(huán)評(píng)報(bào)告書
- 鉆芯法檢測混凝土抗壓強(qiáng)度原始記錄1
- 液壓支架與泵站(第二版)課件匯總?cè)珪娮咏贪竿暾嬲n件最全幻燈片(最新)
- 分布式光伏電站支架結(jié)構(gòu)及荷載計(jì)算書
評(píng)論
0/150
提交評(píng)論