




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、走進(jìn)Oracle21.Oracle簡(jiǎn)介32.Oracle安裝43.Oracle客戶端工具94.Oracle服務(wù)165.Oracle啟動(dòng)和關(guān)閉176.Oracle用戶和權(quán)限187.本章總結(jié)218.本章練習(xí)22SQL數(shù)據(jù)操作和查詢251.SQL簡(jiǎn)介262.Oracle數(shù)據(jù)類型263.創(chuàng)建表和約束274.數(shù)據(jù)操縱語(yǔ)言(DML)305.操作符356.高級(jí)查詢367.本章總結(jié)448.本章練習(xí)45子查詢和常用函數(shù)481.子查詢492.Oracle中的偽列513.Oracle函數(shù)544.本章總結(jié)625.本章練習(xí)63表空間、數(shù)據(jù)庫(kù)對(duì)象661.Oracle數(shù)據(jù)庫(kù)對(duì)象672.同義詞673.序列704.視圖725.
2、索引746.表空間757.本章總結(jié)798.本章練習(xí)80PL/SQL程序設(shè)計(jì)831.PL/SQL簡(jiǎn)介842.PL/SQL塊853.PL/SQL數(shù)據(jù)類型894.PL/SQL條件控制和循環(huán)控制915.PL/SQL中動(dòng)態(tài)執(zhí)行SQL語(yǔ)句1016.PL/SQL的異常處理1027.本章總結(jié)1088.本章練習(xí)109Oracle應(yīng)用于.Net平臺(tái)1111.回顧ADO.NET1122.使用ADO.NET連接Oracle1133.抽象工廠中加入Oracle1174.本章總結(jié)1215.本章練習(xí)122數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出1241.Oracle導(dǎo)入導(dǎo)出1252.EXP導(dǎo)出數(shù)據(jù)1253.IMP導(dǎo)入1284.常見(jiàn)問(wèn)題128第1章走
3、進(jìn)Oracle主要內(nèi)容ü Oracle安裝ü Oracle創(chuàng)建用戶和角色ü 客戶端鏈接Oracle服務(wù)器1. Oracle簡(jiǎn)介在第一學(xué)期我們已經(jīng)接觸過(guò)關(guān)系型數(shù)據(jù)庫(kù)SQL Server,對(duì)數(shù)據(jù)庫(kù)、表、記錄、表的增刪改查操作等這些基本的概念已經(jīng)了解。Oracle是基于對(duì)象的關(guān)系型數(shù)據(jù)庫(kù),Oracle也是用表的形式對(duì)數(shù)據(jù)存儲(chǔ)和管理,并且在Oracle的操作中添加了一些面向?qū)ο蟮乃枷搿racle數(shù)據(jù)庫(kù)是Oracle(中文名稱叫甲骨文)公司的核心產(chǎn)品,Oracle數(shù)據(jù)庫(kù)是一個(gè)適合于大中型企業(yè)的數(shù)據(jù)庫(kù)管理系統(tǒng)。在所有的數(shù)據(jù)庫(kù)管理系統(tǒng)中(比如:微軟的SQL Server,IB
4、M的DB2等),Oracle的主要用戶涉及面非常廣,包括:銀行、電信、移動(dòng)通信、航空、保險(xiǎn)、金融、電子商務(wù)和跨國(guó)公司等。Oracle產(chǎn)品是免費(fèi)的,可以在Oracle官方網(wǎng)站上下載到安裝包,另一方面Oracle服務(wù)是收費(fèi)的。Oracle公司成立以來(lái),從最初的數(shù)據(jù)庫(kù)版本到Oracle7、Oracle8i、Oracle9i,Oracle10g到Oracle11g,雖然每一個(gè)版本之間的操作都存在一定的差別,但是Oracle對(duì)數(shù)據(jù)的操作基本上都遵循SQL標(biāo)準(zhǔn)。因此對(duì)Oracle開(kāi)發(fā)來(lái)說(shuō)版本之間的差別不大。 很多人沒(méi)有學(xué)習(xí)Oracle就開(kāi)始發(fā)怵,因?yàn)槿藗冊(cè)谡`解Oracle,認(rèn)為Oracle太難學(xué)了,認(rèn)為O
5、racle不是一般人用的數(shù)據(jù)庫(kù),其實(shí)任何數(shù)據(jù)庫(kù)對(duì)應(yīng)用程序研發(fā)人員來(lái)說(shuō),都是大同小異,因?yàn)槟壳岸鄶?shù)數(shù)據(jù)庫(kù)都支持標(biāo)準(zhǔn)的SQL。在Oracle這本書(shū)中,我們能學(xué)習(xí)到:Ø Oracle的安裝Ø Oracle數(shù)據(jù)管理Ø 常用子查詢及常用函數(shù)Ø PL/SQL編程Ø Oracle基本管理由于在第一學(xué)期已經(jīng)接觸了SQL Server,Oracle數(shù)據(jù)庫(kù)的概念不是很難,主要是實(shí)踐,因此在本書(shū)的學(xué)習(xí)中,認(rèn)真的完成上機(jī)練習(xí)是學(xué)習(xí)好本書(shū)的關(guān)鍵。接下來(lái)我們先從Oracle安裝開(kāi)始,接觸一些Oracle中基本的概念。2. Oracle安裝Oracle數(shù)據(jù)庫(kù)產(chǎn)品是免費(fèi)的,我
6、們可以從Oracle的官方網(wǎng)站()下載到程序安裝包,Oracle在Windows下的安裝非常方便,安裝開(kāi)始后,一直點(diǎn)擊安裝程序的“下一步”即可。1. 下載Oracle10g后,解壓到一個(gè)文件夾下,單擊“setup.exe”文件即可啟動(dòng)安裝界面。如下圖:圖1 Oracle安裝啟動(dòng)界面Oracle主目錄位置就是Oracle準(zhǔn)備安裝的位置,稱為“Oracle_Home”,一般Oracle根據(jù)當(dāng)前計(jì)算機(jī)的硬盤(pán)大小默認(rèn)給出一個(gè)合適的位置。Oracle安裝時(shí)可以只安裝Oracle軟件,然后單獨(dú)創(chuàng)建數(shù)據(jù)庫(kù),也可以在上圖中選中“創(chuàng)建啟動(dòng)數(shù)據(jù)庫(kù)”復(fù)選框,在安裝Oracle產(chǎn)品時(shí),同時(shí)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),對(duì)初學(xué)者來(lái)說(shuō)
7、,推薦這樣安裝。填寫(xiě)全局?jǐn)?shù)據(jù)庫(kù)名,以及管理員的密碼。全局?jǐn)?shù)據(jù)庫(kù)名是數(shù)據(jù)庫(kù)在服務(wù)器網(wǎng)絡(luò)中的唯一標(biāo)識(shí)。2. 點(diǎn)擊“下一步”,就會(huì)出現(xiàn)如下圖內(nèi)容,開(kāi)始對(duì)Oracle服務(wù)器進(jìn)行環(huán)境檢查,主要查看服務(wù)器是否符合Oracle安裝的條件,比如操作系統(tǒng)是否支持、系統(tǒng)內(nèi)存是否符合Oracle安裝的最低要求等。圖2 Oracle安裝前環(huán)境檢查3. Oracle檢查通過(guò)后,單擊“下一步”,就會(huì)列出所有安裝Oracle過(guò)程中的默認(rèn)選項(xiàng)。圖3 Oracle默認(rèn)安裝設(shè)置4. 單擊“安裝”按鈕,進(jìn)入安裝界面,這一過(guò)程經(jīng)歷時(shí)間比較長(zhǎng),根據(jù)計(jì)算機(jī)的性能不同有很大差別。圖4 Oracle安裝5. 上圖完成后,進(jìn)入了各種Oracl
8、e工具的安裝階段,包括網(wǎng)絡(luò)配置向?qū)?,iSQL*plus等(后面課程中講解)。如下圖所示:圖5 Oracle各種工具的安裝6. 接下來(lái)自動(dòng)啟動(dòng)DBCA(Database Configuration Assistant)進(jìn)入創(chuàng)建默認(rèn)數(shù)據(jù)庫(kù)階段。圖6 DBCA下安裝數(shù)據(jù)庫(kù)Oracle中的數(shù)據(jù)庫(kù)主要是指存放數(shù)據(jù)的文件,這些文件在Oracle安裝完成后,在計(jì)算機(jī)硬盤(pán)上都能找到,包括數(shù)據(jù)文件、控制文件和數(shù)據(jù)庫(kù)日志文件。數(shù)據(jù)庫(kù)創(chuàng)建后會(huì)有一系列為該數(shù)據(jù)庫(kù)提供服務(wù)的內(nèi)存空間和后臺(tái)進(jìn)程,稱為該數(shù)據(jù)庫(kù)的實(shí)例。每一個(gè)數(shù)據(jù)庫(kù)至少會(huì)有一個(gè)實(shí)例為其服務(wù)。實(shí)例中的內(nèi)存結(jié)構(gòu)稱為系統(tǒng)全局區(qū)(SGA),系統(tǒng)會(huì)根據(jù)當(dāng)前計(jì)算機(jī)系統(tǒng)的性
9、能給SGA分配非??捎^的內(nèi)存空間。Oracle創(chuàng)建數(shù)據(jù)庫(kù)不能像SQL Server那樣用一個(gè)簡(jiǎn)單的CREATE DATABASE命令就能完成,在創(chuàng)建數(shù)據(jù)庫(kù)的過(guò)程中還需要配置各種參數(shù)。雖然有DBCA工具向?qū)В侨匀恍枰M(jìn)行比較麻煩的配置。雖然一個(gè)Oracle數(shù)據(jù)庫(kù)服務(wù)器中可以安裝多個(gè)數(shù)據(jù)庫(kù),但是一個(gè)數(shù)據(jù)庫(kù)需要占用非常大的內(nèi)存空間,因此一般一個(gè)服務(wù)器只安裝一個(gè)數(shù)據(jù)庫(kù)。每一個(gè)數(shù)據(jù)庫(kù)可以有很多用戶,不同的用戶擁有自己的數(shù)據(jù)庫(kù)對(duì)象(比如:數(shù)據(jù)庫(kù)表),一個(gè)用戶如果訪問(wèn)其他用戶的數(shù)據(jù)庫(kù)對(duì)象,必須由對(duì)方用戶授予一定的權(quán)限。不同的用戶創(chuàng)建的表,只能被當(dāng)前用戶訪問(wèn)。因此在Oracle開(kāi)發(fā)中,不同的應(yīng)用程序只需使
10、用不同的用戶訪問(wèn)即可。7. 數(shù)據(jù)庫(kù)創(chuàng)建完畢后,需要設(shè)置數(shù)據(jù)庫(kù)的默認(rèn)用戶。Oracle中為管理員預(yù)置了兩個(gè)用戶分別是SYS和SYSTEM。同時(shí)Oracle為程序測(cè)試提供了一個(gè)普通用戶scott,口令管理中,可以對(duì)數(shù)據(jù)庫(kù)用戶設(shè)置密碼,設(shè)置是否鎖定。 Oracle客戶端使用用戶名和密碼登錄Oracle系統(tǒng)后才能對(duì)數(shù)據(jù)庫(kù)操作。圖7 DBCA下的口令管理圖8 為system,sys,scott用戶設(shè)置密碼默認(rèn)的用戶中,SYS和SYSTEM用戶是沒(méi)有鎖定的,安裝成功后可以直接使用,SCOTT用戶默認(rèn)為鎖定狀態(tài),因此不能直接使用,需要把SCOTT用戶設(shè)定為非鎖定狀態(tài)才能正常使用。這一步完成后,Oracle系
11、統(tǒng)安裝成功。Oracle數(shù)據(jù)庫(kù)中,默認(rèn)情況下,所有系統(tǒng)的數(shù)據(jù),SQL關(guān)鍵字等都是大寫(xiě)的,在操作過(guò)程中,Oracle會(huì)自動(dòng)把這些內(nèi)容轉(zhuǎn)換為大寫(xiě),因此用戶操作時(shí)不需考慮大小寫(xiě)問(wèn)題,一般情況下,為了良好的程序風(fēng)格,程序中建議關(guān)鍵字用大寫(xiě),非關(guān)鍵字可以使用小寫(xiě)。3. Oracle客戶端工具Oracle服務(wù)器安裝成功后,就可以通過(guò)客戶端工具連接Oracle服務(wù)器了,可以到Oracle官方下載Oracle專用的客戶端軟件,大多客戶端工具都是基于Oracle客戶端軟件的。接下來(lái)介紹幾種常用的Oracle客戶端工具。² SQL*Plus工具該工具是Oracle系統(tǒng)默認(rèn)安裝下,自帶的一個(gè)客戶端工具。在
12、Windows命令行中輸入“sqlplusw”命令,就能夠啟動(dòng)該工具了。圖9 SQL*Plus工具輸入用戶名和密碼后,如果SQL*Plus與數(shù)據(jù)庫(kù)服務(wù)器在同一臺(tái)計(jì)算機(jī)上,并且當(dāng)前服務(wù)器下只有一個(gè)數(shù)據(jù)庫(kù)實(shí)例,那么“主機(jī)字符串”可以不用填寫(xiě)。SQL*Plus工具雖然是Oracle自帶的工具,但是在現(xiàn)實(shí)開(kāi)發(fā)中,基于該環(huán)境對(duì)開(kāi)發(fā)不方便,因此很少使用。SQL*Plus連接成功后就如圖所示:圖10 SQL*Plus工具登錄后² SQL*Plus命令行工具該命令行工具,提供了與數(shù)據(jù)庫(kù)交互的能力和維護(hù)數(shù)據(jù)庫(kù)的能力,包括了Oracle自帶的SQL*Plus工具的全部功能,在Oracle管理中經(jīng)常使用。
13、在命令行中輸入:“sqlplus /nolog”即可啟動(dòng)該工具。如下圖:圖11 啟動(dòng)SQL*Plus命令行工具輸入“sqlplus /nolog”命令后,只是啟動(dòng)了一個(gè)客戶端進(jìn)程,并沒(méi)有與服務(wù)器連接,連接到Oracle服務(wù)器的命令是:conn 用戶名/密碼 as 連接身份服務(wù)器連接字符串說(shuō)明:1. 連接身份:表示該用戶連接后擁有的權(quán)限。Ø sysdba: 即數(shù)據(jù)庫(kù)管理員,權(quán)限包括:打開(kāi)數(shù)據(jù)庫(kù)服務(wù)器、關(guān)閉數(shù)據(jù)庫(kù)服務(wù)器、備份數(shù)據(jù)庫(kù)、恢復(fù)數(shù)據(jù)庫(kù)、日志歸檔、會(huì)話限制、管理功能、創(chuàng)建數(shù)據(jù)庫(kù)。sys用戶必須用sysdba身份才能登錄,system用戶可以用普通身份登錄。Ø sysyop
14、er:即數(shù)據(jù)庫(kù)操作員,權(quán)限包括:打開(kāi)數(shù)據(jù)庫(kù)服務(wù)器、關(guān)閉數(shù)據(jù)庫(kù)服務(wù)器、備份數(shù)據(jù)庫(kù)、恢復(fù)數(shù)據(jù)庫(kù)、日志歸檔、會(huì)話限制。Ø normal:即普通用戶,權(quán)限只有查詢某些數(shù)據(jù)表的數(shù)據(jù)。默認(rèn)的身份是normal用戶。2. 客戶端工具可以根據(jù)“服務(wù)器連接字符串”對(duì)服務(wù)器進(jìn)行連接,有了連接字符串后客戶端就可以像操作本機(jī)一樣操作遠(yuǎn)程數(shù)據(jù)庫(kù),因此“服務(wù)器連接字符串”的配置也叫本地網(wǎng)絡(luò)服務(wù)配置,如果SQL*Plus工具啟動(dòng)在服務(wù)器上,并且服務(wù)器上只有一個(gè)數(shù)據(jù)庫(kù)實(shí)例的情況下,連接字符串可以缺省,在連接字符串中包括連接服務(wù)器的協(xié)議,服務(wù)器的地址,服務(wù)器的端口等設(shè)置,Oracle服務(wù)名等,該配置文件在Oracle
15、安裝目錄下的: network/ADMIN/ tnsnames.ora。該文件是一個(gè)文本文件,用記事本打開(kāi)后如下所示:圖12 服務(wù)器連接字符串配置² 配置本地網(wǎng)絡(luò)服務(wù)名本地網(wǎng)絡(luò)服務(wù)名,即客戶端與服務(wù)器的連接字符串,本地網(wǎng)絡(luò)服務(wù)名是客戶端的配置,Oracle客戶端安裝后,可以使用客戶端自帶的網(wǎng)絡(luò)配置向?qū)В∟et Configuration Assistant)進(jìn)行配置:1. 啟動(dòng)Net Configuration Assistant。選擇“本地Net服務(wù)名配置”選項(xiàng)。如下圖所示:圖13 啟動(dòng)Net Configuration Assistant2. 選擇“下一步”,本步驟可以對(duì)本地網(wǎng)絡(luò)
16、服務(wù)名進(jìn)行添加,刪除,測(cè)試是否正常連接等操作,選擇“添加”選項(xiàng)。圖14 Net Configuration Assistant3. 點(diǎn)擊“下一步”,填寫(xiě)服務(wù)名,該服務(wù)名就是Oracle安裝時(shí)(圖1),為數(shù)據(jù)庫(kù)取的全局?jǐn)?shù)據(jù)庫(kù)名。圖15 服務(wù)名配置4. 點(diǎn)擊“下一步”,選擇服務(wù)需要的協(xié)議,默認(rèn)是TCP協(xié)議。推薦使用默認(rèn)的TCP協(xié)議。圖16 選擇協(xié)議5. 點(diǎn)擊“下一步”,輸入主機(jī)名,主機(jī)名可以是計(jì)算機(jī)名稱,也可以是一個(gè)IP地址,主機(jī)如果是本機(jī),可以使用本機(jī)計(jì)算機(jī)名稱、“l(fā)ocalhost”、“”、或者本機(jī)的IP地址。圖17 輸入主機(jī)名和端口6. 單擊“下一步”,選擇“是,進(jìn)行測(cè)試”
17、選項(xiàng)。進(jìn)入下圖界面。圖18 測(cè)試成功在測(cè)試時(shí),默認(rèn)采用的用戶名和密碼是system/manager進(jìn)行測(cè)試,如果用戶system的密碼不是“manager”,有可能測(cè)試通不過(guò),更改登錄后,輸入正確的用戶名和密碼后再進(jìn)行測(cè)試即可。7. 測(cè)試成功后,單擊“下一步”,出現(xiàn)如下界面,這一步是為本地網(wǎng)絡(luò)服務(wù)命名,即圖12中的服務(wù)器連接字符串名。圖19 為網(wǎng)絡(luò)服務(wù)名命名點(diǎn)擊“下一步”,配置就完成了,進(jìn)入tnsnames.ora文件中查看,就出現(xiàn)了如圖12中的內(nèi)容。² PL/SQL Developer工具在實(shí)際Oracle開(kāi)發(fā)中,經(jīng)常使用一個(gè)功能強(qiáng)大的第三方工具:“PL/SQL Developer
18、”工具。PL/SQL Developer基本上可以實(shí)現(xiàn)Oracle開(kāi)發(fā)中的任何操作。它運(yùn)行在客戶端時(shí)必須先安裝Oracle客戶端,并且通過(guò)網(wǎng)絡(luò)配置向?qū)渲镁W(wǎng)絡(luò)服務(wù)名后才能正常與服務(wù)器連接。圖20 PL/SQL Developer4. Oracle服務(wù)Oracle在windows中安裝完成后,會(huì)安裝很多服務(wù),下面介紹幾個(gè)主要的服務(wù)。圖21 Oracle服務(wù)Ø OracleService+服務(wù)名,該服務(wù)是數(shù)據(jù)庫(kù)啟動(dòng)的基礎(chǔ),只有該服務(wù)啟動(dòng)了,Oracle數(shù)據(jù)庫(kù)才能正常啟動(dòng)。這是必須啟動(dòng)的服務(wù)。Ø OracleOraDb10g_home1TNSListener,該服務(wù)是服務(wù)器端為客
19、戶端提供的監(jiān)聽(tīng)服務(wù),只有該服務(wù)在服務(wù)器上正常啟動(dòng),客戶端才能連接到服務(wù)器。該監(jiān)聽(tīng)服務(wù)接收客戶端發(fā)出的請(qǐng)求,然后將請(qǐng)求傳遞給數(shù)據(jù)庫(kù)服務(wù)器。一旦建立了連接,客戶端和數(shù)據(jù)庫(kù)服務(wù)器就能直接通信了。Ø OracleOraDb10g_home1iSQL*Plus,該服務(wù)提供了用瀏覽器對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)操作的方式。該服務(wù)啟動(dòng)后,就可以使用瀏覽器進(jìn)行遠(yuǎn)程登錄并進(jìn)行數(shù)據(jù)庫(kù)操作了。如下圖所示:圖22 iSQL*PlusØ OracleDBConsole+服務(wù)名,Oracle10g中的一個(gè)新服務(wù)。在Oracle9i之前,Oracle官方提供了一個(gè)基于圖形界面的企業(yè)管理器(EM),從Oracle10g
20、開(kāi)始,Oracle提供了一個(gè)基于B/S的企業(yè)管理器,在操作系統(tǒng)的命令行中輸入命令:emctl start dbconsole,就可以啟動(dòng)OracleDbConsole服務(wù),如下圖所示:圖23 EM服務(wù)的啟動(dòng)服務(wù)啟動(dòng)之后,就可以在瀏覽器中輸入上圖中進(jìn)入EM的地址,使用B/S方式管理Oracle服務(wù)器。5. Oracle啟動(dòng)和關(guān)閉OracleService啟動(dòng)動(dòng)后,就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理了,Oracle的啟動(dòng)和關(guān)閉是最基本的命令,在SQL*Plus中,啟動(dòng)Oracle必須是sys用戶,命令格式是:startup open圖24 Oracle服務(wù)啟動(dòng)Oracle服務(wù)關(guān)閉用命令:shutdown im
21、mediate圖25 Oracle服務(wù)關(guān)閉6. Oracle用戶和權(quán)限Oracle中,一般不會(huì)輕易在一個(gè)服務(wù)器上創(chuàng)建多個(gè)數(shù)據(jù)庫(kù),在一個(gè)數(shù)據(jù)庫(kù)中,不同的項(xiàng)目由不同的用戶訪問(wèn),每一個(gè)用戶擁有自身創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象,因此用戶的概念在Oracle中非常重要。Oracle的用戶可以用CREATE USER命令來(lái)創(chuàng)建。其語(yǔ)法是:語(yǔ)法結(jié)構(gòu):創(chuàng)建用戶CREATE USER 用戶名 IDENTIFIED BY 口令 ACCOUNT LOCK|UNLOCK語(yǔ)法解析:LOCK|UNLOCK創(chuàng)建用戶時(shí)是否鎖定,默認(rèn)為鎖定狀態(tài)。鎖定的用戶無(wú)法正常的登錄進(jìn)行數(shù)據(jù)庫(kù)操作。代碼演示:創(chuàng)建用戶SQL> CREATE USE
22、R jerry2 IDENTIFIED BY tom3 ACCOUNT UNLOCK;Oracle在SQL*Plus中的命令以分號(hào)(;)結(jié)尾,代表命令完畢并執(zhí)行,系統(tǒng)同時(shí)會(huì)把該命令保存在緩存中,緩存中只保存最近執(zhí)行過(guò)的命令,如果重新執(zhí)行緩存中的命令,直接使用左斜杠符號(hào)(/)。如果命令不以分號(hào)結(jié)尾,該命令只是寫(xiě)入緩存保存起來(lái),但并不執(zhí)行。盡管用戶成功創(chuàng)建,但是還不能正常的登錄Oracle數(shù)據(jù)庫(kù)系統(tǒng),因?yàn)樵撚脩暨€沒(méi)有任何權(quán)限。如果用戶能夠正常登錄,至少需要CREATE SESSION系統(tǒng)權(quán)限。Oracle用戶對(duì)數(shù)據(jù)庫(kù)管理或?qū)ο蟛僮鞯臋?quán)利,分為系統(tǒng)權(quán)限和數(shù)據(jù)庫(kù)對(duì)象權(quán)限。系統(tǒng)權(quán)限比如:CREATE S
23、ESSION,CREATE TABLE等,擁有系統(tǒng)權(quán)限的用戶,允許擁有相應(yīng)的系統(tǒng)操作。數(shù)據(jù)庫(kù)對(duì)象權(quán)限,比如對(duì)表中的數(shù)據(jù)進(jìn)行增刪改操作等,擁有數(shù)據(jù)庫(kù)對(duì)象權(quán)限的用戶可以對(duì)所擁有的對(duì)象進(jìn)行對(duì)應(yīng)的操作。還有一個(gè)概念就是數(shù)據(jù)庫(kù)角色(role),數(shù)據(jù)庫(kù)角色就是若干個(gè)系統(tǒng)權(quán)限的集合。下面介紹幾個(gè)常用角色:Ø CONNECT角色,主要應(yīng)用在臨時(shí)用戶,特別是那些不需要建表的用戶,通常只賦予他們CONNECT role。CONNECT是使用Oracle的簡(jiǎn)單權(quán)限,擁有CONNECT角色的用戶,可以與服務(wù)器建立連接會(huì)話(session,客戶端對(duì)服務(wù)器連接,稱為會(huì)話)。Ø RESOURCE角色,更
24、可靠和正式的數(shù)據(jù)庫(kù)用戶可以授予RESOURCE role。RESOURCE提供給用戶另外的權(quán)限以創(chuàng)建他們自己的表、序列、過(guò)程(procedure)、觸發(fā)器(trigger)、索引(index)等。Ø DBA角色,DBA role擁有所有的系統(tǒng)權(quán)限-包括無(wú)限制的空間限額和給其他用戶授予各種權(quán)限的能力。用戶SYSTEM擁有DBA角色。一般情況下,一個(gè)普通的用戶(如SCOTT),擁有CONNECT和RESOURCE兩個(gè)角色即可進(jìn)行常規(guī)的數(shù)據(jù)庫(kù)開(kāi)發(fā)工作??梢园涯硞€(gè)權(quán)限授予某個(gè)角色,可以把權(quán)限、角色授予某個(gè)用戶。系統(tǒng)權(quán)限只能由DBA用戶授權(quán),對(duì)象權(quán)限由擁有該對(duì)象的用戶授權(quán),授權(quán)語(yǔ)法是: 語(yǔ)法結(jié)
25、構(gòu):授權(quán)GRANT角色|權(quán)限 TO 用戶(角色)代碼演示:授權(quán)SQL> GRANT CONNECT TO jerry;授權(quán)成功。SQL> GRANT RESOURCE TO jerry;授權(quán)成功。SQL>語(yǔ)法結(jié)構(gòu):其他操作/回收權(quán)限REVOKE 角色|權(quán)限 FROM 用戶(角色)/修改用戶的密碼ALTER USER 用戶名 IDENTIFIED BY 新密碼/修改用戶處于鎖定(非鎖定)狀態(tài)ALTER USER 用戶名 ACCOUNT LOCK|UNLOCK7. 本章總結(jié)Ø Oracle是基于對(duì)象的關(guān)系型數(shù)據(jù)庫(kù),Oracle產(chǎn)品免費(fèi),服務(wù)收費(fèi)。Ø Oracl
26、e安裝后默認(rèn)會(huì)有兩個(gè)管理員用戶(system,sys)和一個(gè)普通用戶Scott。Ø Sql*plus是Oracle管理和數(shù)據(jù)操作的客戶端工具。Ø 客戶端鏈接服務(wù)器前,服務(wù)器要啟動(dòng)監(jiān)聽(tīng)服務(wù),并且客戶端工具要安裝Oracle客戶端,并且在客戶端要建立本地網(wǎng)絡(luò)服務(wù)名。Ø Oracle服務(wù)和監(jiān)聽(tīng)啟動(dòng)后才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。Ø 用startup命令啟動(dòng)數(shù)據(jù)庫(kù),用shutdown命令關(guān)閉數(shù)據(jù)庫(kù)。Ø Oracle的角色包括了一系列系統(tǒng)權(quán)限和普通對(duì)象權(quán)限,可以把權(quán)限授權(quán)給角色,把權(quán)限或者角色授權(quán)給用戶。8. 本章練習(xí)1. 描述Oracle安裝過(guò)程中的關(guān)鍵點(diǎn)。2
27、. 描述創(chuàng)建本地網(wǎng)絡(luò)服務(wù)名的步驟。3. 描述Oracle主要服務(wù)的作用。4. Oracle使用什么命令才能啟動(dòng)和關(guān)閉。5. 什么是Oracle權(quán)限和角色?他們的關(guān)系是什么?6. 創(chuàng)建一個(gè)用戶,并授權(quán)CONNECT和RESOURCE。章節(jié)知識(shí)結(jié)構(gòu)圖第2章SQL數(shù)據(jù)操作和查詢主要內(nèi)容ü Oracle數(shù)據(jù)類型ü SQL建表和約束ü SQL對(duì)數(shù)據(jù)增刪改ü SQL查詢ü Oracle偽列1. SQL簡(jiǎn)介在第一學(xué)期的SQL Server學(xué)習(xí)中,已經(jīng)知道,SQL是結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language),專門(mén)用于數(shù)據(jù)存取、數(shù)據(jù)更新
28、及數(shù)據(jù)庫(kù)管理等操作。并且已經(jīng)學(xué)習(xí)了用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)的表進(jìn)行增刪改查的操作。在Oracle開(kāi)發(fā)中,客戶端把SQL語(yǔ)句發(fā)送給服務(wù)器,服務(wù)器對(duì)SQL語(yǔ)句進(jìn)行編譯、執(zhí)行,把執(zhí)行的結(jié)果返回給客戶端。Oracle SQL語(yǔ)句由如下命令組成:Ø 數(shù)據(jù)定義語(yǔ)言(DDL),包括CREATE(創(chuàng)建)命令、ALTER(修改)命令、DROP(刪除)命令等。Ø 數(shù)據(jù)操縱語(yǔ)言(DML),包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(刪除)命令、SELECT FOR UPDATE(查詢)等。Ø 數(shù)據(jù)查詢語(yǔ)言(DQL),包括基本查詢語(yǔ)句、Order By子句、Grou
29、p By子句等。Ø 事務(wù)控制語(yǔ)言(TCL),包括COMMIT(提交)命令、SAVEPOINT(保存點(diǎn))命令、ROLLBACK(回滾)命令。Ø 數(shù)據(jù)控制語(yǔ)言(DCL),GRANT(授權(quán))命令、REVOKE(撤銷(xiāo))命令。目前主流的數(shù)據(jù)庫(kù)產(chǎn)品(比如:SQL Server、Oracle)都支持標(biāo)準(zhǔn)的SQL語(yǔ)句。數(shù)據(jù)定義語(yǔ)言,表的增刪改操作,數(shù)據(jù)的簡(jiǎn)單查詢,事務(wù)的提交和回滾,權(quán)限的授權(quán)和撤銷(xiāo)等,Oracle與SQL Server在操作上基本一致。2. Oracle數(shù)據(jù)類型Oracle數(shù)據(jù)庫(kù)的核心是表,表中的列使用到的常見(jiàn)數(shù)據(jù)類型如下:類型含義CHAR(length)存儲(chǔ)固定長(zhǎng)度的字符
30、串。參數(shù)length指定了長(zhǎng)度,如果存儲(chǔ)的字符串長(zhǎng)度小于length,用空格填充。默認(rèn)長(zhǎng)度是1,最長(zhǎng)不超過(guò)2000字節(jié)。VARCHAR2(length)存儲(chǔ)可變長(zhǎng)度的字符串。length指定了該字符串的最大長(zhǎng)度。默認(rèn)長(zhǎng)度是1,最長(zhǎng)不超過(guò)4000字符。NUMBER(p,s)既可以存儲(chǔ)浮點(diǎn)數(shù),也可以存儲(chǔ)整數(shù),p表示數(shù)字的最大位數(shù)(如果是小數(shù)包括整數(shù)部分和小數(shù)部分和小數(shù)點(diǎn),p默認(rèn)是38為),s是指小數(shù)位數(shù)。DATE存儲(chǔ)日期和時(shí)間,存儲(chǔ)紀(jì)元、4位年、月、日、時(shí)、分、秒,存儲(chǔ)時(shí)間從公元前4712年1月1日到公元后4712年12月31日。TIMESTAMP不但存儲(chǔ)日期的年月日,時(shí)分秒,以及秒后6位,同時(shí)包
31、含時(shí)區(qū)。CLOB存儲(chǔ)大的文本,比如存儲(chǔ)非結(jié)構(gòu)化的XML文檔BLOB存儲(chǔ)二進(jìn)制對(duì)象,如圖形、視頻、聲音等。表1 Oracle的部分?jǐn)?shù)據(jù)類型對(duì)應(yīng)NUMBER類型的示例:格式輸入的數(shù)字實(shí)際的存儲(chǔ)NUMBER1234.5671234.567NUMBER(6,2)123.4567123.46NUMBER(4,2)12345.67輸入的數(shù)字超過(guò)了所指定的精度,數(shù)據(jù)庫(kù)不能存儲(chǔ)表2 Number示例對(duì)于日期類型,可以使用sysdate內(nèi)置函數(shù)可以獲取當(dāng)前的系統(tǒng)日期和時(shí)間,返回DATE類型,用systimestamp函數(shù)可以返回當(dāng)前日期、時(shí)間和時(shí)區(qū)。圖1 sysdate和sysTimestampOracle的查
32、詢中,必須使用“select 列 from 表”的完整語(yǔ)法,當(dāng)查詢單行函數(shù)的時(shí)候,from后面使用DUAL表,dual表在系統(tǒng)中只有一行一列,該表在輸出單行函數(shù)時(shí)為了selectfrom的語(yǔ)法完整性而使用。3. 創(chuàng)建表和約束Oracle創(chuàng)建表同SQL Server一樣,使用CREATE TABLE命令來(lái)完成。創(chuàng)建約束則使用如下命令:語(yǔ)法格式:ALTER TABLE命令 ALTER TABLE 表名 ADD CONSTRAINT 約束名 約束內(nèi)容。不論創(chuàng)建表還是約束,與SQL Server基本相同,注意:在Oracle中default是一個(gè)值,而SQL Server中default是一個(gè)約束,因
33、此Oracle的default設(shè)置可以在建表的時(shí)候創(chuàng)建。案例1:創(chuàng)建一個(gè)學(xué)生信息(INFOS)表和約束代碼演示:Oracle創(chuàng)建表和約束CREATE TABLE INFOS( STUID VARCHAR2(7) NOT NULL, -學(xué)號(hào) 學(xué)號(hào)=S+班號(hào)+2位序號(hào) STUNAME VARCHAR2(10) NOT NULL, -姓名 GENDER VARCHAR2(2) NOT NULL, -性別 AGE NUMBER(2) NOT NULL, -年齡 SEAT NUMBER(2) NOT NULL, -座號(hào) ENROLLDATE DATE, -入學(xué)時(shí)間 STUADDRESS VARCHAR2
34、(50) DEFAULT '地址不詳', -住址 CLASSNO VARCHAR2(4) NOT NULL -班號(hào) 班號(hào)=學(xué)期序號(hào)+班級(jí)序號(hào) )/ ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID) /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER CHECK(GENDER = '男' OR GENDER = '女') /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT CHECK(S
35、EAT >=0 AND SEAT <=50) /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE CHECK(AGE >=0 AND AGE<=100) /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO CHECK(CLASSNO >='1001' AND CLASSNO<='1999') OR (CLASSNO >='2001' AND CLASSNO<='2999') /ALTER TA
36、BLE INFOS ADD CONSTRAINTS UN_STUNAME UNIQUE(STUNAME) /代碼解析: 在Oracle代碼中,“/”執(zhí)行緩存區(qū)中的語(yǔ)句,由于緩沖區(qū)中只存儲(chǔ)一條剛剛保存過(guò)語(yǔ)句,由于每條語(yǔ)句沒(méi)有用分號(hào)結(jié)尾,只是保存在緩沖區(qū),因此每條語(yǔ)句后面都有單獨(dú)一行“/”。 創(chuàng)建一個(gè)主鍵約束。 與 一起創(chuàng)建各種check約束。其中是唯一約束,表示該列值是唯一的,列中的值不能重復(fù)。Oracle中創(chuàng)建外鍵約束與SQL Server相同。比如:現(xiàn)有成績(jī)表定義如下:案例2:創(chuàng)建一個(gè)成績(jī)表(SCORES)表和約束代碼演示:Oracle創(chuàng)建表和約束CREATE TABLE SCORES( I
37、D NUMBER , -ID TERM VARCHAR2(2),-學(xué)期 S1或S2 STUID VARCHAR2(7) NOT NULL,-學(xué)號(hào) EXAMNO VARCHAR2(7) NOT NULL,-考號(hào) E+班號(hào)+序號(hào) WRITTENSCORE NUMBER(4,1) NOT NULL,-筆試成績(jī) LABSCORE NUMBER(4,1) NOT NULL-機(jī)試成績(jī))ALTER TABLE SCORES ADD CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2')/ALTER TABLE SC
38、ORES ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES INFOS(STUID) /代碼解析: SQL Server中可以使用identify創(chuàng)建自動(dòng)增長(zhǎng)列,但是Oracle中的自動(dòng)增長(zhǎng)需要借助序列(Sequence)完成,在后面章節(jié)中講解。 Oracle中的外鍵約束定義。4. 數(shù)據(jù)操縱語(yǔ)言(DML)數(shù)據(jù)操縱語(yǔ)言(DML)用于對(duì)數(shù)據(jù)庫(kù)的表中數(shù)據(jù)進(jìn)行添加、修改、刪除和SELECTFor UPDATE(后面專門(mén)學(xué)習(xí)該查詢)操作。對(duì)比一期學(xué)習(xí)過(guò)的SQL Server操作,接下來(lái)一一介紹在Oracle中的操作。
39、178; 簡(jiǎn)單查詢數(shù)據(jù)查詢是用SELECT命令從數(shù)據(jù)庫(kù)的表中提取信息。SELECT語(yǔ)句的語(yǔ)法是:語(yǔ)法結(jié)構(gòu):簡(jiǎn)單查詢SELECT *|列名|表達(dá)式 FROM 表名 WHERE 條件 ORDER BY 列名語(yǔ)法解析:1. *表示表中的所有列。2. 列名可以選擇若干個(gè)表中的列名,各個(gè)列表中間用逗號(hào)分隔。3. 表達(dá)式可以是列名、函數(shù)、常數(shù)等組成的表達(dá)式。4. WHERE子句是查詢的條件。5. ORDER BY 要求在查詢的結(jié)果中排序,默認(rèn)是升序。圖2 數(shù)據(jù)查詢Oracle中可以把查詢的結(jié)果根據(jù)結(jié)果集中的表結(jié)構(gòu)和數(shù)據(jù)形成一張新表。語(yǔ)法結(jié)構(gòu):根據(jù)結(jié)果集創(chuàng)建表CREATE TABLE 表名 AS SELEC
40、T語(yǔ)句代碼演示:根據(jù)結(jié)果集創(chuàng)建表SQL> CREATE TABLE INFOS1 AS SELECT * FROM INFOS; TABLE CREATED使用上面命令創(chuàng)建的新表中,不存在任何約束,并且把查詢的數(shù)據(jù)一起插入到新表中。如果只復(fù)制表結(jié)構(gòu),只需使查詢的條件不成立(比如where 1=2),就不會(huì)查詢從出任何數(shù)據(jù),從而復(fù)制一個(gè)表結(jié)構(gòu)。代碼演示:復(fù)制表結(jié)構(gòu)SQL> CREATE TABLE INFOS2 AS SELECT * FROM INFOS WHERE 1=2; TABLE CREATED² 數(shù)據(jù)插入用INSERT命令完成對(duì)數(shù)據(jù)的插入。語(yǔ)法結(jié)構(gòu):根據(jù)結(jié)果集創(chuàng)
41、建表INSERT INTO 表名(列名1,列名2) VALUES (值1,值2)語(yǔ)法解析:1. 列名可以省略。當(dāng)省略列名時(shí),默認(rèn)是表中的所有列名,列名順序?yàn)楸矶x中列的先后順序。2. 值的數(shù)量和順序要與列名的數(shù)量和順序一致。值的類型與列名的類型一致。代碼演示:向INFOS表和SCORES表中插入數(shù)據(jù)SQL> INSERT INTO INFOS VALUES ( 2 's100102', '林沖', '男', 22, 2, 3 TO_DATE('2009-8-9 06:30:10',' YYYY-MM-DD HH24:
42、MI:SS '), 4 '西安', '1001' 5 ) 6 /1 row insertedSQL> INSERT INTO INFOS VALUES ('s100104','阮小二','男',26,3,SYSDATE,default,'1001'); 1 row insertedSQL>COMMIT; 代碼解析: 表名后面缺省了列名,默認(rèn)是表Infos中的所有列名,values中的值要與表中列一一對(duì)應(yīng),包括順序和數(shù)據(jù)類型的對(duì)應(yīng)。在SQL*Plus中一條語(yǔ)句可以寫(xiě)在多行,那么從第
43、二行開(kāi)始,sqlplus會(huì)為每一行前面給出行號(hào)。 在Oracle中,日期是國(guó)際化的,不同的區(qū)域安裝的數(shù)據(jù)庫(kù),默認(rèn)的日期格式不同,因此為了程序便于移植,日期的輸入要使用TO_DATE函數(shù)對(duì)日期格式化后輸入,采用格式化字符串對(duì)日期進(jìn)行格式化時(shí),格式化字符串中字符不區(qū)分大小寫(xiě),常見(jiàn)的格式化字符如下:1. yyyy表示四位年份2. mm表示兩位月份,比如3月表示為033. dd表示兩位日期4. hh24表示小時(shí)從0-23,hh12也表示小時(shí)從0-11。5. mi 表示分鐘6. ss表示秒 在遇到存在默認(rèn)值的列時(shí),可以使用default值代替。 commit是把用戶操作(添加、刪除、修改操作)提交,只有
44、提交操作后,數(shù)據(jù)才能真正更新到表中,否則其他用戶無(wú)法查詢到當(dāng)前用戶操作的結(jié)果。在Oracle中,一個(gè)INSERT命令可以把一個(gè)結(jié)果集一次性插入到一張表中。使用的語(yǔ)句是:INSERT INTO 表 SELECT子句,如下示例:代碼演示:INSERT向表中插入一個(gè)結(jié)果集SQL> INSERT INTO INFOS2 SELECT * FROM INFOS; 5 rows inserted 在這種語(yǔ)法下,要求結(jié)果集中每一列的數(shù)據(jù)類型必須與表中的每一列的數(shù)據(jù)類型一致,結(jié)果集中的列的數(shù)量與表中的列的數(shù)量一致。比如表INFOS2,該表的結(jié)構(gòu)與INFO表一樣,那么可以把INFO表中的所有記錄一次性插入
45、到INFOS2表中。Oracle的簡(jiǎn)單查詢和SQL Server一樣都可以在查詢列中使用常量,如圖: 圖3 Select中的常量可以使用剛才的做法,把該結(jié)果集中的數(shù)據(jù)插入到表INFOS中。代碼演示:INSERT向表中插入一個(gè)常量結(jié)果集SQL> INSERT INTO INFOSSELECT 's100106','盧俊義','男',23,5, TO_DATE('2009-8-9 08:00:10','YYYY-MM-DD HH24:MI:SS'), '青龍寺','1001' FR
46、OM DUAL; 1 rows inserted SQL>COMMIT;² 更新數(shù)據(jù)Oracle在表中更新數(shù)據(jù)的語(yǔ)法是:語(yǔ)法結(jié)構(gòu):UPDATE操作UPDATE 表名 SET 列名1=值,列名2=值 WHERE 條件代碼演示:UPDATE操作SQL> UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山東萊蕪' WHERE STUNAME='阮小二' 1 rows updated SQL> commit;² 刪除數(shù)據(jù)Oracle在表中刪除數(shù)據(jù)的語(yǔ)法是:語(yǔ)法結(jié)構(gòu):DELETE
47、操作DELETE FROM表名 WHERE 條件代碼演示:DELETE操作SQL> DELETE FROM INFOS WHERE STUID='s100103' 1 ROW DELETED SQL> COMMIT;² TRUNCATE在數(shù)據(jù)庫(kù)操作中, TRUNCATE命令(是一個(gè)DDL命令)可以把表中的所有數(shù)據(jù)一次性全部刪除,語(yǔ)法是:語(yǔ)法結(jié)構(gòu):TRUNCATETRUNCATE TABLE 表名TRUNCATE和DELETE都能把表中的數(shù)據(jù)全部刪除,他們的區(qū)別是:1. TRUNCATE是DDL命令,刪除的數(shù)據(jù)不能恢復(fù);DELETE命令是DML命令,刪除后的
48、數(shù)據(jù)可以通過(guò)日志文件恢復(fù)。2. 如果一個(gè)表中數(shù)據(jù)記錄很多,TRUNCATE相對(duì)DELETE速度快。由于TRUNCATE命令比較危險(xiǎn),因此在實(shí)際開(kāi)發(fā)中,TRUNCATE命令慎用。Oracle默認(rèn)安裝中,已經(jīng)創(chuàng)建了一個(gè)SCOTT用戶,默認(rèn)密碼是:tiger,該用戶下有四張表分別是:雇員表(EMP),部門(mén)表(DEPT),工資登記表和獎(jiǎng)金表,請(qǐng)參考本章后面的附表。接下來(lái)很多操作都是在該用戶下完成的。5. 操作符Oracle開(kāi)發(fā)中,依然存在算術(shù)運(yùn)算,關(guān)系運(yùn)算,和邏輯運(yùn)算。² 算術(shù)運(yùn)算Oracle中的算術(shù)運(yùn)算符,沒(méi)有C#中的算術(shù)運(yùn)算符豐富,只有+、-、*、/四個(gè),其中除號(hào)(/)的結(jié)果是浮點(diǎn)數(shù)。求
49、余運(yùn)算只能借助函數(shù):MOD(x,y):返回x除以y的余數(shù)。案例3:每名員工年終獎(jiǎng)是2000元,請(qǐng)顯示基本工資在2000元以上的員工的月工資,年總工資。該案例的表請(qǐng)參見(jiàn)本章練習(xí)的附表1、附表2、附表3,這三張表是ORACLE 10g自帶的。代碼演示:查詢中的算術(shù)運(yùn)算SQL> SELECT ENAME,SAL,(SAL*12+2000) FROM EMP WHERE SAL>2000; ENAME SAL (SAL*12+2000) JONES 2975 37700 BLAKE 2850 36200 CLARK 2450 31400 SCOTT 3000 38000 KING 5000
50、 62000 FORD 3000 380006 rows selected² 關(guān)系運(yùn)算和邏輯運(yùn)算Oracle中Where子句經(jīng)中經(jīng)常見(jiàn)到關(guān)系運(yùn)算和邏輯運(yùn)算,常見(jiàn)的關(guān)系運(yùn)算有:運(yùn)算符說(shuō)明運(yùn)算符說(shuō)明=等于 >大于<>或者!=不等于<=小于或者等于<小于>=大于或者等于表3 Oracle的關(guān)系運(yùn)算符邏輯運(yùn)算符有三個(gè):AND、OR、NOT關(guān)系運(yùn)算和邏輯運(yùn)算與前面SQL Server學(xué)習(xí)過(guò)的一致。² 字符串連接操作符(|)在Oracle中,字符串的連接用雙豎線(|)表示。比如,在EMP表中,查詢工資在2000元以上的姓名以及工作。代碼演示:字符串連
51、接SQL> SELECT (ENAME | 'is a ' | JOB) AS "Employee Details" 2 FROM EMP 3 WHERE SAL>2000; Employee Details-JONESis a MANAGERBLAKEis a MANAGERCLARKis a MANAGERSCOTTis a ANALYSTKINGis a PRESIDENTFORDis a ANALYST 6 rows selected代碼解析: Oracle中字符串可以用單引號(hào),也可以用雙引號(hào),在別名中存在空格時(shí),必須用雙引號(hào)。在表名、列
52、名時(shí)用雙引號(hào)。6. 高級(jí)查詢?cè)诘谝黄趯W(xué)習(xí)過(guò)SQL的簡(jiǎn)單查詢和連接查詢?,F(xiàn)在學(xué)習(xí)一些新的SQL操作符。² 消除重復(fù)行在Oracle查詢中結(jié)果中,可能出現(xiàn)若干行相同的情況,那么可以使用DISTINCT消除重復(fù)行。具體的用法如示例:代碼演示:DISTINCT消除重復(fù)行SQL> SELECT DISTINCT DEPTNO FROM EMP; DEPTNO- 30 20 10² NULL操作如果某條記錄中有缺少的數(shù)據(jù)值,就是空值(NULL值)。空值不等于0或者空格,空值是指未賦值、未知或不可用的值。任何數(shù)據(jù)類型的列都可以包括NULL值,除非該列被定義為非空或者主鍵。代碼演示:
53、EMP中的NULL值SQL> SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE SAL<2000;ENAME JOB SAL COMM SMITH CLERK 800 ALLEN SALESMAN 1600 300 WARD SALESMAN 1250 500 MARTIN SALESMAN 1250 1400 TURNER SALESMAN 1500 0 ADAMS CLERK 1100 JAMES CLERK 950 7 rows selected在查詢條件中NULL值用IS NULL作條件,非NULL值
54、用NOT IS NULL做條件。案例4:查詢EMP表中沒(méi)有發(fā)獎(jiǎng)金的員工。代碼演示:NULL值查詢SQL> SELECT ENAME,JOB,SAL,COMM FROM EMP 2 WHERE SAL<2000 AND COMM IS NULL; ENAME JOB SAL COMM SMITH CLERK 800 ADAMS CLERK 1100 JAMES CLERK 950 MILLER CLERK 1300 ² IN 操作在Where子句中可以使用IN操作符來(lái)查詢其列值在指定的列表中的行。比如:查詢出工作職責(zé)是SALESMA
55、N、PRESIDENT或者ANALYST的員工。條件有兩種表示方法:1. WHERE job = 'SALESMAN ' OR job = 'PRESIDENT ' OR job = 'ANALYST '2. WHERE job IN ('SALESMAN', 'PRESIDENT', 'ANALYST')代碼演示:IN操作SQL> SELECT ENAME,JOB,SAL FROM EMP 2 WHERE job IN ('SALESMAN', 'PRESIDENT', 'ANALYST');ENAME JOB SAL ALLEN SALESMAN 1600 WARD SALESMAN 1250 MARTIN SALESMAN 1250 SCOTT ANALYST 3000 KING PRESIDENT 5000 TURNER SALE
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《小英雄雨來(lái)》觀后感(合集15篇)
- 年產(chǎn)200噸醫(yī)藥中間體項(xiàng)目可行性研究報(bào)告(模板范文)
- 家醫(yī)上門(mén)服務(wù)的政策支持與執(zhí)行策略
- 海洋科技創(chuàng)新的發(fā)展框架與路徑
- 新疆烏魯木齊市實(shí)驗(yàn)學(xué)校2023-2024學(xué)年高三上學(xué)期1月月考生物含解析
- 小學(xué)均衡發(fā)展教育班會(huì)
- 珠海藝術(shù)職業(yè)學(xué)院《計(jì)算機(jī)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 皖江工學(xué)院《廣告策劃與制作》2023-2024學(xué)年第二學(xué)期期末試卷
- 心理學(xué)知識(shí)普及課件
- 開(kāi)封職業(yè)學(xué)院《分離工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 高熱的中醫(yī)護(hù)理
- 軟包電池安全防護(hù)技術(shù)-全面剖析
- 部門(mén)工作目標(biāo)管理制度
- 9.1日益完善的法律體系 課件 -2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 鍍錫銅合金線總體規(guī)模、主要生產(chǎn)商、主要地區(qū)、產(chǎn)品和應(yīng)用細(xì)分研究報(bào)告
- 2025年04月中國(guó)熱帶農(nóng)業(yè)科學(xué)院橡膠研究所第一批公開(kāi)招聘16人(第1號(hào))筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 寶寶便秘的健康宣教
- 2025 年江蘇蘇州化學(xué)中考模擬練習(xí)卷
- 全媒體運(yùn)營(yíng)師數(shù)據(jù)分析考題
- 2025-2030中國(guó)玻璃纖維混凝土行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 上海市建筑工程質(zhì)量竣工資料ABCD冊(cè)教學(xué)提綱
評(píng)論
0/150
提交評(píng)論