- 相關(guān)推薦
Oracle復(fù)習(xí)知識(shí)點(diǎn)匯總
Oracle認(rèn)證考試由Oracle公司授權(quán)國(guó)際考試認(rèn)證中心對(duì)考生進(jìn)行資格認(rèn)證的。那么Oracle認(rèn)證考試復(fù)習(xí)要點(diǎn)有哪些呢?下面跟yjbys小編一起來(lái)學(xué)習(xí)吧!
desc emp; 顯示emp表的結(jié)構(gòu)
select count(*) FROM emp; 統(tǒng)計(jì)記錄條數(shù) count(*)是統(tǒng)計(jì)函數(shù)
SELECT * FROM emp; 查詢所有的列
SELECT ename,hiredate FROM emp; 查詢員工的入職時(shí)間(投影)
SELECT ename,sal AS Salary,job FROM emp; 查詢員工的sal,顯示為Salary---------結(jié)果是顯示為SALARY
SELECT ename,sal "Salary",job "Job" FROM emp; 更改5為如此,as可以省略
******************select 子句的功能****************
SELECT ename,sal,sal*12 "Year_Salary" FROM emp; 查詢員工的年薪,顯示為Year_Salary
SELECT ename,sal,comm,sal+comm "Month_sal" FROM emp; 查詢員工月總酬勞(月薪+獎(jiǎng)金)-------結(jié)果出現(xiàn)NULL
SELECT ename,sal,nvl(comm,0) "Comm",sal+nvl(comm,0) "Month_sal" FROM emp; 更改點(diǎn)7,nvl(列名,值)表示如果該字段為NULL則把它轉(zhuǎn)換為該值
SELECT ename || ' works as '|| job "work" FROM emp; ||為連接表達(dá)式,可隨意連接額外的字符-------注意:額外字符要用''括起來(lái)
SELECT distinct job FROM emp; distinct作用是去掉重復(fù)值
***************where 子句的功能******************
SELECT ename,deptno,job from emp where deptno=&no; 利用綁定變量的形式查詢不同部門的員工姓名,所在部門,職位;&no是我們待輸入的值
SELECT ename,job FROM emp WHERE sal between &sal1 and &sal2 需要多少個(gè)參數(shù)就定義多少個(gè)變量
SELECT ename,sal,job FROM emp where job='MANAGER';查詢職位是“MANAGER”的職員信息-----注意:=后要用' ',表中的數(shù)據(jù)有大小寫區(qū)分
SELECT ename,sal FROM emp where sal between 1500 and 3000; between...and的用法,查詢工資在1500~3000員工信息;取反為:not between
SELECT ename, deptno,job from emp where deptno=10 or deptno=20; or的用法,只要一個(gè)滿足條件就顯示
SELECT ename, deptno,job from emp where job in('MANAGER','ANALYST'); 14、in的用法,可代替or,只要滿足括號(hào)里的一個(gè)字段就顯示;取反為:not in
SELECT ename,job from emp where ename like 'M%' like用作模糊查詢,%表示0或多個(gè)字符,_表示任意單個(gè)字符,如'_M%'則表示第二個(gè)字符為M的字段;取反為:not like
SELECT ename,job from emp where ename like 'A\_%' ESCAPE '\'; 顯示以A_***格式的字段,escape表示\后面的字符不作為通配符來(lái)用
SELECT ename,comm FROM emp where comm is NULL; 查詢沒(méi)有獎(jiǎng)金的員工,即comm為空,不可以寫為comm=null;取反:is not null
SELECT ename,job FROM emp WHERE job <> 'SALESMAN'; 查詢職位表示SALESMAN的員工,<>表示為不等于
SELECT ename,sal,deptno FROM emp WHERE sal>=1000 and deptno=10 or deptno=20; 先對(duì)A和B求交集,再和C求并集
SELECT ename,sal,deptno FROM emp WHERE sal>=1000 and (deptno=10 or deptno=20); 先對(duì)B和C求并集,再和A求交集
Alter session set nls_language='AMERICAN'; 轉(zhuǎn)換為英文環(huán)境
Select *from emp where hiredate between '01-JAN-81' and '31-DEC-81'; 查詢?nèi)肼毮攴轂?981的員工信息
***************order by子句的功能***************************
正序(asc)是從小到大,倒序(desc)是從大到小
SELECT ename,sal,deptno
SELECT ename,sal,deptno FROM emp order by deptno,sal DESC; 先對(duì)deptno進(jìn)行正序排序(asc省略了),后對(duì)sal進(jìn)行倒序(DESC)排序
desc dual; dual是一個(gè)虛表,只有一個(gè)字段
select * FROM dual;
***********************單行函數(shù)**************************
*******1、字符函數(shù)*******
SELECT lower('Sql Server') from dual; lower()轉(zhuǎn)換為小寫
SELECT initcap('sql server') FROM dual; initcap()首字母大寫
SELECT * FROM emp WHERE upper(ename)='SCOTT'; upper()轉(zhuǎn)換為大寫,在不知道其數(shù)據(jù)的大小寫情況下使用方便
SELECT concat('hello', 'world') from dual;concat()連接字符串
SELECT substr('helloworld', 3, 3) FROM dual; substr(字符串,開(kāi)始位置,截取長(zhǎng)度)截取子串,從1開(kāi)始算
SELECT length('helloworld') FROM dual; length()求字符串長(zhǎng)度
SELECT lpad('hello',10,'#') FROM dual; lpad(原字符串,設(shè)置的總長(zhǎng)度,定義字符),不足總長(zhǎng)度就左邊補(bǔ)字符
SELECT rpad('hello',10,'#') FROM dual; rpad(原字符串,設(shè)置的總長(zhǎng)度,定義字符),不足總長(zhǎng)度就右邊補(bǔ)字符
*******2、數(shù)字函數(shù)********
SELECT round(45.678,2) from dual; round()四舍五入,默認(rèn)有效位為0---------特例,當(dāng)有效位為-1,結(jié)果是50
SELECT trunc(45.678,-1) FROM dual; trunc()截取----------- 特例,當(dāng)有效位為-1,結(jié)果是40
select mod(16,5) FROM dual; mod()取模,相當(dāng)于C語(yǔ)言中的%運(yùn)算符,如16%5=1
*******3、日期函數(shù)********
SELECT sysdate FROM dual; sysdate獲取當(dāng)前系統(tǒng)日期
SELECT ename, round(sysdate-hiredate,2) hiredate FROM emp;計(jì)算員工入職天數(shù)
SELECT ename, round((sysdate-hiredate)/365) hiredate FROM emp; 計(jì)算員工入職年數(shù)
SELECT to_char (sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual; to_char()指定日期時(shí)間數(shù)據(jù)的格式
SELECT to_char (sysdate,'yyyy"年"mm"月"dd"日"') FROM dual; 注釋:補(bǔ)to_char(),加入非日期格式的內(nèi)容用""引起來(lái)
select ename,round(months_between(sysdate,hiredate)) hiredate from emp; months_between()表示間隔多少個(gè)月
select add_months(sysdate,6) FROM dual; add_months()表示加上多少個(gè)月--------注意區(qū)分sysdate+6(加6天)
SELECT next_day(sysdate,'星期一') FROM dual; next_day()表示下一個(gè)周幾的哪一天,周日代表1,周一代表2...'星期一'是在中文環(huán)境里的表示方法,非中文要表示為'mon'
Alter session set nls_language='AMERICAN'; 轉(zhuǎn)換為英文環(huán)境
Alter session set nls_language='SIMPLIFIED CHINESE'; 轉(zhuǎn)換為中文環(huán)境
select last_day('21-NOV-2012') from dual; last_day()表示本月最后一天是幾號(hào)
********4、轉(zhuǎn)換函數(shù)********
select to_number('12')*12 from dual; to_number()字符串轉(zhuǎn)換為數(shù)字
select to_number('$12,345.67','$99,999.99') from dual; 補(bǔ)to_number(),表示僅僅取數(shù)字,不取美元符號(hào)(即帶兩個(gè)參數(shù),同樣的格式)
select to_char(12345.67,'$000,000.00') from dual;to_char(數(shù)值,表示格式)數(shù)字轉(zhuǎn)換為字符串,0的作用是顯示數(shù)字,如果位數(shù)不夠,用0補(bǔ)齊;若0改為9,則9的用法是顯示數(shù)字并忽略前面的0;最常用的是小數(shù)點(diǎn)前為9,后為0
insert into emp(empno,ename,hiredate)
values ('2233','amy1',to_date(' 2012-10-01','yyyy-mm-dd')); to_date(日期,格式)字符串轉(zhuǎn)換為日期---------注意,插入數(shù)據(jù)時(shí),類型要對(duì)應(yīng)
********5、通用函數(shù)*******
select ename,sal,comm,nvl(comm,100) bonus from emp; nvl(列名,數(shù)據(jù))空值處理函數(shù),數(shù)據(jù)可以是數(shù)字、日期和字符串
select ename,comm,sal,coalesce(comm,sal*0.5m,100) bonus from emp; coalesce()參數(shù)列表函數(shù),作用是返回參數(shù)列表第一個(gè)非空參數(shù);該語(yǔ)句含義是:如果comm不是null,則獎(jiǎng)金額為comm,如果為null,則獎(jiǎng)金額為sal*0.5,如果comm和sal都是null,則安慰獎(jiǎng)100
select ename,job,sal decode
(job,'SALESMAN',1.1*sal,'ANALYST',1.05*sal,'MANAGER0',1.02*sal,sal) new_salary from emp; decode(判斷條件,匹配1,值,匹配2,值,...,默認(rèn)值,相當(dāng)于C語(yǔ)言中的case語(yǔ)句)
*******6、組函數(shù)*******
如果函數(shù)中寫列名,默認(rèn)忽略空值
select count(*) from emp; count(列名)統(tǒng)計(jì)記錄總數(shù)
select sum(sal),avg(sal) from emp; sum(列名)計(jì)算總和;avg(列名)計(jì)算平均數(shù)---------注意:這兩個(gè)函數(shù)只針對(duì)數(shù)字類型
select max(sal),min(sal) from emp; min(列名)求最小值;max(列名)求最大值-----------注意:這兩個(gè)函數(shù)適用于任何類型
************GROUP BY及HAVING子句*******************
select deptno,sum(sal) from emp group by deptno; 計(jì)算每個(gè)部門員工的工資和,一個(gè)一個(gè)部門來(lái),
select job,avg(sal) from emp;報(bào)錯(cuò):不是單組分組函數(shù)。應(yīng)該改為:select avg(sal) from emp group by job;即先分組,再求平均數(shù)
注意:select后出現(xiàn)的列,凡是沒(méi)有被組函數(shù)包圍的列, 必須出現(xiàn)在group by短語(yǔ)中;出現(xiàn)在group by后面的列,不一定出現(xiàn)在select后面,但是信息不完整。
結(jié)論:select后面的非組函數(shù)的列和group by后面列保持一致。*/
select job,max(sal) Max_s,min(sal) Min_s,count(*) from emp group by job; 注釋:區(qū)別where 是對(duì)表中數(shù)據(jù)的過(guò)濾;having是對(duì)分組得到的結(jié)果數(shù)據(jù)進(jìn)一步過(guò)濾。select--from--where--group by--having--order by 正常執(zhí)行順序
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000; 查詢哪些部門的平均薪水大于2000;對(duì)部門進(jìn)行分組,求平均薪水,但只有平均薪水大于2000才顯示出來(lái)----------注意:凡是對(duì)組函數(shù)過(guò)濾,使用having,非組函數(shù)用where
select job,count(*) from emp where job is not null group by job having count(*)>2 order by count(*); 先找出job不為空的記錄,接著對(duì)job進(jìn)行分組,然后選取人數(shù)大于2的記錄,最后按每組記錄個(gè)數(shù)從小到大排序輸出(asc省略了)
select deptno,count(*) from emp group by deptno having count(*)>5 order by count(*);
****************非關(guān)聯(lián)子查詢*****************
select ename from emp where sal>(select sal from emp where ename='FORD'); 先執(zhí)行子查詢,然后在作為一個(gè)結(jié)果參與主查詢的執(zhí)行*/
select ename,sal from emp where sal=(select max(sal)from emp); 找出最大工資的值,然后與其它值進(jìn)行比較,相等的輸出------------注意:?jiǎn)涡斜容^運(yùn)算符都只能和一個(gè)值比較*/
select ename,job from emp where deptno in (select deptno from emp where job='CLERK'); 如果子查詢返回多行數(shù)據(jù),必須使用多行比較運(yùn)算符:in
select deptno,ename,sal from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno); 子查詢執(zhí)行后是多行,所以要使用in,查詢結(jié)果2列,where顯示要與之對(duì)應(yīng)*/
select deptno,avg(sal) from emp group by deptno having avg(sal)>(select avg(sal) from emp where deptno=20); 先算出每個(gè)部門的平均工資,再和20部門的平均工資進(jìn)行比較
select ename,job from emp where deptno in (select deptno from emp group by deptno having avg(sal)>2000)
select ename form emp where empno not in (select mgr from emp) 查詢哪些人不是領(lǐng)導(dǎo),返回結(jié)果有null值,且使用not in 運(yùn)算符,則無(wú)結(jié)果*/
*************關(guān)聯(lián)子查詢************
select ename,sal,deprno from emp outer where sal>(select avg(sal) from emp where deptno=outer.deptno) 查詢哪些員工薪水比本部門的平均薪水高,子查詢不再是獨(dú)立的Sql語(yǔ)句,需要以來(lái)主查詢傳來(lái)的參數(shù)*/
select ename,job,deptno from emp outer where exists (select 'a'from emp where mgr=outer.empno); exists關(guān)鍵字判斷子查詢有沒(méi)有數(shù)據(jù)返回,有則為ture,沒(méi)有則為false。它不關(guān)心子查詢的結(jié)果,所以select后寫什么都行*/
************多表查詢***************
select e.deptno,e,ename,d.dname from emp e join dept d on e.deptno=d.deptno; 兩個(gè)表連接,表1 join 表2 on 條件,結(jié)論:沒(méi)有部門的員工和沒(méi)有員工的部門都不會(huì)出現(xiàn)
***內(nèi)連接的表現(xiàn)形式***
1、等值連接
select e.ename,e.job,e.sal,d.dname from emp e join dept d on e.deptno =d.deptno and e.job='MANAGER'; 先用條件e.job = ‘MANAGER’對(duì)emp表進(jìn)行過(guò)濾,結(jié)果集再和dept表進(jìn)行內(nèi)連接。
2、非等值連接
select e.ename, e.sal, s.grade,s.losal, s.hisal from emp e join salgrade s on e.sal between s.losal and s.hisal; 查詢emp表中員工的工資屬于哪個(gè)級(jí)別
3、自連接
select worker.ename,manager.ename from emp worker join emp manager on worker.mgr=manager.empno; 涉及同一張表的數(shù)據(jù)
內(nèi)連接總結(jié):一張表里的記錄一定在另一張表中存在匹配的記錄,否則不能出現(xiàn)在結(jié)果集中
外連接的特征:
如果驅(qū)動(dòng)表在匹配表中找不到匹配記錄,則匹配一行空行。
外連接結(jié)果集=內(nèi)連接結(jié)果集+驅(qū)動(dòng)表在匹配表中匹配不上的記錄和空值。
外連接的本質(zhì)是驅(qū)動(dòng)表中的數(shù)據(jù)一個(gè)都不能少。
left outer join以左邊的表為驅(qū)動(dòng)表。
right outer join以右邊的表為驅(qū)動(dòng)表。
select e.empno , e.ename , d.dname from emp e left outer join dept d on e.deptno = d.deptno ; 結(jié)果集中包括有部門的員工和沒(méi)有部門的員工 */
select e.empno , e.ename , d.dname from dept d left outer join emp e on e.deptno = d.deptno; 結(jié)果集中包括有員工的部門和沒(méi)有員工的部門*/
結(jié)論:t1 left outer join t2等價(jià)于: t2 right outer join t1
t1 right outer join t2等價(jià)于:t2 left outer join t1
全外連接的結(jié)果集 = 內(nèi)連接的結(jié)果集 +
驅(qū)動(dòng)表中在匹配表中找不到匹配記錄的數(shù)據(jù)和null值 +
匹配表中在驅(qū)動(dòng)表中找不到匹配記錄的數(shù)據(jù)和null值
***************集合***************
A = {1,2,3,4,5,6}
B = {2,4,6,8}
A union B = {1,2,3,4,5,6,8}
A union all B = {1,2,2,3,4,4,5,6,6,8}
A intersect B = {2,4,6}
A minus B = {1,3,5}
********數(shù)據(jù)操作語(yǔ)言(DML)*********
****1、insert語(yǔ)句****
一次增加多條記錄,使用子查詢代替values 。在emp表中查詢部門10的員工編號(hào),員工姓名,那么id、name與empno和ename相對(duì)應(yīng)。
insert into student_ning(id, name) select empno, ename from emp where deptno = 10;
****2、復(fù)制表****
create table 表名 as 查詢語(yǔ)句; 注釋:復(fù)制全表
create table salgrade_yyy as select * from salgrade where 1<>1; 只復(fù)制結(jié)構(gòu),不復(fù)制數(shù)據(jù)*
create table emp_yyy as select empno,ename,sal*12 year_sal from emp where deptno = 10;復(fù)制一部分?jǐn)?shù)據(jù)
create table emp_bak as select * from emp where 1=0; 創(chuàng)建一個(gè)空表
****3、update語(yǔ)句****
update emp_ning set sal = 1000 where empno = 7369; update語(yǔ)法結(jié)構(gòu): update 表名 set 列名 = 新的列值, 列名 = 新的列值. ….where 條件;
****4、delete語(yǔ)句****
語(yǔ)法結(jié)構(gòu): delete [from] 表名 where 條件;
drop table 會(huì)刪除表結(jié)構(gòu)和數(shù)據(jù);truncate 刪除表數(shù)據(jù),保留表結(jié)構(gòu)。drop 和truncate 都不可以回退。delete 僅刪除數(shù)據(jù),可以回退。
***5、事務(wù)語(yǔ)句****
包括:
commit事務(wù)提交:將所有的數(shù)據(jù)改動(dòng)提交
rollback:事務(wù)回滾、回退到事務(wù)之初,數(shù)據(jù)的狀態(tài)和事務(wù)開(kāi)始之前完全一致。
savepoint:設(shè)置保存點(diǎn) , 可以回滾( rollback )到指定的保存點(diǎn)。
結(jié)論
1) 提交、回滾前事務(wù)內(nèi)部的數(shù)據(jù)改變只有在自己的會(huì)話中能夠看到。
2) 提交、回滾前事務(wù)會(huì)對(duì)操作的數(shù)據(jù)加鎖,不允許其它事務(wù)操作。
3) 如果提交( commit )后,數(shù)據(jù)的改變被確認(rèn),則
4) 所有的會(huì)話都能看到被改變的結(jié)果;
5) 數(shù)據(jù)上的鎖被釋放;
6) 保存數(shù)據(jù)的臨時(shí)空間被釋放
7) 如果回滾( rollback ) , 則
8) 數(shù)據(jù)的改變被取消;
9) 數(shù)據(jù)上的鎖被釋放;
0) 臨時(shí)空間被釋放。
*************數(shù)據(jù)定義語(yǔ)言***************
包括create / drop / alter / truncate
****1、建表****
建表的兩種方式:
第1種,自定義表的列和數(shù)據(jù)類型
create table 表名(
列名 列的數(shù)據(jù)類型, ....
);
第2種,由一個(gè)現(xiàn)存的表復(fù)制新表
create table 表名
as
查詢語(yǔ)句 ;
****2、刪表****
drop 語(yǔ)法結(jié)構(gòu): drop table 表名 ;
select a.table_name,b.created from user_tables a join user_objects b on a.table_name = b.object_name where b.created > '10-SEP-12'; 找出12年9月10日后創(chuàng)建的表,刪除過(guò)時(shí)的表。
****3、截取****
1) truncate 保留表結(jié)構(gòu),刪除表中所有數(shù)據(jù)
2) truncate 操作不需提交( commit ),沒(méi)有回退( rollback )的機(jī)會(huì)
3) 語(yǔ)法結(jié)構(gòu): truncate table 表名 ;
4) truncate 和 delete 的區(qū)別:
? truncate 在功能上等同于:delete + commit。
? delete 操作將刪除數(shù)據(jù)存儲(chǔ)到臨時(shí)空間中,不直接刪除,可以回退。
truncate 操作直接刪除,不占用臨時(shí)空間,不能回退。
****4、修改****
alter table temp_ning add(name char(10)); 增加列(只能增加在最后一列)
alter table temp_ning rename column password to pwd;修改字段命名
alter table temp_ning modify(pwd char(8)); 修改列的數(shù)據(jù)類型
alter table temp_ning drop column pwd; 刪除列
**************數(shù)據(jù)控制語(yǔ)言****************
grant select on emp to zhang; 將查看emp 表的權(quán)限賦予zhang , zhang只能看不能改
revoke select on emp from zhang; 將select權(quán)限回收;zhang 賬戶再次訪問(wèn)時(shí)出錯(cuò)。
**************約束條件*********************
表上的約束(CONSTRAINTS)保證數(shù)據(jù)的完整性一致性
約束條件:
主鍵:primary key,PK = unique + not null,是約束條件的一種,
用于標(biāo)識(shí)唯一+非空。
外鍵:foreign key,F(xiàn)K。Major: 專業(yè)。
唯一:unique。注冊(cè)一個(gè)論壇,e-mail是唯一的。允許為空
非空:not null。注冊(cè)郵箱時(shí)候,用戶名、密碼是非空。
檢查:check。學(xué)生的年齡只能是正數(shù)。性別設(shè)定只能男/女,M:male / F:female,還可以設(shè)置為空。
****1、主鍵約束****
創(chuàng)建主鍵約束有2種方式:
1)建表時(shí)創(chuàng)建,可以建立在列級(jí)或表級(jí)(列級(jí)約束是跟在列定義后邊的約束定義;表級(jí)約束就是定義完列后再定義的約束。)。
2)在建表后創(chuàng)建,建立在表級(jí)。
CREATE TABLE student_ning1(
id NUMBER,
name VARCHAR2(20),
CONSTRAINT stuning1_id_pk PRIMARY KEY(id));
主鍵約束建立在表級(jí)
****2、非空約束***
創(chuàng)建非空約束:只能建立在列級(jí)。
create table student_ning(
id number primary key,
name varchar2(20) not null);
****3、唯一約束****
唯一約束可以定義在表級(jí)、列級(jí)。
****4、check約束****
create table student_ning (
id number primary key,
name varchar2(20),
sex char,
constraint stuning_sex_ck check (sex in ('M','F')));
****5、外鍵約束****
constraint stuning_mid foreign key (mid) references major_ning(id) ); 語(yǔ)法結(jié)構(gòu):foreign key (外鍵名) references 子表(主鍵名)
在建立子表時(shí),外鍵約束增加設(shè)定條件,有兩個(gè)可選短語(yǔ):on delete set null(一旦主表數(shù)據(jù)被刪除,從表的外鍵列值設(shè)置為null。)和on delete cascade(級(jí)聯(lián)刪除(主表數(shù)據(jù)刪除,從表相關(guān)聯(lián)數(shù)據(jù)統(tǒng)統(tǒng)刪除) 。)。
alter table student_ning drop constraint stuning_mid_fk; 刪除約束條件
【Oracle復(fù)習(xí)知識(shí)點(diǎn)】相關(guān)文章:
Oracle認(rèn)證考試知識(shí)點(diǎn):修改sid的步驟05-29
Oracle認(rèn)證:ORACLE綁定變量BINDPEEKING08-26
Oracle認(rèn)證:Oracle避免全表掃描方式08-26
Oracle認(rèn)證:Oracle內(nèi)存結(jié)構(gòu)研究-PGA篇08-26
oracle的sql語(yǔ)句06-18
Oracle認(rèn)證考試06-05
中考英語(yǔ)知識(shí)點(diǎn)復(fù)習(xí)06-04