我的日常

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

动态微博

查看: 1796|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |倒序浏览
复习:
0 O, ]8 t2 @+ R! W2 F2 o; Q1.查询语句的基本格式。
( N. X0 J  ]' A# {7 ~! a) z( }select ...( {- A8 O5 T# }6 X; b4 L5 L/ k
from 表名
- {5 @, p1 L2 J2 I2 ]8 `where 条件
2 @: V) u. u0 P; r) J. m& Ngroup by 列名$ J5 L  y9 V  l( d- B* O  ?
having 带组函数的条件5 _) N/ X9 W# j! i. ?
order by 列名
2 z! o" ?9 i, U6 N; _  D7 z* U) ^
, O  s1 A4 n- h$ {2.函数* T# D6 t8 V* [3 y0 E: T2 I
1)组函数:count / avg / sum / max / min5 Z0 [! M8 s/ _% {! T! w( ?: N
9 C4 ?6 K4 l; J
2)单行函数:
. `9 {; Y' K' X6 s$ Oa.字符函数:upper / lower / initcap) l5 |: `; A0 M/ t, W/ o' q
          length / lpad / rpad4 T9 j/ F) `. u" F
% l3 k' \, w* `* \0 q+ P. ]" l
          l : left ; r: right8 P3 a7 X( i3 w! U* C" e  a
9 g' }! C0 _5 F, P" k7 g5 s
select rpad(ename, 10, '*') from emp_ning;
: c+ ?7 a5 c+ I+ O% Z: m! [
/ {8 u; E1 v: M1 z0 a; G. fb.数字函数: round / trunc / mod& M  R8 I& g( G" d/ t
select mod(salary, 1000) from emp_ning;
. ^1 u! b# O+ `- E
" [! F" |3 p2 _, i2 N7 @c.日期函数: months_between / add_months /
) q8 S: d2 K6 y2 f* z, f             last_day(sysdate)
6 v: ^' g" k' n; @- X# B3 G( V8 Y
: x4 e0 |; i' J) Ld.转换函数: to_char / to_date / to_number
4 b* u8 ], r- g2 y' z  ?- k7 [$ B, q' ?$ U1 l+ [6 @
              to_char         to_number
" d3 I; `- ]0 p2 ?+ J3 F       日期  --------->  字符 ---------->数字5 ~4 h/ h, f4 B# r2 ~
             <---------       <---------7 ?  N3 S/ p/ x( B  k) x! v% X1 A
             to_date           to_char
, \. g( i$ l$ ]  X2 l$ H
4 u$ N  k) J! l/ k: v' x
; Y$ i. s; U; P- f8 ^ where password = '1234' and id = '1001'$ e$ b" w) b' K1 S; g" I7 g
0 Q6 L% C* J% N  @1 F" F4 {& F
select to_number('$7,912,345.67','$9,999,999.99')
7 J9 p) A, {; {) X; x from dual;5 j: f! [) q- }8 n. L( H

) x' |( ]: C  k6 b! Z7912345.673 Z# [# \/ {& s( a! I6 n

8 d$ m! i7 t, P' p' d$ Mselect to_char(7912345.67, '$9,999,999.99')
% d# g5 y6 W) I# H- Efrom dual;+ D5 J$ y  ~8 l

. @+ e/ A( N) i* W7 X4 m5 Z; c% B7 F$7,912,345.67
  a5 M! n; w9 N- }- n) N) J5 b" P
e.通用函数:nvl / coalesce / decode
; O' L; c3 M& p1 ]+ g1 R" K; C8 [- Y8 V/ k  ^- |7 ~
使用频率比较高的单行函数:
3 @2 O+ _8 h( D0 X4 p2 T+ ^upper / round / to_char / to_date / nvl, A5 u+ ]& g- g/ F

' g4 r2 ]- Y  k; {! h& V4 O: Q; d1 }& v- e# j* r6 N
一、子查询' O2 }8 Z4 B. c, m& m! G; `
1.谁的薪水比张无忌高?' V5 _+ C7 u0 r" j: U
子查询: n* A" z! K$ y/ A0 j6 ?
select salary from emp_ning! e/ A0 J9 \6 ~' j! _/ n
where ename = '张无忌';
2 B, l9 I% t) p: v0 k% D
: s' S% c  d0 u6 d8 [10000
3 r* y# n- a5 }  k: o
- M1 _9 O% m3 c* L% D0 D主查询! F" o4 \) b& k! S; `7 O9 l, m, D
select ename from emp_ning5 m: M: @- Z; [4 w7 }
where salary > 10000;
1 q9 D4 U2 n3 s3 F* w8 U. J* G% G, x; o' e
张三丰$ u6 l' y0 v" y7 I: ?; q
# ~1 d; q) y6 A7 J: R- r
合并到一条SQL语句:
4 W8 t& N/ L" X: Y4 Q, qselect ename from emp_ning
6 y& K) C' w3 \$ n, u3 ywhere salary > (select salary from emp_ning& s, E% i0 Q; F: J5 e4 K; a# D8 s
                where ename = '张无忌');# Z7 R8 w8 Z( x3 e% x
