科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Oracle增删查改 day03
总共48087条微博

动态微博

查看: 1932|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |倒序浏览
复习:
+ @# _+ c8 d  C' ^- B4 N- w1.查询语句的基本格式。
' y6 j4 c0 r) J9 U" y: \select ...
6 ^  m1 c, R8 u6 x, k' c$ y0 afrom 表名, L! |' W% U# ?5 E- Z; r% L, \
where 条件
' Y* V1 J6 I' e# c' a6 K- f4 U9 Fgroup by 列名- s( L; v$ F8 ~4 @: }" \
having 带组函数的条件
, O/ e  S0 m. }order by 列名3 a: v/ W, {( d* m
% M1 ]# d* C- k- N" b
2.函数5 R1 K# e6 ]3 E6 L) N7 ^
1)组函数:count / avg / sum / max / min0 F, W: I' i/ \4 H

. F- _$ _) |& z  {2)单行函数:) L; O; s6 [; w7 w$ |6 W
a.字符函数:upper / lower / initcap- [) D0 E2 e! A, x
          length / lpad / rpad" h" G1 K# u- Q$ `( y% A4 J) f
! I) q& ?, F$ x
          l : left ; r: right# J- }0 |4 T. ]: T0 A

) V& l: t' R# I0 X2 F: A$ gselect rpad(ename, 10, '*') from emp_ning;
* K! m9 X; S! [4 ]/ r1 a4 Z. @9 u3 ?, x9 |8 _: n0 ~
b.数字函数: round / trunc / mod; k/ E4 W$ r/ i1 N4 h. X5 |
select mod(salary, 1000) from emp_ning;. D0 _- @7 G3 J( M
* t2 t$ }" G7 d7 |8 F% U+ L% ?
c.日期函数: months_between / add_months /
/ H' t+ v$ G* V' q3 Z             last_day(sysdate)
9 I; t; c$ i' W  Z, t5 T9 w* y
/ Z' j, c+ d; F: r  V! V! fd.转换函数: to_char / to_date / to_number9 E( K! _7 B3 W# F, B# |8 U/ Z. I

. x  Z8 {' c% ]4 \, Z( E              to_char         to_number
* H8 S. ]# v( W" l  N6 N       日期  --------->  字符 ---------->数字4 Z1 m2 N/ N" A& g
             <---------       <---------
, V5 ~# y9 \. ^) w             to_date           to_char' `# K" Z2 k* v+ S7 {& a7 a" f8 q

