1
:找出公司里收入最高的前三名員工:
SQL> select rownum, last_name, salary
?2 ?from (select last_name, salary
3????????
from s_emp
4????????
order by salary desc)
5???????
?where rownum<=3;
?
? ?ROWNUM LAST_NAME????????????? SALARY
??
---------- ------------------------- ----------
?
? ? ? ? 1 Velasquez????????????????????????????????
? ? ? ? 2 Ropeburn ?????????????????????????????? ?
? ? ? ? 3 Nguyen???????????????????????????????????? ?2897.5
QUVoW
?
達內科技論壇
--
達內科技論壇
=
?
達內科技論壇
--
達內科技論壇
J'
注意:請大家分析一下一下語句為什么不對:
dOb{RO
?
達內科技論壇
--
達內科技論壇
bt7]c0
SQL> select rownum, last_name, salary
?2 ?from s_emp
g:m4>
?3 ?where rownum<=3
.ny
?4 ?order by salary desc;
tUJ
?
達內科技論壇
--
達內科技論壇
pqGE\[
? ?ROWNUM LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY
!7.
---------- ------------------------- ----------
Y
? ? ? ? 1 Velasquez ? ? ? ? ? ? ? ? ? ? ? 4750
YHJ#V
? ? ? ? 3 Nagayama ? ? ? ? ? ? ? ? ? ? ? ?2660
%p8~
? ? ? ? 2 Ngao ? ? ? ? ? ? ? ? ? ? ? ? ? ?2000
Bb;
?
達內科技論壇
--
達內科技論壇
@
?
達內科技論壇
--
達內科技論壇
g#|E
2
:
找出表中的某一行或某幾行的數據:
k9
?
達內科技論壇
--
達內科技論壇
mM
(
1
):找出表中第三行數據:
P
用以下方法是不行的,因為
rownum
后面至可以用
<
或
<=
號
,
不可以用
=,>
號和其它的比較符號。
+h">^
?
達內科技論壇
--
達內科技論壇
Vr$$]h
SQL> select * from s_emp
{
?2 ?where rownum=3;
O_{
?
達內科技論壇
--
達內科技論壇
/;B
no rows selected
p(
?
達內科技論壇
--
達內科技論壇
1"B
SQL> select * from s_emp
">7
?2 ?where rownum between 3 and 5;
Dky!m
?
達內科技論壇
--
達內科技論壇
qS
no rows selected
m^)0
?
達內科技論壇
--
達內科技論壇
H_&
正確的方法如下:
,~w[KF
?
達內科技論壇
--
達內科技論壇
z7@>Me
SQL> l
/(
?1 ?select last_name, salary
(?\
?2 ?from (select rownum a, b.*
ZVwI!
?3 ? ? ? ?from s_emp b)
N
?4* where a=3
DI
SQL> /
Cu
?
達內科技論壇
--
達內科技論壇
`t
LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY
d$#>
------------------------- ----------
,/N?UK
Nagayama ? ? ? ? ? ? ? ? ? ? ? ?2660
w
?
達內科技論壇
--
達內科技論壇
.$CX
(
2
):找出第三行到第五行之間的數據:
L
SQL> l
]M]~H
?1 ?select last_name, salary
H
?2 ?from (select rownum a, b.*
CD5w+
?3 ? ? ? ?from s_emp b)
om2
?4* where a between 3 and 5
,fQ&,=
SQL> /
R4SS
?
達內科技論壇
--
達內科技論壇
O?D7)
LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY
5'
------------------------- ---------
Nagayama ? ? ? ? ? ? ? ? ? ? ? ?2660
@L
Quick-To-See ? ? ? ? ? ? ? ? ? ?2755
>
Ropeburn ? ? ? ? ? ? ? ? ? ? ? ?2945
Ni'=r
?
達內科技論壇
--
達內科技論壇
<Lh_VZ
3
:找出那些工資高于他們所在部門的平均工資的員工。
I'R*u
?
達內科技論壇
--
達內科技論壇
;7Z
(
1
):第一種方法:
5acm6S
SQL> select last_name, dept_id, salary
(
?2 ?from s_emp a
g1}+7
?3 ?where salary>(select avg(salary)
S-(
?4 ? ? ? ? ? ? ? ?from s_emp
2ksQsY
?5 ? ? ? ? ? ? ? ?where dept_id=a.dept_id);
PZRM
?
達內科技論壇
--
達內科技論壇
WFa=Fa
LAST_NAME ? ? ? ? ? ? ? ? ? ?DEPT_ID ? ? SALARY
_f7
------------------------- ---------- ----------
3x-v0
Velasquez ? ? ? ? ? ? ? ? ? ? ? ? 50 ? ? ? 4750
r6h*8
Urguhart ? ? ? ? ? ? ? ? ? ? ? ? ?41 ? ? ? 2280
yECF*
Menchu ? ? ? ? ? ? ? ? ? ? ? ? ? ?42 ? ? ? 2375
TLoS/'
Biri ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?43 ? ? ? 2090
^xJ
Catchpole ? ? ? ? ? ? ? ? ? ? ? ? 44 ? ? ? 2470
ZS,
Havel ? ? ? ? ? ? ? ? ? ? ? ? ? ? 45 ? ? 2483.3
;R`$_
Nguyen ? ? ? ? ? ? ? ? ? ? ? ? ? ?34 ? ? 2897.5
pK\=Q$
Maduro ? ? ? ? ? ? ? ? ? ? ? ? ? ?41 ? ? ? 2660
?OZ_(:
Nozaki ? ? ? ? ? ? ? ? ? ? ? ? ? ?42 ? ? ? 2280
wR
Schwartz ? ? ? ? ? ? ? ? ? ? ? ? ?45 ? ? ? 2090
`
?
達內科技論壇
--
達內科技論壇
AtMr
10 rows selected.
loa
?
達內科技論壇
--
達內科技論壇
q
(
2
):第二種方法:
5AH1
SQL> l
=\]n
?1 ?select a.last_name, a.salary, a.dept_id, b.avgsal
!NZW2d
?2 ?from s_emp a, (select dept_id, avg(salary) avgsal
7P<2H;
?3 ? ? ? ? ? ? ? from s_emp
)(o?
?4 ? ? ? ? ? ? ? group by dept_id) b
(a5
?5 ?where a.dept_id=b.dept_id
-6
?6* and a.salary>b.avgsal
Z
SQL> /
'^NJ
?
達內科技論壇
--
達內科技論壇
7s/
LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY ? ?DEPT_ID ? ? AVGSAL
CX@
------------------------- ---------- ---------- ----------
j
Velasquez ? ? ? ? ? ? ? ? ? ? ? 4750 ? ? ? ? 50 ? ? 3847.5
}@7
Urguhart ? ? ? ? ? ? ? ? ? ? ? ?2280 ? ? ? ? 41 ? ? 2181.5
_m
Menchu ? ? ? ? ? ? ? ? ? ? ? ? ?2375 ? ? ? ? 42 2055.16667
ks5
Biri ? ? ? ? ? ? ? ? ? ? ? ? ? ?2090 ? ? ? ? 43 ? ? ? 1710
I/Q
Catchpole ? ? ? ? ? ? ? ? ? ? ? 2470 ? ? ? ? 44 ? ? ? 1995
k
Havel ? ? ? ? ? ? ? ? ? ? ? ? 2483.3 ? ? ? ? 45 ? ? 2069.1
,H
Nguyen ? ? ? ? ? ? ? ? ? ? ? ?2897.5 ? ? ? ? 34 ? ? ? 2204
nB
Maduro ? ? ? ? ? ? ? ? ? ? ? ? ?2660 ? ? ? ? 41 ? ? 2181.5
<&
Nozaki ? ? ? ? ? ? ? ? ? ? ? ? ?2280 ? ? ? ? 42 2055.16667
88W
Schwartz ? ? ? ? ? ? ? ? ? ? ? ?2090 ? ? ? ? 45 ? ? 2069.1
"L$Aht
?
達內科技論壇
--
達內科技論壇
@3`tD~
10 rows selected.
p3Q#b
?
達內科技論壇
--
達內科技論壇
pV[@QT
4
:找出那些工資高于他們所在部門的
manager
的工資的員工。
Y^;'
?
達內科技論壇
--
達內科技論壇
5z
SQL> l
g!O`?~
?1 ?select id, last_name, salary, manager_id
a
?2 ?from s_emp a
e8wG
?3 ?where salary>(select salary
b)-r
?4 ? ? ? ? ? ? ? ?from s_emp
flzfJG
?5* ? ? ? ? ? ? ? where id=a.manager_id)
|/t)yO
SQL> /
{Nwt
?
達內科技論壇
--
達內科技論壇
*^0LJ
? ? ? ?ID LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY MANAGER_ID
CQV
---------- ------------------------- ---------- ----------
=Il
? ? ? ? 6 Urguhart ? ? ? ? ? ? ? ? ? ? ? ?2280 ? ? ? ? ?2
If@
? ? ? ? 7 Menchu ? ? ? ? ? ? ? ? ? ? ? ? ?2375 ? ? ? ? ?2
j:QMG
? ? ? ? 8 Biri ? ? ? ? ? ? ? ? ? ? ? ? ? ?2090 ? ? ? ? ?2
wjkW.!
? ? ? ? 9 Catchpole ? ? ? ? ? ? ? ? ? ? ? 2470 ? ? ? ? ?2
3]
? ? ? ?10 Havel ? ? ? ? ? ? ? ? ? ? ? ? 2483.3 ? ? ? ? ?
? ? ? ?12 Giljum ? ? ? ? ? ? ? ? ? ? ? ? ?2831 ? ? ? ? ?3
8NT<!
? ? ? ?13 Sedeghi ? ? ? ? ? ? ? ? ? ? ? 2878.5 ? ? ? ? ?3
_
? ? ? ?14 Nguyen ? ? ? ? ? ? ? ? ? ? ? ?2897.5 ? ? ? ? ?3
b@
? ? ? ?15 Dumas ? ? ? ? ? ? ? ? ? ? ? ? ? 2755 ? ? ? ? ?3
${
? ? ? ?16 Maduro ? ? ? ? ? ? ? ? ? ? ? ? ?2660 ? ? ? ? ?
?
達內科技論壇
--
達內科技論壇
Zu
10 rows selected.
Uk2fN
第一題:有兩個表分別如下:
=Z<
|
|
|
|
[
這個貼子最后由
SunOne
在
2003/12/30 04:11pm
編輯
]
m
?
達內科技論壇
--
達內科技論壇
;(
第二題:有一個數據庫表
dept
中有如下數據:
3!|-
id_no id_name
we#
1000 ?S
1001 ?S2
.$]K
1002 ?S3
1?
1003 ?S4
<q(SlO
1000 ?S5
p8
1000 ?S6
gZ~&>=
1001 ?S7
/
表中有
id_no
重復,如
id_no
為
1000
的有
3
條記錄,如
id_no
為
1001
的有
2
條記錄,
z-XS
現在要按照
id_no
給表建索引,需要刪除
id_no
重復了的那些記錄,但不能刪掉所有擁有該
id_no
的記錄,必需保留一條擁有該
id_no
的記錄
(
如
id_no
為
1000
的只剩下一條記錄
)
7
?
達內科技論壇
--
達內科技論壇
(
(1)
請寫出
SQl
語句(或
SQL
語句組),查詢所有
id_no
重復的記錄。
bxt
?
達內科技論壇
--
達內科技論壇
qwZ239
(2)
請寫出
SQl
語句實現題目要求的結果。
|
1:
?
達內科技論壇 -- 達內科技論壇 SWT
|
=====================================================
ProductID ?SALE_YEAR ? SALES ? ?productID ? 2001 ?2002 ? ?
001 ? ? ? ? ?2001 ? ????????? ? 10 ? ? ? ? ? 001 ? ??? ?10
"
002 ? ? ? ? ?2001 ?????????? ?? 15 ? ? ? ? ? 002 ? ??? ?15
<
003 ? ? ? ? ?2002 ? ????????? ? 12 ? ? ? ? ? 003 ? ? ? ? ????? ?12 ? ? ? ? 10
AT
003 ? ? ? ? ?2003 ? ????????? ? 10
`h%@{7
寫一個
SQL
或者
PL/SQL
完成左邊的表變成右邊的表。
=
SQL> CREATE TABLE TEST(PRODUCT_ID NUMBER ,SALE_YEAR VARCHAR2(20),SALES NUMBER) ;
Rxcs
?
達內科技論壇
--
達內科技論壇
R
Table created.
HQ/
?
達內科技論壇
--
達內科技論壇
RQ
SQL> INSERT INTO TEST valueS('&1','&2','&3');
v
Enter value for 1:
Enter value for 2: 2001
(!Zj
Enter value for 3: 10
AXREC
old ? 1: INSERT INTO TEST valueS('&1','&2','&3')
S\_
new ? 1: INSERT INTO TEST valueS('001','2001','10')
A{]KYG
?
達內科技論壇
--
達內科技論壇
6,De%
1 row created.
73.
?
達內科技論壇
--
達內科技論壇
]LHQ
SQL> INSERT INTO TEST valueS('&1','&2','&3');
d|z&
Enter value for 1: 002
w3
Enter value for 2: 2001
Y
Enter value for 3: 15
i
old ? 1: INSERT INTO TEST valueS('&1','&2','&3')
Fj
new ? 1: INSERT INTO TEST valueS('002','2001','15')
^ZawQJ
?
達內科技論壇
--
達內科技論壇
:
1 row created.
:
?
達內科技論壇
--
達內科技論壇
k0=O7
SQL> INSERT INTO TEST valueS('&1','&2','&3');
N
Enter value for 1: 003
e
Enter value for 2:
Enter value for 3:
old ? 1: INSERT INTO TEST valueS('&1','&2','&3')
jp/I0
new ? 1: INSERT INTO TEST valueS('003','2002','12')
Y
?
達內科技論壇
--
達內科技論壇
)
1 row created.
[1UqH
?
達內科技論壇
--
達內科技論壇
lKrk
SQL> INSERT INTO TEST valueS('&1','&2','&3');
<(n
Enter value for 1: 003
OI
Enter value for 2: 2003
y<
Enter value for 3:
old ? 1: INSERT INTO TEST valueS('&1','&2','&3')
S`v>1
new ? 1: INSERT INTO TEST valueS('003','2003','10')
Bjax
?
達內科技論壇
--
達內科技論壇
.dvn
1 row created.
kov/,
?
達內科技論壇
--
達內科技論壇
/j
SQL> COMMIT;
:[Po1
?
達內科技論壇
--
達內科技論壇
Yor{B
Commit complete.
`XH`h0
?
達內科技論壇
--
達內科技論壇
-2#en$
SQL> SELECT * FROM TEST;
-C
?
達內科技論壇
--
達內科技論壇
[
PRODUCT_ID SALE_YEAR ? ? ? ? ? ? ? ? SALES
yk
---------- -------------------- ----------
? ? ? ? 1 2001 ? ? ? ? ? ? ? ??????????? ? ? ? ? 10
U
? ? ? ? 2 2001 ? ? ? ? ? ? ? ??????????? ? ? ? ? 15
;o
? ? ? ? 3 2002 ? ? ? ? ? ? ? ? ??????????? ? ? ? 12
rN\ou
? ? ? ? 3 2003 ? ? ? ? ? ? ? ? ? ??????????? ? ? 10
eI%/
?
達內科技論壇
--
達內科技論壇
T0[WI"
SQL> SELECT PRODUCT_ID,
:B
?2 ? ? ? ? DECODE(SALE_YEAR,2001,SUM(SALES)) "2001",
B\
?3 ? ? ? ? DECODE(SALE_YEAR,2002,SUM(SALES)) "2002",
cp79
?4 ? ? ? ?DECODE(SALE_YEAR,2003,SUM(SALES)) "2003"
C
?5 ? ? ? ?FROM TEST
,'Yd[Z
?6 ? ? ?GROUP BY PRODUCT_ID,SALE_YEA;
<rjT
? ? ? ? GROUP BY PRODUCT_ID,SALE_YEA
d
? ? ? ? ? ? ? ? ? ? ? ? ? ? *
Ri
ERROR at line 6:
y
ORA-00904: "SALE_YEA": invalid identifier
r".
?
達內科技論壇
--
達內科技論壇
!0!%
?
達內科技論壇
--
達內科技論壇
~1
SQL> SELECT PRODUCT_ID,
Ss
?2 ? ? ? ? SUM(DECODE(SALE_YEAR,2001,SALES)) "2001",
JQ+XNx
?3 ? ? ? ? SUM(DECODE(SALE_YEAR,2002,SALES)) "2002",
{Sp'c
?4 ? ? ? ?SUM(DECODE(SALE_YEAR,2003,SALES)) "2003"
C
?5 ? ? ? ?FROM TEST
[ 6
?6 ? ? ?GROUP BY PRODUCT_ID;
2:6R1x
?
達內科技論壇
--
達內科技論壇
`
PRODUCT_ID ? ? ? 2001 ? ? ? 2002 ? ? ? 2003
1
---------- ---------- ---------- ----------
Tq
? ? ? ? 1 ? ? ?????? ? 10
r)<D
? ? ? ? 2 ? ? ? ?????? 15
8^o
? ? ? ? 3 ? ? ? ? ? ? ? ? ?????????? ?12 ? ? ? ? 10
NY?
分頁模板:
SELECT B.* FROM
78
(SELECT A.*,ROWNUM ROW_NUM FROM
j
(SELECT * FROM [
表名
] WHERE [
選擇條件
]
%
ORDER BY [
排序方式
] ) A where rownum <= [
頁號
*
每頁記錄數
] )B
?
WHERE ROW_NUM >= [(
頁號
-1)*
每頁記錄數
+1]