科帮网-Java论坛、Java社区、JavaWeb毕业设计

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

动态微博

查看: 1603|回复: 0

Oracle增删查改 day02

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:52 |只看该作者 |倒序浏览
SQL*Plus   9 a& `% o* q. x
sqlplus.exe
' h" ?  S. F& P% o* N/ n/ C/ M! R" ^7 N$ ?* J4 C
1)数据定义语言:create / drop / alter / truncate
! R5 Q; h: g; D对数据结构起作用。
+ y7 d- u; p' b" I% a9 Z  ********
8 U& E* t8 p3 K: G' E9 tData Difinition Language: DDL
* F2 L7 a' N* L1 ^2)数据操纵语言:insert / update / delete
! A6 }, k, ]* d, Y& D对数据起作用, T1 [9 f" l  h" [
  ****
( \) S+ o5 ~! m3 U4 ?2 [Data Manipulation Language: DML' H6 h% |  I" w3 o5 {$ Y$ K
3)数据查询语言:select% e& A! j8 H" X; B5 H
      ****7 ~% }+ B5 l, E9 D
Data Query Language: DQL4 d; _( e7 ^0 L9 p5 f
4)事务控制语句:commit / rollback3 ^+ A! [! {: Z* Z- N
对DML操作确认
1 g; N. x4 w& x) g+ h) q  u4 E( x! x% M. W4 x  M7 c
一、学习单表查询语句。, v# S  z: _! ?0 d: G! V7 y$ M
1.计算金额的四舍五入?
: l' g* w& R5 ?9 Aselect ename, salary * 0.1234567 s1, 9 u7 U! Q) g7 e
round(salary * 0.1234567, 2) s2,
! h5 Z. L9 W9 l4 o* Q9 t  V9 Fround(salary * 0.1234567) s3,% J- V! P3 \/ q* y# w& P
trunc(salary * 0.1234567, 2) s4  B% l. I4 Q/ O, s; w1 z) H; J
from emp_ning;
# @: Z8 x( B6 q+ O+ k! n3 {& I
  W4 C4 a) G# }4 K, g8 x# nround(数字, 小数点后的位数):四舍五入
) e8 [" p& A5 B如果没有第二个参数,默认是0.3 w! o2 }1 @9 y; B
3 c0 n/ j( V+ M
trunc(数字,小数点后的位数):截取
6 |( O; B/ U% r/ b" }4 o2 c如果没有第二个参数,默认是0.. W( q3 i' R7 X7 @5 Z0 `
4 E0 ~& g. D4 k3 k# o
2.Oracle中的日期: J" p/ m- [: C/ B6 a% L
1)取系统时间的函数:sysdate
- L# I. p( L2 z/ C5 Oselect sysdate from dual;
' _" R% v8 M# }4 h" p) y$ C+ ~$ l
2)把时间数据按指定格式输出
) l0 l* B5 Z) p  _9 R* }select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')
. R4 @1 Z% X7 bfrom dual;% B) z3 @$ Q. @8 r4 [
2 O- a8 O8 o4 y& ~
select to_char(sysdate, 'year month dd day dy')0 k& e( {: }4 D  _: D% d" d) B0 I9 J- n
from dual;
; e* n: A$ e! y6 y6 ~
. i: n) `$ h0 gto_char(日期数据,格式)
4 U, \8 Q+ c+ V4 D/ v
+ }+ X; u( ~7 _, _public String to_char(Date d, String style){" O' y0 O; O9 q7 U, F5 q
        //SimpleDateFormat把d按照style的格式转变为字符串
; L; ?# v/ h: w        return 字符串;
4 C# M5 D2 N* G, q- R. H  d8 E}
; Z% ?" b+ q& l3 `1 z
7 c1 g4 w2 r( `( vselect to_char(sysdate, 'yyyy/mm/dd')* I" F6 i; {$ U4 i
from dual;7 x/ ^. y; Q" x3 ?) b
, P! e) m* U2 U3 R8 s5 v6 X) R) K
yyyy: 四位数字年  2011
+ k' s4 D& X6 `, B0 lyear:全拼的年 twenty eleven
- L) x- `  u) z8 P( b) Y; j8 u; Rmonth: 全拼的月 november  中文:11月
0 V5 C, Y. i. ^' rmm:  两位数字月 115 ?4 a0 W; a- f
mon:简拼的月 nov$ H) O, S% n6 y  y; Q# p+ P
dd:两位数字日
, q# E) m' B8 W( b# r- G7 Hday:全拼的星期 tuesday. b" [3 T; e, @0 L+ i. V( h: Z
dy: 简拼的星期 tue0 z% J. Y+ r) D: ]
am: 上午/下午 am/pm
" b  z+ _. D" K0 j+ k
2 |" t$ w' M) u8 e" Vsqlplus中日期的默认格式是:DD-MON-RR! N% H& Q0 `: m1 F
现在的时间是2011年
. ?3 E! h' B) n. C. ?% P7 I& d. M           YY           RR) r+ X+ f7 E( g! }  Z! C# y
05年      2005         2005
* \8 }- B& R1 r8 _& P98年      2098         19985 o" Y- f9 n3 H8 T* _/ G: V