6 D" ?6 J6 Z. x; s  ?" B& S+ K; K  O7 Z' S+ M) ?8 V
where password = '1234' and id = '1001'
5 X8 X- Y' M9 I" V$ V
9 f5 U& ^4 @. L% m select to_number('$7,912,345.67','$9,999,999.99')
9 O  ^7 O; F) U8 j& c from dual;
+ |- r* G/ u/ L: L7 v! D- }; O; t. X$ M: i/ M1 w  L
7912345.67
3 B, e8 z- [0 o( }0 U& H0 y1 P, B) ]) K6 z; y6 x
select to_char(7912345.67, '$9,999,999.99')4 c4 y3 n2 [: P, k! X
from dual;5 Z$ v$ x' S, K) [" Q

$ v9 O% ?' ]; v+ V7 H$7,912,345.671 v- u  p5 Q! p: F% \

  @: Q$ P6 r' r3 C1 ye.通用函数:nvl / coalesce / decode
, f# F$ T* E6 U# k  _4 E. N5 V1 s% ?; r9 x" ?. o/ K' I
使用频率比较高的单行函数:9 I2 E9 u( D7 k
upper / round / to_char / to_date / nvl3 m$ N! g* U7 F& x) p; b

+ M# s% t/ b) T0 u9 D3 w9 \
- o9 I( z8 h- j) |1 @一、子查询' X( h) X! T1 Q9 `/ @7 A! I
1.谁的薪水比张无忌高?4 ]+ \! {& Q0 l2 f! _6 {
子查询! A! h. B' l$ E4 e, |* q
select salary from emp_ning5 J, m+ p* L- ~" O
where ename = '张无忌';& [; C: {4 W: m
: W+ a5 n8 @$ a
10000
9 _! t; t6 H- t1 \/ o) G8 j6 r9 t; Q& o. S- V& g$ v2 K
主查询; V8 _7 s( H/ r& @# P' `  b
select ename from emp_ning
* [! r/ m& k( z2 K% B; D9 _where salary > 10000;
# b9 ~* q# R9 n* S
$ ]" n! q% B( ?( h2 v张三丰
5 c- v7 @/ F9 d" y# ?0 R1 M5 y  e1 V( B
合并到一条SQL语句:, K! v% p& O# b! W
select ename from emp_ning
/ Z( s8 G* u6 Cwhere salary > (select salary from emp_ning
1 x' o% L1 v# e9 Q3 s2 Y9 k' ^                where ename = '张无忌');
; w/ Y# d9 l+ q1 A' b$ W
2 V  C: ]* o  _5 U; l0 p' d2 F- G' F>  <  >=  <=  =  <>: 单行比较运算符,
" Y/ R- [% J0 z% [1 V只能和一个数字比较。
+ m5 x9 }& O: }$ ^7 n
, y1 A7 H- Q1 w1 k" y; x7 X6 }0 @insert into emp_ning(empno, ename, salary)1 }5 n) G2 C6 ~5 f8 ?
values(1014, '张无忌', 8000);. t! `; E8 y% ~
# S; C% ^( m$ v1 R" S
谁的薪水比所有叫张无忌的人的薪水都高?大于最大; C  n. f: p9 D; o+ r, L+ i* K1 S% A8 r
10000
9 W  ~) W+ L/ X8000
/ G9 r7 f3 `" Z
- t1 E$ V; P. {select ename from emp_ning
+ N% S' B* l! W* t9 U$ Kwhere salary > ALL(select salary from emp_ning0 b/ ]' }- ~% t* Q, K: c( L8 A
                where ename = '张无忌');
* h# B7 c5 j8 b+ Y# Z, M/ w# m  b6 N0 W2 _5 f6 |+ E3 ?' f: e
哪些人的薪水比任何一个叫张无忌的人高都行?大于最小
5 t+ r6 ?3 E8 z+ F) k; D" P3 E10000
4 A$ `* Q$ M+ x; T7 q8000/ t( Q' W3 V8 }+ o, u6 b% U; P
9 M3 ^* U, }# w. \- A( }
select ename from emp_ning* w: }' B2 q8 T' M% N( L! Y" w" E
where salary > ANY(select salary from emp_ning& Y3 ^; s* o2 v! P+ q% B
                where ename = '张无忌');; ^3 O) m; F' C

" c4 j- v1 s" ?: h2 t2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。/ Y. y$ U$ K3 R
select deptno from emp_ning
7 }" d7 B+ v5 Cwhere ename = '刘苍松';, ^8 \6 x) k9 F4 L% \* u' P
10
- R% T( G- \( l* }) h9 _$ s/ T  l2 B; J& O- g) E3 i- @% _: o
select ename from emp_ning
  N* Y, d) y1 p) \& L8 M0 M3 y1 Xwhere deptno = 10( P0 Z  q+ g2 N( H# l
and ename <> '刘苍松';  y" W+ F, j  {" M

4 l8 C9 M2 k* M$ b: nselect ename,salary,job 0 @7 i; W0 u  Y7 X
from emp_ning- _; g$ q/ K, g3 h$ B
where deptno = (select deptno from emp_ning! r- n2 \+ g7 m* V. L9 h
                where ename = '刘苍松'): @( t- h% B- l& V) b; z
and ename <> '刘苍松';
( f* p) z$ \- ~" [% W% h) B
; H# S2 F# ]2 [2 J" `$ l, u4 N--如果子查询得到的结果是多个,不能使用单行比较运算符- X: M! V% j& \( m( v
等号。改为:in
9 t& d) X# V, Q) M5 @6 G1 ]insert into emp_ning(empno, ename, deptno)
4 W& d* B. h: V$ d' `6 x) o- Yvalues(1015, '刘苍松', 20);& |9 ~: [" {3 ~4 X3 \
/ D9 J) i( p& `7 B0 [8 ]/ A- v5 h0 S
select ename,salary,job,deptno
1 d0 _5 b3 u2 C  T0 U/ ^0 E. y& v% K  Efrom emp_ning/ x' [8 M+ _4 \
where deptno in (select deptno from emp_ning1 o) m, S0 L+ Y; K  i" _2 ?
                where ename = '刘苍松')4 E# v9 |  i  e, e) u3 P$ ], X6 L
and ename <> '刘苍松';2 b, s' g" d4 Y1 ~

# H2 @0 F* j. I; S) W根据子查询返回的结果的行数:
% v' A4 M- A# c返回一行:> < >= <= = <>
9 F  Y8 h  W% G/ O; q返回多行:>ALL >ANY <ALL <ANY in3 C% E1 B" J9 D5 W
* s: C* f8 T/ W8 d7 R
3.每个部门拿最高薪水的是谁?
" X* z+ i1 q& z! q  H--返回多行
5 i/ f; j4 x3 Z" Yselect deptno, max(salary)8 M: S7 ]* I0 C. f: G
from emp_ning) ^. n4 R% k! p1 M6 ]
where deptno is not null' Q8 ~& l8 B. K7 C: p1 J
group by deptno;4 c8 ~  [5 R6 ], x2 A/ ^
$ d: n9 c+ K' ]2 `+ ~6 D
   30        5000
