1. 程式人生 > >Oracle資料庫知識點整理和複習

Oracle資料庫知識點整理和複習

select 標識 選擇哪些列. from  標識從哪個表中選擇. as 列的別名可以省略,別名使用雙引號,可以在別名中包含空格或特殊字元並區分大小寫. || 把列與列,列與字元連線在起一起 select ename||'_'||job as "Employees" from emp; 字串  日期和字元只能在單引號中出現 select ename||' is a '||job        as "Employee Details" from emp; distinct  刪除重複行 select distinct deptno from emp; sql: 一種語言  ANSI標準  關鍵字不能縮寫  使用語句控制資料庫中的表定義資訊和表中的資料
sql*puls 一種環境  Oracle的特性之一  關鍵字可以縮寫  命令不能改變資料庫中的資料值  集中執行 desc 顯示錶的結構 where 將不滿足條件的行過濾掉. where字句緊跟隨from字句  解析順序右-->左 select empno,ename,job,deptno from emp where deptno=10; 字元和日期要包含在單引號中,字元大小寫敏感,日期格式敏感.預設的日期格式是DD-MON-RR. 比較運算子
操作符 = > >= > <= <>
含義 等於 大於 大於等於 大於 小於等於 不等於(也可以是!=)
賦值使用:=符號
操作符 含義
between...and... 在兩個值之間(包含邊界)
in(set) 等於值列表中的一個
like 模糊查詢((%任意字元)(_任意一個字元)(\轉譯字元))
is null 空值
操作符 and or not
含義 邏輯並 邏輯或 邏輯否
order by 子句 asc 升序 desc 降序 order by 子句在select語句的結尾. select ename,job,deptno,hiredate from emp order by deptno,hiredate desc; host cls  w清屏  host clear  l清屏
設定行寬  show linesize   set linesize 120 設定列寬  col ename for a8  col sal for 9999 sql 優化的原則: 1.儘量使用列名 2.where解析順序: 右 ---> 左 3.儘量使用where 4.儘量使用多表查詢 修改書寫錯誤語句 c命令 change c /form/form ed也是修改書寫錯誤的語句 sql 中的null 1.包含null的表示式都為null 2.null永遠!=null 3.如果集合中含有null,不能使用not in;但可以使用in; 4.null排序  null預設最大 select *  from emp  order by comm desc  nulls last 5.組函式會自動濾空 dual表:偽表 單行函式:(字元,通用,轉換,數值,日期) 操作資料物件 接受引數返回一個結果 只對一行進行變換 每行返回一個結果 可以轉換資料型別 可以巢狀 引數可以是一列或一個值 字元函式 大小寫控制函式  (lower,upper,initcap) lower:全部小寫 upper:全部大寫 initcap:首字母大寫 字元控制函式  (concat,substr,length/lengthb,instr,lpad | rpad,trim,replace) concat: concat(str1,str2,...)連線字元 substr: substr(a,b)從a中,第b位開始取  substr(a,b,c)從a中,第b位開始取,取c位 length: 字元數 lengthb: 位元組數 instr:  instr(a,b)在a中,查詢b lpad | rpad: lpad 左填充  rpad 右填充  select lpad('abcd',10,'*')  ******abcd trim:  trim 去掉前後指定的字元  select trim('H' from 'Hello WorldH') from dual; replace:  替換字元select replace('Hello World','l','*') from dual; 數字函式 round:  四捨五入 round(45.926,2)  45.93  round(45.926,-1) 50 trunc:  截斷  trunc(45.926,2) 45.92  trunc(45.926,-1) 40 mod:  求餘 mod(1600,300)  100 日期 函式sysdate返回日期時間 select ename,(sysdate-hiredate)/7 as weeks from emp where deptno=10; 日期函式
函式 描述
months_between 兩個日期相差的月數
add_months 向指定日期中加上若干個月數
next_day 指定日期的下一個日期
last_day 本月的最後一天
round 日期四捨五入
trunc 日期截斷
下一個星期四 select next_day(sysdate,'星期四') from dual;
格式 說明 舉例
YYYY Full year in numbers 2011
YEAR Year spelled out(年的英文全稱) twenty eleven
MM Two-digit value of month月份(兩位數字) 04
MONTH Full name of the month(月的全稱) 4月
DY Three-letter abbreviation of the day of the week(星期幾) 星期一
DAY Full name of the day of the week 星期一
DD Numeric day of the month 02
時間格式
HH24:MI:SS AM 15:45:32 PM
to_char 函式對日期的轉換 select ename,        to_char(hiredate,'DD Month YYYY')        as hiredate from emp; 2016-09-29 12:18:12今天是星期四 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual; to_char 函式對數字的轉換
9 數字
0
$ 美元符
L 本地貨幣符號
. 小數點
, 千分符
select to_char(sal,'$99,999,00') salary from emp where ename = 'KING'; to_number函式將字元轉換成數字 to_date函式將字元轉換成日期 nvl:  nvl(a,b) 如果a=null的時候返回b   nvl2(a,b,c) 當a=null的時候,返回c;否則返回b nullif:  nullif(a,b) 當a=b的時候,返回null;否則返回a coalesce:  從左到右 找到第一個不為null的值 select comm,sal,coalesce(comm,sal) "第一個不為null的值" from emp; decode select ename,job,sal 漲前        decode(job,'PRESIDENT',sal+1000,                   'MANAGER',sal+800,                             sal+400)漲後 from emp; case select ename,job,sal 漲前,        case job when 'PRESIDENT' then sal+1000                     when 'MANAGER' then sal+800                     else sal+400        end 漲後 from emp; 分組函式 avg count max min sum group by 多個列的分組 select deptno,job,sum(sal) from emp group by deptno,jop order by 1; where和having的區別:where不能使用多行函式 group by 的增強 SQL> /* SQL> group by 的增強 SQL> select deptno,job,sum(sal) from emp group by deptno,job SQL> + SQL> select deptno,sum(sal) from emp group by deptno SQL> + SQL> select sum(sal) from emp SQL> SQL> ==== SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job) SQL> SQL> 抽象 SQL> group by rollup(a,b) SQL> = SQL> group by a,b SQL> + SQL> group by a SQL> + SQL> 沒有group by SQL> */ SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job); DEPTNO JOB         SUM(SAL)                                                                                                                                                                          ---------- --------- ----------                                                                                                                                                                                  10 CLERK               1300                                                                                                                                                                                  10 MANAGER         2450                                                                                                                                                                                  10 PRESIDENT        5000                                                                                                                                                                                  10                          8750                                                                                                                                                                                  20 CLERK                1900                                                                                                                                                                                  20 ANALYST            6000                                                                                                                                                                                  20 MANAGER         2975                                                                                                                                                                                  20                         10875                                                                                                                                                                                  30 CLERK                950                                                                                                                                                                                  30 MANAGER         2850                                                                                                                                                                                  30 SALESMAN        5600                                                                                                                                                                              DEPTNO JOB             SUM(SAL)                                                                                                                                                                          ---------- --------- ----------                                                                                                                                                                                  30                         9400                                                                                                                                                                                                              29025 break on deptno skip 2 break on null 多表查詢 等值連線 select e.empno,e.ename,e.sal,d.dname from emp e,depr d where e.deptno=d.deptno 不等值連線 select e.empno,e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal  and s.hisal; 外連結 左外連線: 當where e.deptno=d.deptno不成立的時候,等號左邊的表任然被包含在最後的結果中 寫法:where e.deptno=d.deptno(+) 右外連線: 當where e.deptno=d.deptno不成立的時候,等號右邊的表任然被包含在最後的結果中 寫法:where e.deptno(+)=d.deptno select d.deptno 部門號,d.dname 部門名稱,count(e.empno) 人數 from emp e,dept d where e.deptno(+)=d.deptno group by d.deptno,d.dname; 自連線 自連線不適合操作大表 select e.ename 員工姓名,b.ename 老闆姓名 from emp e,emp b where e.mgr=b.empno; 層次連線 select level,empno,ename,mgr from emp connect by prior empno=mgr start with mgr is null order by 1; 子查詢 注意的問題 1.括號 2.合理的書寫風格 3.可以在主查詢的where select having from 後面使用子查詢 4.不可以在group by使用子查詢 5.強調from後面的子查詢 6.主查詢和子查詢可以不是同一張表;只要子查詢返貨的結果 主查詢可以使用 即可 7.一般不在子查詢中排序;但在top-n分析問題中 必須對子查詢排序 8.一般先執行子查詢,在執行主查詢;但相關子查詢列外 9.單行子查詢只能使用單行操作符;多行子查詢只能使用多行操作符 10.子查詢中的null 多行子查詢
操作符 含義
IN 等於列表中的任何一個
ANY 和子查詢返回的任意一個值比較
ALL 和子查詢返回的所有值比較
oracel分頁 select e2.* from (select rownum r1,e1.*      from (select * from emp order by sal) e1      where rownum <=8     ) e2 where r1>=5; SQL的型別 1.DML(Data Manipulation Language 資料操作語言): select insert update delete 2.DDL(Data Definition Language 資料定義語言): create table, alter table, truncate table, drop table                                                                         create/drop view,sequnece,index,synonym(同義詞) 3.DCL(Data Control Language 資料控制語言): grant(授權) revoke(撤銷授權) 插入insert  &地址符 一次插入多條記錄 create table emp10 as select * from emp where 1=2; 海量插入資料: 1.資料泵(PLSQL程式)  dbms_datapump(程式包) 2.SQL*Loader 3.外部表 delect 和truncate 的區別 1.delete逐條刪除;truncate先摧毀表  在重建2 2.delect是DML(可以回滾)   truncate是DDL(不可以回滾) 3.delete不會釋放空間  truncate會 4.delete會產生碎片  truncate不會 5.delete可以閃回(flashback)  truncate不可以 undo資料(還原資料) 開啟消耗時間 set timing on 關閉消耗時間 set timing off Oracel中的事務 1.起始標誌:  事務中的第一條DML語句 2.結束標誌:  提交:  顯示  commit  隱式:  正常退出 DDL DCL                   回滾:  顯示  rollback  隱式:  非正常退出  掉電  宕機 設定儲存點 savepoint a; 返回儲存點 rollback to savepoint a; 行號rownum 1、rownum永遠按照預設的順序生成 2、rownum只能使用< <=;不能使用> >= 臨時表 1. create global temporary table  **** 2. 自動:排序 特點:當事務或者會話結束的時候,表中的資料自動刪除 行轉列 wm_concat(varchar2) 多行函式 select deptno,wm_concat(ename) nameslist from emp group by deptno; 建立表 create table test1         (tid number,tname varchar2(20));
資料型別 描述
VARCHAR2(size) 可變長字元資料
CHAR(size) 定長字元資料
NUMBER(p,s) 可變長數值資料
DATE 日期型資料
LONG 可變長字元資料,最大可達到2G
CLOB 字元資料,最大可達到4G
RAW and LONG RAW 原始的二進位制資料
BLOB 二進位制資料,最大可達到4G
BFILE 儲存外部檔案的二進位制資料,最大可達到4G
ROWID 行地址
rowid 行地址 select rowid,empno,ename,sal from emp; select * from emp where rowid='AAAMfPAAEAAAAAgAAJ'; 修改表:增加新列,修改列,刪除列,重新命名列,重命名錶 增加新行 alter table test1 add photo blob; 修改列 alter table test1 modify tname varchar(40); 刪除列 alter table test1 drop column photo; 重新命名列 alter table test1 rename column tname to username; 重命名錶 rename test1 to test2; 刪除表 drop table TESTDELETE; 查看回收站 show recyclebin; 清空回收站 purge recyclebin; 管理員沒有回收站 閃回刪除     回收站 flashback table TESTSAVEPOINT to before drop; 集合運算 並集 union/union all union運算子返回兩個集合去掉重複元素後的所有記錄. union all 返回兩個集合的所有記錄,包括重複的 並集 intersect intersect運算子返回同時屬於兩個集合的記錄 差集 minus minus返回屬於第一個集合,但不屬於第二個集合的記錄. 約束 非空約束 NOT NULL; 唯一性約束 UNIQUE; 主鍵約束 PRIMARY KEY; 外來鍵約束 FOREIGN KEY:在子表中,定義了一個表級的約束 REFERENCES:指定表和父表中的列 ON DELETE CASCADE:當刪除父表時,級聯刪除子表記錄 ON DELETE SET NULL:將子表的相關依賴記錄的外來鍵置為null 檢查約束 check 定義每一行記錄所必須滿足的條件 Oracel 預設讀以提交 管理其他資料庫物件 檢視:封裝了一條複雜查詢的語句.檢視是一個虛表 優點:簡單化複雜的查詢 建立一個檢視 create view empinfoview as select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname from emp e,dept d where e.deptno=d.deptno; 不建議通過檢視對錶中的資料進行修改,因為會受到很多的限制. 序列 建立序列 create sequence myseq; nextval:取得序列的下一個內容 currval:取得序列的當前內容 例如 select myseq.nextval from dual; select myseq.currval from dual; insert into  testseq values(myseq.nextval,'aaa'); 序列可能產生裂縫的原因: 回滾   系統異常  多個表共用一個序列 index索引:  是用於加速資料存取的資料物件. 同義詞:synonym 為hr.employees起別名 create synonym hremp for hr.employees pl/sql程式語言 語法 declare     說明部分(變數說明,游標申明,例外說明) begin     語句序列(DML語句) exception     例外處理語句 End; / helloword declare   --說明部分 begin   --程式   dbms_output.put_line('Hello World'); end; / 常量和變數的定義 引用變數 declare   --定義變數儲存姓名和薪水   --pename varchar2(20);   --psal   number;   pename emp.ename%type;   psal   emp.sal%type; begin   --得到7839的姓名和薪水   select ename,sal into pename,psal from emp where empno=7839;   --列印   dbms_output.put_line(pename||'的薪水是'||psal); end; / 記錄型變數 --記錄型變數: 查詢並列印7839的姓名和薪水 declare   --定義記錄型變數:代表一行   emp_rec emp%rowtype; begin   select * into emp_rec from emp where empno=7839;   dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal); end; / if語句 語法: 1. if    條件    then    語句1; 語句2; end if; 2. if    條件    then    語句序列1; else    語句序列2; end if; 3. if    條件    then    語句; elseif    語句    then    語句; else    語句; end if; -- 判斷使用者從鍵盤輸入的數字 --接受鍵盤輸入 --變數num:是一個地址值,在該地址上儲存了輸入的值 accept num prompt '請輸入一個數字'; declare   --定義變數儲存輸入 的數字   pnum number := &num; begin   if pnum = 0 then dbms_output.put_line('您輸入的是0');      elseif pnum = 1 then dbms_output.put_line('您輸入的是1');      elseif pnum = 2 then dbms_output.put_line('您輸入的是2');      else dbms_output.put_line('其他數字');   end if; end; / 迴圈 語法: 1. while total<=25000 loop ... total:=total+salary; end loop; 2. loop exit[when 條件]; ... end loop; 3. for i in 1..3 loop 語句序列; end loop; -- 列印1~10 declare   -- 定義變數   pnum number := 1; begin   loop     --退出條件     exit when pnum > 10;     --列印     dbms_output.put_line(pnum);     --加一     pnum := pnum + 1;   end loop; end; / 遊標(游標Cursor) 開啟遊標:    open  c1;(開啟遊標執行查詢) 取一行遊標的值:    fetch  c1  into  pjob;(取一行到變數中) 關閉遊標:    close  c1;(關閉遊標釋放資源) 遊標的結束方式    exit  when  c1%notfound 注意:上面的pjop必須與emp表中的job列型別一致;     定義:pjop  emp.empjob%type; -- 查詢並列印員工的姓名和薪水 /* 游標的屬性: %isopen   %rowcount(影響的行數)              %found    %notfound */ declare    --定義游標(遊標)    cursor cemp is select ename,sal from emp;    pename emp.ename%type;    psal   emp.sal%type; begin   --開啟   open cemp;   loop        --取當前記錄        fetch cemp into pename,psal;        --exit when 沒有取到記錄;        exit when cemp%notfound;        dbms_output.put_line(pename||'的薪水是'||psal);   end loop;   --關閉

