《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件1第7章 PLSQL基礎(chǔ)_第1頁(yè)
《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件1第7章 PLSQL基礎(chǔ)_第2頁(yè)
《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件1第7章 PLSQL基礎(chǔ)_第3頁(yè)
《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件1第7章 PLSQL基礎(chǔ)_第4頁(yè)
《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件1第7章 PLSQL基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

17.1SQL和PL/SQL7.1.1SQL語(yǔ)言SQL語(yǔ)言是應(yīng)用于數(shù)據(jù)庫(kù)的結(jié)構(gòu)化查詢語(yǔ)言,是一種非過程性語(yǔ)言,本身不能脫離數(shù)據(jù)庫(kù)而存在。一般高級(jí)語(yǔ)言存取數(shù)據(jù)庫(kù)時(shí)要按照程序順序處理許多動(dòng)作,使用SQL語(yǔ)言只需簡(jiǎn)單的幾行命令,由數(shù)據(jù)庫(kù)系統(tǒng)來(lái)完成具體的內(nèi)部操作。1.SQL語(yǔ)言分類通常將SQL語(yǔ)言分為以下4類。(1)數(shù)據(jù)定義語(yǔ)言(DataDefinitionLanguage,DDL)用于定義數(shù)據(jù)庫(kù)對(duì)象,對(duì)數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)中的表、視圖、索引等數(shù)據(jù)庫(kù)對(duì)象進(jìn)行建立和刪除,DDL包括CREATE、ALTER、DROP等語(yǔ)句。(2)數(shù)據(jù)操縱語(yǔ)言(DataManipulationLanguage,DML)用于對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行插入、修改、刪除等操作,DML包括INSERT、UPDATE、DELETE等語(yǔ)句。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)27.1SQL和PL/SQL(3)數(shù)據(jù)查詢語(yǔ)言(DataQueryLanguage,DQL)用于對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行查詢操作,例如用SELECT語(yǔ)句進(jìn)行查詢操作。(4)數(shù)據(jù)控制語(yǔ)言(DataControlLanguage,DCL)用于控制用戶對(duì)數(shù)據(jù)庫(kù)的操作權(quán)限,DCL包括GRANT、REVOKE等語(yǔ)句。2.SQL語(yǔ)言的特點(diǎn)SQL語(yǔ)言具有高度非過程化、應(yīng)用于數(shù)據(jù)庫(kù)的語(yǔ)言、面向集合的操作方式、既是自含式語(yǔ)言又是嵌入式語(yǔ)言、綜合統(tǒng)一、語(yǔ)言簡(jiǎn)潔和易學(xué)易用等特點(diǎn)。(1)高度非過程化SQL語(yǔ)言是非過程化語(yǔ)言,進(jìn)行數(shù)據(jù)操作,只要提出“做什么”,而無(wú)須指明“怎么做”,因此無(wú)需說明具體處理過程和存取路徑,處理過程和存取路徑由系統(tǒng)自動(dòng)完成。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)37.1SQL和PL/SQL(2)應(yīng)用于數(shù)據(jù)庫(kù)的語(yǔ)言SQL語(yǔ)言本身不能獨(dú)立于數(shù)據(jù)庫(kù)而存在,它是應(yīng)用于數(shù)據(jù)庫(kù)和表的語(yǔ)言,使用SQL語(yǔ)言,應(yīng)熟悉數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)和樣本數(shù)據(jù)。(3)面向集合的操作方式SQL語(yǔ)言采用集合操作方式,不僅操作對(duì)象、查找結(jié)果可以是記錄的集合,而且一次插入、刪除、更新操作的對(duì)象也可以是記錄的集合。(4)既是自含式語(yǔ)言、又是嵌入式語(yǔ)言SQL語(yǔ)言作為自含式語(yǔ)言,它能夠用于聯(lián)機(jī)交互的使用方式,用戶可以在終端鍵盤上直接鍵入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;作為嵌入式語(yǔ)言,SQL語(yǔ)句能夠嵌入到高級(jí)語(yǔ)言(例如C,C++,Java)程序中,供程序員設(shè)計(jì)程序時(shí)使用。在兩種不同的使用方式下,SQL語(yǔ)言的語(yǔ)法結(jié)構(gòu)基本上是一致的,提供了極大的靈活性與方便性。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)47.1SQL和PL/SQL(5)綜合統(tǒng)一SQL語(yǔ)言集數(shù)據(jù)查詢(DataQuery)、數(shù)據(jù)操縱(DataManipulation)、數(shù)據(jù)定義(DataDefinition)和數(shù)據(jù)控制(DataControl)功能于一體。(6)語(yǔ)言簡(jiǎn)潔,易學(xué)易用SQL語(yǔ)言接近英語(yǔ)口語(yǔ),易學(xué)使用,功能很強(qiáng),由于設(shè)計(jì)巧妙,語(yǔ)言簡(jiǎn)潔,完成核心功能只用了9個(gè)動(dòng)詞,如表7.1所示。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)表7.1SQL語(yǔ)言的動(dòng)詞57.1SQL和PL/SQL7.1.2PL/SQL預(yù)備知識(shí)1.PL/SQL的語(yǔ)法約定PL/SQL的語(yǔ)法約定如表7.2所示,在PL/SQL不區(qū)分大寫和小寫。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)表7.2PL/SQL的基本語(yǔ)法約定67.1SQL和PL/SQL2.在SQLDeveloper中執(zhí)行PL/SQL語(yǔ)句在SQLDeveloper中執(zhí)行PL/SQL語(yǔ)句的步驟如下:(1)選擇“開始”→“所有程序”→“Oracle-OraDB12Home1”→“應(yīng)用程序開發(fā)”→“SQLDeveloper”命令,啟動(dòng)SQLDeveloper。(2)在主界面中展開”system_stsys”連接,單擊工具欄的按鈕,主界面彈出SQL工作表窗口,在窗口中輸入或粘貼要運(yùn)行的PL/SQL語(yǔ)句,這里輸入SELECT*FROMstudent;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)77.1SQL和PL/SQL(3)選中所有語(yǔ)句并單擊工具欄的按鈕或直接單擊按鈕,即執(zhí)行語(yǔ)句,在“結(jié)果”窗口顯示PL/SQL語(yǔ)句執(zhí)行結(jié)果,如圖7.1所示。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)87.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言7.2.1數(shù)據(jù)庫(kù)操作語(yǔ)句1.創(chuàng)建數(shù)據(jù)庫(kù)使用PL/SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)步驟簡(jiǎn)介如下:(1)設(shè)定實(shí)例標(biāo)識(shí)符建立數(shù)據(jù)庫(kù)之前,必須先指定數(shù)據(jù)庫(kù)實(shí)例的系統(tǒng)標(biāo)識(shí)符,即SID,在SQL*Plus中使用以下命令設(shè)定SID:SETORACLE_SID=stdb(2)設(shè)定數(shù)據(jù)庫(kù)管理員的驗(yàn)證方法創(chuàng)建Oracle數(shù)據(jù)庫(kù)必須經(jīng)過數(shù)據(jù)庫(kù)的驗(yàn)證手續(xù),且被賦予適當(dāng)系統(tǒng)權(quán)限后才可以建立??梢允褂妹艽a文件或操作系統(tǒng)的驗(yàn)證方法,下面是密碼文件驗(yàn)證方法。orapwdfile=D:\app\tao\oradata\DATABASE\PWDstdb.oraPassword=123456entries=5

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)97.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言(3)創(chuàng)建初始化參數(shù)創(chuàng)建新數(shù)據(jù)庫(kù)之前必須新增或編輯的初始化參數(shù)如下:●全局?jǐn)?shù)據(jù)庫(kù)名稱?!窨刂莆募Q與路徑?!駭?shù)據(jù)塊大小?!裼绊慡GA容量的初始化參數(shù)?!裨O(shè)定處理程序最大數(shù)目?!?/p>

