Oracle教程 (第6版)(Oracle 11g版) 課件 第3、4章 數(shù)據(jù)庫的創(chuàng)建和操作;數(shù)據(jù)庫的查詢和視圖_第1頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第3、4章 數(shù)據(jù)庫的創(chuàng)建和操作;數(shù)據(jù)庫的查詢和視圖_第2頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第3、4章 數(shù)據(jù)庫的創(chuàng)建和操作;數(shù)據(jù)庫的查詢和視圖_第3頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第3、4章 數(shù)據(jù)庫的創(chuàng)建和操作;數(shù)據(jù)庫的查詢和視圖_第4頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第3、4章 數(shù)據(jù)庫的創(chuàng)建和操作;數(shù)據(jù)庫的查詢和視圖_第5頁
已閱讀5頁,還剩161頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章數(shù)據(jù)庫的創(chuàng)建和操作以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)使用DBCA創(chuàng)建學(xué)生成績管理數(shù)據(jù)庫XSCJ,其步驟如下。(1)啟動DBCA,出現(xiàn)“歡迎使用”窗口,如圖所示,單擊“下一步”按鈕進入創(chuàng)建數(shù)據(jù)庫的向?qū)АR越缑娣绞絼?chuàng)建數(shù)據(jù)庫(采用DBCA)(2)在“操作”窗口中,用戶可以選擇要執(zhí)行的操作,這里選中“創(chuàng)建數(shù)據(jù)庫”選項,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(3)在“數(shù)據(jù)庫模板”窗口中,選擇相應(yīng)選項后單擊“顯示詳細資料”按鈕,可查看該數(shù)據(jù)庫模板的各種信息。這里選擇“一般用途或事務(wù)處理”選項,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(4)在“數(shù)據(jù)庫標(biāo)識”窗口的“全局?jǐn)?shù)據(jù)庫名”和“SID”后輸入相關(guān)信息,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(5)在“管理選項”窗口中可以勾選“配置EnterpriseManager”復(fù)選項或選擇“配置DatabaseControl以進行本地管理”單選項,這里保持默認設(shè)置,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(6)在“數(shù)據(jù)庫身份證明”窗口中,將所有賬戶設(shè)置為同一管理口令(Mm123456),如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(7)在“數(shù)據(jù)庫文件所在位置”窗口中,選擇“所有數(shù)據(jù)庫文件使用公共位置”選項,單擊“瀏覽”按鈕,選擇數(shù)據(jù)庫文件的存放路徑,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(8)在“恢復(fù)配置”窗口中采取默認的配置,單擊“下一步”按鈕。(9)在“數(shù)據(jù)庫內(nèi)容”窗口中勾選“示例方案”復(fù)選項,如圖所示,這樣就可以在學(xué)習(xí)的過程中參考標(biāo)準(zhǔn)設(shè)置,也可以了解基礎(chǔ)的數(shù)據(jù)庫創(chuàng)建方法和SQL語言。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(10)在“初始化參數(shù)”和“數(shù)據(jù)庫存儲”窗口中都保持默認配置,分別單擊“下一步”按鈕。(11)在“創(chuàng)建選項”窗口中勾選“創(chuàng)建數(shù)據(jù)庫”復(fù)選項,如圖所示,單擊“完成”按鈕,之后會彈出確認創(chuàng)建的對話框,單擊“確定”按鈕開始創(chuàng)建數(shù)據(jù)庫。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(12)創(chuàng)建數(shù)據(jù)庫期間顯示的進度窗口如圖所示,過程較為漫長,需要耐心等待……以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(13)創(chuàng)建數(shù)據(jù)庫完畢后,系統(tǒng)會彈出窗口顯示相關(guān)的提示信息,如圖所示,需要在這一步解鎖SCOTT、SYSTEM、SYS賬戶并設(shè)置其口令,單擊“口令管理”按鈕,彈出“口令管理”對話框。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)至此,所有步驟都已全部完成?,F(xiàn)在,系統(tǒng)服務(wù)中應(yīng)該已經(jīng)有SID為XSCJ的服務(wù)選項并已置為“自動”啟動,服務(wù)正在運行,如圖所示,訪問XSCJ數(shù)據(jù)庫前必須保證已啟動了這兩個系統(tǒng)服務(wù):OracleOraDb11g_home1TNSListener和OracleServiceXSCJ。第3章數(shù)據(jù)庫的創(chuàng)建和操作以界面方式操作數(shù)據(jù)庫(采用SQLDeveloper)01表

作1.表的概念2.?dāng)?shù)據(jù)類型3.表結(jié)構(gòu)設(shè)計4.創(chuàng)建表5.修改表6.刪除表表

作1.表的概念表是日常工作和生活中經(jīng)常使用的一種表示數(shù)據(jù)及其關(guān)系的形式,如表所示就是用來表示學(xué)生信息的學(xué)生表。學(xué)

號姓

名性

別出生時間專

業(yè)總

學(xué)

分備

注151101王林男1997-02-10計算機50

151103王燕女1996-10-06計算機50

151108林一帆男1996-08-05計算機52已提前修完一門課151202王林男1996-01-29通信工程40有一門課不及格,待補考151204馬琳琳女1996-02-10通信工程42

作關(guān)系數(shù)據(jù)庫使用表(關(guān)系)來表示實體及其聯(lián)系。表包含下列概念。(1)表結(jié)構(gòu):每個表都包含一組固定的列,而列由數(shù)據(jù)類型(DATATYPE)和長度(LENGTH)兩部分組成,以描述該表所代表的實體的屬性。(2)記錄:每個表包含了若干行數(shù)據(jù),它們是表的“值”,其中的一行稱為一個記錄,因此,表是記錄的有限集合。(3)字段:每個記錄由若干個數(shù)據(jù)項構(gòu)成,將構(gòu)成記錄的數(shù)據(jù)項稱為字段。(4)關(guān)鍵字:若表中記錄的某個字段或字段組合能唯一標(biāo)識記錄,則稱該字段(字段組合)為候選關(guān)鍵字(Candidatekey)。表

作2.?dāng)?shù)據(jù)類型在設(shè)計表的列時,必須為其指定數(shù)據(jù)類型,它決定了該列數(shù)據(jù)的取值、范圍和存儲格式。列的數(shù)據(jù)類型可以是Oracle系統(tǒng)的數(shù)據(jù)類型,如表。3.表結(jié)構(gòu)設(shè)計創(chuàng)建表的實質(zhì)就是定義表結(jié)構(gòu),以及設(shè)置表和列的屬性。在創(chuàng)建表之前,先要確定表的名字和屬性,同時確定表所包含的列名、列的數(shù)據(jù)類型、長度、是否可為空值、約束條件、默認值設(shè)置、規(guī)則,以及所需索引、哪些列是主鍵、哪些列是外鍵等屬性,這些屬性構(gòu)成了表結(jié)構(gòu)。這里以學(xué)生成績管理系統(tǒng)的三個表,即學(xué)生表(表名為XSB)、課程表(表名為KCB)和成績表(表名為CJB)為例介紹如何設(shè)計表的結(jié)構(gòu)。表

作在XSB表中,只有“學(xué)號”列能唯一標(biāo)識一個學(xué)生,所以將該列設(shè)為主鍵。最終設(shè)計出XSB的表結(jié)構(gòu)如表所示。列

