Oracle11g學習筆記一

*注:此筆記爲個人在學習Oracle時從教學視頻、參考書上摘錄整理而成,純手打完成,如需轉載麻煩表明出處,附上鍊接(http://blog.csdn.net/sherkyoung/article/details/25987601),謝謝!


一、服務

1、Oracle服務有很多,最重要的有兩個:OracleOraDb11g_home1TNSListenerOracleServiceORCL

 

2、由於服務衆多,如果全部默認自動啓動的話會導致開機非常的緩慢,而且有些服務並不是經常或者必須要用,可以改爲手動啓動以緩解開機壓力。

 

3、OracleServiceORCL服務是oracle的主服務比較大而且最好設爲自動啓動。

 

4、OracleOraDb11g_home1TNSListener服務是oracle的監聽服務也是必須開啓的。

 

5、監聽服務很容易出錯,主要在於兩方面:註冊表的誤操作和網絡環境的變更。

 

6、註冊表誤操作主要指的是使用系統優化軟件,優化軟件將註冊表清空,導致服務無法開啓。

 

7、網絡環境的變更主要指的是計算機名的改變,在oracle 10g之前在修改主機名生效後,監聽五服務就會無法正常啓動(11g以後會自動識別)。這種時候就需要進行手動配置了,修改listener.oras=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張表:BONUSDEPTEMPSALGRADE

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、判斷是否爲空:ISNOTNULL

使用次愈發可以判斷某個一字段的內容事都是“null”,但是null和數字0和空字符串不不同的概念。

 

4、指定範圍的判斷:IN操作符

IN操作符表示指定一個查詢範圍。如:查詢僱員編號是736975667799的僱員信息。

SELECT * FROM emp WHERE empno IN(7369,7566,7799) ;

上述代碼表示在三個編號中選擇,NOT IN表示不再此範圍內。注意,在IN操作符中存在null,不影響最後結果,但是在NOT IN中,如果可選範圍中含有null值則結果是無任何返回值,NOT IN中出現null表示的就是查詢全部數據。

 

5、模糊查:LIKE子句

LIKE子句的功能是提供了模糊查找的操作,例如:某些程序上的搜索操作,都屬於LIKE子句的實現。但是搜索引擎的查詢不會死LIKELIKE只會在要求性能不高的情況下使用。

匹配符:|-匹配單個字符:

|-匹配任意多個字符:%

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、QSUBSTR()函數截取字符串的時候,下標是從0還是1開始的?

A:在Oracle數據庫之中,SUBSTR()函數從01開始都是一樣的;

同時該函數也可以設置爲負數,便是由後向前指定截取開始點。

 

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(字符串):將字符串變爲數字顯示。

 

3TO_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、時間

OracleDATE裏面是包含時間的,但在默認情況下是不現實的,可以通過添加下面的標記實現:

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 ;

其中LLOCALE,表示當前語言環境下的貨幣符號。

 

6、TO_DATE()函數

SELECT TO_DATE(‘1989-09-12’,’yyyy-mm-dd’) FROM dual ;

一般只在更新數據庫時使用。

 

7、TO_NUMBER()函數

基本無用,Oracle自動實現。

 

通用函數(核心

通用函數有兩個:NVL()、DECODE()。

 

1NVL()函數處理null

NVL是專門處理null的函數,下面是將null變爲‘0

SELECT ename,sal,comm,(sal+NVL(comm,0))*12,NVL(comm,0) FROM dual ;

2DECODE()函數:多數值判斷

DECODE()函數非常類似於程序中的ifelse語句但是DECODE()函數判斷的是數值而不是邏輯語句。

DECODE()函數的語法如下:

DECODE(數值|列,判斷值1,顯示值1,判斷值2,顯示值2,判斷值3,顯示值3,……)

判斷值與顯示值要成對出現。

 

總結

1、SQL語句的基本格式,基本語法的:SELECTFROMWHEREORDER BY的關係;

2、SCOTT用戶下的所有的數據表信息,包括列的名稱,作用及使用類型;

3、Orcale中的幾個單行函數。

 

發佈了20 篇原創文章 · 獲贊 13 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章