設(shè)定空間撤銷(Undo)管理方法。(4)啟動(dòng)SQL*Plus并以SYSDBA連接到Oracle實(shí)例sqlplus/nologconnectsystem/Ora123456assysdba

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)107.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言(5)啟動(dòng)實(shí)例在沒有裝載數(shù)據(jù)庫(kù)情況下啟動(dòng)實(shí)例,通常只有在數(shù)據(jù)庫(kù)創(chuàng)建期間或在數(shù)據(jù)庫(kù)上實(shí)施維護(hù)操作時(shí)才會(huì)這么做,使用帶有NOMOUNT選項(xiàng)的STARTUP命令STARTUPNOMOUNTpfile="D:\app\tao\stdb\pfile\initstdb.ora"(6)使用CREATEDATABASE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)在Oracle中創(chuàng)建數(shù)據(jù)庫(kù),使用CREATEDATABASE語(yǔ)句,其語(yǔ)法格式如下語(yǔ)法格式:CREATEDATABASE<數(shù)據(jù)庫(kù)名> {USERSYSIDENTIFIEDBY<密碼> |USERSYSTEMIDENTIFIEDBY<密碼> |CONTROLFILEREUSE |MAXDATAFILES<最大數(shù)據(jù)文件數(shù)>

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)117.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言|MAXINSTANCES<最大實(shí)例數(shù)>|{ARCHIVELOG︱NOARCHIVELOG}|CHARACTERSET<字符集>|NATIONALCHARACTERSET<民族字符集>|SETDEFAULT{BIGFILE|SMALLFILE}TABLESPACE|[LOGFILE[GROUP<數(shù)字值>]<文件選項(xiàng)>|MAXLOGFILES<數(shù)字值>|MAXLOGMEMBERS<數(shù)字值>|MAXLOGHISTORY<數(shù)字值>|FORCELOGGING|DATAFILE<文件選項(xiàng)>[AUTOEXTEND[OFF︱ON[NEXT<數(shù)字值>[K∣M|G|T]

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)127.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言 MAXSIZE[UNLIMITED︱<數(shù)字值>[K∣M|G|T]]]] |DEFAULTTABLESPACE<表空間名>[DATAFILE<文件選項(xiàng)>]

|[BIGFILE|SMALL]UNDOTABLESPACE<表空間名>[DATAFILE<文件選項(xiàng)>]|SETTIME_ZONE='<時(shí)區(qū)名>'}...;其中:<文件選項(xiàng)>::=('<文件路徑>\<文件名>')[SIZE<數(shù)字值>[K∣M|G|T][REUSE]],…n]2.修改數(shù)據(jù)庫(kù)修改數(shù)據(jù)庫(kù)使用ALTERDATABASE語(yǔ)句,其語(yǔ)法格式如下。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)137.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言語(yǔ)法格式:ALTERDATABASE<數(shù)據(jù)庫(kù)名>[ARCHIVELOG|NOARCHIVELOG][NO]FORCELOGGINGRENAMEFILE'<文件名>'[,…n]TO'<新文件名>'[,…n]CREATEDATAFILE'<數(shù)據(jù)文件名>'[AS{'<新數(shù)據(jù)文件名>'[SIZE<數(shù)字值>[K∣M|G|T]][REUSE]][,…n]}|NEW]DATAFILE'<文件名>'{ONLINE∣OFFLINE[FORDROP]∣RESIZE<數(shù)字值>[K∣M|G|T]|ENDBACKUP∣AUTOEXTEND{OFF∣ON[NEXT<數(shù)字值>[K|M]][MAXSIZEUMLIMITED∣<數(shù)字值>[K∣M]]]}}ADDLOGFILE'<文件名>'[SIZE<數(shù)字值>[K∣M|G|T]][REUSE]][,…n]DROPLOGFILE'<文件名>'…;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)147.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言3.刪除數(shù)據(jù)庫(kù)刪除數(shù)據(jù)庫(kù)使用DROP語(yǔ)句。語(yǔ)法格式:DROPDATABASEdatabase_name其中,database_name是要?jiǎng)h除的數(shù)據(jù)庫(kù)名稱。7.2.2表空間操作語(yǔ)句1.創(chuàng)建表空間創(chuàng)建表空間在SQL*Plus中使用CREATETABLESPACE語(yǔ)句,創(chuàng)建的用戶必須擁有CREATETABLESPACE系統(tǒng)權(quán)限,在創(chuàng)建之前必須創(chuàng)建包含表空間的數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)157.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言語(yǔ)法格式:CREATETABLESPACE<表空間名>DATAFILE'<文件路徑>/<文件名>'[SIZE<文件大小>[K∣M]][REUSE][AUTOEXTEND[OFF∣ON[NEXT<磁盤空間大小>[K∣M]][MAXSIZE[UMLIMITED∣<最大磁盤空間大小>[K∣M]]]][MINMUMEXTENT<數(shù)字值>[K|M]][DEFAULT<存儲(chǔ)參數(shù)>][ONLINE∣OFFLINE][LOGGING∣NOLOGGING][PERMANENT∣TEMPORARY][EXTENTMANAGEMENT[DICTIONARY∣LOCAL[AUTOALLOCATE∣UNIFORM[SIZE<數(shù)字值>[K∣M]]]]]

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)167.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言【例7.1】創(chuàng)建表空間testspace,大小為40MB,禁止自動(dòng)擴(kuò)展數(shù)據(jù)文件。CREATETABLESPACEtestspaceLOGGINGDATAFILE'I:\app\ora\oradata\orcl\testspace01.DBF’SIZE40MREUSEAUTOEXTENDOFF;該語(yǔ)句運(yùn)行結(jié)果如圖7.2所示

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)177.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言【例7.2】創(chuàng)建表空間newspace,允許自動(dòng)擴(kuò)展數(shù)據(jù)文件。CREATETABLESPACEnewspaceLOGGINGDATAFILE'I:\app\ora\oradata\orcl\newspace01.DBF’SIZE40MREUSEAUTOEXTENDONNEXT10MMAXSIZE300MEXTENTMANAGEMENTLOCAL;該語(yǔ)句運(yùn)行結(jié)果如圖7.3所示

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)187.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言2.管理表空間在SQL*Plus中使用ALTERTABLESPACE命令可以修改表空間或它的一個(gè)或多個(gè)數(shù)據(jù)文件、或?yàn)閿?shù)據(jù)庫(kù)中每一個(gè)數(shù)據(jù)文件指定各自的存儲(chǔ)擴(kuò)展參數(shù)值,其語(yǔ)法格式如下。語(yǔ)法格式:ALTERTABLESPACE<表空間名>[ADDDATAFILE∣TEMPFILE'<路徑>/<文件名>'[SIZE<文件大小>[K∣M]][REUSE][AUTOEXTEND[OFF∣ON[NEXT<磁盤空間大小>[K∣M]]]][MAXSIZE[UNLIMITED∣<最大磁盤空間大小>[K∣M]]][RENAMEDATAFILE'<路徑>/<文件名>',…nTO'<路徑>/<新文件名>'',…n][DEFAULTSTORAGE<存儲(chǔ)參數(shù)>][ONLINE∣OFFLINE[NORMAL∣TEMPORARY∣IMMEDIATE]]

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)197.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言

[LOGGING∣NOLOGGING][READONLY∣WRITE][PERMANENT][TEMPORARY]【例7.3】通過ALTERTABLESPACE命令把一個(gè)新的數(shù)據(jù)文件添加到newspace表空間,并指定了AUTOEXTENDON和MAXSIZE300M。ALTERTABLESPACEnewspaceADDDATAFILE'I:\app\ora\oradata\orcl\DATA02.DBF'SIZE40MREUSEAUTOEXTENDONNEXT50MMAXSIZE300M;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)207.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言3.刪除表空間在SQL*Plus中使用DROPTABLESPACE語(yǔ)句刪除已經(jīng)創(chuàng)建的表空間,其語(yǔ)法格式如下。語(yǔ)法格式:DROPTABLESPACE<表空間名>[INCLUDINGCONTENTS[{AND|KEEP}DATAFILES][CASCADECONSTRAINTS]];

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)217.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言【例7.4】刪除表空間newspace和及其對(duì)應(yīng)的數(shù)據(jù)文件。DROPTABLESPACEnewspaceINCLUDINGCONTENTSANDDATAFILES;該語(yǔ)句運(yùn)行結(jié)果如圖7.4所示

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)227.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言7.2.3表操作語(yǔ)句1.創(chuàng)建表使用CREATETABLE語(yǔ)句創(chuàng)建表,其語(yǔ)法格式如下。語(yǔ)法格式:CREATETABLE[<用戶方案名>.]<表名>(<列名1><數(shù)據(jù)類型>[DEFAULT<默認(rèn)值>][<列約束>] <列名2><數(shù)據(jù)類型>[DEFAULT<默認(rèn)值>][<列約束>] [,…n]<表約束>[,…n])[PCTFREE<數(shù)字值>][PCTUSED<數(shù)字值>][INITRANS<數(shù)字值>][MAXTRANS<最大并發(fā)事務(wù)數(shù)>]

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)237.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言[TABLESPACE<表空間名>][STORGE<參數(shù)>][AS<子查詢>]【例7.5】使用PL/SQL語(yǔ)句,在stsys數(shù)據(jù)庫(kù)中創(chuàng)建student表。在stsys數(shù)據(jù)庫(kù)中創(chuàng)建student表語(yǔ)句如下:CREATETABLEstudent(snochar(6)NOTNULLPRIMARYKEY,snamechar(12)NOTNULL,ssexchar(3)NOTNULL,sbirthdaydateNOTNULL,specialitychar(18)NULL,sclasschar(6)NULL,tcnumberNULL);

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)247.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言啟動(dòng)SQLDeveloper,在主界面中展開”system_stsys”連接,單擊工具欄的按按鈕,主界面彈出SQL工作表窗口,在窗口中輸入上述語(yǔ)句,單擊按鈕,在“結(jié)果”窗口顯示”CREATETABLE成功”,如圖7.5所示。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)257.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言2.修改表使用ALTERTABLE語(yǔ)句用來(lái)修改表的結(jié)構(gòu),其語(yǔ)法格式如下:語(yǔ)法格式:ALTERTABLE[<用戶方案名>.]<表名>[ADD(<新列名><數(shù)據(jù)類型>[DEFAULT<默認(rèn)值>][列約束],…n)]/*增加新列*/[MODIFY([<列名>[<數(shù)據(jù)類型>][DEFAULT<默認(rèn)值>][列約束],…n)]/*修改已有列的屬性*/[STORAGE<存儲(chǔ)參數(shù)>] /*修改存儲(chǔ)特征*/[<DROP子句>] /*刪除列或約束條件*/其中,<DROP子句>用于從表中刪除列或約束。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)267.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言語(yǔ)法格式:<DROP子句>::=DROP{ COLUMN<列名> ∣PRIMARY[KEY] ∣UNIQUE(<列名>,…n) ∣CONSTRAINT<約束名> ∣[CASCADE]}【例7.6】使用ALTERTABLE語(yǔ)句修改Stsys數(shù)據(jù)庫(kù)中的student表。(1)在student表中增加一列remarks(備注)。ALTERTABLEstudentADDremarksvarchar(100);

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)277.2在PL/SQL中的數(shù)據(jù)定義語(yǔ)言(2)在student表中刪除列remarks。ALTERTABLEstudentDROPCOLUMNremarks;3.刪除表使用DROPTABLE語(yǔ)言刪除表。語(yǔ)法格式:DROPTABLEtable_name其中,table_name是要?jiǎng)h除的表的名稱。【例7.7】刪除Stsys數(shù)據(jù)庫(kù)中newstudent表(已創(chuàng)建)。DROPTABLEnewstudent;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)287.3在PL/SQL中的數(shù)據(jù)操縱語(yǔ)言7.3.1插入語(yǔ)句INSERT語(yǔ)句用于向數(shù)據(jù)庫(kù)的表插入一行,由VALUES給定該行各列的值,其語(yǔ)法格式如下:語(yǔ)法格式:INSERTINTO<表名>[(<列名1>,<列名2>,…n)]VALUES(<列值1>,<列值2>,…n)其中,列值表必須與列名表一一對(duì)應(yīng),且數(shù)據(jù)類型相同。向表的所有列添加數(shù)據(jù)時(shí),可以省略列名表,但列值表必須與列名表順序和數(shù)據(jù)類型一致。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)297.3在PL/SQL中的數(shù)據(jù)操縱語(yǔ)言【例7.8】向student表插入表6.1各行數(shù)據(jù)。向student表插入表6.1各行數(shù)據(jù)的語(yǔ)句如下INSERTINTOstudentVALUES('181001','宋德成','男',TO_DATE('19971105','YYYYMMDD'),'計(jì)算機(jī)','201805',52);INSERTINTOstudentVALUES('181002','何靜','女',TO_DATE('19980427','YYYYMMDD'),'計(jì)算機(jī)','201805',50);INSERTINTOstudentVALUES('181004','劉文韜','男',TO_DATE('19980513','YYYYMMDD'),'計(jì)算機(jī)','201805',52);INSERTINTOstudentVALUES('184001','李浩宇','男',TO_DATE('19971024','YYYYMMDD'),'通信','201836',50);INSERTINTOstudentVALUES('184002','謝麗君','女',TO_DATE('19980116','YYYYMMDD'),'通信','201836',48);INSERTINTOstudentVALUES('184003','陳春玉','女',TO_DATE('19970809','YYYYMMDD'),'通信','201836',52);

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)307.3在PL/SQL中的數(shù)據(jù)操縱語(yǔ)言使用SELECT語(yǔ)句查詢插入的數(shù)據(jù):SELECT*FROMstudent;查詢結(jié)果:SNOSNAMESSEXSBIRTHDAYSPECIALITYSCLASSTC--------------------------------------------------------------------------------------181001宋德成男1997-11-05計(jì)算機(jī)20180552181002何靜女1998-04-27計(jì)算機(jī)20180550181004劉文韜男1998-05-13計(jì)算機(jī)20180552184001李浩宇男1997-10-24通信20183650184002謝麗君女1998-01-16通信20183648184003陳春玉女1997-08-09通信20183652

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)317.3在PL/SQL中的數(shù)據(jù)操縱語(yǔ)言7.3.2修改語(yǔ)句UPDATE語(yǔ)句用于修改表中指定記錄的列值,它的基本語(yǔ)法格式如下:語(yǔ)法格式:UPDATE<表名>SET<列名>={<新值>|<表達(dá)式>}[,…n][WHERE<條件表達(dá)式>]其中,在滿足WHERE子句條件的行中,將SET子句指定的各列的列值設(shè)置為SET指定的新值,如果省略WHERE子句,則更新所有行的指定列值。注意:UPDATE語(yǔ)句修改的是一行或多行中的列?!纠?.9】在student表中,將所有學(xué)生的學(xué)分增加2分。UPDATEstudentSETtc=tc+2;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)327.3在PL/SQL中的數(shù)據(jù)操縱語(yǔ)言7.3.3刪除語(yǔ)句1.DELETE語(yǔ)句DELETE語(yǔ)句用于刪除表中的一行或多行記錄,它的基本語(yǔ)法格式如下:語(yǔ)法格式:DELETEFROM<表名>[WHERE<條件表達(dá)式>]該語(yǔ)句的功能為從指定的表或中刪除滿足WHERE子句條件行,若省略WHERE子句,則刪除所有行。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)337.3在PL/SQL中的數(shù)據(jù)操縱語(yǔ)言【例7.10】在student表中,刪除學(xué)號(hào)為184003的行。DELETEFROMstudentWHEREsno='184003’;2.TRANCATETABLE語(yǔ)句當(dāng)需要?jiǎng)h除一個(gè)表里的全部記錄,使用TRUNCATETABLE語(yǔ)句,它可以釋放表的存儲(chǔ)空間,但此操作不可回退,其語(yǔ)法格式如下:語(yǔ)法格式:TRUNCATETABLE<表名>

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)347.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言PL/SQL語(yǔ)言中最重要的部分是它的查詢功能,PL/SQL的SELECT語(yǔ)句具有靈活的使用方式和強(qiáng)大的功能,能夠?qū)崿F(xiàn)選擇、投影和連接等操作,SELECT語(yǔ)句的基本語(yǔ)法格式如下:語(yǔ)法格式:SELECT<列> /*SELECT子句,指定列*/FROM<表或視圖> /*FROM子句,指定表或視圖*/[WHERE<條件表達(dá)式>] /*WHERE子句,指定行*/[GROUPBY<分組表達(dá)式>]/*GROUPBY子句,指定分組表達(dá)式*/[HAVING<分組條件表達(dá)式>]/*HAVING子句,指定分組統(tǒng)計(jì)條件*/[ORDERBY<排序表達(dá)式>[ASC|DESC]] /*ORDER子句,指定排序表達(dá)式和順序*/

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)357.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言7.4.1投影查詢投影查詢用于選擇列,投影查詢通過SELECT語(yǔ)句的SELECT子句來(lái)表示,SELECT子句的語(yǔ)法格式如下:語(yǔ)法格式:SELECT[ALL|DISTINCT]<列名列表>其中,<列名列表>指出了查詢結(jié)果的形式,其格式為:{* /*選擇當(dāng)前表或視圖的所有列*/|<表名>|<視圖>|.* /*選擇指定的表或視圖的所有列*/|{|<列名>|<表達(dá)式>}[[AS]<列別名>] /*選擇指定的列,為列指定別名*/|<列標(biāo)題>=<列名表達(dá)式>/*選擇指定的列并更改列標(biāo)題,為列指定別名*/}[,…n]

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)367.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言1.投影指定的列使用SELECT語(yǔ)句可選擇表中的一個(gè)列或多個(gè)列,如果是多個(gè)列,各列名中間要用逗號(hào)分開。語(yǔ)法格式SELECT<列名1>[,<列名2>[,…n]]FROM<表名>[WHERE<條件表達(dá)式>]該語(yǔ)句的功能為在FROM子句指定表中檢索符合條件的列。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)377.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.11】查詢student表中所有學(xué)生的學(xué)號(hào)、姓名和班號(hào)。SELECTsno,sname,sclassFROMstudent;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

