Rownum是Oracle為每個表附加的一個尾欄位,它記錄著每一行的行號。Oracle的一個缺陷就是rownum只能和’<’或者’<=’一起使用。如果要求大於等於這可用其他方法。
求薪水最高的前5名
select ename,sal
from ( select ename,sal
from emp
order by sal desc)
where rownum <=5;
求薪水的第6至第10位的員工姓名和薪水
select ename,sal
from ( select ename,sal,rownum r
from (select ename,sal
from emp
order by sal desc)
)
where r<=10 and r>=6;
Create New User
首先備份( <!--[endif]-->backup scott),在命令列下輸入以下命令,按提示操作
exp
然後建立使用者 <!--[endif]-->create user,在sqlplus下切換到管理使用者,輸入
create user USER_NAME(such as:lue) identified by password(lue) default tablespace users quota(配額) 10M on users即是給使用者指派10M的空間
其次是分配建立使用者的許可權,命令:
grant create session(登陸許可權),creat table,create view to lue
最後匯入資料 <!--[endif]-->import the data,在命令列下輸入以下命令,按提示操作;
imp
一道SQL面試題
有3張表S,C,SC
S(sno,sname) 代表(學號,姓名)
C(cno,cname,cteacher)代表(課程號,課程名,教室)
SC(sno,cno,scgrade)代表(學號,課程號,成績)
問題:
<!--[if !supportLists]-->1, <!--[endif]-->找出沒有選過“liming”老師的所有學生的姓名
<!--[if !supportLists]-->2, <!--[endif]-->列出2門以上(含2門)不及格學生姓名及平均成績
<!--[if !supportLists]-->3, <!--[endif]-->學過1號課程又學過2號課程所有學生的姓名
答案:
//Answer 1:
select sname
from S join SC on(s.sno = sc.sno) join C (c.cno = sc.cno)
where C.cteacher <> ‘liming’;
//answer 2:
select sname
where sno in (select sno,count(*)
from SC
where scgrade < 60
group by sno
having count(*) >1);
//answer 3:
//方法1:
select sname
from S join (select sno
from SC
where C.cno = 1 and C.cno = 2) t
on (S.sno = t.sno);
//方法2:
select sname
from S
where sno in(select sno
from SC
where cno = 1 and cno in (select distinct sno
from SC
where cno = 2)
);