名數(shù)據(jù)類型是否可空默

值說

明學(xué)號char(6)×無主鍵姓名char(8)×無

性別char(2)ד男”

出生時間date×無

專業(yè)char(12)√無

總學(xué)分number(2)√00≤總學(xué)分<100備注varchar2(200)√無

作參照XSB表結(jié)構(gòu)的設(shè)計方法,同樣可以設(shè)計出其他兩個表的結(jié)構(gòu),如表所示是KCB的表結(jié)構(gòu),如表所示是CJB的表結(jié)構(gòu)。列

名數(shù)據(jù)類型是否可空默

值說

明課程號char(3)×無主鍵課程名char(16)×無

開課學(xué)期number(1)√1只能為1~8學(xué)時number(2)√0

學(xué)分number(1)×0

KCB的表結(jié)構(gòu)列

名數(shù)據(jù)類型是否可空默

值說

明學(xué)號char(6)×無主鍵課程號char(3)×無主鍵成績number(2)√無

CJB的表結(jié)構(gòu)表

作4.創(chuàng)建表這里以創(chuàng)建XSB表為例,操作的步驟如下。(1)啟動SQLDeveloper,在“連接”節(jié)點下打開數(shù)據(jù)庫連接myorcl(已創(chuàng)建)。右擊“表”節(jié)點,選擇“新建表”菜單項。(2)進入“創(chuàng)建表”窗口,在“名稱”欄中填寫表名XSB,在“表”選項卡的“列名”、“類型”、“大小”、“非空”和“主鍵”欄中分別填入(選擇)XSB表中“學(xué)號”列的列名、數(shù)據(jù)類型、長度、非空性和是否為主鍵等信息,完成后單擊“添加列”按鈕輸入下一列,直到輸入完所有的列為止,如圖。表

作(3)輸入完最后一列的信息后,勾選右上角的“高級”復(fù)選項,這時會顯示出更多的表選項,如圖所示,如要設(shè)置默認值可以在“列屬性”的“默認”欄中輸入默認值。這里暫不對其他選項進行設(shè)置,單擊“確定”按鈕完成表的創(chuàng)建。表

作5.修改表使用SQLDeveloper工具修改表的方法很簡單。XSB表創(chuàng)建完成后,在主界面的“表”目錄下可以找到該表。右擊XSB表,選擇“編輯”菜單項,進入“編輯表”窗口,在該窗口中的“列”選項頁右側(cè)單擊按鈕可以添加新列,單擊按鈕可以刪除列,在“列屬性”選項頁的各欄中可以修改列的屬性。表的主鍵列不能直接刪除,要刪除必須先取消主鍵。單擊窗口左側(cè)“主鍵”選項,在窗口右邊的“所選列”欄中會顯示已被設(shè)為主鍵的列,如圖。表

作6.刪除表以刪除XSB表為例,在“表”目錄下右擊XSB表選擇“表”菜單下的“刪除”子菜單項,如圖所示,之后彈出“刪除”對話框,勾選“級聯(lián)約束條件”復(fù)選項,單擊“應(yīng)用”按鈕,彈出表已刪除的提示消息,單擊“確定”按鈕即可。02表數(shù)據(jù)操作1.插入記錄2.修改記錄3.刪除記錄4.撤銷操作表數(shù)據(jù)操作1.插入記錄首先,啟動SQLDeveloper,打開myorcl連接(需要輸入SCOTT用戶口令),展開“表”目錄,選擇“XSB”表,在右邊窗口中選擇“數(shù)據(jù)”選項,切換到表數(shù)據(jù)窗口,如圖。表數(shù)據(jù)操作輸入完一行數(shù)據(jù)后,單擊(提交)按鈕將數(shù)據(jù)保存到數(shù)據(jù)庫中,同時下方的“DataEditor-日志”子窗口列出用于插入數(shù)據(jù)的INSERT語句,如圖。表數(shù)據(jù)操作2.修改記錄修改記錄的方法與插入記錄類似,在“數(shù)據(jù)”選項頁找到要修改的記錄所在行,修改后該行的行號前會出現(xiàn)一個“*”號,如圖所示,更改完成單擊“提交”按鈕保存修改的數(shù)據(jù)。表數(shù)據(jù)操作3.刪除記錄如果要刪除一行記錄,選中該行,單擊(刪除所選行)按鈕,之后該行的行號前會出現(xiàn)一個“-”號,如圖所示,單擊“提交”按鈕確認刪除。表數(shù)據(jù)操作4.撤銷操作如果需要撤銷之前對表中記錄所做的操作,只需在單擊“提交”按鈕之前單擊(回退)按鈕即可,圖3.21所示為撤銷上一步的刪除操作。03執(zhí)行SQL命令執(zhí)行SQL命令啟動SQLDeveloper,單擊工具欄按鈕的右下箭頭選擇“myorcl”選項,界面上將出現(xiàn)命令編輯區(qū),如圖所示,在其中輸入要運行的SQL語句如下:CREATETABLExsb(

學(xué)號 char(6) NOTNULLPRIMARYKEY,

姓名 char(8) NOTNULL,

性別 char(2) DEFAULT'男'NOTNULL,

出生時間date NOTNULL,

專業(yè) char(12) NULL,

總學(xué)分number(2) NULL,

備注 varchar2(200) NULL);執(zhí)行SQL命令這里以執(zhí)行創(chuàng)建表的CREATETABLE命令(詳見第3.3節(jié))為例,操作前須先刪除已創(chuàng)建的XSB表,輸入完命令后單擊窗口上方的或按鈕即可執(zhí)行該SQL語句重新創(chuàng)建XSB表。建表完成后,可往其中錄入樣本數(shù)據(jù)(見附錄A)以備后用,如圖。第3章數(shù)據(jù)庫的創(chuàng)建和操作以命令方式操作數(shù)據(jù)庫(采用SQL*Plus)01創(chuàng)

表創(chuàng)

表在以自己的模式創(chuàng)建表時,必須擁有CREATETABLE系統(tǒng)權(quán)限;在其他用戶模式中創(chuàng)建表時,必須擁有CREATEANYTABLE系統(tǒng)權(quán)限。Oracle創(chuàng)建表使用CREATETABLE語句,其基本的語法格式為:CREATETABLE[用戶方案名.]表名(

列名1數(shù)據(jù)類型[DEFAULT默認值][列約束]

列名2數(shù)據(jù)類型[DEFAULT默認值][列約束] [,…n]

表約束[,…n]) [AS子查詢]相關(guān)參數(shù)說明如下。(1)用戶方案名:用戶方案是指該表所屬的用戶,如果省略則默認為當(dāng)前登錄的用戶。(2)DEFAULT:關(guān)鍵字DEFAULT指定某個列的默認值。默認值的數(shù)據(jù)類型必須與該列的數(shù)據(jù)類型相匹配,列的長度必須足以容納這個表達式值。(3)列約束:定義一個完整性約束作為列定義的一部分,該子句的語法如下。(4)表約束:定義一個完整性約束作為表定義的一部分,有關(guān)完整性約束的內(nèi)容會在第5章詳細介紹。(5)AS子查詢:表示將由子查詢返回的行插入到所創(chuàng)建的表中,子查詢的使用將在第4.2.2節(jié)中具體介紹。[NOT]NULL[UNIQUE][PRIMARYKEY][REFERENCES[用戶方案名.]表名(列名)][CHECK(條件表達式)]創(chuàng)