SNOSNAMESCLASS-------------------------------------181001宋德成201805181002何靜201805181004劉文韜201805184001李浩宇201836184002謝麗君201836184003陳春玉201836387.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言2.投影全部列在SELECT子句指定列的位置上使用*號(hào)時(shí),則為查詢表中所有列?!纠?.12】查詢student表中所有列。SELECT*FROMstudent;該語(yǔ)句與下面語(yǔ)句等價(jià)SELECTsno,sname,ssex,sbirthday,speciality,sclass,tcFROMstudent;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)397.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言查詢結(jié)果:SNOSNAMESSEXSBIRTHDAYSPECIALITYSCLASSTC--------------------------------------------------------------------------------------181001宋德成男1997-11-05計(jì)算機(jī)20180552181002何靜女1998-04-27計(jì)算機(jī)20180550181004劉文韜男1998-05-13計(jì)算機(jī)20180552184001李浩宇男1997-10-24通信20183650184002謝麗君女1998-01-16通信20183648184003陳春玉女1997-08-09通信20183652

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)407.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言3.修改查詢結(jié)果的列標(biāo)題為了改變查詢結(jié)果中顯示的列標(biāo)題,可以在列名后使用AS<列別名>?!纠?.13】查詢student表中所有學(xué)生的學(xué)生的sno、sname、speciality,并將結(jié)果中各列的標(biāo)題分別修改為學(xué)號(hào),姓名,專業(yè)。SELECTsnoAS學(xué)號(hào),snameAS姓名,specialityAS專業(yè)

