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