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) ;
©达内科技论坛 --达内)