FROMstudent;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)

查詢結(jié)果:

學(xué)號(hào)

姓名

專業(yè)

----------------------------------181001宋德成

計(jì)算機(jī)

181002何靜

計(jì)算機(jī)

181004劉文韜

計(jì)算機(jī)

184001李浩宇

通信

184002謝麗君

通信

184003陳春玉

通信

417.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言4.計(jì)算列值使用SELECT子句對(duì)列進(jìn)行查詢時(shí),可以對(duì)數(shù)字類型的列進(jìn)行計(jì)算,可以使用加(+)、減(-)、乘(*)、除(/)等算術(shù)運(yùn)送符,SELECT子句可使用表達(dá)式,其語(yǔ)法格式如下:語(yǔ)法格式:SELECT<表達(dá)式>[,<表達(dá)式>]5.去掉重復(fù)行去掉結(jié)果集中的重復(fù)行可使用DISTINCT關(guān)鍵字,其語(yǔ)法格式是:語(yǔ)法格式:SELECTDISTINCT<列名>[,<列名>…]

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)427.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.14】查詢student表中sclass列,消除結(jié)果中的重復(fù)行。SELECTDISTINCTsclassFROMstudent;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

SCLASS------------201836201805437.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言7.4.2選擇查詢投影查詢用于選擇行,選擇查詢通過WHERE子句實(shí)現(xiàn),WHERE子句通過條件表達(dá)式給出查詢條件,該子句必須緊跟FROM子句之后。語(yǔ)法格式:WHERE<條件表達(dá)式>其中,<條件表達(dá)式>為查詢條件,格式為:<條件表達(dá)式>::={[NOT]<判定運(yùn)算>|(<條件表達(dá)式>)}[{AND|OR}[NOT]{<判定運(yùn)算>|(<條件表達(dá)式>)}][,…n]其中,<判定運(yùn)算>的結(jié)果為TRUE、FALSE或UNKNOWN,其格式為:

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)447.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言<判定運(yùn)算>::={<表達(dá)式1>{=|<|<=|>|>=|<>|!=}<表達(dá)式2>/*比較運(yùn)算*/|<字符串表達(dá)式1>[NOT]LIKE<字符串表達(dá)式2>[ESCAPE'<轉(zhuǎn)義字符>'] /*字符串模式匹配*/|<表達(dá)式>[NOT]BETWEEN<表達(dá)式1>AND<表達(dá)式2> /*指定范圍*/|<表達(dá)式>IS[NOT]NULL /*是否空值判斷*/|<表達(dá)式>[NOT]IN(<子查詢>|<表達(dá)式>[,…n]) /*IN子句*/|EXIST(<子查詢>) /*EXIST子查詢*/}說明:(1)判定運(yùn)算包括比較運(yùn)算、模式匹配、指定范圍、空值判斷、子查詢等,判定運(yùn)算的結(jié)果為TRUE、FALSE或UNKNOWN。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)457.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言(2)邏輯運(yùn)算符包括.AND(與)、OR(或)、NOT(非),NOT、AND和OR的使用是有優(yōu)先級(jí)的,三者之中,NOT優(yōu)先級(jí)最高,AND次之,OR優(yōu)先級(jí)最低。(3)條件表達(dá)式可以使用多個(gè)判定運(yùn)算通過邏輯運(yùn)算符成復(fù)雜的查詢條件。(4)字符串和日期必須用單引號(hào)括起來(lái)。1.表達(dá)式比較比較運(yùn)算符用于比較兩個(gè)表達(dá)式值,共有7個(gè)運(yùn)算符:=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)、!=(不等于),其語(yǔ)法格式如下。語(yǔ)法格式:<表達(dá)式1>{=|<|<=|>|>=|<>|!=}<表達(dá)式2>

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)467.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.15】查詢student表中班號(hào)為201205或性別為女的學(xué)生。SELECT*FROMstudentWHEREsclass='201205'orssex='女';

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:SNOSNAMESSEXSBIRTHDAYSPECIALITYSCLASSTC------------------------------------------------------------------------------------181002何靜女1998-04-27計(jì)算機(jī)20180550184002謝麗君女1998-01-16通信20183648184003陳春玉女1997-08-09通信20183652477.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言2.指定范圍BETWEEN、NOTBETWEEN、IN是用于指定范圍的三個(gè)關(guān)鍵字,用于查找字段值在(或不在)指定范圍的行。當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用BETWEEN關(guān)鍵字。BETWEEN關(guān)鍵字指出查詢范圍。語(yǔ)法格式:<表達(dá)式>[NOT]BETWEEN<表達(dá)式1>AND<表達(dá)式2>

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)487.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.16】查詢score表成績(jī)?yōu)?6、92、95的記錄。SELECT*FROMscoreWHEREgradein(86,92,95);

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

