【正文】
Oracle的歷史? Oracle 公司( 甲骨文 ) 創(chuàng)始人 : Larry Ellison 32歲,公司提供數(shù)據(jù)庫服務(wù).? 公司成立于 1977 年, 83 年公司更名為 Oracle ,原名為”軟件開發(fā)實驗室”.? Oracle 數(shù)據(jù)庫適用于大型企業(yè)? 競爭對手– 微軟的SQLServer– IBM 的DB2? 目前的版本– ~ , , 8i , 9i , 10gOracle的服務(wù):我的電腦右鍵選擇管理服務(wù)和應(yīng)用程序—服務(wù)OracleServerORACLE_SID數(shù)據(jù)庫服務(wù),OracleHOME_NAMETNSListener監(jiān)聽器服務(wù),、1526OracleDBConsoleORACLE_SID對應(yīng)用于OEMOracleHOME_NAMEiSQL*Plus對于于iSQL*PlusORACLE_SID是數(shù)據(jù)庫或例程的系統(tǒng)標(biāo)識符HOME_NAME是Oracle主目錄名稱這幾個服務(wù)之間的關(guān)系:啟動順序:OracleHOME_NAMETNSListener必須啟動 OracleServerORACLE_SID必須啟動 OracleDBConsoleORACLE_SID啟動依賴于OracleServerORACLE_SIDSqlPlus SqlPlus是Oracle任何版本都自帶的數(shù)據(jù)庫操作工具,使用它可以完成大部分的數(shù)據(jù)庫操作。 SqlPlus可以“開始224。程序224。Oracle”啟動,也可以命令行啟動(互動) sqlplus 用戶名/密碼@orcl 或 sqlplus 用戶名@orcl 如果用戶是管理員要在sqlplus 用戶名/密碼@主機字符串 as sysdba “/”是用戶名和密碼分隔符號 “@”是密碼和數(shù)據(jù)庫的分隔符號 “orcl”是數(shù)據(jù)庫的名稱,在安裝時指定常用命令(互動)connect 切換用戶show user 顯示當(dāng)前用戶set linesize 1000 設(shè)置行顯示長度set pagesize 1000 設(shè)置分頁長度desc dept 查看表結(jié)構(gòu) select table_name from user_tables查詢當(dāng)前用戶的表/ 運行上一條SQL語句 clear screen 清除屏幕edit 編輯spool d:/a 保存輸出結(jié)果到某個位置spool off 保存結(jié)束quit 退出list 查看最后一條語句@ 運行外部文件中的SQL語句Sql*plus的常用命令是一個oracle提供的工具,使用此工具可以完成數(shù)據(jù)庫的操作和管理。SQL*Plus有兩種工作方式: 基于圖形界面的sqlplusw 基于命令行的sqlplusSql*plus 中可以執(zhí)行3種類型的命令: SQL語句SELECT * FROM tab。 PL/SQL語句CREATE TABLE test(x number,info varchar(20))。Commit。編寫一個存儲過程,向test表中插入20條記錄。DECLARE x number :=10。BEGIN FOR I IN 1..20 LOOP INSERT INTO test VALUES (x,’測試數(shù)據(jù)’)。 x=x+i。 END LOOP。END。 SQL*Plus內(nèi)部命令這些命令用于設(shè)置SQL*Plus的環(huán)境或格式化輸出結(jié)果。例如:改變EMP表里SAL列的輸出格式COLUMN SAL FORMAT $99,99 HEADING ‘薪水’;使用SQL*Plus可以執(zhí)行操作系統(tǒng)本身的命令:例如:HOST 。 退出SQL*Plus返回操作系統(tǒng):EXIT (QUIT) 幫助提示:HELP SETHELP @HELP ED清除屏幕:CLEAR SRCSQL*Plus編輯命令命令縮寫作用APPEND textA text將text加到當(dāng)前行末端CHANGE /old/newC /old/new將當(dāng)前行中的old改為newCHANGE /textC /text從當(dāng)前行中刪除textCLEAR BUFFERCL BUFF清除全部行DEL刪除當(dāng)前行INPUT I加入一行或多行INPUT textI text加入由text組成的行LISTL列出緩沖區(qū)中的全部行LIST nL n或 n列出n行LIST lastL last列出最后一行LIST m nL m n列出m到n行運行緩沖區(qū)的命令:RUN 或/:SAVE f:test:EDIT 文件名;在SQL文件中的注釋有3種方法:使用SQL*Plus的REMARK命令;使用SQL注釋分界符/*......*/使用ANSI/SQL的“”型注釋讀取命令文件在SQL*PLUS中:GET f:\:START或@,@使用更多建議:盡量使用記事本編寫代碼,這樣有利于修改。所需要的表在所有的講解中所要使用到的表全部都是scott用戶下的表,所以必須了解在此用戶下有那幾張表,以及每張表的作用是什么。避免出現(xiàn)漢字,因為實際開發(fā)中容易出現(xiàn)亂碼問題。雇員表(emp) 雇員表中記錄的是一個個的雇員的基本信息。雇員表(EMP) No. 字段類型 描述 1 EMPNO NUMBER(4) 表示雇員編號,是唯一編號2 ENAME VARCHAR2(10) 表示雇員姓名3 JOB VARCHAR2(9) 表示工作職位4 MGR NUMBER(4) 表示一個雇員的領(lǐng)導(dǎo)編號5 HIREDATE DATE 表示雇傭日期6 SAL NUMBER(7,2) 表示月薪,工資7 COMM NUMBER(7,2) 表示獎金,或者稱為傭金8 DEPTNO NUMBER(2) 部門編號部門表(dept) 表示一個個具體的部門信息 部門表(dept) No. 字段類型 描述 1 DEPTNO NUMBER(2) 部門編號,是唯一編號2 DNAME VARCHAR2(14) 部門名稱3 LOC VARCHAR2(13) 部門位置工資等級表(SALGRADE)一個公司工資是有等級制度,那么用此表表示一個工資的等級 工資等級表(SALGRADE) No. 字段類型 描述 1 GRADE NUMBER 等級名稱2 LOSAL NUMBER 此等級的最低工資3 HISAL NUMBER 此等級的最高工資獎金表(BONUS) 表示的是一個雇員的工資及獎金獎金表(BONUS) No. 字段類型 描述 1 ENAME VARCHAR2(10) 雇員姓名2 JOB VARCHAR2(9) 雇員工作3 SAL NUMBER 雇員工資4 COMM NUMBER 雇員獎金(傭金) 范例:查詢每月可以得到獎金的雇員信息 獎金是m字段 只要字段中存在內(nèi)容,則表示此內(nèi)容不為空(null),如果存在內(nèi)容,則會顯示具體的值。 不為空的表示:字段 IS NOT NULLSELECT * FROM emp WHERE m IS NOT NULL 。 范例:查詢沒有獎金的雇員 沒有獎金則m字段的內(nèi)容肯定是null,格式:字段 IS NULLSELECT * FROM emp WHERE m IS NULL 。 范例:要求查詢出,基本工資大于1500,同時可以領(lǐng)取獎金的雇員信息。 此時應(yīng)該是兩個條件,而且兩個條件必須同時滿足 既然要求兩個條件全部滿足,則必須使用AND操作符進行條件的連接。SELECT * FROM emp WHERE sal1500 AND m IS NOT NULL 。 同時指定了兩個條件,兩個條件必須同時滿足才可以查詢出結(jié)果。 范例:要求查詢出,基本工資大于1500,或者可以領(lǐng)取獎金的雇員信息。 如果要表現(xiàn)出或者的概念使用OR進行連接,表示兩個條件有一個滿足即可。SELECT * FROM emp WHERE sal1500 OR m IS NOT NULL 。 之前使用NOT可以取反,把真的條件變?yōu)榧俚?,假的變?yōu)檎娴摹7独阂蟛樵兂?,基本工資不大于1500,同時不可以領(lǐng)取獎金的雇員信息。 此時相當(dāng)于是整體的條件取反。SELECT * FROM emp WHERE NOT (sal1500 OR m IS NOT NULL)。 等價于SELECT * FROM emp WHERE sal=1500 and m is null。從程序中可以發(fā)現(xiàn),通過括號表示一組的條件。 范例:查詢基本工資大于1500,但是小于3000 的全部雇員信息。 滿足兩個:sal 1500 ,sal 3000 SELECT * FROM emp WHERE sal1500 AND sal3000。在SQL語法中,提供了一個專門的指定范圍查詢的過濾語句:BETWEEN…AND… 語法格式: 字段 BETWEEN 最小值 AND 最大值例:使用BETWEEN…AND修改之前的操作SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000。實際上BETWEEN … AND操作等價:sal=1500 AND sal=3000,包含了等于的功能。范例:查詢出在1981年雇傭的全部雇員信息 1981年1月1日 ~ 1981年12月31日之間雇傭的雇員 日期表示的時候要加“39。”SELECT * FROM emp WHERE hiredate BETWEEN 39。11月 8139。 AND 39。3112月8139。 。 結(jié)論:BETWEEN … AND查詢除了可以支持數(shù)字之外,也可以支持日期的查詢 隨著深入的學(xué)習(xí)會發(fā)現(xiàn),日期實際上也是以數(shù)字的形式表示出來。范例:要求查詢出姓名是smith的雇員信息 此時告訴了要查詢的名字,條件:ename=39。smith39。 SELECT * FROM emp WHERE ename=39。smith39。 。 執(zhí)行以上的查詢語句之后,并不會返回查詢結(jié)果,再次查詢數(shù)據(jù)庫表的信息,發(fā)現(xiàn)smith是采用大寫的形式表示的,在Oracle中是對大小寫敏感的,所以此時在查詢的時候必須以大寫的形式進行條件的編寫。代碼修改如下:SELECT * FROM emp WHERE ename=39。SMITH39。 。 范例:要求查詢出雇員編號是7367497521的雇員的具體信息 如果此時按照之前的做法,則設(shè)置條件要使用OR連接: empno=7369 OR empno=7499 OR empno=7521SELECT * FROM emp WHERE empno=7369 OR empno=7499 OR empno=7521 。 實際上,此時是指定了查詢的范圍,那么既然有范圍了在SQL語法中就可以使用IN操作符完成。語法格式:字段 IN (值1,值2,…..,值n) 如果現(xiàn)在要求查詢的內(nèi)容不在此范圍之中,則可以使用NOT IN,語法如下:字段 NOT IN (值1,值2,…..,值n) 范例:使用以上的格式進行修改 SELECT * FRO