" r- Z3 `% X2 g" l+ S! Y假设现在的时间是1998年- W* G' K2 g- m! t. P
05年      1905         2005( Q' H4 y( m& L' m
95年      1995         1995 4 n( E0 J. Q8 @6 t+ R' c4 b* B. _

" `3 u  }3 k+ X/ N3 ~3 winsert into emp_ning(empno, ename, hiredate)6 k" m. Q5 S  E& Y3 }2 E3 ]+ h
values(1012, 'amy', sysdate);
. K, `" ]* c' K# e1 i--实际入职时间是2011-10-10
' r. y, N) x4 ]7 m+ R% Xinsert into emp_ning(empno, ename, hiredate)
- G0 G) Q* L& P1 |values(1012, 'amy', '10-OCT-11');
' a9 K1 a' u& c( H+ u/ M# b/ e& E
insert into emp_ning(empno, ename, hiredate)
! O9 y) G( u/ o6 _* D7 }values(1012, 'amy',
' A+ ?0 J2 g2 ?2 Eto_date('2011-10-10','yyyy-mm-dd'));
, F6 p5 b; C' W8 d
, c1 T' B5 C5 y; M6 v" @8 y  b显示员工姓名和入职时间,显示格式为:
) V/ W. ~) ~# D. D( r8 e6 Lamy   2011-10-10
) ?+ K8 }0 s: N
& |; J$ C% Y$ Y8 K2 M2 `         to_date+ Y) K# X; y, ^# _, c
字符串   --------->   日期; {0 T& h% t# x( ^# _% V
         <---------
* F0 f  J9 r* n" v, V+ c" L5 W/ G         to_char+ p  s2 F% [* O) x" W/ k8 M
* U/ y7 m$ j( z9 ~  S4 R
3.计算员工入职多少天?
0 J! H) R3 Q4 K7 Mselect ename, hiredate, (sysdate - hiredate) days5 ~0 j# n/ z8 U" H
from emp;9 l8 ^% L! D& n1 Q. a: y0 w
& P$ D. V) e' I3 f5 b; O. v' {& [
日期数据相减,得到两个日期之间的天数差。" p1 I5 P% t; E& }
不足一天用小数表示。* v) v. d' F+ G3 e/ r/ F/ R: ^
* w! j1 Q5 B6 \# `* _: M
select ename, hiredate,
' U1 j  W2 f0 Q- U) k; Mround(sysdate - hiredate) days
+ A( C9 ]$ }) V- l5 b7 ~& `from emp;9 {8 Z. D% u# x& u
+ g. d  r: y. f
4.计算员工入职多少个月?用整数表示。
& z0 o9 @; z1 x1 [0 Iselect ename, hiredate,! [9 E7 A: J5 G; s, e
months_between(sysdate, hiredate) months2 V' E! d8 L1 Y) m7 n( [
from emp_ning;: @. e7 t& |! U6 c. Q" T5 B
- v* F1 Y9 C; p% G/ d
select ename, hiredate,4 O" W# y: e2 I5 T* D3 t
round(months_between(sysdate, hiredate)) months# e1 l+ m- G5 s% O, V! J0 V# J
from emp_ning;
1 p$ U/ m% G. a
1 t3 G) ~* S( c1 }! \f3(f2(f1(p1,p2),p3),p4) : 函数的嵌套
5 B9 U6 c/ q" |0 w& w+ F, A7 J+ X, _4 V" I' O6 K$ {
5.计算员工的年终奖金
& I7 Q+ q; H2 ?1 sbonus不是null,发bonus的数字。
7 ]4 A0 P& E) x1 ^$ Pbonus是null,发salary * 0.5.% Y. a: h; K! B5 X
salary还是null, 100.
) w' Z- J' _# H) K( G  j! P
% w1 l4 t! y1 R; |4 dpublic double calculate(double bonus,
# b# Q0 d. \" v# A$ b                        double salary," e! s) b' t* s+ T1 [# B
                        double comm){8 t  e% R8 L& Z1 i7 M0 Y
        if (bonus != null) return bonus;
+ u1 U( F" [! J        if (salary != null) return salary * 0.5;1 C: t6 F5 y/ |7 B5 s6 Z
        return comm;                        
) A! l+ w0 ~1 D; R( D7 ]5 O}
, B8 G  P0 \9 o* ^9 q5 A  s--返回参数列表中第一个非空数据' n: @# _1 @7 f% d) |
--最后一个参数通常是常量。6 Q! @3 C+ q% S2 d7 k, A2 n3 T8 Y
select ename, bonus, salary, 7 a; s% z+ |% p, n. O# }1 W
coalesce(bonus, salary*0.5, 100) bonus
0 {4 [1 C/ T) r1 {/ v. n7 Xfrom emp_ning;1 [. C% b5 h. Y4 k3 O
# O, }  d& @& ~
6.根据员工的职位,计算加薪后的薪水数据:- h3 p+ u5 v: ?7 |2 \- i* o: G
Analyst: 10%9 }6 I: g2 D2 J! @, ?
Programmer: 5%
& [- x4 R2 P3 H4 K8 E# Fclerk: 2%
, F% t# G3 B; ?* B: t4 w其他职位:不变。
) l% K# E( M5 U  i3 f8 f7 ?: k( {' W3 K2 m4 _+ y. i3 i5 M
case语句:
* u9 _* m3 O1 Z; V* W2 y3 `: p/ cselect ename, salary, job,
  C1 g, W  e7 O) e# Z3 ~case job when 'Analyst' then salary * 1.1
