*注:此筆記爲個人在學習Oracle時從教學視頻、參考書上摘錄整理而成,純手打完成,如需轉載麻煩表明出處,附上鍊接(http://blog.csdn.net/sherkyoung/article/details/25987601),謝謝!
一、服務
1、Oracle服務有很多,最重要的有兩個:OracleOraDb11g_home1TNSListener和OracleServiceORCL。
2、由於服務衆多,如果全部默認自動啓動的話會導致開機非常的緩慢,而且有些服務並不是經常或者必須要用,可以改爲手動啓動以緩解開機壓力。
3、OracleServiceORCL服務是oracle的主服務比較大而且最好設爲自動啓動。
4、OracleOraDb11g_home1TNSListener服務是oracle的監聽服務也是必須開啓的。
5、監聽服務很容易出錯,主要在於兩方面:註冊表的誤操作和網絡環境的變更。
6、註冊表誤操作主要指的是使用系統優化軟件,優化軟件將註冊表清空,導致服務無法開啓。
7、網絡環境的變更主要指的是計算機名的改變,在oracle 10g之前在修改主機名生效後,監聽五服務就會無法正常啓動(11g以後會自動識別)。這種時候就需要進行手動配置了,修改listener.ora和s=tnsnames.ora兩個配置文件,將文件中的HOST=[原主機名]修改成現主機名即可。
8、需要外部程序訪問數據庫的時候要進行網絡管理配置,打開Oracle自帶的Oracle Net Manager軟件可進行設置,Oracle Net設置->本地->監聽程序->數據庫服務->添加數據庫然後修改數據庫的全局數據庫名和SID即可(需與本地數據庫同名?)
二、工具
1、數據庫操作的命令用sqlplus完成,sqlplus的兩種形式:sqlplus.exe純命令行模式和sqlplus w帶窗口的操作環境(較爲常用)。
2、在登錄的時候可以選擇主機字符串,在sqlplus命令行操作中是默認選擇爲空。當有多個數據庫的時候,就要選擇相應的數據庫的主機字符串(即數該數據庫名稱)。
3、在sqlplus中操作數據庫既可以直接敲響應命令直接執行,也可以使用ed和@來執行命令。
4、@執行本地硬盤中的程序文件需要在@後加上完整的路徑(包括後綴名)。但是如果文件的後綴名是.sql的話可以省略。
5、登錄用戶切換命令:conn 用戶名/密碼_on_install [as sysdba]
方括號內的命令可以省略,指定爲操作者身份還是管理員身份。
6、每一張表都有其所屬於的用戶。所以當前用戶要訪問其他用戶的表就必須加上完整的表名稱——用戶名.表明稱(或者:模式名.表名稱)如:select * from scott.emp ;
7、使用超級管理賬戶可以手動控制數據庫實例的打開和關閉。
a) shutdown immediate;
執行這個命令就會關閉數據庫實例,此時關閉sqlplus之後再打開就已無法登錄到數據庫了(所有帳號都是)
b) startup;
啓動數據庫實例,這裏發生了點小插曲……按照MLDN視頻教程上所說,輸入用戶名爲:/nolog,需密碼進行登錄。但是我愛sqlplus命令行界面下無法登錄。後採用了一下方法成功啓動數據庫實例:win+R運行快速啓動,輸入:sqlplus /nolog這樣子就可以直接登錄了,然後切換到sys用戶運行startup命令即可。
8、sqlplus可以通過host命令作爲前綴調用本機的操作系統命令,如:
Host copy d:\demo.sql d:\hello.txt ;
9、格式化命令:
設置命令行窗口每行顯示記錄的長度:set linesize 300 ;
設置命令行窗口顯示的記錄長度:set pagesize 30 ;
三、總結
1、數據庫的安裝
2、數據庫的賬戶(常見):[密碼約定成俗]
|-sys/change_on_install |-sys/oracle
|-system/manager |-sys/oracle
|-scott/tiger |-scott/oracle
|-sh/sh (無特殊規定) |-無
3、sqlplus操作
4、監聽服務的錯錯誤
四、SQL語法
SCOTT用戶下的表結構
1、在Oracle學習之中重點使用的是SQL語句,本次學習中主要都是scott用戶下進行,該用戶下有4張表:BONUS、DEPT、EMP、SALGRADE
2、查看錶的結構
DESC EMP ;
3、部門表:dept
NO. |
名稱 |
類型 |
描述 |
1 |
DEPTNO |
NUMBER(2) |
表示部門編號由兩個數字組成 |
2 |
DNAME |
VARCHAR2(14) |
表示部門字符最多由14個字符組成 |
3 |
LOC |
VARCHAR2(13) |
部門所在的位置 |
4、僱員表
NO. |
名稱 |
類型 |
描述 |
1 |
EMPNO |
NUMBER(4) |
表示僱員的編號由4未數字組成 |
2 |
ENAME |
VARCHAR2(10) |
表示僱員的姓名又10位組成 |
3 |
JOB |
VARCHAR2(9) |
僱員的職位最多9個字符 |
4 |
MGR |
NUMBER(4) |
僱員對應的領導編號 |
5 |
HIREDATE |
DATE |
僱員被僱傭的日期 |
6 |
SAL |
NUMBER(7,2) |
基本工資,其中有2爲小數5位整數 |
7 |
COMM |
NUMBER(7,2) |
獎金(佣金銷售纔有) |
8 |
DEPTNO |
NUMBER |
僱員所在的部門編號 |
5、工資等級表
NO. |
名稱 |
類型 |
描述 |
1 |
GRADE |
NUMBER |
工資的等級 |
2 |
LOSAL |
NUMBER |
此等級的最低工資 |
3 |
HISAL |
NUMBER |
此等級的最高 |
6、工資表(類似於工資條暫時用不到)
NO. |
名稱 |
類型 |
描述 |
1 |
ENAME |
VARCHAR2(10) |
僱員姓名 |
2 |
JOB |
VARCHAR2(9) |
僱員工作 |
3 |
SAL |
NUMBER |
僱員工資 |
4 |
COMM |
NUMBER |
僱員獎金 |
查詢
1、簡單查詢
Oracle是時間上最早採用SQL語句的的數據庫。
SQL語言功能強大,分爲一下3組:
A)DML(數據操作語言) ——用於檢索或修改數據
B)DDL(數據定義語言) ——用於定義數據的結構,如創建、修改或刪除數據庫對象
C)DCL(數據控制語句) ——用於定義數據庫用戶權限
簡單查詢表示查詢表內所有數據
2、在簡單查詢中可以進行四則運算;
3、DISTINCT可去掉重複記錄:
SELECT DISTINCT job FROM emo ;
4、別名
在進行簡單查詢的時候,顯示結果列的上方出現的是運算式,,可以通過設置別名來替換。
SELECT ename,sal,comm,sal*12 FROM emp ;
SELECT ename,sal,comm,sal*12 income FROM emp ;
此時就會顯示出自定義的別名而不是sal*12(儘量避免使用中文)
5、在簡單查詢中也常用||鏈接查詢字段
SELECT empn||’,’||ename||’,’||job FROM emp ;
在SQL語句中‘,’屬於原樣輸出符,需要用‘’括出來。‘’表示是字符串。
限定查詢
在之前的簡單查詢之中,是將所有的記錄進行顯示,但也可以對顯示的記錄進行過濾操作,這就是先定查詢。
1、限定查詢就是在之前查詢的基礎上增加了一個WERE子句,用於指定限定條件,此時語法如下:
SELECT [DISTNCT] *|字段 [別名] [,字段 [別名]]
FROM 表名稱[別名]
[WHERE 條件(s)] ;
在WHERE子句之後可以添加多個條件,最常見的條件就是基本的關係運算:> ,>=, <, <=, |=, BETWEEN...AND, LIKE, IN, IS NULL, AND, OR, NOT ;
2、範圍判斷:BETWEEN...AND...
a) 查詢基本工資在1500AND3000之間:SELECT * FROM WHERE sal BETWEEN 1500 AND 3000 ;
b) 求反操作:SELECT * FROM emp WHERE NOT sal BETWEEN 1500 AND 3000 ;
c) 對日期進行操作:SELECT * FROM emp WHERE hiredate BETWEEN ‘01-1月-81’ AND ‘31-12月-81’ ;
3、判斷是否爲空:IS(NOT)NULL
使用次愈發可以判斷某個一字段的內容事都是“null”,但是null和數字0和空字符串不不同的概念。
4、指定範圍的判斷:IN操作符
IN操作符表示指定一個查詢範圍。如:查詢僱員編號是7369、7566、7799的僱員信息。
SELECT * FROM emp WHERE empno IN(7369,7566,7799) ;
上述代碼表示在三個編號中選擇,NOT IN表示不再此範圍內。注意,在IN操作符中存在null,不影響最後結果,但是在NOT IN中,如果可選範圍中含有null值則結果是無任何返回值,NOT IN中出現null表示的就是查詢全部數據。
5、模糊查:LIKE子句
LIKE子句的功能是提供了模糊查找的操作,例如:某些程序上的搜索操作,都屬於LIKE子句的實現。但是搜索引擎的查詢不會死LIKE。LIKE只會在要求性能不高的情況下使用。
匹配符:|-匹配單個字符:_
|-匹配任意多個字符:%
SELECT * FROM emp WHERE ename LIKE ‘A%’ ;——查詢僱員名字首字母爲A的全部信息
6、數據排序
語法如下:
SELECT [DISTNCT] *|字段 [別名] [,字段 [別名]]
FROM 表名稱[別名]
[WHERE 條件(s)]
[ORDER BY字段[ASC | DESC]][,字段[ASC | DESC]];
“ORDER BY”子句寫在所有的SQL語句的最後。
|-排序的時候可以指定多個排序字段
|-排序的方式有兩種:
升序(ASC):默認,不寫也是升序;
降序(DESC):用戶需要指定,由大到小排序。
SELECT * FROM emp ORDER BY sal ;
單行函數
1、概念
雖然各個數據庫都是支持SQL語句的,但是每一個數據庫都有自己所支持的操作函數,這就是單行函數。
2、分類
單行函數分爲以下5類:字符函數、數字函數、日期函數、轉換函數、通用函數。
3、字符函數主要進行字符串的操作,例如:
UPPER(字符串|列):將輸入的字符串變成大寫返回
LOWER(字符串|列):將輸入的字符串變成小寫返回
INITCAP(字符串|列):開頭首字母大寫
LENGTH(字符串|列):求出字符串的長度
REPLACE(字符串|列):替換
SUBSTR(字符串|列,開始點[,結束點]):字符串截取
4、oracle中要求必須編寫完整的SQL語句,所以在Oracle中爲了用戶查詢的方便,提供了一個“dual”的虛擬表。
5、Q:SUBSTR()函數截取字符串的時候,下標是從0還是1開始的?
A:在Oracle數據庫之中,SUBSTR()函數從0或1開始都是一樣的;
同時該函數也可以設置爲負數,便是由後向前指定截取開始點。
6、數字函數對數字進行操作,例如:
ROUND(數字|列[,保留的小數的位數]):四捨五入;
TRUNC(數字|列[,保留的小數點位數]):捨棄指定位置的內容;
MOD(數字1,數字2):取模,取餘數
7、日期函數是對日期進行的操作,例如:
查詢當前的系統時間: SELECT SYSDATE FROM dual;
可以進行的操作:日期+數字、日期-數字、日期-日期
8、日期操作的函數:
LAST_DAY(日期):求出指定日期所在月份的最後一天 ;
NEXT_DAY(日期,星期數):求出下一個指定星期X的日期;
ADD_MONTHS(日期,星期數):求出若干個月之後的日期;
MONTHS_BETWEEN(日期1,日期2):求出兩個日期之間經歷的月份
轉換函數
1、概念
Oracle的三種數據:數字(NUMBER)、字符串(VARCHAR)、日期(DATE);轉換函數主要功能是完成幾種數據之間的相互轉換操作
2、分類
TO_CHAR(字符串|列,格式字符串):將日期或是數字變爲字符串顯示;
TO_DATE(字符串,格式字符串):將字符串變爲DATE數據顯示;
TO_NUMBER(字符串):將字符串變爲數字顯示。
3、TO_CHAR函數
當查詢系統時間時,輸入:SELECT SYSDATE FROM dual ;
回顯:
會按照“日-月-年的格式回顯”,可以使用TO_CHAR()函數改變格式:
SELECT TO_CHAR(SYSDATE ,’yyy-mm-dd’) FROM dual ;
同樣,也可以單獨進行拆分:
SELECT TO_CHAR(SYSDATE ,’yyyy’) FROM dual ;
SELECT TO_CHAR(SYSDATE ,’mm’) FROM dual ;
SELECT TO_CHAR(SYSDATE ,’dd’) FROM dual ;
但這樣顯示也還會有一個問題:前導0.此時加入fm標記即可(即’fmyyyy-mm-dd’)。
4、時間
Oracle中DATE裏面是包含時間的,但在默認情況下是不現實的,可以通過添加下面的標記實現:
SELECT TO_CHAR (SYSDATE’yyyy-mm-dd hh24:mi:ss’) FROM dual ;
其中,24表示24小時制,去掉則變爲12小時制。
5、TO_CAHR對數字格式化
SELECT TO_CHAR(1234567890,’L999,999,999,999,999,999,999,999’) FROM dual ;
其中L是LOCALE,表示當前語言環境下的貨幣符號。
6、TO_DATE()函數
SELECT TO_DATE(‘1989-09-12’,’yyyy-mm-dd’) FROM dual ;
一般只在更新數據庫時使用。
7、TO_NUMBER()函數
基本無用,Oracle自動實現。
通用函數(核心)
通用函數有兩個:NVL()、DECODE()。
1、NVL()函數處理null
NVL是專門處理null的函數,下面是將null變爲‘0’
SELECT ename,sal,comm,(sal+NVL(comm,0))*12,NVL(comm,0) FROM dual ;
2、DECODE()函數:多數值判斷
DECODE()函數非常類似於程序中的if,else語句但是DECODE()函數判斷的是數值而不是邏輯語句。
DECODE()函數的語法如下:
DECODE(數值|列,判斷值1,顯示值1,判斷值2,顯示值2,判斷值3,顯示值3,……)
判斷值與顯示值要成對出現。
總結
1、SQL語句的基本格式,基本語法的:SELECT、FROM、WHERE、ORDER BY的關係;
2、SCOTT用戶下的所有的數據表信息,包括列的名稱,作用及使用類型;
3、Orcale中的幾個單行函數。