相關推薦

Oracle資料庫知識點整理複習

select 標識 選擇哪些列. from  標識從哪個表中選擇. as 列的別名可以省略,別名使用雙引號,可以在別名中包含空格或特殊字元並區分大小寫. || 把列與列,列與字元連線在起一起 select ename||'_'||job as "Employees" fro

Oracle資料庫忘記使用者名稱密碼怎麼辦

方法一:   首先進入sqlplus:進入的方式有兩種,一種是通過cmd命令臺輸入sqlplus,另外一種是直接在開始-》程式-》Oracle-》應用程式開發-》sqlplus。 搜尋 “Oracle 11g預設使用者名稱,密碼”,可以找到很多相關的預設使用者

檢視ORACLE 資料庫的表列的相關資訊

本文全部轉載自:http://www.cnblogs.com/tearer/archive/2012/12/13/2815601.html 供自己收藏學習。 -------------------------------------------------------------------

Oracle資料庫 資料完整性DML語句

 資料完整性和DML語句 資料完整性 資料完整性(Data Integrity)是指資料的精確性(Accuracy) 和可靠性(Reliability)。它是應防止資料庫中存在不符合語義規定的資料和防止因錯誤資訊的輸入輸出造成無效操作或錯誤資訊而提出的。資料完整性指儲存在資料庫中的所有資料值均正確的狀態。如果

