1. 程式人生 > >oracle學習總結

oracle學習總結

1.oracle安裝

一.安裝成功 1.安裝分為客服端和服務端2塊,具體見教程。

二.安裝失敗 1.百度,看看怎麼把東西刪除乾淨 2.如果刪除不乾淨就重灌系統,如果系統重灌失敗就換一臺電腦。 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

2.oracle基礎概念+使用者密碼+sql語言

一.概念 1.資料庫:Oracle資料庫是由美國甲骨文公司提供的一種關係型資料庫。

2.資料庫例項:例項也稱為SID,類似於java中通過new關鍵字建立的物件,我們主要操作的也就是例項,一個數據庫下可以有多個例項。

3.表空間:Oracle資料庫是通過表空間來儲存物理表的,一個數據庫例項可以有多個表空間。

4.表:表是用來儲存資料的,一個表空間下可以有多張表。

小結:一個數據庫可以有多個例項,一個例項可以有多個表空間,一個表空間可以有多張表。

二.使用者與密碼 登入資料庫需要對應的使用者名稱和密碼,所以需要建立使用者與對應的密碼: 鎖定使用者:alter user 使用者名稱account lock 解鎖使用者:alter user 使用者名稱account unlock 建立使用者:create user 使用者名稱 identified by 密碼 刪除使用者:drop user 使用者名稱 [cascade]

授予許可權 –grant dba to meitao; 授予許可權:grant 許可權名 to 使用者名稱 授予登入許可權:grant create session to 使用者名稱 授予建表許可權:grant create table to 使用者名稱 授予表空間許可權:grant unlimited tablespace to 使用者名稱 授予使用者增刪改查許可權: grant select | insert | update | delete | all on 表名 to 使用者名稱

撤銷許可權:revoke 許可權名 from 使用者名稱

斷開使用者的連線: 1.先查詢當前使用者的程序:select sid,serial# from v$session where username=‘使用者名稱’ 2.再刪除該程序:alter system kill session ‘sid,serial#’

3.sql語言+語法+注意事項+模糊查詢

一.注意事項 1.sql中除了資料的值外,其餘部分均不區分大小寫,sql中的字串型別只能用單引號。 2.nchar和nvarchar型別使用了unicode字符集,表示每個字元的長度都是兩個位元組(包括英文字元); 帶有var字首的型別為可變長度(varchar),不帶的為固定長度(char)。

二.sql語言 Sql語言分為4大類: 1.資料定義語言(DDL) 如:create、alter、drop、truncate 2.資料操縱語言(DML) 如:select、insert、update、delete 3.資料控制語言(DCL) 如:grant、revoke 4.事物控制語言(TCL) 如:commit、rollback

資料操縱語言(DML): select語法: select 欄位名 from 表名 [where 過濾條件 group by 分組 having 過濾分組 order by 排序]

insert語法: insert into 表名[(欄位名)] values(欄位值)

update語法: update 表名 set 欄位名=欄位值 [where 過濾條件]

delete語法: delete from 表名 [where 過濾條件]

注: 1.對日期型別操作時必須使用單引號,oracle中的日期格式預設為’DD-M月-YYYY’,分別表示日-月-年。如’17-12月-1980’,表示1980年12月17日。 2.如希望使用習慣的日期格式,則可以使用to_date函式進行格式化,如格式’yyyy-mm-dd hh24:mi:ss’。 to_date(’yyyy-mm-dd hh24:mi:ss’)

drop table 表名、truncate table 表名、delete from 表名間的區別:

drop table 表名:不僅刪除全部資料,並且把表也一併刪除,不能選擇刪除資料,不需要使用事物處理。 truncate table 表名:刪除全部資料,表結構還在,速度快效率高,不能選擇刪除資料,不需要使用事物處理。 delete from 表名:既能刪除全部資料,也能選擇刪除,需要使用事物處理。

distinct:去掉重複,若後面有多個欄位,則表示所有欄位值的組合不能重複。 select distinct 欄位 from 表名

like運算子:用於模糊查詢,與萬用字元%和_配合使用。 %:表示零或多個任意字元。 select * from 表名 where 欄位 like ‘C%’ :單個任意字元。 select * from 表名 where 欄位 like ‘%’ Oracle10g以上版本支援正則表示式的函式:regexp_like