$ O6 a2 R3 t+ W; @3 F8 a7 F         when 'Programmer' then salary * 1.05
9 |9 b5 ?  s; q. g4 P4 g& t1 r% s         when 'clerk' then salary * 1.02
& y# R2 g2 L/ q( c1 Velse salary
1 H" @# u! K6 h0 k" H( Kend new_salary
# [0 C3 Y' g: a* }8 h/ Ffrom emp_ning;1 s0 |2 V; G7 i% V" o

: l4 f) Z. c  O2 @0 f2 g& `select ename, salary, job,
- k3 ^- y% Y% o% l. ddecode(job, 'Analyst', salary * 1.1,
9 H; T4 z. t0 D* L            'Programmer', salary * 1.05,! @/ Q6 _/ _" B, z) z8 G- D, |
            'clerk', salary * 1.02,. \$ X* t6 g& F7 _: }
            salary) new_salary" i. Q/ Y4 F- W0 [
from emp_ning;
! v0 K% c5 R4 v9 S; c9 P+ B7 n- `: s* q# J3 Q
7.薪水由低到高排序
/ x& L# H7 a" i8 R) M' x5 _. aselect ename, salary from emp_ning
* N3 f. z1 p& x4 W6 e; rorder by salary;, Q" y* D1 ^; @' d
% |6 ^/ V# }- v# q; \' s  Q
select ename, salary from emp_ning
! h2 T, \2 w, ^# ^2 {2 Y: t: aorder by salary desc;  --倒序排列 descend' e1 k- R9 b8 U& y& r' L  E
# H2 [" Y. O4 d  d2 i
desc emp_ning; --查看表结构 describe
# a* U, m, s7 i) O
+ T) ~/ |% X2 P# _) w8.按入职时间排序,入职时间越早排在前面。0 V& v+ m% g% i8 y0 D3 c1 Z  M
select ename, hiredate, D' q) _) T+ F" Z' o
from emp_ning
' U# \6 }0 w* m+ }order by hiredate;
3 {) T0 r7 R/ M1 a" n
7 q7 l: N% I2 T6 J, C! \: `9.按部门排序,同一部门按薪水由高到低排序
" [) K  {( J; w  ~+ Z7 m% z" L8 \8 Qselect ename, deptno, salary
1 Q! l% X$ ]$ c  D6 mfrom emp_ning9 e4 h5 n) Y1 J5 m  T
order by deptno, salary desc;0 Q# I) x! d# n( x

( o" y3 L3 N* F4 Z$ H2 O1 C) E10.员工表中有多少条记录?
# n/ e7 r! O. W; |! Z- Aselect count(*) from emp_ning;
8 m8 U: n  H$ m6 N$ y2 V1 ]0 W- J( |1 x9 w
openlab帐户下有多少个表?
$ i: ?8 ~. E, P2 Zselect count(*) from user_tables;* k: G3 h6 ?2 d

% S- D8 a7 d6 \1 P: Dopenlab帐户下有多少个名字中包含emp的表?
4 }: ^) @' f% jselect count(*) from user_tables
! `" Y* l% h1 p* |. J/ C" y5 Lwhere table_name like '%emp%';% A9 P$ N' U& E, s8 L/ g8 A7 K$ f" r; x