表【例3.1】

利用CREATETABLE命令為XSCJ數(shù)據(jù)庫建立KCB表,其表結(jié)構(gòu)可參見表。列

名數(shù)據(jù)類型是否可空默

值說

明課程號char(3)×無主鍵課程名char(16)×無

開課學(xué)期number(1)√1只能為1~8學(xué)時number(2)√0

學(xué)分number(1)×0

CREATETABLEkcb(

課程號 char(3) NOTNULLPRIMARYKEY,

課程名 char(16) NOTNULL,

開課學(xué)期 number(1) NULL,

學(xué)時 number(2) NULL,

學(xué)分 number(1) NOTNULL);創(chuàng)

表創(chuàng)建完畢,用命令“DESCRIBEkcb;”可查看KCB表結(jié)構(gòu),如圖。如果表的主鍵由兩個或多個列構(gòu)成,則必須使用PRIMARYKEY關(guān)鍵字定義為表的完整性約束,語法格式為:CREATETABLE表名(

列名1數(shù)據(jù)類型[DEFAULT默認值][列約束][,…n]PRIMARYKEY(列名1,列名2[,...n]))創(chuàng)

表【例3.2】

利用CREATETABLE命令為XSCJ數(shù)據(jù)庫建立CJB表,其表結(jié)構(gòu)參見表。CREATETABLEcjb(

學(xué)號 char(6) NOTNULL,

課程號 char(3) NOTNULL,

成績 number(2) NULL, PRIMARYKEY(學(xué)號,課程號))列

名數(shù)據(jù)類型是否可空默

值說

明學(xué)號char(6)×無主鍵課程號char(3)×無主鍵成績number(2)√無

創(chuàng)

表【例3.3】

創(chuàng)建XSB表中計算機專業(yè)學(xué)生的記錄備份表,表名為XS_JSJ。CREATETABLEXS_JSJ ASSELECT* FROMXSB WHERE專業(yè)='計算機';創(chuàng)建完畢,可用SQLDeveloper查看結(jié)果,如圖所示,可以看到XS_JSJ表中存儲(備份)了XSB表中計算機專業(yè)全部11名學(xué)生的記錄。02修

表修

表修改表結(jié)構(gòu)使用ALTERTABLE語句,語法格式為:ALTERTABLE[用戶方案名.]表名 [ADD(新列名數(shù)據(jù)類型[DEFAULT默認值][列約束],…n)] /*增加新列*/ [MODIFY([列名[數(shù)據(jù)類型][DEFAULT默認值][列約束],…n)] /*修改已有列屬性*/ [DROP子句] /*刪除列或約束條件*/相關(guān)參數(shù)說明如下。(1)ADD子句:用于向表中增加一個新列,新的列定義和創(chuàng)建表時列定義的格式一樣,一次可添加多個列,中間用逗號隔開。(2)MODIFY子句:用于修改表中某列的屬性(數(shù)據(jù)類型、默認值等)。(3)DROP子句:該子句用于從表中刪除指定的字段或約束,語法格式為:DROP{ COLUMN列名

∣PRIMARY[KEY]

∣UNIQUE(列名,…n)

∣CONSTRAINT約束名

∣[CASCADE]}修

表【例3.4】

使用ALTERTABLE語句修改XSCJ數(shù)據(jù)庫中的XS_JSJ表。(1)在XS_JSJ表中增加兩列:獎學(xué)金等級和等級說明。ALTERTABLExs_jsj ADD(獎學(xué)金等級number(1),

等級說明varchar2(40)DEFAULT'獎金1000元');運行結(jié)果如圖。修

表(2)在XS_JSJ表中修改“等級說明”列的默認值。ALTERTABLExs_jsj MODIFY(等級說明DEFAULT'獎金800元');運行語句后,打開SQLDeveloper的“編輯表”窗口查看XS_JSJ表的列屬性,可見“等級說明”列的默認值已改為“獎金800元”,如圖。修

表(3)在XS_JSJ表中刪除“獎學(xué)金等級”和“等級說明”列。ALTERTABLExs_jsj DROPCOLUMN獎學(xué)金等級;ALTERTABLExs_jsj DROPCOLUMN等級說明;運行結(jié)果如圖。修

表(4)為XS_JSJ表添加主鍵。ALTERTABLExs_jsj ADD(CONSTRAINT"PK_JSJ"PRIMARYKEY(學(xué)號));運行語句后,打開SQLDeveloper的“編輯表”窗口,可以看到“學(xué)號”列已被設(shè)為主鍵,如圖。03刪

表刪

表語法格式為:DROPTABLE[用戶方案名.]表名如要刪除表XS_JSJ,使用如下語句:DROPTABLExs_jsj;執(zhí)行結(jié)果如圖。04插入記錄1.INSERT語句2.MERGE語句插入記錄1.INSERT語句插入記錄一般使用INSERT語句,語法格式為:INSERTINTO表名[(列名1,列名2,…n)]VALUES(列值1,列值2,…n)相關(guān)參數(shù)說明如下。(1)在插入時,列值表必須與列名表順序和數(shù)據(jù)類型一致。(2)VALUES中描述的值可以是一個常量、變量或一個表達式。(3)如果列值為空,則值必須設(shè)置為NULL。(4)在對表進行插入行操作時,若新插入的行中所有可取空值的列值均取空值,則可以在INSERT語句中通過列表指出插入的行值中所包含非空的列,而在VALUES中只要給出這些列的值即可。插入記錄【例3.5】

向XSCJ數(shù)據(jù)庫的XSB表中插入一行: 151114周何駿

計算機

男1998-09-2590可以使用SQL語句:INSERTINTOxsb(學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分) VALUES('151114','周何駿','男',TO_DATE('19980925','YYYYMMDD'),'計算機',90);或者執(zhí)行下列命令:INSERTINTOxsb VALUES('151114','周何駿','男','1998-09-25','計算機',90,NULL);然后再運行COMMIT命令:COMMIT;插入記錄最后,使用SELECT語句查詢是否添加了該行記錄:SELECT學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分 FROMxsb WHERE學(xué)號='151114';運行結(jié)果如圖。插入記錄【例3.6】向具有默認值字段的表中插入記錄。創(chuàng)建一個具有默認值字段的表test:CREATETABLEtest(

姓名 char(20) NOTNULL,

專業(yè) varchar2(30) DEFAULT('計算機'),

年級 number NOTNULL);用INSERT向test表中插入一條記錄:INSERTINTOtest(姓名,年級)VALUES('周何駿',3);運行結(jié)果如圖。插入記錄利用INSERT語句還可以把一個表中的部分?jǐn)?shù)據(jù)插入到另一個表中,但結(jié)果集中每行數(shù)據(jù)的字段數(shù)、字段的數(shù)據(jù)類型都要與被操作的表完全一致,語法格式為:INSERTINTO表名

結(jié)果集其中,結(jié)果集是一個由SELECT語句查詢所得到的新表。利用該參數(shù),可把一個表的部分?jǐn)?shù)據(jù)插入指定的另一個表中?!纠?.7】

