我的日常

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

动态微博

查看: 1878|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |倒序浏览
复习:
2 P0 r5 Q2 \7 c+ Z6 u1.查询语句的基本格式。
6 A  T0 D+ A$ D( u* G; u$ Eselect ...7 E& n2 V- p" V4 ?1 X
from 表名
7 r  h2 j& g" iwhere 条件
3 Y/ H# {2 B7 J/ K+ Z" |group by 列名
4 F6 _% P7 l" @+ j7 H: N" A2 mhaving 带组函数的条件7 h/ I& f$ A0 @4 R
order by 列名
8 M$ h; ]% Z4 X2 n7 L2 l* `8 t! G2 t. {7 o
2.函数( f- y9 _) |0 J% x! K
1)组函数:count / avg / sum / max / min, l1 g( _% k0 u& @& Y6 i
. _9 G+ p- o6 r( ~1 |
2)单行函数:
5 B3 H+ Y* f+ ^/ M+ [) c% Ba.字符函数:upper / lower / initcap. f+ k7 g, }" d
          length / lpad / rpad
, k5 e' s1 ]! r8 H& p1 ]
  c9 P! E% L+ D' O          l : left ; r: right
: ~0 r, e# l2 a5 Y  H$ }4 @2 P8 i9 s, t0 i3 L9 K, B
select rpad(ename, 10, '*') from emp_ning;
7 I$ l4 B5 w4 ~$ X
. P. k8 o+ Z, Cb.数字函数: round / trunc / mod
! q: ?" i& G2 p6 kselect mod(salary, 1000) from emp_ning;
% O* x" [& V! Q1 M' e6 `' @1 z7 A
2 _, o: F) s% l; u4 j  i7 Ec.日期函数: months_between / add_months /
% i4 l" N: y2 X- X) p  G             last_day(sysdate)
/ |3 m4 A* m  A+ H# u
# J. F, f0 m4 X6 o, ~2 Ad.转换函数: to_char / to_date / to_number! u! @7 W0 J' Z& T) f' X: I

% t9 h3 z/ }5 C; ~+ i* h              to_char         to_number
, u1 n+ y9 k% I3 L; S, U       日期  --------->  字符 ---------->数字, B$ f1 `9 i% y* f9 h
             <---------       <---------
1 x. g" \2 P# s) z+ q$ m$ m8 r4 [/ S             to_date           to_char
( q% Q- e/ L7 l( {, Z
6 {$ Z7 y, R0 Q. j5 M
# T  ^! K! b7 S6 v6 U) G3 m9 [ where password = '1234' and id = '1001'( S5 _& l) _3 T+ t8 ?) Y0 g
; ]+ ^1 a. Y7 D+ G  L+ N! `
select to_number('$7,912,345.67','$9,999,999.99')! Y) G0 Y" I" n' H
from dual;
2 x7 X6 e8 E& R+ t# n9 d  m9 s% v2 [, ]  O% W
7912345.67
# L, }& l8 {$ Y4 p, v: B
( g4 Q: v2 m; @) H* T+ J' Mselect to_char(7912345.67, '$9,999,999.99')0 L+ U- r; D( ^. o, k- _
from dual;& p' A1 W7 i; a1 B2 c. o