3 s) V9 l5 m5 w) d7 G   20       15000" w  A+ a  u, E0 Y" H
   10       10000( ?  R5 G. h! b
2 M& A; e4 O' H
select ename, salary, job, deptno
$ {" m' V" V  b+ hfrom emp_ning. _& i7 O* v; ~& a7 H
where (deptno, salary)
% _5 \5 T+ v* `8 f1 Z4 M      in (select deptno, max(salary)# {5 @! ^1 m5 s) j) _/ h8 [$ I& ^
          from emp_ning
) W% O: s8 E0 q          where deptno is not null
$ ~* ~8 K8 n0 M& C) H' P9 M$ K; {          group by deptno);
8 ~+ R& n$ R8 Z3 U5 V
* `' f. A! B6 g8 s6 \4.哪个部门的人数比部门30的人数多?
7 n% n- ]0 ?5 H0 E' o6 n# _% u* yselect count(*) from emp_ning
: @* z) {6 K5 ]$ J' ^" Cwhere deptno = 30;, l7 s% ?! ]2 k1 v5 ^
3+ ~) c9 @, D/ }9 l
& m) J' A; V+ V( l% e6 |& K
select deptno, count(*)+ r( \0 B; j& ?" u- W5 ?% [
from emp_ning. C! H: I) D& C- s* Q
group by deptno* c, }# D/ t, g2 M+ u$ {' a
having count(*) > (select count(*) from emp_ning
' F3 N" ]5 o; F7 }0 {* r: k$ B                   where deptno = 30);
- ~; u  z" v  o+ t- n9 O4 k+ Y3 W0 v; M' K
5.哪个部门的平均薪水比部门20的平均薪水高?9 r" h- y+ a6 |
select deptno, avg(nvl(salary,0)) avg_s! E/ E5 O' h- o( B( P. z
from emp_ning
! s$ A1 A' B5 E# y; y5 Jgroup by deptno# t( P4 n, v+ n( j: A! L
having avg(nvl(salary,0)) >
$ u! K. _6 `& {& m       (select avg(nvl(salary,0))
9 o; `- f- W4 t* S9 g$ }' P5 r4 g        from emp_ning
) D( w4 O' g0 J        where deptno = 20);% W1 r9 m  a  T0 c
/ \/ C& [2 W7 S9 r5 W
6.列出员工名字和职位,这些员工所在的部门平均薪水. c0 V# {, p% W& o
大于5000元。" Q3 u; F2 B* E5 }  P2 j6 h
select deptno, avg(nvl(salary,0))
3 O6 H% U( e7 B; k1 P2 B# W- y; cfrom emp_ning
4 m1 B3 }! z9 S+ ?( ggroup by deptno
4 o: W# b- m2 ]- ~/ ^" m, `having avg(nvl(salary,0)) > 5000;6 P1 n! D  z. N% Q
10  5750
  J) S9 q! n$ e$ y( W20  8000
$ n- q# Q! F6 U8 n; b* u, G5 q% ?/ E  X2 }
select ename, job
: M0 R3 m" r- U% [9 p8 K9 i3 Sfrom emp_ning
* D5 f* m3 k: T8 v9 Lwhere deptno in (select deptno0 t/ R/ V5 D; a; B& ?, O3 _0 i
                from emp_ning- ^' t6 X, k, t: W
                group by deptno
0 g9 e* c0 w6 R" B6 z+ ?, }                having avg(nvl(salary,0)) > 5000);
+ V# p1 P& B2 g, K# H1 T, g5 w6 B
0 J! @' O5 _9 I  l& |7.谁是张无忌的下属?
# [5 s" B& q% K. F# @select empno from emp_ning. N8 t1 K' v( ^9 n# y5 R  x
where ename = '张无忌';
- V0 e7 c- [" Y. R, A6 o# c% ]5 r1001
9 k& R. s9 m) S: d1 l, q5 p* m1014- T8 m' D. a# p. {8 ]# L; d
( y$ ^, l" X9 }7 G2 M
select ename from emp_ning
# D- {; r3 n% z* I. @# Awhere mgr in (1001, 1014);
& j: ?) _# `7 T
7 N) u7 x* x6 P/ M6 Zselect ename from emp_ning8 V. d$ q9 _5 Q( H  n& R- ]
where mgr in (select empno from emp_ning' u0 M0 o  }$ r: u6 `
              where ename = '张无忌');
* E+ ]) T- g- h* R5 k  D' r& P# t, |+ P/ S& y
8.研发部有哪些职位?7 o- M7 T# D# [( P5 ?
select distinct job from emp_ning3 a  @1 n" c# b6 B7 k- t4 \
where deptno = (select deptno! A6 b  u3 Q. m$ A
                from dept_ning8 V) M, T; M1 _: k
                where dname = '研发部');
( A2 y  c/ m& S
; G9 ]6 _- s( _4 s" _
. b/ p+ A  E! n' f2 W1 \7 h

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表