SNOCNOGRADE-------------------------------181002100486184001400292184001800186184003800195181004120192497.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.17】查詢student表中不在1998年出生的學(xué)生情況。SELECT*FROMstudentWHEREsbirthdayNOTBETWEENTO_DATE('19980101','YYYYMMDD')ANDTO_DATE('19981231','YYYYMMDD');

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:SNOSNAMESSEXSBIRTHDAYSPECIALITYSCLASSTC------------------------------------------------------------------------------------181001宋德成男1997-11-05計(jì)算機(jī)20180552184001李浩宇男1997-10-24通信20183650184003陳春玉女1997-08-09通信20183652507.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言3.模式匹配模式匹配使用LIKE謂詞,LIKE謂詞用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算對(duì)象可以是char、varchar2和date類型的數(shù)據(jù),返回邏輯值TRUE或FALSE。語(yǔ)法格式:<字符串表達(dá)式1>[NOT]LIKE<字符串表達(dá)式2>[ESCAPE'<轉(zhuǎn)義字符>’]在使用LIKE謂詞時(shí),<字符串表達(dá)式2>可以含有通配符,通配符有以下兩種:%:代表0或多個(gè)字符。_:代表一個(gè)字符。LIKE匹配中使用通配符的查詢也稱模糊查詢。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)517.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.18】查詢student表中姓謝的學(xué)生情況。SELECT*FROMstudentWHEREsnameLIKE'謝%';

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:SNOSNAMESSEXSBIRTHDAYSPECIALITYSCLASSTC------------------------------------------------------------------------------------184002謝麗君女1998-01-16通信20183648527.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言4.空值判斷判定一個(gè)表達(dá)式的值是否為空值時(shí),使用ISNULL關(guān)鍵字。語(yǔ)法格式:<表達(dá)式>IS[NOT]NULL【例7.19】查詢已選課但未參加考試的學(xué)生情況。SELECT*FROMscoreWHEREgradeISnull;

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

SNOCNOGRADE-------------------------------1840028001537.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言7.4.3分組查詢和統(tǒng)計(jì)計(jì)算1.聚合函數(shù)聚合函數(shù)實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)計(jì)計(jì)算,用于計(jì)算表中的數(shù)據(jù),返回單個(gè)計(jì)算結(jié)果。聚合函數(shù)包括COUNT、SUM、AVG、MAX、MIN等函數(shù),下面分別介紹。(1)COUNT函數(shù)COUNT函數(shù)用于計(jì)算組中滿足條件的行數(shù)或總行數(shù)。語(yǔ)法格式:COUNT({[ALL|DISTINCT]<表達(dá)式>}|*)其中,ALL表示對(duì)所有值進(jìn)行計(jì)算,ALL為默認(rèn)值,DISTINCT指去掉重復(fù)值,COUNT函數(shù)用于計(jì)算時(shí)忽略NULL值。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)547.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.20】求學(xué)生的總?cè)藬?shù)。SELECTCOUNT(*)AS總?cè)藬?shù)

