sql 面試問(wèn)題

          Posted on 2006-12-08 15:39 looline 閱讀(2404) 評(píng)論(1)  編輯  收藏
          最近有 一些面試中的問(wèn)題,總結(jié)起來(lái)看,一是關(guān)于怎樣找出和去除重復(fù)數(shù)據(jù),這在另一個(gè)帖子利已有詳細(xì)介紹。二是關(guān)于找出某一列里最大或最小的前幾個(gè),或是大于或小于某一個(gè)值(最大值或平均值)的數(shù)據(jù)。針對(duì)這種情況,再此做一個(gè)介紹。

          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???????????????????????????????? 47508 G
          ? ? ? ? 2 Ropeburn ?????????????????????????????? ?2945l6C.G
          ? ? ? ? 3 Nguyen???????????????????????????????????? ?2897.5
          QUVoW
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   =9F}j\
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   J'
          注意:請(qǐng)大家分析一下一下語(yǔ)句為什么不對(duì): dOb{RO
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   pqGE\[
          ? ?ROWNUM LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY
          !7.
          ---------- ------------------------- ----------
          Y
          ? ? ? ? 1 Velasquez ? ? ? ? ? ? ? ? ? ? ? 4750
          YHJ#V
          ? ? ? ? 3 Nagayama ? ? ? ? ? ? ? ? ? ? ? ?2660
          %p8~
          ? ? ? ? 2 Ngao ? ? ? ? ? ? ? ? ? ? ? ? ? ?2000
          Bb;
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   @
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   g#|E
          2
          找出表中的某一行或某幾行的數(shù)據(jù): k9
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   mM
          1 ):找出表中第三行數(shù)據(jù): P
          用以下方法是不行的,因?yàn)?/span> rownum 后面至可以用 < <= 號(hào) , 不可以用 =,> 號(hào)和其它的比較符號(hào)。 +h">^
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   Vr$$]h
          SQL> select * from s_emp
          {
          ?2 ?where rownum=3;
          O_{
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   /;B
          no rows selected
          p(
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   1"B
          SQL> select * from s_emp
          ">7
          ?2 ?where rownum between 3 and 5;
          Dky!m
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   qS
          no rows selected
          m^)0
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   H_&
          正確的方法如下: ,~w[KF
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   `t
          LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY
          d$#>
          ------------------------- ----------
          ,/N?UK
          Nagayama ? ? ? ? ? ? ? ? ? ? ? ?2660
          w
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   .$CX
          2 ):找出第三行到第五行之間的數(shù)據(jù): 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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   O?D7)
          LAST_NAME ? ? ? ? ? ? ? ? ? ? SALARY
          5'
          ------------------------- ----------6yd
          Nagayama ? ? ? ? ? ? ? ? ? ? ? ?2660
          @L
          Quick-To-See ? ? ? ? ? ? ? ? ? ?2755
          >
          Ropeburn ? ? ? ? ? ? ? ? ? ? ? ?2945
          Ni'=r
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   <Lh_VZ
          3
          :找出那些工資高于他們所在部門(mén)的平均工資的員工。 I'R*u
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   ;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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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
          `
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   AtMr
          10 rows selected.
          loa
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   q8a{
          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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   @3`tD~
          10 rows selected.
          p3Q#b
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   pV[@QT
          4
          :找出那些工資高于他們所在部門(mén)的 manager 的工資的員工。 Y^;'
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   *^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 ? ? ? ? ?2f&&MPS
          ? ? ? ?12 Giljum ? ? ? ? ? ? ? ? ? ? ? ? ?2831 ? ? ? ? ?3
          8NT<!
          ? ? ? ?13 Sedeghi ? ? ? ? ? ? ? ? ? ? ? 2878.5 ? ? ? ? ?3
          _
          ? ? ? ?14 Nguyen ? ? ? ? ? ? ? ? ? ? ? ?2897.5 ? ? ? ? ?3
          b@
          ? ? ? ?15 Dumas ? ? ? ? ? ? ? ? ? ? ? ? ? 2755 ? ? ? ? ?3
          ${
          ? ? ? ?16 Maduro ? ? ? ? ? ? ? ? ? ? ? ? ?2660 ? ? ? ? ?6Kg
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   Zu
          10 rows selected.
          Uk2fN

          第一題:有兩個(gè)表分別如下: =Z<
          A(varchar(32) NAME,int GRADE) *{
          數(shù)據(jù): :WyN$
          ZHANGSHAN 80
          R
          LISI ? ? ?60
          N
          WANGWU ? ?84
          #
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  m]P
          B(varchar(32) NAME,int AGE) [!
          數(shù)據(jù): Hi)Y:7
          ZHANGSHAN 26
          =(
          LISI ? ? ?24
          @
          WANGWU ? ?26
          1>
          WUTIAN ? ?26
          ~.yj4
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  X@~~O
          1)寫(xiě)SQL語(yǔ)句得到如下查詢結(jié)果: >g1\oj
          NAME ? ? ?GRADE ? AGE ? ?
          C
          ZHANGSHAN 80 ? ? ?26
          q5IV
          LISI ? ? ?60 ? ? ?24
          sw
          WANGWU ? ?84 ? ? ?262c. l
          WUTIAN ? ?NULL ? ?26
          Z]
          疑問(wèn):這里的沒(méi)有成績(jī)的那個(gè)人的記錄怎么得到呢? C#~,Q
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  `
          2)寫(xiě)SQl語(yǔ)句根據(jù)名字(NAME)相同按年齡(AGE)分組得到不同年齡的人的平均成績(jī),并寫(xiě)出結(jié)果。 f${4\n
          疑問(wèn):按照名字相同,WUTIAN這個(gè)人沒(méi)有成績(jī)?cè)摬辉摪阉y(tǒng)計(jì)在內(nèi)呢? 8B<
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  t%#
          3)還有一問(wèn)具體數(shù)據(jù)記不清了,比上兩問(wèn)更怪。 y#1\^m


          ?

          ?

          ?

          ?

          ?

          [ 這個(gè)貼子最后由 SunOne 2003/12/30 04:11pm 編輯 ] m
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   ;(
          第二題:有一個(gè)數(shù)據(jù)庫(kù)表 dept 中有如下數(shù)據(jù): 3!|-
          id_no id_name
          we#
          1000 ?S1L&@U
          1001 ?S2
          .$]K
          1002 ?S3
          1?
          1003 ?S4
          <q(SlO
          1000 ?S5
          p8
          1000 ?S6
          gZ~&>=
          1001 ?S7
          /
          表中有 id_no 重復(fù),如 id_no 1000 的有 3 條記錄,如 id_no 1001 的有 2 條記錄, z-XS
          現(xiàn)在要按照 id_no 給表建索引,需要?jiǎng)h除 id_no 重復(fù)了的那些記錄,但不能刪掉所有擁有該 id_no 的記錄,必需保留一條擁有該 id_no 的記錄 ( id_no 1000 的只剩下一條記錄 ) 7
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   (
          (1)
          請(qǐng)寫(xiě)出 SQl 語(yǔ)句(或 SQL 語(yǔ)句組),查詢所有 id_no 重復(fù)的記錄。 bxt
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   qwZ239
          (2)
          請(qǐng)寫(xiě)出 SQl 語(yǔ)句實(shí)現(xiàn)題目要求的結(jié)果。

          ?

          ?

          1: ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  SWT
          SQL> create table a
          hCu
          ?2 ?(name varchar2(32),
          t
          ?3 ?grade int);
          fHYm
          Table created.
          j|
          SQL> insert into a_t
          y5.u
          ?2 ?values('&a',&b);
          Vk-~\y
          Enter value for a: zhangshan
          tS
          Enter value for b: 80
          hYTG&
          old ? 2: values('&a',&b)
          7]bgW
          new ? 2: values('zhangshan',80)
          #sQukk
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  )dD>M:
          1 row created.
          5
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  >ic5
          SQL> /
          Nb>#
          Enter value for a: lisi
          |FS|3
          Enter value for b: 60
          [7s
          old ? 2: values('&a',&b)
          6
          new ? 2: values('lisi',60)
          ^s-a
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  hR-Bni
          1 row created.
          3
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Cc]
          SQL> /
          iX@
          Enter value for a: wangwu
          9J
          Enter value for b: 84
          rR`
          old ? 2: values('&a',&b)
          I z4Bn
          new ? 2: values('wangwu',84)
          u
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Cwdw,M
          1 row created.
          '&F4H&
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  zU
          SQL> commit;
          pS#~f
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  R"
          Commit complete.
          I@b}
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  X#{! 9
          SQL> create table b_t
          %;R
          ?2 ?(name varchar2(32),
          71
          ?3 ?age int);
          x;SQ^
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Q+z
          Table created.
          !M
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  L|
          SQL> insert into b_t
          J
          ?2 ?values('&a',&b);
          UK|'?]
          Enter value for a: zhangshan
          ZA+X:
          Enter value for b: 26
          :x`.M(
          old ? 2: values('&a',&b)
          wbi[
          new ? 2: values('zhangshan',26)
          M=A
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  #
          1 row created.6f4
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  *h5
          SQL> /
          #u
          Enter value for a: lisi
          18J/-
          Enter value for b: 24
          fA*
          old ? 2: values('&a',&b)
          8MqSY"
          new ? 2: values('lisi',24)
          Myt6W
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  d"
          1 row created.
          ;2NtAv
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  UPy:Z;
          SQL> /
          "[u
          Enter value for a: wangwu
          {|Q3
          Enter value for b: 26
          7Max
          old ? 2: values('&a',&b)
          5+
          new ? 2: values('wangwu',26)
          9tn+{
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  1oT;
          1 row created.
          Yg
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  j3{M
          SQL> /
          ?G#i
          Enter value for a: wutian
          z&a
          Enter value for b: 26g
          old ? 2: values('&a',&b)
          3
          new ? 2: values('wutian',26)
          lqP
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  H
          1 row created.
          XqM
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  |t
          SQL> commit;
          *x!#v
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  gfh.
          Commit complete.
          m>:QD
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Gv*h
          SQL>
          }rDu#
          SQL> col grade null 'null'
          3"K
          SQL> l
          71srGP
          ?1 ?select b.name, a.grade, b.age
          5)F<
          ?2 ?from a_t a,b_t b
          -!$YRs
          ?3* where a.name(+)=b.name
          \H
          SQL> /
          q9[
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Ia-
          NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GRADE ? ? ? ?AGE
          -n&M
          -------------------------------- ---------- ----------
          BL
          lisi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 60 ? ? ? ? 24
          W
          wangwu ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 84 ? ? ? ? 26
          477E
          wutian ? ? ? ? ? ? ? ? ? ? ? ? ? null ? ? ? ? ? ? ? 26
          [a?EA
          zhangshan ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80 ? ? ? ? 26
          h~
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ?!;
          SQL>
          -#D
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ?kMGSC
          2:
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  45r&'a
          SQL> l
          L
          ?1 ?select name, avg(grade), age
          (sJ7rh
          ?2 ?from (select b.name name, a.grade grade, b.age age
          NUx3>;
          ?3 ?from a_t a,b_t b
          SJx
          ?4 ?where a.name(+)=b.name)
          ,5
          ?5* group by age, name
          ZU
          SQL> /
          E
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Ewhj
          NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? AVG(GRADE) ? ? ? ?AGE
          &H
          -------------------------------- ---------- ----------
          g]<pc&
          lisi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 60 ? ? ? ? 24
          3
          wangwu ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 84 ? ? ? ? 26
          !ZOnC
          wutian ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?26
          Nn
          zhangshan ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80 ? ? ? ? 26f
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  uThcM\
          SWUTIAN
          這個(gè)人沒(méi)有成績(jī)不把他統(tǒng)計(jì)在內(nèi) q)
          3:
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  i-:
          1
          、當(dāng)我們想要為一個(gè)表創(chuàng)建唯一索引時(shí),如果該表有重復(fù)的記錄,則無(wú)法創(chuàng)建成功。 (QJS
          方法原理: )KQ
          1
          Oracle中,每一條記錄都有一個(gè)rowidrowid在整個(gè)數(shù)據(jù)庫(kù)中是唯一的, Gk
            rowid確定了每條記錄是在ORACLE中的哪一個(gè)數(shù)據(jù)文件、塊、行上。 yhjK
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  `,
          2
          、在重復(fù)的記錄中,可能所有列的內(nèi)容都相同,但rowid不會(huì)相同,所以只要確定出重復(fù)記錄中 V>)P
            那些具有最大rowid的就可以了,其余全部刪除。 lH
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  k7
          3
          、以下語(yǔ)句用到了3項(xiàng)技巧:rowid、子查詢、別名。 XNR*
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ba
          實(shí)現(xiàn)方法: /e
          SQL> create table a (
          33
          2 bm char(4), --
          編碼 <}cU@4
          3 mc varchar2(20) --
          名稱 =jY;Z
          4 )
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  g!KM
          5 /
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  {:e[
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  e`e
          表已建立. 1?,.
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  8=Dl9;
          SQL> insert into a values('1111','1111');
          R23g
          SQL> insert into a values('1112','1111');
          #
          SQL> insert into a values('1113','1111');
          i|
          SQL> insert into a values('1114','1111');
          q>V+L
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  }J
          SQL> insert into a select * from a;
          +i2|@0
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  *T
          插入4個(gè)記錄. lIG\^X
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  T
          SQL> commit;
          EnemB
          SQL> select rowid,bm,mc from a;
          O7
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  e
          ROWID BM MC
          :!|j8m
          ------------------ ---- -------
          '9%EK
          000000D5.0000.0002 1111 1111
          h9$-)L
          000000D5.0001.0002 1112 1111
          dd
          000000D5.0002.0002 1113 1111
          OXC
          000000D5.0003.0002 1114 1111
          K7K
          000000D5.0004.0002 1111 1111
          #O
          000000D5.0005.0002 1112 1111
          Hk
          000000D5.0006.0002 1113 1111
          <
          000000D5.0007.0002 1114 1111
          iAs Y
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  u
          查詢到8記錄. {9&
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ||
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  x
          查出重復(fù)記錄 j-H&D
          SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
          $8& X^
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  V'
          ROWID BM MC
          w@
          ------------------ ---- --------------------
          Z>
          000000D5.0000.0002 1111 1111
          DAu8a
          000000D5.0001.0002 1112 1111
          sRxcx
          000000D5.0002.0002 1113 1111
          ;+<J
          000000D5.0003.0002 1114 1111
          WbQN
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ?| -5
          刪除重復(fù)記錄 $@
          SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
          I'=!c
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  a(S}C
          刪除4個(gè)記錄. 8
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  #2B
          SQL> select rowid,bm,mc from a;
          >i/
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  Wj~cn
          ROWID BM MC
          dij
          ------------------ ---- --------------------
          uWg
          000000D5.0004.0002 1111 1111
          HO/0hp
          000000D5.0005.0002 1112 1111
          mfc
          000000D5.0006.0002 1113 1111
          T$S5aA
          000000D5.0007.0002 1114 1111
          q

          ?

          =====================================================

          ProductID ?SALE_YEAR ? SALES ? ?productID ? 2001 ?2002 ? ? 2003L5WI3
          001 ? ? ? ? ?2001 ? ????????? ? 10 ? ? ? ? ? 001 ? ??? ?10
          "

          002 ? ? ? ? ?2001 ?????????? ?? 15 ? ? ? ? ? 002 ? ??? ?15
          <
          003 ? ? ? ? ?2002 ? ????????? ? 12 ? ? ? ? ? 003 ? ? ? ? ????? ?12 ? ? ? ? 10
          AT
          003 ? ? ? ? ?2003 ? ????????? ? 10
          `h%@{7
          寫(xiě)一個(gè) SQL 或者 PL/SQL 完成左邊的表變成右邊的表。 =

          SQL> CREATE TABLE TEST(PRODUCT_ID NUMBER ,SALE_YEAR VARCHAR2(20),SALES NUMBER) ; Rxcs
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   R
          Table created.
          HQ/
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   RQ
          SQL> INSERT INTO TEST valueS('&1','&2','&3');
          v
          Enter value for 1: 001l7g[
          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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   6,De%
          1 row created.
          73.
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   ]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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   :
          1 row created.
          :
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   k0=O7
          SQL> INSERT INTO TEST valueS('&1','&2','&3');
          N
          Enter value for 1: 003
          e
          Enter value for 2: 2002g-P
          Enter value for 3: 12G^RV
          old ? 1: INSERT INTO TEST valueS('&1','&2','&3')
          jp/I0
          new ? 1: INSERT INTO TEST valueS('003','2002','12')
          Y
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   )
          1 row created.
          [1UqH
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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: 10l )@d
          old ? 1: INSERT INTO TEST valueS('&1','&2','&3')
          S`v>1
          new ? 1: INSERT INTO TEST valueS('003','2003','10')
          Bjax
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   .dvn
          1 row created.
          kov/,
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   /j
          SQL> COMMIT;
          :[Po1
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   Yor{B
          Commit complete.
          `XH`h0
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   -2#en$
          SQL> SELECT * FROM TEST;
          -C
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   [
          PRODUCT_ID SALE_YEAR ? ? ? ? ? ? ? ? SALES
          yk
          ---------- -------------------- ----------

          ? ? ? ? 1 2001 ? ? ? ? ? ? ? ??????????? ? ? ? ? 10
          U
          ? ? ? ? 2 2001 ? ? ? ? ? ? ? ??????????? ? ? ? ? 15
          ;o
          ? ? ? ? 3 2002 ? ? ? ? ? ? ? ? ??????????? ? ? ? 12
          rN\ou
          ? ? ? ? 3 2003 ? ? ? ? ? ? ? ? ? ??????????? ? ? 10
          eI%/
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   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".
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   !0!%
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   ~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
          ? 達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇   `
          PRODUCT_ID ? ? ? 2001 ? ? ? 2002 ? ? ? 2003
          1
          ---------- ---------- ---------- ----------
          Tq
          ? ? ? ? 1 ? ? ?????? ? 10
          r)<D
          ? ? ? ? 2 ? ? ? ?????? 15
          8^o
          ? ? ? ? 3 ? ? ? ? ? ? ? ? ?????????? ?12 ? ? ? ? 10
          NY?


          分頁(yè)模板:

          SELECT B.* FROM 78 (SELECT A.*,ROWNUM ROW_NUM FROM j (SELECT * FROM [ 表名 ] WHERE [ 選擇條件 ] % ORDER BY [ 排序方式 ] ) A where rownum <= [ 頁(yè)號(hào) * 每頁(yè)記錄數(shù) ] )B ?

          WHERE ROW_NUM >= [( 頁(yè)號(hào) -1)* 每頁(yè)記錄數(shù) +1]

          Feedback

          # re: sql 面試問(wèn)題  回復(fù)  更多評(píng)論   

          2008-04-22 21:36 by
          煩的

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          posts - 3, comments - 1, trackbacks - 0, articles - 1

          Copyright © looline

          主站蜘蛛池模板: 宝应县| 营口市| 天台县| 沁水县| 新邵县| 察雅县| 深泽县| 曲沃县| 邵武市| 大连市| 巴里| 海门市| 高唐县| 右玉县| 杂多县| 全南县| 邯郸市| 扶绥县| 崇明县| 新平| 枣阳市| 五家渠市| 淳安县| 墨玉县| 绥芬河市| 广元市| 万荣县| 阿尔山市| 紫阳县| 集安市| 德州市| 咸阳市| 元谋县| 乳源| 邢台市| 若羌县| 武乡县| 礼泉县| 子洲县| 陆丰市| 垦利县|