: \3 r8 F" I" d6 }7 _& _; C$7,912,345.679 L, O2 h! E. a8 \# A# M" A; B
- Y/ D; E% v9 K9 p/ e* i
e.通用函数:nvl / coalesce / decode1 C" v* F5 _9 O: f: ~0 N2 U
, f/ L3 _/ L. ^* @
使用频率比较高的单行函数:
8 g1 q8 ~* ]% d, Pupper / round / to_char / to_date / nvl
( E! T0 l5 _  J; u, _. c
2 A0 ]. @& G% M. l& K* f) m! R5 ?; G, q! O& V- V& [
一、子查询
9 K, k2 Z9 K& z7 X8 R8 F6 ]1.谁的薪水比张无忌高?
5 h, e. y' H- _7 A/ c( C$ G- y" z子查询
# q4 S0 c& v# _  i4 s0 Tselect salary from emp_ning
1 L. ^6 ]; L. e+ {where ename = '张无忌';/ E3 N: j% F, V2 R! E, e+ ?

) K( ]6 r* Q( g! @' Q% q10000
# J8 O5 a* d6 n. z# z4 w5 A6 b" @/ ]4 G3 u+ E% U
主查询" L# w, o2 i' H7 W
select ename from emp_ning
2 k* o* H: n6 r1 `# O( W2 C0 ^5 F' {where salary > 10000;
; H  |) t4 `: J$ M2 k4 Q- |, U: L% x" f" P6 l0 l/ z3 h
张三丰; q' O+ _, Z; v
+ P4 b7 n+ M. c: ?8 q4 k7 \1 C
合并到一条SQL语句:. `' z% g& g/ X! a. }  B
select ename from emp_ning! W/ O2 O# ]6 s- N9 Y: O- I& x3 ^& N
where salary > (select salary from emp_ning  S- V/ A5 C6 {& _, i- _& g
                where ename = '张无忌');$ w  C6 E0 ]) `! R& [
5 _( I$ @% `1 n8 u/ x: W
>  <  >=  <=  =  <>: 单行比较运算符,7 O- R6 y# T& {. ]7 O  ^$ O5 {
只能和一个数字比较。. b5 X# y* J: J+ F5 _. l

) f$ o+ Z" Z* \6 z3 Vinsert into emp_ning(empno, ename, salary)
  I! B/ ^/ ]6 C. q; |values(1014, '张无忌', 8000);
2 o  l* I2 d/ @5 @2 z; h: G) F; P% F3 z) {
谁的薪水比所有叫张无忌的人的薪水都高?大于最大+ M+ q! }1 G' P& s& @4 v
10000
; }7 G. l3 ~5 J80001 d, }: A, J# n- g2 ?& @) g1 [7 m
0 T0 i$ v6 Q( r- Z
select ename from emp_ning
1 `5 V% I8 t# ]5 w$ Z9 Ywhere salary > ALL(select salary from emp_ning0 r: z! A1 s$ G  P4 {, Z8 Y
                where ename = '张无忌');
6 B8 k% ^! w+ i) L- z1 U* Q  q2 O% t$ X) x6 z
哪些人的薪水比任何一个叫张无忌的人高都行?大于最小3 v- ~# w' N2 k' @
10000
; J( l8 P/ h  V/ [# E; O8000% U( {: x7 z- D( M: }- K
* p- C- J0 o( B- P- Q
select ename from emp_ning/ x" {+ H* S- b: P$ o, C
where salary > ANY(select salary from emp_ning
1 Q0 X5 B% E1 N* n) x                where ename = '张无忌');
9 @- a2 x' a- P4 _  H
0 U& D: x/ Q6 m+ R4 A: K2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。
) A: z6 k+ K8 c0 m+ b/ Nselect deptno from emp_ning' |$ |/ E. y# n9 `/ o6 N
where ename = '刘苍松';
. E/ A/ \* D, l* W5 e& c3 w0 D9 I10
7 O7 n* v# V) N+ t% i7 l
' _- h- n$ e8 ^9 dselect ename from emp_ning
! g% b0 |. M. z+ E6 L! l+ jwhere deptno = 10, ~8 U3 U0 b" H+ r$ O0 D
and ename <> '刘苍松';( z  j6 q5 _% N' K; T2 M

5 J* l. N! B& h$ s6 zselect ename,salary,job 4 r9 z! ^7 y' ]9 Z1 _( V+ k  N
from emp_ning8 m: ?5 L! ]& v8 H% S9 R" o
where deptno = (select deptno from emp_ning2 k. w& T. X: M/ ^- t
                where ename = '刘苍松')
- k8 O4 {  b. Q6 V) wand ename <> '刘苍松';4 C4 Q; F* M. C/ c

1 ?9 j; W8 T% k4 k5 }--如果子查询得到的结果是多个,不能使用单行比较运算符% F# s, P% J; {% m- _) `. |
等号。改为:in. \" Z! A, L( Y9 M8 `9 [
insert into emp_ning(empno, ename, deptno)3 @- A. j; A  b5 L
values(1015, '刘苍松', 20);
9 I7 K$ ?7 [4 z" ?! D) S! @. {6 r3 x7 e" |. R9 t
select ename,salary,job,deptno
) l; L8 R0 Q9 f) X3 o/ [- bfrom emp_ning7 C; H% Q8 l: G8 C. I$ r
where deptno in (select deptno from emp_ning0 ]7 t5 \! k, J# ^
                where ename = '刘苍松')
, h3 ~" M5 L( i1 M1 j, d; T9 C& oand ename <> '刘苍松';' W  J6 N, r2 d: _9 s2 \

  z+ N: @8 ^3 z9 D$ U根据子查询返回的结果的行数:
; f, O% ~% D% U, C, M, ~返回一行:> < >= <= = <>* f- F0 P! _0 |$ e: b
返回多行:>ALL >ANY <ALL <ANY in
6 a/ b6 ^( i' C2 c( D4 L
! o9 z/ Y4 d! `; c3.每个部门拿最高薪水的是谁?
5 R! n" i0 Q+ R! o+ V; u* m--返回多行
4 [$ `9 b3 X. f2 S5 r0 B# v" `; bselect deptno, max(salary)
, E. w6 E( P9 g/ V) l% u: [" ~from emp_ning+ D# O& N- c7 ^: W/ t
where deptno is not null  ~5 O# }* \. f' T; ^
group by deptno;* X1 L) y: U& W" L; O
8 t! X5 `) d# S$ t5 A0 a) s
   30        50009 [* o+ ?" s+ J7 n& Z- ]% o1 J
   20       15000
1 h6 O$ t4 X, E  Z5 l' C   10       10000; F' ~! c1 H* G5 s# L" H) R) I

5 \4 l5 }6 b% r" _8 ^0 lselect ename, salary, job, deptno
+ X# i" N* w4 v& W! `2 S: Ufrom emp_ning. Q* A- I" n+ d; g/ r" D
where (deptno, salary) 8 P) V+ o; m# T  D1 D: Q" i  J
      in (select deptno, max(salary)8 K) o0 a5 T' ]* z: d
          from emp_ning* [% I0 r, W; x; ]
          where deptno is not null
