1. 程式人生 > >Oracle進階總結(1)

Oracle進階總結(1)

Oracle知識點總結

1.資料庫是什麼

資料庫是以一定的方式儲存在一起,有組織的管理,能為多個使用者共享具有儘可能小的資料冗餘的特點,與應用程式彼此獨立的資料集合

2.什麼是資料庫管理系統

1)是一種管理資料庫的軟體,資料庫管理系統是為資料庫的建立,使用和維護而配置的軟體。它建立在作業系統的基礎上,對資料庫進行統一的管理和控制。使用者使用的各種資料庫命令以及應用程式的執行,都要通過資料庫管理系統。還擔任資料庫的維護工作。
2)在Oracle資料庫中,資料庫僅僅是指檔案集合,這些檔案用來儲存的管理相關資料,包含資料檔案,控制檔案以及重做日誌檔案

3.關係型資料庫

(1)資料模型的是三個層次
概念模型,邏輯模型,物理模型
(2)關係模型的組成
1)關係資料結構
就是一張由列和行組成的二維資料表
2)關係操作集合
選擇,投影,連線,增加,刪除,修改
3)關係完整性約束
實體完整性,參照完整性,使用者自定義的完整性

4 .結構化查詢語言

(1)結構化查詢語言分類
1)資料查詢語言
也就是select語句 從表中檢索資料
2)資料操作語言
增,刪,改語句 用於對資料的操作
3)事務處理語言
COMMIT 和ROLLBACK 用於提交和回滾
4)資料控制語言
GRANT和REVOKE用於對許可權的授予和收回
5)資料定義語言
CREATE,DROP,ALTER 用於對錶的建立,刪除和修改

5.SQL語句的概念

關鍵字,語句,字句

6.算術運算子

1)+,-,*,/ 優先順序用數學運算一樣
2)null 是一種無效的,為賦值的,未知的或不可用的值,不同於零和空格
任何包含空值的算術表示式運算後的結果都是空值 (可以用NVL來進行計算)
3)列別名的兩種寫法 1.列名 列別名
2.列名 as 列別名
4)連線運算子 || 用於連線列與列,列和字元
例如:SELECT FIRST_NAME||LAST_NAME FROM EMPLOYEES


5)原義運算子
– 原義字串是包含在SELECT列表中的一個字元、一個數
字或一個日期。
– 日期和字元字面值必須用單引號引起來。
– 每個原義字串都會在每個資料行輸出中出現。

SELECT FIRST_NAME||'的工資是'||SALARY 工資 FROM EMPLOYEES
結果:
Steven的工資是24000

6)消除重複行 DISTINCT

7 .比較操作符

1)比較運算子>,<,<=,>=,=
注意下不等於的這樣的 <>
2)特殊比較運算子
between… and… 在範圍之內,in 比較的值和集合列表的任何一個之相等,like 是否滿足部分匹配(%代表零個或者更多的字元,_代表一個字元),is null 是否為空
3)邏輯運算子
AND OR NOT也就是邏輯與,或,非

8.運算子優先順序

算術(+,-,*,/)>連線(||)>比較(>,<,>=,<=,<>)>特殊比較(BETWEEN..AND..,IN,LIKE,IS NULL)>邏輯非(NOT)>邏輯與(AND)>邏輯或(OR)
當然括號裡面的才是優先的

9.字元函式

1)大小寫轉換
LOWER 字元全部轉換為小寫,
UPPER 字元全部轉化為大寫
INITCAP 每個單詞的首字母大寫,其餘轉小寫

SELECT INITCAP('hello world') from dual
結果:
Hello World

2)字元處理函式
①INSTR (s1,s2,n1,n2) 子串s2 從 n1 開始第n2次出現的位置 ,n1,n2預設值都是1 例如:

SELECT INSTR('l love you','o',1,1) FROM dual
結果:
4