escape:指定轉義字元,用於查詢含有特殊字元,如查詢含有%的資料。 select * from 表名where 欄位 like ‘%%%’ escape ‘’

between和in:在某個範圍內查詢資料。 select * from 表名 where 欄位 between 最小值 and 最大值 select * from 表名 where 欄位 in(值1,值2…)

別名: select 欄位 as 欄位別名 from 表名 select 欄位 欄位別名 from 表名 select * from 表名 表別名

order by:用於排序,只能作為最後一個子句,也是唯一一個可以使用別名的子句。 select * from 表名 order by 欄位 asc預設升序|desc降序

4.聚合函式

一.聚合函式 sum:返回選取結果集中所有值的總和 max:返回選取結果集中所有值的最大值 min:返回選取結果集中所有值的最小值 avg:返回選取結果集中所有值的平均值 count:返回選取結果集中行的數目 注:均統計為非null的欄位

group by:分組子句,將相同資料分為一組 select 欄位 from 表名 group by 欄位

having:用於過濾分組,與分組欄位或聚合函式配合使用 注:1.where子句不能與聚合函式配合使用 2.若查詢欄位中有聚合函式和非聚合欄位時,必須使用group by 子句,且非聚合欄位必須使用group by子句進行分組

5.表連線查詢

1.cross join (交叉連線) 表A如圖: 在這裡插入圖片描述 表B如圖: 在這裡插入圖片描述 cross join(交叉連線):返回笛卡爾積,即返回的行為左表乘右表的積。 如:select * from a cross join b 在這裡插入圖片描述

2.inner join(內連線) inner join(內連線):先返回笛卡爾積,再根據on子句返回左表和右表的匹配資料。 如:select * from a inner join b on a.aid=b.bid 在這裡插入圖片描述 在這裡插入圖片描述

3.left join(左連線) left join(左連線):先返回笛卡爾積,再根據on子句返回左表和右表的匹配資料,最後返回左表未匹配上的資料,即先返回左表資料,再根據on子句返回右表的匹配資料,匹配不上返回NULL。 如:select * from a left join b on a.aid=b.bid 在這裡插入圖片描述 在這裡插入圖片描述

4.right join(右連線) right join(右連線):先返回笛卡爾積,再根據on子句返回左表和右表的匹配資料,最後返回右表未匹配上的資料,即先返回右表資料,再根據on子句返回左表的匹配資料,匹配不上返回NULL。 如:select * from a right join b on a.aid=b.bid 在這裡插入圖片描述 在這裡插入圖片描述

5.full join(全連線) full join(全連線):先返回笛卡爾積,再根據on子句返回左表和右表的匹配資料,最後返回左表和右表未匹配上的資料,即左連線+右連線的並集。 如:select * from a full join b on a.aid=b.bid 在這裡插入圖片描述 在這裡插入圖片描述

6.子查詢

一.子查詢 按返回行數分為單行子查詢和多行子查詢; 按關聯性又分為相關子查詢和非相關子查詢。 子查詢可用於 select、from 、where、update、insert、delete 子句中,定義在小括號()中

1.1非相關子查詢 獨立於外部主查詢而存在的子查詢,稱為非相關子查詢。 非相關子查詢僅執行一次,並將子查詢的執行結果傳遞給外部子查詢

1.2非相關子查詢執行過程 遵循“由裡及外”原則,即先執行最內層的子查詢語句,然後將執行結果與外層的語句進行合併,依次逐層向外擴充套件並最終形成完整的sql語句。

2.1相關子查詢 依賴於外部主查詢的子查詢稱為相關子查詢,相關子查詢的執行次數等於主查詢的執行次數。

2.2相關子查詢執行過程 先從主查詢中取出一條記錄,然後將該行記錄相關列的值傳遞給子查詢,再執行子查詢,得到子查詢執行完後的值,最後依據子查詢返回的結果得到滿足提示條件的行

7.分頁查詢

注:rowid稱為”偽列”,資料庫表中的每一行資料都有一個唯一的rowid,oracle用它來訪問資料,如select t.,rowid from area t;rownum稱為”偽列”,它會根據返回記錄生成一個序列化的數字,rownum始終都是從1開始生成,如select t.,rownum from area t。

