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‘
注意:請大家分析一下一下語(yǔ)句為什么不對:dOb{RO
©達內科技論壇 -- 達內科技論壇 bt7]c0
SQL> select rownum, last_name, salary
2 from s_empg:m4>
3 where rownum<=3.ny
4 order by salary desc;tUJ
©達內科技論壇 -- 達內科技論壇 pqGE\[
ROWNUM LAST_NAME SALARY!7.
---------- ------------------------- ----------Y
1 Velasquez 4750YHJ#V
3 Nagayama 2660%p8~
2 Ngao 2000Bb;
©達內科技論壇 -- 達內科技論壇 @
©達內科技論壇 -- 達內科技論壇 g#|E
2: 找出表中的某一行或某幾行的數據:k9
©達內科技論壇 -- 達內科技論壇 mM
(1):找出表中第三行數據:P
用以下方法是不行的,因為rownum后面至可以用<或<=號,不可以用=,>號和其它的比較符號。+h">^
©達內科技論壇 -- 達內科技論壇 Vr$$]h
SQL> select * from s_emp{
2 where rownum=3;O_{
©達內科技論壇 -- 達內科技論壇 /;B
no rows selectedp(
©達內科技論壇 -- 達內科技論壇 1"B
SQL> select * from s_emp">7
2 where rownum between 3 and 5;Dky!m
©達內科技論壇 -- 達內科技論壇 qS
no rows selectedm^)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=3DI
SQL> /Cu
©達內科技論壇 -- 達內科技論壇 `t
LAST_NAME SALARYd$#>
------------------------- ----------,/N?UK
Nagayama 2660w
©達內科技論壇 -- 達內科技論壇 .$CX
(2):找出第三行到第五行之間的數據:L
SQL> l]M]~H
1 select last_name, salaryH
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 SALARY5‘
------------------------- ---------
Nagayama 2660@L
Quick-To-See 2755>
Ropeburn 2945Ni‘=r
©達內科技論壇 -- 達內科技論壇 <Lh_VZ
3:找出那些工資高于他們所在部門(mén)的平均工資的員工。I‘R*u
©達內科技論壇 -- 達內科技論壇 ;7Z
(1):第一種方法:5acm6S
SQL> select last_name, dept_id, salary(
2 from s_emp ag1}+7
3 where salary>(select avg(salary)S-(
4 from s_emp2ksQsY
5 where dept_id=a.dept_id);PZRM
©達內科技論壇 -- 達內科技論壇 WFa=Fa
LAST_NAME DEPT_ID SALARY_f7
------------------------- ---------- ----------3x-v0
Velasquez 50 4750r6h*8
Urguhart 41 2280yECF*
Menchu 42 2375TLoS/‘
Biri 43 2090^xJ
Catchpole 44 2470ZS,
Havel 45 2483.3;R`$_
Nguyen 34 2897.5pK\=Q$
Maduro 41 2660?OZ_(:
Nozaki 42 2280wR
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) avgsal7P<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.avgsalZ
SQL> /‘^NJ
©達內科技論壇 -- 達內科技論壇 7s/
LAST_NAME SALARY DEPT_ID AVGSALCX@
------------------------- ---------- ---------- ----------j
Velasquez 4750 50 3847.5}@7
Urguhart 2280 41 2181.5_m
Menchu 2375 42 2055.16667ks5
Biri 2090 43 1710I/Q
Catchpole 2470 44 1995k
Havel 2483.3 45 2069.1,H
Nguyen 2897.5 34 2204nB
Maduro 2660 41 2181.5<&
Nozaki 2280 42 2055.1666788W
Schwartz 2090 45 2069.1"L$Aht
©達內科技論壇 -- 達內科技論壇 @3`tD~
10 rows selected.p3Q#b
©達內科技論壇 -- 達內科技論壇 pV[@QT
4:找出那些工資高于他們所在部門(mén)的manager的工資的員工。Y^;‘
©達內科技論壇 -- 達內科技論壇 5z
SQL> lg!O`?~
1 select id, last_name, salary, manager_ida
2 from s_emp ae8wG
3 where salary>(select salaryb)-r
4 from s_empflzfJG
5* where id=a.manager_id)|/t)yO
SQL> /{Nwt
©達內科技論壇 -- 達內科技論壇 *^0LJ
ID LAST_NAME SALARY MANAGER_IDCQV
---------- ------------------------- ---------- ----------=Il
6 Urguhart 2280 2If@
7 Menchu 2375 2j:QMG
8 Biri 2090 2wjkW.!
9 Catchpole 2470 23]
10 Havel 2483.3
12 Giljum 2831 38NT<!
13 Sedeghi 2878.5 3_
14 Nguyen 2897.5 3b@
15 Dumas 2755 3${
16 Maduro 2660
©達內科技論壇 -- 達內科技論壇 Zu
10 rows selected.Uk2fN
| 第一題:有兩個(gè)表分別如下:=Z< | |
| | |
[這個(gè)貼子最后由SunOne在 2003/12/30 04:11pm 編輯]m
©達內科技論壇 -- 達內科技論壇 ;(
第二題:有一個(gè)數據庫表dept中有如下數據:3!|-
id_no id_namewe#
1000 S
1001 S2.$]K
1002 S31?
1003 S4<q(SlO
1000 S5p8
1000 S6gZ~&>=
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)請寫(xiě)出SQl語(yǔ)句(或SQL語(yǔ)句組),查詢(xún)所有id_no重復的記錄。bxt
©達內科技論壇 -- 達內科技論壇 qwZ239
(2)請寫(xiě)出SQl語(yǔ)句實(shí)現題目要求的結果。
| | 1:©達內科技論壇 -- 達內科技論壇 SWT |
=====================================================
ProductID SALE_YEAR SALES productID 2001 2002
001 2001 10 001 10"
002 2001 15 002 15<
003 2002 12 003 12 10AT
003 2003 10`h%@{7
寫(xiě)一個(gè)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: 10AXREC
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: 002w3
Enter value for 2: 2001Y
Enter value for 3: 15i
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: 003e
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: 003OI
Enter value for 2: 2003y<
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 SALESyk
---------- -------------------- ----------
1 2001 10U
2 2001 15;o
3 2002 12rN\ou
3 2003 10eI%/
©達內科技論壇 -- 達內科技論壇 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_YEAd
*Ri
ERROR at line 6:y
ORA-00904: "SALE_YEA": invalid identifierr".
©達內科技論壇 -- 達內科技論壇 !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 20031
---------- ---------- ---------- ----------Tq
1 10r)<D
2 158^o
3 12 10NY?
分頁(yè)模板:
SELECT B.* FROM78 (SELECT A.*,ROWNUM ROW_NUM FROMj (SELECT * FROM [表名] WHERE [選擇條件]% ORDER BY [排序方式] ) A where rownum <= [頁(yè)號*每頁(yè)記錄數] )B©
WHERE ROW_NUM >= [(頁(yè)號-1)*每頁(yè)記錄數+1]
聯(lián)系客服