Oracle資料庫的安裝測試

Oracle在資料庫裡面安裝中屬於最噁心的那種,因為安全,因為收費,所以安裝你懂得!! 不多說來, 1.解壓檔案10201_database_win32.zip,並雙擊解壓目錄下的setup.exe,出現安裝介面,如下: 2.輸入口令和確認口令,如:password,點選下一步,出

檢視oracle資料庫的使用者名稱密碼

執行 cmd 按如下輸入命令 sqlplus / as sysdba ---------以sys登陸 超級使用者(sysdba) alter user 使用者名稱 account unlock; --------- 解除鎖定(必須帶“;”號)

檢視oracle資料庫是否歸檔修改歸檔模式

分為非歸檔模式(NOARCHIVELOG) 和歸檔模式(ARCHIVELOG)。非歸檔模式不產生歸檔日誌,雖然節省了硬碟空間,但是備份方案選擇很有限,通常只能選擇冷備份。還原也只能還原到備份那一時刻的資料,通常也僅在開發時使用(據說在資料倉庫中也使用),Oracle安裝預設

Linux上oracle資料庫的關閉啟動

1)orcl資料庫的啟動: 第一步:首先使用root使用者登入到Linux作業系統,然後切換到oracle使用者下 ,輸入命令: su oracle 第二部:切換到oracle使用者下,然後在該使用者下輸入命令:sqlplus /nolog 第三部:使用管理員許可權登入,輸