FROMstudent;該語(yǔ)句采用COUNT(*)計(jì)算總行數(shù),總?cè)藬?shù)與總行數(shù)一致。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

總?cè)藬?shù)----------6557.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.21】查詢201836班學(xué)生的總?cè)藬?shù)。SELECTCOUNT(*)AS總?cè)藬?shù)

FROMstudentWHEREsclass='201836';該語(yǔ)句采用COUNT(*)計(jì)算總?cè)藬?shù),并用WHERE子句指定的條件進(jìn)行限定為201836。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

總?cè)藬?shù)----------3567.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言(2)SUM和AVG函數(shù)SUM函數(shù)用于求出一組數(shù)據(jù)的總和,AVG函數(shù)用于求出一組數(shù)據(jù)的平均值,這兩個(gè)函數(shù)只能針對(duì)數(shù)值類型的數(shù)據(jù)。語(yǔ)法格式:SUM/AVG([ALL|DISTINCT]<表達(dá)式>)其中,ALL表示對(duì)所有值進(jìn)行計(jì)算,ALL為默認(rèn)值,DISTINCT指去掉重復(fù)值,SUM/AVG函數(shù)用于計(jì)算時(shí)忽略NULL值。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)577.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.22】查詢1201課程總分。SELECTSUM(stockqt)AS課程1201總分