用CREATE語句建立XSB1表:CREATETABLExsb1( num char(6) NOTNULL, name char(8) NOTNULL, Speciality char(12) NULL);插入記錄然后用INSERT語句向XSB1表中插入數(shù)據(jù):INSERTINTOxsb1 SELECT學(xué)號,姓名,專業(yè) FROMxsb WHERE姓名='王林';這條INSERT語句將XSB表中姓名為“王林”的學(xué)號、姓名和專業(yè)的值插入到XSB1表的各行中。運行結(jié)果如圖。插入記錄2.MERGE語句在Oracle11g數(shù)據(jù)庫中有MERGE語句,用于根據(jù)與源表連接的結(jié)果,對目標(biāo)表執(zhí)行插入、更新或刪除操作。如根據(jù)在一個表中找到的差異在另一個表中進行插入、更新或刪除行的操作,這種方法可以對兩個表進行信息同步,其語法格式為:MERGEINTO目標(biāo)表名 USING源表名ON(條件表達式) WHENMATCHEDTHEN{UPDATESET…|DELETE…} WHENNOTMATCHEDTHENINSERT(…)VALUES(…)相關(guān)參數(shù)說明如下。(1)USING子句:指定用于更新的源數(shù)據(jù)表。(2)ON子句:指定在源表與目標(biāo)表進行連接時所遵循的條件。(3)WHENMATCHED子句:表示在應(yīng)用ON子句的條件后,目標(biāo)表存在與源表匹配的行時,對這些行在THEN子句中指定修改或刪除的操作。(4)WHENNOTMATCHED子句:指定對于源表中滿足了ON子句中條件的每一行,如果該行與目標(biāo)表中的行不匹配,則向目標(biāo)表中插入這行數(shù)據(jù)。插入記錄【例3.8】創(chuàng)建表a,并將XSB表中的數(shù)據(jù)添加至該表中。創(chuàng)建表a的語句為:CREATETABLEa( XH char(6) NOTNULLPRIMARYKEY, XM char(8) NOTNULL, XB char(2) NOTNULL, CSSJ date NOTNULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar(200) NULL);插入記錄進行信息同步使用的語句為:MERGEINTOa USINGxsbON(a.xh=xsb.學(xué)號) WHENMATCHED THENUPDATESETa.xm=xsb.姓名,a.xb=xsb.性別,a.cssj=xsb.出生時間, a.zy=xsb.專業(yè),a.zxf=xsb.總學(xué)分,a.bz=xsb.備注 WHENNOTMATCHED THENINSERTVALUES(XSB.學(xué)號,xsb.姓名,xsb.性別,xsb.出生時間,xsb.專業(yè), xsb.總學(xué)分,xsb.備注);運行上述語句后查看表a中的數(shù)據(jù),如圖所示,表a中已經(jīng)添加了XSB表中的全部數(shù)據(jù)。05刪除記錄1.DELETE語句2.TRANCATETABLE語句刪除記錄1.DELETE語句語法格式為:DELETEFROM表名 [WHERE條件表達式]該語句的功能為從指定的表中刪除滿足條件的行,若省略WHERE子句,則表示刪除所有行?!纠?.9】將XSCJ數(shù)據(jù)庫的表a中ZXF(總學(xué)分)值小于50的行刪除,使用的SQL語句為:DELETEFROMa WHEREzxf<50;運行結(jié)果如圖所示,可以看到,此時表a中只剩下12條ZXF值大于或等于50的學(xué)生記錄,所有小于50的記錄都已被刪除。刪除記錄2.TRANCATETABLE語句如果確實要刪除一個大表里的全部記錄,可以使用TRUNCATETABLE語句,它能釋放占用的數(shù)據(jù)塊表空間,且此操作不可回退。其語法格式為:TRUNCATETABLE表名由于TRUNCATETABLE語句刪除表中的所有數(shù)據(jù)且不能恢復(fù),所以使用時要謹(jǐn)慎。使用TRUNCATETABLE刪除了指定表中的所有行,但表的結(jié)構(gòu)及其列、約束、索引等保持不變。06修改記錄修改記錄UPDATE語句可以用來修改表中的數(shù)據(jù)行,其語法格式為:UPDATE表名 SET列名={新值|表達式}[,…n] [WHERE條件表達式]該語句在指定表的滿足條件記錄中,由SET指定列值設(shè)置為SET的新值。【例3.10】

將XSCJ數(shù)據(jù)庫的XSB表中學(xué)號為“151114”的學(xué)生備注列值設(shè)置為“輔修計算機專業(yè)”,使用的SQL語句為:UPDATExsb SET備注='輔修計算機專業(yè)' WHERE學(xué)號='151114';修改記錄在SQLDeveloper中查詢XSB表的數(shù)據(jù),可以發(fā)現(xiàn)表中學(xué)號為“151114”行的備注字段值已設(shè)置為需要的內(nèi)容,如圖所示。修改記錄【例3.11】

將表a中所有學(xué)生的ZXF(總學(xué)分)都增加5分。UPDATEa SETzxf=zxf+5;運行結(jié)果如圖。修改記錄【例3.12】

將XSB表中姓名為“周何駿”的專業(yè)改為“通信工程”,學(xué)號改為“151242”。UPDATExsb SET專業(yè)='通信工程',

學(xué)號='151242' WHERE姓名='周何駿';運行結(jié)果如圖。第4章數(shù)據(jù)庫的查詢和視圖選擇運算、投影運算和連接運算01選擇運算選擇運算該運算按給定的條件,從表中選出滿足條件的行形成一個新表,作為運算結(jié)果?!纠?.1】

學(xué)生表如表所示。學(xué)

號姓

名性

別平均成績154215王

敏男74154211李小琳女82154210胡小平男88若要在學(xué)生表中找出性別為女且平均成績在80分以上的行形成一個新表,則該選擇運算的結(jié)果如表所示。學(xué)

號姓

名性

別平均成績154211李小琳女8202投影運算投影運算投影運算(Projection)也是單目運算。它只選擇表中指定的列,這樣在查詢結(jié)果時就可減少顯示的數(shù)據(jù)量,提高了查詢的性能。【例4.2】

若在上表中對“姓名”和“平均成績”進行投影運算,該查詢可得到如表所示的新表。姓

名平均成績王

敏74李小琳82胡小平8803連接運算連接運算連接運算(JOIN)是把兩個表中的行按照給定的條件進行拼接,從而形成新表。【例4.3】

若A表和B表分別如表所示。連接運算條件為T1=T3,則連接運算后的結(jié)果如表。T1T21A6F2BT3T4T513M20NA表B表T1T2T3T4T51A13M2B20N連接運算數(shù)據(jù)庫應(yīng)用中常用的是“自然連接”運算。它要求兩個表有共同屬性(列),自然連接運算的結(jié)果表是在參與操作兩個表的共同屬性上進行等值連接運算后,再去除重復(fù)的屬性后所得的新表?!纠?.4】

若A表和B表分別如表所示。自然連接運算后的新表C如表。T1T2T310A1B15A1C220D2C2T1T4T5T61100A1D11002B2C1200A2D1510A2C2A表B表T1T2T3T4T5T65A1C210A2C220D2C20A2D1C表第4章數(shù)據(jù)庫的查詢和視圖數(shù)據(jù)庫的查詢數(shù)據(jù)庫的查詢SQL的SELECT語句可以實現(xiàn)對表的選擇、投影及連接操作,其功能十分強大。SELECT語句比較復(fù)雜,其主要的子句語法格式為:SELECT列 /*指定要選擇的列及其限定*/ FROM表或視圖 /*FROM子句,指定表或視圖*/ [WHERE條件表達式] /*WHERE子句,指定查詢條件*/ [GROUPBY分組表達式] /*GROUPBY子句,指定分組表達式*/ [HAVING分組條件表達式] /*HAVING子句,指定分組統(tǒng)計條件*/ [ORDERBY排序表達式[ASC|DESC]] /*ORDER子句,指定排序表達式和順序*/01選