查詢Oracle資料庫段SEGMENT物件大小

一、查詢段類別: SELECT T.TABLESPACE_NAME, SEGMENT_TYPE, COUNT(1)   FROM USER_SEGMENTS T  WHERE 1 = 1  GROUP BY T.TABLESPACE_NAME, T.SEGMENT_TYPE

Oracle資料庫的啟動關閉詳細過程

一、資料庫開啟  startup資料庫正常啟動 1.startup nomount   啟動 Oracle DB 例項:NOMOUNT ,建立sga,建立了alert日誌,用於create db,create controlfile 啟動資料庫例項時,請選擇例項啟動時所處

Oracle資料庫檢視編碼修改編碼

首先檢視oracle資料庫的編碼 SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET'; PARAMETER -------------------- VALUE

Oracle資料庫重建無效不可用物件

無效和不可用物件     無效 PL/SQL 物件和不可用索引會對效能產生影響。無效 PL/SQL 物件必須先進行重編譯,然後才能使用。這需要在執行嘗試訪問 PL/SQL 程式包、過程或函式的第一個操作之前花費一段編譯時間。如果 PL/SQL 重編譯未成功,則操作會因發生

Oracle資料庫修改sessionprocess

1.查詢資料庫當前程序的連線數: select count(*) from v$process; --262.檢視資料庫當前會話的連線數: select count(*) from v$session; --243.檢視資料庫的併發連線數: select count(*) f

