Oracle資料庫學習

2021-07-31 14:46:40 字數 4708 閱讀 1738

本章學習要點:

1)子查詢 - 將乙個查詢包含到另乙個查詢中

<1>如:emp表中,查詢與「scott」在同乙個部門的雇員資訊

原來我們是先查詢scott所在的部門即:select deptno from emp where ename=』scott』

然後通過返回的部門號在查詢員工資訊:select * from emp where deptno=20;

如果用子查詢則是如下即乙個查詢中套用另乙個查詢其中(a) =代表是乙個值

select * from emp where deptno=(select deptno from emp where ename=』scott』)

<2>另乙個例子:查詢編號》7900的員工的職位相同的雇員資訊

原來我們先查詢 select job from emp where empno>7900;找出編號大於7900的員工職位,發現返回

的值有2個,這時我們發現無法再通過「=」去設定條件了

select * from emp where( job=analyst or clerk);這樣是報錯的,對於這種同一種類的條件我們不再使用「=而是用「in」」修改後為

select *from emp where job in(select job from emp where empno>7900);

<3>emp表中,查詢雇員薪水大於3000的部門名稱(部門名稱位於dept表中)

select dname from dept where deptno in (select deptno from emp e where e.sal>3000)

select dname from dept d where exists (select * from emp where d.deptno = emp.deptno and sal>3000)

前者則是之前方法的再次使用,後者則是關鍵字「exists」的運用,這個關鍵字判斷,兩表之間是否存在相同的部門序號切滿足薪水大於3000,如若有則返回結果。

2)連 接 - 合併多個資料表中的列

(1)內連線

<1>語法

/* select ……

from 表1 inner join 表2

on ……*/

/* select ……

from 表1,表2

where ……*/

<2>等值連線

select * from emp; –14

select *from dept; –4

–等值是 14(由於有emp為主,所以返回的是emp中相同資料量)

select ename,job,sal,dept.dname from emp inner join dept on dept.deptno = emp.deptno

以emp表為主,通過兩表共有的deptno來查詢資料,返回共同資料

select ename,job,sal,dept.dname from emp , dept where dept.deptno = emp.deptno

以emp表為主,通過兩表共有的deptno來查詢資料,返回共同資料

<3> 不等值連線

–不等值是 =14*4-14=42(由於以emp為主表,emp中每條資料都要與dept中的4條資料做比較,上面等值的有14條,不等值的就是14*4-14=42)

「<>」,」!=」為不等號

select ename,job,sal,dept.dname from emp inner join dept on dept.deptno <> emp.deptno

select ename,job,sal,dept.dname from emp inner join dept on dept.deptno != emp.deptno

select ename,job,sal,dept.dname from emp , dept where dept.deptno != emp.deptno

<4>自然連線

–查詢當前員工時領導

select distinct e1.ename from emp e1 inner join emp e2 on e1.empno = e2.mgr;(distinct過濾重複資訊)

–簡寫:

select distinct e1.ename from emp e1, emp e2 where e1.empno = e2.mgr;

(2)外連線

1)左外連線

/* select ……

from 表1 left join 表2

on ……*/

–以左表為基準,如果查詢沒有相關聯的資料填充為null值

–14

select * from emp left join dept on emp.deptno = dept.deptno;

–能交換表的位置 (會影響的查詢結果)

–15

select * from dept left join emp on emp.deptno = dept.deptno;

2)右外連線

/* select ……

from 表1 right join 表2

on ……*/

–15

select * from emp right join dept on emp.deptno = dept.deptno;

–能交換表的位置 (會影響的查詢結果)

–14

select * from dept right join emp on emp.deptno = dept.deptno;

(3)自連線

(4)交叉連線

3)聯 合 - 合併多個資料表中的行

集合操作符將兩個查詢的結果組合成乙個結果 ===>表的結構必須相同,否則不能操作!!!

–複製新錶

create table myemp as select * from emp where empno in (7788,7900);

select * from myemp; –2

–union 並集 (過濾重複的資料)—-14

select * from emp –14

union

select * from myemp;

–union all 並集 (所有的資料)——16

select * from emp –14

union all

select * from myemp; –2

–intersect 交集 (取相同的部分)——2

select * from emp –14

intersect

select * from myemp; –2

–minus 補集 (14-2)

select * from emp –14

minus

select * from myemp; –2

oracle 中偽列就像乙個表列,但是它並沒有儲存在表中

偽列可以從表中查詢,但不能插入、更新和刪除它們的值

rowid 是表中行的儲存位址,該位址可以唯一地標識資料庫中的一行,

可以使用 rowid 偽列快速地定位表中的一行

rownum 是查詢返回的結果集中行的序號,可以使用它來限制查詢返回的行數

select e.*,rownum from emp e;

–如何獲取雇員表中薪水最高的前5人?

select ee.,rownum from (select from emp order by sal desc) ee

where rownum<=5;

select * from (select * from emp order by sal desc) where rownum<=10;

select * from (select * from emp order by sal desc) where rownum>=3;

偽列出了可以大於等於1 其他都不能用大於

–分頁

–1)每頁顯示5個 pagesize=5;

–2)總個數是14條 pagecount=14;

–3)總頁數 3 pagetotal = (14%5==0)?(14/5):(14/5+1);

–4)當前頁1 currentpage=1;

–第1頁 rownum<=5 ==>pagesize*currentpage

select * from

(select ee.,rownum r from (select from emp order by sal desc) ee where rownum<=5 )

where r>0 –r>0 ==>(currentpage-1)*pagesize

–第2頁

select * from

(select ee.,rownum r from (select from emp order by sal desc) ee where rownum<=10 )

where r>5

–第3頁

select * from

(select ee.,rownum r from (select from emp order by sal desc) ee where rownum<=15 )

where r>10

oracle資料庫學習

最近在做使用者資料篩選的時候發現使用者資料載入和查詢比較慢,所以,參考網上資料進行了寫小優化,在資料庫中執行快了那麼一些,在這裡記錄下相關命令。做法 建立字段索引,使用instr函式。1 使用instr代替like 開頭會導致索引失效 instr的基本用法 select count from 表名 ...

Oracle資料庫學習

本章學習要點 概念 序列是用於生成唯 一 連續序號的物件序列可以是公升序的,也可以是降序的使用create sequence語句建立序列 語法 create sequence 序列化的名稱 start with 10 開始10 increment by 10 每次步長10 maxvalue 2000...

Oracle資料庫學習

ddl data definition languag 資料定義語言 用來定義和修改表物件的語言.操作的物件是 使用者,資料庫 oracle中只有乙個全域性資料庫 表,表空間 oracle中才有的 試圖之類的,不會對具體資料進行操作 dml data manipulation language 資料...