列1.選擇一個表中指定的列2.修改查詢結(jié)果中的列標(biāo)題3.計算列值4.消除結(jié)果集中的重復(fù)行選

列選擇表中列組成的結(jié)果表,語法格式為:SELECT[ALL|DISTINCT]列名列表其中,列名列表指出了結(jié)果的形式,其主要格式為:{* /*選擇當(dāng)前表或視圖的所有列*/ |{表名|視圖}.* /*選擇指定的表或視圖的所有列*/ |{列名|表達式} [[AS]列別名] /*選擇指定的列*/ |列標(biāo)題=列名表達式 /*選擇指定列并更改列標(biāo)題*/}[,…n]1.選擇一個表中指定的列使用SELECT語句選擇一個表中的某些列,各列名之間要以逗號分隔,其語法格式為:SELECT列名1[,列名2[,…n]] FROM表名 [WHERE條件表達式]選

列【例4.5】

查詢XSCJ數(shù)據(jù)庫的XSB表中各個學(xué)生的學(xué)號、姓名和總學(xué)分。在SQLDeveloper中myorcl連接的命令編輯區(qū)輸入語句如下:SELECT學(xué)號,姓名,總學(xué)分 FROMxsb;將光標(biāo)定位到語句第一行,單擊“執(zhí)行”按鈕,結(jié)果如圖所示。執(zhí)行完后“結(jié)果”選項頁中將列出所有結(jié)果數(shù)據(jù)。選

列【例4.6】

查詢XSB表中總學(xué)分大于50分的學(xué)生的學(xué)號、姓名和總學(xué)分。SELECT學(xué)號,姓名,總學(xué)分 FROMxsb WHERE總學(xué)分>50;執(zhí)行結(jié)果如圖。【例4.7】

查詢XSB表中的所有列。SELECT* FROMxsb;該語句等價于:SELECT學(xué)號姓名,性別,出生時間,專業(yè),總學(xué)分,備注 FROMxsb;選

列2.修改查詢結(jié)果中的列標(biāo)題如果希望查詢結(jié)果中的某些列或所有列顯示時使用自己選擇的列標(biāo)題,可以在列名之后使用AS子句指定一個列別名來替代查詢結(jié)果的列標(biāo)題名?!纠?.8】

查詢XSB表中計算機專業(yè)學(xué)生的學(xué)號、姓名和總學(xué)分,將結(jié)果中各列的標(biāo)題分別指定為num、name和score。SELECT學(xué)號ASnum,姓名ASname,總學(xué)分ASscore FROMxsb WHERE專業(yè)='計算機';也可以省略AS關(guān)鍵字,寫成:SELECT學(xué)號num,姓名name,總學(xué)分score FROMxsb WHERE專業(yè)='計算機';執(zhí)行結(jié)果如圖。選

列3.計算列值使用SELECT對列進行查詢時,在結(jié)果中可以輸出對列值計算后的值,即SELECT語句可使用表達式作為結(jié)果,其格式為:SELECT表達式[,表達式]【例4.9】

創(chuàng)建產(chǎn)品CP表,其結(jié)構(gòu)如表。列

名數(shù)據(jù)類型是否允許為空值默

值說

明產(chǎn)品編號char(8)×無主鍵產(chǎn)品名稱char(12)×無

價格number(8)×無

庫存量number(4)√無

列設(shè)CP表中已有如表所示的數(shù)據(jù)。產(chǎn)品編號產(chǎn)品名稱價

格庫

量10001100冰箱A_1001500.0050010002120冰箱A_2001850.0020020011001空調(diào)K_12002680.0030020012000空調(diào)K_21003200.00100030003001冰柜L_1505000.0010010001200冰箱B_2001600.00120010001102冰箱C_2101890.0060030004100冰柜L_2104800.0020020001002空調(diào)K_30013800.0028020011600空調(diào)K_16004200.001500選

列下列語句將列出產(chǎn)品名稱和產(chǎn)品總值為:SELECT產(chǎn)品名稱,價格*庫存量AS產(chǎn)品總值 FROMcp;執(zhí)行結(jié)果如圖。選

列4.消除結(jié)果集中的重復(fù)行對表只選擇某些列時,可能會出現(xiàn)重復(fù)行。例如,若對XSCJ數(shù)據(jù)庫的XSB表只選擇專業(yè)和總學(xué)分,就會出現(xiàn)多行重復(fù)的情況。可以使用DISTINCT關(guān)鍵字消除結(jié)果集中的重復(fù)行,其格式為:SELECTDISTINCT列名[,列名…]關(guān)鍵字DISTINCT的含義是對結(jié)果集中的重復(fù)行只選擇一個,保證行的唯一性?!纠?.10】

對XSCJ數(shù)據(jù)庫的XSB表只選擇專業(yè)和總學(xué)分,消除結(jié)果集中的重復(fù)行。SELECTDISTINCT專業(yè),總學(xué)分 FROMxsb;執(zhí)行結(jié)果如圖。02選

行1.表達式比較2.模式匹配3.范圍比較4.空值比較5.子查詢選