Oracle資料庫查詢表名欄位的描述資訊SQL指令碼

--查詢欄位型別與名稱描述 select a.Table_name,a.column_name,a.data_type,a.data_length,a.data_precision,a.nullable,a.column_id,b.comments from user_tab

Oracle資料庫的匯入匯出的兩種方式

首先,我們匯入匯出資料,肯定是要通過oracle自帶的可執行程式來完成資料的匯入匯出工作,imp.exe 和exp.exe這兩個可執行檔案都放在oracle安裝目錄下的BIN目錄下。 1.以cmd命令操作符匯入匯出 先以cmd命令操作符來演示,比如我的B

oracle資料庫的備份還原

1 簡介本手冊描述Oracle資料庫的備份還原機制,幫助應用Oracle資料庫,為了保證資料庫的安全,避免外界因素造成資料庫中資料丟失,有效的備份可以更好的重建資料庫,在修改刪除表或者表空間以前或者以後執行適當的備份是相當必要的,備份時建議使用直接登入伺服器或者利用ssh工具

Oracle資料庫中commitrollback命令

一個數據庫事務起始於一個SQL語句,中止於以下4種事件之一: COMMIT或ROLLBACK語句 DDL/DCL隱式提交 使用者退出時自動提交 系統強行關閉時取消事務 事務結束後,下一條SQL語句將開始一個新的事務。 語句 功能 COMMIT 結束當前事務,並將所有資

Oracle資料庫的sid服務名的區別

在程式中 服務名如下: jdbc:oracle:thin:@//<host>:<port>/<service_name> 例 jdbc:oracle:thin

oracle資料庫表備份表恢復 怎樣將Oracle一張表的多個欄位更新到另一張表中去

對於比較簡單的表,資料量不是特別多的表,可以使用簡單的sql語句來進行備份create table T_FA_Cat_20121207 as select * from T_FA_Cat 建立一個新表,把資料儲存起來 insert into  T_FA_Cat  sele

oracle資料庫insert all insert first用法區別

create table small_customers(customer_id number,sum_orders number);//小型客戶表 create table medium_customers(customer_id number,sum_orders nu