1浦妄,wherer:子查詢一般會(huì)返回單行單列 單行多列 多行單列 厨喂;
2曾雕,having:子查詢會(huì)返回單行單列卒蘸,同時(shí)表示要使用統(tǒng)計(jì)函數(shù);
3翻默,from:子查詢返回多行多列數(shù)據(jù)(表結(jié)構(gòu));
4恰起,select:返回單行單列 (一般不使用)修械;
where(進(jìn)行數(shù)據(jù)行的篩選操作):
- a:查詢出低于公司平均工資的雇員信息。
select * from emp where sal<(select avg(sal) from emp);
以上的查詢返回單行單列可以作為where子句的過濾條件使用检盼;
- b:查詢公司最早雇傭的雇員的信息肯污。
select * from emp where hiredate= (select MIN(hiredate) from emp);
- C:查詢與scott從事同一工作并且工資相同的雇員信息。
select* from emp
where (job,sal) =( select job,sal
from emp
where ename ='scott') and ename <>'scott';
in:指的是與子查詢返回的內(nèi)容相同吨枉。
select * from emp where sal in (select sal from emp where job = 'manager');
not in:
select* from emp where sal not in(select sal from emp where job='manager')
子查詢中不能有空蹦渣。
any:
select* from emp where sal = any(select sal from emp where job='manager');
select* from emp where sal > any(select sal from emp where job='manager');
比子查詢的返回的最大值要大
select* from emp where sal < any(select sal from emp where job='manager');
比子查詢返回的最大值要小
all:
<all :比子查詢的返回的最小值要小
>all :比子查詢的返回的最大值要大
where子查詢的幾率很高;
having:
- 查詢出高于公司平均工資的職位名稱 職位人數(shù) 平均工資貌亭。
select job,count(empno),avg(sal) from emp group by job
having avg(sal)>(select avg(sal) from emp);
select(一般不用):
查詢每個(gè)雇員的編號(hào)姓名 職位 部門名稱柬唯。
select e.empno,e.ename,e.job,
(select d.dname from dept d whered.deptno=e.deptno)from emp e;
(1+n) 次查詢;
from(重點(diǎn)):
- 查詢出每個(gè)部門的名稱 位置 部門人數(shù)圃庭。
select d.dname,d.loc,count(e.empno)
from emp e,dept d
where e.deptno(+)=d.deptno
group by d.dname,d.loc;
(多表查詢)
分步1:select d.deptno,d.dname,d.locfrom dept d;
分步2:select deptno,count(empno)from emp group by deptno;
正確的查詢:
select d.deptno,d.dname,d.loc锄奢,temp.count
from dept d,(select deptno,count(empno) count from emp
group by deptno) temp
where d.deptno=temp.deptno(+);
- 多表查詢和子查詢都能實(shí)現(xiàn)統(tǒng)計(jì)失晴,那么那種方式更好呢?
答:在實(shí)際的工作當(dāng)中拘央,子查詢的主要目地是解決多表查詢的性能問題涂屁,所以在開發(fā)中使用的是 最多的。最大作用是解決多表查詢帶來的笛卡爾積影響性能的問題灰伟。
復(fù)雜查詢= 簡(jiǎn)單查詢+限定查詢+ 多表查詢+ 分組統(tǒng)計(jì)查詢 +子查詢拆又;