行WHERE子句必須緊跟FROM子句之后,其基本格式為:WHERE條件表達式其中,條件表達式為查詢條件,其格式為:條件表達式::= {[NOT]判定運算|(條件表達式)}[{AND|OR}[NOT]{判定運算|(條件表達式)}] }[,…n]其中,判定運算的結(jié)果為TRUE、FALSE或UNKNOWN,經(jīng)常用到的格式為:判定運算::={表達式1{=|<|<=|>|>=|<>|!=}表達式2 /*比較運算*/ |字符串表達式1[NOT]LIKE字符串表達式2[ESCAPE'轉(zhuǎn)義字符’] /*字符串模式匹配*/ |表達式[NOT]BETWEEN表達式1AND表達式2 /*指定范圍*/ |表達式IS[NOT]NULL /*是否空值判斷*/ |表達式[NOT]IN(子查詢|表達式[,…n]) /*IN子句*/ |EXIST(子查詢) /*EXIST子查詢*/}選

行1.表達式比較比較運算符用于比較兩個表達式值,共有7個,分別是:=(等于)、<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、<>(不等于)、!=(不等于)。比較運算的格式為:表達式1{=|<|<=|>|>=|<>|!=}<表達式2當(dāng)兩個表達式值均不為空值(NULL)時,比較運算返回邏輯值TRUE(真)或FALSE(假),而當(dāng)兩個表達式值中有一個為空值或都為空值時,比較運算將返回UNKNOWN?!纠?.11】

比較運算符的應(yīng)用。①查詢CP表中庫存量在500個以上的產(chǎn)品情況。SELECT* FROMcp WHERE庫存量>500;執(zhí)行結(jié)果如圖。選

行②查詢XSB表中通信工程專業(yè)總成績大于或等于44分的學(xué)生情況。SELECT* FROMxsb WHERE專業(yè)='通信工程'AND總學(xué)分>=44;執(zhí)行結(jié)果如圖。選

行2.模式匹配LIKE謂詞用于指出一個字符串是否與指定的字符串相匹配,其運算對象可以是char類型、varchar2類型和date類型的數(shù)據(jù),返回邏輯值TRUE或FALSE。LIKE謂詞表達式的格式為:字符串表達式1[NOT]LIKE字符串表達式2[ESCAPE'轉(zhuǎn)義字符']在使用LIKE時有兩個通配符:“%”和“_”。若使用帶“%”通配符的LIKE進行字符串比較,模式字符串中的所有字符都有意義,包括起始或尾隨空格?!纠?.12】

查詢CP表中產(chǎn)品名含有“冰箱”的產(chǎn)品情況。SELECT* FROMcp WHERE產(chǎn)品名稱LIKE'%冰箱%';執(zhí)行結(jié)果如圖。選

行【例4.13】

查詢XSB表中姓“王”且單名的學(xué)生情況。SELECT* FROMxsb WHERE姓名LIKE'王_';執(zhí)行結(jié)果如圖。選

行3.范圍比較用于范圍比較的關(guān)鍵字有兩個:BETWEEN和IN。當(dāng)要查詢的條件是某個值的范圍時,可以使用BETWEEN關(guān)鍵字。BETWEEN關(guān)鍵字指出查詢范圍,其格式為:表達式[NOT]BETWEEN表達式1AND表達式2當(dāng)不使用NOT時,若表達式的值在表達式1與表達式2之間(包括這兩個值),則返回TRUE,否則返回FALSE;當(dāng)使用NOT時,返回值剛好相反?!纠?.14】指定查詢的范圍。①查詢CP表中價格在2000~4000元的產(chǎn)品情況。SELECT* FROMcp WHERE價格BETWEEN2000AND4000;執(zhí)行結(jié)果如圖。選

行②查詢XSB表中不是1996年出生的學(xué)生情況。SELECT* FROMxsb WHERE出生時間NOTBETWEENTO_DATE('19960101','YYYYMMDD') AND TO_DATE('19961231','YYYYMMDD');執(zhí)行結(jié)果如圖。選

行使用IN關(guān)鍵字可以指定一個值表,值表中列出了所有可能的值,當(dāng)表達式與值表中的任意一個值匹配時,即返回TRUE,否則返回FALSE。使用IN關(guān)鍵字指定值表的格式為:表達式IN(表達式[,…n])【例4.15】

查詢CP表中庫存量為“200”、“300”和“500”的產(chǎn)品情況。SELECT* FROMcp WHERE庫存量IN(200,300,500);該語句與下列語句等價:SELECT* FROMcp WHERE庫存量=200OR庫存量=300OR庫存量=500;執(zhí)行結(jié)果如圖。選

行4.空值比較當(dāng)需要判定一個表達式的值是否為空值時,可使用ISNULL關(guān)鍵字,其格式為:表達式IS[NOT]NULL當(dāng)不使用NOT時,若表達式的值為空值時,則返回TRUE,否則返回FALSE;當(dāng)使用NOT時,結(jié)果剛好相反?!纠?.16】

查詢XSB表中擁有備注信息的學(xué)生情況。SELECT*FROMxsbWHERE備注ISNOTNULL;執(zhí)行結(jié)果如圖。選

行5.子查詢(1)IN子查詢。IN子查詢用于進行一個給定值是否在子查詢結(jié)果集中的判斷,其格式為:表達式[NOT]IN(子查詢)當(dāng)表達式與子查詢的結(jié)果表中的某個值相等時,IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反?!纠?.17】

在XSCJ數(shù)據(jù)庫中查找選修了課程號為102課程的學(xué)生情況:SELECT* FROMxsb WHERE學(xué)號IN (SELECT學(xué)號FROMcjbWHERE課程號='102');選

行在執(zhí)行包含子查詢的SELECT語句時,系統(tǒng)先執(zhí)行子查詢,產(chǎn)生一個結(jié)果表,再執(zhí)行查詢。本例中,先執(zhí)行子查詢:SELECT學(xué)號FROMcjbWHERE課程號='102';得到一個只含有學(xué)號列的表,CJB中課程名列值為102的行在結(jié)果表中都有一行。再執(zhí)行外查詢,若XSB表中某行的學(xué)號列值等于子查詢結(jié)果表中的任一個值,則該行就被選擇。執(zhí)行結(jié)果如圖。選

行【例4.18】

查找未選修“離散數(shù)學(xué)”課程的學(xué)生情況。SELECT學(xué)號,姓名,專業(yè),總學(xué)分 FROMxsb WHERE學(xué)號NOTIN (SELECT學(xué)號 FROMcjb WHERE課程號IN (SELECT課程號 FROMkcb WHERE課程名='離散數(shù)學(xué)' ) );執(zhí)行結(jié)果如圖。選

行(2)比較子查詢。這種子查詢可以認為是IN子查詢的擴展,它使表達式的值與子查詢的結(jié)果進行比較運算,其格式為:表達式{<|<=|=|>|>=|!=|<>}{ALL|SOME|ANY}(子查詢)其中,ALL、SOME和ANY關(guān)鍵字說明對比較運算的限制。ALL指定表達式要與子查詢結(jié)果集中的每個值都進行比較,當(dāng)表達式與每個值都滿足比較的關(guān)系時,才返回TRUE,否則返回FALSE;SOME或ANY表示表達式只要與子查詢結(jié)果集中的某個值滿足比較的關(guān)系時,就返回TRUE,否則返回FALSE?!纠?.19】

查找比所有計算機系學(xué)生年齡都大的學(xué)生。SELECT* FROMxsb WHERE出生時間<ALL (SELECT出生時間 FROMxsb WHERE專業(yè)='計算機' );執(zhí)行結(jié)果如圖。選

行【例4.20】

查找課程號206的成績不低于課程號101的最低成績的學(xué)生學(xué)號、姓名。SELECT學(xué)號,姓名 FROMxsb WHERE學(xué)號IN

(SELECT學(xué)號

FROMcjb

WHERE課程號='206'AND成績>=ANY

(SELECT成績

FROMcjb

WHERE課程號='101' ) );執(zhí)行結(jié)果如圖。選

行(3)EXISTS子查詢。EXISTS謂詞用于測試子查詢的結(jié)果是否為空表,若子查詢的結(jié)果集不為空,則EXISTS返回TRUE,否則返回FALSE。EXISTS還可與NOT結(jié)合使用,即NOTEXISTS,它的返回值與EXIST剛好相反,其格式為:[NOT]EXISTS(子查詢)【例4.21】

查找選修課程號206的學(xué)生姓名。SELECT姓名 FROMxsb WHEREEXISTS (SELECT* FROMcjb WHERE學(xué)號=XSB.學(xué)號AND課程號='206' );執(zhí)行結(jié)果如圖。選

行【例4.22】

查找選修了全部課程的學(xué)生的姓名。SELECT姓名 FROMxsb WHERENOTEXISTS (SELECT* FROMkcb WHERENOTEXISTS (SELECT* FROMcjb WHERE學(xué)號=XSB.學(xué)號AND課程號=KCB.課程號 ) );03查詢對象查詢對象【例4.23】

查找與151101號學(xué)生所選修課程一致的學(xué)生學(xué)號。本例即要查找這樣的學(xué)號y,對所有的課程號x,若151101號學(xué)生選修了該課,那么y也選修了該課。SELECTDISTINCT學(xué)號 FROMcjb成績1 WHERENOTEXISTS (SELECT* FROMcjb成績2 WHERE成績2.學(xué)號='151101'ANDNOTEXISTS (SELECT* FROMcjb成績3 WHERE成績3.學(xué)號=成績1.學(xué)號 AND成績3.課程號=成績2.課程號 ) );本例指定SELECT語句查詢的對象是表,執(zhí)行結(jié)果如圖。查詢對象【例4.24】

在XSB表中查找1997年1月1日以前出生的學(xué)生姓名和專業(yè)。SELECT姓名,專業(yè) FROM(SELECT*FROMxsb WHERE出生時間<TO_DATE('19970101','YYYYMMDD'));執(zhí)行結(jié)果如圖。04連

接1.連接謂詞2.以JOIN關(guān)鍵字指定的連接連

接1.連接謂詞在SELECT語句的WHERE子句中,使用比較運算符給出的連接條件對表進行連接,將這種表示形式稱為連接謂詞?!纠?.25】

查找XSCJ數(shù)據(jù)庫每個學(xué)生及其選修的課程情況。SELECTXSB.*,cjb.* FROMXSB,cjb WHEREXSB.學(xué)號=cjb.學(xué)號;結(jié)果表將包含XSB表和CJB表的所有行和列。【例4.26】

自然連接查詢。SELECTXSB.*,cjb.課程號,cjb.成績 FROMxsb,cjb WHERExsb.學(xué)號=cjb.學(xué)號;若選擇的字段名在各個表中是唯一的,則可以省略字段名前的表名。如本例的SELECT子句也可寫為:SELECTxsb.*,課程號,成績 FROMxsb,cjb WHERExsb.學(xué)號=cjb.學(xué)號;連

接【例4.27】

查找選修課程號206且成績在80分以上的學(xué)生姓名及成績。SELECT姓名,成績 FROMxsb,cjb WHERExsb.學(xué)號=cjb.學(xué)號AND課程號='206'AND成績>=80;執(zhí)行結(jié)果如圖。連

接【例4.28】

查找選修課程成績在90分以上的學(xué)生學(xué)號、姓名、課程名及成績。SELECTxsb.學(xué)號,姓名,課程名,成績 FROMxsb,kcb,cjb WHERExsb.學(xué)號=cjb.學(xué)號ANDkcb.課程號=cjb.課程號 AND成績>=90;執(zhí)行結(jié)果如圖。連

接2.以JOIN關(guān)鍵字指定的連接Oracle系統(tǒng)的PL/SQL擴展了以JOIN關(guān)鍵字指定連接的表示方式,使表的連接運算能力有了增強。連接表的格式為:表名連接類型表名ON條件表達式|表名CROSSJOIN表名|連接表其連接類型的格式為:連接類型::= [INNER|{LEFT|RIGHT|FULL}[OUTER]CROSSJOIN其中,INNER表示內(nèi)連接,OUTER表示外連接,CROSSJOIN表示交叉連接。連

接(1)內(nèi)連接。內(nèi)連接按照ON所指定的連接條件合并兩個表,且返回滿足條件的行?!纠?.29】

查看XSCJ數(shù)據(jù)庫中每個學(xué)生及其選修的課程情況。SELECT* FROMxsbINNERJOINcjb ONxsb.學(xué)號=cjb.學(xué)號;結(jié)果表將包含XSB表和CJB表的所有字段(不去除重復(fù)學(xué)號字段)。內(nèi)連接是系統(tǒng)默認的,故可省去INNER關(guān)鍵字。使用內(nèi)連接后仍可使用WHERE子句指定條件?!纠?.30】

用FROM的JOIN關(guān)鍵字表達下列查詢:查找選修課程號206且成績在80分以上的學(xué)生姓名及成績。SELECT姓名,成績 FROMxsbJOINcjbONxsb.學(xué)號=CJB.學(xué)號 WHERE課程號='206'AND成績>=80;執(zhí)行結(jié)果見圖。連

接【例4.31】

用FROM的JOIN關(guān)鍵字表達下列查詢:查找選修課成績在90分以上的學(xué)生學(xué)號、姓名、課程名及成績。SELECTxsb.學(xué)號,姓名,課程名,成績 FROMxsb JOINcjbJOINkcbONcjb.課程號=kcb.課程號 ONxsb.學(xué)號=cjb.學(xué)號 WHERE成績>=90;執(zhí)行結(jié)果見圖。連

接【例4.32】

查找不同課程成績相同的學(xué)生學(xué)號、課程號和成績。SELECTa.學(xué)號,a.課程號,b.課程號,a.成績 FROMcjbaJOINcjbb ONa.成績=b.成績ANDa.學(xué)號=b.學(xué)號ANDa.課程號!=b.課程號;執(zhí)行結(jié)果如圖。連

接(2)外連接。外連接的結(jié)果表不但包含滿足連接條件的行,還包括相應(yīng)表中的所有行。外連接包括以下3種:①左外連接(LEFTOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行,還包括左表的所有行;②右外連接(RIGHTOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行,還包括右表的所有行;③完全外連接(FULLOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行,還包括兩個表的所有行。連

接【例4.33】

查找所有學(xué)生情況及其選修的課程號,即使學(xué)生未選修任何課,也要包括其情況。SELECTXSB.*,課程號 FROMxsbLEFTOUTERJOINcjbONxsb.學(xué)號=cjb.學(xué)號;【例4.34】

查找被選修的課程情況和所有開設(shè)的課程名。SELECTcjb.*,課程名 FROMcjbRIGHTJOINkcbONcjb.課程號=kcb.課程號;本例執(zhí)行時,若某課程未被選修,則結(jié)果表中相應(yīng)行的學(xué)號、課程號和成績字段值均為NULL。連

接(3)交叉連接。交叉連接實際上是將兩個表進行笛卡兒積運算,結(jié)果表是由第1個表的每一行與第2個表的每一行拼接后形成的表,因此其行數(shù)等于兩個表的行數(shù)之積?!纠?.35】

列出學(xué)生所有可能的選課情況。SELECT學(xué)號,姓名,課程號,課程名 FROMxsbCROSSJOINkcb;05匯

總1.統(tǒng)計函數(shù)2.GROUPBY子句3.HAVING子句匯

總1.統(tǒng)計函數(shù)(1)SUM函數(shù)和AVG函數(shù)。這兩個函數(shù)分別用于求表達式中所有值項的總和與平均值,語法格式為:SUM/AVG([ALL|DISTINCT]表達式)其中,表達式還可以是常量、列、函數(shù)。SUM函數(shù)和AVG函數(shù)只能對數(shù)值型數(shù)據(jù)進行計算。ALL表示對所有值進行運算,DISTINCT表示去除重復(fù)值,默認為ALL?!纠?.36】

求選修課程101學(xué)生的平均成績。SELECTAVG(成績)AS課程101平均成績 FROMcjb WHERE課程號='101';執(zhí)行結(jié)果如圖。匯

總(2)MAX函數(shù)和MIN函數(shù)。MAX函數(shù)和MIN函數(shù)分別用于求表達式中所有值項的最大值與最小值,語法格式為:MAX/MIN([ALL|DISTINCT]表達式)其中,表達式的數(shù)據(jù)類型可以是數(shù)字、字符和時間日期類型。ALL表示對所有值進行運算,DISTINCT表示去除重復(fù)值,默認為ALL?!纠?.37】

求選修課程101學(xué)生的最高分和最低分。SELECTMAX(成績)AS課程101的最高分,MIN(成績)AS課程101的最低分 FROMcjb WHERE課程號='101';執(zhí)行結(jié)果如圖。匯

總(3)COUNT函數(shù)。COUNT函數(shù)用于統(tǒng)計組中滿足條件的行數(shù)或總行數(shù),語法格式為:COUNT({[ALL|DISTINCT]表達式}|*)其中,ALL表示對所有值進行運算,DISTINCT表示去除重復(fù)值,默認為ALL?!纠?.38】

學(xué)生數(shù)統(tǒng)計。①求學(xué)生的總?cè)藬?shù)。SELECTCOUNT(*)AS學(xué)生總數(shù) FROMxsb;COUNT(*)不需要任何參數(shù)。執(zhí)行結(jié)果如圖。②求選修了課程的學(xué)生總?cè)藬?shù)。SELECTCOUNT(DISTINCT學(xué)號)AS選修了課程的總?cè)藬?shù) FROMcjb;執(zhí)行結(jié)果如圖。匯

