oracle——學習之路(select檢索)

select語法:數據庫

 

select   [distinct|all]    列名     from   表名     [where]   [group by]   [having]    [order by]                ps:[] 表示能夠省略網絡

 

 

舉幾個栗子:oracle

select * from emp;                                                                                                                         ps:* 表示全部字段即把要查詢的表的全部字段都顯示出來,並不建議使用由於網絡消耗大,效率也不高函數

 

select empno from emp;                                                                                                               ps:篩選指定字段,能夠篩選多個,字段之間用逗號隔開spa

 

select empno,ename,job from emp;                                                                                               ps:篩選指定字段,能夠篩選多個,字段之間用逗號隔開3d

 

select job from emp;blog

 

 

select distinct(job) from emp;                                                                                                            ps:all是默認的即有重複也會顯示,distinct消除重複排序

 

select * from emp where comm is not null;                                                                                    ps:null表示空值class

 

select job,count(*),sum(sal) from emp group by job;                                                                           ps:count() sum()爲聚合函數後面會講效率

 

select sum(sal), count(*), (sum(sal)/count(*)) from emp group by job having (sum(sal)/count(*))>2000;            ps:having 要與group by 連用 having 要放在group by後面,group by 能夠單獨使用

 

select * from emp order by empno desc;                                                                                        ps:desc是按降序排序,asc是按升序排序,默認是asc

 

select empno as 僱員編號 from emp order by 僱員編號;                                                               ps:僱員編號是別名,別名中英文不限,固然你要用阿拉伯語,德語什麼的只要能夠打出來識別也沒問題,as能夠省略也能夠寫,都是同樣的道理,order by後應該使用別名,只有order by 能夠這樣,having後面都不能夠

 

select * from emp order by empno desc ,job;                                                                                  ps:能夠根據兩個字段進行排序,先按照empno進行降序排序,若是相等對job進行升序排序

 

select job,sum(sal) from emp group by job ;               ps:group by 後的字段必須在查詢字段出現,查詢字段還能夠出現聚合函數

 

select job,sum(sal)*2 from emp group by job ;                                                    ps:不表示數據庫的數據被改變只表示顯示的結果

 

select ename ,sal from emp where sal not between 4000 and 5000;                                             ps:between 4000  and 5000   至關於 >=4000 and <=5000

 

select job , ename from emp where sal in(800,1600,1500);                                             ps:在集合中選取符合條件的

 select ename from emp where ename like '__A%';                                                          ps:模糊查詢,_表明匹配一個字符,%表明匹配至少0 個字符

 

 select ename from emp where ename like '%A%' or ename like  '%E%';                                               

 

 

使用where來進行篩選時,經常使用的操做符:< 小於  >大於   = 等於  !=不等於  <>不等於  <=小於等於  >=大於等於

 having是對group分的組進行篩選,不一樣於where     group要分的組是where篩選事後的

 

子查詢:

 

select empno, ename from emp where empno in (select empno from emp where comm is not null);

 

 

any    和<any     <=any表示小於或小於等於列表中最大值,與  in配合使用   和> any    >=any表示大於或大於等於列表中的最小值     =any 至關於in

 

all     和<all     <=all表示小於或小於等於列表中的最小值,與in配合使用    和>all     >=all表示大於或大於等於列表中的最大值     <>all至關於 not in

 

舉幾個栗子:

select sal from emp where comm is not null;(1)

select * from emp where sal =any(select sal from emp where comm is not null);(2)

 select * from emp where sal in(select sal from emp where comm is not null);(3)

 

select * from emp where sal <any(select sal from emp where comm is not null);

 

 select * from emp where sal <=any(select sal from emp where comm is not null);

 

select * from emp where sal >any(select sal from emp where comm is not null);

 

select * from emp where sal >=any(select sal from emp where comm is not null);

select * from emp where sal <>all(select sal from emp where comm is not null);

 

select * from emp where sal >all(select sal from emp where comm is not null);

select * from emp where sal >=all(select sal from emp where comm is not null);

select * from emp where sal <all(select sal from emp where comm is not null);

select * from emp where sal <=all(select sal from emp where comm is not null);

注意看這幾句的關係

 

鏈接查詢:

select * from emp, dept;           產生笛卡兒積

 

內鏈接:等值鏈接、不等值鏈接

等值鏈接:鏈接中使用「=」(等號) 鏈接兩個條件列表

select * from emp e, dept d where e.deptno=d.deptno;      select * from emp e inner join dept d on e.deptno=d.deptno;    //功能相等    ps:inner能夠省略,系統自動識別爲內鏈接

不等值鏈接:鏈接時使用<、 > 、>=、  <=、 between ……and ……、in等鏈接兩個條件列表

自鏈接:把自身表的一個引用做爲另外一個表來處理

select e.empno 僱員編號, e.ename 僱員姓名,m.empno 領導編號 from emp e, emp m where e.mgr=m.empno;

外鏈接:左外鏈接、右外鏈接、全外鏈接

左外鏈接:返回結果不單單符合鏈接條件的行記錄,左表所有記錄都會包含,右表不知足的用NULL填充

右外鏈接:返回結果不單單符合鏈接條件的行記錄,右表所有記錄都會包含,左表不知足的用NULL填充

全外鏈接:不管是否成功匹配,左右表記錄都返回,不知足用NULL填充

 

oracle使用外鏈接有一種特殊的方法,用(+)表示外鏈接,放在非主表的一方

 

舉幾個栗子:

dept是左表,採用左外鏈接

select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal   from dept d ,(select empno, ename, job ,sal ,deptno from emp where comm is null) a where d.deptno=a.deptno(+);

select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal   from dept d left join (select empno, ename, job ,sal ,deptno from emp where comm is null) a on d.deptno=a.deptno;

以上兩個查詢語句相等

採用右外鏈接:

select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal   from dept d right join (select empno, ename, job ,sal ,deptno from emp where comm is null) a on d.deptno=a.deptno;

select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal   from dept d , (select empno, ename, job ,sal ,deptno from emp where comm is null) a where d.deptno(+)=a.deptno;

以上兩個查詢語句相等

 採用全外鏈接:

 select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal   from dept d full join (select empno, ename, job ,sal ,deptno from emp where comm is null) a on d.deptno=a.deptno;

 

 

 

 

 

 

獻給和我同樣的小白,有關查詢還有不少知識點,這裏只寫了經常使用的,若有錯誤請指出,謝謝!

相關文章
相關標籤/搜索