+ H5 @3 h8 j$ X2 k' _* e$ `* ?
>  <  >=  <=  =  <>: 单行比较运算符,
: y% L) {: i: P! K只能和一个数字比较。, l) {- l! Z$ ^2 o+ c4 m" j6 C

- @% p% E+ A% O7 [0 Finsert into emp_ning(empno, ename, salary)
2 L" ]' }7 D& s) O4 \0 Rvalues(1014, '张无忌', 8000);
) O" k4 D, d3 c, D  C0 [
' b/ w# s, R' _谁的薪水比所有叫张无忌的人的薪水都高?大于最大
* g! F1 j$ ~% g8 D! i* ~10000! A; r5 `1 g" N; D7 R- r
8000/ w; [- p7 t; k; |: J7 \+ B& r
+ i/ C* Y$ G1 F. \% g- L4 _
select ename from emp_ning3 [# v4 n3 u/ D8 ~# W
where salary > ALL(select salary from emp_ning
4 b" F% k$ x: r* I, \7 M                where ename = '张无忌');
7 q( Q/ n; ]3 N$ v0 E, M- \; \1 t6 }& C0 e+ [6 l8 f
哪些人的薪水比任何一个叫张无忌的人高都行?大于最小
6 Y4 K6 U" i9 y" ~+ |( z  K3 ?  o10000+ i" q) b7 O6 {+ x: _
8000
1 a* B+ c, ]3 C6 B- ]% F) z- w% Y$ h* M' q
select ename from emp_ning
8 {$ \& u- J  `' p8 h  }) fwhere salary > ANY(select salary from emp_ning
. Y- H2 S! z$ C' z7 R# J                where ename = '张无忌');" [0 b* N6 s4 V. i% B% o
7 ?4 a* P2 V# q& n% ^- f2 `/ V
2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。
# d* h- `6 }7 b* c: |select deptno from emp_ning9 H& I9 Q: z+ P) b7 G- W% k; f- z3 ~7 b) d
where ename = '刘苍松';% u0 o& q9 R6 p
105 ]2 ]6 K9 y  @9 p$ t* a
5 W, S% y# s0 R1 d3 P
select ename from emp_ning
9 @$ G2 j: ]4 S6 R9 t+ bwhere deptno = 10
: A; t- r4 C! t/ N  Z# M3 qand ename <> '刘苍松';
4 n5 G% o& B+ H( J# N% \
: h( g" q9 D9 \( C) I. ]2 |select ename,salary,job , q" D% l. K+ F* }$ s% B
from emp_ning
: }9 @: o, O2 b. vwhere deptno = (select deptno from emp_ning: m7 r5 c$ L, U1 Z# q- q' \  R
                where ename = '刘苍松')  m/ m6 B8 p' M; n% Z2 a/ U