總③統(tǒng)計“離散數(shù)學(xué)”課程成績在85分以上的人數(shù)。SELECTCOUNT(成績)AS離散數(shù)學(xué)85分以上的人數(shù) FROMcjb WHERE成績>=85AND課程號= (SELECT課程號 FROMkcb WHERE課程名='離散數(shù)學(xué)' );執(zhí)行結(jié)果如圖。匯

總2.GROUPBY子句GROUPBY子句用于對表或視圖中的數(shù)據(jù)按字段分組,語法格式為:GROUPBY[ALL]分組表達式[,…n]分組表達式通常包含字段名。指定ALL將顯示所有組。【例4.39】

將XSB表的各專業(yè)進行輸出。SELECT專業(yè) FROMxsb GROUPBY專業(yè);執(zhí)行結(jié)果如圖。匯

總【例4.40】

求XSB表中各專業(yè)的學(xué)生數(shù)。SELECT專業(yè),COUNT(*)AS學(xué)生數(shù) FROMxsb GROUPBY專業(yè);執(zhí)行結(jié)果如圖?!纠?.41】

求被選修各門課程的平均成績和選修該課程的人數(shù)。SELECT課程號,AVG(成績)AS平均成績,COUNT(學(xué)號)AS選修人數(shù) FROMcjb GROUPBY課程號;執(zhí)行結(jié)果如圖。匯