5 I7 D% ?& o% W( ~- o* \          group by deptno);
, W0 l+ Y8 F3 ^4 J3 L1 {0 C3 c! l+ @' D+ B1 y
4.哪个部门的人数比部门30的人数多?. m& B$ B! Z) k" M3 H9 a& T) V0 l
select count(*) from emp_ning
. S. t/ H2 X  X9 b+ Q  C) @- ywhere deptno = 30;
* l8 K6 m+ B4 }( E$ }4 z3& G/ r6 s" |' S# g8 \

# L. l! U$ t6 u+ _select deptno, count(*)" v( o5 S  ?" n# `
from emp_ning7 i/ K/ R9 w2 q: q6 z
group by deptno
. F& l7 F9 Z- F* m: v9 y  `. h1 Rhaving count(*) > (select count(*) from emp_ning4 m% r: o" |% K1 @! N
                   where deptno = 30);
! s( d) O% R0 T; P7 }) z# R' t3 }/ F5 T8 @5 O  R  T
5.哪个部门的平均薪水比部门20的平均薪水高?4 z% ~* Y. S& n, ?) B
select deptno, avg(nvl(salary,0)) avg_s
: a" Z9 i! C( O/ P" ^from emp_ning
6 e% ]! b& B+ {$ D( p- ogroup by deptno
, x: o( B- X6 U) {1 V; dhaving avg(nvl(salary,0)) >: U0 y0 m1 o5 t* I6 M
       (select avg(nvl(salary,0))3 e, K% w! t0 ?3 k, e
        from emp_ning
- S, g6 P2 X1 Z- b7 P7 n        where deptno = 20);
5 G3 L/ C$ S3 j* a' F+ I2 K. c8 o0 z" k. R& L: J: P4 l( V
6.列出员工名字和职位,这些员工所在的部门平均薪水% x/ M: Y0 \$ g7 p* x9 k( B
大于5000元。
, n7 g! i# {: U* x, c8 }select deptno, avg(nvl(salary,0))
. R3 r& v/ d" Y; i( Mfrom emp_ning& w% [. c8 R# w( ^
group by deptno, n% }/ |; V4 R  O- `- l1 ~; q
having avg(nvl(salary,0)) > 5000;8 c0 g0 W8 Q$ |! n5 e
10  57504 o# @' `1 l4 W$ p. W; z
20  8000 # ^8 V, p" b/ b

0 k. @& R% ]7 W# Oselect ename, job
1 @- g: }5 z' W- Z! E. K- {from emp_ning
  D: C7 X# h2 pwhere deptno in (select deptno1 W% ]" ?; S0 _  f
                from emp_ning
3 s6 N8 x8 [7 I! f% ]; A                group by deptno' u6 H; x( J- q! F0 P
                having avg(nvl(salary,0)) > 5000);
5 `5 n: ?- D! I. P; F, c' o. a( z+ A; e# k# S* `
7.谁是张无忌的下属?3 S6 ^0 N& U% _: H
select empno from emp_ning7 v* O7 i2 X4 h" ^, m
where ename = '张无忌';
% M0 {2 r2 Z, t3 H1001
+ @6 p8 B  i4 l3 T10145 ]1 d- C" [8 U, g1 x/ n& y8 j1 P+ x
3 m4 U8 i. {8 T* W
select ename from emp_ning: P! x# b: ]1 i4 V6 h8 J
where mgr in (1001, 1014);
. f5 T) x# m! g* Y* K! i3 X' d' h# |0 r) N# \4 |* D+ C: N
select ename from emp_ning; f- m3 ]! \5 o/ q: L
where mgr in (select empno from emp_ning/ J& U7 J1 r: w  k* X& b
              where ename = '张无忌');$ `7 e5 H0 [/ O' m7 g  R

0 G; W$ T( h( C9 s3 G3 A; \8.研发部有哪些职位?
5 k& H: u4 G0 t& S: b2 V& z$ P% Nselect distinct job from emp_ning* A! x  W& j! ^6 z' `; a6 a# @" M6 C. f
where deptno = (select deptno
1 Z9 v/ p! R* U7 F5 N                from dept_ning7 Y- z  P# q5 e3 U, r
                where dname = '研发部');
3 j. E3 b5 ~( ^% M
& r( H2 |( x0 x$ Z
4 X$ E) J9 o$ Q/ }

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


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

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

   

关闭

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

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