初探Oracle--Oracle查詢操作
oracle的體系很龐大,要學習它,首先要了解oracle的框架。
1、物理結構(由控制檔案、資料檔案、重做日誌檔案、引數檔案、歸檔檔案、密碼檔案組成)
控制檔案:包含維護和驗證資料庫完整性的必要資訊、例如,控制檔案用於識別資料檔案和重做日誌檔案,一個數據庫至少需要一個控制檔案
資料檔案:儲存資料的檔案
重做日誌檔案:含對資料庫所做的更改記錄,這樣萬一出現故障可以啟用資料恢復。一個數據庫至少需要兩個重做日誌檔案
引數檔案:定義Oracle例程的特性,例如它包含調整SGA中一些記憶體結構大小的引數
歸檔檔案:是重做日誌檔案的離線副本,這些副本可能對於從介質失敗中進行恢復很必要。
密碼檔案:認證哪些使用者有許可權啟動和關閉
2、邏輯結構(表空間、段、區、塊)
表空間:是資料庫中的基本邏輯結構,一系列資料檔案的集合。
段:是物件在資料庫中佔用的空間
區:是為資料一次性預留的一個較大的儲存空間
塊:ORACLE最基本的儲存單位,在建立資料庫的時候指定
3、記憶體分配(SGA和PGA)
SGA:是用於儲存資料庫資訊的記憶體區,該資訊為資料庫程序所共享。它包含Oracle伺服器的資料和控制資訊,它是在Oracle伺服器所駐留的計算機的實際記憶體中得以分配,如果實際記憶體不夠再往虛擬記憶體中寫。
PGA:包含單個伺服器程序或單個後臺程序的資料和控制資訊,與幾個程序共享的SGA正相反PGA是隻被一個程序使用的區域,
4、後臺程序(資料寫程序、日誌寫程序、系統監控、程序監控、檢查點程序、歸檔程序、服務程序、使用者程序)
資料寫程序:負責將更改的資料從資料庫緩衝區快取記憶體寫入資料檔案
日誌寫程序:將重做日誌緩衝區中的更改寫入線上重做日誌檔案
系統監控:檢查資料庫的一致性如有必要還會在資料庫開啟時啟動資料庫的恢復
程序監控:負責在一個Oracle程序失敗時清理資源
檢查點程序:負責在每當緩衝區快取記憶體中的更改永久地記錄在資料庫中時,更新控制檔案和資料檔案中的資料庫狀態資訊。
歸檔程序:在每次日誌切換時把已滿的日誌組進行備份或歸檔
服務程序:使用者程序服務。
使用者程序:在客戶端,負責將使用者的
5、oracle例程:Oracle例程由SGA記憶體結構和用於管理資料庫的後臺程序組成。例程一次只能開啟和使用一個數據庫。
6、SCN(System Change Number):系統改變號,一個由系統內部維護的序列號。當系統需要更新的時候自動增加,他是系統中維持資料的一致性和順序恢復的重要標誌。
Oracle資料庫的四個主要的使用者:sys,system,scott,資料使用者
以Scott下的四張表為例,(Oracle自帶的),資訊如下:
EMP---員工表,SaleGrade---工資等級表,Bouns---工資表,部門表---dept
簡單查詢
基本語法如下:
select 【distinct】* | 列名【別名】,列名2【別名】,。。。from 表名【別名】 |
查詢所有員工的基本的年薪,同時查詢員工的編號的姓名。
select t.empno,t.ename,t.sal*12 a from emp t;
限定查詢
指在全部資料查詢結果出來之前加上一些過濾條件,主要滿足此過濾條件的資料都可以顯示出來,而過濾條件可以設定多個,如果要設定限定條件的話,必須使用where這個關鍵詞
基本語法如下:
select 【distinct】* | 列名【別名】,列名2【別名】,...from 表名【別名】 where 條件(n)
例如:
查詢工資高於2000的全部員工資訊
select * from emp t where t.sal > 2000
資料排序
按照某個指定欄位,將查詢出來的結果進行排序
基本語法如下:
Select * from table where … order by 排序欄位 [desc|asc]
·DESC : 表示的是降序排列
·ASC:表示的是升序排列(預設)
例如:
查詢所有僱員,並且按照工資來升序排列
select * from emp t order by t.sal asc;--根據工資升序排列
單行函式
單行函式就是完成一個子功能的小的操作函式,例如,可以進行字串大小寫轉換等等,對於一個數據庫而言,除了sql語句之外,那麼剩下的就是要掌握單行函式,單行函式是資料庫自己的功能,而且有些功能可以通過程式來進行處理,單行函式一共分為5種:字元函式、數字函式、日期函式、轉換函式、通用函式。
字元函式:字元函式的主要功能就是對字串進行資料的處理操作,一般字元函式包含:upper()、lower()、initcap()、length()、substr()、replace()、instr()
數字函式,主要有三個:round(),trunc(),mod()
日期函式:
取得當前日期:sysdate
取得系統當前日期之後,在日期操作中,還包含了三個數學公式:
·日期+數字= 日期(若干天后的日期)
·日期-數字 = 日期(若干天前的日期)
·日期-日期=數字(兩個日期的天數差)
常用的四個日期操作函式:
·取出若干月後的日期:add_months(列|日期,增長的月份)
·取出兩個日期之間經歷的月數:months_between(列|日期,列|日期)
·取出一個日期所在月的最後一天:last_day(列|日期)
·取出下一個指定的日期:next_day(列|日期)
轉換函式:
轉換就是指可以通過函式實現這些資料型別的轉換。
·數字或者日期轉換成字串:to_char(列|日期|數字,轉換格式)
·字串轉換成日期:to_date(列|字串,轉換格式)
·字串轉換成數字:to_number(列|字串)
例如:
例如查詢職工姓名,編號,薪水,職位,入職日期:
select t.ename,t.empno,t.sal,t.job,t.hiredate from emp t where t.hiredate between to_date('1981-01-01','yyyy-mm-dd')
統計每個部門的人數,平均工資和總工資,並且顯示部門名稱和編號,按總工資升序排列:
select count(e.empno),avg(e.sal),sum(e.sal) sumsal from emp e,dept d
where e.deptno=d.deptno group by d.deptno,d.dname order by sumsal
列出所有員工的編號,姓名,及其直接上級的編號,姓名,工資,顯示結果按照領導工資降序排列:
select e.empno 員工編號,e.ename 員工姓名,e.mgr 員工上級編號,a.ename 上級名字,a.sal 上級收入 from emp e,emp a
where e.mgr=a.empno(+) order by a.sal desc
按照上級領導編號查詢此領導所有下屬的人數、平均工資、總工資:
select b.ename 員工名字,b.empno 員工編號,count(a.empno) 員工數量,
avg(a.sal) 平均薪水,sum(a.sal) 總薪水 from emp a,emp b
where a.mgr = b.empno group by b.ename,b.empno order by 總薪水
*注意:統計函式要和group by一起使用如何安裝Oracle資料庫? http://blog.csdn.net/weixin_36380516/article/details/65935820