/ Y/ `* I' q, u" W5 U8 Q# q. {. p--表名默认大写
  U/ B( ?: m6 fselect count(*) from user_tables, X% }, ?6 X0 N- V
where table_name like '%EMP%';" E5 x5 t, K( c3 k- }) ~

4 F, f0 j3 N! ~, i1 h) t  R--入职时间不是null的数据总数。
! F% k; N5 D! ]/ i0 [, m+ t& o8 c7 x--count函数忽略空值。% m0 l8 b" U3 c7 K
select count(hiredate) from emp_ning;4 s$ c* e& _" V: K

. _: A; Q$ S3 H1 R; i11.计算员工的平均薪水和薪水总和是多少?
$ k5 v8 h% L+ K; ?2 b$ zselect avg(salary) avg_sal,
: r6 j4 J4 ?+ m) G# I& {       sum(salary) sum_sal6 @/ @& f  D) I0 v4 k" N
from emp_ning;
% M( {" U5 k- d! v/ f* W+ y8 O
% k% N6 i, N8 a# u  t3 Ravg(salary) = sum(salary) / count(salary) 1 c# p6 k& I" i$ o1 O9 t
              68500 / 10 = 68502 H- S: s4 B" C5 j2 H3 T; y& |3 R
--纠正逻辑上的错误
9 \! Q$ U1 B5 x3 n% B& Tselect sum(salary)/count(*) avg_sal, " G9 a3 g7 f) |6 H3 R" b
       sum(salary) sum_sal( K/ E! ?2 d+ u9 k$ f
from emp_ning;
3 w9 |; w4 @- _. }2 L  g
4 e. ?  r7 {4 L! [select avg(nvl(salary,0)) avg_sal,
2 a0 @) y. @$ a9 }/ g0 T) \0 Z       sum(salary) sum_sal, Z+ ~/ w$ k( k
from emp_ning;
' w; ^' e3 m- f3 @9 w
; O! F/ Z5 ^( b, f12.计算员工的最高薪水和最低薪水
% E/ |; q! V5 j' o9 n9 {0 ^select max(salary) max_sal,
7 L+ X& L7 e9 w. q       min(salary) min_sal
1 X; t7 W1 r: g) w& k4 ?9 v9 Kfrom emp_ning;+ t9 B3 p3 w2 J2 }
4 Q+ M3 n! G9 v1 m
组函数:count / avg / sum / max / min 忽略空值8 T' g! N' e; h9 s4 s  u
其中:avg / sum 针对数字的操作。) H: T$ A; l2 m' @0 f# ]
      max / min 对所有数据类型都可以操作。, Q# k+ c* i9 U2 K" e9 ~0 d
% d; E$ q; n5 l8 b) V2 g* J) f
13.计算最早和最晚的员工入职时间。$ D0 P: W8 {9 U( D4 i3 W; a% E9 j
select max(hiredate) max_hiredate,- S' p* z3 Y+ f" g& g1 u, K" L, }
       min(hiredate) min_hiredate' T9 O) [# F3 x. K, e+ b; T- U
from emp_ning;' ^3 A2 ~! j. X& g

, K( T- H+ [( |+ O* v7 B/ s$ B  l0 ?7 A9 r14.按部门计算每个部门的最高和最低薪水分别是多少?' W1 J# p3 P- |1 J
格式如下:
5 E8 a& L5 Z# @8 J) ]: V; I10 4500   3000
  ]0 g$ M! `# K' x! l! [20 15000  80008 |6 V5 |) N8 Z) D0 `
30 10000  5000; @8 ~' k$ M7 {: n. h% @7 e$ w

