科帮网

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

动态微博

查看: 1930|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |倒序浏览
复习:2 I( H. v" |8 o% `/ o/ c
1.查询语句的基本格式。2 O: {2 T5 k1 E! i# l3 [3 y2 g4 ~
select ...
2 C6 l6 ~1 t0 ^+ p3 ]' Efrom 表名
) n7 B  h8 J2 H% \1 U! Mwhere 条件
. K. Y8 R' e' e) a2 S8 pgroup by 列名
/ \" K, c# ^6 c( J' ~' xhaving 带组函数的条件
- p  y% h( J9 w; M$ B" F0 M4 Horder by 列名
- b) d" e$ Z6 F; [( @; o
; {9 r8 \( `1 T+ H8 y2.函数
5 R/ V8 }6 k/ A( I' r1)组函数:count / avg / sum / max / min
9 i: r6 c! e) @) _( ^
! Y: x. a! u  s* u+ O0 m2)单行函数:
4 F- \6 |( G9 P2 g; X. c4 j1 A: f9 Ca.字符函数:upper / lower / initcap6 L$ N* H9 n+ ^2 C
          length / lpad / rpad: d) z1 t7 }0 W4 U2 B

3 m- u) @# f& I          l : left ; r: right
4 z4 j) C/ a" n  k; g- h: c% |) V
select rpad(ename, 10, '*') from emp_ning;' j4 u$ `, }: l8 C

# j0 g4 e# Y' r/ O) G3 Hb.数字函数: round / trunc / mod
* u$ F- x3 J& o; h* n7 V& V" t4 U7 eselect mod(salary, 1000) from emp_ning;/ i% r8 v' P9 D7 s& Q8 e& d
6 @/ V( h) H# g0 H* C& H
c.日期函数: months_between / add_months /
4 P4 h1 G. M  c0 G- v0 ~             last_day(sysdate)( {9 o! i- w7 h, r2 d5 V  \! m

5 l* c9 K, I  id.转换函数: to_char / to_date / to_number$ o. E4 g$ ?% H0 A0 z3 q6 _

9 |5 p/ V% a+ b1 W! P2 @              to_char         to_number  v  s, i, {7 {; J+ o
       日期  --------->  字符 ---------->数字9 y4 U+ W: f' {1 U
             <---------       <---------
$ i; c- z  M0 G+ n- W             to_date           to_char
" u+ j) Y4 [9 ~$ A, E" m( m! Y; d: c( I+ ~

3 |5 K# r, i$ R where password = '1234' and id = '1001'
+ I: F) V7 t! Z, e- X$ i6 T8 D1 S5 e. |; j, p& x0 d5 ]
select to_number('$7,912,345.67','$9,999,999.99')
4 \! R2 r& r$ W8 U! {3 H from dual;
! @6 K  T$ P3 O% t( u; ^4 `1 V) v) Z3 D1 S6 h
7912345.67
1 u( b, y$ C+ L- X- }' j/ S5 ~& [' p- w3 r
select to_char(7912345.67, '$9,999,999.99')
0 p/ T0 x, k/ P+ xfrom dual;
" F# G: m6 v% y2 d. Y% V8 G6 U  D2 g' `, _# |0 w
$7,912,345.67
9 v3 v% V. Z" u( C: x' ^5 B; U( R  N! n
e.通用函数:nvl / coalesce / decode
' G' {2 q  c9 Z  N# V3 O
7 P9 M. Y: a  O" i( ~8 M使用频率比较高的单行函数:
$ ^: n. `4 `; z( m- u3 Rupper / round / to_char / to_date / nvl
2 o7 F- E0 @! U
4 k# A5 f) c+ d' z* a+ r) `  S" |, ], U9 _7 J8 h4 P( K5 Q
一、子查询
1 Y) ?3 F4 ?# @2 F  X1.谁的薪水比张无忌高?
3 ^2 r- D3 s4 b8 _# J( Y$ }/ f子查询* c: c, ]1 g3 T* G& h
select salary from emp_ning
4 C' W2 ^, @5 {) q) ywhere ename = '张无忌';
% w* J& A$ J) L  p/ R5 f7 r9 f0 X, ?! R. B) _- v
10000, [( ~& c  y: l) _# j
. M: v3 X0 a7 h6 M
主查询% |5 @; f: c& s" @2 G
select ename from emp_ning, T$ Z$ v, F, Q
where salary > 10000;
5 \/ O1 \' Y7 w% L& d0 Z# q. Z! o) g+ c
张三丰
9 g4 D: s7 m: Z; y! m6 g- h5 k: \* [% m8 o( {
合并到一条SQL语句:( _4 d+ O. g8 J- S9 ]
select ename from emp_ning
0 p; }( d: ~) r; j& \where salary > (select salary from emp_ning5 E1 x, }$ q1 B# O
                where ename = '张无忌');5 `9 T* z0 p; E" W1 `, Z
: `+ \: q  j* r6 C3 |5 `5 y- @! @
>  <  >=  <=  =  <>: 单行比较运算符,- _( B! X" G  W" q' b6 M
只能和一个数字比较。
. T8 k" B7 p' ^3 R2 Y, w8 a: G; X7 p2 V' J4 _% D8 C# E4 j! w
insert into emp_ning(empno, ename, salary)( ?4 j" `8 p* _) s( f
values(1014, '张无忌', 8000);
2 S4 w* {/ j, _1 d  j+ K7 ~8 @
谁的薪水比所有叫张无忌的人的薪水都高?大于最大0 s# s2 p$ J1 T7 j& ~: }
10000$ D) }' |# X1 w
8000
" P! f. C% O8 u  f5 d# c6 q! q$ A% X( M9 M1 c# S
select ename from emp_ning2 i& F  @! i5 p1 K/ R) W2 O8 G
where salary > ALL(select salary from emp_ning. k  f6 I2 t& ?" ?6 H
                where ename = '张无忌');, T4 W5 v" C: z) j& ?. l
$ G5 T7 b* g, @5 _  r+ s
哪些人的薪水比任何一个叫张无忌的人高都行?大于最小- ^% O# ?7 o" @! r1 E! i5 D2 x
10000' A$ a1 d& O3 M* \
8000) A, q, [# ^# ^, P) B9 J0 {

$ b8 }' L  G: N: o& I4 G+ W1 c" ?select ename from emp_ning: q0 N  r1 T) _3 V2 }" f" C
where salary > ANY(select salary from emp_ning
' Y2 a" g) p" f                where ename = '张无忌');
8 n3 i: S0 k% H- X' ~) m  ]) n/ X% A% c7 U2 X
2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。5 ?+ @+ j& d  H# D' B% w
select deptno from emp_ning# X; x. h& |; x# s( E4 {
where ename = '刘苍松';# W. }# C4 o# O
101 k. {7 v# }" i, e0 ?# t+ }. K' k
, M& t; Z* M& U6 N1 |, M* k' w0 B
select ename from emp_ning1 Y6 G! h+ a$ N% C9 B3 M
where deptno = 104 t  Y6 t. D+ F
and ename <> '刘苍松';
* @/ L' O6 j8 o  m) [9 ?9 G. K. R: P7 q1 D- O% ~
select ename,salary,job / g" t0 l8 ?9 l& Z% V% X
from emp_ning
3 I1 m0 ?% l+ K* ]' V  R* s9 ], z9 Pwhere deptno = (select deptno from emp_ning. j9 u! E% f0 M! o" m
                where ename = '刘苍松')
+ }$ `. V( p2 g- G) n& M+ q# oand ename <> '刘苍松';
) F. E8 Y" P. t4 w! o
  E. x  m  e4 F  A; {& S--如果子查询得到的结果是多个,不能使用单行比较运算符
) O# n7 ]4 y/ U6 H等号。改为:in' x: y0 y4 l1 j: a/ g/ f
insert into emp_ning(empno, ename, deptno)
8 I+ _  H0 P9 }( L. o  B7 Svalues(1015, '刘苍松', 20);6 c, v3 C" M1 ^. A8 t- J% R
# X! _5 f1 R1 [* Q! S  X" t
select ename,salary,job,deptno 0 i, k/ E2 `8 p9 W# W; u
from emp_ning
. k" I/ b4 s- }- n7 m/ f. }! Dwhere deptno in (select deptno from emp_ning7 n8 E5 `8 W4 Y8 m5 N" h, y
                where ename = '刘苍松')3 X' q8 U( v' a6 |% {" r
and ename <> '刘苍松';. K3 _) x0 Q1 d6 i/ V7 F

- c( k! h7 |5 r, E: A+ V4 [根据子查询返回的结果的行数:
& m/ }/ \1 _5 B+ p8 X返回一行:> < >= <= = <>
+ E* Z& ^& `8 P! Z" W返回多行:>ALL >ANY <ALL <ANY in
+ v. N/ W# l* R+ B6 i4 m3 m" M0 I  w5 |8 M; n( E/ Z( w8 f
3.每个部门拿最高薪水的是谁?4 z1 I+ J+ j) d2 t1 @7 m! T1 m
--返回多行; g# Q, L' ?; Y: O: s! S* ~
select deptno, max(salary)/ o. i' d2 B; f5 [
from emp_ning; `: f( m( z. g' e( e: V
where deptno is not null: P8 |0 V: h4 J7 g# G3 g6 q
group by deptno;
! e5 u, O+ a3 |  Q) M7 h6 c3 U& P- }9 r- X0 e* r! A% c
   30        5000
# O( e& E7 o2 K   20       15000# [' B) N& U4 A+ P, A
   10       10000
* c) e2 t3 x  E$ V, F! S% e& d
* Y2 E" p/ N( A# q& {select ename, salary, job, deptno
) r0 F" v% z- a2 I2 pfrom emp_ning( T9 p" L7 X3 F+ p( a# g
where (deptno, salary)
# f: [# c6 {! a$ T9 |) S      in (select deptno, max(salary)' G( \. _" n6 B% O2 h! W1 |: M* l4 H! ^
          from emp_ning- d. A  ^1 ]  F3 z" l
          where deptno is not null
- w) r/ b! ], ]! n* D7 Z  @          group by deptno);; ~9 k! x: x4 q1 P8 w. i" _
! F7 G& b) [' r$ m9 A2 d1 y
4.哪个部门的人数比部门30的人数多?
" C% f3 p2 P9 X2 J$ S& g" W1 Pselect count(*) from emp_ning
. v/ V! [  n+ }where deptno = 30;
( T; K4 _+ Z3 A$ z32 w- i5 }: r. t" E
0 v/ k" t: m* C+ y) \6 C
select deptno, count(*)
7 l7 y* Y8 _5 Jfrom emp_ning" u) ]  Y/ _% b% b, r' c' D
group by deptno
% ?  a) g/ w/ e5 J# ]having count(*) > (select count(*) from emp_ning
+ `/ K: I  }5 F% E( D$ l                   where deptno = 30);: ^7 r' n$ a; Y( X5 J6 `' w" [
" W0 |* H$ J2 h1 V% S& s5 s3 H6 Z
5.哪个部门的平均薪水比部门20的平均薪水高?
- H( F1 c0 e+ w; ?select deptno, avg(nvl(salary,0)) avg_s
! ^5 I: B* t' f* V( ^; ffrom emp_ning( a  I# v7 w# x# J* L
group by deptno8 i+ {# P/ \  O- q1 H
having avg(nvl(salary,0)) >3 E6 ^+ j, w# e9 _6 d9 @
       (select avg(nvl(salary,0))
# j& _6 |) a4 \. R        from emp_ning& R  g6 K5 V$ u+ i6 Q2 E% x
        where deptno = 20);5 O' `1 U, j" p8 r% |4 G. y

, k. C+ n& B3 O+ Q* I4 Y6.列出员工名字和职位,这些员工所在的部门平均薪水; H% [% B5 f& e; c% U& \
大于5000元。
% h/ {0 Z" }* h' C& Eselect deptno, avg(nvl(salary,0)), _& Q2 j0 \( V% m
from emp_ning
3 {( j9 j% Z  W3 E: I1 p# ^/ Tgroup by deptno
+ u! [, @* i4 M$ Lhaving avg(nvl(salary,0)) > 5000;
9 n' |+ n0 t) x10  57507 {+ J/ Q% M: [- x3 ~
20  8000
0 o; A$ V( D& P1 s" N  S
6 A) y# }7 d2 y3 V& Z* J; ~/ U# }$ Uselect ename, job
& [: P: T: ?" |$ n7 q% v- nfrom emp_ning
) m5 E0 j7 H! |9 ]4 Iwhere deptno in (select deptno* L4 S! F8 x# t& ^
                from emp_ning- b7 i6 G9 B8 x
                group by deptno$ c9 @+ k  U! i6 [) P$ C9 c
                having avg(nvl(salary,0)) > 5000);
! B3 d. J$ w' C( i& G/ S
' _" v* H* c2 {+ w$ W7.谁是张无忌的下属?5 ?" Q& ~- s6 ]) Z* d5 r
select empno from emp_ning
! K- }6 o4 x) Y3 R* E) m: @( vwhere ename = '张无忌';3 _, m; |8 ~( Q- n1 ?4 u
1001+ M4 P/ e! q. G7 B
1014
. x! ]0 O6 u  w" w* X; L
* X; s8 Z  L+ @1 h9 a4 uselect ename from emp_ning
  p( ~5 {! m' S- q9 ywhere mgr in (1001, 1014);9 P' g# L$ p. a
. Z. Q% T8 q3 R6 w: s
select ename from emp_ning
; o( p( x  |& v4 c: R& Pwhere mgr in (select empno from emp_ning
# A5 U7 X* P  i- R% i# l1 [              where ename = '张无忌');# }4 c0 v& j* R8 r
8 N% A: C) c: c  x, c5 r1 y
8.研发部有哪些职位?$ X* s. X% e8 }4 R
select distinct job from emp_ning8 ~- S5 S/ S' J6 `2 ]
where deptno = (select deptno
" Q7 N  J% R8 G" D8 X                from dept_ning
7 N) A) b0 u- K7 x7 K6 `6 p                where dname = '研发部');
( m- L* ]* r  r( D: e+ y+ |, j5 k" d9 M8 B) w: T
# t: i7 `+ l7 O" v( s1 T; C( C

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


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

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

   

关闭

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

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