FROMscoreWHEREcno=’1201’;該語(yǔ)句采用SUM()計(jì)算課程總分,并用WHERE子句指定的條件進(jìn)行限定為1201課程。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:

課程1201總分--------------------509587.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言(3)MAX和MIN函數(shù)MAX函數(shù)用于求出一組數(shù)據(jù)的最大值,MIN函數(shù)用于求出一組數(shù)據(jù)的最小值,這兩個(gè)函數(shù)都可以適用于任意類型數(shù)據(jù)。語(yǔ)法格式:MAX/MIN([ALL|DISTINCT]<表達(dá)式>)其中,ALL表示對(duì)所有值進(jìn)行計(jì)算,ALL為默認(rèn)值,DISTINCT指去掉重復(fù)值,MAX/MIN函數(shù)用于計(jì)算時(shí)忽略NULL值。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)597.4在PL/SQL中的數(shù)據(jù)查詢語(yǔ)言【例7.23】查詢8001課程的最高分、最低分、平均成績(jī)。SELECTMAX(grade)AS課程8001最高分,MIN(grade)AS課程8001最低分,AVG(grade)AS課程8001平均成績(jī)

FROMscoreWHEREcno='8001';該語(yǔ)句采用MAX求最高分、MIN求最低分、AVG求平均成績(jī)。

數(shù)據(jù)庫(kù)原理與應(yīng)用教程(Oracle12c版)查詢結(jié)果:課程8001最高分課程8001最低分課程8001平均成績(jī)-----------------------------------------------------------------958588.8607.4在PL/SQL中的數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論