4 a7 x: U) H2 h# x--group by 列名 : 表示按哪个列分组
3 x- C; V! x/ R6 bselect deptno, max(salary) max_s, min(salary) min_s( E4 l) G  o* E) e/ a$ l
from emp_ning
" E" t+ o) g  @! `5 Y( v- s0 Ngroup by deptno;, }2 ?4 ]# Y' H7 q) Q

2 x2 p4 m+ l1 O1 ?! \1 _4 X. O15.计算每个部门的薪水总和和平均薪水?
! G" }) h& b9 b4 F! y) t7 dselect deptno, sum(salary) sum_s,+ \" [' |( ?* g# L5 z, Y) v
               avg(nvl(salary,0)) avg_s
. b1 ?9 U1 N1 o) Ufrom emp_ning7 M# X- g2 z! G0 O+ R; A
group by deptno;
  l7 L$ a8 c, H3 {& v
# w/ l; R- u  Z; E$ d16.每个部门的统计信息:格式如下:
4 r5 E: G$ G( p" m4 G& t: Ddeptno max_s min_s sum_s avg_s emp_num
- Y* a+ j8 Q5 F. y. w10     10000 5000  23000  6789       3, L! [" r8 Y2 ~+ n
....) P/ H  m8 P; _- K$ K# R( h1 C4 J
select deptno, max(salary) max_s,: ^! J; T4 b9 G' t1 ]$ j
               min(salary) min_s,
- N/ N0 E6 j# ^               sum(salary) sum_s,8 F. C, b, r8 t$ U  |$ }3 K5 P
               avg(nvl(salary,0)) avg_s,2 r9 s, v1 b! G" M  ]
               count(*) emp_num
+ B! B* O5 A# ^$ R6 i9 ]* [7 ^from emp_ning
1 g# F6 Y* A+ j6 ygroup by deptno;
4 C4 k& k) i$ ]7 m/ n8 z# U' T+ z% c8 D, ~5 b
select后出现的列,凡是没有被组函数处理的列,必须
/ I) i- V& |8 }( ]出现在group by 短语中。
, Y4 b, T! `  g& H4 V0 D& s6 ~3 h4 O! `0 {* a( I0 @
按职位分组,每个职位的最高、最低薪水和人数?/ Y1 v" {2 ]1 M. z" _) F
select job, max(salary) max_s,1 ?) s1 q" Q* F( G; Y* M8 H
            min(salary) min_s,- ^3 p) h+ u! o1 h1 {) o# g
            count(*) emp_num
1 t4 [$ P1 F; ?0 O9 l! vfrom emp_ning
$ X9 o- c3 X( A- j! xgroup by job; Y( ~: ]7 H& q9 g8 X# {$ H! `; `& |
order by emp_num;$ ^! D0 t* c' E! L  S
17.平均薪水大于5000元的部门数据?
3 F# g) O: ~: B0 ^select deptno, avg(nvl(salary,0)) avg_s" @" p; u. D$ Q2 E4 V
from emp_ning
% ^: C/ Q$ M* N- G4 nwhere deptno is not null
4 L7 R5 H. h) c1 Ggroup by deptno9 |7 b6 @8 V' h+ k9 i
having avg(nvl(salary,0)) > 5000;
, p9 I  u3 J% `3 ]4 W6 G0 }1 U$ K: _; |5 {& }0 I7 @, f
18.薪水总和大于20000元的部门数据?- l3 I& {& F' C+ \4 \- L5 T- ^
select deptno, sum(salary) sum_s
0 y) f4 j7 ?, l% r8 S2 y/ u' f* F, Ffrom emp_ning0 k1 _3 \5 L/ r" M
where deptno is not null! Y. E5 X9 a' ^( g3 R4 L' b! `
group by deptno
, z* N% k) C/ o! f% ?* ahaving sum(salary) > 20000;/ U8 O+ h" L3 |# s1 }9 Z

+ e9 p2 d) G: C* s19.哪些职位的人数超过2个人?
! F% F8 K' u( N$ C0 yselect job, count(*) emp_num, L2 u, A- c; M, _1 f+ }; }
from emp_ning) y/ y  q1 `; c1 r( K4 U- W6 P
where job is not null
6 C: F( F8 l- ^& jgroup by job
* e; u2 N1 H4 F5 Z# h# f) dhaving count(*) > 2
; J- G: G* f4 _' J- xorder by emp_num;: ~6 \3 T% b* m7 F

- [) [" R$ p& H: j6 m- f2 r# @

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


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

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

   

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