and ename <> '刘苍松';
4 j# X: d/ H- Z* P& r5 C$ s6 Y
2 o$ O; }8 C5 P7 m6 F--如果子查询得到的结果是多个,不能使用单行比较运算符) i0 I% o2 f5 i( u: b- e
等号。改为:in, A+ `% o* E; ~/ R1 Q
insert into emp_ning(empno, ename, deptno)
# q! U  K  w0 P$ J) hvalues(1015, '刘苍松', 20);
6 r. v8 _$ ]1 w$ L, E% @7 c0 {5 n5 t
select ename,salary,job,deptno . u6 _9 X" y8 Y/ J" {' x
from emp_ning3 O' u/ S" G" q1 [& O. S  }0 K) C
where deptno in (select deptno from emp_ning
: N. |# C, r9 _4 ~; D                where ename = '刘苍松')( R7 M. L2 i2 \% z- m, C8 |% m! Z
and ename <> '刘苍松';8 F7 q1 D# m2 G  @" O8 i- W7 Z2 _
/ l& y" T( y1 p% a, Z
根据子查询返回的结果的行数:# n1 T0 O; _+ j8 a% [0 [& S
返回一行:> < >= <= = <>+ \# {( O! D' B" |7 ~" n
返回多行:>ALL >ANY <ALL <ANY in
) Z* p5 L* X  O
! T9 u, \+ u( b3.每个部门拿最高薪水的是谁?
0 {, g. K. B) `--返回多行
$ f' W: Z: q4 `" e# X, p. m+ T' q% w" gselect deptno, max(salary)
$ u  N: \$ m" \from emp_ning
+ F+ t. l! c1 |% \where deptno is not null% j- P! d0 Q- B$ n3 G
group by deptno;
9 `5 g' B2 E2 H# C# p. F  Z3 F5 w& o* J' M* S6 x
   30        5000* }( N( f( z, v' {; c9 X
   20       150006 @) F" Z3 Y# O5 E3 v5 O& G, |6 N
   10       10000
; M2 b5 z& x$ n) Y" e
( ~2 i7 b6 O! ?6 n7 J" Oselect ename, salary, job, deptno
  c; z; y* D" F. Y, O" U& z/ \+ V0 Vfrom emp_ning1 N$ B5 u5 c$ W0 Y( f# W
where (deptno, salary)
9 [% z) N& I8 c5 P; ]$ ?      in (select deptno, max(salary)9 y8 q# r. r: t# n, o. K
          from emp_ning
- }$ J+ a6 V7 C: l" X3 e+ @          where deptno is not null; H3 |! I' d7 O  Q& @; A" G
          group by deptno);
- M8 O5 a, k& c, u* s4 z: t1 c9 {4 ]
4.哪个部门的人数比部门30的人数多?5 r7 j3 g7 L4 i4 k) y  o
select count(*) from emp_ning
7 Z4 P1 H' D. R% I' b' s3 E2 twhere deptno = 30;
* Y7 @. K  x& @% {* G4 \) r3
8 r7 O7 `; M6 O* |0 k
, V% F1 |5 r5 ~: @- F+ l7 fselect deptno, count(*)
1 V6 q, i8 t3 M' o' kfrom emp_ning$ `! f4 v! X! W) d* G* W. p5 }
group by deptno4 w, b$ C  m* u! ^* `
having count(*) > (select count(*) from emp_ning7 j. x6 Y6 p# J0 R2 |( S+ o, c/ f/ @
                   where deptno = 30);
2 M/ ^$ M8 d* x8 J9 Y# V$ ?: n7 v8 G" w" I2 h. A# ]2 ]
5.哪个部门的平均薪水比部门20的平均薪水高?0 C/ a. j: s4 p) w
select deptno, avg(nvl(salary,0)) avg_s
7 H/ r3 e$ C/ ^from emp_ning& H" f2 x  e: K% c
group by deptno
0 {4 q" b* [7 U( {4 X. W! T9 s; Ihaving avg(nvl(salary,0)) >
" N) e$ z3 p3 w# F; O       (select avg(nvl(salary,0))
. t: a# H5 `* i* Z4 Z        from emp_ning2 _/ n9 ]; h6 f% o. a: ?' O
        where deptno = 20);8 ~/ a5 O- c9 ^0 |& B1 u* i1 r
0 J- d$ k2 A7 H4 N
6.列出员工名字和职位,这些员工所在的部门平均薪水0 B4 ]$ `" i7 i2 ?1 n+ I$ S. _
大于5000元。& |  o% Y( Z3 }5 T
select deptno, avg(nvl(salary,0))8 i4 q# V9 {4 s9 y0 H% l/ t0 K
from emp_ning
0 a" l" P# {+ v1 p( V" A) p* Zgroup by deptno
0 g* e# z6 ]- B# F- X+ l0 n$ z8 y+ Nhaving avg(nvl(salary,0)) > 5000;
9 M7 C7 `2 N/ b8 a9 h1 o10  5750* ~% E% X; Y  Y- X6 u
20  8000 - v/ y0 `" ~! H8 T0 @
0 m  \6 U, c$ {
select ename, job5 v% [4 B. k1 H! x! X) b# T
from emp_ning5 l- r8 x$ W( |, y
where deptno in (select deptno4 w8 A1 D# m# F( i7 z) j0 U
                from emp_ning# a6 K! H, `$ F/ C7 x) N
                group by deptno
6 N- X3 i7 ~; i                having avg(nvl(salary,0)) > 5000);% ?5 [& X7 w4 k" A) V1 X& E9 l: l
$ e/ p6 B: I+ B6 j( J2 J1 O
7.谁是张无忌的下属?7 r2 }7 z* ]; c
select empno from emp_ning$ t. d3 }2 h: L) O( K
where ename = '张无忌';- Z9 H2 F9 X# b) R  r' k  J
1001+ M% U7 f9 M. a$ _, C  t/ `  B
1014& C3 V6 _2 U7 \- O
9 Z8 o1 m' q$ h8 s
select ename from emp_ning
) l; U  D! k' ^: X: J; h& Wwhere mgr in (1001, 1014);
+ D, t4 m0 |& N4 P$ S' Q: Z, w& W. F
( u% U9 ^$ v7 T7 p: i8 sselect ename from emp_ning
* U  [' ~2 c1 nwhere mgr in (select empno from emp_ning
) F. W$ |" J5 K- a6 `, e              where ename = '张无忌');7 x/ _% `+ o' a% w7 }% p

2 w* `2 E2 v' @8.研发部有哪些职位?
, G0 Y& u2 G" d# X" u# s# r6 o1 sselect distinct job from emp_ning4 I; p7 z8 J* D3 s6 Z" D
where deptno = (select deptno4 r. `2 `  w2 S) r
                from dept_ning2 q1 S  N. Y1 ]4 b3 l: t" W6 H8 K
                where dname = '研发部');& B# B3 ~4 ?8 i, v% Z; U

1 G$ |% E9 |1 y: Y0 \. m
# M4 b1 @: |! J

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


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

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

   

关闭

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

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