結果為‘o’在字串‘i love you’中第一個字元開始位置,第一次出現的位置
②LPAD(s1,n1,s2) 返回s1 從被s2從左邊填充至n1長度後的字串。例:LPAD(sal 10 '*') ******5000
③RPAD(s1,n1,s2) 返回s1被s2從右面填充到n1長度後的字串。
例:RPAD(sal,10,'*')5000******
④TRIM 去除字串頭部或尾部(頭尾)的字元
例:TRIM('S' FROM 'SSMITH') MITH
⑤REPLACE(s1,s2,s3) 把s1中的s2用s3替換。
例:
REPLACE(’abc’,’b’,’d’) adc
⑥CONCAT連線兩個值等同於||
CONCAT(‘Good’, ‘String’) GoodString
⑦SUBSTR(str,n1,n2) 擷取字元 從n1開始長度為n2的字元
SUBSTR(‘String’,1,3)Str
⑧LENGTH 取字元長度
SELECT LENGTH(‘i love you’) from dual `10

10.數值函式

1)ROUND:將列或表示式所表示的數值四捨五入到小數點後的第n位。ROUND(45.926, 2) -> 45.93
2)TRUNC:將列或表示式所表示的數值擷取到小數點後的第n位。TRUNC(45.926, 2) -> 45.92
3)MOD:取模MOD(1600, 300) ->100

11.日期函式

1) SYSDATE:返回系統當前日期
2)MONTHS_BETWEEN:返回兩個日期型別資料之間間隔的自然月數

–MONTHS_BETWEEN 函式演示——查詢所有員工服務的月數。
SELECT ename, sal, MONTHS_BETWEEN(SYSDATE,hiredate) months
FROM emp
ORDER BY months;

3) ADD_MONTHS:返回指定日期加上相應的月數後的日期

–ADD_MONTHS 函式演示——查詢82年後入職的員工轉正日期,
按照3個月試用期考慮
SELECT ename, sal, hiredate, ADD_MONTHS(hiredate,3) new_date
FROM emp
WHERE hiredate>'01-1月-82';

4)NEXT_DAY:返回某一日期的下一個指定日期

NEXT_DAY 函式演示——返回在02-2月-06之後的下一個周
一是什麼日期。
SELECT NEXT_DAY('02-2月-06','星期一') NEXT_DAY
FROM DUAL;

5)LAST_DAY:返回指定日期當月最後一天的日期

– LAST_DAY 函式演示——返回06年2月2日所在月份的最後一
天。
SELECT LAST_DAY('02-2月-06') "LAST DAY"
FROM DUAL;

6) ROUND(date[,‘fmt’])將date按照fmt指定的格式進行四捨五入,
fmt為可選項,如果沒有指定fmt,則預設為DD,將date四捨五入為最
近的天。
格式碼:世紀CC,年YY,月MM,日DD,小時HH24,分MI,秒SS

ROUND函式演示——查詢81年入職的員工姓名,入職日
期按月四捨五入的日期。
SELECT empno, hiredate,
ROUND(hiredate, 'MONTH')
FROM emp
WHERE SUBSTR(hiredate,-2,2)=‘81';

7)TRUNC(date[,‘fmt’])將date按照fmt指定的格式進行截斷,fmt為
可選項,如果沒有指定fmt,則預設為‘DD’,將date擷取為最近的
天。

TRUNC 函式演示——查詢81年入職的員工姓名,入職日
期按月截斷的日期。
SELECT empno, hiredate, TRUNC(hiredate, 'MONTH')
FROM emp
WHERE SUBSTR(hiredate,-2,2)=‘81';

8)EXTRACT:返回日期型別資料中的年份月份或者日

EXTRACT ([YEAR] [MONTH][DAY]
FROM [日期型別表示式])

12.轉換函式

TO_CHAR,TO_DATE,TO_NUMBER

這裡寫圖片描述
舉例

SQL> SELECT TO_CHAR(sal,'$99,999') SALARY
2 FROM emp
3 WHERE ename = 'SCOTT';
SALARY
--------
$3,000

13.通用函式

1)NVL函式
– 語法:NVL (expr1,expr2)
– 如果expr1不是null,返回expr1,否則返回expr2
2)NVL2函式
–語法:NVL2(expr1,expr2,expr3)
–如果expr1不是null,返回expr2,否則返回expr3
3)NULLIF函式
–語法: NULLIF(expr1,expr2)
–比較兩個表示式,如果相等,返回null,否則,返回第
一個表示式
4)CASE語句用法示例

--求員工的稅額
SELECT SALARY,
(CASE 
WHEN SALARY BETWEEN 0 AND 5000 THEN 0
WHEN SALARY BETWEEN 5000 AND 8000 THEN SALARY*0.10
WHEN SALARY BETWEEN 8000 AND 15000 THEN SALARY*0.15
WHEN SALARY BETWEEN 15000 AND 50000 THEN SALARY*0.2
ELSE SALARY*0.25
END) 應交稅額 FROM EMPLOYEES