總3.HAVING子句HAVING子句的語法格式為:[HAVING條件表達式]HAVING子句的查詢條件與WHERE子句類似,不同的是HAVING子句可以使用統(tǒng)計函數(shù),而WHERE子句不可以。【例4.42】

查找XSCJ數(shù)據(jù)庫中平均成績在85分以上的學(xué)生學(xué)號和平均成績。SELECT學(xué)號,AVG(成績)AS平均成績 FROMcjb GROUPBY學(xué)號 HAVINGAVG(成績)>=85;執(zhí)行結(jié)果如圖。匯

總【例4.43】

查找選修課程超過兩門且成績都在80分以上的學(xué)生學(xué)號。SELECT學(xué)號 FROMcjb WHERE成績>=80 GROUPBY學(xué)號 HAVINGCOUNT(*)>2;執(zhí)行結(jié)果如圖。查詢將CJB表中成績大于或等于80分的記錄按學(xué)號分組,對每組記錄計數(shù),選出記錄數(shù)大于2的各組學(xué)號值,并形成結(jié)果表。匯

總【例4.44】

查找通信工程專業(yè)平均成績在85分以上的學(xué)生學(xué)號和平均成績。SELECT學(xué)號,AVG(成績)AS平均成績 FROMcjb WHERE學(xué)號IN (SELECT學(xué)號 FROMxsb WHERE專業(yè)='通信工程' ) GROUPBY學(xué)號 HAVINGAVG(成績)>=85;執(zhí)行結(jié)果如圖。06排

序排

序在應(yīng)用中經(jīng)常要對查詢的結(jié)果進行排序輸出,如學(xué)生成績由高到低排序。在SELECT語句中,使用ORDERBY子句對查詢結(jié)果進行排序,其語法格式為:[ORDERBY{排序表達式[ASC|DESC]}[,…n]其中,排序表達式可以是列名、表達式或一個正整數(shù),當(dāng)表達式是一個正整數(shù)時,表示按表中的位置列排序?!纠?.45】

將通信工程專業(yè)的學(xué)生按出生時間先后排序。SELECT* FROMxsb WHERE專業(yè)='通信工程' ORDERBY出生時間;執(zhí)行結(jié)果如圖。排

序【例4.46】

將計算機專業(yè)學(xué)生的“計算機基礎(chǔ)”課程成績按降序排列。SELECT姓名,成績 FROMxsb,kcb,cjb WHEREXSB.學(xué)號=cjb.學(xué)號ANDcjb.課程號=kcb.課程號 AND課程名='計算機基礎(chǔ)'AND專業(yè)='計算機' ORDERBY成績DESC;執(zhí)行結(jié)果如圖。07合

并合

并使用UNION子句可以將兩個或多個SELECT查詢的結(jié)果合并成一個結(jié)果集,其語法格式為:SELECT查詢語句1UNION[ALL]SELECT查詢語句2[UNION[ALL]SELECT查詢語句3[,…n]]使用UNION組合兩個查詢結(jié)果集的基本規(guī)則如下。(1)所有查詢中列數(shù)和列的順序必須相同。(2)數(shù)據(jù)類型必須兼容。其中關(guān)鍵字ALL表示合并的結(jié)果中包括所有行,不去除重復(fù)行。合

并【例4.47】

查找總學(xué)分>50分及學(xué)號>151218的學(xué)生信息。SELECT* FROMxsb WHERE總學(xué)分>50 UNION SELECT*

FROMxsb

WHERE學(xué)號>'151218';執(zhí)行結(jié)果如圖。第4章數(shù)據(jù)庫的查詢和視圖數(shù)據(jù)庫視圖01視圖的概念視圖的概念視圖可以由以下任意一項組成:一個基本表的任意子集;兩個或以上基本表的合集;兩個或以上基本表的交集;對一個或多個基本表運算的結(jié)果集合;另一個視圖的子集。視圖一經(jīng)定義,就可以像表一樣被查詢、修改、刪除和更新。使用視圖的優(yōu)點如下。(1)集中數(shù)據(jù)。當(dāng)用戶所需數(shù)據(jù)分散于多個表時,定義視圖可將它們集中在一起,以方便數(shù)據(jù)的查詢和處理。(2)屏蔽數(shù)據(jù)庫的復(fù)雜性。用戶不必了解復(fù)雜的數(shù)據(jù)庫中的表結(jié)構(gòu),并且數(shù)據(jù)庫中表的更改也不影響用戶對數(shù)據(jù)庫的使用。(3)簡化用戶權(quán)限的管理。只需授予用戶使用視圖的權(quán)限,而不必指定用戶只能使用表的特定列,同

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論