標籤:java 字串 運算式 import public
group by 分組
--每個工作的人數select count(job) from emp group by job;--有多少工作select count(coutn(job)) from emp group by job;--每個工作的最高工資select max(sal) from emp group by job;--每個工作的最低工資select min(sal) from emp group by job;--每個工作的平均工資select avg(sal) from emp group by job;--所有工作中最大的平均工資select max(avg(sal)) from emp group by job;
使用having 根據條件過濾組
select job,count(job) from emp group by job having count(job)>=3;
where 用在group by 之前
select job,count(job) from emp where sal>1000 group by job having count(job)>=3;
decode 函數
decode(value1 if1 then1 if2 then2 ... else)
decode(條件,值1,傳回值1,值2,傳回值2,...值n,傳回值n,預設值)
如果 value1=if1 返回then1
否則 如果 value1=if2 返回 then2
預設的傳回值是else
select decode(sal,1600,‘一千六‘,5000,‘五千‘,‘其他‘) from emp;--按照job的內容分類統計其中部門ID是30的人數select job,count(decode(DEPTNO,30,1,null)) deptno from emp group by(job);--按照部門分類 統計每個部門中工作是CLERK的人數select deptno,count(decode(job,‘CLERK‘,1,null)) counts from emp group by(deptno);--按照部門分類 計算每個每部中工作是CLERK的平均工資select deptno,avg(decode(job,‘CLERK‘,sal,null)) CLERK_AVG_SAL from emp group by(deptno);
insert into emp values(8000,‘lmdtx‘,‘CLERK‘,8080,to_date(‘1980/09/09‘,‘yyyy/mm/dd‘),30000,null,null);insert into emp values(8880,‘dsy‘,‘CLERK‘,8980,to_date(‘1982/02/02‘,‘yyyy/mm/dd‘),3000,null,null);
表的關聯
外鍵 在一個表中 存著對應另外一張表的主鍵
串連表
1·笛卡爾積 emp 表中 deptno 為空白的查詢不到
--emp表中的所有的行* dept中的所有的行select * from emp,dept;--需要寫過濾條件 過濾掉不需要的select * from emp,dept where emp.deptno=dept.deptno;select * from emp e.dept d where e.deptno=d.deptno;
2·內串連 這個結果和笛卡爾積 用條件後的結果一樣
inner join 和 join 一樣(省略 inner) 預設就是 內串連
join...on...from emp e inner join dept d on e.deptno=d.deptno
兩個表的名字一樣的
from emp inner join dept using(deptno)
select * from emp e inner join dept d on e.deptno=d.deptno;select * from emp inner join dept using(deptno);
3·外串連
1·左外接(左邊表的資料必須是全都有的,沒有的地方補null)
from emp left outer join dept using(deptno)
select * from emp left outer join dept on emp.deptno=dept.deptno;select ename,nvl(dname,‘還沒有部門‘) from emp2 left outer join dept2 using(deptno);
2·右外接
select * from emp right outer join dept using(deptno);--查詢所有部門的名稱和部門人數按人數的降序排select dname,count(empno) num from emp2 right join dept2 Using(deptno) group by dname order by num desc;
3·全外接(全都有)
emp full outer join dept
select * from emp full outer join dept using(deptno);--查詢所有部門的名稱以及部門的人數 沒有部門的人 化為 未分配select nvl(dname,‘未分配‘),count(empno) from emp2 full outer join dept2 using(deptno) group by dname order by dname;select nvl(dname,‘未分配部門‘) 部門名字,decode(count(empno),0,‘未分配人手‘,count(empno)) 人數 from emp2 full outer join dept2 using(deptno) group by dname order by dname;
4·自串連
實體表
關聯表
字典表
本文出自 “浪漫的偷笑” 部落格,請務必保留此出處http://lmdtx.blog.51cto.com/6942028/1835724
Java38: 資料庫二(Oracle)