oracle分頁: select * from (select t.,rownum rn from (select * from 表名) t) where rn between 當前頁碼每頁顯示記錄數-每頁顯示記錄數+1 and 當前頁碼每頁顯示記錄數 如當前頁碼從1開始,每頁顯示3條記錄: select * from (select t.,rownum rn from (select * from product) t) where rn between 1 and 3

8.函式和連線符(不熟悉部分)

函式和連線符: nvl:若引數1的值為null則返回引數2的值,否則返回引數1的值。 select t.*,nvl(p_areaid,0) from area t

nvl2:若引數1的值為null則返回引數3的值,否則返回引數2的值。 select t.*,nvl2(p_areaid,p_areaid,0)from area t

sysdate:獲取當前時間。 select sysdate from dual

to_char:將指定資料型別轉換成指定格式字串。 select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual

to_date:將指定格式的日期字串轉換成日期型別。 select to_date(‘2012-12-12 23:59:59’,‘yyyy-mm-dd hh24:mi:ss’) from dual

||:連線字串。 select ‘hello’||’ world’ from dual

9.序列+同義詞+檢視+索引

序列:一個命名的順序編號生成器,以序列的方式生成一系列順序整數。 nextval:返回序列的下一個值,select 序列名.nextval from dual currval:返回序列的當前值,select 序列名.currval from dual

同義詞:物件的別名,優點是當原始物件修改後,也只需對同義詞進行修改和編譯,而不用去修改程式中的程式碼,分公用同義詞和私有同義詞兩種。

檢視:是由select語句產生的邏輯表,只有定義而無資料,主要用於查詢。優點如提供各種資料的表現形式、隱藏敏感資料、簡化複雜查詢等。

索引:提高查詢效率,降低增刪改效率,類似於目錄。 索引分為:單列索引、複合索引、唯一(unique)索引、非唯一索引、標準索引(B樹索引)、點陣圖(bitmap)索引和函式索引。 建立索引原則: 1. 對於取值範圍較大的列,應該建立標準索引(B樹索引),對於取值範圍較小的列,應該建立點陣圖索引。 2. 對於連線查詢中的關聯列應該建立索引。 3. 主鍵列和唯一約束列會自動建立索引,但外來鍵列不會自動建立索引。 4. 不用對所有表或所有列建立索引,也不是索引建立的越多越好,按需建立。

10.執行儲存過程

一.pl/sql:由定義部分、執行部分和異常處理部分組成。 定義部分:定義變數、常量、遊標、異常和複雜資料型別等。 執行部分:用於實現應用模組功能。 異常處理部分:用於處理執行部分可能出現的錯誤。 語法(其中declare和exception為可選部分): declare 定義部分 begin 執行部分 exception 異常處理部分 end;

二.:=:賦值運算子(靜態賦值),v_pi number(3,2):=3.14 select into:查詢賦值(動態賦值),select 列名 into 變數名 from 表名 dbms_output.put_line:用於輸出,dbms_output.put_line(‘hello’)

三.資料型別: %type:參考某列資料型別,如v_ename emp.ename%type %rowtype:參考某行資料型別,如v_emp emp%rowtype

四.儲存過程:用於執行一個指定的操作,類似於java中的方法。 語法: create [or replace] procedure 過程名[(引數型別)] as [宣告部分] begin執行部分 [exception異常處理部分] end;

1.建立無參過程 create or replace procedure proc_no_param as begin dbms_output.put_line(‘hello’); end; 呼叫過程:call proc_no_param()

2.建立帶in(輸入)引數過程(引數預設為in引數) create or replace procedure proc_in_param(p_arg varchar2) as begin dbms_output.put_line(p_arg); end; 呼叫過程:call proc_in_param(‘hello’)

3.建立帶out(輸出)引數過程(輸出引數必須用out標識) create or replace procedure proc_out_param(p_arg out varchar2) as begin select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) into p_arg from dual; end; 呼叫過程: declare v_arg varchar2(19); begin proc_out_param(v_arg); dbms_output.put_line(v_arg); end;

11.序列

sequence