oracle筆記
這是以前學習ORACLE的時候做的筆記,現在拿出來供以後參考:
講到資料庫的時候就要講到資料庫三正規化:
第一正規化:
每一個表都應該有主鍵;
列不可分;具體問題具體分析;
第二正規化:當表中有多個主鍵時,其他資料不能依賴於部分主鍵,否則這樣的表會產生資料冗餘;
第三正規化:不能存在傳遞依賴;也就是說其他欄位的值不能依賴於非主鍵;
1.select sal*12 anuualsal from emp 該語句是用anuual指定別名,記住anuual與別名中間不能有空格,如果別名中有特殊字元(如中文、空格等)則需用雙引號把anuual和別名括起來!
2.任何含有空值的表示式最後的計算結果都是空值
3.用||來連線兩個字串,Oracle裡面的字串是用單引號括起來的,如果所要表示的字串裡面本身就有一個單引號,那麼需要在字串中有單引號的那個位置再加一個單引號!
4.在select語句中可以用distinct去除某一欄位重複的行,如果distinct後接多個欄位,則表示當多個欄位都相同的時候只顯示其中的一條記錄,如select distinc deptno,job from emp 則表示所選的記錄中當deptno和job的組合相同的時候只顯示其中的一條記錄;
5.當需要選擇某一欄位中記錄為空的時候條件裡面應選isnull,而不是判斷某一欄位值是否為空,如select ename,sal,comm from emp where comm is null;是正確的,而select ename,sal,comm from emp where comm=null;則是錯誤的;
6.百分號表示一個或多個字元,下劃線表示一個字元,當所要select的欄位值中含有萬用字元的時候就要使用跳脫字元了,預設的跳脫字元反斜槓,也可以使用escape自己指定跳脫字元,如 select ename from emp where ename like '%$%%' escape '$' ,則表示select名字裡面含有一個%的人的記錄,其中的$是跳脫字元;
7.函式:to_char()轉換為某一格式,其中9代表一位數字,0也代表一位數字,但是當使用9時如果小數點前面寫了9的那一位沒有數字時則該位不顯示,而如果使用的是0 的話則如果小數點前面寫了0的那一位如果沒有數字則該位顯示0;L代表本地貨幣符號;to_char()使用的格式為to_char(欄位,‘格式’);如select to_char(hiredate,‘YYYY-MM-DD HH-MI-SS')這樣的時間格式是十二進位制的,如果在HH後面加上24就轉為二十四進位制的了!
to_date()函式將字串轉換為時間格式,其使用格式為to_date('時間','所要轉換的格式’)。都需用單引號括起來;
to_number()將特定格式的字串轉換為數字,其使用格式為to_number('特定格式的字串',‘所要轉換的格式,)如to_number('$1,250.00','$9,999.99');
函式nvl(aaa,0)的含義是當aaa的值為空時就用0代替,當不為空時則為aaa,aaa可以是一個欄位;
8.在等值連線中還可以使用join 表 using(欄位名)來連線兩個表;也可以使用join 表 on 條件;using不推薦使用;
9.表連線與子查詢示例:
--求部門中哪些人的薪水最高
select ename sal from emp
join (select max(sal) max_sal,deptno from emp group by deptno) t on (emp.sal = t.max_sal and emp.deptno = t.deptno)
--求部門平均薪水的等級
select deptno,avg_sal,grade from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal)
--求部門平均的薪水等級
select deptno,avg(grade) from
(select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal)) t group by deptno
--僱員中哪些人是經理人
select ename from emp where empno in (select distinct mgr from emp);
--不準用組函式,求薪水的最高值(面試題)
select sal from emp where sal not in (select distinct e1.sal from emp e1 join emp e2 on (e1.sal
--求平均薪水最高的部門的部門編號
select deptno from
(select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal =
(select max(avg_sal) from
(select avg(sal) avg_sal,deptno from emp group by deptno))
--求平均薪水最高的部門的部門名稱
select dname from dept where deptno =
(
select deptno from
(select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal =
(select max(avg_sal) from
(select avg(sal) avg_sal,deptno from emp group by deptno)))
--求平均薪水的等級最低的部門的部門名稱
select dname from dept where deptno = (select deptno from (select deptno,avg_sal,grade from (select avg(sal) avg_sal,deptno from emp group by deptno) e join salgrade s on (e.avg_sal between s.losal and s.hisal)) where grade = (select min(grade) from (select deptno,avg_sal,grade from (select avg(sal) avg_sal,deptno from emp group by deptno) e join salgrade s on (e.avg_sal between s.losal and s.hisal))));(巢狀好厲害!)
--求部門經理人中平均薪水最低的部門名稱
--求比普通員工的最高薪水還要高的經理人的名稱
select ename from emp where empno in (select distinct mgr from emp where mgr is not null) and sal>(select max(sal) from emp where empno not in (select distinct mgr from emp where mgr is not null));
--求薪水最高的前五名僱員
select ename,sal from (select ename,sal from emp order by sal desc) where rownum<=5;
--求薪水最高的第6到第10名僱員
select ename,sal from 大連婦科醫院哪個好
(
select ename,sal,rownum r from
(select ename,sal from emp order by sal desc)
) where r>=6 and r<=10;
--求最後入職的5個人
10.rownum表示的是某一行在此表中的行號,第一行為一,但rounum只能與<=或<號一起用,如果要查詢某一行或大於某一行的記錄則需要使用巢狀查詢。例如,如果要查詢某一表中的前五行的記錄則可以這樣表示,select * from emp where rownum<=5;
sequence是用來自動產生一個順序數的
create sequence seq;
select seq.nextval;
oracle 中有一張空表dual;
在Oracle中“--”可以註釋一行
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005147/viewspace-2789485/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 常用SQL筆記OracleSQL筆記
- [oracle零碎筆記]oracle零碎筆記(持續更新…)Oracle筆記
- oracle.Performance.Tuning筆記OracleORM筆記
- oracle學習筆記《一》Oracle筆記
- Oracle學習筆記(6)——函式Oracle筆記函式
- Oracle體系結構學習筆記Oracle筆記
- Linux下Oracle 11.2.0.1 RAC安裝筆記LinuxOracle筆記
- One-on-One Oracle閱讀筆記2(轉)Oracle筆記
- 筆記:Oracle - sys_guid()直接select亂碼筆記OracleGUI
- oracle學習筆記(十一) 高階查詢Oracle筆記
- Oracle高階培訓 第5課 學習筆記Oracle筆記
- Oracle高階培訓 第6課 學習筆記Oracle筆記
- Oracle高階培訓 第7課 學習筆記Oracle筆記
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- oracle學習筆記(十五) PL/SQL語法結構以及使用Oracle筆記SQL
- P6學習筆記(Oracle Primavera P6 R17)筆記Oracle
- 印象筆記 --- 方法分享筆記筆記
- 筆記筆記
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- docker 筆記Docker筆記
- hybrid筆記筆記
- Meteor筆記筆記
- String筆記筆記
- html 筆記HTML筆記
- kafka 筆記Kafka筆記
- 路由筆記路由筆記
- 筆記1筆記
- 筆記-FMDB筆記
- ES筆記筆記
- 筆記:Docker筆記Docker
- Liunx筆記筆記
- webSocket筆記Web筆記
- Shadowsocks 筆記筆記
- AbstractQueuedSynchronizer筆記筆記
- 筆記:Spring筆記Spring
- jQuery筆記jQuery筆記
- Restful 筆記REST筆記
- Cookie筆記Cookie筆記