1、找出一個表按降序排列的前三行?
下面錯在哪裏:
SQL> select rownum, last_name, salaryM}A
2 from s_empE#WD`
3 where rownum<=3J
4 order by salary desc;P
注意:與語句的執行循序有關,參看”sql的執行順序“一文。
正確語句:SQL> select rownum, last_name, salary(3
2 from (select last_name, salarylV
3 from s_empIr92~=
4 order by salary desc)po
5 where rownum<=3;q"S/Z
ROWNUM LAST_NAME SALARYo
---------- ------------------------- ----------3q
1 小明 6000b3
3 小紅 5000BV
2 小文 4000
2、找出表中的某一行或某幾行的數據
下面兩種方式錯在哪裏:
SQL> select * from s_emp4r[Fl
2 where rownum=3;h
或者
where rownum between 3 and5;&
注意:rownum可以用<和<=號,不可以用=,>號和其他比較其它比較符號
rownum爲僞列,每次查詢是從第一行開始的,如果向下面那樣做,將它實例化,就可以查得到
正確的方法如下:yE
©達內科技論壇 --達內科技論壇 |5l!
SQL> lf<*
1 select last_name, salary/
2 from (select rownum a, b.*OGI^
3 from s_emp b)~C<-\~
4* where a=3H
SQL> /K
©達內科技論壇 --達內科技論壇 4M*G
LAST_NAME SALARY9I
------------------------- ----------G;I
小文 40000
3、找出第三行到第五行之間的數據:'O=
SQL> lngj@-g
1 select last_name, salary6
2 from (select rownum a, b.*GLOA
3 from s_emp b)9
4 where a between 3 and 5";
4、找到那些工資高於他們所在部門的平均工資的員工。
第一種方法:
select last_name,dept_id,salary
from s_emp
where salary>(select avg(salary)
from s_emp
where dept_id=s_emp.dept_id);
第二種方法:
select a.last_name, a.salary, a.dept_id, b.avgsal
from s_emp a, (select dept_id, avg(salary) avgsal from s_emp group by dept_id) b
where a.dept_id=b.dept_id
and a.salary>b.avgsal);
5、找出那些工資高於他們所在部門的manager的工資的員工。
select id, last_name, salary, manager_id
from s_emp a
where salary>(select salary from s_emp where id=a.manager_id) ;
©達內科技論壇 --達內)